(57)【特許請求の範囲】
【請求項１】
ライセンスファイル発行装置と、セキュリティファイル発行装置と、セキュリティコード登録装置と、支援ローダと、制御装置とを含む制御システムであって、
前記ライセンスファイル発行装置は、
記録媒体から、該記録媒体の固有識別子を取得する識別子取得手段と、
前記固有識別子と、ライセンスファイルの有効期限情報とを含むライセンスファイルを生成するライセンスファイル生成手段と、を有し、
前記セキュリティファイル発行装置は、
第１のセキュリティコードを含むセキュリティファイルを生成するセキュリティファイル生成手段を有し、
前記セキュリティコード登録装置は、
前記セキュリティファイルから取得した前記第１のセキュリティコードを所定のアルゴリズムにより第２のセキュリティコードに変換するコード変換手段と、
前記第２のセキュリティコードを含むセキュリティ情報を前記制御装置に登録するセキュリティ情報登録手段と、を有し、
前記支援ローダは、
前記第１のセキュリティコードと所定のプログラムコードとを含むユーザプログラムを作成するプログラム作成手段を有し、
前記制御装置は、
前記ユーザプログラムを格納した第１メモリと、
前記セキュリティ情報登録手段により登録された前記第２のセキュリティコードを含むセキュリティ情報を格納した第２メモリと、
前記ライセンスファイルが格納された記録媒体から、該記録媒体の固有識別子を取得する識別子取得手段と、
前記ライセンスファイルから取得した固有識別子と、前記識別子取得手段により取得した固有識別子とを比較し、一致した場合、且つ、前記ライセンスファイルから取得した有効期限情報と、現在日時刻とを比較し、該ライセンスファイルが有効期間内である場合、前記第１メモリに格納された前記ユーザプログラムに対する実行権限有りと判定するライセンスファイル認証手段と、
前記第１メモリに格納された前記ユーザプログラムの実行を許可する実行許可手段と、
前記実行許可手段により実行が許可された前記ユーザプログラムを実行するプログラム実行手段と、を有し、
前記実行許可手段は、前記ライセンスファイル認証手段で実行権限有りと判定され、前記第１メモリに格納された前記ユーザプログラムに前記所定のプログラムコードが含まれるとき、前記ユーザプログラムに含まれる第１のセキュリティコードを前記所定のアルゴリズムにより変換し、変換された該セキュリティコードと、前記第２メモリに格納されたセキュリティ情報から取得した第２のセキュリティコードとを比較し、一致した場合、前記ユーザプログラムの実行を許可すること、
を特徴とする制御システム。
【請求項２】
前記ライセンスファイル認証手段は、前記ライセンスファイルから取得した固有識別子と、前記識別子取得手段により取得した固有識別子とを比較し、一致しない場合、又は、前記ライセンスファイルから取得した有効期限情報と、現在日時刻とを比較し、該ライセンスファイルが有効期間内でない場合、前記第１メモリに格納された前記ユーザプログラムに対する実行権限無しと判定し、
前記プログラム実行手段は、前記実行権限無しと判定された場合、前記第１メモリに格納された前記ユーザプログラムの実行を禁止すること、
を特徴とする請求項１記載の制御システム。
【請求項３】
前記プログラム実行手段は、前記実行権限無しと判定された場合、前記第１メモリに格納された前記ユーザプログラムの実行を、即時禁止する、又は、一定期間経過後に禁止すること、
を特徴とする請求項２記載の制御システム。
【請求項４】
前記ライセンスファイル生成手段は、前記固有識別子と、前記有効期限情報とからハッシュ値を算出し、該ハッシュ値を含むライセンスファイルを生成し、
ライセンスファイル認証手段は、前記ライセンスファイルから取得した前記固有識別子と、前記有効期限情報とからハッシュ値を算出し、算出した該ハッシュ値と、前記ライセンスファイルから取得したハッシュ値とを比較し、一致した場合、前記第１メモリに格納された前記ユーザプログラムに対する実行権限有りとの前記判定を行うこと、
を特徴とする請求項１ないし３何れか一項記載の制御システム。
【請求項５】
ライセンスファイル認証手段は、前記ライセンスファイルから取得した前記固有識別子と、前記有効期限情報とからハッシュ値を算出し、算出した該ハッシュ値と、前記ライセンスファイルから取得したハッシュ値とを比較し、一致しない場合、前記第１メモリに格納された前記ユーザプログラムに対する実行権限無しと判定すること、
を特徴とする請求項４記載の制御システム。
【請求項６】
第１のセキュリティコードと所定のプログラムコードとを含むユーザプログラムを格納した第１メモリと、
セキュリティコード登録装置により前記第１のセキュリティコードを所定のアルゴリズムで変換し登録された第２のセキュリティコード含むセキュリティ情報を格納した第２メモリと、
ライセンスファイル発行装置により発行されたライセンスファイルを格納した記録媒体の固有識別子と、ライセンスファイルの有効期限情報とを含むライセンスファイルが格納された記録媒体から、該記録媒体の固有識別子を取得する識別子取得手段と、
前記ライセンスファイルから取得した固有識別子と、前記識別子取得手段により取得した固有識別子とを比較し、一致した場合、且つ、前記ライセンスファイルから取得した有効期限情報と、現在日時刻とを比較し、該ライセンスファイルが有効期間内である場合、前記第１メモリに格納された前記ユーザプログラムに対する実行権限有りと判定するライセンスファイル認証手段と、
前記第１メモリに格納された前記ユーザプログラムの実行を許可する実行許可手段と、
前記実行許可手段により実行が許可された前記ユーザプログラムを実行するプログラム実行手段と、を有し、
前記実行許可手段は、前記ライセンスファイル認証手段で実行権限有りと判定され、前記第１メモリに格納された前記ユーザプログラムに前記所定のプログラムコードが含まれるとき、前記ユーザプログラムに含まれる第１のセキュリティコードを前記所定のアルゴリズムにより変換し、変換された該セキュリティコードと、前記第２メモリに格納されたセキュリティ情報から取得した第２のセキュリティコードとを比較し、一致した場合、前記ユーザプログラムの実行を許可すること、
を特徴とする制御装置。
【請求項７】
前記ライセンスファイル認証手段は、前記ライセンスファイルから取得した固有識別子と、前記識別子取得手段により取得した固有識別子とを比較し、一致しない場合、又は、前記ライセンスファイルから取得した有効期限情報と、現在日時刻とを比較し、該ライセンスファイルが有効期間内でない場合、前記第１メモリに格納された前記ユーザプログラムに対する実行権限無しと判定し、
前記プログラム実行手段は、前記実行権限無しと判定された場合、前記第１メモリに格納された前記ユーザプログラムの実行を禁止すること、
を特徴とする請求項６記載の制御装置。
【請求項８】
前記プログラム実行手段は、前記実行権限無しと判定された場合、前記第１メモリに格納された前記ユーザプログラムの実行を、即時禁止する、又は、一定期間経過後に禁止すること、
を特徴とする請求項７記載の制御装置。
【請求項９】
前記ライセンスファイル生成手段は、前記固有識別子と、前記有効期限情報とからハッシュ値を算出し、該ハッシュ値を含むライセンスファイルを生成し、
ライセンスファイル認証手段は、前記ライセンスファイルから取得した前記固有識別子と、前記有効期限情報とからハッシュ値を算出し、算出した該ハッシュ値と、前記ライセンスファイルから取得したハッシュ値とを比較し、一致した場合、前記第１メモリに格納された前記ユーザプログラムに対する実行権限有りとの前記判定を行うこと、
を特徴とする請求項６ないし８何れか一項記載の制御装置。
【請求項１０】
ライセンスファイル認証手段は、前記ライセンスファイルから取得した前記固有識別子と、前記有効期限情報とからハッシュ値を算出し、算出した該ハッシュ値と、前記ライセンスファイルから取得したハッシュ値とを比較し、一致しない場合、前記第１メモリに格納された前記ユーザプログラムに対する実行権限無しと判定すること、
を特徴とする請求項９記載の制御装置。
【請求項１１】
ライセンスファイル発行装置は、
記録媒体から、該記録媒体の固有識別子を取得し、
前記固有識別子と、ライセンスファイルの有効期限情報とを含むライセンスファイルを生成し、
セキュリティコード登録装置は、
第１のセキュリティコードを所定のアルゴリズムにより変換した第２のセキュリティコードを含むセキュリティ情報を作成して制御装置に入力し、
支援ローダは、
所定のプログラムコードと前記第１のセキュリティコードとを含むユーザプログラムを作成して前記制御装置に入力し、
前記制御装置は、
ライセンスファイル発行装置により発行されたライセンスファイルを格納した記録媒体の固有識別子と、ライセンスファイルの有効期限情報とを含むライセンスファイルが格納された記録媒体から、該記録媒体の固有識別子を取得し、
前記ライセンスファイルから取得した固有識別子と、前記識別子取得手段により取得した固有識別子とを比較し、一致した場合、且つ、前記ライセンスファイルから取得した有効期限情報と、現在日時刻とを比較し、該ライセンスファイルが有効期間内である場合、前記第１メモリに格納された前記ユーザプログラムに対する実行権限有りと判定し、
前記ユーザプログラムに前記所定のプログラムコードが含まれるとき、前記支援ローダから入力された前記第１のセキュリティコードを前記所定のアルゴリズムにより変換し、変換された該セキュリティコードと前記第２のセキュリティコードとが一致することを条件に、前記ユーザプログラムの実行を許可すること、
を特徴とするプログラム実行制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの実行を制御する制御装置及び制御システムに関し、特に、ＰＬＣ（Programmable Logic Controller）上で実行されるＰＬＣプログラムの実行を制御する制御システム、制御装置及び制御方法に関する。
【背景技術】
【０００２】
従来より、ＦＡ（Factory Automation）等における工業用汎用コンピュータとして、プログラマブルコントローラ（Programmable Logic Controller：以下ＰＬＣという）が用いられている。ＰＬＣが制御対象機器に対しシーケンス制御を行なう場合、例えば、ユーザは、制御対象機器のセンサやスイッチ等の検出部をＰＬＣの入力端子に接続し、制御対象機器のモータ等の動作装置をＰＬＣの出力端子に接続する。そして、ＰＬＣは、実行する制御プログラムに従って、入力端子への入力信号に応じた出力信号を出力端子から出力することによって、制御対象機器を制御する。
【０００３】
ここで、ＰＬＣ上で実行されるプログラムの不正使用を防止する技術については、例えば、特許文献１、２などが知られている。特許文献１、２には、特定の制御装置上でのみ制御プログラムが動作できるようにすることにより、制御プログラムの不正利用防止を実現する制御装置が記載されている。
【０００４】
より具体的に、特許文献１記載の制御装置は、制御プログラム内に、実行を許可する特定のＰＬＣの固有値（例えばシリアルＩＤ）に基づく認証ラダーを埋め込んでおく。そして、制御プログラムを特定のＰＬＣ上で動作させる際、認証ラダーを使用して認証を行う。制御装置は、認証が成功した場合にのみ、その制御プログラムの実行を許可するので、仮に制御プログラムが流出したとしても、制御プログラムは、他の制御装置上では動作しない。これにより、プログラムの不正使用を防止することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−１６５０４１号公報
【特許文献２】特開２００９−７０１４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ここで、制御装置が故障した場合、故障した制御装置が修理されている間は工場の生産活動が停止してしまうことから、保守員等が代替機を一時的に設置することにより、工場の生産活動を継続させる手法が採られることがある。
【０００７】
しかしながら、特許文献１、２に記載される発明においては、シリアルＩＤなど、制御装置の固有値に基づく認証情報を使用して認証を行い、認証が成功した場合にのみ、その制御プログラムの実行を許可するものである。従って、制御装置が故障した場合、故障した制御装置で使用していた制御プログラムを代替機でそのまま使用することはできない。この場合、制御プログラム内に代替機の固有値（例えばシリアルＩＤ）に基づく認証ラダーを埋め込むことにより、新たに代替機用の制御プログラムを再度作り直さなくてはならず（コンパイル等）、制御装置の復旧、即ち、工場の生産活動再開までに時間を要するという問題があった。
【０００８】
本発明は、このような課題を解決するためのものであり、制御プログラムの運用・保守性に配慮しつつ、ＰＬＣ上で動作する制御プログラムに対するセキュリティの観点から制御プログラムの不正使用を防止する制御システム、制御装置及びプログラム実行制御方法を提供することを主たる目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決するために、本発明は、以下の課題を解決するための手段を採用している。
【００１０】
本発明の一態様における制御システムは、ライセンスファイル発行装置と、セキュリティファイル発行装置と、セキュリティコード登録装置と、支援ローダと、制御装置とを含む制御システムであって、前記ライセンスファイル発行装置は、記録媒体から、該記録媒体の固有識別子を取得する識別子取得手段と、前記固有識別子と、ライセンスファイルの有効期限情報とを含むライセンスファイルを生成するライセンスファイル生成手段と、を有し、前記セキュリティファイル発行装置は、第１のセキュリティコードを含むセキュリティファイルを生成するセキュリティファイル生成手段を有し、前記セキュリティコード登録装置は、前記セキュリティファイルから取得した前記第１のセキュリティコードを所定のアルゴリズムにより第２のセキュリティコードに変換するコード変換手段と、
前記第２のセキュリティコードを含むセキュリティ情報を前記制御装置に登録するセキュリティ情報登録手段と、を有し、前記支援ローダは、前記第１のセキュリティコードと所定のプログラムコードとを含むユーザプログラムを作成するプログラム作成手段を有し、前記制御装置は、前記ユーザプログラムを格納した第１メモリと、前記セキュリティ情報登録手段により登録された前記第２のセキュリティコードを含むセキュリティ情報を格納した第２メモリと、前記ライセンスファイルが格納された記録媒体から、該記録媒体の固有識別子を取得する識別子取得手段と、前記ライセンスファイルから取得した固有識別子と、前記識別子取得手段により取得した固有識別子とを比較し、一致した場合、且つ、前記ライセンスファイルから取得した有効期限情報と、現在日時刻とを比較し、該ライセンスファイルが有効期間内である場合、前記第１メモリに格納された前記ユーザプログラムに対する実行権限有りと判定するライセンスファイル認証手段と、前記第１メモリに格納された前記ユーザプログラムの実行を許可する実行許可手段と、前記実行許可手段により実行が許可された前記ユーザプログラムを実行するプログラム実行手段と、を有し、前記実行許可手段は、前記ライセンスファイル認証手段で実行権限有りと判定され、前記第１メモリに格納された前記ユーザプログラムに前記所定のプログラムコードが含まれるとき、前記ユーザプログラムに含まれる第１のセキュリティコードを前記所定のアルゴリズムにより変換し、変換された該セキュリティコードと、前記第２メモリに格納されたセキュリティ情報から取得した第２のセキュリティコードとを比較し、一致した場合、前記ユーザプログラムの実行を許可する。
【００１１】
また、本発明の一態様における制御装置は、第１のセキュリティコードと所定のプログラムコードとを含むユーザプログラムを格納した第１メモリと、セキュリティコード登録装置により前記第１のセキュリティコードを所定のアルゴリズムで変換し登録された第２のセキュリティコード含むセキュリティ情報を格納した第２メモリと、ライセンスファイル発行装置により発行されたライセンスファイルを格納した記録媒体の固有識別子と、ライセンスファイルの有効期限情報とを含むライセンスファイルが格納された記録媒体から、該記録媒体の固有識別子を取得する識別子取得手段と、前記ライセンスファイルから取得した固有識別子と、前記識別子取得手段により取得した固有識別子とを比較し、一致した場合、且つ、前記ライセンスファイルから取得した有効期限情報と、現在日時刻とを比較し、該ライセンスファイルが有効期間内である場合、前記第１メモリに格納された前記ユーザプログラムに対する実行権限有りと判定するライセンスファイル認証手段と、前記第１メモリに格納された前記ユーザプログラムの実行を許可する実行許可手段と、前記実行許可手段により実行が許可された前記ユーザプログラムを実行するプログラム実行手段と、を有し、前記実行許可手段は、前記ライセンスファイル認証手段で実行権限有りと判定され、前記第１メモリに格納された前記ユーザプログラムに前記所定のプログラムコードが含まれるとき、前記ユーザプログラムに含まれる第１のセキュリティコードを前記所定のアルゴリズムにより変換し、変換された該セキュリティコードと、前記第２メモリに格納されたセキュリティ情報から取得した第２のセキュリティコードとを比較し、一致した場合、前記ユーザプログラムの実行を許可する。
【００１２】
また、本発明の一態様におけるプログラム実行制御方法は、ライセンスファイル発行装置は、記録媒体から、該記録媒体の固有識別子を取得し、前記固有識別子と、ライセンスファイルの有効期限情報とを含むライセンスファイルを生成し、セキュリティコード登録装置は、第１のセキュリティコードを所定のアルゴリズムにより変換した第２のセキュリティコードを含むセキュリティ情報を作成して制御装置に入力し、支援ローダは、所定のプログラムコードと前記第１のセキュリティコードとを含むユーザプログラムを作成して前記制御装置に入力し、前記制御装置は、ライセンスファイル発行装置により発行されたライセンスファイルを格納した記録媒体の固有識別子と、ライセンスファイルの有効期限情報とを含むライセンスファイルが格納された記録媒体から、該記録媒体の固有識別子を取得し、前記ライセンスファイルから取得した固有識別子と、前記識別子取得手段により取得した固有識別子とを比較し、一致した場合、且つ、前記ライセンスファイルから取得した有効期限情報と、現在日時刻とを比較し、該ライセンスファイルが有効期間内である場合、前記第１メモリに格納された前記ユーザプログラムに対する実行権限有りと判定し、前記ユーザプログラムに前記所定のプログラムコードが含まれるとき、前記支援ローダから入力された前記第１のセキュリティコードを前記所定のアルゴリズムにより変換し、変換された該セキュリティコードと前記第２のセキュリティコードとが一致することを条件に、前記ユーザプログラムの実行を許可する。
【００１３】
なお、本発明の構成要素、表現または構成要素の任意の組合せを、装置、方法、コンピュータプログラム、記録媒体、などに適用したものも本発明の態様として有効である。
【発明の効果】
【００１４】
本発明の実施形態によれば、制御プログラムの運用・保守性に配慮しつつ、ＰＬＣ上で動作する制御プログラムに対するセキュリティの観点から制御プログラムの不正使用を防止する制御システム、制御装置及びプログラム実行制御方法を提供することができる。
【図面の簡単な説明】
【００１５】
【図１】本実施形態１に係る制御システム構成図（概略図）の一例を示す。
【図２】本実施形態１に係る制御システム構成図の機能構成例である。
【図３】本実施形態１に係るセキュリティファイル発行装置の操作画面例（その１）を示す。
【図４】本実施形態１に係るセキュリティファイル発行装置の操作画面例（その２）を示す。
【図５】本実施形態１に係るセキュリティコード登録装置の操作画面例を示す。
【図６】本実施形態１に係る支援ローダのプログラミングエディタ画面例を示す。
【図７】本実施形態１に係る情報処理１の流れを示すシーケンス図である。
【図８】本実施形態１に係る情報処理２の流れを示すシーケンス図である。
【図９】本実施形態１に係るプログラム実行部２０５のＰＬＣプログラム実行制御処理の流れを示すフローチャートである。
【図１０】本実施形態１に係るＳＦＢ機能部２０６のセキュリティコードチェック処理の流れを示すフローチャートである。
【図１１】本応用例に係る制御システム構成図の機能構成例である。
【図１２】「有効位置情報」の指定例を示す。
【図１３】本応用例に係るＳＦＢ機能部２０６のセキュリティコードチェック処理の流れを示すフローチャートである。
【図１４】本実施形態２に係る制御システム構成図（概略図）の一例を示す。
【図１５】本実施形態２に係る記録媒体の提供例を示す。
【図１６】本実施形態２に係る制御システム構成図の機能構成例である。
【図１７】本実施形態２に係るライセンスファイル発行装置の操作画面例を示す。
【図１８】本実施形態２に係るライセンスファイル生成処理の流れを示すフローチャートである。
【図１９】本実施形態２に係るライセンスファイル生成処理の流れを示す図である。
【図２０】本実施形態２に係るライセンスファイルの一例を示す。
【図２１】本実施形態２に係るライセンスファイル認証処理の流れを示すフローチャートである。
【図２２】本実施形態２に係るライセンスファイルの改ざん有無確認処理の流れを示すフローチャートである。
【図２３】本実施形態２に係るライセンスファイルの改ざん有無確認処理の流れを示す図である。
【発明を実施するための形態】
【００１６】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【００１７】
＜実施形態１＞
［システム構成］
図１は、本実施形態１に係る制御システム構成図（概略図）の一例を示す。図１に示されるように、本実施形態１に係る制御システムは、支援ローダ１００、ＰＬＣ２００、セキュリティファイル発行装置３００、セキュリティコード登録装置４００を含む。
【００１８】
支援ローダ１００は、ＰＬＣ２００本体で動作するＰＬＣプログラム（制御プログラム）の作成支援用コンピュータ装置である。従って、支援ローダ１００は、ＰＬＣプログラム作成用のプログラミングエディタを備える。プログラミングエディタによって、プログラム作成画面がディスプレイに表示されるので、ユーザは、この画面上で所望のＰＬＣプログラムを開発することができる。また、ユーザにより開発されたＰＬＣプログラムは、支援ローダ１００からＰＬＣ２００に対しダウンロードされる。
【００１９】
ＰＬＣ２００は、ファクトリ・オートメーション（ＦＡ）の制御装置として用いられるプログラマブルコントローラ（Programmable Logic Controller）である。ＰＬＣ２００は、入力モジュールから入力された信号をＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）メモリに取り込み、プログラムメモリ２０１に予め登録されたＰＬＣプログラムに基づき、論理演算を行う。また、その演算結果をＩ／Ｏメモリに書き込んでから出力モジュールに送り出し、その後、いわゆる周辺のシステム処理（ローダ処理、各種システム処理）を実行する。ＰＬＣ２００は、これらの処理を繰り返すことで、対象とする制御機器を制御する。
【００２０】
セキュリティファイル発行装置３００は、セキュリティファイル（Security File）を生成し、出力する端末装置である。このセキュリティファイルは、セキュリティコード登録装置４００が「セキュリティコード（Security Code）」をＰＬＣ２００に登録する際に、用いられる。
【００２１】
セキュリティコード登録装置４００は、「セキュリティコード」や「試用期間」を含むセキュリティ情報を、ＰＬＣ２００に対して登録するための端末装置である。即ち、セキュリティコード登録装置４００は、セキュリティファイル発行装置３００からセキュリティファイルを取得し、そのセキュリティファイルに含まれているセキュリティコードを取り出してＰＬＣ２００に登録する。また、セキュリティコード登録装置４００は、セキュリティコードに加え、ユーザにより入力された試用期間をＰＬＣ２００に登録する。
【００２２】
以上、本実施形態１に係る制御システム構成例である。なお、通常の場合、ＰＬＣ２００が運用中のときは、支援ローダ１００、セキュリティファイル発行装置３００及びセキュリティコード登録装置４００は、ＰＬＣ２００から取り外されて、使用される。また、セキュリティファイル発行装置３００及びセキュリティコード登録装置４００などは、例えば、ＰＬＣプログラムを開発するメーカーが保管・管理し、ユーザ先のＰＬＣ２００が置かれた場所に放置しないことが望ましい。
【００２３】
［機能構成］
図２は、本実施形態１に係る制御システム構成図の機能構成例である。装置毎に順を追って以下説明する。
【００２４】
（セキュリティファイル発行装置）
本実施形態１に係るセキュリティファイル発行装置３００は、セキュリティファイル生成部３０１を含む。セキュリティファイル生成部３０１は、ユーザによりキーボード等（入力部）から入力された「セキュリティコード」（図中、ＳＣ−Ａと示す）を受け取ると、セキュリティコード登録装置３００の公開鍵を用いて、セキュリティファイル（図中、ＳＦと示す）を暗号化し、出力する。セキュリティファイルには、ユーザにより入力された「セキュリティコード」が含まれている。セキュリティコード登録装置４００は、暗号化されたセキュリティファイルを復号することにより、その「セキュリティコード」を取得する。なお、セキュリティコードには、セキュリティコード自体の値に加え、そのセキュリティコードのデータサイズ（例えば６４ｂｉｔ等）を含めることができる。
【００２５】
（セキュリティコード登録装置）
本実施形態１に係るセキュリティコード登録装置４００は、セキュリティファイル取込部４０１、メモリ４０２、セキュリティ情報登録部４０３、コード変換部４０４を含む。
【００２６】
セキュリティファイル取込部４０１は、セキュリティファイル発行装置３００から発行されたセキュリティファイルを取込む。また、セキュリティファイルは暗号化されているので、セキュリティファイル取込部４０１は、上述の公開鍵に対応する秘密鍵を用いて、セキュリティファイルを復号化する。そして、セキュリティファイル取込部４０１は、復号化されたセキュリティファイルから「セキュリティコード」（ＳＣ−Ａ）を抜き出してメモリ４０２に保存する。
【００２７】
セキュリティ情報登録部４０３は、メモリ４０２から「セキュリティコード」を取得する。そして、セキュリティ情報登録部４０３は、コード変換部４０４に対し、その「セキュリティコード」（ＳＣ−Ａ）を異なる「セキュリティコード」（図中、ＳＣ−Ｂ）に変換するよう依頼する。
【００２８】
また、セキュリティ情報登録部４０３は、ユーザから「試用期間」の入力を受付ける。「試用期間」は、ＰＬＣ２００を利用するにあたって、ＰＬＣ２００を、一時的に利用可能な期間を指定するための情報である。「試用期間」の入力方法は、例えば、１０時間、１日、１ヶ月など具体的な期間での入力や、２０１１年３月１日（迄）というように具体的な日付での入力がありうる。そして、セキュリティ情報登録部４０３は、変換された「セキュリティコード」（ＳＣ−Ｂ）と「試用期間」とを含むセキュリティ情報（「セキュリティコード」のみでも可）を生成し、ＰＬＣ２００に対し、そのセキュリティ情報を登録する。セキュリティ情報の登録は、ネットワーク経由又はＵＳＢ（Universal Serial Bus）ポートやシリアルポートなど、ＰＬＣ２００に接続するケーブルを通して、ＰＬＣ２００に対しセキュリティ情報を送信することにより実現される。ＰＬＣ２００は、セキュリティコード登録装置４００（セキュリティ情報登録部４０３）からのみ、セキュリティ情報の登録を受付け、他の装置からのセキュリティ情報の登録は受付けない。なお、セキュリティ情報登録部４０３は、生成したセキュリティ情報をメモリ４０２に保存してもよい。
【００２９】
コード変換部４０４は、セキュリティ情報登録部４０３の依頼に応じて、取得したセキュリティコードを所定のアルゴリズムにより別の異なるセキュリティコードに変換する。本実施形態１では、例えば、「セキュリティコードＡ」（ＳＣ−Ａ）を「セキュリティコードＢ」（ＳＣ−Ｂ）に変換するものとする。
【００３０】
（支援ローダ）
本実施形態１に係る支援ローダ１００は、プログラム作成部１０１、メモリ１０２を含む。
【００３１】
プログラム作成部１０１は、ＰＬＣプログラム作成用のプログラミングエディタにより実現され、ＰＬＣ２００本体で動作するＰＬＣプログラムの作成（作成支援）を行う。プログラム作成部１０１は、ユーザに対しプログラミングエディタや各種ツール等を提供しながら、ユーザ所望のＰＬＣプログラムを作成する。
【００３２】
また、ＰＬＣプログラム作成の際、ユーザが作成中のプログラムを保護したいと考える場合、ユーザは例えば、プログラミングエディタ上から所定操作を行う。プログラム作成部１０１は、この所定操作を受けて、作成中のプログラムに対し、次のような処理を行う。即ち、プログラム作成部１０１は、ＰＬＣプログラムの初期化処理又は実行処理時等に、セキュリティコードチェック用のシステムファンクションブロック（ＳＦＢと称す）を呼び出すようにプログラムコードを作成する。
【００３３】
より具体的には、プログラム作成部１０１は、ＰＬＣ２００でそのＰＬＣプログラムが実行されたときに、セキュリティコードチェック用のＳＦＢ機能部２０６を呼び出すコードを、ユーザ作成のプログラムコードの一部に追加する。また、併せてセキュリティコードチェック用のＳＦＢ２０６用のパラメータとして、「セキュリティコード」を設定しておく。なお、このセキュリティコードは、セキュリティファイル発行装置３００において、ユーザにより入力された「セキュリティコードＡ」（ＳＣ−Ａ）と同一のものを設定する必要がある。
【００３４】
そして、プログラム作成部１０１は、セキュリティコードチェック用のＳＦＢ機能部２０６を呼び出すコードを追加したユーザ作成のプログラムコードのコンパイルを行って、ＰＬＣプログラムを作成する。また、作成したＰＬＣプログラムをメモリ１０２に保存する。また、作成されたＰＬＣプログラムは、ＰＬＣ２００に送信される（ダウンロードされる）。
【００３５】
（ＰＬＣ）
次に、本実施形態１に係るＰＬＣ２００は、セキュリティ情報登録受付部２０１、セキュアメモリ２０２、稼働時間計測部２０３、プログラムメモリ２０４、プログラム実行部２０５、ＳＦＢ機能部２０６（比較照合部２０７、コード変換部２０８を含む）、通知部２０９を含む。
【００３６】
セキュリティ情報登録受付部２０１は、セキュリティコード登録装置４００（セキュリティ情報登録部４０３）からセキュリティ情報を受付けて、受付けたセキュリティ情報をセキュアメモリ２０２に登録（保存）する。セキュリティ情報には、上述の如く、「セキュリティコード」（ＳＣ−Ｂ）と「試用期間」とが含まれているので、これら情報が取り出され、セキュアメモリ２０２に保存される。なお、セキュリティ情報登録受付部２０１は、セキュリティコード登録装置４００（セキュリティ情報登録部４０３）から受付けたセキュリティ情報のみをセキュアメモリ２０２に登録し、他の装置からのセキュリティ情報の登録は受付けない。
【００３７】
セキュアメモリ２０２は、耐タンパー性の高いセキュリティチップやフラッシュメモリにより実現され、アクセスが制限されたメモリである。本実施形態１では、セキュリティ情報登録受付部２０１及び稼働時間計測部２０３のみがセキュアメモリ２０２に対し書き込み権限を有し、また、比較照合部２０７のみがセキュアメモリ２０２に対し読み出し権限を有する。一方、ユーザは、セキュアメモリ２０２に対しアクセスすることはできない。本実施形態１の場合、図２に示されるように、このセキュアメモリ２０２には、「セキュリティコードＢ」、「試用期間」、「稼働時間」が保存される。
【００３８】
稼働時間計測部２０３は、セキュアメモリ２０２に「試用期間」が保存されるタイミングで、ＰＬＣ２００の「稼働時間」の計測を開始する。稼働時間計測部２０３は、ＰＬＣ２００の標準時計（内部時計）とは別途、独立した時計によりＰＬＣ２００の稼働時間の計測を行う。例えば、ＰＬＣのスキャン周期（入力データ読み込みから次の入力データ読み込みまでの期間）をもとにＰＬＣの稼働時間を計測する。独立した時計によりＰＬＣ２００の稼働時間の計測を行う理由は、ユーザの標準時計の時間を戻す行為等による稼働時間の改ざんを防止するためである。このため、ユーザがＰＬＣ２００の標準時計にアクセスすることはできるものの、稼働時間計測部２０３にアクセスすることはできない。稼働時間計測部２０３は、計測した「稼働時間（情報）」を、計測する毎に、セキュアメモリ２０２に逐一保存する。
【００３９】
プログラムメモリ２０４は、支援ローダ１００により作成されたＰＬＣ２００本体で動作させるＰＬＣプログラムを格納するためのメモリである。セキュアメモリ２０２は上述の如くユーザからのアクセスが禁止されているのに対し、プログラムメモリ２０４はユーザからのアクセスが許可されたユーザメモリである。
【００４０】
ユーザは、支援ローダ１００により作成されたＰＬＣプログラムを記録媒体に格納しておき、ＰＬＣプログラムが格納されたその記録媒体を、ＰＬＣ２００のユーザＲＯＭカードスロット２１０に挿入することもできる。この場合、ＰＬＣ２００は、その記録媒体に格納されたＰＬＣプログラムをプログラムメモリ２０４に転送する。
【００４１】
プログラム実行部２０５は、プログラムメモリ２０４に格納されたＰＬＣプログラムを実行する。但し、ＰＬＣプログラムにセキュリティコードチェック用のＳＦＢ機能部２０６を呼び出すコードが含まれている場合、そのコードに従って、ＳＦＢ機能部２０６が呼び出される。そして、プログラム実行部２０５は、ＳＦＢ機能部２０６からＰＬＣプログラムの実行許可を得た場合のみ、ＰＬＣプログラムの実行を継続し、ＰＬＣプログラムの実行不許可を得た場合には、ＰＬＣプログラムの実行を禁止（停止）する。なお、当処理は、ＰＬＣプログラムの実行処理時にのみだけでなく、例えばＰＬＣプログラムの初期化処理時に実施されてもよい。この場合、以後の当該ＰＬＣプログラムの実行を禁止する。
【００４２】
ＳＦＢ機能部２０６は、セキュリティコードチェック用のＳＦＢであって、実行許可部に相当する。具体的には、比較照合部２０７、コード変換部２０８を含む。比較照合部２０７は、プログラム実行部２０５からの呼び出しを受けて、次のような処理を実施する。
【００４３】
まず、比較照合部２０７は、セキュアメモリ２０２に保存されている「試用期間」及び「稼働時間」を取得する。上述の如く、「試用期間」は、ＰＬＣ２００を、一時的に利用可能な期間を指定するための情報であるので、ＰＬＣ２００の「稼働時間」が「試用期間」内である場合、プログラム実行部２０５に対し、セキュリティコードチェックの対象となったＰＬＣプログラムの実行を許可する。
【００４４】
一方、ＰＬＣ２００の「稼働時間」が「試用期間」内でない場合（「稼働時間」が「試用期間」を経過している場合）、プログラム実行部２０５に対し、セキュリティコードチェックの対象となったＰＬＣプログラムの実行を不許可とする（許可しない）。
【００４５】
また、一方、「試用期間」がセキュアメモリ２０２に保存されていない場合、比較照合部２０７は、ＰＬＣプログラムに含まれているセキュリティコードのチェックを実施する。
【００４６】
まず、比較照合部２０７は、セキュリティコードチェックの対象となるＰＬＣプログラムにパラメータとして設定されている「セキュリティコード」（例えばＳＣ−Ａ）を取得する。そして、コード変換部２０８に対し、「セキュリティコード」の変換を依頼する。
【００４７】
コード変換部２０８は、比較照合部２０７の依頼に応じて、「セキュリティコード」を変換する。コード変換部２０８は、セキュリティコード登録装置４００のコード変換部４０４と同一のアルゴリズムによりセキュリティコードに変換する。本実施形態１の場合、「セキュリティコードＡ」は「セキュリティコードＢ」に変換されることになる。コード変換部２０８は、変換後の「セキュリティコード」を比較照合部２０７に渡す。
【００４８】
比較照合部２０７は、変換後の「セキュリティコード」を取得後、今度はセキュアメモリ２０２に保存されている「セキュリティコード」（例えばＳＣ−Ｂ）を取得する。そして、コード変換部２０８により変換された「セキュリティコード」と、セキュアメモリ２０２の「セキュリティコード」とを比較（又は照合）し、両セキュリティコードが一致した場合、プログラム実行部２０５に対し、セキュリティコードチェックの対象となったＰＬＣプログラムの実行を許可する。
【００４９】
一方、両セキュリティコードが一致しない場合、プログラム実行部２０５に対し、セキュリティコードチェックの対象となったＰＬＣプログラムの実行を不許可とする（許可しない）。
【００５０】
通知部２０９は、ＰＬＣプログラムの実行結果をユーザ等に通知する。具体的な通知方法は、各装置のディスプレイ等に通知したり、ログファイルへログ出力する、又は所定の端末へメール等により通知する。
【００５１】
以上、本実施形態１に係る制御システム構成図の機能構成例である。これらの各機能部は、実際には、各装置のＣＰＵが実行するプログラムによりコンピュータに実現させることができる。また、これらの機能ブロックが明確に分離したプログラムによって実現される必要はなく、サブルーチンや関数として他のプログラムから呼び出されるものであってもよい。また、機能ブロックの一部が、ＩＣ（Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）等のハードウエア手段であっても構わない。
【００５２】
また、これらの各機能部に関連するプログラムは、通常のプログラムメモリ２０４領域とは別に、ユーザが直接その領域をアクセスすることができないセキュリティが強化された領域（図示せず）に保存されている。
【００５３】
［操作画面例］
次に、各装置の操作画面例について説明する。
【００５４】
（セキュリティファイル発行装置）
図３は、本実施形態１に係るセキュリティファイル発行装置の操作画面例（その１）を示す。上述したように、セキュリティファイル発行装置３００は、セキュリティファイルを生成し、出力する端末装置である。
【００５５】
ユーザはセキュリティファイル発行装置３００のディスプレイ画面に表示される操作画面を操作することにより、セキュリティファイルを生成し出力することができる。図３に示されるように、ユーザは、まず、ユーザ認証画面（ａ）において、セキュリティファイル発行装置３００にログインするためのパスワードを入力する。ユーザ認証に成功すると、メニュー画面（ｂ）へ進む。そして、メニュー画面（ｂ）において、ユーザが「セキュリティファイル発行」を押下すると、セキュリティファイル発行画面（ｃ）へ進む。
【００５６】
セキュリティファイル発行画面（ｃ）において、ユーザは任意の「セキュリティコード」を入力した後、「追加」を押下する。入力されたセキュリティコードは、「一覧」に追加される。また、「発行メモ」には、発行するセキュリティファイル毎に任意のメモを併せて付すことができる。
【００５７】
次に、ユーザは、「発行」を押下する。その後、確認画面（ｄ）が表示され、「一覧」に追加されたセキュリティコードを含むセキュリティファイルの出力が完了する。
【００５８】
このようにして生成、出力されたセキュリティファイルは、セキュリティコード登録装置４００がＰＬＣ２００に対してセキュリティコードを登録する際に、用いられる。ユーザは例えば、携帯型の記録媒体にセキュリティファイルを保存し、この記録媒体を介してセキュリティファイルをセキュリティコード登録装置４００に移動できる。又は、ネットワークを介しセキュリティファイルをセキュリティコード登録装置４００に移動してもよい。
【００５９】
図４は、本実施形態１に係るセキュリティファイル発行装置の操作画面例（その２）を示す。具体的には、図３（ｂ）の「発行履歴表示」を押下すると、当該「セキュリティファイル発行履歴表示」が表示される。図４に示されるように、セキュリティファイル発行装置３００においては、過去に発行されたセキュリティファイルの詳細（「発行日」、「セキュリティコード」、「発行メモ」等）が表示されている。
【００６０】
（セキュリティコード登録装置）
図５は、本実施形態１に係るセキュリティコード登録装置の操作画面例を示す。上述したように、セキュリティコード登録装置４００は、「セキュリティコード」や「試用期間」を含むセキュリティ情報を、ＰＬＣ２００に対して登録するための端末装置である。ユーザは、セキュリティコード登録装置４００のディスプレイ画面に表示される操作画面を操作することにより、セキュリティファイルを取得する。また、セキュリティファイルに含まれているセキュリティコードを取り出してＰＬＣ２００に登録する。
【００６１】
図５に示されるように、ユーザは、まず、ユーザ認証画面（ａ）において、セキュリティコード登録装置４００にログインするためのパスワードを入力する。ユーザ認証に成功すると、メニュー画面（ｂ）へ進む。そして、メニュー画面（ｂ）において、ユーザが「セキュリティ情報登録」を押下すると、セキュリティ情報登録画面（ｃ）へ進む。
【００６２】
セキュリティ情報登録画面（ｃ）において、ユーザは、まず、セキュリティ情報の登録先のＰＬＣを指定する。図例の場合、ＰＬＣとは、ＵＳＢポートを介して接続されている場合と、ネットワークを介して接続されている場合とが想定されており、ユーザはいずれかの方法で、セキュリティ情報の登録先（送信先）のＰＬＣを指定できる。
【００６３】
次に、ユーザは、「セキュリティファイル取込」を押下することにより、セキュリティコード登録装置４００に対してセキュリティファイルの取込みを行う。具体的には、ユーザはセキュリティファイル発行装置３００で生成したセキュリティファイルを保存した記録媒体をセキュリティコード登録装置４００に接続する。その後、「セキュリティファイル取込」を押下し、記録媒体に保存されているセキュリティファイルを指定してから、セキュリティファイルの取込を行う。
【００６４】
ユーザがセキュリティファイルの取込みを行うと、セキュリティファイル内のセキュリティコードが「セキュリティコード」の欄に表示される。また、セキュリティファイル内に複数のセキュリティコードが存在する場合には、複数のセキュリティコードが「セキュリティコード」の欄に表示される。ユーザは、この中から、ＰＬＣに登録する一つのセキュリティコードを選択する。
【００６５】
次に、ユーザは、「試用期間の登録」を行う。具体的には、「試用期間の登録」を行う場合、図例の「する」にチェックのうえ、「時間」を入力指定する。「試用期間の登録」を行わない場合には、「しない」にチェックを入れる（「試用期間」の登録は任意）。
【００６６】
「稼働時間リセット」は、稼働時間をリセットしない／する、を指定するものである。ＰＬＣに対し「試用期間」は再登録が可能であるので、再登録時、再登録時点迄に計測していた稼働時間をリセットしない／する、を指定できる。「試用期間」の初回登録時は、必ず「稼働時間リセット」をしない（デフォルト値）、と指定する。
【００６７】
以上の設定のうえ、ユーザは「登録」を押下する。その後、確認画面（ｄ）が表示され、セキュリティ情報の登録先のＰＬＣに対し、選択された「セキュリティコード」及び「試用期間」の登録が完了する。つまり、図例の場合、この時点で、「セキュリティコード」：006BZ-dpAo2wTsb83amk、「試用期間」：10（時間）が、ＰＬＣ２００のセキュアメモリ２０２に登録されたことになる。なお、「試用期間の登録」を行わない場合には、セキュリティ情報登録先のＰＬＣに対し、選択された「セキュリティコード」のみの登録が完了する。
【００６８】
（支援ローダ）
図６は、本実施形態１に係る支援ローダのプログラミングエディタ画面例を示す。上述したように、支援ローダは、ＰＬＣプログラムの作成支援用コンピュータ装置である。ユーザは、この画面上で所望のＰＬＣプログラムを開発する。また、ユーザにより開発されたＰＬＣプログラムは、支援ローダ１００からＰＬＣ２００に対しダウンロードされる。
【００６９】
ユーザは、作成中の保護対象のプログラムを保護する場合、例えば、プログラミングエディタ上から所定操作を行う。これにより、ユーザが作成した「保護対象のプログラムコード」に対して、ＰＬＣ２００側でセキュリティコードチェック用のＳＦＢを呼び出す「ＳＦＢ用のプログラムコード」が追加される。その後、ユーザは、プログラミングエディタ上で「保護対象のプログラムコード」及び「ＳＦＢ用のプログラムコード」が含まれるプログラムコードのコンパイルを行って、ＰＬＣプログラムを作成する。また、作成したＰＬＣプログラムをＰＬＣ２００に対し送信する。
【００７０】
［情報処理］
次に、各装置の情報処理例について説明する。
【００７１】
（情報処理１）
図７は、本実施形態１に係る情報処理１の流れを示すシーケンス図である。具体的には、まず、情報処理１では、セキュリティファイル発行装置３００がセキュリティファイルを生成し出力する処理、及びセキュリティコード登録装置４００が「セキュリティコード」や「試用期間」を含むセキュリティ情報をＰＬＣ２００に対して登録する処理を説明する（併せて図２を参照）。
【００７２】
Ｓ１：まず、セキュリティファイル発行装置３００に対し、ユーザにより「セキュリティコードＡ」が入力される（例えば図３の（ｃ）参照）。
【００７３】
Ｓ２：セキュリティファイル発行装置３００のセキュリティファイル生成部３０１は、ユーザにより入力された「セキュリティコード」（例えばＳＣ−Ａ）を受け取ると、その「セキュリティコード」（例えばＳＣ−Ａ）を含むセキュリティファイルを生成する。
【００７４】
Ｓ３：セキュリティファイル生成部３０１は、セキュリティコード登録装置３００の公開鍵を用いて、生成したセキュリティファイルを暗号化する。
【００７５】
Ｓ４：セキュリティファイル生成部３０１は、暗号化したセキュリティファイルを出力する（例えば図３の（ｄ）参照）。出力方法としては、例えば携帯型の記録媒体にセキュリティファイルを保存し、この記録媒体を介してセキュリティファイルをセキュリティコード登録装置４００に移動する方法がある。又は、ネットワークを介しセキュリティファイルをセキュリティコード登録装置４００に送信してもよい。
【００７６】
Ｓ５：次に、セキュリティコード登録装置４００のセキュリティファイル取込部４０１は、セキュリティファイル発行装置３００により発行されたセキュリティファイルを取込む（例えば図５の（ｃ）参照）。
【００７７】
Ｓ６：セキュリティファイル取込部４０１は、上述の公開鍵に対応する秘密鍵を用いて、暗号化されたセキュリティファイルを復号化する。
【００７８】
Ｓ７：セキュリティファイル取込部４０１は、復号化したセキュリティファイルから「セキュリティコード」（例えばＳＣ−Ａ）を抜き出してメモリ４０２に保存する。
【００７９】
Ｓ８：セキュリティ情報登録部４０３は、ユーザからセキュリティ情報の登録の指示を受けると、コード変換部４０４に対し、ユーザに選択された一つの「セキュリティコード」（例えばＳＣ−Ａ）を「セキュリティコード」（例えばＳＣ−Ｂ）に変換するよう依頼する。コード変換部４０４は、セキュリティ情報登録部４０３からの依頼に応じて、取得したセキュリティコードを所定のアルゴリズムにより別の異なるセキュリティコードに変換する。本実施形態１では、「セキュリティコードＡ」を「セキュリティコードＢ」に変換するものとする。なお、このように「セキュリティコード」を変換するのは、セキュリティ性をより高めるためである。例えば、「セキュリティコードＡ」が流出した場合でも、その「セキュリティコードＡ」をそのまま使用することはできず、最終的に比較（又は照合）に用いられる「セキュリティコードＢ」がなくては、ＰＬＣプログラムを実行することはできない。
【００８０】
Ｓ９：ここで、ユーザから「試用期間」が入力されると、セキュリティ情報登録部４０３は、その「試用期間」を取得する（例えば図５の（ｃ）参照）。
【００８１】
Ｓ１０：セキュリティ情報登録部４０３は、変換された「セキュリティコード」（例えばＳＣ−Ｂ）と入力された「試用期間」とを含むセキュリティ情報を生成する。また、セキュリティ情報の登録先として指定されたＰＬＣ２００に対し、そのセキュリティ情報を登録する（例えば図５の（ｄ）参照）。具体的には上述したように、セキュリティ情報は、ＵＳＢやＬＡＮ等のネットワークを介してＰＬＣ２００に送信され、ＰＬＣ２００側でセキュアメモリ２０２に登録（保存）される。
【００８２】
なお、ＰＬＣ２００に対し「試用期間」は再登録が可能であり、再登録時、再登録時点迄に計測していた稼働時間をリセットしない／する、を指定できることは上述した（例えば図５の（ｃ）参照）。よって、「試用期間」の再登録時であって、「稼働時間リセット」が「する」と指定された場合、セキュリティ情報登録部４０３は、セキュリティ情報を登録する際に、併せて「稼働時間リセット」を示すフラグをＰＬＣ２００に送信しておく。
【００８３】
また、セキュリティコード登録装置４００のみでは、ユーザは自由に任意のセキュリティコードをＰＬＣ２００に対し登録することはできない。即ち、セキュリティファイル発行装置３００で出力したセキュリティファイルを、セキュリティコード登録装置４００に取込む必要がある（Ｓ５）。このように構成するのは、仮にセキュリティコード登録装置４００が流出した場合であっても、ＰＬＣプログラムを不正に使おうとするユーザが、ＰＬＣプログラム内のセキュリティコード（パラメータ）と一致するセキュリティコードを、ＰＬＣのセキュアメモリ２０２に自由に登録できないようにするためである。
【００８４】
Ｓ１１：次に、ＰＬＣ２００のセキュリティ情報登録受付部２０１は、セキュリティコード登録装置４００（セキュリティ情報登録部４０３）から取得したセキュリティ情報である「セキュリティコード」（例えばＳＣ−Ｂ）及び「試用期間」を、セキュアメモリ２０２に保存する。なお、上述の如く、このセキュアメモリ２０２はアクセスが制限されたメモリであるので、ユーザがこのセキュアメモリ２０２に対してアクセスすることはできない。
【００８５】
なお、上述したように、セキュリティ情報登録受付部２０１は、セキュリティコード登録装置４００（セキュリティ情報登録部４０３）から受付けたセキュリティ情報のみをセキュアメモリ２０２に登録し、他の装置からのセキュリティ情報の登録は受付けない。従って、ＰＬＣ２００は、セキュリティ情報の登録元（送信元）がセキュリティコード登録装置４００であることを確認してから、そのセキュリティ情報を登録する。一方、ＰＬＣ２００は、セキュリティ情報の登録元（送信元）がセキュリティコード登録装置４００であることを確認できない場合には、そのセキュリティ情報を破棄する。
【００８６】
登録元の具体的な確認方法として、例えば、セキュリティ情報の送受信時、ＰＬＣ２００は、セキュリティコード登録装置４００のみが有するキー（所定のデータやパスワード等）を用いた認証により、登録元を確認することができる。また、例えば、共通鍵暗号方式（秘密鍵暗号方式ともいう）を利用することもできる。セキュリティコード登録装置４００は、セキュリティコード登録装置４００の共通鍵（秘密鍵）を用いてセキュリティ情報を暗号化し、暗号化したセキュリティ情報をＰＬＣ２００に送信する。ＰＬＣ２００は、セキュリティコード登録装置４００と同一の共通鍵（秘密鍵）を保有しており、その共通鍵（秘密鍵）を用いてセキュリティ情報を復号化することにより、登録元を確認することができる。
【００８７】
Ｓ１２：稼働時間計測部２０３は、セキュアメモリ２０２に「試用期間」が保存されたタイミングで、ＰＬＣ２００の稼働時間の計測を開始する。稼働時間計測部２０３は、稼働時間の改ざんを防止するため、ＰＬＣ２００の標準時計（内部時計）とは別途、独立した時計によりＰＬＣ２００の稼働時間の計測を行う。また、稼働時間計測部２０３は、計測した稼働時間を、計測する毎に、セキュアメモリ２０２に逐一保存する。
【００８８】
なお、セキュアメモリ２０２に既に先の「試用期間」が存在している場合、稼働時間計測部２０３は、ＰＬＣ２００の稼働時間の計測を既に開始していることを意味する。そして、上述の如く、「試用期間」は再登録が可能であるところ、セキュリティコード登録装置４００（セキュリティ情報登録部４０３）から「稼働時間リセット」を示すフラグが送信されてきた場合には、Ｓ１１で、セキュリティ情報受付部２０１は、セキュアメモリ２０２に既に存在している「試用期間」を上書き（更新）する。また、稼働時間計測部２０３は、新たＰＬＣ２００の稼働時間の計測を開始する。
【００８９】
（情報処理２）
図８は、本実施形態１に係る情報処理２の流れを示すシーケンス図である。具体的に、情報処理２では、支援ローダ１００のＰＬＣプログラム作成処理、支援ローダ１００のＰＬＣプログラムダウンロード処理、及びＰＬＣ２００のＰＬＣプログラム実行制御処理を説明する（併せて図２を参照）。
【００９０】
Ｓ２１：まず、支援ローダ１００のプログラム作成部１０１は、ＰＬＣ２００本体で動作するＰＬＣプログラムのプログラムコードを作成する（例えば図６参照）。即ち、ユーザがプログラミングエディタによりユーザ所望のユーザプログラムコードを作成すると、プログラム作成部１０１は、そのユーザプログラムコードの一部に、セキュリティコードチェック用のＳＦＢ２０６を呼び出すプログラムコードを追加する。また、併せてＳＦＢ２０６用のパラメータとして、「セキュリティコード」（例えばＳＣ−Ａ）を設定しておく。このセキュリティコードは、ユーザによって与えられ、セキュリティファイル発行装置３００に入力した「セキュリティコード」（例えばＳＣ−Ａ）と同一のものを設定する。
【００９１】
Ｓ２２：次いで、プログラム作成部１０１は、ユーザプログラムコード及びＳＦＢ２０６を呼び出すプログラムコードを含むプログラムコードを作成すると、コンパイルを行って、ＰＬＣプログラムを作成する。また、プログラム作成部１０１は、作成したＰＬＣプログラムをメモリ１０２に保存しておく。
【００９２】
Ｓ２３：次いで、プログラム作成部１０１は、ユーザ操作又は自動操作等により、作成したＰＬＣプログラムをＰＬＣ２００に送信する。
【００９３】
Ｓ２４：ＰＬＣ２００のプログラム実行部２０５は、プログラムメモリ２０４に格納されたＰＬＣプログラムの実行を制御する。プログラム実行部２０５は、ＰＬＣプログラムの実行処理を行う際、ＰＬＣプログラムにＳＦＢ機能部２０６を呼び出すコードが含まれている場合には、そのコードに従って、ＳＦＢ機能部２０６の呼び出しを行う。そして、プログラム実行部２０５は、ＳＦＢ機能部２０６からの返り値（「実行許可」又は「実行不許可」）に応じて、同ＰＬＣプログラムの実行を継続するか、実行を禁止（中止）する制御を行う。この点詳細は、再度後述する。なお、ＰＬＣプログラムにＳＦＢ機能部２０６を呼び出すコードが含まれていない場合、プログラム実行部２０５は、そのままＰＬＣプログラムの実行を行えばよい。
【００９４】
Ｓ２５：通知部２０９は、ＰＬＣプログラムの実行結果をユーザ等に通知する。具体的な通知方法としては、各装置のディスプレイ等に通知したり、ログファイルへログ出力する、又は所定の端末へメール等により通知することができる。なお、この通知は、ＰＬＣプログラムの実行が禁止された場合にのみ、通知するようにしてもよい。
【００９５】
（ＰＬＣプログラム実行制御処理）
図９は、本実施形態１に係るプログラム実行部２０５のＰＬＣプログラム実行制御処理の流れを示すフローチャートである。具体的には、上述のＰＬＣプログラム実行制御（図８のＳ２４）について、図面を参照しながら以下説明する。
【００９６】
Ｓ３１：ＰＬＣ２００のプログラム実行部２０５は、プログラムメモリ２０４に格納されたＰＬＣプログラムを実行する。このときＰＬＣプログラムにセキュリティコードチェック用のＳＦＢ機能部２０６を呼び出すコードが含まれているか否かを判定する。ここで、プログラム実行部２０５は、ＰＬＣプログラムにセキュリティコードチェック用のＳＦＢ機能部２０６を呼び出すコードが含まれていない場合、そのＰＬＣプログラムは特別に保護されているものではないため、Ｓ３４へ進み、ＰＬＣプログラムをそのまま実行する。
【００９７】
Ｓ３２：プログラム実行部２０５は、ＰＬＣプログラムにセキュリティコードチェック用のＳＦＢ機能部２０６を呼び出すコードが含まれている場合、そのコードに従って、ＳＦＢ機能部２０６の呼び出しを行う。ここで、プログラム実行部２０５は、ＳＦＢ機能部２０６の呼び出しの際、ＰＬＣプログラムにＳＦＢ２０６用のパラメータとして設定されている「セキュリティコード」（例えばＳＣ−Ａ）を、ＳＦＢ機能部２０６に渡しておく。
【００９８】
Ｓ３３：プログラム実行部２０５は、ＳＦＢ機能部２０６から返り値（「実行許可」又は「実行不許可」）を取得する。返り値が「実行許可」である場合、Ｓ３４へ進む。一方、返り値が「実行不許可」である場合、Ｓ３５へ進む。
【００９９】
Ｓ３４：プログラム実行部２０５は、ＳＦＢ機能部２０６からの返り値が「実行許可」である場合、ＰＬＣプログラムを実行する。これにより、ＰＬＣ２００本体は、このＰＬＣプログラムによってユーザ所望の動作を実施することになる。
【０１００】
Ｓ３５：一方、プログラム実行部２０５は、ＳＦＢ機能部２０６からの返り値が「実行不許可」である場合、このＰＬＣプログラムを、正当なＰＬＣプログラムでないとみなし、実行を禁止（中止）する。
【０１０１】
（ＳＦＢ機能処理）
図１０は、本実施形態１に係るＳＦＢ機能部２０６のセキュリティコードチェック処理の流れを示すフローチャートである。具体的には、上述のＰＬＣプログラム実行制御（図９のＳ３２）について、図面を参照しながら以下説明する。
【０１０２】
Ｓ４１：図９のＳ３２において、プログラム実行部２０５によりＳＦＢ機能部２０６の呼び出しが行われると、ＳＦＢ機能部２０６の比較照合部２０７は、セキュアメモリ２０２から「試用期間」を取得する。「試用期間」を取得できた場合は、Ｓ４２へ進む。一方、「試用期間」を取得できない場合は、Ｓ４５へ進む。なお、「試用期間」を取得できない場合とは、セキュアメモリ２０２で「試用期間」が未登録の場合である。
【０１０３】
Ｓ４２：比較照合部２０７は、「試用期間」を取得できた場合、今度はセキュアメモリ２０２から「稼働時間」を取得する。「稼働時間」は、「試用期間」が保存されるタイミングでその計測が開始されるので、「試用期間」がセキュアメモリ２０２に登録されている場合、「稼働時間」もまたセキュアメモリ２０２に保存されていることになる。
【０１０４】
Ｓ４３：比較照合部２０７は、セキュアメモリ２０２から「稼働時間」及び「試用期間」を取得すると、「稼働時間」に基づいて「試用期間」が利用可能な期間内であるか否かを判定する。上述の如く、「試用期間」は、ＰＬＣ２００の利用可能な期間を示し、「稼働時間」は、ＰＬＣ２００の「稼働時間」を示す。よって、比較照合部２０７は、「稼働時間」及び「試用期間」に基づいて、ＰＬＣ２００が「試用期間」内であるか否かを判定できる。ＰＬＣ２００が「試用期間」内である場合、Ｓ４４へ進む。一方、ＰＬＣ２００が「試用期間」内でない場合、Ｓ５１へ進む。
【０１０５】
例えば、ＰＬＣ２００の稼働開始から５時間経過している場合、「稼働時間」は５（Ｈ）となっており、「試用期間」が１０（Ｈ）であるとすると、ＰＬＣ２００が利用可能な「試用期間」内であると判定される。また例えば、ＰＬＣ２００の稼働開始から１２時間経過している場合、「稼働時間」は１２（Ｈ）となっており、「試用期間」が１０（Ｈ）であるとすると、ＰＬＣ２００が利用可能な「試用期間」内でないと判定される。
【０１０６】
Ｓ４４：比較照合部２０７は、セキュリティコードチェックの対象となったＰＬＣプログラムの実行を許可するため、プログラム実行部２０５に対し、返り値：「実行許可」を発行する。
【０１０７】
Ｓ４５：一方、比較照合部２０７は、セキュアメモリ２０２から「試用期間」を取得できない場合（Ｓ４１）、コード変換部２０８に対し、パラメータ：「セキュリティコード」（例えばＳＣ−Ａ）の変換を依頼する。「セキュリティコード」には、プログラム実行部２０５によるＳＦＢ機能部２０６の呼び出しの際、ＰＬＣプログラムにＳＦＢ２０６用のパラメータとして設定されているものが取得されている（図９のＳ３２）。
【０１０８】
Ｓ４６：コード変換部２０８は、比較照合部２０７の依頼に応じて、「セキュリティコード」を変換する。コード変換部２０８は、セキュリティコード登録装置４００のコード変換部４０４と同一のアルゴリズムによりセキュリティコードに変換する。よって、本実施形態１の場合、「セキュリティコードＡ」は「セキュリティコードＢ」に変換されることになる。コード変換部２０８は、変換後の「セキュリティコード」を比較照合部２０７に渡す。
【０１０９】
Ｓ４７：比較照合部２０７は、コード変換部２０８から変換後の「セキュリティコード」を取得できた場合、Ｓ４８へ進む。一方、コード変換部２０８から変換後の「セキュリティコード」を取得できない場合、Ｓ５１へ進む。
【０１１０】
Ｓ４８：比較照合部２０７は、セキュアメモリ２０２から「セキュリティコード」（例えばＳＣ−Ｂ）を取得する。「セキュリティコード」を取得できた場合は、Ｓ４９へ進む。一方、「セキュリティコード」を取得できない場合は、Ｓ５１へ進む。なお、「セキュリティコード」を取得できない場合とは、セキュアメモリ２０２において「セキュリティコード」が未登録の場合である。
【０１１１】
Ｓ４９：比較照合部２０７は、変換されたパラメータ「セキュリティコード」と、セキュアメモリ２０２の「セキュリティコード」とを取得すると、両セキュリティコードを比較（又は照合）する。
【０１１２】
Ｓ５０：両セキュリティコードが一致した場合、Ｓ４４へ進む。即ち、比較照合部２０７は、セキュリティコードチェックの対象となったＰＬＣプログラムの実行を許可するため、プログラム実行部２０５に対し、返り値：「実行許可」を発行する。一方、両セキュリティコードが一致しない場合、Ｓ５１へ進む。
【０１１３】
Ｓ５１：比較照合部２０７は、セキュリティコードチェックの対象となったＰＬＣプログラムの実行を不許可とするため、プログラム実行部２０５に対し、返り値：「実行不許可」を発行する。
【０１１４】
［まとめ］
以上、本実施形態に係る情報処理例において、ＰＬＣ２００でＰＬＣプログラムが実行される際、ＰＬＣプログラムに追加されているＳＦＢ呼び出すコードにより、ＳＦＢ機能部２０６が呼び出され、ＰＬＣプログラム内のセキュリティコードチェック処理が実施される。一方、ＰＬＣ２００のアクセス制限がなされたセキュアメモリ２０２には、セキュリティファイル発行装置３００及びセキュリティコード登録装置４００を介して、予め「セキュリティコード」が格納されている。そして、ＰＬＣプログラム内の変換後のセキュリティコードとの比較（又は照合）により、両セキュリティコードが一致した場合、このＰＬＣプログラムは正当なＰＬＣプログラムであると判定され、ＰＬＣ２００では同ＰＬＣプログラムの実行が許可される。一方、両セキュリティコードが一致しない場合、このＰＬＣプログラムは正当なＰＬＣプログラムでない（ＰＬＣプログラムの不正使用である）と判定され、ＰＬＣ２００では同ＰＬＣプログラムの実行が許可されない。
【０１１５】
このように、本実施形態によれば、正当なＰＬＣでしかＰＬＣプログラムを動かせないようになるので、ＰＬＣプログラムの不正使用を防止するという効果を奏する。そして、ＰＬＣを使って製品開発しているセットメーカー等にとって、ＰＬＣやＰＬＣプログラムの模倣品や海賊版製品が市場に出回ることを予防することができる。
【０１１６】
またここで、例えば本実施形態に係るＰＬＣ２００が故障した場合、故障したＰＬＣ２００を修理している間は工場の生産活動が停止してしまうことから、代替機のＰＬＣ（ＰＬＣ２００−２とする）を一時的に設置し、工場の生産活動を継続させる場合を考える。このとき、具体的な代替機を使用した復旧作業は、次の通りである。
【０１１７】
まず、保守作業員（等）は、物理的に代替機ＰＬＣ２００−２を設置する。次に、保守作業員は、セキュリティコード登録装置４００から代替機ＰＬＣ２００−２に対し、セキュリティ情報を登録する。このセキュリティ情報は、故障したＰＬＣ２００に対して登録したセキュリティ情報と同一のものである。セキュリティコード登録装置４００のメモリ４０２に保存されているものをそのまま登録すればよい。これにより、代替機ＰＬＣ２００−２のセキュアメモリ２０２には、「セキュリティコード」（例えばＳＣ−Ｂ）が格納される。
【０１１８】
次いで、保守作業員は、代替機ＰＬＣ２００−２のプログラムメモリ２０４に対し、ＰＬＣプログラムを格納する（ダウンロードする）。このＰＬＣプログラムは、故障したＰＬＣ２００に対して使用していたＰＬＣプログラムと同一のものである。支援ローダ１００のメモリ１０２に保存されているものをそのまま格納すればよい。又は、上述したように、支援ローダ１００により作成されたＰＬＣプログラムをユーザＲＯＭカードスロット２１０に挿入された記録媒体に格納していた場合、保守作業員は、故障したＰＬＣ２００から記録媒体を抜き取って、その記録媒体を代替機ＰＬＣ２００−２のユーザＲＯＭカードスロット２１０に挿入する。これにより、代替機ＰＬＣ２００−２のプログラムメモリ２０４には、それまで使用していたＰＬＣプログラムが格納される（転送される）。
【０１１９】
後は、代替機ＰＬＣ２００−２において、保守作業員は、ＰＬＣプログラムを実行しさえすればよい。ＰＬＣプログラム実行時、ＳＦＢ機能部２０６（比較照合部２０７）のセキュリティコードチェック処理においても、ＰＬＣプログラム内のパラメータが変換された「セキュリティコード」（例えばＳＣ−Ｂ）と、セキュアメモリ２０２の「セキュリティコード」（例えばＳＣ−Ｂ）とは一致するので、ＰＬＣプログラムの実行は許可される。
【０１２０】
以上のような簡便な復旧作業により、代替機ＰＬＣ２００−２においても、故障したＰＬＣ２００で実行していたものと同一のＰＬＣプログラムを実行することができる。即ち、代替機ＰＬＣ２００−２を使用して、故障したＰＬＣ２００と同様の生産活動を迅速に再開可能である。
【０１２１】
また、本実施形態に係る情報処理例においては、ＰＬＣ２００でＰＬＣプログラムが実行される際、セキュリティコードチェック処理が実施されるが、「試用期間」内であれば、両「セキュリティコード」の一致は必要なく、ＰＬＣプログラムの実行が可能となっている。
【０１２２】
先にセキュリティコード登録装置４００から代替機ＰＬＣ２００−２に対し、セキュリティ情報を登録する点を述べたが、セキュリティコード登録装置４００が手元にない場合、保守作業員は、セキュリティコード登録装置４００から代替機ＰＬＣ２００−２に対し、故障したＰＬＣ２００に登録していたセキュリティ情報と同一のセキュリティ情報を登録することはできない。
【０１２３】
しかしながら、そのような場合であっても、保守作業員は、代替機のセキュリティファイル発行装置（セキュリティファイル発行装置３００−２とする）及び代替機のセキュリティコード登録装置（セキュリティコード登録装置４００−２とする）を用意すればよい。保守作業員は、代替機セキュリティファイル発行装置３００−２及び代替機セキュリティコード登録装置４００−２において、正当な「セキュリティコード」が分からない場合でも、任意（ダミー：Dammy）の「セキュリティコード」を入力する（例えば図３の（ｃ）、図５の（ｃ）参照）。そして、故障したＰＬＣ２００の修理が完了する迄程度の期間を「試用期間」として登録し（例えば図５の（ｃ）参照）、代替機ＰＬＣ２００−２に対して、任意（ダミー）の「セキュリティコード」と「試用期間」とを含むセキュリティ情報を登録しさえすれば、両「セキュリティコード」の一致がなくとも、暫定的にＰＬＣプログラムの実行が可能である。即ち、代替機ＰＬＣ２００−２を使用して、故障したＰＬＣ２００と同様の生産活動を迅速に再開可能である。
【０１２４】
また、ＰＬＣ２００（ＰＬＣ２００−２を含む）にＰＬＣプログラムを格納する前に、予め「試用期間」の初期値として１ヶ月又は１週間等の「試用期間」を登録しておくことで、上述した保守作業員による「試用期間」の登録が不要となる。
【０１２５】
さらに、「試用期間」の間、ユーザ先にＰＬＣ２００を貸し出す場合、ＰＬＣ２００に「セキュリティコード」と「試用期間」を予め登録して貸し出すことで、「試用期間」のチェックが有効となる。その後、試用期間中にユーザがＰＬＣ２００の購入を希望した場合は、登録した「試用期間」を削除することで、その後は、「セキュリティコード」のチェックが有効となる。
【０１２６】
このように、本実施形態に係るＰＬＣによれば、制御プログラムの運用・保守性に配慮しつつ、ＰＬＣ上で動作する制御プログラムに対するセキュリティの観点から、制御プログラムの不正使用を防止することが可能となっている。
【０１２７】
［応用例］
次に、ＰＬＣ２００は、ＧＰＳ（Global Positioning System）センサを備え、ＰＬＣが使用される位置について、認証を実施する例について説明する。つまり、ＰＬＣ２００がＰＬＣプログラムを実行する際、そのＰＬＣプログラムの使用が認められている使用位置にそのＰＬＣが設置されているかどうかを認証する。そして、その使用位置にＰＬＣ２００が位置する場合に、ＰＬＣ２００は、そのＰＬＣプログラムの実行を許可する。これにより、ＰＬＣ上で動作する制御プログラムに対するセキュリティをより向上させるものである。以下説明する。
【０１２８】
図１１は、本応用例に係る制御システム構成図の機能構成例である。上述の図２の機能構成例と比べ、支援ローダ１００及びＰＬＣ２００の一部の点で異なっている。以下異なる点を中心に説明する。
【０１２９】
（支援ローダ）
本応用例に係る支援ローダ１００において、プログラム作成部１０１は、ＰＬＣ２００本体で動作するＰＬＣプログラムの作成（作成支援）を行う。このときプログラム作成部１０１は、上述したようにユーザが作成したユーザプログラムコードについて、セキュリティコードチェック用のＳＦＢ機能部２０６を呼び出すコードをユーザ作成のプログラムの一部に追加する。また、併せてセキュリティコードチェック用のＳＦＢ２０６用のパラメータとして、「セキュリティコードＡ」を設定しておく。また、さらに本応用例においては、セキュリティコードチェック用のＳＦＢ２０６用のパラメータとして、「有効位置情報」を設定しておく。
【０１３０】
「有効位置情報」は、ＰＬＣプログラムの実行を許可するＰＬＣ２００の使用位置（設置位置）を指定するための情報である。つまり、「有効位置情報」で指定された使用位置にＰＬＣ２００が位置する場合に、ＰＬＣ２００は、そのＰＬＣプログラムの実行を許可する。従って、ユーザは、ＰＬＣ２００の使用位置（例えば工場の位置）を「有効位置情報」として指定する必要がある。
【０１３１】
図１２は、「有効位置情報」の指定例を示す。「有効位置情報」は、例えば、北緯a度b分c秒、東経d度e分f秒などのように、（緯度ｘ．経度ｙ）といったＧＰＳから取得される位置座標の形式で入力することができる。
【０１３２】
例えば（ａ）のように、ユーザは「有効位置情報」を２点の位置座標により指定できる。この場合、矩形の範囲内が有効位置範囲となるので、例えば工場等の敷地内を有効位置範囲となるように指定するとよい。
【０１３３】
また、例えば（ｂ）のように、ユーザは「有効位置情報」を多角点の位置座標により指定できる。この場合、多角形の範囲内が有効位置範囲となるので、例えば工場等の建物内を有効位置範囲となるように指定するとよい。
【０１３４】
また、例えば（ｃ）のように、ユーザは「有効位置情報」を１点の位置座標により指定できる。この場合、１点の中心点の周辺円範囲内が有効位置範囲となる。中心点からどの程度の円範囲内を有効位置範囲とするかについては、ＰＬＣ２００側で予め所定半径ｚを定めていてもよいし、ユーザが中心点の位置座標とともに、その半径ｚを指定できるようにしてもよい。
【０１３５】
（ＰＬＣ）
次に、本応用例に係るＰＬＣ２００には、図１１に示されるように、位置情報取得部２１１が追加される。位置情報取得部２１１は、ＧＰＳセンサ等により実現され、ＧＰＳ衛星からの信号を受信し、ＰＬＣ２００が位置する「現在位置情報」を取得する。位置情報取得部２１１は、取得した「現在位置情報」をセキュリティ情報登録受付部２０１に渡す。セキュリティ情報登録受付部２０１は、その「現在位置情報」をセキュアメモリ２０２に保存する。セキュリティ情報登録受付部２０１を介して「現在位置情報」をセキュアメモリ２０２に保存するのは、セキュアメモリ２０２へのアクセスは制限されており、セキュリティ情報登録受付部２０１は、セキュアメモリ２０２に対し書き込み権限を有するためである。また、「現在位置情報」もセキュリティに関する情報の一つである。
【０１３６】
プログラム実行部２０５は、プログラムメモリ２０４に格納されたＰＬＣプログラムを実行する。また、プログラム実行部２０５は、ＰＬＣプログラムにセキュリティコードチェック用のＳＦＢ機能部２０６を呼び出すコードが含まれている場合、そのコードに従って、ＳＦＢ機能部２０６を呼び出す。そして、プログラム実行部２０５は、ＳＦＢ機能部２０６からＰＬＣプログラムの実行許可を得た場合のみ、ＰＬＣプログラムの実行を継続し、ＰＬＣプログラムの実行不許可を得た場合には、ＰＬＣプログラムの実行を禁止（停止）する。
【０１３７】
比較照合部２０７は、プログラム実行部２０５によりＳＦＢ機能部２０６が呼び出されると、上述したように、「試用期間」、「稼働時間」、及び「セキュリティコード」に基づいて、ＰＬＣプログラムの実行許可、不許可を判定するが、本応用例ではさらに「現在位置情報」に基づいて、ＰＬＣプログラムの実行許可、不許可を判定する。
【０１３８】
つまり、比較照合部２０７は、セキュアメモリ２０２に保存されている「現在位置情報」を取得する。上述の如く、セキュアメモリ２０２の「現在位置情報」は、ＰＬＣ２００が設置されている位置情報を示す。また、比較照合部２０７は、セキュリティコードチェックの対象となるＰＬＣプログラムにパラメータとして設定されている「有効位置情報」を取得する。そして、比較照合部２０７は、「現在位置情報」と「有効位置情報」とを比較（又は照合）し、両位置情報が一致した場合（「現在位置情報」が「有効位置情報」に指定される範囲内である場合）、セキュリティコードチェックの対象となったＰＬＣプログラムの実行を許可するため、プログラム実行部２０５に対し、返り値：「実行許可」を発行する。一方、比較照合部２０７は、両位置情報が一致しない場合、セキュリティコードチェックの対象となったＰＬＣプログラムの実行を不許可とするため、プログラム実行部２０５に対し、返り値：「実行不許可」を発行する。
【０１３９】
（ＳＦＢ機能処理）
図１３は、本応用例に係るＳＦＢ機能部２０６のセキュリティコードチェック処理の流れを示すフローチャートである。上述の図１０と比べ、Ｓ５０に続くＳ５２〜５４のステップが追加されており、それ以外のステップは同様である。図面を参照しながら以下Ｓ５２〜５４について説明する。
【０１４０】
Ｓ５２：比較照合部２０７は、Ｓ５０で両セキュリティコードが一致した場合、今度は、セキュアメモリ２０２から「現在位置情報」を取得する。「現在位置情報」を取得できた場合は、Ｓ５３へ進む。一方、「現在位置情報」を取得できない場合は、Ｓ５１へ進む。なお、「現在位置情報」を取得できない場合とは、例えば、ＧＰＳセンサで位置情報を取得できない場所に位置する等である。この場合、「現在位置情報」を取得できない旨を通知し、ＧＰＳセンサで位置情報を取得できるように、ＰＬＣの設置位置の見直し等を促すとよい（図８のＳ２５）。
【０１４１】
Ｓ５３：比較照合部２０７は、「現在位置情報」と「有効位置情報」とを比較（又は照合）する。なお、「有効位置情報」に関し、比較照合部２０７は、プログラム実行部２０５によるＳＦＢ機能部２０６の呼び出しの際、ＰＬＣプログラムでＳＦＢ２０６用のパラメータとして設定されている「有効位置情報」を取得している（図９のＳ３２）。
【０１４２】
Ｓ５４：比較照合部２０７は、「現在位置情報」と「有効位置情報」とが一致した場合（「現在位置情報」が「有効位置情報」に指定される範囲内である場合）、Ｓ４４へ進む。
【０１４３】
そして、比較照合部２０７は、セキュリティコードチェックの対象となったＰＬＣプログラムの実行を許可するため、プログラム実行部２０５に対し、返り値：「実行許可」を発行する（Ｓ４４）。
【０１４４】
一方、比較照合部２０７は、両位置情報が一致しない場合、Ｓ５１へ進む。そして、比較照合部２０７は、セキュリティコードチェックの対象となったＰＬＣプログラムの実行を不許可とするため、プログラム実行部２０５に対し、返り値：「実行不許可」を発行する。
【０１４５】
以上、本応用例においては、ＰＬＣプログラム内に当該プログラムの利用を可能とする「有効位置情報」を格納しておくことで、ＰＬＣ２００のＧＰＳセンサから取得した「現在位置情報」をもとに、ＰＬＣプログラムを利用可能なエリア（場所）に設置したＰＬＣ２００だけがそのＰＬＣプログラムを実行することができる。このため、例えばＰＬＣ２００を設置した後、ＰＬＣ２００本体そのものが持ち出されてしまった場合等、「有効位置情報」による指定位置以外でＰＬＣプログラムを実行することはできないので、ＰＬＣプログラムの使用（不正使用といえる）を防止することが可能となる。即ち、ＰＬＣ２００上で動作する制御プログラムに対するセキュリティをより向上させることが可能である。
【０１４６】
＜実施形態２＞
次に、実施形態２について説明する。実施形態１では、セキュリティコード登録装置４００を用いて、セキュリティコードを登録したＰＬＣのみが、ＰＬＣプログラムを実行することができる。上述したように、セキュリティコード登録装置４００は、原則、ＰＬＣプログラムを開発するメーカーが保管・管理することが望ましい。
【０１４７】
しかしながら、運用上の理由により、セキュリティコード登録装置４００をユーザに提供したい場合がある。この場合、ユーザは、セキュリティコード登録装置４００を用いて、ＰＬＣプログラムを実行可能なＰＬＣを、何台でも作成することが可能である。
【０１４８】
そこで、実施形態２では、ＰＬＣプログラムを実行可能なＰＬＣの台数に制限を与える仕組みを導入する。この仕組みにより、メーカーは、ユーザが利用可能なＰＬＣの台数をライセンス管理することが可能である。以下、詳しく説明する。
【０１４９】
［システム構成］
図１４は、本実施形態２に係る制御システム構成図（概略図）の一例を示す。図１４に示されるように、本実施形態２に係る制御システムは、支援ローダ１００、ＰＬＣ２００、セキュリティファイル発行装置３００、セキュリティコード登録装置４００、ライセンスファイル発行装置５００、記録媒体６００を含む。
【０１５０】
本実施形態２に係る制御システム構成図は、実施形態１の図１と比較すると、ライセンスファイル発行装置５００、記録媒体６００が追加された構成である。以下、実施形態１と異なる点を中心に、詳しく説明する。
【０１５１】
ライセンスファイル発行装置５００は、ＰＬＣプログラムの利用（実行）を許可するためのライセンスファイルを発行する端末装置である。ライセンスファイル発行装置５００は、例えば、ＰＬＣプログラムを開発するメーカーが保有する。メーカーは、ライセンスファイル発行装置５００を用いて、開発したＰＬＣプログラムの利用を許可するＰＬＣの台数分だけ、ライセンスファイルを発行する。
【０１５２】
記録媒体６００は、ライセンスファイルを格納するための記録媒体であり、且つ、ライセンスファイルを作成するための情報（例えば、記録媒体の固有識別子）を取得するために利用する。記録媒体６００は、例えば、ＳＤカードのような汎用的なユーザＲＯＭカードを使用できる。ライセンスファイル発行装置５００は、ライセンスファイルを発行すると、発行したライセンスファイルを記録媒体６００に格納する。その後、ライセンスファイルが格納された記録媒体６００は、ＰＬＣ２００のユーザＲＯＭカードスロットに挿入される。
【０１５３】
また、ライセンスファイル発行装置５００は、１つの記録媒体に、１つのライセンスファイルを格納する。なお、ライセンスファイルは、当該ライセンスファイルに含まれる固有識別子を取得した記録媒体に格納する。従って、例えば、ライセンスファイル発行装置５００が、３つのライセンスファイルを発行した場合には、発行した３つのライセンスファイルを格納するため、３つの記録媒体が必要である。メーカーは、ライセンスファイル発行装置５００を用いて、開発したＰＬＣプログラムの利用を許可する場合、許可するＰＬＣ台数分の記録媒体をユーザに提供する。
【０１５４】
図１５は、本実施形態２に係る記録媒体の提供例を示す。例えば、メーカー及びユーザ間で、ＰＬＣプログラムの３台分のライセンス契約等がなされた場合には、メーカーは、ライセンスファイル発行装置５００を用いて、３台のＰＬＣ２００に対し、各々ＰＬＣプログラムの実行を許可する。
【０１５５】
メーカー（例えば、保守作業員等）は、ライセンスファイル発行装置５００のユーザＲＯＭカードスロットに記録媒体６００を挿入し、１つのライセンスファイルを発行する。発行されたライセンスファイルは、記録媒体６００に格納される。メーカーは、このライセンスファイル発行作業を３回繰り返すことにより、ライセンスファイルが格納された記録媒体６００が３つ作成される。
【０１５６】
メーカーは、３つの記録媒体６００を、ユーザに提供する。ユーザは、３台のＰＬＣ２００（例えば、ＰＬＣ２００−１、ＰＬＣ２００−２、ＰＬＣ２００−３）に対し、ライセンスファイルが格納された記録媒体６００（例えば、記録媒体６００−１、記録媒体６００−２、記録媒体６００−３）を、１つづつ挿入する。各ＰＬＣ２００では、記録媒体６００のライセンスファイルによりライセンス認証が実行され、認証に成功した場合、メーカーが開発したＰＬＣプログラムの利用が許可される。
【０１５７】
［機能構成］
図１６は、本実施形態２に係る制御システム構成図の機能構成例である。なお、説明の便宜上、ＰＬＣ２００、ライセンスファイル発行装置５００、記録媒体６００のみを図示する。
【０１５８】
（ライセンスファイル発行装置）
本実施形態２に係るライセンスファイル発行装置５００は、ユーザＲＯＭカードスロット５０１、識別子取得部５０２、ライセンスファイル生成部５０３を含む。
【０１５９】
ユーザＲＯＭカードスロット５０１は、記録媒体６００を挿入（装着）するためのカードスロットである。メーカーがライセンスファイル発行装置５００を用いて、ライセンスファイルを発行する場合、まず、記録媒体６００を、ユーザＲＯＭカードスロット５０１に挿入する。
【０１６０】
識別子取得部５０２は、ユーザＲＯＭカードスロット５０１に挿入された記録媒体６００から、記録媒体６００の識別子を取得する。この識別子は、例えば、記録媒体６００の製品シリアル番号や製造番号などであり、記録媒体毎に固有な識別子である。
【０１６１】
ライセンスファイル生成部５０３は、記録媒体６００の識別子、入力された「ユーザ情報」及び「有効期限」などを元に、ライセンスファイルを生成する。ライセンスファイル生成部５０３は、生成したライセンスファイルを、ユーザＲＯＭカードスロット５０１の記録媒体６００に格納（記録）する。ライセンスファイルが格納された記録媒体６００は、ユーザＲＯＭカードスロット５０１から抜き取られ、ＰＬＣ２００のユーザＲＯＭカードスロット５０１に挿入される。
【０１６２】
（ＰＬＣ）
次に、本実施形態２に係るＰＬＣ２００について、説明する。図１６のＰＬＣ２００には、図２又は図１１のＰＬＣ２００と比較し、ライセンス認証部２１２が追加されている。なお、図１６のＰＬＣ２００では、説明の便宜上、追加されたライセンス認証部２１２、プログラムメモリ２０４、プログラム実行部２０５、ユーザＲＯＭカードスロット２１０のみを図示し、それ以外の各機能部は、図示を省略している。
【０１６３】
ライセンス認証部２１２は、記録媒体６００に格納されたライセンスファイルの有効性を認証することにより、プログラムメモリ２０４に格納されたＰＬＣプログラムに対する実行権限の有無を判定する。このため、ライセンス認証部２１２は、識別子取得部２１２ａ、改ざん確認部２１２ｂ、判定部２１２ｃを含む。
【０１６４】
識別子取得部２１２ａは、ユーザＲＯＭカードスロット５０１に挿入されている記録媒体６００から、記録媒体６００の識別子を取得する。この識別子は、例えば、記録媒体６００の製品シリアル番号や製造番号などである。
【０１６５】
改ざん確認部２１２ｂは、ユーザＲＯＭカードスロット５０１に挿入されている記録媒体６００から、ライセンスファイルを取得し、取得したライセンスファイルが改ざんされていないかどうかを確認する。
【０１６６】
判定部２１２ｃは、識別子取得部２１２ａにより取得された識別子と、改ざん確認部２１２ｂにより改ざんされていないと確認されたライセンスファイルから取得した識別子とを比較照合する。また、判定部２１２ｃは、ライセンスファイルの有効期限を確認する。そして、判定部２１２ｃは、これら比較照合及び確認の結果に基づいて、当該ＰＬＣ２００は、ＰＬＣプログラムを実行する権限があるか否かを判定する。
【０１６７】
プログラムメモリ２０４は、上述したように、支援ローダ１００により作成されたＰＬＣ２００本体で動作させるＰＬＣプログラムを格納するためのメモリである。
【０１６８】
プログラム実行部２０５は、プログラムメモリ２０４に格納されたＰＬＣプログラムを実行する。但し、このＰＬＣプログラムを実行する前に、ＰＬＣプログラムの実行権限の有無の確認を、ライセンス認証部２１２に要求する。ライセンス認証部２１２は、プログラム実行部２０５からの実行権限確認要求に応じて、ＰＬＣプログラムの実行権限有無の判定（確認）を行い、判定結果（実行権限有り／実行権限無し）を応答する。プログラム実行部２０５は、ライセンス認証部２１２からの実行権限有りを得た場合、ＰＬＣプログラムメモリ２０４に格納されたＰＬＣプログラムの実行を開始する。この点、詳細は後述する。
【０１６９】
さらに、プログラム実行部２０５は、ＰＬＣプログラムを実行する際、上述したように、プログラムメモリ２０４に格納されたＰＬＣプログラムにセキュリティコードチェック用のＳＦＢ機能部２０６を呼び出すコードが含まれている場合には、そのコードに従って、ＳＦＢ機能部２０６を呼び出す。そして、プログラム実行部２０５は、ＳＦＢ機能部２０６からＰＬＣプログラムの実行許可を得た場合のみ、ＰＬＣプログラムの実行を継続する。
【０１７０】
ユーザＲＯＭカードスロット２１０は、記録媒体６００を挿入（装着）するためのカードスロットである。ライセンスファイルが記録された記録媒体６００は、ライセンスファイル発行装置５００のユーザＲＯＭカードスロット５０１から抜き取られ、ＰＬＣ２００のユーザＲＯＭカードスロット２１０に挿入される。
【０１７１】
［ライセンスファイルの発行］
次に、ライセンスファイルの発行について詳しく説明する。ライセンスファイルは、ライセンスファイル発行装置５００により発行され、記録媒体６００に格納される。
【０１７２】
（ライセンスファイル発行装置の操作画面例）
ライセンスファイル発行装置５００の操作画面例について説明する。図１７は、本実施形態２に係るライセンスファイル発行装置の操作画面例を示す。ライセンスファイル発行装置５００は、ライセンスファイルを生成し、記録媒体６００に出力する端末装置である。例えば、メーカーの保守作業員がライセンスファイル発行装置５００のディスプレイ画面に表示される操作画面を操作することにより、ライセンスファイルを生成し出力することができる。
【０１７３】
図１７に示されるように、保守作業員は、まず、ユーザ認証画面（ａ）において、ライセンスファイル発行装置５００にログインするためのパスワードを入力する。ユーザ認証に成功すると、メニュー画面（ｂ）へ進む。そして、メニュー画面（ｂ）において、保守作業員が「ライセンスファイル発行」を押下すると、ライセンスファイル発行画面（ｃ）へ進む。
【０１７４】
ライセンスファイル発行画面（ｃ）において、保守作業員は、画面内の各項目の入力を行う。「発行者」は、例えば、保守作業員名やメーカー名など、ライセンスファイルの発行者を入力する項目である。また、「利用者」は、例えば、ＰＬＣ２００のユーザ名など、ライセンスファイルの利用者を入力する項目である。「ライセンス有効期間」は、ライセンスファイルの有効期間を入力する項目である。ライセンスファイルの有効期間を定める場合には、「指定する」を選択し、具体的な有効期間を入力する。ライセンスファイルの有効期間を定めない場合には、「指定しない」を選択すればよい。この場合のライセンスファイルの有効期間は、有効期限なし（無制限）となる。
【０１７５】
「ライセンスファイル格納先」は、発行したライセンスファイルの格納先を指定する項目である。保守作業員は、記録媒体６００が接続されているドライブを選択する。また、「発行メモ」には、１つのライセンスファイル毎に任意のメモを併せて付すことができる。
【０１７６】
保守作業員は、以上の入力を終えると、「発行」を押下する。その後、確認画面（ｄ）が表示され、ライセンスファイルの出力が完了する。これにより、記録媒体６００には、発行されたライセンスファイルが格納される。
【０１７７】
（ライセンスファイルの生成処理）
次に、ライセンスファイル発行装置５００が実行するライセンスファイルの生成処理について説明する。図１８は、本実施形態２に係るライセンスファイル生成処理の流れを示すフローチャートである。なお、ライセンスファイル生成処理は、ライセンスファイル発行画面（ｃ）において、「発行」が押下されたタイミングで開始される。また、図１９は、本実施形態２に係るライセンスファイル生成処理の流れを示す図である。併せて説明する。
【０１７８】
Ｓ６１：ライセンスファイル発行装置５００の識別子取得部５０２は、記録媒体６００から、「記録媒体の識別子」を取得する。「記録媒体の識別子」を取得できた場合は、次のＳ６２へ進む。一方、例えば、記録媒体６００がユーザＲＯＭカードスロット５０１に挿入されていない場合、識別子取得部５０２は、「記録媒体の識別子」を取得できない。このように「記録媒体の識別子」を取得できない場合には、ライセンスファイル生成処理を正常に実行できないため、ライセンスファイル生成処理を終了する。
【０１７９】
Ｓ６２：次に、ライセンスファイル発行装置５００のライセンスファイル生成部５０３は、「ユーザ情報」（「発行者」、「利用者」）、「有効期限」の情報を取得する。これらの情報は、ライセンスファイル発行画面（ｃ）において、入力される情報である。「ユーザ情報」（「発行者」、「利用者」）、「有効期限」を取得できた場合は、次のＳ６３へ進む。一方、例えば、ライセンスファイル発行画面（ｃ）において、「ユーザ情報」（「発行者」、「利用者」）、「有効期限」の情報が未入力である場合、ライセンスファイル生成部５０３は、これらの情報を取得できない。よって、ライセンスファイル生成処理を正常に実行できず、ライセンスファイル生成処理を終了する。
【０１８０】
Ｓ６３：ライセンスファイル生成部５０３は、「ユーザ情報」と、「有効期限」と、「記録媒体の識別子」とを含むライセンス情報１９１を作成する。
【０１８１】
Ｓ６４：次に、ライセンスファイル生成部５０３は、ライセンス発行装置５００の公開鍵１９２を、ライセンス発行装置５００及びＰＬＣ２００の共通鍵１９３で暗号化する。なお、ライセンスファイル生成部５０３は、ライセンス発行装置５００の公開鍵１９２と、ライセンス発行装置５００及びＰＬＣ２００の共通鍵１９３とを、予め保持しておく。
【０１８２】
Ｓ６５：次に、ライセンスファイル生成部５０３は、Ｓ６３で作成したライセンス情報１９１と、Ｓ６４で暗号化された公開鍵１９４とを、ハッシュ関数で演算し、ハッシュ値１９５を算出する。
【０１８３】
Ｓ６６：ライセンスファイル生成部５０３は、ライセンス発行装置５００の秘密鍵１９６を用いて、ハッシュ値１９５を暗号化し、この暗号化されたハッシュ値を電子署名１９７とする。なお、ライセンスファイル生成部５０３は、ライセンス発行装置５００の秘密鍵１９６を予め保持しておく。
【０１８４】
Ｓ６７：ライセンスファイル生成部５０３は、Ｓ６３で作成したライセンス情報１９１と、Ｓ６４で暗号化された公開鍵１９４と、Ｓ６６で作成された電子署名１９７とを含むライセンスファイル１９８を生成する。電子署名１９７は、ライセンスファイルの改ざん有無の確認に用いられる。
【０１８５】
図２０は、本実施形態２に係るライセンスファイルの一例を示す。ライセンスファイル１９８は、ライセンス情報１９１、暗号化された公開鍵１９４、電子署名１９７を含み生成される。
【０１８６】
［ライセンスファイルの認証］
次に、ＰＬＣ２００が実行するライセンスファイルの認証について詳しく説明する。ＰＬＣ２００において、ＰＬＣプログラムを実行するにあたり、事前の準備として、保守作業員又はユーザは、ライセンスファイルが格納された記録媒体６００を、ＰＬＣ２００のユーザＲＯＭカードスロット２１０に挿入する。
【０１８７】
ＰＬＣ２００のプログラム実行部２０５は、プログラムメモリ２０４に格納されたＰＬＣプログラムを実行する前に、ＰＬＣプログラムの実行権限確認を、ライセンス認証部２１２に要求する。ライセンス認証部２１２は、記録媒体６００のライセンスファイルを用いて、ＰＬＣプログラムに対する実行権限の有無を判定し、その判定結果を応答する。そして、プログラム実行部２０５は、ライセンス認証部２１２から実行権限有りとの判定結果を得た場合、ＰＬＣプログラムメモリ２０４に格納されたＰＬＣプログラムの実行を開始する。以下、詳しく説明する。
【０１８８】
（ライセンスファイルの認証処理）
図２１は、本実施形態２に係るライセンスファイル認証処理の流れを示すフローチャートである。なお、ライセンスファイル認証処理は、ライセンス認証部２１２がプログラム実行部２０５からＰＬＣプログラムの実行可否判定の要求を受信したタイミングで開始される。
【０１８９】
Ｓ７１：ライセンス認証部２１２の改ざん確認部２１２ｂは、記録媒体６００から、ライセンスファイルを取得する。ライセンスファイルを取得できた場合は、次のＳ７２へ進む。一方、例えば、記録媒体６００にライセンスファイルが記録されていない場合、改ざん確認部２１２ｂは、ライセンスファイルを取得できない。この場合、Ｓ７７へ進む。
【０１９０】
Ｓ７２：改ざん確認部２１２ｂは、取得したライセンスファイルが改ざんされていないかどうかを確認する。
【０１９１】
図２２は、本実施形態２に係るライセンスファイルの改ざん有無確認処理の流れを示すフローチャートである。図２３は、本実施形態２に係るライセンスファイルの改ざん有無確認処理の流れを示す図である。図を参照し、改ざん確認部２１２ｂによるライセンスファイルの改ざん有無確認処理を説明する。
【０１９２】
Ｓ８１：まず、改ざん確認部２１２ｂは、ライセンスファイル１９８内のライセンス情報１９１及び暗号化された公開鍵１９４を取り出す。ライセンスファイル１９８は、ライセンス情報１９１、暗号化された公開鍵１９４、電子署名１９７を含んでいる。そして、改ざん確認部２１２ｂは、取り出したライセンス情報１９１と暗号化された公開鍵１９４とを、ライセンスファイル生成部５０３と同じハッシュ関数で演算し、ハッシュ値１９５ｂを算出する。
【０１９３】
Ｓ８２：次に、改ざん確認部２１２ｂは、ライセンスファイル１９８内の暗号化された公開鍵１９４を、ライセンス発行装置５００及びＰＬＣ２００の共通鍵１９３で復号化する。なお、改ざん確認部２１２ｂは、ライセンス発行装置５００及びＰＬＣ２００の共通鍵１９３を予め保持しておく。
【０１９４】
Ｓ８３：次に、改ざん確認部２１２ｂは、ライセンスファイル内の電子署名１９７を取り出す。そして、改ざん確認部２１２ｂは、復号化した公開鍵１９２で、取り出した電子署名１９７を復号化する。なお、この復号化された電子署名１９７は、ハッシュ値１９５ｂである。
【０１９５】
Ｓ８４：改ざん確認部２１２ｂは、Ｓ８１で算出したハッシュ値１９５ｂと、Ｓ８３で電子署名１９７から復号化したハッシュ値１９５とを比較する。両ハッシュ値が一致した場合は、Ｓ８５へ進む。一方、両ハッシュ値が一致しない場合は、Ｓ８６へ進む。
【０１９６】
Ｓ８５：改ざん確認部２１２ｂは、ライセンスファイルは、改ざんなしを確認する。
【０１９７】
Ｓ８６：改ざん確認部２１２ｂは、ライセンスファイルは、改ざんありを確認する。
【０１９８】
以上、ライセンスファイルの改ざん有無確認処理である。再び図２１へ戻る。
【０１９９】
Ｓ７３：ライセンス認証部２１２の判定部２１２ｃは、ライセンスファイルから取得した「有効期限」に基づいて、当該ライセンスファイルは有効期限内であるかどうかを確認する。具体的には、現在の日時刻が「有効期限」内であるか否かを確認し、現在の日時刻が「有効期限」内である場合、当該ライセンスファイルは有効期限内であると確認する。一方、現在の日時刻が「有効期限」内でない場合、当該ライセンスファイルは有効期限内でないと確認する。また、ライセンスファイルから取得した「有効期限」が有効期限なし（無制限）である場合、判定部２１２ｃは、当該ライセンスファイルは有効期限内であると確認する。
【０２００】
なお、「有効期限」は、ライセンスファイルのライセンス情報に含まれている情報である（例えば、図１８参照）。ライセンスファイル自体は、改ざん確認部２１２ｂにより、改ざんされていないことが既に確認されているため、この「有効期限」についても、改ざんされていない。
【０２０１】
また、ライセンスファイルのライセンス情報には、「ユーザ情報」として、「発行者」、「利用者」が含まれている。従って、ＰＬＣ２００側に、「発行者」（例えば、メーカー名）、「利用者」（例えば、ユーザ名）を予め登録しておき、判定部２１２ｃは、ライセンスファイルから取得した「発行者」、「利用者」と、ＰＬＣ２００側に登録されている「発行者」、「利用者」とが、一致するかどうかをさらに確認することも可能である。判定部２１２ｃは、「発行者」、「利用者」の情報が一致する場合、当該ライセンスファイルは有効であると確認する。
【０２０２】
Ｓ７４：ライセンス認証部２１２の識別子取得部２１２ａは、記録媒体６００から、「記録媒体の識別子」を取得する。「記録媒体の識別子」を取得できた場合は、次のＳ７５へ進む。一方、例えば、記録媒体６００がユーザＲＯＭカードスロット２０１に挿入されていない場合、識別子取得部２１２ａは、「記録媒体の識別子」を取得できない。この場合、Ｓ７７へ進む。
【０２０３】
Ｓ７５：次に、ライセンス認証部２１２の判定部２１２ｃは、Ｓ７４で取得した「記録媒体の識別子」と、ライセンスファイルから取得した「記録媒体の識別子」（例えば、図１８参照）とを比較照合する。なお、ライセンスファイルは、改ざん確認部２１２ｂにより、改ざんされていないことが既に確認されているため、この「記録媒体の識別子」についても、改ざんされていない。
【０２０４】
Ｓ７６：判定部２１２ｃは、ＰＬＣプログラムの実行権限有りと判定する。これにより、ライセンス認証部２１２は、プログラム実行部２０５に対し、判定結果（実行権限有り）を応答する。
【０２０５】
Ｓ７７：判定部２１２ｃは、ＰＬＣプログラムの実行権限無しと判定する。これにより、ライセンス認証部２１２は、プログラム実行部２０５に対し、判定結果（実行権限無し）を応答する。
【０２０６】
これにより、プログラム実行部２０５は、ライセンス認証部２１２から実行権限有りとの判定結果を得た場合、ＰＬＣプログラムメモリ２０４に格納されたＰＬＣプログラムの実行を開始する。一方、プログラム実行部２０５は、ライセンス認証部２１２から実行権限無しとの判定結果を得た場合、ＰＬＣプログラムメモリ２０４に格納されたＰＬＣプログラムの実行を禁止する。
【０２０７】
なお、ＰＬＣプログラムの実行を禁止するタイミングは、原則、即時であるが、運用上の都合に応じて、一定期間経過後に行うようにすることもできる。例えば、ライセンスファイルの「有効期限」が切れた場合、ＰＬＣ２００は、即時停止してしまうと、工場の生産活動等も即時停止してしまう。この場合、ユーザは、ライセンスファイルの更新を迅速に行う必要はあるが、ライセンスファイルの更新が完了するためには、ある程度の時間を要することが想定される。従って、ＰＬＣプログラムの実行を禁止するタイミングを一定期間経過後とすることにより、一定期間の間、ＰＬＣ２００の停止を回避することが可能である。
【０２０８】
［まとめ］
以上のように、ＰＬＣ２００のプログラム実行部２０５は、プログラムメモリ２０４に格納されたＰＬＣプログラムを実行する前に、ライセンス認証部２１２にＰＬＣプログラムの実行権限の確認を要求する。ライセンス認証部２１２は、記録媒体６００のライセンスファイルを用いて、ＰＬＣプログラムの実行権限有無判定を行い、判定結果を応答する。そして、プログラム実行部２０５は、ライセンス認証部２１２から実行権限有りとの判定結果を得た場合、ＰＬＣプログラムメモリ２０４に格納されたＰＬＣプログラムの実行を開始する。一方、プログラム実行部２０５は、ライセンス認証部２１２から実行権限無しとの判定結果を得た場合、ＰＬＣプログラムメモリ２０４に格納されたＰＬＣプログラムの実行を禁止する。
【０２０９】
従って、メーカー及びユーザ間のライセンス契約等によって、ＰＬＣプログラムの使用許可台数が定められている場合、メーカーは、ライセンスファイル発行装置５００を用いて、契約台数分のライセンスファイルを発行することにより、ユーザが利用可能なＰＣＬプログラムのＰＬＣ台数を制限することが可能となる。即ち、ＰＬＣプログラムのライセンス管理を行うことが可能となる。
【０２１０】
なお、プログラム実行部２０５は、ライセンス認証部２１２からの実行許可を得た場合、ＰＬＣプログラムのコードを実行し始めるが、実施形態１で説明したように、そのコードにセキュリティコードチェック用のＳＦＢ機能部２０６を呼び出すコードが含まれている場合には、そのコードに従って、ＳＦＢ機能部２０６を呼び出す。そして、プログラム実行部２０５は、ＳＦＢ機能部２０６からＰＬＣプログラムの実行許可を得た場合のみ、ＰＬＣプログラムの実行を継続する。
【０２１１】
また、実施形態２のライセンスファイルのみで、ＰＬＣプログラムの実行可否を判定するようにすることも可能である。この場合、プログラム実行部２０５は、ライセンス認証部２１２からの実行許可を得た場合、ＰＬＣプログラムのコードを実行し始めるが、そのコードにセキュリティコードチェック用のＳＦＢ機能部２０６を呼び出すコードが含まれている場合であっても、そのコードを無視し、ＳＦＢ機能部２０６を呼び出さない。
【０２１２】
（ＰＬＣプログラムの不正利用防止例）
ここで、契約台数以上のＰＬＣでＰＬＣプログラムを、不正に使おうとするユーザが存在したとする。この場合であっても、本実施形態２に係る制御システムによれば、ＰＬＣプログラムの不正利用を防止することができる。
【０２１３】
例えば、ユーザは、メーカーにより正規に発行されたライセンスファイルを記録媒体（記録媒体６００−１とする）から取り出して、別の記録媒体（記録媒体６００−２とする）にコピーする。そして、ＰＬＣに、コピーしたライセンスファイルが格納された記録媒体６００−２を挿入し、ＰＬＣプログラムを実行しようとする。
【０２１４】
しかしながら、コピーしたライセンスファイル内の「記録媒体の識別子」は、記録媒体６００−１の「記録媒体の識別子」である。このため、コピーしたライセンスファイル内の「記録媒体の識別子」と、記録媒体６００−２の「記録媒体の識別子」とは、一致せず、ＰＬＣプログラムの実行は禁止される（図２１のＳ７５）。即ち、このようなＰＬＣプログラムの不正利用は防止される。
【０２１５】
またこの場合、さらに、ユーザが記録媒体６００−２にコピーしたライセンスファイル内の「記録媒体の識別子」を書き換えたとする。具体的には、コピーしたライセンスファイル内の「記録媒体の識別子」を、記録媒体６００−１の「記録媒体の識別子」から、記録媒体６００−２の「記録媒体の識別子」に書き換える。
【０２１６】
しかしながら、ライセンスファイル内の情報が書き換えられたことにより、ハッシュ値が一致せず、ＰＬＣプログラムの実行は禁止される（図２２のＳ８４）。即ち、このような場合であっても、ＰＬＣプログラムの不正利用は防止される。
【０２１７】
また、契約以上の有効期限を延長させようと、ユーザが記録媒体６００−１に格納されたライセンスファイル内の「有効期限」の情報を書き換えたとする。
【０２１８】
しかしながら、ライセンスファイル内の情報が書き換えられたことにより、ハッシュ値が一致せず、ＰＬＣプログラムの実行は禁止される（図２２のＳ８４）。即ち、このような場合であっても、ＰＬＣプログラムの不正利用は防止される。
【０２１９】
以上のように、本実施形態１、応用例、及び本実施形態２によれば、制御プログラムの運用・保守性に配慮しつつ、ＰＬＣ上で動作する制御プログラムに対するセキュリティの観点から、制御プログラムの不正使用を防止する制御システム、制御装置及び制御方法を提供することができる。
【０２２０】
なお本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【０２２１】
１００              支援ローダ
１０１              プログラム作成部
１０２              メモリ
２００              ＰＬＣ
２０１              セキュリティ情報登録受付部
２０２              セキュアメモリ
２０３              稼働時間計測部
２０４              プログラムメモリ
２０５              プログラム実行部
２０６              ＳＦＢ機能部２０６
２０７              比較照合部
２０８              コード変換部
２０９              通知部
２１０              ユーザＲＯＭカードスロット
２１１              位置情報取得部
２１２              ライセンス認証部
２１２ａ           識別子取得部
２１２ｂ           改ざん確認部
２１２ｃ           判定部
３００              セキュリティファイル発行装置
３０１              セキュリティファイル生成部
４００              セキュリティコード登録装置
４０１              セキュリティファイル取込部
４０２              メモリ
４０３              セキュリティ情報登録部
４０４              コード変換部
５００              ライセンスファイル発行装置
５０１              ユーザＲＯＭカードスロット
５０２              識別子取得部
５０３              ライセンスファイル生成部
６００              記録媒体
【図１】
0005900143.tif 000002
【図２】
0005900143.tif 000003
【図３】
0005900143.tif 000004
【図４】
0005900143.tif 000005
【図５】
0005900143.tif 000006
【図６】
0005900143.tif 000007
【図７】
0005900143.tif 000008
【図８】
0005900143.tif 000009
【図９】
0005900143.tif 000010
【図１０】
0005900143.tif 000011
【図１１】
0005900143.tif 000012
【図１２】
0005900143.tif 000013
【図１３】
0005900143.tif 000014
【図１４】
0005900143.tif 000015
【図１５】
0005900143.tif 000016
【図１６】
0005900143.tif 000017
【図１７】
0005900143.tif 000018
【図１８】
0005900143.tif 000019
【図１９】
0005900143.tif 000020
【図２０】
0005900143.tif 000021
【図２１】
0005900143.tif 000022
【図２２】
0005900143.tif 000023
【図２３】
0005900143.tif 000024