(57)【特許請求の範囲】
【請求項１】
制御装置であって、
前記制御装置にユニークに設定されている固有識別情報を記憶する固有識別情報記憶部と、
前記制御装置の制御処理の対象となる対象デバイスのデバイス番号が含まれ、前記制御装置以外の装置による使用が許可されていないラダープログラムを主プログラムとして入力するプログラム入力部と、
前記固有識別情報に基づいて、前記制御装置以外の装置による主プログラムの使用を防止するラダープログラムを認証プログラムとして生成する認証プログラム生成部と、
主プログラムと認証プログラムとを合成して合成プログラムとするプログラム合成部と、
前記合成プログラムを記憶するプログラム記憶部とを有し、
前記認証プログラム生成部は、
対象デバイスのデバイス番号を疑似するデバイス番号であって、認証のために用いられる複数の認証用デバイスのデバイス番号を認証用デバイス番号として管理し、
前記固有識別情報に基づいて、１つ以上の認証用デバイス番号を選択し、
選択した選択認証用デバイス番号が含まれるラダープログラムであって、前記合成プログラムとして前記主プログラムとともに実行される際に前記認証プログラム生成部の選択動作から独立して前記固有識別情報に基づいて前記選択認証用デバイス番号が正確に選択され前記選択認証用デバイス番号に対応する選択認証用デバイスの各々に対して所定の設定処理が行われれば正常に動作して前記主プログラムが正常に動作し、前記合成プログラムとして前記主プログラムとともに実行される際に前記選択認証用デバイスの各々に対して前記設定処理が行われない場合には正常に動作せず前記主プログラムの動作が停止するラダープログラムを認証プログラムとして生成することを特徴とする制御装置。
【請求項２】
前記制御装置は、更に、
前記複数の認証用デバイスを各々の認証用デバイス番号と対応付けて管理し、前記プログラム記憶部に記憶されている合成プログラムの実行の際に、前記認証プログラム生成部の選択動作から独立して前記固有識別情報に基づいて１つ以上の認証用デバイス番号を選択し、選択した選択認証用デバイス番号に対応する選択認証用デバイスの各々に対して所定の設定処理を行う設定処理部と、
前記設定処理部により前記選択認証用デバイスの各々に対して設定処理が行われた後に、前記プログラム記憶部に記憶されている合成プログラムの実行を行うプログラム実行部とを有することを特徴とする請求項１に記載の制御装置。
【請求項３】
前記制御装置は、更に、
乱数を記憶する乱数記憶部と、
前記認証プログラム生成部による認証プログラムの生成に先立ち、前記乱数記憶部に記憶されている乱数と前記固有識別情報記憶部に記憶されている固有識別情報とに対して一方向演算を行い、前記設定処理部による設定処理に先立ち、前記乱数記憶部に記憶されている乱数と前記固有識別情報記憶部に記憶されている固有識別情報とに対して一方向演算を行う一方向演算部とを有し、
前記認証プログラム生成部は、
前記一方向演算部による一方向演算値に基づいて、１つ以上の認証用デバイス番号を選択し、選択した選択認証用デバイス番号が含まれる認証プログラムを生成し、
前記設定処理部は、
前記一方向演算部による一方向演算値に基づいて、１つ以上の認証用デバイス番号を選択し、選択した選択認証用デバイス番号に対応する選択認証用デバイスの各々に対して所定の設定処理を行うことを特徴とする請求項２に記載の制御装置。
【請求項４】
前記認証プログラム生成部は、
選択認証用デバイスをＯＦＦ状態からＯＮ状態にする設定処理が行われれば正常に動作して前記主プログラムが正常に動作し、選択認証用デバイスをＯＦＦ状態からＯＮ状態にする設定処理が行われない場合には正常に動作せず前記主プログラムの動作が停止するラダープログラムを認証プログラムとして生成し、
前記設定処理部は、
選択認証用デバイスをＯＦＦ状態からＯＮ状態にする設定処理を行うことを特徴とする請求項２又は３に記載の制御装置。
【請求項５】
前記認証プログラム生成部は、
２つ以上の認証用デバイス番号を選択し、
選択した選択認証用デバイス番号のすべてが含まれ前記主プログラムの先頭に配置されることになる先頭認証プログラムと、それぞれに選択認証用デバイス番号のいずれかが含まれ前記主プログラム内の複数の挿入位置に挿入されることになる２つ以上の挿入認証プログラムとの少なくともいずれかを生成し、
前記プログラム合成部は、
前記先頭認証プログラムを前記主プログラムの先頭に配置し、前記２つ以上の挿入認証プログラムを前記主プログラム内の複数の挿入位置に挿入することを特徴とする請求項１〜４のいずれかに記載の制御装置。
【請求項６】
前記制御装置は、更に、
主プログラムと認証プログラムが合成された合成プログラムの実行所要時間の許容範囲を許容時間として記憶する許容時間記憶部と、
前記プログラム入力部により入力された主プログラムの実行所要時間を予測する所要時間予測部と、
前記所要時間予測部により予測された予測所要時間と前記許容時間とに基づき、前記認証プログラムに含める認証用デバイス番号の個数を決定する個数決定部とを有し、
前記認証プログラム生成部は、
前記個数決定部により決定された個数分の認証用デバイス番号を選択することを特徴とする請求項１〜５のいずれかに記載の制御装置。
【請求項７】
前記制御装置は、更に、
前記プログラム入力部により入力された主プログラムのプログラムサイズが所定サイズ以上であるか否かを判断し、前記主プログラムのプログラムサイズが前記所定サイズ未満であれば、前記認証プログラム生成部に対して認証プログラムの生成の保留させ、前記主プログラムのプログラムサイズが前記所定サイズ以上であれば、前記認証プログラム生成部に対して認証プログラムの生成を指示するプログラムサイズ判断部を有することを特徴とする請求項１〜６のいずれかに記載の制御装置。
【請求項８】
前記認証プログラム生成部は、
２つ以上の認証用デバイス番号を選択し、
それぞれに選択認証用デバイス番号のいずれかが含まれる２つ以上の挿入認証プログラムを生成し、所定の挿入位置決定アルゴリズムに従って挿入認証プログラムごとに前記主プログラム内の挿入位置を決定し、
前記プログラム合成部は、
前記認証プログラム生成部により決定された挿入位置にて挿入認証プログラムのそれぞれを前記主プログラムに挿入し、
前プログラムサイズ判断部は、
前記認証プログラム生成部による挿入認証プログラムの生成に先立ち、前記主プログラムのプログラムサイズに基づき、前記挿入位置決定アルゴリズムに従って決定される挿入認証プログラムの挿入位置が前記主プログラムの特定部分に集中するか否かを判断し、
挿入認証プログラムの挿入位置が前記主プログラムの特定部分に集中する場合に、前記挿入位置決定アルゴリズム以外のアルゴリズムであって、挿入認証プログラムの挿入位置が前記主プログラム内でより分散するアルゴリズムに従って挿入認証プログラムの挿入位置を決定するよう前記認証プログラム生成部に指示することを特徴とする請求項７に記載の制御装置。
【請求項９】
前記認証プログラム生成部は、
前記対象デバイスと番号体系が異なる認証用デバイス番号が含まれる認証用プログラムを生成し、
前記制御装置は、更に、
前記プログラム記憶部に記憶されている合成プログラムの出力指示が外部装置からあった場合に、前記合成プログラム中の認証プログラムに含まれている選択認証用デバイス番号を、前記対象デバイスのデバイス番号と同じ番号体系のデバイス番号に変更するデバイス番号変更部と、
認証プログラムに前記デバイス番号変更部による変更後のデバイス番号が含まれる合成プログラムを前記外部装置に出力するプログラム出力部とを有することを特徴とする請求項１〜８のいずれかに記載の制御装置。
【請求項１０】
前記認証プログラム生成部は、
２つ以上の認証用デバイス番号を選択し、
それぞれに選択認証用デバイス番号のいずれかが含まれる２つ以上の挿入認証プログラムを生成し、挿入認証プログラムごとに前記主プログラム内の挿入位置を決定し、
前記プログラム合成部は、
前記認証プログラム生成部により決定された挿入位置にて挿入認証プログラムのそれぞれを主プログラムに挿入して合成プログラムとし、
前記制御装置は、更に、
前記合成プログラムの出力指示が外部装置からあった場合に、前記合成プログラムを前記外部装置に出力するプログラム出力部と、
前記プログラム出力部により前記合成プログラムが前記外部装置に出力される度に、前記合成プログラムから前記２つ以上の挿入認証プログラムを削除する削除処理部と、
前記プログラム出力部により前記合成プログラムが前記外部装置に出力される度に、出力回数を計数する出力回数計数部とを有し、
前記認証プログラム生成部は、
前記プログラム出力部により前記合成プログラムが前記外部装置に出力される度に、前記固有識別情報と前記出力回数計数部の計数値とに基づいて、新たに２つ以上の認証用デバイス番号を選択し、それぞれに新たな選択認証用デバイス番号のいずれかが含まれる２つ以上の新たな挿入認証プログラムを生成し、生成した新たな挿入認証プログラムごとに前記削除処理部による削除処理後の主プログラム内の新たな挿入位置を決定し、
前記プログラム合成部は、
前記認証プログラム生成部により決定された新たな挿入位置にて新たな挿入認証プログラムのそれぞれを前記主プログラムに挿入して新たな合成プログラムとすることを特徴とする請求項１〜９のいずれかに記載の制御装置。
【請求項１１】
制御装置を管理する管理装置であって、
前記制御装置以外の装置による使用が許可されていない、前記制御装置における制御に用いられる主プログラムと、前記制御装置以外の装置による主プログラムの使用を防止するために前記制御装置において生成された認証プログラムとが合成されている合成プログラムを前記制御装置から入力するプログラム入力部と、
前記合成プログラムの中から前記認証プログラムを抽出し、前記認証プログラムに対して非表示設定を行う非表示設定部と、
前記非表示設定部による非表示設定に基づき、前記認証プログラムは表示せずに、前記主プログラムのみを表示する表示部とを有することを特徴とする管理装置。
【請求項１２】
前記管理装置は、更に、
前記制御装置にユニークに設定されている固有識別情報を記憶する固有識別情報記憶部と、
乱数を記憶する乱数記憶部とを有し、
前記プログラム入力部は、
複数の認証プログラムのそれぞれが前記主プログラム内の所定位置に配置されている合成プログラムであって、前記制御装置において所定の決定アルゴリズムに従い前記固有識別情報と前記乱数とを用いて認証プログラムごとに決定された位置にそれぞれの認証プログラムが配置されている合成プログラムを入力し、
前記非表示設定部は、
前記制御装置と同じ決定アルゴリズムに従い、前記固有識別情報記憶部の前記固有識別情報と前記乱数記憶部の前記乱数とを用いて、それぞれの認証プログラムの位置を判別して、それぞれの認証プログラムに対して非表示設定を行うことを特徴とする請求項１１に記載の管理装置。
【請求項１３】
前記管理装置は、更に、
前記制御装置にユニークに設定されている固有識別情報を記憶する固有識別情報記憶部と、
乱数を記憶する乱数記憶部と、
前記制御装置から前記合成プログラムが入力される度に、入力回数を計数する入力回数計数部とを有し、
前記プログラム入力部は、
複数の認証プログラムのそれぞれが前記主プログラム内の所定位置に配置されている合成プログラムであって、前記制御装置において所定の決定アルゴリズムに従い前記固有識別情報と前記乱数と前記制御装置から前記管理装置への合成プログラムの出力回数とを用いて認証プログラムごとに決定された位置にそれぞれの認証プログラムが配置されている合成プログラムを入力し、
前記非表示設定部は、
前記制御装置と同じ決定アルゴリズムに従い、前記固有識別情報記憶部の前記固有識別情報と前記乱数記憶部の前記乱数と前記入力回数計数部による計数値を用いて、それぞれの認証プログラムの位置を判別して、それぞれの認証プログラムに対して非表示設定を行うことを特徴とする請求項１１に記載の管理装置。
【請求項１４】
前記管理装置は、更に、
前記管理装置において前記合成プログラムが更新された結果、いずれかの認証プログラムの配置が変動した場合に、当該認証プログラムの位置を変動前の位置に戻す位置調整部を有することを特徴とする請求項１２又は１３に記載の管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの不正使用を防止する技術に関する。
より具体的には、本発明は、例えば、ＦＡ（Ｆａｃｔｏｒｙ  Ａｕｔｏｍａｔｉｏｎ）システムにおいてＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）に格納されている制御プログラム（ラダープログラム）の不正使用を防止する技術に関する。
【背景技術】
【０００２】
一般にＦＡシステムでは、他社（他人）に公開したくない制御プログラム（ラダープログラム）などの保護資産に対する不正アクセスを防止する手段としては、パスワードを利用する方法や保護資産を暗号化する方法が取られている。
しかし、パスワードを利用する方法では、例えば制御プログラムに対してパスワードを設定してアクセス制御しても、その制御プログラムに複数の開発者がアクセスすることになる場合は複数の開発者間で共通のパスワードを設定しているため他人に推測されやすいパスワードを付けるなど脆弱性についての課題がある。
また、制御プログラムとパスワード等といった認証に用いる情報とを別々に管理し、認証処理も制御プログラムとは別に実現されているため、制御プログラムとの関連付けが外されると制御プログラムに対するアクセス制御ができなくなる。
このため、保護したいデータそのものを暗号化する方法などが取られているが、暗号化には鍵を管理するために特別なハードウェアが必要となり、装置が複雑で高価になるという課題がある。
また、ＦＡシステムにおける制御プログラム（ラダープログラム）では、デバイスのＯＮ／ＯＦＦ状態に応じて制御機器への制御信号をＯＮ／ＯＦＦするものであり、制御プログラムの実行中に暗号化や復号化の処理を実行することができない。
これにより、暗号化を使わずに制御プログラムの改ざんやモニタを防ぐ方法として、モニタ装置からの制御プログラムに対するアクセス要求に対してあらかじめ設定されたアクセス権限により応答を制限する方法がある（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−１３５１６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
このように各制御プログラムに対してあらかじめ設定されたアクセス権限によりモニタ装置からのアクセス要求への応答を制限する方法では、モニタ装置からのアクセス制御を行うことが目的であり、制御プログラムを特定のＰＬＣ上でのみ実行可能にするための制御を行っているわけではない。
このため、読み出し権限を持っているとＰＬＣからモニタ装置に制御プログラムを読み出すことができ、かつ読み出した制御プログラムは別のＰＬＣへ書込むことができるので、コピーした先のＰＬＣにて制御プログラムの不正利用が可能となる課題がある。
【０００５】
本発明は、上記課題を鑑みてなされたものであって、その主たる目的は、特定の制御装置にのみ使用が許可されている制御プログラム（ラダープログラム）が、特定の制御装置上でしか動作できないようにするための制御プログラムの不正利用防止機能を実現することである。
【課題を解決するための手段】
【０００６】
本発明に係る制御装置は、
前記制御装置にユニークに設定されている固有識別情報を記憶する固有識別情報記憶部と、
前記制御装置の制御処理の対象となる対象デバイスのデバイス番号が含まれ、前記制御装置以外の装置による使用が許可されていないラダープログラムを主プログラムとして入力するプログラム入力部と、
前記固有識別情報に基づいて、前記制御装置以外の装置による主プログラムの使用を防止するラダープログラムを認証プログラムとして生成する認証プログラム生成部と、
主プログラムと認証プログラムとを合成して合成プログラムとするプログラム合成部と、
前記合成プログラムを記憶するプログラム記憶部とを有し、
前記認証プログラム生成部は、
対象デバイスのデバイス番号を疑似するデバイス番号であって、認証のために用いられる複数の認証用デバイスのデバイス番号を認証用デバイス番号として管理し、
前記固有識別情報に基づいて、１つ以上の認証用デバイス番号を選択し、
選択した選択認証用デバイス番号が含まれるラダープログラムであって、前記合成プログラムとして前記主プログラムとともに実行される際に前記認証プログラム生成部の選択動作から独立して前記固有識別情報に基づいて前記選択認証用デバイス番号が正確に選択され前記選択認証用デバイス番号に対応する選択認証用デバイスの各々に対して所定の設定処理が行われれば正常に動作して前記主プログラムが正常に動作し、前記合成プログラムとして前記主プログラムとともに実行される際に前記選択認証用デバイスの各々に対して前記設定処理が行われない場合には正常に動作せず前記主プログラムの動作が停止するラダープログラムを認証プログラムとして生成することを特徴とする。
【発明の効果】
【０００７】
本発明では、主プログラムの格納の際に、制御装置にユニークに設定されている固有識別情報に基づき選択した選択認証用デバイス番号が含まれるラダープログラムを認証プログラムとして生成し、認証プログラムを主プログラムに合成し、主プログラムの実行の際に固有識別情報に基づき正しく選択認証用デバイス番号が選択され、選択認証用デバイスに設定処理が行われていれば主プログラムが正常に動作し、設定処理が行われていない場合は認証プログラムによって主プログラムが停止する。
このため、制御装置では正常に主プログラムを使用することができる一方で、主プログラムの使用が許可されていない装置では、主プログラムを使用することができず、主プログラムの不正使用を防止することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係るシステム構成例を示す図。
【図２】実施の形態１に係る動作例を示すフローチャート図。
【図３】実施の形態１に係る動作例を示すフローチャート図。
【図４】実施の形態１に係る認証ラダーの例を示す図。
【図５】実施の形態１に係る専用デバイスの設定例を示す図。
【図６】実施の形態２に係るシステム構成例を示す図。
【図７】実施の形態３に係るシステム構成例を示す図。
【図８】実施の形態４に係るシステム構成例を示す図。
【図９】実施の形態５に係るシステム構成例を示す図。
【発明を実施するための形態】
【０００９】
実施の形態１〜５では、ＦＡシステムにおいてＰＬＣに格納されている制御プログラム（ラダープログラム）の不正コピーによりＰＬＣの模造品が製造されるのを防ぐ技術を説明する。
より具体的には、制御プログラムをＰＬＣに書込む際に、ＰＬＣを個体識別するためのシリアルＩＤとエンジニアリング環境にて生成した乱数を用いて認証情報を生成し、ＰＬＣと制御プログラムとの関連付けを行うと共に、生成した認証情報から制御プログラムに挿入可能な認証ラダーを自動生成して制御プログラム中に挿入する。
そして、制御プログラムの実行時に、挿入した認証ラダーにて関連付けを行ったＰＬＣ上での実行であることを確認することで制御プログラムを不正に別のＰＬＣにコピーして模造品が製造されるなどの不正利用されることを防止する。
【００１０】
ここで、認証ラダーとは、主プログラムたる制御プログラムに挿入されるラダープログラムであり、認証プログラムの例である。
より具体的には、制御プログラムの実行時に特定のデバイス番号に該当する専用デバイスがＯＮになっていることを確認するために制御プログラムに挿入されるラダープログラムが認証ラダーである。
実施の形態１〜５では、ＰＬＣのシリアルＩＤとエンジニアリング環境側で生成した乱数を入力としてハッシュ関数（一方向性関数）にて認証情報（ハッシュ値）を生成し、この認証情報に基づいて専用デバイスのＯＮ／ＯＦＦをチェックするためのデバイス番号を決定する。この認証情報に基づいて決定されたデバイス番号が含まれるラダープログラムが認証ラダーである。
ここで生成した認証情報は、ＰＬＣのシリアルＩＤを入力としてハッシュ関数により生成しているため、ＰＬＣ毎に生成される認証情報は異なる。
また、制御プログラムは、入力機器や出力機器といったＰＬＣの制御処理の対象となる対象デバイスのデバイス番号が含まれるラダープログラムであり、指定されたＰＬＣ以外の装置による使用が許されない。
制御プログラムは主プログラムの例である。
制御プログラムに認証ラダーが挿入された後のプログラムを合成プログラムともいう。
また、専用デバイスとは、ＰＬＣ内に設けた制御プログラムで使用するデータやＯＮ／ＯＦＦ信号を記憶するためのメモリであり、ＰＬＣのファームウェアからのみ設定できるものとし、エンジニアリング環境を用いてもユーザには設定できないものとする。
専用デバイスは、対象デバイスとは異なり、制御プログラムの不正使用を防止するために特別に設けられたデバイスである。専用デバイスには、対象デバイスのデバイス番号を疑似するデバイス番号を設定する。なお、専用デバイスは認証用デバイスの例であり、専用デバイスのデバイス番号は認証用デバイス番号の例である。
また、ユーザがエンジニアリング環境を用いてＰＬＣの制御プログラムを作成する際、制御プログラムやパラメータ、および認証情報などを管理するためのプロジェクトをＰＬＣごとに作成する。
【００１１】
以上を踏まえ、以下にて、実施の形態１〜５の各々を説明する。
【００１２】
実施の形態１．
図１は、本実施の形態に係る不正利用防止システムのシステム構成例を示す。
図１に示す不正利用防止システムは、ＰＬＣに格納した制御プログラムを特定のＰＬＣ上でのみ実行可能にするためのＦＡ機器制御プログラムの不正利用防止システムである。
本実施の形態に係る不正利用防止システムは、エンジニアリング環境側ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）１００とＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）２００に大別される。
エンジニアリング環境側ＰＣ１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、磁気ディスク装置、通信ボード等を備えるコンピュータである。
この場合、エンジニアリング環境側ＰＣ１００の内部要素として示している機能（「〜部」）を実現するプログラムを例えば磁気ディスク装置に格納し、ＣＰＵがこれらプログラムを適宜読み出すことで、各機能を実行する。
ＰＬＣ２００は、ラダープログラムである制御プログラムを記憶し、ＣＰＵが制御プログラムを実行して、機器の制御を行う。
エンジニアリング環境側ＰＣ１００は管理装置の例であり、ＰＬＣ２００は制御装置の例である。
なお、エンジニアリング環境側ＰＣ１００及びＰＬＣ２００の内部構成については後述する。
【００１３】
また、図２は本実施の形態に係る動作例を示すフローチャートである。
図２は、具体的には、制御プログラムをＰＬＣに書込む際にセキュリティ設定を行い、制御プログラムとＰＬＣを関連付ける際の処理フローを示す。
図２の処理フローの詳細は後述する。
【００１４】
また、図３はＰＬＣにて認証ラダーを生成し、生成した認証ラダーを制御プログラムに挿入してＰＬＣに制御プログラムを格納する際の処理フローを示す。
図３の処理フローの詳細は後述する。
【００１５】
図４は認証ラダー生成用乱数とＰＬＣのシリアルＩＤから生成した認証情報に基づいて自動生成した認証ラダーの例である。
図４の詳細は後述する。
【００１６】
図５はＰＬＣの電源投入時にファームウェアの初期化処理にて認証情報に基づいて専用デバイスを設定した際の例である。
図５の詳細は後述する。
【００１７】
次に、図１を用いて、ＰＬＣに格納した制御プログラムの実行時に許可されたＰＬＣ上での実行であることを確認するＦＡ機器制御プログラムの不正利用防止システムを構成する要素を説明する。
【００１８】
まず、エンジニアリング環境側ＰＣ１００の構成要素を説明する。
【００１９】
１は、エンジニアリング環境側ＰＣ１００においてユーザがキーボードやマウス等を用いてＰＬＣの制御プログラム作成やパラメータ設定を行うための入力部である。
【００２０】
２は、ユーザがＰＬＣの制御プログラムを作成する制御プログラム作成部である。
【００２１】
３は、制御プログラム作成部２にて作成した制御プログラムを格納するための制御プログラム記憶部である。
【００２２】
４は、制御プログラム記憶部３に格納した制御プログラムのＰＬＣへの書込みやＰＬＣからの読出しなどのＰＬＣに対するアクセス要求をＰＬＣに送信するアクセス要求送信処理部である。
【００２３】
５は、入力部１によりユーザからの制御プログラムの書込み指示を受けて制御プログラム記憶部３に格納されている制御プログラムを読み出してアクセス要求送信処理部４にＰＬＣへの書込み要求を行う制御プログラム書込み要求部である。
【００２４】
６ａは、エンジニアリング環境側ＰＣ１００にて作成した制御プログラムに対してセキュリティ設定を無効から有効にするためのセキュリティ設定部である。
【００２５】
７は、乱数を生成する乱数生成処理部である。
より具体的には、乱数生成処理部７は、セキュリティ設定部６のセキュリティ設定を無効から有効に設定したときにプロジェクト（ＦＡ機器単位で作成する制御プログラムやパラメータ設定などから構成される情報）で固有であり、認証ラダーの生成時の入力として使用する乱数やエンジニアリング環境とＰＬＣ間で認証を行う際のチャレンジ＆レスポンス認証用の乱数（チャレンジ値）を生成する。
【００２６】
８ａは、セキュリティ設定を有効にした際に制御プログラムの書込み先であるＰＬＣと制御プログラムとの関連付けを行い、認証ラダーを生成するために乱数生成処理部７にて生成した乱数を格納する認証ラダー生成用乱数記憶部である。
【００２７】
９ａは、セキュリティ設定を有効した際に制御プログラムの書込み先であるＰＬＣから読み取ったＰＬＣを個体識別するためのシリアルＩＤ（例えば、製造番号など）を格納するシリアルＩＤ記憶部である。
【００２８】
１０ａは、エンジニアリング環境側ＰＣ１００側で生成した認証情報とＰＬＣ２００で生成した認証情報を比較して認証を行う認証処理部である。
より具体的には、認証処理部１０ａは、乱数生成処理部７に対して乱数の生成の要求や、セキュリティ設定部６ａのセキュリティ設定が有効の場合にＰＬＣに対する制御プログラムの書込み／読取りを行う際にアクセス先のＰＬＣが関連付けられているＰＬＣであることを確認するためにその都度乱数生成処理部７で生成した乱数と認証ラダー生成用乱数記憶部８ａに格納されている乱数とシリアルＩＤ記憶部９ａに格納されているシリアルＩＤを入力としてハッシュ関数にて生成したハッシュ値を認証情報とし、その認証情報とＰＬＣ側で生成した認証情報を比較して認証を行う。
【００２９】
次に、ＰＬＣ２００の構成要素を説明する。
【００３０】
９ｂは、ＰＬＣメーカが製品出荷時に設定しユーザには書き換えることのできないＰＬＣを個体識別するためのシリアルＩＤ（例えば、製造番号など）を格納するシリアルＩＤ記憶部である。
シリアルＩＤは、ＰＬＣ２００にユニークに設定されており、固有識別情報の例である。
そして、シリアルＩＤ記憶部９ｂは、固有識別情報記憶部の例である。
【００３１】
６ｂは、制御プログラムに対するアクセス制限を行うためのセキュリティ設定を有効にするためのセキュリティ設定部である。
セキュリティ設定部６ｂは、エンジニアリング環境側のセキュリティ設定の有効化と同期してエンジニアリング環境側からのセキュリティ設定の有効化要求を受けてＰＬＣに格納する制御プログラムに対するアクセス制限を行う。
【００３２】
８ｂは、セキュリティ設定の有効化の要求と一緒に送信されてきた乱数を格納する認証ラダー生成用乱数記憶部である。
認証ラダー生成用乱数記憶部８ｂに格納される乱数は、エンジニアリング環境側ＰＣ１００の乱数生成処理部７にて生成され、認証ラダー生成用乱数記憶部８ａに格納された乱数と同じ乱数である。
認証ラダー生成用乱数記憶部８ｂは、乱数記憶部の例である。
【００３３】
１１は、エンジニアリング環境のアクセス要求送信処理部４から送信されてきたアクセス要求をＰＬＣ側で受け付けて要求内容に応じた処理を実行するアクセス要求受信処理部である。
また、アクセス要求受信処理部１１は、エンジニアリング環境側ＰＣ１００から制御プログラム書込み要求とともに、制御プログラム（ラダープログラム）を入力する。
制御プログラムは、前述のようにＰＬＣ２００の制御処理の対象となる対象デバイスのデバイス番号が含まれるラダープログラムであり、指定されたＰＬＣ以外の装置による使用が許されない。制御プログラムは主プログラムの例である。
また、アクセス要求受信処理部１１はプログラム入力部の例である。
【００３４】
１０ｂは、ハッシュ演算（一方向演算）を行う認証処理部である。
認証処理部１０ｂは、認証ラダー生成用乱数記憶部８ｂに格納されている乱数とシリアルＩＤ記憶部９ｂに格納されているシリアルＩＤ、および認証情報の生成要求時に一緒に送付されてきた乱数（チャレンジ値）を入力としてハッシュ関数を用いてハッシュ値（レスポンス）を生成する。
より具体的には、認証処理部１０ｂは、セキュリティ設定部６ｂのセキュリティ設定が有効になっている場合において、認証ラダー（認証プログラム）の生成に先立ち、エンジニアリング環境からの認証要求を受け付けたアクセス要求受信処理部１１からの認証情報の生成要求に応じて、ハッシュ値（レスポンス値）を生成する。
認証処理部１０ｂは、一方向演算部の例である。
【００３５】
１２は、アクセス要求受信処理部１１からの制御プログラムの書込み要求を受け付けた際に、セキュリティ設定部６ｂのセキュリティ設定を確認してセキュリティ設定が有効の場合は認証ラダーを挿入する処理に進み、無効の場合は認証ラダーを含まないままの状態で制御プログラムをＰＬＣ内に書込む処理に進むことを指示する制御プログラム書込み処理部である。
【００３６】
１３は、認証ラダー（認証プログラム）を生成する認証ラダー自動生成処理部である。
認証ラダーは、制御プログラムに直接挿入可能なラダープログラムであり、ＰＬＣ２００以外の装置による制御プログラムの使用を防止するためのラダープログラムである。
認証ラダー自動生成処理部１３は、制御プログラムを実行用制御プログラム記憶部１５に格納する際に、認証処理部１０ｂにて生成したハッシュ値に基づいて専用デバイス（認証用デバイス）中の特定のデバイスの番号を選択し、選択した特定のデバイスの番号（選択認証用デバイス番号）が含まれる認証ラダーを生成する。
そして、認証ラダー挿入処理部１４により認証ラダーは制御プログラムと合成されて、実行用制御プログラム記憶部１５に格納される。
また、詳細は後述するが、制御プログラム実行制御部１６が制御プログラムと認証ラダーを実行する前に、認証ラダー自動生成処理部１３による認証ラダーの生成とは独立して、認証処理部１０ｂがシリアルＩＤと乱数に基づいてハッシュ値を生成し、専用デバイス設定部１７がハッシュ値に基づき特定の専用デバイスのデバイス番号を選択し、選択したデバイス番号に対応する専用デバイスに対して所定の設定処理（当該専用デバイスをＯＦＦ状態からＯＮ状態にする設定処理）を行う。
専用デバイス設定部１７により、認証ラダーに含まれる専用デバイスのデバイス番号と同じデバイス番号が正確に選択され、当該デバイス番号に対応する専用デバイスに対して設定処理が行われている場合には、制御プログラム実行制御部１６が制御プログラムと認証ラダーを実行した際に認証ラダーが正常に動作し、この結果、制御プログラムが正常に動作する。一方、正しいデバイス番号が選択されず、その結果、正しい専用デバイスに対して設定処理が行われていない場合には、制御プログラム実行制御部１６が制御プログラムと認証ラダーを実行した際に認証ラダーが正常に動作せず、この結果、制御プログラムの動作が停止する。
認証ラダー自動生成処理部１３は、認証プログラム生成部の例である。
なお、認証ラダー自動生成処理部１３は、選択したデバイス番号のすべてが含まれ制御プログラムの先頭に配置されることになる認証ラダー（先頭認証プログラム）と、選択したデバイス番号のいずれかが含まれ制御プログラムの複数の挿入位置に挿入されることになる２以上の認証ラダー（挿入認証プログラム）の少なくともいずれかを生成する。
例えば、図４（ａ）は、制御プログラムの先頭に配置される認証ラダーの例であり、図４（ｂ）は、制御プログラムの途中の挿入位置に挿入される認証ラダーの例である。
【００３７】
１４は、認証ラダー自動生成処理部１３にて自動生成した認証ラダーを制御プログラムと合成する認証ラダー挿入処理部である。
認証ラダー挿入処理部１４は、制御プログラムの先頭に配置される認証ラダーの場合（図４（ａ）に例示した認証ラダーの場合）は制御プログラムの先頭に配置し、制御プログラムの途中の挿入位置に挿入する認証ラダーの場合（図４（ｂ）に例示した認証ラダーの場合）は指定された挿入位置に挿入する。
認証ラダー挿入処理部１４は、プログラム合成部の例である。
なお、制御プログラムと認証ラダーが合成された後のプログラムを合成プログラムとも呼ぶ。
【００３８】
１５は、エンジニアリング環境側で作成した制御プログラムもしくは認証ラダー挿入処理部１４にて認証ラダーが合成された後の制御プログラム（合成プログラム）を格納する実行用制御プログラム記憶部である。
実行用制御プログラム記憶部１５は、プログラム記憶部の例である。
【００３９】
１６は、ＰＬＣ２００が実行モードになった場合に実行用制御プログラム記憶部１５に格納された制御プログラムを実行する制御プログラム実行制御部である。
制御プログラム実行制御部１６は、プログラム実行部の例である。
【００４０】
１７は、ＰＬＣの電源投入時にＰＬＣ内のファームウェアの初期化処理にて認証ラダー生成用乱数記憶部８ｂに格納された乱数とシリアルＩＤ記憶部９ｂに格納されたシリアルＩＤから生成されたハッシュ値から専用デバイスのデバイス番号を抽出し、抽出したデバイス番号に該当する専用デバイスをＯＮに設定する専用デバイス設定部である。
専用デバイス設定部１７は、設定処理部の例である。
【００４１】
次に、図１、図２、図３を用いて、エンジニアリング環境上の制御プログラム（ラダープログラム）をＰＬＣへ書込む際の動作を説明する。
【００４２】
まず、エンジニアリング環境側ＰＣ１００上で制御プログラムを作成する手順について説明する。
【００４３】
ユーザは、エンジニアリング環境側ＰＣ１００の入力部１と制御プログラム作成部２を用いて制御プログラムの作成を行い、作成した制御プログラムを制御プログラム記憶部３に格納する。
【００４４】
次に、エンジニアリング環境側ＰＣ１００上で作成した制御プログラムをＰＬＣ２００に書込む際の初回登録時の手順を説明する。
【００４５】
ユーザはエンジニアリング環境側ＰＣ１００とＰＬＣ２００をＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ケーブル等にてネットワーク接続する。
次に、アクセス要求送信処理部４とアクセス要求受信処理部１１を用いてエンジニアリング環境とＰＬＣ間のデータ送受信を行う。
ユーザが入力部１を用いて制御プログラム記憶部３に格納されている制御プログラムのＰＬＣへの書込み指示をすると（図２のＳ２０１）、制御プログラム書込み要求部５は制御プログラム記憶部３から制御プログラムを読出す（Ｓ２０２）。
制御プログラム書込み要求部５はセキュリティ設定部６ａに対してセキュリティ設定が有効か無効かを確認する（Ｓ２０３）。
セキュリティ設定が無効になっている場合は、制御プログラム書込み要求部５はユーザにセキュリティ設定を有効にするかどうかを問い合わせる。
ユーザから無効のままとする指示を受けた場合は、制御プログラム書込み要求部５はアクセス要求送信処理部４に制御プログラムの書込み処理を指示する（Ｓ２０９）。
【００４６】
ユーザがセキュリティ設定を有効にするとの指示を受けた場合は、制御プログラム書込み要求部５はセキュリティ設定部６ａを有効に設定し（Ｓ２０４）、認証処理部１０ａに対して制御プログラムとＰＬＣの関連付けに用いる認証ラダー生成用乱数の生成を要求する。
乱数生成の要求を受けた認証処理部１０ａは乱数生成処理部７に対して乱数生成を要求する。
乱数生成処理部７は、乱数を生成し（Ｓ２０５）、乱数を認証処理部１０ａに渡す。
認証処理部１０ａは、受け取った乱数を制御プログラム書込み要求部５に返す。
制御プログラム書込み要求部５は、認証処理部１０ａから受け取った乱数を認証ラダー生成用乱数記憶部８ａに格納し（Ｓ２０６）、また、アクセス要求送信処理部４に対して認証ラダー生成用乱数を付けてＰＬＣのセキュリティ設定を有効にする要求を出す。
アクセス要求送信処理部４はＰＬＣのセキュリティ設定を有効にする要求を受け取ると、ＰＬＣ２００のアクセス要求受信処理部１１に対してセキュリティ設定の有効化を要求すると共に認証ラダー生成用乱数も一緒に送信して制御プログラムとＰＬＣの関連付けも要求する（Ｓ２０７）。なお、この時点では、制御プログラムはＰＬＣ２００に送信しない。
【００４７】
ＰＬＣ２００において、アクセス要求受信処理部１１は、セキュリティ設定の有効化の要求を受けるとセキュリティ設定部６ｂを有効に設定し（Ｓ２１０）、認証処理部１０ｂに対してエンジニアリング環境側ＰＣ１００で生成した認証ラダー生成用乱数の格納を要求すると共にＰＬＣのシリアルＩＤの取得を要求する。
認証処理部１０ｂは、認証ラダー生成用乱数を認証ラダー生成用乱数記憶部８ｂに格納し（Ｓ２１１）、シリアルＩＤ記憶部９ｂに格納されているＰＬＣ２００を個体識別するためのシリアルＩＤを読出してアクセス要求受信処理部１１に返す。
このシリアルＩＤはＰＬＣを出荷する際にＰＬＣの製造メーカが任意に設定する情報であり、ユーザが設定／変更ができない情報である。
アクセス要求受信処理部１１は、認証処理部１０ｂからシリアルＩＤを受け取ると、セキュリティ設定の有効化の要求に対する応答に受け取ったシリアルＩＤを付加してアクセス要求送信処理部４に返す（Ｓ２１２）。
【００４８】
エンジニアリング環境側ＰＣ１００において、アクセス要求送信処理部４は、アクセス要求受信処理部１１からの応答を受け取ると、応答に付加されてきたＰＬＣ２００のシリアルＩＤを制御プログラム書込み要求部５に返し、制御プログラム書込み要求部５はそれをシリアルＩＤ記憶部９ａに格納する（Ｓ２０８）。
本実施の形態では、認証ラダー生成用乱数記憶部８ａ、８ｂに格納されている認証ラダー生成用乱数とシリアルＩＤ記憶部９ａ、９ｂに格納されているＰＬＣのシリアルＩＤにより制御プログラムとＰＬＣ間を関連付け、この２つの情報からハッシュ関数を用いて生成したものを認証情報とする。
制御プログラム書込み要求部５は、アクセス要求送信処理部４に制御プログラムの書込み処理を要求し、アクセス要求送信処理部４は書込み要求と制御プログラムをＰＬＣのアクセス要求受信処理部１１に送信する（Ｓ２０９）（図３のＳ３０１）。
【００４９】
ＰＬＣ２００において、アクセス要求受信処理部１１は、制御プログラムの書込み要求を受け取ると制御プログラム書込み処理部１２に制御プログラムの書込みを指示する。
制御プログラム書込み処理部１２は、制御プログラムの書込み指示を受けるとセキュリティ設定部６ｂのセキュリティ設定を確認し（Ｓ３０２）、無効になっていた場合は受け取った制御プログラムをそのままの状態で実行用制御プログラム記憶部１５に格納する（Ｓ３０９）。
【００５０】
セキュリティ設定が有効になっていた場合には、制御プログラム書込み処理部１２は認証ラダー自動生成処理部１３に認証ラダーの生成を指示する。
認証ラダー自動生成処理部１３は、制御プログラム書込み処理部１２からの認証ラダーの生成指示を受けて認証処理部１０ｂに対して認証情報の生成を指示する。
認証処理部１０ｂは、認証ラダー生成用乱数記憶部８ｂに格納されている乱数とシリアルＩＤ記憶部９ｂに格納されているシリアルＩＤを読出し（Ｓ３０４、Ｓ３０５）、乱数とシリアルＩＤに対してハッシュ関数（一方向性関数）を用いて認証情報（ハッシュ値）を生成し（Ｓ３０６）、生成した認証情報（ハッシュ値）を認証ラダー自動生成処理部１３に返す。
認証ラダー自動生成処理部１３は、認証処理部１０ｂから受け取った認証情報を元に認証ラダー（認証を目的としたラダープログラム）を自動生成し（Ｓ３０７）、認証ラダー挿入処理部１４に対して自動生成した認証ラダーの制御プログラムへの挿入を指示する。
認証ラダー挿入処理部１４は、ユーザがエンジニアリング環境側ＰＣ１００を用いて作成した制御プログラムの特定の位置に認証ラダー自動生成処理部１３にて生成した認証ラダーを挿入する（Ｓ３０８）。
認証ラダー挿入処理部１４は、認証ラダーを挿入した制御プログラム（合成プログラム）を実行用制御プログラム記憶部１５に格納して（Ｓ３０９）、制御プログラムの書込み処理が完了する。
【００５１】
なお、本実施の形態では、認証情報の生成にエンジニアリング環境側ＰＣ１００で生成した乱数とＰＬＣ２００のシリアルＩＤの２つを入力としているが、この２つの信号以外に例えばＰＬＣ２００に搭載されているＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のＣＰＵタイプと組み合わせて認証情報を生成しても良い。
このＣＰＵタイプはエンジニアリング環境上で制御プログラムの書込み先であるＰＬＣ２００を選択した際に確定するエンジニアリング環境内で扱う情報であり、ＰＬＣ２００側もあらかじめ内部的に保持している情報であるため通信路（エンジニアリング環境とＰＬＣ間）上には流れない情報であり、認証情報が推測されにくくなる。
【００５２】
次に、図４、図５を用いて、認証情報に基づいた認証ラダーの生成と挿入、およびＰＬＣの電源投入時に実行する初期化処理での専用デバイスの設定方法について説明する。
【００５３】
ここでは、ＰＬＣ２００のシリアルＩＤを例えば「００９９１０９８７６５４３２１」、認証ラダー生成用乱数を例えば「１２３４５６７８９０」とした場合の認証ラダーの生成方法を説明する。
また、認証処理部１０ｂにて認証ラダー生成用乱数とシリアルＩＤを入力としてハッシュ関数により生成した認証情報を例えば「ＥＡ０８２ＤＦＥ１ＣＢＡ７８１６」とする。
ハッシュ関数により生成した認証情報は、ＰＬＣ２００のシリアルＩＤを利用して生成するため、別のＰＬＣではシリアルＩＤが異なるために同じ認証情報が生成されることはない。
認証ラダー自動生成処理部１３では、生成した認証情報を１バイトで区切り、区切った値を専用デバイスのデバイス番号に見立てる。
例えば、最初の１バイトの「ＥＡ」を専用デバイスのデバイス番号（１０進表示）に見立てるとＡ２３４になる。ここで「Ａ」は、専用デバイスを意味することとする。
同様に、２バイト目、３バイト目を専用デバイスのデバイス番号に見立てると、Ａ８、Ａ４５、Ａ２５４、Ａ２８、（以下省略）となる。
このように選択されたデバイス番号は、選択認証用デバイス番号に相当する。
また、ＰＬＣ２００の対象デバイスのデバイス番号には「Ｘ」等が用いられ、制御プログラムには「Ｘ５０」のように対象デバイスのデバイス番号が示されるが、これに近似させて認証ラダーでは専用デバイスのデバイス番号を「Ａ２３４」のようにする。このように、認証ラダーでは、対象デバイスのデバイス番号を疑似するデバイス番号が用いられる。
【００５４】
認証ラダー自動生成処理部１３では、これらの情報を元に図４に示すような認証ラダー（ラダープログラム）を生成する。
図４（ａ）は、選択されたすべてのデバイス番号（Ａ２３４、Ａ８、Ａ４５、Ａ２５４等）が含まれ、制御プログラムの先頭に配置されることになる認証ラダーの例である。
図４（ａ）の認証ラダーは、実行時に専用デバイス（Ａ２３４やＡ８などに対応する専用デバイス）のＯＮ／ＯＦＦの状態を確認して、１つでもＯＦＦ状態の専用デバイスがあった場合は制御プログラムの実行を停止するためのデバイス（図４（ａ）の例ではＥ９９）をＯＮに設定する。
ＰＬＣでは制御プログラムに対して１度のみの実行や定周期ごとの実行等といった実行タイプを定義することができるので、この認証ラダーは制御プログラムの実行時に１度だけ実施するように設定する。
【００５５】
また、認証ラダー自動生成処理部１３は、上記で生成した認証ラダーの専用デバイスのデバイス番号を制御プログラムのステップ数に見立てて、制御プログラムのそのステップ数の箇所に認証ラダーを挿入する。
図４（ｂ）に示すように、例えば上記の例において専用デバイスＡ２３４の場合は、デバイス番号２３４をステップ数として見立てて、制御プログラムの２３４ステップ目に認証ラダーを挿入する。
ただし、挿入する際はデバイス番号をソートしてから数の小さい順に認証ラダーを制御プログラムの該当するステップ数目に挿入する。
これにより、制御プログラムの実行中でも制御プログラムが関連付けたＰＬＣ上で実行していることを確認することができる。
例えば、認証ラダーを別のＰＬＣに書込んで実行した際に専用デバイスのＡ２３４がＯＦＦだった場合には、図４（ｂ）に示す例では挿入した認証ラダーの出力部の命令が実行されないことになる（図中の右側に記載のＹ０がＯＮに設定されない）。
このため、制御プログラムが正常に動作できず、ＰＬＣに接続されたＦＡ機器も正常に制御できなくなるので制御プログラムの不正利用を防止することができる。
図４の例では認証ラダー自動生成処理部１３にて生成した認証ラダーを説明しやすくするためにラダープログラム形式で表現しているが、実際にＰＬＣ２００上で生成される認証ラダーは実行コード形式で生成される。
【００５６】
次に、ＰＬＣ２００の電源投入時にファームウェアの初期化処理にて専用デバイスを設定する際の動作について説明する。
【００５７】
ファームウェアの初期化処理にて専用デバイス設定部１７は、専用デバイスを０クリアし、ＰＬＣ２００のセキュリティ設定部６ｂが有効になっているかどうかを確認する。
セキュリティ設定が無効だった場合には専用デバイスに対する設定は何もしない。
セキュリティ設定が有効だった場合には、専用デバイス設定部１７は認証処理部１０ｂに対して認証情報の生成を要求し、その要求を受けた認証処理部１０ｂが認証ラダー生成用乱数記憶部８ｂに格納されている乱数とシリアルＩＤ記憶部９ｂに格納されているＰＬＣのシリアルＩＤからハッシュ関数を用いて認証情報（ハッシュ値）を生成する。
専用デバイス設定部１７は、認証処理部１０ｂにて生成した認証情報（ハッシュ値）を受け取り、認証ラダー自動生成処理部１３にて専用デバイスのデバイス番号を生成した様に認証情報を１バイトで区切って、区切った１バイトの値をデバイス番号に見立て、そのデバイス番号に該当する専用デバイスをＯＮに設定する。
図５に示す例では、Ａ２３４、Ａ８、Ａ４５、Ａ２５４、Ａ２８の専用デバイスをＯＮに設定した場合である。
ファームウェアでの初期化処理が終了し、ＰＬＣ２００が実行モード（制御プログラムの実行）になった場合は、制御プログラム実行制御部１６が実行用制御プログラム記憶部１５に格納されている制御プログラムを実行し、制御プログラムの先頭に配置した認証ラダー（図４（ａ））によって、上記初期化処理にて設定した専用デバイスの特定のデバイスのＯＮ／ＯＦＦ状態を確認し、一つでも確認対象となっていた専用デバイスがＯＦＦになっていた場合は、制御プログラムが不正コピーされたＰＬＣ上での動作であることを判断し、制御プログラムの実行を停止することができる。
また、制御プログラムの実行中でも制御プログラム中に挿入した認証ラダー（図４（ｂ））により制御プログラムの不正利用を確認し、不正利用を確認した際は制御プログラムは正常動作しないために制御プログラムの不正コピーによる模造品上での利用を防止することができる。
また、認証ラダーをＰＬＣが自動生成し制御プログラムの実行時に認証ラダーが実行されて不正利用を判断しているので、ユーザには意識させること無く制御プログラムの不正利用を防止することができる。
【００５８】
制御プログラムの使用が許可されているＰＬＣ２００が制御プログラムを使用する場合は、認証ラダー生成時に用いられたシリアルＩＤ及び乱数と同じシリアルＩＤ及び乱数が用いられるので、初期化処理において正しいデバイス番号（認証ラダーに含まれているデバイス番号と同じデバイス番号）が選択され、専用デバイスが正しく設定されるはずである。
このため、制御プログラムの使用が許可されているＰＬＣ２００では、常に制御プログラムを正常に動作させることができる。
一方で、制御プログラムの使用が許可されていない装置（ＰＬＣ２００以外の装置）では、認証ラダー生成時にＰＬＣ２００で用いられたシリアルＩＤ及び乱数を知りえないので、初期化処理において正しいデバイス番号が選択されることはなく、従って、専用デバイスが正しく設定されることはない。
このため、制御プログラムの使用が許可されていない装置では、制御プログラムの動作が停止し、制御プログラムを使用することができない。
【００５９】
このように、本実施の形態によれば、ＰＬＣに格納される制御プログラムに対して、ＰＬＣのシリアルＩＤと制御プログラムを作成した際にエンジニアリング環境側で生成した乱数から認証情報を生成し、生成した認証情報から制御プログラムに直接挿入が可能な認証ラダーを自動生成して、制御プログラムの実行時にあらかじめ関連付けたＰＬＣ上での実行であることを確認することで、ユーザに意識させることなく制御プログラムとＰＬＣ間で認証を行い、認証結果に応じて制御プログラムの実行を停止することにより制御プログラムの不正利用を防止することができる。
【００６０】
以上、本実施の形態では、
ＦＡ（Ｆａｃｔｏｒｙ  Ａｕｔｏｍａｔｉｏｎ）機器を制御する制御プログラム（ラダープログラム）を他のＦＡ機器へ不正にコピーされてもコピー先のＦＡ機器上では制御プログラムが正常に動作しないようにするためのＦＡ機器制御プログラムの不正利用防止システムにおいて、
ＦＡ機器に対する制御プログラムやパラメータ等の設定や確認を行うためのエンジニアリング環境（アプリケーション）と制御プログラムに基づいて入力機器の指令信号のＯＮ／ＯＦＦに応じて出力機器をＯＮ／ＯＦＦすることによりシーケンス制御（あらかじめ定められた順序・条件に従い、対象を思い通りに動作させること）を行うＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）により実現する制御プログラムの不正利用を防止するための装置であって、
エンジニアリング環境に対してユーザが制御プログラムの作成やパラメータ等の入力および機能の実行を指示するための入力部と、
ユーザが前記入力部を用いてＰＬＣ上で実行される制御プログラム（ラダープログラム）を作成する制御プログラム作成部と、
前記制御プログラム作成部にて作成したＰＬＣ用の制御プログラムを格納するための制御プログラム記憶部と、
エンジニアリング環境からＰＬＣに対して制御プログラムやパラメータ等の書込み／読出しを要求し且つその応答を受け取るためのアクセス要求送信処理部と、
前記制御プログラム記憶部に格納した制御プログラムをＰＬＣに書込むための処理を行う制御プログラム書込み要求部と、
エンジニアリング環境上にて作成した制御プログラムに対するセキュリティ機能を有効にする場合にのみ設定するセキュリティ設定部と、
ＰＬＣにて認証ラダーを生成する際に用いる乱数や制御プログラムとＰＬＣ間で認証を行う際に利用する乱数を生成するための乱数生成処理部と、
前記制御プログラム書込み要求部からの乱数生成要求を受けて前記乱数生成処理部に対して乱数の生成を依頼したり制御プログラムとＰＬＣとの間で認証を行うために乱数やＰＬＣを個体識別するための情報からハッシュ関数（一方向関数）を用いて認証情報を生成したりする認証処理部と、
前記乱数生成処理部にて生成したＰＬＣにて認証ラダーを生成する際に用いる乱数を格納するための認証ラダー生成用乱数記憶部と、
前記制御プログラム記憶部に格納した制御プログラムをＰＬＣに初回書込みを実施した際にＰＬＣから抽出したＰＬＣを個体識別するためのシリアルＩＤ（製造番号など）を格納するシリアルＩＤ記憶部と、
エンジニアリング環境からのアクセス要求を受付けそのアクセス要求に応じて各処理部へ要求内容を転送するためのアクセス要求受信処理部と、
ＰＬＣに格納した制御プログラムに対するセキュリティ機能を有効する場合にのみ設定するセキュリティ設定部と、
認証ラダーを生成するためにエンジニアリング環境側で生成され送信されてきた乱数を格納するための認証ラダー生成用乱数記憶部と、
ＰＬＣを個体識別するためのシリアルＩＤを格納するシリアルＩＤ記憶部と、前記アクセス要求受信処理部からの制御プログラムの書込み要求を受けて制御プログラムの書込みを行う制御プログラム書込み処理部と、
前記セキュリティ設定部のセキュリティ機能が有効に設定されている場合に前記認証ラダー生成用乱数記憶部に格納されている乱数と前記シリアルＩＤ記憶部に格納されているシリアルＩＤからエンジニアリング環境側の前記認証処理部と同じアルゴリズムを用いて認証情報を生成するハッシュ値生成処理部と、
ＰＬＣに制御プログラムを書込む際に前記ハッシュ値生成処理部にて生成したハッシュ値に基づいて認証ラダーを自動生成する認証ラダー自動生成処理部と、
前記認証ラダー自動生成処理部にて生成した認証ラダーをエンジニアリング環境から送信されてきた制御プログラムに挿入する認証ラダー挿入処理部と、
前記セキュリティ設定部のセキュリティ機能が無効に設定されている場合はエンジニアリング環境から送信されてきた制御プログラムをそのまま格納するかセキュリティ機能が有効に設定されている場合は前記認証ラダー挿入処理部にて認証ラダーが挿入された制御プログラムを格納する実行用制御プログラム記憶部と、
ＰＬＣが実行モードになった場合に前記実行用制御プログラム記憶部に格納した制御プログラムを実行する制御プログラム実行制御部と、
ＰＬＣの電源投入時にＰＬＣに搭載されているファームウェアが実行する初期化処理にて認証ラダー生成用乱数とシリアルＩＤから前記認証処理部にて生成したハッシュ値に基づいてＰＬＣ内の専用デバイスの設定を行う専用デバイス設定部を設けたＦＡ機器制御プログラムの不正利用防止システムを説明した。
【００６１】
実施の形態２．
本実施の形態では、エンジニアリング環境にて作成した制御プログラムの規模や性能面の影響を考慮して認証ラダー自動生成処理部１３にて自動生成する認証ラダーの数を調整する機能を説明する。
【００６２】
図６は、制御プログラムの規模や性能面への影響を考慮して自動挿入する認証ラダーの数を調整するＦＡ機器制御プログラムの不正利用防止システムの機能構成である。
【００６３】
エンジニアリング環境側ＰＣ１００の内部構成は、図１のものと同様であるため、説明を省略する。
【００６４】
ＰＬＣ２００においては、本実施の形態では、実行制約時間記憶部１８、認証ラダー性能確認部１９、認証ラダー挿入判断部２０が追加されている。
これら以外の要素は、図１に示したものと同様である。
【００６５】
実行制約時間記憶部１８は、ユーザによって設定された制御プログラムを実行した際の制約時間を格納する。
つまり、実行制約時間記憶部１８は、制御プログラムと認証ラダーが合成された後のプログラム（合成プログラム）の実行所要時間の許容範囲を制約時間（許容時間）として記憶する。
実行制約時間記憶部１８は、許容時間記憶部の例である。
【００６６】
認証ラダー性能確認部１９は、実行制約時間記憶部１８に格納した制約時間と制御プログラムの実行時間の差を算出し、認証ラダーを挿入可能な空き時間を確認する。
つまり、認証ラダー性能確認部１９は、制御プログラムの実行時間を予測し、予測した制御プログラムの実行時間（予測所要時間）と制約時間との差を空き時間として算出する。
認証ラダー性能確認部１９は、所要時間予測部の例である。
【００６７】
認証ラダー挿入判断部２０は、エンジニアリング環境側ＰＣ１００からＰＬＣ２００へ書込み要求された制御プログラムの規模（例えばステップ数）や認証ラダー性能確認部１９にて算出した空き時間に応じて挿入する認証ラダーの数を判断する。
つまり、認証ラダー挿入判断部２０は、認証ラダー性能確認部１９により算出された空き時間（制御プログラムの実行時間と制約時間との差）に基づき、認証ラダーに含めるデバイス番号の個数を決定する。
この場合、認証ラダー自動生成処理部１３は、認証ラダー挿入判断部２０により決定された個数分の認証用デバイス番号を選択して認証ラダーを生成する。
また、認証ラダー挿入判断部２０は、制御プログラムのプログラムサイズが所定サイズ以上であるか否かを判断し、制御プログラムのプログラムサイズが所定サイズ未満であれば、認証ラダー自動生成処理部１３に対して認証ラダーの生成の保留させ、制御プログラムのプログラムサイズが所定サイズ以上であれば、認証ラダー自動生成処理部１３に対して認証ラダーの生成を指示する。
認証ラダー挿入判断部２０は、個数決定部及びプログラムサイズ判断部の例である。
【００６８】
次に、制御プログラムをＰＬＣ２００に書込む処理において、制御プログラムの規模や性能面への影響を考慮して挿入する認証ラダーの数を判断する際の動作について説明する。
【００６９】
実行制約時間記憶部１８に格納される制約時間は、エンジニアリング環境側ＰＣ１００にてユーザによって設定され、制御プログラムの書込みと同様にエンジニアリング環境側ＰＣ１００からパラメータの書込み要求にて実行制約時間記憶部１８に格納される。
この制約時間とは、ユーザが指定した時間以内に制御プログラムの実行が完了しなければならない時間であり、例えば、制御プログラムの実行タイプを定周期とした場合などで指定した周期内に制御プログラムの実行が完了しなければならない時間である。
制御プログラム書込み処理部１２は、制御プログラムの書込み要求を受けると認証ラダー性能確認部１９に制御プログラムの書込み要求を通知する。
【００７０】
認証ラダー性能確認部１９は、実行制約時間記憶部１８に格納されている制約時間を抽出すると共に制御プログラム中の命令数から予想実行時間を算出し、実行制約時間記憶部１８から抽出した制約時間との差を確認する。
制御プログラムの各種命令に対して実行時間（目安）が決まっているため、認証ラダー性能確認部１９は予想実行時間を算出することが可能である。
認証ラダー性能確認部１９は、この制約時間と予想実行時間との差により認証ラダーが挿入可能な空き時間を確認し、その空き時間を認証ラダー挿入判断部２０に渡す。
【００７１】
認証ラダー挿入判断部２０は、書込み要求を受けた制御プログラムの規模を確認し、もし規模が小さい場合は認証ラダーの挿入は取り止めて（認証ラダー自動生成処理部１３に対して認証ラダーの生成を保留させ）、認証ラダーを挿入する前の状態の制御プログラムを実行用制御プログラム記憶部１５に格納する。
例えば、悪意を持ったユーザがダミーの制御プログラムの書込み要求を実施して、認証ラダーが挿入された制御プログラムをエンジニアリング環境側に読み取られて、制御プログラムに挿入した認証ラダーの生成方法などが容易に解析されないようにするためである。
認証ラダーの挿入を取り止める基準としては、例えば、認証ラダーを生成する際に認証情報を１バイトで区切っているため、制御プログラムのステップ数が２５６ステップ以下の場合は制御プログラムに認証ラダーの挿入するのを取り止めることが考えられる。
【００７２】
十分な規模の制御プログラムの場合は、認証ラダー挿入判断部２０は、認証ラダー性能確認部１９にて算出した空き時間をもとに挿入可能な認証ラダーの数を判断する。
また、制御プログラムの規模が大きい場合は、制御プログラムの挿入位置が前半部分（２５５ステップまで）に集中してしまうため、認証ラダー挿入判断部２０は、認証ラダーが制御プログラムの全体に挿入されるようにするために、ステップ数の算出方法を制御プログラムの規模に応じて決定する。
例えば実施の形態１では認証情報を１バイトで区切った値をステップ数と見なしたが、認証情報を制御プログラムの規模に応じて２バイト、３バイトで区切った値をステップ数と見なす方法が考えられる。
このように、認証ラダー挿入判断部２０は、図４（ｂ）に例示した認証ラダーを制御プログラムに挿入する場合に、所定の挿入位置決定アルゴリズム（例えば、実施の形態１で示した認証情報を１バイト単位で区切るアルゴリズム）に従って決定される挿入位置が制御プログラムの特定部分に集中する場合は、当該挿入位置決定アルゴリズム以外のアルゴリズムであって、認証ラダーの挿入位置が制御プログラム内でより分散するアルゴリズム（例えば、認証情報を２バイト単位、３バイト単位で区切るアルゴリズム）に従って挿入位置を決定する。
【００７３】
また、認証ラダー挿入判断部２０は、制御プログラムに挿入可能な認証ラダーの数と認証ラダーを挿入するステップ数の算出アルゴリズムを認証ラダー自動生成処理部１３に通知する。
認証ラダー自動生成処理部１３は、認証ラダー挿入判断部２０から指示されたアルゴリズムに従って、認証ラダー挿入判断部２０から指示された個数分のデバイス番号の認証ラダーを生成する。
なお、認証ラダー自動生成処理部１３による認証ラダーの生成手順自体は、実施の形態１と同等である。
【００７４】
このように、本実施の形態によれば、制御プログラムの実行時の性能面への影響を考慮して認証ラダーの挿入する数を調整することで制御プログラムの実動作を妨げることなく制御プログラムの不正利用を防止することができる。
また、認証ラダーを制御プログラムの規模に応じて挿入する位置を変更することで、悪意を持ったユーザによる解析を困難にすることができ、実行中の制御プログラムの広い範囲で不正利用を検出することができる。
【００７５】
以上、本実施の形態では、
認証ラダー自動生成処理部にて認証ラダーを生成する際に性能面への影響を考慮するためにユーザによって設定された制御プログラムの実行時間の制約時間を格納する実行制約時間記憶部と、
前記実行制約時間記憶部に格納した制約時間とユーザが作成した制御プログラムの実行時間との差を算出し認証ラダーを挿入可能な空き時間を確認する認証ラダー性能確認部と、
認証ラダーを自動生成する際に制御プログラムの規模と前記認証ラダー性能確認部にて算出した空き時間に応じて挿入する認証ラダーの数を判断する認証ラダー挿入判断部を設けたＦＡ機器制御プログラムの不正利用防止システムを説明した。
【００７６】
実施の形態３．
本実施の形態では、ＰＬＣから読み出した制御プログラムに挿入されている認証ラダーをユーザに見せないようにするために認証ラダーをフィルタリングすると共に、ユーザが編集した後の制御プログラムに対して認証情報に基づいて算出したステップ数に合わせて認証ラダーの挿入位置を調整する機能を説明する。
【００７７】
図７は、本実施の形態に係る不正利用防止システムの機能構成を示す。
図７に示す不正利用防止システムは、制御プログラムに挿入された認証ラダーをユーザに見せないようにするために認証ラダーをフィルタリング処理し、制御プログラムの編集後に認証ラダーの挿入位置を調整する。
【００７８】
エンジニアリング環境側ＰＣ１００では、制御プログラム読出し要求部２１、認証ラダーフィルタリング処理部２２、認証ラダー挿入位置調整処理部２３及び表示部３０が追加されている。
他の要素は、図１で示したものと同様である。
なお、本実施の形態では、アクセス要求送信処理部４は、認証ラダーが挿入されている制御プログラム（合成プログラム）をＰＬＣ２００から入力する。
本実施の形態では、アクセス要求送信処理部４はプログラム入力部の例となる。
なお、実施の形態１と同様に、制御プログラムはＰＬＣ２００以外での使用は許可されていない。
また、認証ラダーは、実施の形態１で示したものと同様である。
また、認証ラダー生成用乱数記憶部８ａは、実施の形態１で説明した認証ラダー生成用乱数を記憶しており、乱数記憶部の例である。
また、シリアルＩＤ記憶部９ａは、実施の形態１で説明したＰＬＣ２００のシリアルＩＤを記憶しており、固有識別情報記憶部の例である。
【００７９】
制御プログラム読出し要求部２１は、ユーザからの制御プログラムの読出し指示を受けてアクセス要求送信処理部４に対して制御プログラムの読出しを要求する。
【００８０】
認証ラダーフィルタリング処理部２２は、ＰＬＣ２００から読み出した制御プログラム内の認証ラダーの挿入位置を認証処理部１０ａにて生成した認証情報に基づいて特定し、制御プログラム作成部２にて制御プログラムを表示部３０に表示する際にユーザには認証ラダーを見せないようにするために制御プログラムのフィルタリング（非表示設定）を行う。
つまり、認証ラダーフィルタリング処理部２２は、認証ラダー生成用乱数記憶部８ａの乱数とシリアルＩＤ記憶部９ａのシリアルＩＤに対するハッシュ値である認証情報に基づき、ＰＬＣ２００の認証ラダーの挿入位置決定アルゴリズムと同じアルゴリズムに従い、それぞれの認証ラダーの位置を判別して、それぞれの認証ラダーに対して非表示設定を行う。
認証ラダーフィルタリング処理部２２は非表示設定部の例である。
【００８１】
表示部３０は、認証ラダーフィルタリング処理部２２による非表示設定に基づき、認証ラダーは表示せずに、制御プログラムのみを表示する。
【００８２】
認証ラダー挿入位置調整処理部２３は、制御プログラム作成部２で制御プログラムの編集が行われた後に認証情報に基づいて算出した認証ラダーの挿入位置（ステップ数）を元のステップ数の位置に挿入されるように調整する。
つまり、認証ラダー挿入位置調整処理部２３は、制御プログラムが編集されて制御プログラムが更新された結果、いずれかの認証ラダーの配置が変動した場合に、当該認証ラダーの位置を変動前の位置に戻す。
例えば、図４（ｂ）の例において、ユーザが制御プログラムを編集した結果、２３４ステップ目にあったＡ２３４が１つ後ろの２３５ステップ目の位置にずれた場合は、認証ラダー挿入位置調整処理部２３は、Ａ２３４を元の２３４ステップ目の位置に戻す（Ｘ５０の前の位置にする）。
認証ラダー挿入位置調整処理部２３は、位置調整部の例である。
【００８３】
ＰＬＣ２００では、制御プログラム読出し処理部２４が追加されている。
制御プログラム読出し処理部２４は、実行用制御プログラム記憶部１５から制御プログラム（合成プログラム）を読み出す。
また、本実施の形態では、アクセス要求受信処理部１１は、制御プログラム読出し処理部２４により読み出された制御プログラムをエンジニアリング環境側ＰＣ１００に出力する。
本実施の形態では、アクセス要求受信処理部１１及び制御プログラム読出し処理部２４は、プログラム出力部に相当する。
【００８４】
なお、図７では、ＰＬＣ２００において本実施の形態に係る動作に直接関係のない要素の図示を省略している。
しかし、ＰＬＣ２００には、制御プログラム書込み処理部１２、認証ラダー自動生成処理部１３、認証ラダー挿入処理部１４、制御プログラム実行制御部１６、専用デバイス設定部１７等の実施の形態１及び実施の形態２で説明した要素が含まれているものとする。
【００８５】
次に、セキュリティ設定部６ａのセキュリティ設定が有効となっている場合に制御プログラムの読出し要求を出した場合に実行される認証について説明する。
【００８６】
入力部１からＰＬＣ２００に格納されている制御プログラムの読出し要求を制御プログラム読出し要求部２１が受けると、セキュリティ設定部６ａのセキュリティ設定を確認して、セキュリティ設定が有効である場合にＰＬＣ２００との間でチャレンジ＆レスポンス認証を実施するために認証処理部１０ａにチャレンジ値（乱数）の生成を要求する。
認証処理部１０ａは、乱数の生成を乱数生成処理部７に要求し、受け取った乱数を制御プログラム読出し要求部２１に返す。
制御プログラム読出し要求部２１は、アクセス要求送信処理部４に対してＰＬＣ２００との間でチャレンジ＆レスポンス認証を行うよう要求する。
アクセス要求送信処理部４は、アクセス要求受信処理部に対して認証要求とチャレンジ値（乱数）を送信する。
【００８７】
認証要求を受け取ったアクセス要求受信処理部１１は、認証処理部１０ｂに対して受け取ったチャレンジ値を渡してレスポンス値の生成を指示する。
認証処理部１０ａは、レスポンス値の生成要求を受けて認証ラダー生成用乱数記憶部８ｂに格納されている乱数とシリアルＩＤ記憶部９ｂに格納されているシリアルＩＤ、およびチャレンジ値として受け取った乱数を入力としてハッシュ関数にてレスポンス値（ハッシュ値）を生成し、生成したレスポンス値をアクセス要求受信処理部１１に返す。
アクセス要求受信処理部１１は、受け取ったレスポンス値をアクセス要求送信処理部４に返し、レスポンス値を受け取ったアクセス要求送信処理部４はレスポンス値を制御プログラム読出し要求部２１に返す。
【００８８】
制御プログラム読出し要求部２１は、認証処理部１０ａに対して受け取ったレスポンス値を渡し、認証処理部１０ａはＰＬＣ２００と同じアルゴリズムを用いて認証ラダー生成用乱数記憶部８ａに格納されている乱数とシリアルＩＤ記憶部９ａに格納されているシリアルＩＤと先ほど生成したチャレンジ値を入力としてハッシュ関数にてハッシュ値を生成し、レスポンス値と比較し、比較結果を制御プログラム読出し要求部に通知する。
制御プログラム読出し要求部２１は、比較結果が不一致だった場合は制御プログラムの読出し処理を中止し、ユーザに対してＰＬＣからの制御プログラムの読出しができないことを通知する。
比較結果が一致した場合は、制御プログラム読出し要求部２１はアクセス要求送信処理部４に対して制御プログラムの読出し要求を指示する。
【００８９】
アクセス要求受信処理部１１は、制御プログラムの読出し要求を受けると制御プログラム読出し処理部２４に制御プログラムの読出しを指示する。
制御プログラム読出し処理部２４は、実行用制御プログラム記憶部１５から制御プログラムを読出し、アクセス要求受信処理部１１に返す。
制御プログラム読出し要求部２１は、ＰＬＣ２００から読み出した制御プログラムを制御プログラム記憶部３に格納する。
この様にセキュリティ設定が有効になっている場合には、制御プログラムとＰＬＣとの関連付けの情報を用いて認証を行い、同じ関連付けの情報を持っていないプロジェクトとＰＬＣ間では制御プログラムの書込みや読出し処理はできないように制御する。
これは、ＰＬＣに格納されている制御プログラムを容易に外部へ読み出されて不正コピーを作成されないようにするためである。
なお、本実施の形態では制御プログラムの読出し時に認証処理を実施しているが、制御プログラムの書込み処理を実施する場合も同様に認証処理を行うこととする。
また、本実施の形態ではエンジニアリング環境側からのみ認証要求を行っているが、ＰＬＣ２００側でも実行用制御プログラム記憶部１５に対するアクセス要求があった場合にエンジニアリング環境側ＰＣ１００側へ認証を要求してもよい。
【００９０】
次にＰＬＣから読み出した制御プログラムに挿入されている認証ラダーをユーザに見せないようにするためにフィルタリングする処理について説明する。
【００９１】
ユーザが入力部１を用いて制御プログラム記憶部３に格納されている制御プログラムの表示／編集の指示を出した際、認証ラダーフィルタリング処理部２２は、認証処理部１０ａで生成した認証情報を取得し、取得した認証情報に基づいて認証ラダー挿入処理部１４にて制御プログラムに挿入されている認証ラダーの挿入位置を確認する（認証情報からステップ数を算出して認証ラダーの挿入位置を把握する）。
認証ラダーフィルタリング処理部２２は、制御プログラム記憶部３から制御プログラムを読出し、１度のみ実行するように設定した認証ラダー（図４（ａ）に例示した認証ラダー）と前記算出したステップ数に位置する認証ラダー（制御プログラム中の特定のステップ数に挿入した認証ラダー：図４（ｂ）に例示した認証ラダー）に対して非表示設定を行う。
制御プログラム作成部２は、認証ラダーフィルタリング処理部２２から受け取った制御プログラムを表示する際、非表示設定されている箇所を確認して、非表示設定されている箇所の認証ラダーを表示しない制御を行って表示部３０に出力し、表示部３０は認証ラダーを表示せずに制御プログラムのみを表示する。
【００９２】
また、認証ラダー挿入位置調整処理部２３は、制御プログラム作成部２にて編集された後の制御プログラムに対して、ユーザによる命令の追記や削除によって生じた認証ラダー挿入位置（ステップ数）を認証処理部１０ａで生成した認証情報に基づいて元の位置に戻してから、制御プログラムを制御プログラム記憶部３に格納する。
【００９３】
このように、本実施の形態によれば、ユーザに認証ラダーを見せないことで、正規ユーザが誤って認証ラダーを削除したり変更したりするのを防ぎ、悪意を持ったユーザに制御プログラムの不正利用防止方法を解析されるのを困難にして制御プログラムの不正利用を防ぐことができる。
【００９４】
以上、本実施の形態では、
エンジニアリング環境からＰＬＣの実行用制御プログラム記憶部に格納されている制御プログラムの読み出し要求を受けてアクセス要求送信処理部に制御プログラムの読出し指示を出して読み出した制御プログラムを制御プログラム記憶部に格納する制御プログラム読出し要求部と、
認証ラダーが挿入された制御プログラムをユーザが表示／編集する場合に認証ラダーをユーザに見せないようにするためにフィルタリングをかける認証ラダーフィルタリング処理部と、
制御プログラム作成部にてユーザが制御プログラムを編集した場合に認証情報に合わせて挿入していた認証ラダーを元の位置に戻す処理を行う認証ラダー挿入位置調整処理部と、
実行用制御プログラム記憶部から制御プログラムを読み出す処理を行う制御プログラム読出し処理部を設けたＦＡ機器制御プログラムの不正利用防止システムを説明した。
【００９５】
実施の形態４．
本実施の形態では、ＰＬＣから読み出した制御プログラムに対して、ユーザに専用デバイスの存在が明らかにならないようにするために認証ラダー挿入処理部１４にて挿入した認証ラダーの専用デバイスを既存のデバイスに置き換える機能を説明する。
【００９６】
図８は、本実施の形態に係る不正利用防止システムの機能構成を示す。
図８の不正利用防止システムでは、制御プログラムに挿入された認証ラダーの専用デバイスの番号をあらかじめ変換テーブルに設定した変換ルールに従って既存のデバイスの番号に置き換える。
【００９７】
エンジニアリング環境側ＰＣ１００の構成要素のそれぞれは、実施の形態１〜３で説明したものであるため、説明を省略する。
【００９８】
ＰＬＣ２００では、図７の構成に認証ラダー変換テーブル記憶部２５及び認証ラダー変換処理部２６が追加されている。
なお、図８でも、ＰＬＣ２００において本実施の形態に係る動作に直接関係のない要素の図示を省略している。
しかし、ＰＬＣ２００には、制御プログラム書込み処理部１２、認証ラダー自動生成処理部１３、認証ラダー挿入処理部１４、制御プログラム実行制御部１６、専用デバイス設定部１７等の実施の形態１及び実施の形態２で説明した要素が含まれているものとする。
【００９９】
認証ラダー変換テーブル記憶部２５は、エンジニアリング環境側ＰＣ１００から制御プログラムの読み出し要求があった場合に制御プログラム中に挿入されている認証ラダーの専用デバイス番号を既存のデバイスの番号に変換する際に利用する変換テーブルを格納している。
【０１００】
認証ラダー変換処理部２６は、認証ラダー変換テーブル記憶部２５に格納されている変換テーブルを用いて専用デバイス番号を既存のデバイス番号に置き換える処理を行う。
前述のように、専用デバイスのデバイス番号は、対象デバイスのデバイス番号と番号体系が異なる（実施の形態１の例では、専用デバイス番号は「Ａ」で始まり、対象デバイス番号は「Ｘ」、「Ｙ」、「Ｅ」で始まる）。
このため、認証ラダー変換処理部２６は、実行用制御プログラム記憶部１５に格納されている制御プログラム（合成プログラム）の出力指示がエンジニアリング環境側ＰＣ１００からあった場合に、認証ラダーの専用デバイス番号を対象デバイス番号と同じ番号体系に変更する（専用デバイス番号を例えば「Ｘ」で始まるようにする）。
認証ラダー変換処理部２６は、デバイス番号変更部の例である。
また、本実施の形態では、アクセス要求受信処理部１１（プログラム出力部）は、認証ラダー変換処理部２６により変更された後の専用デバイス番号が含まれる制御プログラム（合成プログラム）をエンジニアリング環境側ＰＣ１００に出力する。
【０１０１】
次に、セキュリティ設定が有効となっている場合に制御プログラムの読み出しを実施した際に認証ラダーの専用デバイス番号を既存のデバイス番号に置き換える処理について説明する。
【０１０２】
制御プログラム読出し処理部２４がエンジニアリング環境側ＰＣ１００から制御プログラムの読み出し要求を受けると、制御プログラム読出し処理部２４は、セキュリティ設定部６ｂのセキュリティ設定を確認し、セキュリティ設定が有効である場合に実行用制御プログラム記憶部１５から読み出した制御プログラムに挿入されている認証ラダーの専用デバイスを既存のデバイスへの置き換えを認証ラダー変換処理部２６に依頼する。
【０１０３】
専用デバイスの既存デバイスへの変換要求を受けた認証ラダー変換処理部２６は、認証ラダー変換テーブル記憶部２５に設定されている変換テーブルに基づいて認証ラダーにて使用している専用デバイスを既存のデバイス（ＸデバイスやＹデバイス）への置き換えを実施する。
例えば、専用デバイスＡ２３４は、既存デバイスであるＸ２３４に変換する。
既存デバイスに変換する場合に必ずＸデバイスに変換する必要は無く、既存デバイスであれば良い。
また、デバイス番号についても専用デバイスと同じにする必要も無く置き換えた既存デバイスにて使用可能なデバイス番号であれば良い。
【０１０４】
なお、専用デバイスを既存デバイスに置き換えた制御プログラムを読み取ったエンジニアリング環境側では、実施の形態３にて記載した通り、認証ラダーに対してフィルタリングを掛けて認証ラダーをユーザには見せないため、変換テーブルは必要ない。
【０１０５】
このように、本実施の形態によれば、エンジニアリング環境側に読み出した制御プログラムに挿入した認証ラダーの専用デバイスを既存のデバイスに置き換えることで、例えば悪意を持ったユーザが読み出した制御プログラムをバイナリエディタやコードを解析するためのツールにて開いた際に、従来の制御プログラムでは使用していないデバイスが使われていることを容易にわからなくすることができ、認証処理の仕組みを解析されにくくすることができる。
つまり、実施の形態３によれば、認証ラダーを非表示にするため、専用デバイス番号は表示されないが、上記のようなツールが用いられた場合には、非表示に設定されていても専用デバイス番号の存在が明らかになる場合がある。本実施の形態では、このようなツールが用いられた場合でも、専用デバイス番号が通常のデバイス番号と同じ番号体系になっているので、専用デバイス番号が識別されることを回避することができる。
【０１０６】
以上、本実施の形態では、
エンジニアリング環境からの制御プログラムの読み出しが要求された際に制御プログラム読出し処理部からの指示を受けて認証ラダーの専用デバイスを既存のデバイスに置き換える認証ラダー変換処理部と、
認証ラダー変換処理部にて認証ラダーの専用デバイスを既存のデバイスに置き換える際に利用する変換テーブルを格納する認証ラダー変換テーブル記憶部を設けたＦＡ機器制御プログラムの不正利用防止システムを説明した。
【０１０７】
実施の形態５．
本実施の形態では、ＰＬＣから制御プログラムの読み出しが行われる度にＰＬＣに設けたカウンタの値を用いて認証情報を再生成し、認証ラダーも再生成して制御プログラム中に挿入済みの認証ラダーとの入れ替えを実施してからエンジニアリング環境側に送信する機能を説明する。
【０１０８】
図９は、本実施の形態に係る不正利用防止システムの機能構成を示す。
図９の不正利用防止システムでは、ＰＬＣ２００から制御プログラムの読み出しが行われる度にＰＬＣ２００に設けたカウンタの値を用いて再生成した認証情報に基づき認証ラダーの再生成が行われ、制御プログラムに挿入されている認証ラダーとの入れ替えが行われる。
【０１０９】
図９では、エンジニアリング環境側ＰＣ１００において、操作履歴記憶部２７が追加されている。
操作履歴記憶部２７は、エンジニアリング環境側ＰＣ１００上でユーザが実行した機能名や実行したときのタイムスタンプおよびエラー情報などの操作内容を格納する。
操作履歴記憶部２７は入力回数計数部の例である。
なお、操作履歴記憶部２７以外のエンジニアリング環境側ＰＣ１００の構成要素は、実施の形態１〜３で説明したものであるため、説明を省略する。
なお、図面上のスペースの問題により表示部３０は図示が省略されているが、図９のエンジニアリング環境側ＰＣ１００には表示部３０が存在するものとする。
【０１１０】
ＰＬＣ２００では、認証ラダー削除処理部２８及びカウンタ処理部２９が追加されている。
【０１１１】
認証ラダー削除処理部２８は、制御プログラム中に挿入されている認証ラダーを削除する。
より具体的には、アクセス要求受信処理部１１（プログラム出力部）は、外部装置たるエンジニアリング環境側ＰＣ１００より認証ラダーが挿入されている制御プログラム（合成プログラム）の出力指示があった場合に、制御プログラム（合成プログラム）をエンジニアリング環境側ＰＣ１００に出力するが、エンジニアリング環境側ＰＣ１００への出力の度に、制御プログラム（合成プログラム）から認証ラダーを削除する。
認証ラダー削除処理部２８は、削除処理部の例である。
【０１１２】
カウンタ処理部２９は、エンジニアリング環境からの制御プログラムの読み出し要求を受け付ける度にＰＬＣ２００内に設けたカウンタの値をカウントアップしカウントアップした値を記憶する。
つまり、アクセス要求受信処理部１１により制御プログラム（合成プログラム）がエンジニアリング環境側ＰＣ１００に出力される度に、出力回数を計数する。
カウンタ処理部２９は、出力回数計数部である。
【０１１３】
そして、本実施の形態では、認証ラダー自動生成処理部１３（認証プログラム生成部）は、アクセス要求受信処理部１１により制御プログラム（合成プログラム）がエンジニアリング環境側ＰＣ１００に出力される度に、シリアルＩＤ記憶部９ｂのシリアルＩＤとカウンタ処理部２９の計数値と認証ラダー生成用乱数記憶部８ｂの乱数とに基づいて、新たに専用デバイスのデバイス番号を選択し、新たな専用デバイス番号が含まれる新たな認証ラダーを生成し、生成した新たな認証ラダーごとに認証ラダー削除処理部２８による削除処理後の制御プログラム内の新たな挿入位置を決定する。
そして、認証ラダー挿入処理部１４（プログラム合成部）は、認証ラダー自動生成処理部１３により決定された新たな挿入位置にて新たな認証ラダーのそれぞれを制御プログラムに挿入して新たな合成プログラムとする。
【０１１４】
なお、図９では、ＰＬＣ２００において本実施の形態に係る動作に直接関係のない要素の図示を省略している。
しかし、ＰＬＣ２００には、制御プログラム書込み処理部１２、制御プログラム実行制御部１６、専用デバイス設定部１７等の実施の形態１〜３で説明した要素が含まれているものとする。
【０１１５】
次に、本実施の形態に係る動作を説明する。
まず、ＰＬＣ２００側の動作を説明する。
【０１１６】
実施の形態１では、制御プログラムのＰＬＣへの初回書込みの際にエンジニアリング環境側ＰＣ１００で生成した乱数とＰＬＣ２００のシリアルＩＤの２つ情報を入力としてハッシュ関数にて認証情報を生成していた。
本実施の形態では、前記２つの情報以外にカウンタ処理部２９のカウンタの値も用いて認証情報を生成し、生成した認証情報から認証ラダーの生成を行う。
カウンタ処理部２９のカウンタは、エンジニアリング環境側ＰＣ１００から制御プログラムの読出し要求を受ける度にカウントアップする。
このカウンタの値は制御プログラムの初回書込み時に初期値０が設定され、初回書込み時に認証情報を生成する際のカウンタの値は０を用いる。
この後に、エンジニアリング環境側ＰＣ１００からの制御プログラムの読出し要求を受けると、認証ラダー自動生成処理部１３がカウンタ処理部２９にカウントアップを指示し、当該指示によりカウンタ処理部２９はカウンタの値を１つカウントアップする。
【０１１７】
エンジニアリング環境側ＰＣ１００からの制御プログラムの読み出し要求を受けた制御プログラム読出し処理部２４は認証ラダー自動生成処理部１３に対して認証ラダーの再生成を指示する。
認証ラダー自動生成処理部１３は、認証ラダーの再生成要求を受けて認証処理部１０ｂに認証情報の生成を指示する。
認証処理部１０ｂでは認証ラダー生成用乱数記憶部８ｂに格納されている乱数とシリアルＩＤ記憶部９ｂに格納されているシリアルＩＤおよびカウンタ処理部２９に格納されているカウンタ値に対してハッシュ演算を行って認証情報を生成し、認証ラダー自動生成処理部１３に返す。
認証ラダー自動生成処理部１３は受け取った認証情報と制御プログラムを認証ラダー削除処理部２８に渡す。
認証ラダー削除処理部２８は受け取った認証情報に基づいて制御プログラム内に現在挿入されている認証ラダーの挿入位置を特定して認証ラダーを削除し、認証ラダーを削除した制御プログラムを認証ラダー自動生成処理部１３に返す。
認証ラダー自動生成処理部１３は、カウンタ処理部２９に対してカウンタアップの指示を出し、カウンタ処理部２９はカウンタの値をカウントアップして保持する。
認証ラダー自動生成処理部１３は再度認証処理部１０ｂに対して認証情報の生成を要求し、認証処理部１０ｂはカウントアップしたカウンタの値を用いて認証情報の再生成を行い、再生成した認証情報を認証ラダー自動生成処理部１３に返す。
認証ラダー自動生成処理部１３は再生成した認証情報から認証ラダーを自動生成し（各認証ラダーの挿入位置を特定し）、生成した認証ラダーと、認証ラダー削除処理部２８にて認証ラダーを削除した制御プログラムを認証ラダー挿入処理部１４に渡す。
そして、認証ラダー自動生成処理部１３は、再生成した認証ラダーの制御プログラムへの再挿入を指示し、認証ラダー挿入処理部１４にて認証ラダーを再挿入する。
認証ラダーが再挿入された制御プログラムを制御プログラム読出し処理部２４は、アクセス要求受信処理部１１を経由してエンジニアリング環境へ送信する。
【０１１８】
次に、エンジニアリング環境側ＰＣ１００側での動作について説明する。
【０１１９】
制御プログラムを受け取った制御プログラム読出し要求部２１は、制御プログラム記憶部３に格納する。
ユーザが入力部１を用いて制御プログラム記憶部３に格納されている制御プログラムの表示／編集の指示を出した際、認証ラダーフィルタリング処理部２２は認証処理部１０ａに認証情報の生成を依頼する。
認証情報の生成要求を受けて認証処理部１０ａは、操作履歴記憶部２７に格納されている操作履歴からＰＬＣ２００からの制御プログラムの読み出し処理を実行した回数（読出しに成功した場合の回数のみ）を算出する。
次に、認証処理部１０ａは、算出した値（この値はＰＬＣのカウンタ処理部２９にて保持されているカウンタの値と同一）と認証ラダー生成用乱数記憶部８ａに格納されている乱数およびシリアルＩＤ記憶部９ａに格納されているシリアルＩＤから認証情報を算出し、認証ラダーフィルタリング処理部２２に返す。
認証ラダーフィルタリング処理部２２では、取得した認証情報に基づいて認証ラダー挿入処理部１４にて制御プログラムに挿入されている認証ラダーの挿入位置を確認する（認証情報からステップ数を算出して認証ラダーの挿入位置を把握する）。
認証ラダーフィルタリング処理部２２は制御プログラム記憶部３から制御プログラムを読出し、１度のみ実行するように設定した認証ラダー（図４（ａ）に例示した認証ラダー）と前記算出したステップ数に位置する認証ラダー（制御プログラム中の特定のステップ数に挿入した認証ラダー：図４（ｂ）に例示した認証ラダー）に対して非表示設定を行う。
制御プログラム作成部２は、認証ラダーフィルタリング処理部２２から受け取った制御プログラムを表示する際、非表示設定されている箇所を確認して、非表示設定されている箇所の認証ラダーを表示しない制御を行って表示部３０に出力し、表示部３０は認証ラダーを表示せずに制御プログラムのみを表示する。
また、認証ラダー挿入位置調整処理部２３（位置調整部）は、制御プログラム作成部２にて編集された後の制御プログラムに対して、ユーザによる命令の追記や削除によって生じた認証ラダー挿入位置（ステップ数）を認証処理部１０ａで生成した認証情報に基づいて元の位置に戻してから、制御プログラムを制御プログラム記憶部３に格納する。
【０１２０】
このように、本実施の形態では、実行用制御プログラム記憶部１５に格納されている制御プログラムの読み出し要求を受ける度にカウンタをカウントアップし、そのカウンタの値を用いて認証情報とその認証情報に基づいて認証ラダーを再生成して、制御プログラム中に挿入済みの認証ラダーと入れ替える。
これらの処理により、エンジニアリング環境側ＰＣ１００側に読み取った制御プログラムは毎回異なるため、悪意を持ったユーザによる認証処理の解析を困難にすることができる。
更に、悪意を持ったユーザが制御プログラムを仮に別のＰＬＣにコピーできたとしてもＰＬＣごとに固有なカウンタの値を用いて認証情報を生成しているのでより制御プログラムの不正利用を防ぐことができる。
なお、通常、制御プログラムをＰＬＣに書込んで実際の動作を確認しており、その結果に応じて制御プログラムなどをエンジニアリング環境との間で書込み／読出しを繰り返しながらプログラムやパラメータ設定を調整する作業を実施しているため、他のＰＬＣとカウンタの値が同一になる可能性は低いと考える。
【０１２１】
以上、本実施の形態では、
ユーザがエンジニアリング環境上で実行した機能の操作履歴を格納する操作履歴記憶部と、
制御プログラムに挿入された認証ラダーを再挿入するために一旦制御プログラムから削除する認証ラダー削除処理部と、
エンジニアリング環境からの制御プログラムの読み出し要求を受ける度にカウンタの値をカウントアップしカウントアップした値を格納するカウンタ処理部を設けたＦＡ機器制御プログラムの不正利用防止システムを説明した。
【符号の説明】
【０１２２】
１  入力部、２  制御プログラム作成部、３  制御プログラム記憶部、４  アクセス要求送信処理部、５  制御プログラム書込み要求部、６  セキュリティ設定部、７  乱数生成処理部、８  認証ラダー生成用乱数記憶部、９  シリアルＩＤ記憶部、１０  認証処理部、１１  アクセス要求受信処理部、１２  制御プログラム書込み処理部、１３  認証ラダー自動生成処理部、１４  認証ラダー挿入処理部、１５  実行用制御プログラム記憶部、１６  制御プログラム実行制御部、１７  専用デバイス設定部、１８  実行制約時間記憶部、１９  認証ラダー性能確認部、２０  認証ラダー挿入判断部、２１  制御プログラム読出し要求部、２２  認証ラダーフィルタリング処理部、２３  認証ラダー挿入位置調整処理部、２４  制御プログラム読出し処理部、２５  認証ラダー変換テーブル記憶部、２６  認証ラダー変換処理部、２７  操作履歴記憶部、２８  認証ラダー削除処理部、２９  カウンタ処理部、３０  表示部、１００  エンジニアリング環境側ＰＣ、２００  ＰＬＣ。
【図１】
0005404463.tif 000002
【図２】
0005404463.tif 000003
【図３】
0005404463.tif 000004
【図４】
0005404463.tif 000005
【図５】
0005404463.tif 000006
【図６】
0005404463.tif 000007
【図７】
0005404463.tif 000008
【図８】
0005404463.tif 000009
【図９】
0005404463.tif 000010