(57)【特許請求の範囲】
【請求項１】
第１の秘密情報を用いて第１の変換が行われたラダープログラムに、前記第１の秘密情報と対をなす第１の公開情報を用いて第１の逆変換を行い、前記第１の逆変換が行われたラダープログラムに、特定のプログラマブルコントローラでは動作し且つ他のプログラマブルコントローラでは動作しないよう、第２の公開情報を用いて第２の変換を行うエンジニアリングツールと、
前記第２の変換が行われたラダープログラムに、前記第２の公開情報と対をなす第２の秘密情報を用いて第２の逆変換を行ない、前記第２の逆変換が行われたラダープログラムを実行するプログラマブルコントローラと、
を備えることを特徴とするラダープログラム不正利用防止システム。
【請求項２】
前記エンジニアリングツールは、前記特定のプログラマブルコントローラに対応するライセンスの情報に基づいて、前記第２の変換を行う、
ことを特徴とする請求項１に記載のラダープログラム不正利用防止システム。
【請求項３】
前記エンジニアリングツールは、前記第１の変換が行われたラダープログラムが不正なプログラムであるか否かを判断し、
前記プログラマブルコントローラは、前記第２の変換が行われたラダープログラムが不正なプログラムであるか否かを判断する、
ことを特徴とする請求項１または２に記載のラダープログラム不正利用防止システム。
【請求項４】
前記エンジニアリングツールは、前記第１の変換が行われたラダープログラムに第１の逆変換を行い、前記第１の逆変換によって復元された前記ラダープログラムに前記第２の変換を行う、
ことを特徴とする請求項１から３のいずれか１つに記載のラダープログラム不正利用防止システム。
【請求項５】
前記プログラマブルコントローラは、前記第２の変換が行われたラダープログラムに第２の逆変換を行うことによって前記ラダープログラムを復元し、復元した前記ラダープログラムに前記判断を実行し、前記ラダープログラムを動作させることができる場合には、復元した前記ラダープログラムを用いて被制御機器を制御する、
ことを特徴とする請求項３に記載のラダープログラム不正利用防止システム。
【請求項６】
前記ラダープログラムは、第１および第２のセグメントを含むとともに、前記第１のセグメントは前記エンジニアリングツールで復号が可能なよう暗号化され、前記第２のセグメントは、前記エンジニアリングツールでは復号できず前記プログラマブルコントローラで復号が可能なよう暗号化されている、
ことを特徴とする請求項１から５のいずれか１つに記載のラダープログラム不正利用防止システム。
【請求項７】
前記エンジニアリングツールは、前記第２のセグメントを用いたシミュレーションを前記プログラマブルコントローラに要求し、
前記プログラマブルコントローラは、前記第２のセグメントを用いたシミュレーションを実行して実行結果を前記エンジニアリングツールに返す、
ことを特徴とする請求項６に記載のラダープログラム不正利用防止システム。
【請求項８】
前記第１の変換は、前記ライセンスの情報を生成して前記エンジニアリングツールに提供するライセンス配信サーバで行われる、
ことを特徴とする請求項２に記載のラダープログラム不正利用防止システム。
【請求項９】
前記ライセンスの情報は、前記第２の公開情報と前記第２の秘密情報とのペアである公開鍵ペアを用いて作成された情報である、
ことを特徴とする請求項２に記載のラダープログラム不正利用防止システム。
【請求項１０】
ラダープログラムに、第１の秘密情報を用いて第１の変換を行うライセンス配信サーバと、
前記第１の変換が行われたラダープログラムに、前記第１の秘密情報と対をなす第１の公開情報を用いて第１の逆変換を行い、前記第１の逆変換が行われたラダープログラムに、特定のプログラマブルコントローラでは動作し且つ他のプログラマブルコントローラでは動作しないよう、第２の公開情報を用いて第２の変換を行うエンジニアリングツールと、
前記第２の変換が行われたラダープログラムに、前記第２の公開情報と対をなす第２の秘密情報を用いて第２の逆変換を行ない、前記第２の逆変換が行われたラダープログラムを実行するプログラマブルコントローラと、
を備えることを特徴とするラダープログラム不正利用防止システム。
【請求項１１】
エンジニアリングツールが、第１の秘密情報を用いて第１の変換が行われたラダープログラムに、第１の公開情報を用いて第１の逆変換を行う第１の変換ステップと、
前記エンジニアリングツールが、前記第１の逆変換が行われたラダープログラムに、特定のプログラマブルコントローラでは動作し且つ他のプログラマブルコントローラでは動作しないよう、第２の公開情報を用いて第２の変換を行う第２の変換ステップと、
プログラマブルコントローラが、前記第２の変換が行われたラダープログラムに、第２の秘密情報を用いて第２の逆変換を行い、前記第２の逆変換が行われたラダープログラムを実行する実行ステップと、
を含むことを特徴とするラダープログラム不正利用防止方法。
【請求項１２】
第１の秘密情報を用いて第１の変換が行われたラダープログラムに第１の公開情報を用いて第１の逆変換を行うラダープログラム逆変換部と、
前記第１の逆変換が行われたラダープログラムに、特定のプログラマブルコントローラでは動作し且つ他のプログラマブルコントローラでは動作しないよう、前記特定のプログラマブルコントローラが保有する第２の秘密情報と対をなす第２の公開情報を用いて第２の変換を行うラダープログラム再変換部と、
を備えることを特徴とするエンジニアリングツール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラを動作させるためのラダープログラムを配布するラダープログラム不正利用防止システム、ラダープログラム不正利用防止方法、エンジニアリングツール、ライセンス配信サーバおよびプログラマブルコントローラに関する。
【背景技術】
【０００２】
プログラマブルコントローラに搭載されるラダープログラムは、重要な設計資産であるので、悪意ある第３者からセキュリティ機能によって保護する必要がある。一般的な保護方法の一例は、プログラマブルコントローラによるラダープログラムの読み出しあるいは書き込みを、パスワードによってアクセス制御する方法である。【０００３】
また、特許文献１は、ラダープログラム上で専用の保護命令を用いるプログラム保護方法を開示している。このプログラム保護方法は、保護命令と保護終了命令とによって、ラダープログラムにおける保護区間を自由に設定している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−１２４３０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来の技術である特許文献１は、プログラマブルコントローラおよび周辺機器を組み合わせたパッケージ製品に含まれるラダープログラム、すなわちプログラマブルコントローラにインストールされるラダープログラムを適切に保護することができなかった。これは、特許文献１に記載の技術が、ラダープログラム単体の保護しかできず、パッケージ製品に含まれるラダープログラムを特定のプログラマブルコントローラに限定して動作するように保護していないからである。このため、ラダープログラムの利用権限が許諾されていないプログラマブルコントローラであってもラダープログラムを不正に利用できてしまうという問題があった。【０００６】
本発明は、上記に鑑みてなされたものであって、例えば、販売するパッケージ製品に含めて配布されたラダープログラムの不正な利用を防ぐことができるラダープログラム不正利用防止システムを得ることを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本発明は、ラダープログラム不正利用防止システムにおいて、第１の秘密情報を用いて第１の変換が行われたラダープログラムに、第１の秘密情報と対をなす第１の公開情報を用いて第１の逆変換を行い、第１の逆変換が行われたラダープログラムに、特定のプログラマブルコントローラでは動作し且つ他のプログラマブルコントローラでは動作しないよう、第２の公開情報を用いて第２の変換を行うエンジニアリングツールを備える。また、本発明のラダープログラム不正利用防止システムにおいて、第２の変換が行われたラダープログラムに、第２の公開情報と対をなす第２の秘密情報を用いて第２の逆変換を行ない、第２の逆変換が行われたラダープログラムを実行するプログラマブルコントローラを備える。
【発明の効果】
【０００８】
本発明にかかるラダープログラム不正利用防止システム、ラダープログラム不正利用防止方法、エンジニアリングツール、ライセンス配信サーバおよびプログラマブルコントローラは、配布されたラダープログラムの不正な利用を防ぐことができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１にかかるラダープログラム不正利用防止システムの構成を示す図
【図２】実施の形態１にかかるライセンス配信サーバの構成例を示すブロック図
【図３】実施の形態１にかかるエンジニアリングツールの機能構成例を示すブロック図
【図４】実施の形態１にかかるプログラマブルコントローラの構成例を示すブロック図
【図５】実施の形態１にかかるラダープログラム不正利用防止システムの動作処理手順を示すフローチャート
【図６】実施の形態１にかかるラダープログラム不正利用防止システムのハードウェア構成を示す図
【図７】実施の形態２に係るライセンス配信サーバが実行する処理を説明するための図
【図８】実施の形態２に係るエンジニアリングツールが実行する処理を説明するための図
【図９】実施の形態２にかかるエンジニアリングツールが実行するＦＢ（Function  Block）のシミュレーション処理を説明するための図
【発明を実施するための形態】
【００１０】
以下に、本発明の実施の形態にかかるラダープログラム不正利用防止システム、ラダープログラム不正利用防止方法、エンジニアリングツール、ライセンス配信サーバおよびプログラマブルコントローラを図面に基づいて詳細に説明する。なお、これらの実施の形態によりこの発明が限定されるものではない。
【００１１】
実施の形態１．
図１は、実施の形態１にかかるラダープログラム不正利用防止システムの構成を示す図である。実施の形態１に係るラダープログラム不正利用防止システム１は、パッケージ製品に含まれるラダープログラム４２をプログラマブルコントローラ３０Ａなどの外部機器に配布するシステムである。パッケージ製品は、販売元であるベンダが、購入者であるユーザに提供する製品群である。パッケージ製品は、プログラマブルコントローラ３０Ａと、周辺機器と、これらを制御するためのラダープログラム４２とが組み合わされてセットでユーザに販売される。周辺機器の例は、ＩＯ（Input/Output）ユニットまたは電源ユニットである。
【００１２】
ラダープログラム不正利用防止システム１は、パッケージ製品のベンダが管理するライセンス配信サーバ１０Ａと、パッケージ製品の一部であるプログラマブルコントローラ３０Ａと、ユーザがプログラマブルコントローラ３０Ａを動作させるための開発を行う際に用いられる開発ＰＣ（Personal  Computer）２０とを備えている。そして、ライセンス配信サーバ１０Ａ、開発ＰＣ２０およびプログラマブルコントローラ３０Ａは、インターネット２に接続されている。また、開発ＰＣ２０およびプログラマブルコントローラ３０Ａは、ユーザが有しているネットワークに接続されている。なお、プログラマブルコントローラ３０Ａは、インターネット２に接続されていなくてもよい。また、図１では、ラダープログラム不正利用防止システム１内にインターネット２を図示しているが、ラダープログラム不正利用防止システム１は、インターネット２を含んでいない。
【００１３】
ライセンス配信サーバ１０Ａの一例は、サーバ用ＰＣである。また、開発ＰＣ２０は、プログラマブルコントローラ３０Ａが用いるラダープログラム４２を開発するためのエンジニアリングツール２１Ａを備えている。
【００１４】
エンジニアリングツール２１Ａは、ラダープログラム４２を開発するためのエンジニアリング環境の一例であり、エンジニアリング環境ソフトウェアとも呼ばれる。アプリケーションプログラムであるエンジニアリングツール２１Ａは、開発ＰＣ２０にインストールされ、開発ＰＣ２０上で動作する。
【００１５】
プログラマブルコントローラ３０Ａは、センサまたはロボットといった図示しない被制御機器に接続されており、ラダープログラム４２を用いて被制御機器を制御する。プログラマブルコントローラ３０Ａは、プログラマブルロジックコントローラ（ＰＬＣ：Programmable  Logic  Controller）とも呼ばれる。
【００１６】
パッケージ製品のベンダは、プログラマブルコントローラ３０Ａが被制御機器を制御するためのラダープログラム４２を、ＤＶＤ（Digital  Versatile  Disc）といった可搬性の記録媒体４３に書き込んでユーザに配布する。また、ベンダは、インターネット２経由で、または郵便といった手段で、ユーザに対してライセンス証書４１を配布する。ライセンス証書４１は、特定のプログラマブルコントローラであるプログラマブルコントローラ３０Ａに対応するライセンスの情報である。ライセンス証書４１は、ライセンスの有効期限と、パッケージ製品内で利用可能な機能の情報と、発行先のプログラマブルコントローラ３０Ａに割り当てられた公開鍵とを、含んでいる。
【００１７】
実施の形態１のラダープログラム不正利用防止システム１は、ラダープログラム４２の配布処理、ユーザのエンジニアリング環境における編集処理、ユーザのエンジニアリング環境におけるシミュレーション処理およびプログラマブルコントローラ３０Ａへの組み込み処理を総合的に保護する。
【００１８】
ここで、パッケージ製品に含まれるラダープログラム４２の保護を実現するうえでの制約条件について説明する。
＜１＞販売したパッケージ製品に含まれるラダープログラム４２は、特定のプログラマブルコントローラ３０Ａで動作可能であり、且つプログラマブルコントローラ３０Ａ以外の他のプログラマブルコントローラでは動作しない。
＜２＞ラダープログラム不正利用防止システム１は、ユーザに対して個別にライセンス証書４１を発行する。
＜３＞ラダープログラム不正利用防止システム１は、ユーザに対して、ラダープログラム４２を記録媒体４３を介して配信、またはインターネット２を介したオンラインによって配信する。
＜４＞保護対象のラダープログラム４２内の一部は、エンジニアリングツール２１Ａによってユーザが編集する可能性がある。
＜５＞保護対象のラダープログラム４２は、ファンクションブロックと呼ばれるユーザが編集できない部分を有している。
＜６＞ユーザは、ラダープログラム４２をエンジニアリングツール２１Ａ上で仮想的に動作させる処理であるシミュレーションを実行する可能性がある。
【００１９】
ラダープログラム不正利用防止システム１では、上述の＜１＞から＜６＞の制約条件のもとで、ライセンス配信サーバ１０Ａが、ユーザに固有のラダープログラム４２をユーザ毎に配布する。なお、＜３＞で示したように、ラダープログラム不正利用防止システム１は、ラダープログラム４２をオンラインで配信してもよいが、以下の説明では、ライセンス配信サーバ１０Ａがラダープログラム４２を、記録媒体４３を介して配信する場合について説明する。
【００２０】
ここで、ラダープログラム不正利用防止システム１が用いる公開鍵および秘密鍵について説明しておく。ラダープログラム不正利用防止システム１は、第１の秘密情報であるベンダ秘密鍵Ｖsec、エンジニアリング環境公開鍵Ｅpub＿１、第１の公開情報であるベンダ公開鍵Ｖpub、エンジニアリング環境秘密鍵Ｅsec、第２の公開情報であるコントローラ公開鍵Ｃpub、エンジニアリング環境公開鍵Ｅpub＿２、および第２の秘密情報であるコントローラ秘密鍵Ｃsecを用いる。
【００２１】
＜ベンダ秘密鍵Ｖsec＞
ベンダ秘密鍵Ｖsecは、ベンダであるライセンス配信サーバ１０Ａが用いる秘密鍵である。ライセンス配信サーバ１０Ａは、エンジニアリングツール２１Ａにラダープログラム４２を提供する際にベンダ秘密鍵Ｖsecを用いる。具体的には、ライセンス配信サーバ１０Ａは、ラダープログラム４２を暗号化する際にベンダ秘密鍵Ｖsecを用いる。
【００２２】
＜エンジニアリング環境公開鍵Ｅpub＿１＞
エンジニアリング環境公開鍵Ｅpub＿１は、ライセンス配信サーバ１０Ａが用いる公開鍵である。ライセンス配信サーバ１０Ａは、エンジニアリングツール２１Ａにラダープログラム４２を提供する際にエンジニアリング環境公開鍵Ｅpub＿１を用いる。具体的には、ライセンス配信サーバ１０Ａは、ラダープログラム４２を暗号化する際にエンジニアリング環境公開鍵Ｅpub＿１を用いる。
【００２３】
＜ベンダ公開鍵Ｖpub＞
ベンダ公開鍵Ｖpubは、エンジニアリングツール２１Ａが用いる公開鍵である。エンジニアリングツール２１Ａは、ライセンス配信サーバ１０Ａからラダープログラム４２を取得する際にベンダ公開鍵Ｖpubを用いる。具体的には、エンジニアリングツール２１Ａは、暗号化されたラダープログラム４２である後述の配布用ファイルデータ１０１を復号する際にベンダ公開鍵Ｖpubを用いる。ベンダ公開鍵Ｖpubは、ベンダ秘密鍵Ｖsecと対をなしている。このため、ベンダ公開鍵Ｖpubおよびベンダ秘密鍵Ｖsecの関係は、ライセンス配信サーバ１０Ａとエンジニアリングツール２１Ａとの間で共有されているともいえる。
【００２４】
＜エンジニアリング環境秘密鍵Ｅsec＞
エンジニアリング環境秘密鍵Ｅsecは、エンジニアリングツール２１Ａが用いる秘密鍵である。エンジニアリングツール２１Ａは、ライセンス配信サーバ１０Ａからラダープログラム４２を取得する際にエンジニアリング環境秘密鍵Ｅsecを用いる。具体的には、エンジニアリングツール２１Ａは、配布用ファイルデータ１０１を復号する際にエンジニアリング環境秘密鍵Ｅsecを用いる。エンジニアリング環境秘密鍵Ｅsecは、エンジニアリング環境公開鍵Ｅpub＿１と対をなしている。このため、エンジニアリング環境秘密鍵Ｅsecおよびエンジニアリング環境公開鍵Ｅpub＿１の関係は、ライセンス配信サーバ１０Ａとエンジニアリングツール２１Ａとの間で共有されているともいえる。
【００２５】
＜コントローラ公開鍵Ｃpub＞
コントローラ公開鍵Ｃpubは、エンジニアリングツール２１Ａが用いる公開鍵である。エンジニアリングツール２１Ａは、プログラマブルコントローラ３０Ａにラダープログラム４２を提供する際にコントローラ公開鍵Ｃpubを用いる。具体的には、エンジニアリングツール２１Ａは、エンジニアリングツール２１Ａが復号した後述の実行形式ファイル２０１をプログラマブルコントローラ３０Ａでしか動作ができないファイルに変換する際にコントローラ公開鍵Ｃpubを用いる。
【００２６】
＜エンジニアリング環境公開鍵Ｅpub＿２＞
エンジニアリング環境公開鍵Ｅpub＿２は、プログラマブルコントローラ３０Ａが用いる公開鍵である。プログラマブルコントローラ３０Ａは、エンジニアリングツール２１Ａからラダープログラム４２の実行形式ファイル２０１を取得する際にエンジニアリング環境公開鍵Ｅpub＿２を用いる。具体的には、プログラマブルコントローラ３０Ａは、暗号化された実行形式ファイル２０１である後述の保護済み実行形式ファイル２０２を復号する際にエンジニアリング環境公開鍵Ｅpub＿２を用いる。
【００２７】
＜コントローラ秘密鍵Ｃsec＞
コントローラ秘密鍵Ｃsecは、プログラマブルコントローラ３０Ａが用いる秘密鍵である。プログラマブルコントローラ３０Ａは、エンジニアリングツール２１Ａからラダープログラム４２の実行形式ファイル２０１を取得する際にコントローラ秘密鍵Ｃsecを用いる。具体的には、プログラマブルコントローラ３０Ａは、保護されたファイルである保護済み実行形式ファイル２０２を復号する際にコントローラ秘密鍵Ｃsecを用いる。コントローラ秘密鍵Ｃsecは、コントローラ公開鍵Ｃpubと対をなしている。このため、コントローラ秘密鍵Ｃsecおよびコントローラ公開鍵Ｃpubの関係は、エンジニアリングツール２１Ａとプログラマブルコントローラ３０Ａとの間で共有されているともいえる。
【００２８】
販売元であるベンダは、購入者であるユーザに前述のパッケージ製品を販売する際に、エンジニアリングツール２１Ａおよびプログラマブルコントローラ３０Ａに秘密鍵といった秘密情報および公開鍵といった公開情報をインストールしておく。この場合、ライセンス配信サーバ１０Ａは、特定のエンジニアリングツール２１Ａに前述の第２の秘密情報および前述の第１の公開情報を配信し、特定のプログラマブルコントローラ３０Ａに前述の第２の公開情報を配信する。
【００２９】
つぎに、ライセンス配信サーバ１０Ａの構成例について説明する。図２は、実施の形態１にかかるライセンス配信サーバの構成例を示すブロック図である。ライセンス配信サーバ１０Ａは、公開鍵と秘密鍵とのペアである公開鍵ペアを格納する公開鍵ペアＤＢ（Database）１１と、ユーザの情報であるユーザ情報を格納するユーザＤＢ１２とを備えている。
【００３０】
また、ライセンス配信サーバ１０Ａは、ライセンス証書４１を生成するライセンス証書生成部１３と、ラダープログラム４２を配布用ファイルデータ１０１に変換するラダープログラム変換部１４とを備えている。配布用ファイルデータ１０１は、ベンダがユーザに提供するラダープログラム４２が暗号化されたファイルである。したがって、配布用ファイルデータ１０１は、ライセンス配信サーバ１０Ａによって保護されたラダープログラム４２のファイルデータである。また、ライセンス配信サーバ１０Ａは、ベンダ秘密鍵Ｖsec、エンジニアリング環境公開鍵Ｅpub＿１およびラダープログラム４２を格納する図示しないメモリを備えている。
【００３１】
公開鍵ペアＤＢ１１は、プログラマブルコントローラ３０Ａと、これ以外の他のプログラマブルコントローラとを含む複数のプログラマブルコントローラに割り当てられた公開鍵ペアを格納する。換言すると、公開鍵ペアＤＢ１１は、プログラマブルコントローラ３０Ａ毎に、公開鍵と秘密鍵とのペアを格納する。公開鍵ペアＤＢ１１に格納される公開鍵は、後述するコントローラ公開鍵Ｃpubであり、公開鍵ペアＤＢ１１に格納される秘密鍵は、後述するコントローラ秘密鍵Ｃsecである。
【００３２】
ユーザＤＢ１２は、パッケージ製品のライセンスを購入したユーザと、ユーザに納品したパッケージ製品内のプログラマブルコントローラ３０Ａの機台情報とが対応付けられたユーザ情報を格納する。
【００３３】
ライセンス生成部であるライセンス証書生成部１３は、公開鍵ペアＤＢ１１およびユーザＤＢ１２に接続されている。ライセンス証書生成部１３は、公開鍵ペアＤＢ１１内の公開鍵ペアと、ユーザＤＢ１２内のユーザ情報に基づいて、ユーザへのライセンス証書４１を生成する。具体的には、ライセンス証書生成部１３は、ライセンス証書４１の発行先となるプログラマブルコントローラ３０Ａの機台情報をユーザＤＢ１２内から読み出す。また、ライセンス証書生成部１３は、読み出した機台情報に割り当てられた公開鍵ペアを公開鍵ペアＤＢ１１内から読み出す。また、ライセンス証書生成部１３は、ライセンスの有効期限と、パッケージ製品内で利用可能な機能の情報と、発行先のプログラマブルコントローラ３０Ａに割り当てられた公開鍵ペアとを、ライセンス証書４１に付与する。
【００３４】
ライセンス証書生成部１３は、ライセンス証書４１を、メールといった電子媒体かあるいは紙媒体でユーザに配布する。ライセンス証書生成部１３は、ライセンス証書４１を電子媒体で配布する場合には、ライセンス証書４１のファイルを添付したメールを生成する。これにより、ライセンス配信サーバ１０Ａは、ライセンス証書生成部１３が生成したメールをユーザに送信する。また、ライセンス配信サーバ１０Ａは、ライセンス証書４１を紙媒体で配布する場合には、ライセンス証書４１を紙媒体にプリントアウトするためのデータを図示しないプリンターに出力する。この後、プリンターは、ライセンス証書４１をプリントアウトすることによって、紙媒体のライセンス証書４１が完成する。そして、紙媒体のライセンス証書４１は、郵便といった配送手段によってユーザに届けられる。
【００３５】
ラダープログラム変換部１４は、ベンダ秘密鍵Ｖsecおよびエンジニアリング環境公開鍵Ｅpub＿１を用いて、ラダープログラム４２に第１の変換を実行する。具体的には、ラダープログラム変換部１４は、鍵導出関数であるＫＤＦ（Key  Derivation  Function）と、暗号化関数Ｅｎｃと、改ざん検出コード生成関数ＭＡＣとを用いて、ラダープログラム４２を、ユーザに配布するための配布用ファイルデータ１０１に変換する。ＫＤＦは、暗号鍵を導出する関数であり、暗号化関数Ｅｎｃは、暗号化を行う関数である。また、改ざん検出コード生成関数ＭＡＣは、メッセージ認証用の改ざん検出コードを生成する関数である。
【００３６】
ラダープログラム変換部１４は、ＫＤＦによって、ベンダ秘密鍵Ｖsecおよびエンジニアリング環境公開鍵Ｅpub＿１から、暗号化用の鍵および改ざん検出用の鍵を生成する。ラダープログラム変換部１４が生成する暗号化用の鍵は、暗号化用の一時鍵であり、改ざん検出用の鍵は、改ざん検出用の一時鍵である。ベンダ秘密鍵Ｖsecは、パッケージ製品を提供するベンダに固有の秘密鍵である。また、エンジニアリング環境公開鍵Ｅpub＿１は、ベンダ秘密鍵Ｖsecを秘匿するための暗号化鍵である。また、ラダープログラム変換部１４は、生成した暗号化用の鍵および改ざん検出用の鍵を用いて、ラダープログラム４２を配布用ファイルデータ１０１に変換する。ラダープログラム４２は、ユーザが編集してもよい部分と、ユーザが編集することを想定していない機能単位であるファンクションブロックとの集合である。ライセンス配信サーバ１０Ａは、配布用ファイルデータ１０１を記録媒体４３に書き込む。
【００３７】
ここで、ライセンス配信サーバ１０Ａの動作について説明する。ライセンス配信サーバ１０Ａは、公開鍵ペアＤＢ１１に公開鍵ペアを格納し、ユーザＤＢ１２にユーザ情報を格納しておく。
【００３８】
ライセンス証書生成部１３は、公開鍵ペアＤＢ１１内の公開鍵ペアと、ユーザＤＢ１２内のユーザ情報に基づいて、ユーザへのライセンス証書４１を生成する。このとき、ライセンス証書生成部１３は、ユーザに固有の機台情報をユーザＤＢ１２内から読み出し、ライセンス証書生成部１３は、読み出した機台情報に割り当てられた公開鍵ペアを公開鍵ペアＤＢ１１内から読み出す。そして、ライセンス証書生成部１３は、ライセンスの有効期限と、パッケージ製品内で利用可能な機能の情報と、発行先のプログラマブルコントローラ３０Ａに割り当てられた公開鍵ペアとを、ライセンス証書４１に付与する。
【００３９】
また、ラダープログラム変換部１４は、鍵導出関数であるＫＤＦを用いて、ベンダ秘密鍵Ｖsecおよびエンジニアリング環境公開鍵Ｅpub＿１から、暗号化用の鍵および改ざん検出用の鍵を生成する。すなわち、ベンダ秘密鍵Ｖsecをｕ、エンジニアリング環境公開鍵Ｅpub＿１をＶとすると、ラダープログラム変換部１４は、暗号化鍵Ｋｅｎｃおよび改ざん検出用鍵Ｋｍａｃを用いて、以下の処理（１）を実行する。なお、以下の説明では、ビット連結を｜｜で表す。
ＫＤＦ(ｕＶ)→Ｋｍａｃ｜｜Ｋｅｎｃ・・・（１）
【００４０】
なお、実施の形態１で説明する各処理内の「→」は、データの導出処理を表している。具体的には、ラダープログラム不正利用防止システム１は、「→」の左側に示した処理を実行することによって、「→」の右側に示したデータを導出する。
【００４１】
なお、ベンダ公開鍵ＶpubをＵ、エンジニアリング環境秘密鍵Ｅsecをｖとすると、ｕＶ＝ｖＵの関係が成立するものとする。また、ＫＤＦの例は、RFC2898,  PKCS  #5:  Password-Based  Cryptography  Specification  Version  2.0で用いられるＫＤＦある。
【００４２】
この後、ラダープログラム変換部１４は、ファンクションブロックを含んだラダープログラム４２に、暗号化処理と改ざん検出コードの付加処理とを行う。すなわち、ラダープログラム４２をｍとすると、ラダープログラム変換部１４は、暗号化関数Ｅｎｃおよび改ざん検出コード生成関数ＭＡＣを用いて、以下の処理（２）および処理（３）を実行する。
Ｅｎｃ（Ｋｅｎｃ，ｍ）→ｃ・・・（２）
ＭＡＣ（Ｋｍａｃ，ｃ）→ｔａｇ・・・（３）
【００４３】
ここでのｃは、ラダープログラム４２を暗号化鍵で暗号化したものであり、ｔａｇは、ｃに改ざん検出用の鍵を用いて生成した改ざん検出コードである。そして、ラダープログラム変換部１４は、ｃ｜｜ｔａｇを配布用ファイルデータ１０１とする。そして、ライセンス配信サーバ１０Ａは、配布用ファイルデータ１０１を記録媒体４３に書き込む。この後、配布用ファイルデータ１０１が格納された記録媒体４３が、ベンダによってユーザに配布される。
【００４４】
つぎに、エンジニアリングツール２１Ａの機能構成例について説明する。図３は、実施の形態１にかかるエンジニアリングツールの機能構成例を示すブロック図である。エンジニアリングツール２１Ａは、ライセンス配信サーバ１０Ａから配布された配布用ファイルデータ１０１を暗号化前のラダープログラム４２に逆変換するラダープログラム逆変換部２２と、ラダープログラム４２を実行形式ファイル２０１に変換する実行形式変換部２３とを備えている。実行形式ファイル２０１は、プログラマブルコントローラ３０Ａがプログラムであると解釈して実行可能なファイルである。また、エンジニアリングツール２１Ａは、実行形式ファイル２０１を、プログラマブルコントローラ３０Ａでしか動作できないファイルに変換するラダープログラム再変換部２４を備えている。
【００４５】
また、エンジニアリングツール２１Ａは、ベンダ公開鍵Ｖpubおよびエンジニアリング環境秘密鍵Ｅsecを記憶する図示しないメモリを備えている。また、エンジニアリングツール２１Ａは、ライセンス配信サーバ１０Ａから配布された配布用ファイルデータ１０１およびライセンス証書４１を、開発ＰＣ２０内のメモリから読み出して種々の処理を実行する。ベンダ公開鍵Ｖpubは、パッケージ製品を提供するベンダに固有の公開鍵であり、ベンダ秘密鍵Ｖsecと対をなす。すなわち、ベンダ秘密鍵Ｖsecで暗号化されたデータは、ベンダ公開鍵Ｖpubで復号が可能である。また、エンジニアリング環境秘密鍵Ｅsecは、エンジニアリングツール２１Ａに埋め込まれたエンジニアリングツール２１Ａに固有の秘密鍵であり、エンジニアリング環境公開鍵Ｅpub＿２と対をなす。すなわち、エンジニアリング環境秘密鍵Ｅsecで暗号化されたデータは、エンジニアリング環境公開鍵Ｅpub＿２で復号が可能である。
【００４６】
ラダープログラム逆変換部２２は、ベンダ公開鍵Ｖpubおよびエンジニアリング環境秘密鍵Ｅsecを用いて、配布用ファイルデータ１０１に第１の逆変換を実行する。すなわち、ラダープログラム逆変換部２２は、エンジニアリングツール２１Ａに予め埋め込まれているベンダ公開鍵Ｖpubおよびエンジニアリング環境秘密鍵Ｅsecを用いて、逆変換である復号を実行する。具体的には、ラダープログラム逆変換部２２は、ベンダ公開鍵Ｖpubおよびエンジニアリング環境秘密鍵Ｅsecを用いて、配布用ファイルデータ１０１を暗号化前のラダープログラム４２に逆変換する。すなわち、ラダープログラム逆変換部２２は、暗号化されたラダープログラム４２を復号することによって、ラダープログラム４２を得る。ラダープログラム逆変換部２２は、逆変換によって生成したラダープログラム４２を実行形式変換部２３に送る。
【００４７】
実行形式変換部２３は、ラダープログラム逆変換部２２が逆変換によって生成したラダープログラム４２を実行形式ファイル２０１に変換する。実行形式変換部２３は、変換によって生成した実行形式ファイル２０１をラダープログラム再変換部２４に送る。
【００４８】
ラダープログラム再変換部２４は、コントローラ公開鍵Ｃpubを用いて、実行形式ファイル２０１に第２の変換を実行する。具体的には、ラダープログラム再変換部２４は、実行形式変換部２３が変換によって生成した実行形式ファイル２０１を、ライセンス証書４１によって対応付けされたプログラマブルコントローラ３０Ａでしか動作ができないファイルに変換する。ライセンス証書４１によって対応付けされたプログラマブルコントローラ３０Ａでしか動作ができないファイルが、保護済み実行形式ファイル２０２である。保護済み実行形式ファイル２０２は、プログラマブルコントローラ３０Ａ以外のプログラマブルコントローラでは動作できないように保護されている。また、保護済み実行形式ファイル２０２は、プログラマブルコントローラ３０Ａがプログラムであると解釈して実行可能なファイルである。エンジニアリングツール２１Ａは、ラダープログラム再変換部２４が生成した保護済み実行形式ファイル２０２をプログラマブルコントローラ３０Ａに送る。
【００４９】
ここで、エンジニアリングツール２１Ａの動作について説明する。開発ＰＣ２０は、ライセンス配信サーバ１０Ａから配布された配布用ファイルデータ１０１およびライセンス証書４１を図示しないメモリ内に格納しておく。
【００５０】
この後、エンジニアリングツール２１Ａのラダープログラム逆変換部２２は、ライセンス配信サーバ１０Ａから配布された配布用ファイルデータ１０１をメモリ内から読み出して暗号化前のラダープログラム４２に逆変換する。このとき、ラダープログラム逆変換部２２は、エンジニアリングツール２１Ａに予め埋め込まれているベンダ公開鍵Ｖpubおよびエンジニアリング環境秘密鍵Ｅsecを用いて、逆変換である復号を実行する。すなわち、正しいベンダ公開鍵ＶpubをＵ、エンジニアリング環境秘密鍵Ｅsecをｖと表記した場合、ラダープログラム逆変換部２２は、以下の処理（４）を実行する。
ＫＤＦ（ｖＵ）→Ｋｍａｃ｜｜Ｋｅｎｃ・・・（４）
【００５１】
これにより、ラダープログラム逆変換部２２は、ライセンス配信サーバ１０Ａが生成した暗号化鍵Ｋｅｎｃおよび改ざん検出用鍵Ｋｍａｃを再生成することができる。そして、ラダープログラム逆変換部２２は、以下の処理（５）を実行する。
ＭＡＣ（Ｋｍａｃ，ｃ）→ｔａｇ・・・（５）
【００５２】
この場合において、ｃが改ざんされていなければ、配布用ファイルデータ１０１に付加されたｔａｇは、処理（５）によって算出されたｔａｇに一致する。したがって、これらのｔａｇが不一致の場合、ラダープログラム逆変換部２２は、ラダープログラム４２を不正なプログラムであると判定する。一方、これらのｔａｇが一致した場合、ラダープログラム逆変換部２２は、ラダープログラム４２を正常なプログラムであると判定する。すなわち、ラダープログラム逆変換部２２は、ｔａｇが一致した場合には、配布用ファイルデータ１０１をプログラマブルコントローラ３０Ａで動作可能なファイルであると判定する。そして、ラダープログラム逆変換部２２は、配布用ファイルデータ１０１は改ざんされていないものとみなす。さらに、ラダープログラム逆変換部２２は、Ｅｎｃに対応した復号関数であるＤｅｃを用いて、以下の処理（６）を実行する。
Ｄｅｃ（Ｋｅｎｃ，ｃ）→ｍ・・・（６）
【００５３】
これにより、ラダープログラム逆変換部２２は、ラダープログラム４２を復号する。このように、エンジニアリングツール２１Ａがラダープログラム４２を復号によって復元するので、ユーザはラダープログラム４２への編集およびラダープログラム４２のシミュレーションを実行することが可能となる。なお、この段階で特許文献１である特開平１０−１２４３０８号公報に記載されたセキュリティ機能を行ってもよい。
【００５４】
ラダープログラム逆変換部２２は、復号したラダープログラム４２を実行形式変換部２３に送る。そして、実行形式変換部２３は、ラダープログラム４２を実行形式ファイル２０１に変換し、ラダープログラム再変換部２４に送る。
【００５５】
この後、ラダープログラム再変換部２４は、実行形式ファイル２０１を、ライセンス証書４１によって対応付けされたプログラマブルコントローラ３０Ａに限り動作が可能なファイルに変換する。すなわち、ライセンス証書４１に記載されたコントローラ公開鍵ＣpubをＰ１と表記し、エンジニアリング環境秘密鍵Ｅsecをｖと表記した場合、ラダープログラム再変換部２４は、改ざん検出用鍵Ｋ’ｍａｃおよび暗号化鍵Ｋ’ｅｎｃを用いて、以下の処理（７）から処理（９）を実行する。なお、ここでは、実行形式ファイル２０１をｍ’と表記している。また、ｃ’は、実行形式ファイル２０１を暗号化鍵Ｋ’ｅｎｃで暗号化したものであり、ｔａｇ’は、ｃ’に改ざん検出用鍵Ｋ’ｍａｃを用いて生成した改ざん検出コードである。
ＫＤＦ（ｖＰ１)→Ｋ’ｍａｃ｜｜Ｋ’ｅｎｃ・・・（７）
Ｅｎｃ（Ｋ’ｅｎｃ，ｍ’）→ｃ’・・・（８）
ＭＡＣ（Ｋ’ｍａｃ，ｃ’）→ｔａｇ’・・・（９）
【００５６】
ラダープログラム再変換部２４は、ｃ’｜｜ｔａｇ’を保護済み実行形式ファイル２０２に設定する。そして、開発ＰＣ２０は、保護済み実行形式ファイル２０２をプログラマブルコントローラ３０Ａに出力する。
【００５７】
つぎに、プログラマブルコントローラ３０Ａの構成例について説明する。図４は、実施の形態１にかかるプログラマブルコントローラの構成例を示すブロック図である。プログラマブルコントローラ３０Ａは、保護済み実行形式ファイル２０２を動作させることができるか否かを判定するとともに、動作させることができる場合には保護済み実行形式ファイル２０２を制御実行部３２で実行可能な実行形式ファイル２０１に逆変換する判定部であるラダープログラム逆変換部３１を備えている。ラダープログラム逆変換部３１は、エンジニアリング環境公開鍵Ｅpub＿２およびコントローラ秘密鍵Ｃsecを用いて、保護済み実行形式ファイル２０２に第２の逆変換を実行する。また、プログラマブルコントローラ３０Ａは、実行形式ファイル２０１を用いて被制御機器を制御する制御実行部３２を備えている。
【００５８】
また、プログラマブルコントローラ３０Ａは、エンジニアリング環境公開鍵Ｅpub＿２およびコントローラ秘密鍵Ｃsecを記憶する図示しないメモリを備えている。エンジニアリング環境公開鍵Ｅpub＿２は、エンジニアリング環境秘密鍵Ｅsecと対をなす。
【００５９】
ここで、プログラマブルコントローラ３０Ａの動作について説明する。プログラマブルコントローラ３０Ａは、エンジニアリングツール２１Ａから送られてくる保護済み実行形式ファイル２０２を図示しないメモリ内に格納しておく。
【００６０】
この後、プログラマブルコントローラ３０Ａのラダープログラム逆変換部３１は、エンジニアリングツール２１Ａから送られてきた保護済み実行形式ファイル２０２を、制御実行部３２で実行可能な実行形式ファイル２０１に逆変換する。このとき、ラダープログラム逆変換部３１は、プログラマブルコントローラ３０Ａ内のメモリに格納されているエンジニアリング環境公開鍵Ｅpub＿２およびコントローラ秘密鍵Ｃsecを用いて、逆変換である復号を実行する。すなわち、正しいエンジニアリング環境公開鍵ＥpubをＶと表記し、コントローラ秘密鍵Ｃsecをｐ１と表記する場合、ｖＰ１＝ｐ１Ｖが成立するので、ラダープログラム逆変換部３１は、以下の処理（１０）を実行する。
ＫＤＦ（ｐ１Ｖ)→Ｋ’ｍａｃ｜｜Ｋ’ｅｎｃ・・・（１０）
【００６１】
これにより、ラダープログラム逆変換部３１は、エンジニアリングツール２１Ａで生成した暗号化鍵であるＫ’ｅｎｃおよび改ざん検出用の鍵であるＫ’ｍａｃを再生成する。そして、ラダープログラム逆変換部３１は、以下の処理（１１）を実行する。
ＭＡＣ（Ｋ’ｍａｃ，ｃ’）→ｔａｇ’・・・（１１）
【００６２】
この場合において、ｃ’が改ざんされていなければ、保護済み実行形式ファイル２０２に付加されたｔａｇ’は処理（１１）によって算出されたｔａｇ’に一致する。したがって、これらのｔａｇ’が不一致の場合、ラダープログラム逆変換部３１は、ラダープログラム４２を不正なプログラムであると判定する。一方、これらのｔａｇ’が一致した場合、ラダープログラム逆変換部３１は、ラダープログラム４２を正常なプログラムであると判定する。すなわち、ラダープログラム逆変換部３１は、ｔａｇ’が一致した場合には、保護済み実行形式ファイル２０２をプログラマブルコントローラ３０Ａで動作可能なファイルであると判定する。そして、ラダープログラム逆変換部３１は、保護済み実行形式ファイル２０２は改ざんされていないものとみなす。さらに、ラダープログラム逆変換部３１は、Ｅｎｃに対応した復号関数であるＤｅｃを用いて、以下の処理（１２）を実行する。
Ｄｅｃ（Ｋ’ｅｎｃ，ｃ’）→ｍ’・・・（１２）
【００６３】
これにより、ラダープログラム逆変換部３１は、保護済み実行形式ファイル２０２を復号する。ラダープログラム逆変換部３１は、復号によって復元した実行形式ファイル２０１を制御実行部３２に送る。そして、制御実行部３２は、実行形式ファイル２０１を用いて被制御機器を制御する。このように、プログラマブルコントローラ３０Ａが実行形式ファイル２０１を復元するので、プログラマブルコントローラ３０Ａは、実行形式ファイル２０１を実行することが可能となる。
【００６４】
なお、エンジニアリングツール２１Ａが、プログラマブルコントローラ３０Ａにファイルの読み出し要求を行った場合、プログラマブルコントローラ３０Ａは、復号した実行形式ファイル２０１ではなく、保護済み実行形式ファイル２０２をエンジニアリングツール２１Ａに出力する。
【００６５】
つぎに、ラダープログラム不正利用防止システム１の動作処理手順について説明する。図５は、実施の形態１にかかるラダープログラム不正利用防止システムの動作処理手順を示すフローチャートである。
【００６６】
＜ライセンス配信サーバ１０Ａ＞
ステップＳ１０において、ライセンス配信サーバ１０Ａは、ベンダ秘密鍵Ｖsecであるｕと、エンジニアリング環境公開鍵Ｅpub＿１であるＶとを用いてラダープログラム４２を暗号化し、これにより、配布用ファイルデータ１０１を生成する。また、ステップＳ２０において、ライセンス配信サーバ１０Ａは、公開鍵ペアＤＢ１１内の公開鍵ペアと、ユーザＤＢ１２内のユーザ情報に基づいて、ユーザへのライセンス証書４１を生成する。
【００６７】
＜エンジニアリングツール２１Ａ＞
エンジニアリングツール２１Ａは、ライセンス配信サーバ１０Ａが生成した配布用ファイルデータ１０１を、ライセンス配信サーバ１０Ａから取得する。そして、ステップＳ３０において、エンジニアリングツール２１Ａは、ライセンス配信サーバ１０Ａが生成した配布用ファイルデータ１０１のｔａｇを、ベンダ公開鍵ＶpubであるＵと、エンジニアリング環境秘密鍵Ｅsecであるｖとを用いてチェックする。
【００６８】
そして、ステップＳ３５において、エンジニアリングツール２１Ａは、配布用ファイルデータ１０１に付加されたｔａｇと、エンジニアリングツール２１Ａが算出したｔａｇとが一致するか否かを判定する。
【００６９】
配布用ファイルデータ１０１に付加されたｔａｇと、エンジニアリングツール２１Ａが算出したｔａｇとが不一致である場合、すなわちステップＳ３５においてＮｏの場合、エンジニアリングツール２１Ａは、配布用ファイルデータ１０１が改ざんされたものとみなして異常終了する。
【００７０】
一方、配布用ファイルデータ１０１に付加されたｔａｇと、エンジニアリングツール２１Ａが算出したｔａｇとが一致する場合、すなわちステップＳ３５においてＹｅｓの場合、ステップＳ４０において、エンジニアリングツール２１Ａは、配布用ファイルデータ１０１を復号する。これにより、エンジニアリングツール２１Ａは、ラダープログラム４２を復元する。そして、エンジニアリングツール２１Ａがラダープログラム４２を復元することにより、ラダープログラム４２の編集およびラダープログラム４２のシミュレーションが実行可能となる。ここでシミュレーションとは、ラダープログラム４２をソフトウェア上で実行することをいう。
【００７１】
エンジニアリングツール２１Ａは、ラダープログラム４２を復元した後、ステップＳ５０において、ラダープログラム４２をプログラマブルコントローラ３０Ａに組み込むため、ラダープログラム４２を実行形式に変換する。具体的には、エンジニアリングツール２１Ａは、ラダープログラム４２を実行形式ファイル２０１に変換する。
【００７２】
また、エンジニアリングツール２１Ａは、ライセンス配信サーバ１０Ａが生成したライセンス証書４１を、ライセンス配信サーバ１０Ａから取得する。そして、ステップＳ６０において、エンジニアリングツール２１Ａは、ライセンス証書４１に登録されたコントローラ公開鍵ＣpubであるＰ１を用いて実行形式ファイル２０１を暗号化し、これにより保護済み実行形式ファイル２０２を生成する。
【００７３】
＜プログラマブルコントローラ３０Ａ＞
プログラマブルコントローラ３０Ａは、エンジニアリングツール２１Ａから保護済み実行形式ファイル２０２を取得する。そして、ステップＳ７０において、プログラマブルコントローラ３０Ａは、保護済み実行形式ファイル２０２のｔａｇ’を、エンジニアリング環境公開鍵Ｅpub＿２であるＶと、コントローラ秘密鍵Ｃsecであるｐ１とを用いてチェックする。
【００７４】
そして、ステップＳ７５において、プログラマブルコントローラ３０Ａは、保護済み実行形式ファイル２０２に付加されたｔａｇ’と、プログラマブルコントローラ３０Ａが算出したｔａｇ’とが一致するか否かを判定する。
【００７５】
保護済み実行形式ファイル２０２に付加されたｔａｇ’と、プログラマブルコントローラ３０Ａが算出したｔａｇ’とが不一致である場合、すなわちステップＳ７５においてＮｏの場合、プログラマブルコントローラ３０Ａは、保護済み実行形式ファイル２０２が改ざんされた、または保護済み実行形式ファイル２０２はプログラマブルコントローラ３０Ａ以外のプログラマブルコントローラへのファイルであるとみなして異常終了する。
【００７６】
一方、保護済み実行形式ファイル２０２に付加されたｔａｇ’と、プログラマブルコントローラ３０Ａが算出したｔａｇ’とが一致する場合、すなわちステップＳ７５においてＹｅｓの場合、ステップＳ８０において、プログラマブルコントローラ３０Ａは、保護済み実行形式ファイル２０２を記憶する。
【００７７】
そして、ステップＳ９０において、プログラマブルコントローラ３０Ａは、保護済み実行形式ファイル２０２を復号する。これにより、エンジニアリングツール２１Ａは、実行形式ファイル２０１を復元する。そして、ステップＳ１００において、プログラマブルコントローラ３０Ａは、実行形式ファイル２０１を用いて被制御機器への制御を実行し、正常終了する。
【００７８】
つぎに、ラダープログラム不正利用防止システム１のハードウェア構成について説明する。図６は、実施の形態１にかかるラダープログラム不正利用防止システムのハードウェア構成を示す図である。
【００７９】
ラダープログラム不正利用防止システム１のライセンス配信サーバ１０Ａは、プロセッサ６１と、記憶部６２と、通信部６３と、出力部６４とを備えている。ライセンス配信サーバ１０Ａでは、プロセッサ６１、記憶部６２、通信部６３および出力部６４が、バスに接続されている。
【００８０】
通信部６３は、インターネット２を介して開発ＰＣ２０と通信を行なう。なお、通信部６３は、開発ＰＣ２０以外の装置と通信を行なってもよい。ライセンス配信サーバ１０Ａがライセンス証書４１をオンラインでユーザに提供する場合、通信部６３は、ライセンス証書４１を、インターネット２を介して開発ＰＣ２０に送信する。また、ライセンス配信サーバ１０Ａが配布用ファイルデータ１０１をオンラインでユーザに提供する場合、通信部６３は、配布用ファイルデータ１０１を、インターネット２を介して開発ＰＣ２０に送信する。
【００８１】
出力部６４は、ライセンス配信サーバ１０Ａ内の情報を外部装置に出力する。ライセンス配信サーバ１０Ａがライセンス証書４１を郵便でユーザに提供する場合、出力部６４は、ライセンス証書生成部１３が生成したライセンス証書４１のデータをプリンターといった外部装置に出力する。また、出力部６４は、ＤＶＤといった可搬性の記録媒体４３にライセンス証書４１のデータを書き込んでもよい。また、出力部６４は、配布用ファイルデータ１０１を記録媒体４３に書き込んでもよい。
【００８２】
記憶部６２は、公開鍵ペアＤＢ１１およびユーザＤＢ１２を含んでいる。また、記憶部６２は、ベンダ秘密鍵Ｖsec、エンジニアリング環境公開鍵Ｅpub＿１およびラダープログラム４２を記憶する。また、記憶部６２は、ライセンス証書生成部１３の処理を実行するプログラムおよびラダープログラム変換部１４の処理を実行するプログラムを記憶する。また、記憶部６２は、ライセンス証書生成部１３の処理結果であるライセンス証書４１と、ラダープログラム変換部１４の処理結果である配布用ファイルデータ１０１とを記憶する。
【００８３】
ライセンス配信サーバ１０Ａは、プロセッサ６１が、記憶部６２で記憶されている、ライセンス配信サーバ１０Ａとして動作するためのプログラムを読み出して実行することにより実現される。また、このプログラムは、ライセンス配信サーバ１０Ａの手順または方法をコンピュータに実行させるものであるともいえる。実施の形態１のプロセッサ６１は、種々のプログラムを用いて、ライセンス証書生成部１３およびラダープログラム変換部１４の処理を実行する。記憶部６２は、プロセッサ６１が各種処理を実行する際の一時メモリにも使用される。
【００８４】
このように、プロセッサ６１が実行するプログラムは、コンピュータで実行可能な、データ処理を行うための複数の命令を含むコンピュータ読取り可能かつ非遷移的な（non-transitory）記録媒体を有するコンピュータプログラムプロダクトである。プロセッサ６１が実行するプログラムは、複数の命令がデータ処理を行うことをコンピュータに実行させる。
【００８５】
なお、ライセンス配信サーバ１０Ａのうち、ライセンス証書生成部１３またはラダープログラム変換部１４の機能を、専用のハードウェアで実現してもよい。また、ライセンス配信サーバ１０Ａの機能について、一部を専用のハードウェアで実現し、一部をソフトウェアまたはファームウェアで実現するようにしてもよい。
【００８６】
ラダープログラム不正利用防止システム１の開発ＰＣ２０は、プロセッサ７１と、記憶部７２と、通信部７３と、出力部７４と、入力部７５とを備えている。開発ＰＣ２０では、プロセッサ７１、記憶部７２、通信部７３、出力部７４および入力部７５が、バスに接続されている。入力部７５は、外部から送られてくる配布用ファイルデータ１０１およびライセンス証書４１を受け付けて記憶部７２に入力する。
【００８７】
通信部７３は、通信部６３と同様の機能を有しており、出力部７４は、出力部６４と同様の機能を有している。通信部７３は、インターネット２を介してライセンス配信サーバ１０Ａと通信を行なう。なお、通信部７３は、ライセンス配信サーバ１０Ａ以外の装置と通信を行なってもよい。ライセンス配信サーバ１０Ａがライセンス証書４１をオンラインでユーザに提供する場合、通信部７３は、ライセンス証書４１を、インターネット２を介して受信する。また、ライセンス配信サーバ１０Ａが配布用ファイルデータ１０１をオンラインでユーザに提供する場合、通信部７３は、配布用ファイルデータ１０１を、インターネット２を介して受信する。
【００８８】
出力部７４は、保護済み実行形式ファイル２０２をＵＳＢ（Universal  Serial  Bus）メモリといった可搬性の記録媒体４３に書き込む。この場合、保護済み実行形式ファイル２０２の書き込まれた記録媒体４３がプログラマブルコントローラ３０Ａに接続される。そして、プログラマブルコントローラ３０Ａは、記録媒体４３に書き込まれた保護済み実行形式ファイル２０２を読み出す。なお、通信部７３が、保護済み実行形式ファイル２０２をプログラマブルコントローラ３０Ａに送信してもよい。この場合、通信部７３が行う通信の一例は、イーサーネット（登録商標）通信である。出力部７４または通信部７３を介してプログラマブルコントローラ３０Ａに送られてきた保護済み実行形式ファイル２０２は、プログラマブルコントローラ３０Ａ内の後述する記憶部８２内に格納される。
【００８９】
プロセッサ７１は、プロセッサ６１と同様の機能を有しており、記憶部７２は、記憶部６２と同様の機能を有している。記憶部７２は、ベンダ公開鍵Ｖpubおよびエンジニアリング環境秘密鍵Ｅsecを記憶する。ここでのベンダ公開鍵Ｖpubおよびエンジニアリング環境秘密鍵Ｅsecは、ユーザが編集できない情報である。また、記憶部７２は、配布用ファイルデータ１０１およびライセンス証書４１を記憶する。また、記憶部７２は、ラダープログラム逆変換部２２、実行形式変換部２３およびラダープログラム再変換部２４の処理を実行する各プログラムを記憶する。また、記憶部７２は、ラダープログラム逆変換部２２の処理結果であるラダープログラム４２と、実行形式変換部２３の処理結果である実行形式ファイル２０１と、ラダープログラム再変換部２４の処理結果である保護済み実行形式ファイル２０２とを記憶する。
【００９０】
開発ＰＣ２０は、プロセッサ７１が、記憶部７２で記憶されている、開発ＰＣ２０として動作するためのプログラムを読み出して実行することにより実現される。また、このプログラムは、開発ＰＣ２０の手順または方法をコンピュータに実行させるものであるともいえる。開発ＰＣ２０は、プロセッサ７１によって、アプリケーションプログラムであるエンジニアリングツール２１Ａを実行する。実施の形態１のプロセッサ７１は、開発ＰＣ２０が有するプログラムの１つであるエンジニアリングツール２１Ａを用いて、ラダープログラム逆変換部２２、実行形式変換部２３およびラダープログラム再変換部２４の処理を実行する。記憶部７２は、プロセッサ７１が各種処理を実行する際の一時メモリにも使用される。
【００９１】
このように、プロセッサ７１が実行するプログラムは、コンピュータで実行可能な、データ処理を行うための複数の命令を含むコンピュータ読取り可能かつ非遷移的な記録媒体を有するコンピュータプログラムプロダクトである。プロセッサ７１が実行するプログラムは、複数の命令がデータ処理を行うことをコンピュータに実行させる。
【００９２】
なお、開発ＰＣ２０のうち、ラダープログラム逆変換部２２、実行形式変換部２３またはラダープログラム再変換部２４の機能を、専用のハードウェアで実現してもよい。また、開発ＰＣ２０について、一部を専用のハードウェアで実現し、一部をソフトウェアまたはファームウェアで実現するようにしてもよい。
【００９３】
ラダープログラム不正利用防止システム１のプログラマブルコントローラ３０Ａは、プロセッサ８１と、記憶部８２と、通信部８３と、制御信号出力部８６とを備えている。プログラマブルコントローラ３０Ａでは、プロセッサ８１、記憶部８２、通信部８３および制御信号出力部８６が、バスに接続されている。
【００９４】
通信部８３は、通信部７３との間で通信を行なう。通信部８３は、通信部７３から送られてくる保護済み実行形式ファイル２０２を受信する。通信部８３が行う通信の一例は、イーサーネット通信である。通信部８３は、通信部７３から受信した保護済み実行形式ファイル２０２を記憶部８２内に格納する。なお、通信部８３は、開発ＰＣ２０以外の装置と通信を行なってもよい。制御信号出力部８６は、実行形式ファイル２０１に対応する指示を被制御機器に出力する。制御信号出力部８６が被制御機器に出力する信号値が、前述の制御実行部３２の実行結果である。
【００９５】
プロセッサ８１は、プロセッサ６１，７１と同様の機能を有しており、記憶部８２は、記憶部６２，７２と同様の機能を有している。記憶部８２は、エンジニアリング環境公開鍵Ｅpub＿２、コントローラ秘密鍵Ｃsecおよび保護済み実行形式ファイル２０２を記憶する。また、記憶部８２は、ラダープログラム逆変換部３１および制御実行部３２の処理を実行する各プログラムを記憶する。また、記憶部８２は、ラダープログラム逆変換部３１の処理結果である実行形式ファイル２０１を記憶する。
【００９６】
プログラマブルコントローラ３０Ａは、プロセッサ８１が、記憶部８２で記憶されている、プログラマブルコントローラ３０Ａとして動作するためのプログラムを読み出して実行することにより実現される。また、このプログラムは、プログラマブルコントローラ３０Ａの手順または方法をコンピュータに実行させるものであるともいえる。実施の形態１のプロセッサ８１は、プログラムを用いて、ラダープログラム逆変換部３１および制御実行部３２の処理を実行する。記憶部８２は、プロセッサ８１が各種処理を実行する際の一時メモリにも使用される。
【００９７】
このように、プロセッサ８１が実行するプログラムは、コンピュータで実行可能な、データ処理を行うための複数の命令を含むコンピュータ読取り可能かつ非遷移的な記録媒体を有するコンピュータプログラムプロダクトである。プロセッサ８１が実行するプログラムは、複数の命令がデータ処理を行うことをコンピュータに実行させる。
【００９８】
なお、プログラマブルコントローラ３０Ａのうち、ラダープログラム逆変換部３１または制御実行部３２の機能を、専用のハードウェアで実現してもよい。また、プログラマブルコントローラ３０Ａの機能について、一部を専用のハードウェアで実現し、一部をソフトウェアまたはファームウェアで実現するようにしてもよい。
【００９９】
プロセッサ６１，７１，８１は、ＣＰＵ（中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサ、ＤＳＰ（Digital  Signal  Processor）ともいう）、システムＬＳＩ（Large  Scale  Integration）などである。
【０１００】
記憶部６２，７２，８２は、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）またはフラッシュメモリといった不揮発性または揮発性の半導体メモリであってもよいし、磁気ディスクまたはフレキシブルディスクであってもよい。
【０１０１】
プログラマブルコントローラ３０Ａ、ラダープログラム４２および周辺機器を組み合わせたパッケージ製品は、セットでユーザに提供されることで、ユーザが用いる製造ラインの立ち上げ期間を短縮することができるものである。このようなパッケージ製品は、ラダープログラム４２の使用制限が行なわれないと、不正なユーザが他人のラダープログラム４２を利用できることになる。このため、実施の形態１では、ライセンス配信サーバ１０Ａが、ユーザ毎の暗号化を行うとともに、エンジニアリングツール２１Ａがプログラマブルコントローラ３０Ａ毎の暗号化を行っている。これにより、実施の形態１では、上述した制約条件下でパッケージ製品のセキュリティを担保することができる。これにより、パッケージ製品におけるラダープログラム４２の不正な、閲覧、編集、コピーおよび実行を防止することが可能となる。
【０１０２】
このように、ラダープログラム不正利用防止システム１は、ライセンス配信サーバ１０Ａが保護対象であるラダープログラム４２を、正規のエンジニアリングツール２１Ａに限り復号ができる形式に変換した配布用ファイルデータ１０１を生成している。これにより、正規のエンジニアリングツール２１Ａに配布する配布用ファイルデータ１０１が漏えいした場合であっても、配布用ファイルデータ１０１内のラダープログラム４２を守ることができる。
【０１０３】
また、エンジニアリングツール２１Ａは、ライセンス配信サーバ１０Ａから配信されたライセンス証書４１を用いた暗号化を行うので、ラダープログラム４２を特定のプログラマブルコントローラ３０Ａに限り動作可能な形式に変換することができる。これにより、エンジニアリングツール２１Ａは、ラダープログラム４２が別のプログラマブルコントローラで不正に利用されるといった悪用からラダープログラム４２を守ることができる。
【０１０４】
このように、実施の形態１では、エンジニアリングツール２１Ａが、エンジニアリング環境公開鍵Ｅpub＿１を用いて暗号化されたラダープログラム４２に種々の処理を実行した後、プログラマブルコントローラ３０Ａでは動作し且つ他のプログラマブルコントローラでは動作しないようコントローラ公開鍵Ｃpubを用いて暗号化している。そして、プログラマブルコントローラ３０Ａが、コントローラ公開鍵Ｃpubを用いて暗号化されたラダープログラム４２を動作させることができるか否かを判定している。これにより、プログラマブルコントローラ３０Ａ用に作成されたラダープログラム４２は、プログラマブルコントローラ３０Ａで動作可能となり、他のプログラマブルコントローラでは動作できない。したがって、ライセンス配信サーバ１０Ａから配布されたラダープログラム４２の不正な利用を防ぐことが可能になる。
【０１０５】
また、エンジニアリングツール２１Ａは、プログラマブルコントローラ３０Ａ用のライセンス証書４１に基づいて、ラダープログラム４２を暗号化している。このため、プログラマブルコントローラ３０Ａ以外の他のプログラマブルコントローラが、ラダープログラム４２を復号することを防止できる。
【０１０６】
また、エンジニアリングツール２１Ａが、ラダープログラム４２が不正なプログラムであるか否かを判断し、プログラマブルコントローラ３０Ａが、ラダープログラム４２が不正なプログラムであるか否かを判断しているので、ラダープログラム４２の改ざんを容易に見つけることが可能となる。
【０１０７】
実施の形態２．
つぎに、図７から図９を用いて、実施の形態２について説明する。実施の形態２では、ラダープログラム４２の不正な利用を防ぐために、後述のライセンス配信サーバ１０Ｂが、ファンクションブロックをラダープログラム４２から分離して暗号化し、ファンクションブロックが後述のエンジニアリングツール２１Ｂで復元されないようにする。
【０１０８】
図７は、実施の形態２に係るライセンス配信サーバが実行する処理を説明するための図である。ライセンス配信サーバ１０Ｂは、実施の形態１で説明したライセンス配信サーバ１０Ａと同様の機能を有している。ライセンス配信サーバ１０Ｂのラダープログラム変換部１４は、ファンクションブロックであるＦＢ４６を含んだラダープログラム４２を、ＦＢ４６を含まないラダープログラム４５と、ＦＢ４６とに分離する。換言すると、ラダープログラム変換部１４は、ラダープログラム４２を、第１および第２のセグメントに分離する。
【０１０９】
ラダープログラム変換部１４は、実施の形態１と同様の方法によって、第１のセグメントであるラダープログラム４５を、保護済みラダープログラム４７に変換する。具体的には、ラダープログラム変換部１４は、ラダープログラム４２から配布用ファイルデータ１０１を生成した際の処理と同様の処理によって、ラダープログラム４５を保護済みラダープログラム４７に変換する。
【０１１０】
また、ラダープログラム変換部１４は、第２のセグメントであるＦＢ４６を実行形式に変換することによって、ＦＢ実行形式ファイル２１０を生成する。ＦＢ実行形式ファイル２１０は、ＦＢ４６がプログラマブルコントローラ３０Ａで動作可能な実行形式に変換されたファイルである。換言すると、ＦＢ実行形式ファイル２１０は、実施の形態１の実行形式ファイル２０１と同様に、プログラマブルコントローラ３０Ａがプログラムであると解釈して実行可能なファイルである。
【０１１１】
さらに、ラダープログラム変換部１４は、ＦＢ実行形式ファイル２１０に対して、プログラマブルコントローラ３０Ａに向けた暗号化を実行する。すなわち、実施の形態１ではエンジニアリングツール２１Ａが実施していたプログラマブルコントローラ３０Ａに向けた暗号化を、実施の形態２では、ラダープログラム変換部１４が実行する。このように、実施の形態２では、ライセンス配信サーバ１０Ｂが、ラダープログラム４２をユーザに配信する際に、ＦＢ実行形式ファイル２１０を暗号化することによって、保護済みＦＢ実行形式ファイル２１１を生成する。保護済みＦＢ実行形式ファイル２１１は、ＦＢ実行形式ファイル２１０をプログラマブルコントローラ３０Ａに限り動作が可能なファイルに変換したものである。ライセンス配信サーバ１０Ｂは、生成した保護済みラダープログラム４７およびＦＢ実行形式ファイル２１０をまとめてユーザに配布する。
【０１１２】
図８は、実施の形態２に係るエンジニアリングツールが実行する処理を説明するための図である。エンジニアリングツール２１Ｂは、実施の形態１で説明したエンジニアリングツール２１Ａと同様の機能を有しており、保護済みラダープログラム４７を実施の形態１と同様の手順で復元する。すなわち、エンジニアリングツール２１Ｂは、配布用ファイルデータ１０１からラダープログラム４２を復元した際の処理と同様の処理によって、保護済みラダープログラム４７からラダープログラム４５を復元する。具体的には、エンジニアリングツール２１Ｂのラダープログラム逆変換部２２が、保護済みラダープログラム４７を暗号化前のラダープログラム４５に逆変換する。これにより、エンジニアリングツール２１Ｂは、ＦＢ４６を有していないラダープログラム４５については、実施の形態１と同様の復元結果を得ることができる。この結果、エンジニアリングツール２１Ｂは、ＦＢ４６を除いたプログラム部分については、編集を実施することが可能となる。なお、エンジニアリングツール２１Ｂは、ＦＢ４６が保護された形式のままであるので、このままではシミュレーションを実行できない。エンジニアリングツール２１Ｂがシミュレーションを実行する際の処理については、後述する。
【０１１３】
また、実行形式変換部２３は、ラダープログラム逆変換部２２が逆変換によって生成したラダープログラム４５を実行形式ファイル２２０に変換する。ここでの実行形式ファイル２２０は、実施の形態１の実行形式ファイル２０１と同様に、プログラマブルコントローラ３０Ａがプログラムであると解釈して実行可能なファイルである。さらに、ラダープログラム再変換部２４は、実行形式変換部２３が変換によって生成した実行形式ファイル２２０を、ライセンス証書４１によって対応付けされたプログラマブルコントローラ３０Ａに限り動作が可能な保護済み実行形式ファイル２２１に変換する。ここでの保護済み実行形式ファイル２２１は、実施の形態１の保護済み実行形式ファイル２０２と同様に、プログラマブルコントローラ３０Ａ以外のプログラマブルコントローラでは動作できないように保護されたファイルである。
【０１１４】
ラダープログラム再変換部２４は、保護済み実行形式ファイル２２１と、保護済みＦＢ実行形式ファイル２１１とを結合する。これにより、ラダープログラム再変換部２４は、実施の形態１で説明した保護済み実行形式ファイル２０２と等価の保護済み実行形式ファイル２０２を得ることができる。この後、開発ＰＣ２０は、保護済み実行形式ファイル２０２をプログラマブルコントローラ３０Ａに送り、プログラマブルコントローラ３０Ａは、保護済み実行形式ファイル２０２を用いて被制御機器を制御する。
【０１１５】
ここで、実施の形態２のエンジニアリングツール２１Ｂが実行するＦＢ４６のシミュレーション処理について説明する。図９は、実施の形態２にかかるエンジニアリングツールが実行するＦＢのシミュレーション処理を説明するための図である。ここでＦＢ４６のシミュレーション処理とは、ソフトウェア上でＦＢ４６を実行することをいう。
【０１１６】
実施の形態２にかかるエンジニアリングツール２１Ｂは、ＦＢ委託処理部９１を備えている。また、エンジニアリングツール２１ＢがＦＢ４６のシミュレーション処理を実行する場合、プログラマブルコントローラ３０Ａの代わりにプログラマブルコントローラ３０Ｂが用いられる。プログラマブルコントローラ３０Ｂは、プログラマブルコントローラ３０Ａが備える機能に加えて、ＦＢ委託計算部９２を備えている。
【０１１７】
ＦＢ委託処理部９１は、ＦＢ４６のシミュレーション要求がユーザによって入力されると、シミュレーション要求をプログラマブルコントローラ３０Ｂに出力する機能を有している。したがって、ＦＢ委託処理部９１は、ＦＢ４６のシミュレーション要求がユーザによって指示されると、この指示を受付けるとともに、受付けたシミュレーション要求をプログラマブルコントローラ３０ＢのＦＢ委託計算部９２に送る。
【０１１８】
ＦＢ委託計算部９２は、ＦＢ委託処理部９１からのシミュレーション要求に基づいてＦＢ４６での処理を計算する。すなわち、ＦＢ委託計算部９２は、ＦＢ委託処理部９１からの入力に対応するＦＢ４６の出力を計算する。ＦＢ委託計算部９２は、ＦＢ４６を用いた処理のシミュレーション結果である計算結果をＦＢ委託処理部９１に送る。このように、ＦＢ委託処理部９１は、ＦＢ４６を用いたシミュレーションをＦＢ委託計算部９２に要求し、ＦＢ委託計算部９２は、ＦＢ４６を用いたシミュレーションを実行して実行結果をＦＢ委託処理部９１に返す。
【０１１９】
これにより、エンジニアリングツール２１Ｂは、エンジニアリング環境内でＦＢ４６を復元することなく、シミュレーションを実行することが可能となる。このような、ＦＢ委託処理部９１およびＦＢ委託計算部９２の機能が実施の形態１で説明したラダープログラム不正利用防止システム１に追加されることにより、ラダープログラム不正利用防止システム１は、ＦＢ４６をエンジニアリング環境で復元することなく、プログラマブルコントローラ３０Ｂのラダープログラム４２を開発することが可能となる。これにより、ラダープログラム不正利用防止システム１は、パッケージ製品のＦＢ４６について強固な保護を実現することができる。
【０１２０】
このように、実施の形態２によれば、エンジニアリングツール２１Ｂがラダープログラム４５を復元した場合であっても、ＦＢ４６は保護されているのでＦＢ４６は復元されない。これにより、エンジニアリングツール２１Ｂがリバースエンジニアリングされても、復元に用いた鍵の情報およびＦＢ４６が奪取されることを防止できる。
【０１２１】
以上の実施の形態に示した構成は、本発明の内容の一例を示すものであり、別の公知の技術と組み合わせることも可能であるし、本発明の要旨を逸脱しない範囲で、構成の一部を省略、変更することも可能である。
【符号の説明】
【０１２２】
１  ラダープログラム不正利用防止システム、１０Ａ，１０Ｂ  ライセンス配信サーバ、１１  公開鍵ペアＤＢ、１２  ユーザＤＢ、１３  ライセンス証書生成部、１４  ラダープログラム変換部、２０  開発ＰＣ、２１Ａ，２１Ｂ  エンジニアリングツール、２２  ラダープログラム逆変換部、２３  実行形式変換部、２４  ラダープログラム再変換部、３０Ａ，３０Ｂ  プログラマブルコントローラ、３１  ラダープログラム逆変換部、３２  制御実行部、４１  ライセンス証書、４２，４５  ラダープログラム、９１  ＦＢ委託処理部、９２  ＦＢ委託計算部、１０１  配布用ファイルデータ、２０１，２２０  実行形式ファイル、２０２，２２１  保護済み実行形式ファイル、２１０  ＦＢ実行形式ファイル、２１１  保護済みＦＢ実行形式ファイル。
【要約】
ラダープログラム不正利用防止システムにおいて、ベンダ秘密鍵を用いて暗号化が実行されたラダープログラムに、ベンダ秘密鍵と対をなすベンダ公開鍵を用いて復号を行い、復号が行われたラダープログラムに、特定のプログラマブルコントローラでは動作し且つ他のプログラマブルコントローラでは動作しないよう、コントローラ公開鍵を用いて暗号化を実行するエンジニアリングツールと、コントローラ公開鍵を用いて暗号化が実行されたラダープログラムに、コントローラ公開鍵と対をなすコントローラ秘密鍵を用いて復号を行ない、コントローラ秘密鍵を用いて復号したラダープログラムを実行するプログラマブルコントローラと、を備える。【図１】
0006381857.tif 000002
【図２】
0006381857.tif 000003
【図３】
0006381857.tif 000004
【図４】
0006381857.tif 000005
【図５】
0006381857.tif 000006
【図６】
0006381857.tif 000007
【図７】
0006381857.tif 000008
【図８】
0006381857.tif 000009
【図９】
0006381857.tif 000010