(57)【要約】【課題】セーフティプログラムに従ってセーフティ制御を実行する処理実行部に対するリモートメンテナンスを確実に実行できる構成を提供する。【解決手段】セーフティシステムは、セーフティプログラムに従ってセーフティ制御を実行する処理実行部と、処理実行部と直接的に接続されるとともに、処理実行部が保持するセーフティプログラムに対する外部アクセスを仲介する通信部と、通信部とネットワーク接続するとともに、ユーザ操作に従って、セーフティプログラムに対する追加または変更を含むメンテナンスを実行するサポート装置とを含む。サポート装置および通信部は、予め取り交わされた情報で両者を特定し、メンテナンスに必要なデータを遣り取りする。【選択図】図２
2020120367.tif 000002
【特許請求の範囲】
【請求項１】
セーフティプログラムに従ってセーフティ制御を実行する処理実行部と、
前記処理実行部と直接的に接続されるとともに、前記処理実行部が保持する前記セーフティプログラムに対する外部アクセスを仲介する通信部と、
前記通信部とネットワーク接続するとともに、ユーザ操作に従って、前記セーフティプログラムに対する追加または変更を含むメンテナンスを実行するサポート装置とを備え、
前記サポート装置および前記通信部は、予め取り交わされた情報で両者を特定し、メンテナンスに必要なデータを遣り取りする、セーフティシステム。
【請求項２】
前記通信部は、前記予め取り交わされた情報の少なくとも一部として、鍵を保持しており、
前記サポート装置は、前記通信部が当該鍵で復号可能なように、前記メンテナンスに必要なデータを暗号化して、前記通信部へ転送する、請求項１に記載のセーフティシステム。
【請求項３】
前記通信部は、前記鍵として第１の秘密鍵を保持しており、
前記サポート装置は、前記第１の秘密鍵と対にある第１の公開鍵、および、前記第１の公開鍵に対して発行された第１の電子証明書の少なくとも一方を保持している、請求項２に記載のセーフティシステム。
【請求項４】
前記通信部は、前記サポート装置から転送されたデータを前記第１の秘密鍵で復号できた場合に、当該復号したデータを前記処理実行部へ転送する、請求項３に記載のセーフティシステム。
【請求項５】
前記通信部は、外部からの要求に応答して、前記第１の公開鍵に対して予め有効期限を定めた上で、当該第１の公開鍵を前記サポート装置へ与える、請求項３または４に記載のセーフティシステム。
【請求項６】
前記サポート装置は、前記第１の秘密鍵と対にある第１の公開鍵に対して発行された第１の電子証明書を保持しており、前記第１の電子証明書は、前記処理実行部を識別するための識別情報を含んでおり、
前記サポート装置は、前記メンテナンスに必要なデータの送信前に、前記通信部を介して取得した前記処理実行部の識別情報と、前記第１の電子証明書に含まれる識別情報とが一致しているか否かを判断する、請求項３〜５のいずれか１項に記載のセーフティシステム。
【請求項７】
前記サポート装置は、前記通信部を介して取得した前記処理実行部の識別情報と、前記第１の電子証明書に含まれる識別情報とが一致していることを条件に、前記メンテナンスに必要なデータを前記通信部へ送信する、請求項６に記載のセーフティシステム。
【請求項８】
前記サポート装置は、
前記メンテナンスに必要なデータを送信する必要がある場合に、ワンタイム鍵である第３の鍵を生成し、
前記第３の鍵で前記メンテナンスに必要なデータを暗号化するとともに、前記通信部が前記鍵で復号可能なように前記第３の鍵を暗号化して、前記通信部へ送信する、請求項３〜７のいずれか１項に記載のセーフティシステム。
【請求項９】
前記サポート装置は、前記メンテナンスに必要なデータとして前記セーフティプログラムを送信するように構成されており、
前記サポート装置は、第２の秘密鍵を保持しており、
前記通信部は、前記第２の秘密鍵と対にある第２の公開鍵、および、前記第２の公開鍵に対して発行された第２の電子証明書の少なくとも一方を保持しており、
前記サポート装置は、前記セーフティプログラムから算出される第１のハッシュ値を前記第２の秘密鍵で暗号化して前記通信部へ送信し、
前記通信部は、前記サポート装置から受信したセーフティプログラムから算出した第２のハッシュ値と、前記サポート装置から受信した暗号化された前記第１のハッシュ値を前記第２の公開鍵で復号して得られた結果とが一致しているか否かを判断する、請求項１〜８のいずれか１項に記載のセーフティシステム。
【請求項１０】
前記通信部は、前記サポート装置から受信したセーフティプログラムから算出される前記第２のハッシュ値を暗号化して、前記サポート装置へ送信し、
前記サポート装置は、前記通信部から受信した暗号化された前記第２のハッシュ値を復号して得られる結果と、前記セーフティプログラムから算出される第１のハッシュ値とが一致しているか否かを判断する、請求項９に記載のセーフティシステム。
【請求項１１】
前記処理実行部および前記通信部は、互いに独立したユニットとして構成される、請求項１〜１０のいずれか１項に記載のセーフティシステム。
【請求項１２】
セーフティプログラムに従ってセーフティ制御を実行する処理実行部を含むコントローラシステムにおけるメンテナンス方法であって、
サポート装置と通信部とをネットワーク接続するステップと、
前記サポート装置が、ユーザ操作に従って、前記セーフティプログラムに対する追加または変更を含むメンテナンスを実行するステップと、
前記サポート装置および前記通信部は、予め取り交わされた情報で両者を特定し、メンテナンスに必要なデータを遣り取りするステップとを備える、メンテナンス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、セーフティシステムに対するリモートメンテナンス機能に関する。
【背景技術】
【０００２】
様々な製造現場で使用される設備や機械を安全に使用するためには、ＩＥＣ  ６１５０８などの国際規格に従って機能安全を実現しなければならない。
【０００３】
このような機能安全は、セーフティコントローラにてセーフティプログラムを実行することで実現されることもある。例えば、特開２０１０−０５５６５２号広報（特許文献１）は、安全コントローラのプログラム開発支援装置を開示する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−０５５６５２号広報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
通常、セーフティプログラムに従ってセーフティ制御を実行するコントローラなどに対する各種メンテンサンスを行うための環境が提供される。このようなセーフティ制御に対するメンテナンスを行うための環境は、ＩＥＣ  ６２０６１などの国際規格に従って、構成されなければならない。
【０００６】
この結果、セーフティ制御に関するメンテナンスは、コントローラが配置された現場で行わざるを得ず、メンテナンス効率や生産性を向上させる制約となっている。
【０００７】
本発明の一つの目的は、セーフティプログラムに従ってセーフティ制御を実行する処理実行部に対するリモートメンテナンスを確実に実行できる構成を提供することである。
【課題を解決するための手段】
【０００８】
本発明のある局面に従うセーフティシステムは、セーフティプログラムに従ってセーフティ制御を実行する処理実行部と、処理実行部と直接的に接続されるとともに、処理実行部が保持するセーフティプログラムに対する外部アクセスを仲介する通信部と、通信部とネットワーク接続するとともに、ユーザ操作に従って、セーフティプログラムに対する追加または変更を含むメンテナンスを実行するサポート装置とを含む。サポート装置および通信部は、予め取り交わされた情報で両者を特定し、メンテナンスに必要なデータを遣り取りする。
【０００９】
通信部は、予め取り交わされた情報の少なくとも一部として、鍵を保持していてもよい。サポート装置は、通信部が当該鍵で復号可能なように、メンテナンスに必要なデータを暗号化して、通信部へ転送するようにしてもよい。
【００１０】
通信部は、鍵として第１の秘密鍵を保持してもよい。サポート装置は、第１の秘密鍵と対にある第１の公開鍵、および、第１の公開鍵に対して発行された第１の電子証明書の少なくとも一方を保持していてもよい。
【００１１】
通信部は、サポート装置から転送されたデータを第１の秘密鍵で復号できた場合に、当該復号したデータを処理実行部へ転送するようにしてもよい。
【００１２】
通信部は、外部からの要求に応答して、第１の公開鍵に対して予め有効期限を定めた上で、当該第１の公開鍵をサポート装置へ与えるようにしてもよい。
【００１３】
サポート装置は、第１の秘密鍵と対にある第１の公開鍵に対して発行された第１の電子証明書を保持しており、第１の電子証明書は、処理実行部を識別するための識別情報を含んでいてもよい。サポート装置は、メンテナンスに必要なデータの送信前に、通信部を介して取得した処理実行部の識別情報と、第１の電子証明書に含まれる識別情報とが一致しているか否かを判断するようにしてもよい。
【００１４】
サポート装置は、通信部を介して取得した処理実行部の識別情報と、第１の電子証明書に含まれる識別情報とが一致していることを条件に、メンテナンスに必要なデータを通信部へ送信するようにしてもよい。
【００１５】
サポート装置は、メンテナンスに必要なデータを送信する必要がある場合に、ワンタイム鍵である第３の鍵を生成し、第３の鍵でメンテナンスに必要なデータを暗号化するとともに、通信部が鍵で復号可能なように第３の鍵を暗号化して、通信部へ送信するようにしてもよい。
【００１６】
サポート装置は、メンテナンスに必要なデータとしてセーフティプログラムを送信するように構成されてもよい。サポート装置は、第２の秘密鍵を保持していてもよい。通信部は、第２の秘密鍵と対にある第２の公開鍵、および、第２の公開鍵に対して発行された第２の電子証明書の少なくとも一方を保持していてもよい。サポート装置は、セーフティプログラムから算出される第１のハッシュ値を第２の秘密鍵で暗号化して通信部へ送信してもよい。通信部は、サポート装置から受信したセーフティプログラムから算出した第２のハッシュ値と、サポート装置から受信した暗号化された第１のハッシュ値を第２の公開鍵で復号して得られた結果とが一致しているか否かを判断するようにしてもよい。
【００１７】
通信部は、サポート装置から受信したセーフティプログラムから算出される第２のハッシュ値を暗号化して、サポート装置へ送信するようにしてもよい。サポート装置は、通信部から受信した暗号化された第２のハッシュ値を復号して得られる結果と、セーフティプログラムから算出される第１のハッシュ値とが一致しているか否かを判断するようにしてもよい。
【００１８】
処理実行部および通信部は、互いに独立したユニットとして構成されてもよい。
本発明の別の局面によれば、セーフティプログラムに従ってセーフティ制御を実行する処理実行部を含むコントローラシステムにおけるメンテナンス方法が提供される。メンテナンス方法は、サポート装置と通信部とをネットワーク接続するステップと、サポート装置が、ユーザ操作に従って、セーフティプログラムに対する追加または変更を含むメンテナンスを実行するステップと、サポート装置および通信部は、予め取り交わされた情報で両者を特定し、メンテナンスに必要なデータを遣り取りするステップとを含む。
【発明の効果】
【００１９】
本発明によれば、セーフティプログラムに従ってセーフティ制御を実行する処理実行部に対するリモートメンテナンスを確実に実行できる構成を提供できる。
【図面の簡単な説明】
【００２０】
【図１】本実施の形態に従うセーフティシステムの構成例を示す外観図である。
【図２】本実施の形態に従うセーフティシステムにおけるリモートメンテナンスの概要を説明するための模式図である。
【図３】本実施の形態に従うセーフティシステムを構成する制御ユニットのハードウェア構成例を示す模式図である。
【図４】本実施の形態に従うセーフティシステムを構成する中継ユニットのハードウェア構成例を示す模式図である。
【図５】本実施の形態に従うセーフティシステムを構成するセーフティユニットのハードウェア構成例を示す模式図である。
【図６】本実施の形態に従うセーフティシステムに対するメンテナンスの要件を説明するための図である。
【図７】本実施の形態に従うセーフティシステムに接続されるサポート装置のハードウェア構成例を示す模式図である。
【図８】本実施の形態に従うセーフティシステムとサポート装置とを直接接続して行うメンテナンスを説明するための図である。
【図９】セーフティシステムに対するサポート装置からのリモートメンテナンスにおける課題を説明するための図である。
【図１０】本実施の形態に従うセーフティシステムに対するサポート装置からのリモートメンテナンスの一形態を説明するための図である。
【図１１】図１０に示すリモートメンテナンスにおける処理手順を示すシーケンス図である。
【図１２】本実施の形態に従うセーフティシステムに対するサポート装置からのリモートメンテナンスの別の一形態を説明するための図である。
【図１３】図１２に示すリモートメンテナンスにおける処理手順を示すシーケンス図である。
【図１４】本実施の形態に従うセーフティシステムにおいてサポート装置から見た転送先の正当性の保証処理を説明するための図である。
【図１５】本実施の形態に従うセーフティシステムにおいて転送先から見たサポート装置の正当性の保証処理を説明するための図である。
【図１６】本実施の形態に従うセーフティシステムにおいて中継ユニットとセーフティユニットとの組み合わせを保証するための処理を説明するための図である。
【図１７】本実施の形態に従うセーフティシステムにおいて中継ユニットとセーフティユニットとの組み合わせを保証するための処理手順を示すシーケンス図である。
【図１８】セーフティシステムに対するサポート装置からのリモートメンテナンスにおける別の課題を説明するための図である。
【図１９】本実施の形態に従うセーフティシステムに対するサポート装置からのリモートメンテナンスのさらに別の一形態を説明するための図である。
【図２０】図１９に示すリモートメンテナンスにおける処理手順を示すシーケンス図である。
【図２１】本実施の形態に従うセーフティシステムにおける公開鍵の有効期限の設定例を示す図である。
【図２２】本実施の形態に従うセーフティシステムに対するサポート装置からのリモートメンテナンスのさらに別の一形態を説明するための図である。
【図２３】図２２に示すサポート装置からのリモートメンテナンスの別形態を説明するための図である。
【図２４】図２２に示すサポート装置からのリモートメンテナンスのさらに別形態を説明するための図である。
【図２５】本実施の形態に従うセーフティシステムの構成の変形例を示す模式図である。
【発明を実施するための形態】
【００２１】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【００２２】
＜Ａ．適用例＞
まず、本実施の形態に従うセーフティシステム１の全体構成について説明する。
【００２３】
図１は、本実施の形態に従うセーフティシステム１の構成例を示す外観図である。図１を参照して、セーフティシステム１は、制御ユニット１００と、中継ユニット２００と、セーフティユニット３００と、１または複数の機能ユニット４００と、電源ユニット４５０とを含む。
【００２４】
制御ユニット１００と中継ユニット２００との間は、任意のデータ伝送路（例えば、ＰＣＩ  Ｅｘｐｒｅｓｓあるいはイーサネット（登録商標）など）を介して接続されている。制御ユニット１００とセーフティユニット３００および１または複数の機能ユニット４００との間は、内部バス１０（図２参照）を介して接続されている。
【００２５】
制御ユニット１００は、セーフティシステム１において中心的な処理を実行する。制御ユニット１００は、任意に設計された要求仕様に従って、制御対象を制御するための制御演算を実行する。後述のセーフティユニット３００で実行される制御演算との対比で、制御ユニット１００で実行される制御演算を「標準制御」とも称す。図１に示す構成例において、制御ユニット１００は、１または複数の通信ポートを有している。制御ユニット１００は、標準制御プログラムに従って標準制御を実行する処理実行部に相当する。
【００２６】
中継ユニット２００は、制御ユニット１００に接続され、他の装置との間の通信機能を担当する。図１に示す構成例において、中継ユニット２００は、１または複数の通信ポートを有している。中継ユニット２００が提供する通信機能の詳細については、後述する。
【００２７】
セーフティユニット３００は、制御ユニット１００とは独立して、制御対象に関するセーフティ機能を実現するための制御演算を実行する。セーフティユニット３００で実行される制御演算を「セーフティ制御」とも称す。通常、「セーフティ制御」は、ＩＥＣ  ６１５０８などに規定されたセーフティ機能を実現するための要件を満たすように設計される。「セーフティ制御」は、設備や機械などによって人の安全が脅かされることを防止するための処理を総称する。セーフティユニット３００は、セーフティプログラムＳＰＧに従ってセーフティ制御を実行する処理実行部に相当する。
【００２８】
機能ユニット４００は、セーフティシステム１による様々な制御対象に対する制御を実現するための各種機能を提供する。機能ユニット４００は、典型的には、Ｉ／Ｏユニット、セーフティＩ／Ｏユニット、通信ユニット、モーションコントローラユニット、温度調整ユニット、パルスカウンタユニットなどを包含し得る。Ｉ／Ｏユニットとしては、例えば、デジタル入力（ＤＩ）ユニット、デジタル出力（ＤＯ）ユニット、アナログ出力（ＡＩ）ユニット、アナログ出力（ＡＯ）ユニット、パルスキャッチ入力ユニット、および、複数の種類を混合させた複合ユニットなどが挙げられる。セーフティＩ／Ｏユニットは、セーフティ制御に係るＩ／Ｏ処理を担当する。
【００２９】
電源ユニット４５０は、セーフティシステム１を構成する各ユニットに対して、所定電圧の電源を供給する。
【００３０】
本実施の形態に従うセーフティシステム１においては、セーフティ制御を実行するセーフティユニット３００に対するリモートメンテナンスが可能になっている。
【００３１】
図２は、本実施の形態に従うセーフティシステム１におけるリモートメンテナンスの概要を説明するための模式図である。図２を参照して、セーフティシステム１は、中継ユニット２００を介してネットワークに接続されている。ネットワークには、サポート装置５００もアクセス可能になっている。
【００３２】
中継ユニット２００は、処理実行部に相当するセーフティユニット３００と直接的に接続されるとともに、セーフティユニット３００が保持するセーフティプログラムＳＰＧに対する外部アクセスを仲介する通信部に相当する。
【００３３】
本明細書において、「直接的に接続される」とは、接続されるユニット間に接続先を誤認させるような要素が存在しないことを意味する。すなわち、各ユニットが相手方のユニットを一意に特定できる状態を意味する。本実施の形態に従うセーフティシステム１においては、「直接的に接続される」構成として、内部バス１０を例示する。但し、内部バス１０に限らず、任意の媒体あるいは方式で接続するようにしてもよい。
【００３４】
サポート装置５００は、通信部に相当する中継ユニット２００とネットワーク接続するとともに、ユーザ操作に従って、セーフティプログラムＳＰＧに対する追加または変更を含むメンテナンスを実行する。より具体的には、サポート装置５００で実行されるアプリケーションによって、セーフティユニット３００で実行されるセーフティプログラムＳＰＧの作成・編集処理が可能である。
【００３５】
本明細書において、「メンテナンス」は、セーフティ制御を担当するセーフティユニット３００の状態、あるいは、セーフティユニット３００で実行されるセーフティプログラムＳＰＧを、監視あるいは変更する操作を包括する概念である。「メンテナンス」は、基本的には、オペレータ（ユーザ）がサポート装置５００を操作することによって実行される。本明細書において、「リモートメンテナンス」との用語は、サポート装置５００を操作するオペレータが、メンテナンスの対象となるセーフティシステム１（セーフティユニット３００）を直接的に確認（目視）することができない場所にいる状態で、メンテナンスを実行することを意味する。
【００３６】
本実施の形態においては、メンテナンスの対象となるセーフティシステム１を一意に特定可能になっている。すなわち、サポート装置５００およびセーフティシステム１の中継ユニット２００は、予め取り交わされた情報で両者を特定し、メンテナンスに必要なデータを遣り取りする。
【００３７】
本明細書において、「予め取り交わされた」とは、いずれか一方が保持している情報の一部または当該情報から派生した別の情報が、直接的または間接的に他方へ与えられている状態を意味する。「予め取り交わされた情報」とは、このような状態において、両者がそれぞれ保持する情報を総称する。「予め取り交わされた情報」は、サポート装置５００からある中継ユニット２００を一意に特定するに用いられることになる。すなわち、「予め取り交わされた情報」は、設定間違い、なりすまし、偽装などの、本来の接続先とは異なる接続先とデータを遣り取りするような事態を防止するために用いられる。
【００３８】
以下の説明においては、「予め取り交わされた情報」の典型例として、電子的な「鍵」（典型的には、公開鍵基盤に従う秘密鍵／公開鍵、あるいは、共通鍵）を用いる構成について例示するが、これに限らず、接続先同士を一意に特定できる情報であれば、どのような種類の情報を用いてもよい。
【００３９】
「予め取り交わされた情報」を用いることで、一意に特定できる機能を実現でき、これによって、セーフティプログラムＳＰＧを実行するセーフティコントローラに必要な要件を満足しつつ、セキュアなリモートメンテナンスを提供できる。
【００４０】
＜Ｂ．各ユニットのハードウェア構成例＞
次に、本実施の形態に従うセーフティシステム１を構成する各ユニットのハードウェア構成例について説明する。
【００４１】
（ｂ１：制御ユニット１００）
図３は、本実施の形態に従うセーフティシステム１を構成する制御ユニット１００のハードウェア構成例を示す模式図である。図３を参照して、制御ユニット１００は、主たるコンポーネントとして、ＣＰＵ（Central Processing Unit）やＧＰＵ（Graphical Processing Unit）などのプロセッサ１０２と、チップセット１０４と、主記憶装置１０６と、二次記憶装置１０８と、通信コントローラ１１０と、ＵＳＢ（Universal Serial Bus）コントローラ１１２と、メモリカードインターフェイス１１４と、ネットワークコントローラ１１６，１１８，１２０と、内部バスコントローラ１２２と、インジケータ１２４とを含む。
【００４２】
プロセッサ１０２は、二次記憶装置１０８に格納された各種プログラムを読み出して、主記憶装置１０６に展開して実行することで、標準制御に係る制御演算、および、後述するような各種処理を実現する。チップセット１０４は、プロセッサ１０２と各コンポーネントとの間のデータの遣り取りを仲介することで、制御ユニット１００全体としての処理を実現する。
【００４３】
主記憶装置１０６は、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）などの揮発性記憶装置などで構成される。二次記憶装置１０８は、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などの不揮発性記憶装置などで構成される。
【００４４】
二次記憶装置１０８には、システムプログラムに加えて、システムプログラムが提供する実行環境上で動作する制御プログラムが格納される。
【００４５】
通信コントローラ１１０は、中継ユニット２００との間のデータの遣り取りを担当する。通信コントローラ１１０としては、例えば、ＰＣＩ  Ｅｘｐｒｅｓｓあるいはイーサネットなどに対応する通信チップを採用できる。
【００４６】
ＵＳＢコントローラ１１２は、ＵＳＢ接続を介して任意の情報処理装置との間のデータの遣り取りを担当する。
【００４７】
メモリカードインターフェイス１１４は、メモリカード１１５を着脱可能に構成されており、メモリカード１１５に対して制御プログラムや各種設定などのデータを書込み、あるいは、メモリカード１１５から制御プログラムや各種設定などのデータを読出すことが可能になっている。
【００４８】
ネットワークコントローラ１１６，１１８，１２０の各々は、ネットワークを介した任意のデバイスとの間のデータの遣り取りを担当する。ネットワークコントローラ１１６，１１８，１２０は、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、ＤｅｖｉｃｅＮｅｔ（登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などの産業用ネットワークプロトコルを採用してもよい。
【００４９】
内部バスコントローラ１２２は、セーフティシステム１を構成するセーフティユニット３００や１または複数の機能ユニット４００との間のデータの遣り取りを担当する。内部バス１０（図２参照）には、メーカ固有の通信プロトコルを用いてもよいし、いずれかの産業用ネットワークプロトコルと同一あるいは準拠した通信プロトコルを用いてもよい。
【００５０】
インジケータ１２４は、制御ユニット１００の動作状態などを通知するものであり、ユニット表面に配置された１または複数のＬＥＤなどで構成される。
【００５１】
図３には、プロセッサ１０２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（例えば、ＡＳＩＣ（Application Specific Integrated Circuit）またはＦＰＧＡ（Field-Programmable Gate Array）など）を用いて実装してもよい。あるいは、制御ユニット１００の主要部を、汎用的なアーキテクチャに従うハードウェア（例えば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳ（Operating System）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００５２】
（ｂ２：中継ユニット２００）
図４は、本実施の形態に従うセーフティシステム１を構成する中継ユニット２００のハードウェア構成例を示す模式図である。図４を参照して、中継ユニット２００は、主たるコンポーネントとして、ＣＰＵやＧＰＵなどのプロセッサ２０２と、チップセット２０４と、主記憶装置２０６と、二次記憶装置２０８と、通信コントローラ２１０と、通信インターフェイス２１２と、メモリカードインターフェイス２１４と、ネットワークコントローラ２１６，２１８と、インジケータ２２４とを含む。
【００５３】
プロセッサ２０２は、二次記憶装置２０８に格納された各種プログラムを読み出して、主記憶装置２０６に展開して実行することで、後述するような各種通信機能を実現する。チップセット２０４は、プロセッサ２０２と各コンポーネントとの間のデータの遣り取りを仲介することで、中継ユニット２００全体としての処理を実現する。
【００５４】
二次記憶装置２０８には、システムプログラムに加えて、システムプログラムが提供する実行環境上で動作する通信処理プログラムが格納される。
【００５５】
通信コントローラ２１０は、制御ユニット１００との間のデータの遣り取りを担当する。通信コントローラ２１０としては、制御ユニット１００に通信コントローラ２１０と同様に、例えば、ＰＣＩ  Ｅｘｐｒｅｓｓあるいはイーサネットなどに対応する通信チップを採用できる。
【００５６】
通信インターフェイス２１２は、ＵＳＢ接続を介して任意の情報処理装置との間のデータの遣り取りを担当する。
【００５７】
メモリカードインターフェイス２１４は、メモリカード２１５を着脱可能に構成されており、メモリカード２１５に対して制御プログラムや各種設定などのデータを書込み、あるいは、メモリカード２１５から制御プログラムや各種設定などのデータを読出すことが可能になっている。
【００５８】
ネットワークコントローラ２１６，２１８の各々は、ネットワークを介した任意のデバイスとの間のデータの遣り取りを担当する。ネットワークコントローラ２１６，２１８は、イーサネットなどの汎用的なネットワークプロトコルを採用してもよい。
【００５９】
インジケータ２２４は、中継ユニット２００の動作状態などを通知するものであり、ユニット表面に配置された１または複数のＬＥＤなどで構成される。
【００６０】
図４には、プロセッサ２０２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（例えば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。あるいは、中継ユニット２００の主要部を、汎用的なアーキテクチャに従うハードウェア（例えば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳを並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００６１】
（ｂ３：セーフティユニット３００）
図５は、本実施の形態に従うセーフティシステム１を構成するセーフティユニット３００のハードウェア構成例を示す模式図である。図５を参照して、セーフティユニット３００は、主たるコンポーネントとして、ＣＰＵやＧＰＵなどのプロセッサ３０２と、チップセット３０４と、主記憶装置３０６と、二次記憶装置３０８と、メモリカードインターフェイス３１４と、内部バスコントローラ３２２と、インジケータ３２４とを含む。
【００６２】
プロセッサ３０２は、二次記憶装置３０８に格納された各種プログラムを読み出して、主記憶装置３０６に展開して実行することで、セーフティ制御に係る制御演算、および、後述するような各種処理を実現する。チップセット３０４は、プロセッサ３０２と各コンポーネントとの間のデータの遣り取りを仲介することで、セーフティユニット３００全体としての処理を実現する。
【００６３】
二次記憶装置３０８には、システムプログラムに加えて、システムプログラムが提供する実行環境上で動作するセーフティプログラムが格納される。
【００６４】
メモリカードインターフェイス３１４は、メモリカード３１５を着脱可能に構成されており、メモリカード３１５に対してセーフティプログラムや各種設定などのデータを書込み、あるいは、メモリカード３１５からセーフティプログラムや各種設定などのデータを読出すことが可能になっている。
【００６５】
内部バスコントローラ３２２は、内部バス１０（図２参照）を介した制御ユニット１００との間のデータの遣り取りを担当する。
【００６６】
インジケータ３２４は、セーフティユニット３００の動作状態などを通知するものであり、ユニット表面に配置された１または複数のＬＥＤなどで構成される。
【００６７】
図５には、プロセッサ３０２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（例えば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。あるいは、セーフティユニット３００の主要部を、汎用的なアーキテクチャに従うハードウェア（例えば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳを並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００６８】
＜Ｃ．セーフティシステム１に対するメンテナンス＞
次に、本実施の形態に従うセーフティシステム１に対するメンテナンスについて説明する。
【００６９】
図６は、本実施の形態に従うセーフティシステム１に対するメンテナンスの要件を説明するための図である。図６には、典型例として、セーフティユニット３００（以下、「デバイス」とも称される。）に格納されているユーザプログラム（セーフティプログラムＳＰＧ）を、サポート装置５００で作成したユーザプログラム（セーフティプログラムＳＰＧ）で書き換えるような場合を想定する。
【００７０】
図６に示す要件は、ＩＥＣ  ６２０６１：２００５の「６．１１．２  Ｓｏｆｔｗａｒｅ  Ｂａｓｅｄ  Ｐａｒａｍｅｔｅｒｉｚａｔｉｏｎ」などに規定されているものである。
【００７１】
１．メンテナンスを行うオペレータが権限を有していること（例えば、パスワードを用いた権限確認。）
２．サポート装置５００からデバイスへ送られるセーフティプログラムＳＰＧがデバッグ済みのプログラムであること
３．書き換え対象デバイスがユニークに識別できること（例えば、サポート装置５００とデバイスとの直接接続。あるいは、対象デバイスが有しているユニークな名前やシリアル番号での特定。）
４．サポート装置５００から書き換えたファイルとデバイス上のファイルとが一致していること（例えば、チェックサムを用いた確認。）
５．現場の作業者が安全であること（例えば、誤作動や停止によって、けがをするといった事態を生じないこと）
標準制御を実行する制御ユニット１００に対するメンテナンスではなく、セーフティ制御を実行するセーフティユニット３００に対するメンテナンスについては、上述したような、より厳しい要件が課されることになる。
【００７２】
本実施の形態においては、セーフティシステム１が配置された現場においてメンテナンスを実行することに加えて、遠隔地に配置されたサポート装置５００を操作して、セーフティシステム１をメンテナンスすることが可能になっている。以下、遠隔地に配置されたサポート装置５００を操作することで行うメンテナンスを「リモートメンテナンス」とも称す。
【００７３】
セーフティユニット３００に対するリモートメンテナンスを実現するためには、特に、上述した要件３を考慮することが好ましい。また、要件１，４についても考慮することが好ましい。
【００７４】
要件１である「メンテナンスを行うオペレータが権限を有していること」は、セーフティプログラムＳＰＧの送信元（あるいは、送信者）が正しいことを保証することを意味する。
【００７５】
要件３である「書き換え対象デバイスがユニークに識別できること」は、セーフティプログラムＳＰＧの転送先が正しいことを保証することを意味する。
【００７６】
要件４である「サポート装置５００から書き換えたファイルとデバイス上のファイルとが一致していること」は、セーフティユニット３００への転送後のセーフティプログラムＳＰＧが正しいことを保証することを意味する。
【００７７】
以下、セーフティシステム１に対するリモートメンテナンスを実現するための構成について説明する。
【００７８】
＜Ｄ．サポート装置５００のハードウェア構成例＞
次に、本実施の形態に従うセーフティシステム１に接続されるサポート装置５００のハードウェア構成例について説明する。
【００７９】
図７は、本実施の形態に従うセーフティシステム１に接続されるサポート装置５００のハードウェア構成例を示す模式図である。サポート装置５００は、一例として、汎用的なアーキテクチャに従うハードウェア（例えば、汎用パソコン）を用いて実現される。
【００８０】
図７を参照して、サポート装置５００は、ＣＰＵやＧＰＵなどのプロセッサ５０２と、主記憶装置５０４と、入力部５０６と、出力部５０８と、二次記憶装置５１０と、光学ドライブ５１２と、通信インターフェイス５２０とを含む。これらのコンポーネントは、プロセッサバス５１８を介して接続されている。
【００８１】
プロセッサ５０２は、二次記憶装置５１０に格納されたプログラム（一例として、ＯＳ５１０２およびサポートプログラム５１０４）を読出して、主記憶装置５０４に展開して実行することで、後述するような各種処理を実現する。
【００８２】
二次記憶装置５１０には、基本的な機能を実現するためのＯＳ５１０２に加えて、サポート装置５００としての機能を提供するためのサポートプログラム５１０４が格納される。サポートプログラム５１０４は、コンピュータである情報処理装置（実質的にはプロセッサ５０２）により実行されることで、本実施の形態に従うサポート装置５００を実現する。
【００８３】
二次記憶装置５１０には、サポートプログラム５１０４が実行されることで提供される開発環境においてユーザにより作成されるプロジェクト５１０６が格納される。さらに、二次記憶装置５１０には、後述するような鍵（秘密鍵および公開鍵）や証明書などが格納されていてもよい。
【００８４】
本実施の形態において、サポート装置５００は、セーフティシステム１に含まれる各デバイスに対する設定および各デバイスで実行されるプログラムの作成が統合的に可能な開発環境を提供する。プロジェクト５１０６は、このような統合的な開発環境によって生成されるデータを含む。典型的には、プロジェクト５１０６は、標準制御ソースプログラム５１０８と、セーフティソースプログラム５１１２とを含む。
【００８５】
標準制御ソースプログラム５１０８は、オブジェクトコードに変換された上で、制御ユニット１００へ転送され、標準制御プログラムとして格納される。セーフティソースプログラム５１１０は、オブジェクトコードに変換された上で、セーフティユニット３００へ転送され、セーフティプログラムとして格納される。
【００８６】
入力部５０６は、キーボードやマウスなどで構成され、ユーザ操作を受け付ける。出力部５０８は、ディスプレイ、各種インジケータ、プリンタなどで構成され、プロセッサ５０２からの処理結果などを出力する。
【００８７】
通信インターフェイス５２０は、ＵＳＢやイーサネットなどの任意の通信媒体を介して、セーフティシステム１との間のデータを遣り取りする。
【００８８】
サポート装置５００は、光学ドライブ５１２を有しており、コンピュータ読取可能な命令を非一過的に格納する記録媒体５１４（例えば、ＤＶＤ（Digital Versatile Disc）などの光学記録媒体）から、その中に格納されたプログラムが読取られて二次記憶装置５１０などにインストールされる。
【００８９】
サポート装置５００で実行されるサポートプログラム５１０４などは、コンピュータ読取可能な記録媒体５１４を介してインストールされてもよいが、ネットワーク上のサーバ装置などからダウンロードする形でインストールするようにしてもよい。また、本実施の形態に従うサポート装置５００が提供する機能は、ＯＳが提供するモジュールの一部を利用する形で実現される場合もある。
【００９０】
図７には、プロセッサ５０２がプログラムを実行することで、サポート装置５００として必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（例えば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。
【００９１】
なお、セーフティシステム１が稼動中において、サポート装置５００は、セーフティシステム１から取り外されていてもよい。
【００９２】
＜Ｅ．セーフティプログラムの転送先が正しいことを保証するための構成（要件３）＞
まず、要件３である「書き換え対象デバイスがユニークに識別できること」を実現するための構成について説明する。
【００９３】
（ｅ１：課題）
図８は、本実施の形態に従うセーフティシステム１とサポート装置５００とを直接接続して行うメンテナンスを説明するための図である。図８を参照して、サポート装置５００とセーフティシステム１（セーフティユニット３００）とを現場において直接接続する場合には、サポート装置５００を操作するオペレータは、接続先のデバイス（セーフティユニット３００）を目視により確認できるので、この目視および接続操作によって、書き換え対象デバイスをユニークに識別できる。
【００９４】
図９は、セーフティシステム１に対するサポート装置５００からのリモートメンテナンスにおける課題を説明するための図である。図９を参照して、サポート装置５００は、ネットワーク４を介してセーフティシステム１と電気的に接続されているとする。
【００９５】
ネットワーク４において、セーフティシステム１は、中継ユニット２００に割り当てられたネットワークアドレス（典型的には、ＩＰアドレス）により特定されることになる。
【００９６】
サポート装置５００は、予め登録された転送先となるデバイス（セーフティユニット３００）の名称と、ＩＰアドレスとが対応付けられたリストＬＳを有しており、オペレータは、リストＬＳを参照して、転送先となるセーフティユニット３００を選択する。図９に示す例では、ＩＰアドレスとして「１９２．１６８．２５０．１」（Ｓａｆｅｔｙ＿１）が選択されている。そして、サポート装置５００は、オペレータの操作に従って、選択されたＩＰアドレスを有するデバイスに対して、セーフティプログラムＳＰＧを転送する。
【００９７】
ここで、ＩＰアドレスは、各デバイスに対して任意に設定することができ、あるいは、ルータなどが動的に割り当てることもある。そのため、別のセーフティシステム２に対して、「１９２．１６８．２５０．１」が誤って設定されている可能性がある。
【００９８】
あるいは、なりすましなどによって、別のセーフティシステム２が転送先であると偽装されることもある。
【００９９】
このように、ＩＰアドレスの指定だけでは、誤った設定やなりすましなどによって、セーフティプログラムＳＰＧの転送先が正しいことを保証できない。すなわち、セーフティプログラムＳＰＧを誤ったシステムへ転送しても気付かない可能性がある。
【０１００】
（ｅ２：解決形態１）
図８に示すような課題に対する解決形態１として、鍵による暗号化を利用した形態について説明する。
【０１０１】
図１０は、本実施の形態に従うセーフティシステム１に対するサポート装置５００からのリモートメンテナンスの一形態を説明するための図である。図１０に示す構成においては、セーフティシステム１の中継ユニット２００は、予め取り交わされた情報の少なくとも一部として、鍵を保持しており、サポート装置５００は、中継ユニット２００が保持している鍵で復号可能なように、メンテナンスに必要なデータを暗号化して、中継ユニット２００へ転送する。
【０１０２】
より具体的には、セーフティシステム１に対して、公開鍵基盤に従う秘密鍵および公開鍵からなる鍵ペアが予め用意される。秘密鍵は、中継ユニット２００に格納され、対応する公開鍵は、サポート装置５００に格納される。
【０１０３】
例えば、ＩＰアドレスとして「１９２．１６８．２５０．１」（Ｓａｆｅｔｙ＿１）を有するセーフティシステム１（中継ユニット２００）は、秘密鍵ＳＫ１を格納しており、サポート装置５００が保持しているリストＬＳにある「１９２．１６８．２５０．１」のエントリには、対応する公開鍵ＰＫ１が関連付けられている。なお、公開鍵ＰＫ１の偽装を防止するために、公開鍵ＰＫ１を認証局が認証することで生成したサーバ証明書をサポート装置５００に格納するようにしてもよい。
【０１０４】
このように、中継ユニット２００は、予め取り交わされた情報である鍵として、秘密鍵ＳＫ１を保持している。また、サポート装置５００は、秘密鍵ＳＫ１と対にある公開鍵ＰＫ１、および、公開鍵ＰＫ１に対して発行されたサーバ電子証明書の少なくとも一方を保持している。
【０１０５】
リモートメンテナンスにおいて、サポート装置５００は、オペレータの操作に従って、選択されたＩＰアドレスを有するデバイスに対して、セーフティプログラムＳＰＧを転送する際には、選択された転送先の公開鍵でセーフティプログラムＳＰＧを暗号化する。暗号化により生成された暗号化済みセーフティプログラムＳＳＰ（転送データ）が転送先へ転送される。
【０１０６】
暗号化済みセーフティプログラムＳＳＰ（転送データ）が本来の転送先であるセーフティシステム１へ転送された場合には、セーフティシステム１の中継ユニット２００が格納している秘密鍵ＳＫ１を用いた復号が可能となる。
【０１０７】
一方、暗号化済みセーフティプログラムＳＳＰ（転送データ）が誤った転送先であるセーフティシステム２へ転送された場合には、セーフティシステム２の中継ユニット２００が格納している秘密鍵ＳＫ２では復号が行えない。あるいは、セーフティシステム２の中継ユニット２００においては、何らの秘密鍵も保持していないことも想定され、この場合においても、転送データを復号することはできない。
【０１０８】
また、仮に、転送データを何らかの方法で受信したとしても、セーフティシステム２においては転送データを復号することはできない。
【０１０９】
このように、サポート装置５００は、選択した転送先に予め関連付けられた鍵を有しているセーフティシステム１に対して転送データを転送したときに限って、当該転送先では復号できるので、誤った転送先にセーフティプログラムＳＰＧを送信してしまうことがない。これにより、転送先での誤ったＩＰアドレスの設定やＩＰアドレスのなりすましなどがあっても、正しい転送先にセーフティプログラムＳＰＧを転送できる。そして、中継ユニット２００は、サポート装置５００から転送されたデータ（暗号化済みセーフティプログラムＳＳＰ）を秘密鍵ＳＫ１で復号できた場合に、当該復号したデータ（セーフティプログラムＳＰＧ）をセーフティユニット３００へ転送する。
【０１１０】
図１１は、図１０に示すリモートメンテナンスにおける処理手順を示すシーケンス図である。図１１を参照して、オペレータによるサポート装置５００の操作（シーケンスＳＱ１００）に従って、サポート装置５００は、セーフティプログラムＳＰＧの作成・編集処理を実行する（シーケンスＳＱ１０２）。
【０１１１】
続いて、オペレータによる転送先の選択および転送の操作（シーケンスＳＱ１０４）に従って、サポート装置５００は、選択された中継ユニット２００とネットワーク接続し、転送先の公開鍵でセーフティプログラムＳＰＧを暗号化して暗号化済みセーフティプログラムＳＳＰ（転送データ）を生成する（シーケンスＳＱ１０６）。そして、サポート装置５００は、選択された転送先へ転送データを転送する（シーケンスＳＱ１０８）。すなわち、サポート装置５００は、ユーザ操作に従って、セーフティプログラムＳＰＧに対する追加または変更を含むメンテナンスを実行する。
【０１１２】
転送先の中継ユニット２００は、サポート装置５００から転送データを受信すると、当該受信したデータを自デバイスの秘密鍵ＳＫ１でセーフティプログラムＳＰＧに復号する（シーケンスＳＱ１１０）。そして、中継ユニット２００は、復号したセーフティプログラムＳＰＧをセーフティユニット３００へ転送する（シーケンスＳＱ１１２）。この中継ユニット２００からセーフティユニット３００へのセーフティプログラムＳＰＧの転送は、内部バス１０を介して実行される。
【０１１３】
このように、サポート装置５００および中継ユニット２００は、予め取り交わされた情報で両者を特定し、メンテナンスに必要なデータを遣り取りする。
【０１１４】
セーフティユニット３００は、中継ユニット２００からのセーフティプログラムＳＰＧを格納する（シーケンスＳＱ１１４）。そして、セーフティユニット３００は、格納したセーフティプログラムＳＰＧに従ってセーフティ制御を実行する。
【０１１５】
これにより、サポート装置５００からセーフティユニット３００に対するリモートメンテナンスが完了する。
【０１１６】
なお、中継ユニット２００は、復号したセーフティプログラムＳＰＧに対してウィルススキャンなどを実行した後に、セーフティユニット３００へ転送するようにしてもよい。これは、サポート装置５００での暗号化の直前にウィルスに感染している可能性を考慮したものである。
【０１１７】
（ｅ３：解決形態２）
上述の解決形態１においては、転送先の公開鍵を用いて転送データを生成する構成について例示したが、暗号化および復号に係る処理を効率化して、転送速度を高める観点からは、共通鍵をさらに用いるようにしてもよい。
【０１１８】
図１２は、本実施の形態に従うセーフティシステム１に対するサポート装置５００からのリモートメンテナンスの別の一形態を説明するための図である。図１２に示す構成においても、図１０に示す構成と同様に、セーフティシステム１に対して秘密鍵および公開鍵からなる鍵ペアが予め用意される。
【０１１９】
まず、セーフティプログラムＳＰＧは、サポート装置５００において、都度生成されるワンタイム鍵である共通鍵ＴＣＫにより暗号化されて、暗号化済みセーフティプログラムＳＳＰ（転送データ）が生成される。併せて、共通鍵ＴＣＫについては、選択された転送先の公開鍵で暗号化されることで、暗号化済み共通鍵ＳＴＣが生成される。
【０１２０】
サポート装置５００から選択された転送先には、暗号化済みセーフティプログラムＳＳＰおよび暗号化済み共通鍵ＳＴＣが転送される。
【０１２１】
このように、サポート装置５００は、メンテナンスに必要なデータを送信する必要がある場合に、ワンタイム鍵である共通鍵ＴＣＫを生成する。そして、サポート装置５００は、共通鍵ＴＣＫでメンテナンスに必要なデータを暗号化するとともに、中継ユニット２００が保持する鍵（秘密鍵ＳＫ１）で復号可能なように共通鍵ＴＣＫを暗号化して、中継ユニット２００へ送信する。
【０１２２】
一方、転送先のセーフティシステム１の中継ユニット２００は、サポート装置５００から受信した暗号化済み共通鍵ＳＴＣを自デバイスの秘密鍵ＳＫ１で共通鍵ＴＣＫに復号する。そして、転送先のセーフティシステム１の中継ユニット２００は、復号した共通鍵ＴＣＫでサポート装置５００から受信した暗号化済みセーフティプログラムＳＳＰ（転送データ）をセーフティプログラムＳＰＧに復号する。
【０１２３】
一方、暗号化済みセーフティプログラムＳＳＰおよび暗号化済み共通鍵ＳＴＣが誤った転送先であるセーフティシステム２へ転送された場合には、セーフティシステム２の中継ユニット２００が格納している秘密鍵ＳＫ２では復号が行えない。あるいは、セーフティシステム２の中継ユニット２００においては、何らの秘密鍵も保持していないことも想定され、この場合においても、転送データを復号することはできない。
【０１２４】
また、仮に、サポート装置５００からのデータを何らかの方法で受信したとしても、セーフティシステム２においては転送データを復号することはできない。
【０１２５】
このように、サポート装置５００は、選択した転送先に予め関連付けられた鍵を有しているセーフティシステム１に対して転送データを転送したときに限って、当該転送先では復号できるので、誤った転送先にセーフティプログラムＳＰＧを送信してしまうことがない。これにより、転送先での誤ったＩＰアドレスの設定やＩＰアドレスのなりすましなどがあっても、正しい転送先にセーフティプログラムＳＰＧを転送できる。
【０１２６】
図１３は、図１２に示すリモートメンテナンスにおける処理手順を示すシーケンス図である。図１３を参照して、オペレータによるサポート装置５００の操作（シーケンスＳＱ１００）に従って、サポート装置５００は、セーフティプログラムＳＰＧの作成・編集処理を実行する（シーケンスＳＱ１０２）。
【０１２７】
続いて、オペレータによる転送先の選択および転送の操作（シーケンスＳＱ１０４）に従って、サポート装置５００は、ワンタイム鍵として共通鍵ＴＣＫを生成する（シーケンスＳＱ１２０）。そして、サポート装置５００は、生成した共通鍵ＴＣＫでセーフティプログラムＳＰＧを暗号化して暗号化済みセーフティプログラムＳＳＰ（転送データ）を生成する（シーケンスＳＱ１２２）。また、サポート装置５００は、転送先の公開鍵で共通鍵ＴＣＫを暗号化して暗号化済み共通鍵ＳＴＣを生成する（シーケンスＳＱ１２４）。
【０１２８】
最終的に、サポート装置５００は、暗号化済みセーフティプログラムＳＳＰおよび暗号化済み共通鍵ＳＴＣを選択された転送先へ転送する（シーケンスＳＱ１２６）。
【０１２９】
転送先の中継ユニット２００は、サポート装置５００から暗号化済み共通鍵ＳＴＣを受信すると、当該受信した暗号化済み共通鍵ＳＴＣを自デバイスの秘密鍵ＳＫ１で共通鍵ＴＣＫに復号する（シーケンスＳＱ１３０）。
【０１３０】
また、中継ユニット２００は、暗号化済みセーフティプログラムＳＳＰ（転送データ）を共通鍵ＴＣＫでセーフティプログラムＳＰＧに復号する（シーケンスＳＱ１３２）。
【０１３１】
最終的に、中継ユニット２００は、復号したセーフティプログラムＳＰＧをセーフティユニット３００へ転送する（シーケンスＳＱ１１２）。この中継ユニット２００からセーフティユニット３００へのセーフティプログラムＳＰＧの転送は、内部バス１０を介して実行される。
【０１３２】
セーフティユニット３００は、中継ユニット２００からのセーフティプログラムＳＰＧを格納する（シーケンスＳＱ１１４）。そして、セーフティユニット３００は、格納したセーフティプログラムＳＰＧに従ってセーフティ制御を実行する。
【０１３３】
これにより、サポート装置５００からセーフティユニット３００に対するリモートメンテナンスが完了する。
【０１３４】
（ｅ４：認証局の利用）
サポート装置５００が利用する各デバイスの公開鍵は、転送先となるセーフティシステム１（あるいは、中継ユニット２００）から直接的または間接的に取得してもよい。あるいは、認証局（ＣＡ：Certificate Authority）に公開鍵を登録するとともに、認証局が発行する公開鍵に対するサーバ証明書を各デバイスの公開鍵として用いるようにしてもよい。認証局を利用することで、公開鍵の偽装などを防止することができる。
【０１３５】
＜Ｆ．相互認証＞
次に、セーフティシステム１（中継ユニット２００）とサポート装置５００との間の相互認証の処理について説明する。より具体的には、（１）サポート装置５００から見た転送先の正当性の保証、および／または、（２）転送先から見たサポート装置５００の正当性の保証を実現する方法について説明する。セーフティシステム１の設置環境などに応じて、これらの相互認証処理のうち、いずれか一方のみ、あるいは両方を実施するようにしてもよい。
【０１３６】
（ｆ１：サポート装置５００から見た転送先の正当性の保証）
図１４は、本実施の形態に従うセーフティシステム１においてサポート装置５００から見た転送先の正当性の保証処理を説明するための図である。図１４には、サポート装置５００へ転送先候補のデバイスへの正当な公開鍵（サーバ証明書）のインストールを保証する方法を示す。すなわち、転送先の公開鍵の生成、配布、および認証などの一連の処理手順を示す。
【０１３７】
まず、サポート装置５００は、転送先候補のデバイスである中継ユニット２００に鍵ペア（秘密鍵ＳＫおよび公開鍵ＰＫ）の生成を指示する（（１）鍵生成）。この指示に従って、中継ユニット２００は、鍵ペア（秘密鍵ＳＫおよび公開鍵ＰＫ）を生成する。
【０１３８】
続いて、サーバ証明書（公開鍵）の生成および配布などを支援するための情報処理装置７００を用いて、中継ユニット２００において生成された公開鍵ＰＫを取得する（（２）公開鍵を取得）。公開鍵ＰＫは、中継ユニット２００から情報処理装置７００へ直接的方法により取得される。直接的方法とは、例えば、中継ユニット２００と情報処理装置７００とをＵＳＢケーブルなどで直接接続して、中継ユニット２００に格納されている公開鍵ＰＫを取得する方法や、中継ユニット２００にＳＤカードを装着して格納されている公開鍵ＰＫを取得した後に、当該ＳＤカードを情報処理装置７００に装着して公開鍵ＰＫを移す方法などが想定される。このような直接的方法を採用することで、対象の中継ユニット２００と公開鍵ＰＫとの対応関係を維持できる。
【０１３９】
情報処理装置７００は、中継ユニット２００から取得した公開鍵ＰＫおよび利用者情報ＵＴを含む証明書発行要求を認証局８００へ送信する（（３）証明書発行要求）。すると、認証局８００は、公開鍵ＰＫに対応するサーバ証明書ＣＲを生成し、情報処理装置７００へ応答する（（４）サーバ証明書発行）。
【０１４０】
さらに、情報処理装置７００からサポート装置５００に対して、直接的方法でサーバ証明書ＣＲが転送される（（５）サーバ証明書インストール）。情報処理装置７００とサポート装置５００との間の直接的方法についても上述と同様であり、情報処理装置７００とサポート装置５００とをＵＳＢケーブルなどで直接接続する方法や、ＵＳＢメモリあるいはＳＤカードなどの記録媒体を介する方法などが想定される。このような直接的方法を採用することで、対象の中継ユニット２００とサーバ証明書ＣＲとの対応関係を維持できる。
【０１４１】
続いて、サポート装置５００は、中継ユニット２００から公開鍵ＰＫを取得する（（８）接続（認証））。そして、サポート装置５００は、取得した公開鍵ＰＫおよびインストールされているサーバ証明書ＣＲを認証局８００に送信して、サーバ証明書ＣＲの正当性の認証を要求する（（７）ＣＡ認証（サーバ証明書の認証））。
【０１４２】
以上の（１）〜（７）の手順によって、サポート装置５００にインストールされているサーバ証明書ＣＲが特定の中継ユニット２００の公開鍵ＰＫに対応するものであることを保証できる。すなわち、サーバ証明書ＣＲによって転送先の中継ユニット２００の正当性を保証できる。そして、サポート装置５００は、インストールされたサーバ証明書ＣＲ（公開鍵ＰＫに相当）を用いて、セーフティシステム１（中継ユニット２００）を特定して通信を行う（（８）接続（通信））。
【０１４３】
なお、情報処理装置７００がサーバ証明書ＣＲを発行するとともに、サポート装置５００自体がサーバ証明書ＣＲの認証を実行する場合には、認証局８００を省略してもよい。また、認証局８００は、インターネットを介してアクセス可能な公的認証局であってもよいし、セーフティシステム１を含むローカルネットワークに配置された私的認証局であってもよい。
【０１４４】
（ｆ２：転送先から見たサポート装置５００の正当性の保証）
図１５は、本実施の形態に従うセーフティシステム１において転送先から見たサポート装置５００の正当性の保証処理を説明するための図である。図１５には、中継ユニット２００に転送元であるサポート装置５００への正当な公開鍵（サーバ証明書）のインストールを保証する方法を示す。すなわち、転送元の公開鍵の生成、配布、および認証などの一連の処理手順を示す。
【０１４５】
まず、サポート装置５００は、自装置用の鍵ペア（秘密鍵ＳＫ’および公開鍵ＰＫ’）を生成する（（１）鍵生成）。続いて、サポート装置５００は、自装置で生成した公開鍵ＰＫ’および利用者情報ＵＴ’を含む証明書発行要求を認証局８００へ送信する（（２）証明書発行要求）。すると、認証局８００は、公開鍵ＰＫ’に対応するクライアント証明書ＣＲ’を生成し、情報処理装置７００へ応答する（（３）クライアント証明書発行）。
【０１４６】
さらに、サポート装置５００から中継ユニット２００に対して、直接的方法でクライアント証明書ＣＲ’が転送される（（４）クライアント証明書インストール）。サポート装置５００と中継ユニット２００との間の直接的方法についても上述と同様であり、サポート装置５００と中継ユニット２００とをＵＳＢケーブルなどで直接接続する方法や、ＵＳＢメモリあるいはＳＤカードなどの記録媒体を介する方法などが想定される。このような直接的方法を採用することで、サポート装置５００と対象の中継ユニット２００との対応関係を維持できる。
【０１４７】
続いて、サポート装置５００は、中継ユニット２００へ公開鍵ＰＫ’を送信する（（５）接続（認証））。すると、中継ユニット２００は、送信された公開鍵ＰＫ’およびインストールされているクライアント証明書ＣＲ’を認証局８００に送信して、クライアント証明書ＣＲの正当性の認証を要求する（（６）ＣＡ認証（クライアント証明書の認証））。
【０１４８】
以上の（１）〜（６）の手順によって、中継ユニット２００にインストールされているクライアント証明書ＣＲ’が特定のサポート装置５００の公開鍵ＰＫ’に対応するものであることを保証できる。すなわち、クライアント証明書ＣＲ’によって転送元のサポート装置５００の正当性を保証できる。そして、セーフティシステム１（中継ユニット２００）は、インストールされたクライアント証明書ＣＲ’（公開鍵ＰＫ（に相当）を用いて、送信元のサポート装置５００を特定して通信を行う（（７）接続（通信））。
【０１４９】
なお、サポート装置５００がクライアント証明書ＣＲ’を発行するとともに、中継ユニット２００自体がクライアント証明書ＣＲ’の認証を実行する場合には、認証局８００を省略してもよい。また、認証局８００は、インターネットを介してアクセス可能な公的認証局であってもよいし、セーフティシステム１を含むローカルネットワークに配置された私的認証局であってもよい。
【０１５０】
＜Ｇ．構成保証＞
図１に示すセーフティシステム１は、中継ユニット２００が秘密鍵を保持するとともに、中継ユニット２００からセーフティプログラムがセーフティユニット３００へ内部バス１０を介して転送される。様々なセキュリティ脅威を考慮すると、中継ユニット２００が秘密鍵を生成した後に、中継ユニット２００に接続されるセーフティユニット３００が交換される可能性もある。このような脅威を想定すると、中継ユニット２００とセーフティユニット３００との組み合わせが維持されていることも保証することが好ましい。
【０１５１】
図１６は、本実施の形態に従うセーフティシステム１において中継ユニット２００とセーフティユニット３００との組み合わせを保証するための処理を説明するための図である。図１６を参照して、セーフティシステム１（中継ユニット２００）が保持する秘密鍵ＳＫ１に対応するサーバ証明書ＣＲを生成する際に、中継ユニット２００に接続されているセーフティユニット３００の識別情報（典型的には、セーフティユニット３００のシリアル番号など）を予め含めるようにしてもよい。
【０１５２】
図１６に示すように、例えば、主体者情報の一部として、セーフティユニット３００のシリアル番号ＳＲＮを含めるようにしてもよい。すなわち、サポート装置５００は、中継ユニット２００が保持する秘密鍵ＳＫ１と対にある公開鍵ＰＫ１に対して発行された電子証明書であるサーバ証明書ＣＲを保持している。サーバ証明書ＣＲは、セーフティユニット３００を識別するための識別情報の一例である、セーフティユニット３００のシリアル番を含んでいる。
【０１５３】
このようなシリアル番号ＳＲＮを含むサーバ証明書ＣＲの生成は、例えば、中継ユニット２００が、サポート装置５００あるいはその他の情報処理装置から証明書発行要求の送信指示を受け付けた際に、利用者情報ＵＴにセーフティユニット３００のシリアル番号ＳＲＮを含めて認証局８００へ送信することで実現できる。
【０１５４】
サポート装置５００は、セーフティユニット３００のシリアル番号ＳＲＮを含むサーバ証明書ＣＲ（転送先デバイスに対応する公開鍵に相当）を利用して、セーフティプログラムＳＰＧの転送前に、転送先の構成の同一性を確認する。
【０１５５】
より具体的には、サポート装置５００は、セーフティプログラムＳＰＧの転送前に、シリアル番号消化処理５９０を実行する。シリアル番号消化処理５９０においては、サーバ証明書ＣＲに含まれるシリアル番号ＳＲＮと、転送先のセーフティシステム１から取得されるセーフティユニット３００のシリアル番号ＳＲＮとが比較される。このように、サポート装置５００は、メンテナンスに必要なデータの送信前に、中継ユニット２００を介して取得したセーフティユニット３００の識別情報（シリアル番号ＳＲＮ）と、サーバ証明書ＣＲに含まれる識別情報（シリアル番号ＳＲＮ）とが一致しているか否かを判断する。
【０１５６】
両者が一致した場合には、セーフティプログラムＳＰＧの転送処理が続行される。すなわち、サポート装置５００は、中継ユニット２００を介して取得したセーフティユニット３００の識別情報（シリアル番号ＳＲＮ）と、サーバ証明書ＣＲに含まれる識別情報（シリアル番号ＳＲＮ）とが一致していることを条件に、メンテナンスに必要なデータを中継ユニット２００へ送信するようにしてもよい。
【０１５７】
これに対して、両者が一致しない場合には、サーバ証明書ＣＲが発行されたときの構成から変更がなされたことを意味し、以下のいずれかの処理を実行するようにしてもよい。
【０１５８】
（１）シリアル番号ＳＲＮが一致しない場合にはセーフティプログラムＳＰＧの転送を中止する。併せて、サポート装置５００のディスプレイなどを介して警告を出力する。
【０１５９】
（２）サポート装置５００のディスプレイなどを介して警告を出力しつつ、オペレータの明示的な操作を条件に、セーフティプログラムＳＰＧの転送処理を継続する。
【０１６０】
（３）セーフティプログラムＳＰＧの転送処理自体は継続しつつ、シリアル番号ＳＲＮの不一致などの情報をログとして格納する。
【０１６１】
なお、これらの（１）〜（３）以外の処理を実行してもよいし、（１）〜（３）の２つ以上を任意に組み合わせてもよい。
【０１６２】
なお、シリアル番号ＳＲＮが一致しない理由として、不正に交換された場合だけではなく、故障により交換された場合も想定される。さらに、設備改善などによってセーフティシステム１も組み合わせが変更されることも想定される。そのため、一律にセーフティプログラムＳＰＧの転送を中止するのではなく、警告などを出力しつつ、セーフティプログラムＳＰＧの転送自体は継続できるような仕組みを提供しておいてもよい。
【０１６３】
図１７は、本実施の形態に従うセーフティシステム１において中継ユニット２００とセーフティユニット３００との組み合わせを保証するための処理手順を示すシーケンス図である。
【０１６４】
図１７を参照して、サポート装置５００は、オペレータによる転送先の選択および転送の操作を受け付けると（シーケンスＳＱ２００）、中継ユニット２００に対して、セーフティユニット３００のシリアル番号ＳＲＮを取得するためのシリアル番号読出要求を送信する（シーケンスＳＱ２０２）。中継ユニット２００は、サポート装置５００からのシリアル番号読出要求をセーフティユニット３００へ転送する（シーケンスＳＱ２０４）。
【０１６５】
セーフティユニット３００は、シリアル番号読出要求に応答して、シリアル番号ＳＲＮを中継ユニット２００へ送信する（シーケンスＳＱ２０６）。中継ユニット２００は、セーフティユニット３００からのシリアル番号ＳＲＮをサポート装置５００へ転送する。
【０１６６】
サポート装置５００は、中継ユニット２００からシリアル番号ＳＲＮを取得すると、サーバ証明書ＣＲに含まれるシリアル番号ＳＲＮと取得したシリアル番号ＳＲＮとが一致しているか否かを照合する（シーケンスＳＱ２１０）。
【０１６７】
両シリアル番号ＳＲＮが一致していれば、サポート装置５００は、セーフティプログラムＳＰＧを暗号化した転送データを中継ユニット２００へ転送する（シーケンスＳＱ２１２）。中継ユニット２００は、サポート装置５００から受信した転送データをセーフティプログラムＳＰＧに復号するとともに、セーフティプログラムＳＰＧをセーフティユニット３００へ転送する（シーケンスＳＱ２１４）。そして、セーフティユニット３００は、新たに受信したセーフティプログラムＳＰＧに従ってセーフティ制御を実行する。
【０１６８】
これに対して、両シリアル番号ＳＲＮが一致していなければ、サポート装置５００は、シリアル番号ＳＲＮの不一致に対応するエラー処理を実行する（シーケンスＳＱ２１６）。
【０１６９】
上述したような処理および機能を採用することで、中継ユニット２００と実際の転送先であるセーフティユニット３００との組み合わせが維持されていることを保証できる。
【０１７０】
＜Ｈ．メンテナンスを行うオペレータの権限を保証するための構成（要件１）、ならびに、書き換えたファイルの同一性を保証するための構成（要件４）＞
次に、要件１である「メンテナンスを行うオペレータが権限を有していること」、ならびに、要件４である「サポート装置５００から書き換えたファイルとデバイス上のファイルとが一致していること」を実現するための構成について説明する。
【０１７１】
（ｈ１：課題）
図１８は、セーフティシステム１に対するサポート装置５００からのリモートメンテナンスにおける別の課題を説明するための図である。図１８を参照して、サポート装置５００からセーフティシステム１（セーフティユニット３００）にセーフティプログラムＳＰＧが転送される場合を想定する。様々なセキュリティ脅威を考慮すると、転送路上でのセーフティプログラムＳＰＧの改ざんが想定される（課題１）。図１８に示す例では、転送路上において、セーフティプログラムＳＰＧが悪意あるプログラムＳＰＧ＃に改ざんされている例を示す。このような改ざんにより、悪意あるプログラムＳＰＧ＃がセーフティユニット３００へ転送される可能性がある。
【０１７２】
このような場合であっても、セーフティユニット３００へ転送されたプログラムとサポート装置５００が保持しているセーフティプログラムＳＰＧとの同一性が照合される。具体的には、セーフティユニット３００へ転送されたセーフティプログラムＳＰＧから算出されるハッシュ値がサポート装置５００へ送り戻されて、サポート装置５００にてハッシュ値の同一性が判断される。
【０１７３】
この照合処理に用いられるハッシュ値についても、転送路上での改ざんの可能性を否定できない。すなわち、セーフティユニット３００へ転送された悪意あるプログラムＳＰＧ＃から算出されるハッシュ値ＨＳ＃は、セーフティプログラムＳＰＧから算出されるハッシュ値ＨＳとは一致しない。しかしながら、ハッシュ値ＨＳ＃がセーフティユニット３００からサポート装置５００へ転送される転送路上において、ハッシュ値ＨＳ＃が本来のハッシュ値ＨＳに改ざんされると、サポート装置５００が保持している正しいセーフティプログラムＳＰＧから算出されるハッシュ値ＨＳと一致していると誤って照合されることになる。
【０１７４】
その結果、悪意あるプログラムＳＰＧ＃がセーフティユニット３００で実行されていることに気付かない可能性がある。なお、セーフティプログラムから算出されるハッシュ値がセーフティユニット３００の前面に配置されたインジケータに表示される場合には、オペレータは、サポート装置５００において算出したハッシュ値ＨＳとの一致をそのインジケータで照合できる。そのため、オペレータが現場にいれば、正しいセーフティプログラムＳＰＧがセーフティユニット３００へ転送されたか否かを目視にて確認できる。
【０１７５】
（ｈ２：解決形態）
図１８に示すような課題に対する解決形態として、鍵による暗号化を利用した形態について説明する。
【０１７６】
図１９は、本実施の形態に従うセーフティシステム１に対するサポート装置５００からのリモートメンテナンスのさらに別の一形態を説明するための図である。図１９に示す構成においては、サポート装置５００に秘密鍵ＳＫ’および公開鍵ＰＫ’からなる鍵ペアが予め用意される。秘密鍵ＳＫ’は、サポート装置５００に格納され、対応する公開鍵ＰＫ’は、中継ユニット２００に格納される。なお、公開鍵ＰＫ’の偽装を防止するために、公開鍵ＰＫ’を認証局が認証することで生成したサーバ証明書を中継ユニット２００に格納するようにしてもよい。
【０１７７】
このように、サポート装置５００は、秘密鍵ＳＫ’を保持しており、中継ユニット２００は、秘密鍵ＳＫ’と対にある公開鍵ＰＫ’、および、公開鍵ＰＫ’に対して発行された電子証明書（クライアント証明書ＣＲ’）の少なくとも一方を保持している。
【０１７８】
図１９に示す解決形態においては、サポート装置５００からセーフティユニット３００へのセーフティプログラムＳＰＧの転送、および、セーフティユニット３００からサポート装置５００へのハッシュ値ＨＳの転送（照合）のいずれにおいても、鍵を用いた暗号化が利用される。以下、リモートメンテナンスにおけるセーフティプログラムＳＰＧの転送に係る具体的な手順例を示す。すなわち、サポート装置５００は、メンテナンスに必要なデータとしてセーフティプログラムＳＰＧを送信する。
【０１７９】
まず、転送処理において、サポート装置５００は、セーフティプログラムＳＰＧから予め定められたアルゴリズムに従ってハッシュ値ＨＳを算出する（（１）ハッシュ計算）。続いて、サポート装置５００は、自装置の秘密鍵ＳＫ’で算出したハッシュ値ＨＳを暗号化して暗号化済みハッシュ値ＳＨＳを生成する（（２）秘密鍵暗号化）。そして、サポート装置５００は、セーフティプログラムＳＰＧおよび対応する暗号化済みハッシュ値ＳＨＳをセーフティシステム１（中継ユニット２００）へ転送する（（３）転送）。
【０１８０】
次に、検証処理において、中継ユニット２００は、転送路上でのセーフティプログラムＳＰＧの改ざんの有無を検証する（（４）検証処理）。より具体的には、中継ユニット２００は、受信した転送データに含まれるセーフティプログラムＳＰＧからハッシュ値ＨＳを算出する。また、中継ユニット２００は、受信した転送データに含まれる暗号化済みハッシュ値ＳＨＳをサポート装置５００の公開鍵ＰＫ’でハッシュ値ＨＳに復号する。そして、サポート装置５００は、算出したハッシュ値ＨＳと復号したハッシュ値ＨＳとの同一性を検証する。
【０１８１】
上述したように、検証処理においては、サポート装置５００は、セーフティプログラムＳＰＧから算出されるハッシュ値ＨＳを自装置の秘密鍵ＳＫ’で暗号化して中継ユニット２００へ送信する。一方、中継ユニット２００は、サポート装置５００から受信したセーフティプログラムＳＰＧから算出したハッシュ値ＨＳと、サポート装置５００から受信した暗号化済みハッシュ値ＳＨＳを公開鍵ＰＫ’で復号して得られた結果とが一致しているか否かを判断する。
【０１８２】
このようなハッシュ値同士の検証によって、サポート装置５００からセーフティシステム１（中継ユニット２００）へ転送された転送データが改ざんされていないことを保証できる。同時に、転送データの送信者のなりすましを防止できる。
【０１８３】
検証処理においてハッシュ値ＨＳの同一性が確認されると、セーフティプログラムＳＰＧが中継ユニット２００からセーフティユニット３００へ転送される（（５）転送）。
【０１８４】
サポート装置５００での照合に先立って、サポート装置５００は、ワンタイム鍵として共通鍵ＴＣＫ’を生成し（（６）ワンタイム鍵生成（照合用））、自装置の秘密鍵ＳＫ’で生成した共通鍵ＴＣＫ’を暗号化することで、暗号化済み共通鍵ＳＴＣ’が生成される（（７）秘密鍵暗号化）。そして、サポート装置５００は、生成した暗号化済み共通鍵ＳＴＣ’を中継ユニット２００へ転送する。
【０１８５】
中継ユニット２００は、受信した暗号化済み共通鍵ＳＴＣ’をサポート装置５００の公開鍵ＰＫ’で共通鍵ＴＣＫ’に復号する（（９）公開鍵復号化）。
【０１８６】
さらに、中継ユニット２００は、受信したセーフティプログラムＳＰＧのハッシュ値ＨＳを算出する（（１０）ハッシュ値計算）。そして、中継ユニット２００は、先に復号した共通鍵ＴＣＫ’で算出したハッシュ値ＨＳを暗号化して暗号化済みハッシュ値ＳＨＳを生成する（（１１）共通鍵暗号化）。中継ユニット２００が生成した暗号化済みハッシュ値ＳＨＳをサポート装置５００へ転送すると、サポート装置５００は、暗号化済みハッシュ値ＳＨＳを共通鍵ＴＣＫ’でハッシュ値ＨＳに復号する（（１２）ハッシュ値転送＆共通鍵復号化）。
【０１８７】
また、サポート装置５００は、自装置が保持しているセーフティプログラムＳＰＧのハッシュ値ＨＳを算出する（（１３）ハッシュ値計算）。最終的に、サポート装置５００は、自装置が保持しているセーフティプログラムＳＰＧのハッシュ値ＨＳと、中継ユニット２００から受信したハッシュ値ＨＳとの一致を判断する（（１４）照合）。両者が一致していれば、照合成功となる。
【０１８８】
ここで、一例として、セーフティユニット３００へ転送されたセーフティプログラムＳＰＧが悪意あるプログラムＳＰＧ＃に改ざんされた場合を想定する。この場合、中継ユニット２００は、悪意あるプログラムＳＰＧ＃からハッシュ値ＨＳ＃が算出される。そして、ハッシュ値ＨＳ＃は、共通鍵ＴＣＫ’により暗号化済みハッシュ値ＳＨＳ＃に暗号化されてサポート装置５００へ転送される。このように、共通鍵ＴＣＫ’により暗号化されたデータが転送されるので、セーフティユニット３００からサポート装置５００への転送路上において暗号化済みハッシュ値ＳＨＳ＃を改ざんすることはできない。転送路上において何らかの改ざんがなされると、サポート装置５００での復号ができなくなるからである。
【０１８９】
上述したように、照合処理においては、中継ユニット２００は、サポート装置５００から受信したセーフティプログラムＳＰＧから算出されるハッシュ値ＨＳを暗号化して、サポート装置５００へ送信する。サポート装置５００は、中継ユニット２００から受信した暗号化済みハッシュ値ＳＨＳを復号して得られる結果と、セーフティプログラムＳＰＧから算出されるハッシュ値ＨＳとが一致しているか否かを判断する。
【０１９０】
なお、サポート装置５００から中継ユニット２００へセーフティプログラムＳＰＧおよび対応する暗号化済みハッシュ値ＳＨＳを転送する処理（（３）転送）において、上述の図１２において説明したような共通鍵ＴＣＫを用いるようにしてもよい。共通鍵ＴＣＫを用いることで、暗号強度を高めることができる。
【０１９１】
図２０は、図１９に示すリモートメンテナンスにおける処理手順を示すシーケンス図である。図２０を参照して、サポート装置５００は、オペレータによる転送先の選択および転送の操作を受け付けると（シーケンスＳＱ３００）、セーフティプログラムＳＰＧから予め定められたアルゴリズムに従ってハッシュ値ＨＳを算出する（シーケンスＳＱ３０２）。続いて、サポート装置５００は、自装置の秘密鍵ＳＫ’で算出したハッシュ値ＨＳを暗号化して暗号化済みハッシュ値ＳＨＳを生成する（シーケンスＳＱ３０４）。そして、サポート装置５００は、セーフティプログラムＳＰＧおよび対応する暗号化済みハッシュ値ＳＨＳを中継ユニット２００へ転送する（シーケンスＳＱ３０６）。
【０１９２】
中継ユニット２００は、受信した転送データに含まれるセーフティプログラムＳＰＧからハッシュ値ＨＳを算出する（シーケンスＳＱ３０８）。また、中継ユニット２００は、受信した転送データに含まれる暗号化済みハッシュ値ＳＨＳをサポート装置５００の公開鍵ＰＫ’でハッシュ値ＨＳに復号する（シーケンスＳＱ３１０）。そして、サポート装置５００は、算出したハッシュ値ＨＳと復号したハッシュ値ＨＳとの同一性を検証する（シーケンスＳＱ３１２）。中継ユニット２００は、ハッシュ値ＨＳの同一性が確認されると、セーフティプログラムＳＰＧをセーフティユニット３００へ転送する（シーケンスＳＱ３１４）。
【０１９３】
サポート装置５００は、ワンタイム鍵として共通鍵ＴＣＫ’を生成する（シーケンスＳＱ３２０）。続いて、サポート装置５００は、自装置の秘密鍵ＳＫ’で生成した共通鍵ＴＣＫ’を暗号化することで、暗号化済み共通鍵ＳＴＣ’を生成する（シーケンスＳＱ３２２）。そして、サポート装置５００は、生成した暗号化済み共通鍵ＳＴＣ’を中継ユニット２００へ転送する（シーケンスＳＱ３２４）。
【０１９４】
中継ユニット２００は、受信した暗号化済み共通鍵ＳＴＣ’をサポート装置５００の公開鍵ＰＫ’で共通鍵ＴＣＫ’に復号する（シーケンスＳＱ３２６）。そして、中継ユニット２００は、受信したセーフティプログラムＳＰＧのハッシュ値ＨＳを算出する（シーケンスＳＱ３２８）。さらに、中継ユニット２００は、先に復号した共通鍵ＴＣＫ’で算出したハッシュ値ＨＳを暗号化して暗号化済みハッシュ値ＳＨＳを生成する（シーケンスＳＱ３３０）。続いて、中継ユニット２００は、生成した暗号化済みハッシュ値ＳＨＳをサポート装置５００へ転送する（シーケンスＳＱ３３２）。
【０１９５】
サポート装置５００は、暗号化済みハッシュ値ＳＨＳを共通鍵ＴＣＫ’でハッシュ値ＨＳに復号する（シーケンスＳＱ３３４）。そして、サポート装置５００は、自装置が保持しているセーフティプログラムＳＰＧのハッシュ値ＨＳを算出する（シーケンスＳＱ３３６）。最終的に、サポート装置５００は、自装置が保持しているセーフティプログラムＳＰＧのハッシュ値ＨＳと、中継ユニット２００から受信したハッシュ値ＨＳとの一致を判断する（シーケンスＳＱ３３８）。
【０１９６】
上述したように、サポート装置５００に関連付けられた鍵ペア（秘密鍵ＳＫ’および公開鍵ＰＫ’）を利用することで、書き換えたファイルの同一性を保証することができる（要件４）とともに、メンテナンスを行うオペレータの権限を保証することができる（要件１）。
【０１９７】
＜Ｉ．時限式の公開鍵＞
一般的に、鍵の強度は使用期間に応じて変化し得る。鍵の有効期限が長いほど、鍵の強度は低下して、セキュリティリスク（鍵が盗聴される、あるいは解読されるなど）が増大し得る。そこで、時限式の鍵を採用することで、セキュリティリスクを低減できる。
【０１９８】
図２１は、本実施の形態に従うセーフティシステム１における公開鍵の有効期限の設定例を示す図である。図２１に示すように、例えば、セーフティシステム１には、各種保守作業を担当する保守員およびセーフティを統括する責任者などが想定される。
【０１９９】
保守員は、何らかの問題があった場合にリモートメンテナンスを行えるように、問題発生毎に一時的に付与されるような短い有効期限が設定される。一方、責任者は、セーフティシステム１を逐次管理する必要があるので、長い有効期限が設定される。但し、セキュリティリスクを増大させないために、秘密鍵は共通化することが好ましい。
【０２００】
図２２は、本実施の形態に従うセーフティシステム１に対するサポート装置５００からのリモートメンテナンスのさらに別の一形態を説明するための図である。図２２を参照して、リモートメンテナンスのためのサポート装置５００に対して、ある限られた期間だけ有効な公開鍵ＰＫ１を一時的に発行するような構成を採用してもよい。
【０２０１】
図２１に示すセーフティシステム１には、現場のオペレータの操作を受け付ける表示操作装置６００が接続されている。現場のオペレータは、対象の設備および作業員の安全を確認した後、表示操作装置６００を操作して、一時的にリモートメンテナンスを可能にするための操作を行う。この操作によって、例えば、３０分の間だけ、サポート装置５００からセーフティユニット３００に対して、セーフティプログラムＳＰＧを転送できるようになる。
【０２０２】
より具体的には、表示操作装置６００は、この操作に応答して、ワンタイム公開鍵生成要求をセーフティシステム１（中継ユニット２００）へ出力する。中継ユニット２００は、ワンタイム公開鍵生成要求に応答して、秘密鍵ＳＫ１に基づいて公開鍵ＰＫ１を生成するとともに、当該生成した公開鍵ＰＫ１をサポート装置５００へインストールする。
【０２０３】
サポート装置５００においては、公開鍵ＰＫ１を用いることで、セーフティシステム１に対するリモートメンテナンス（典型的には、セーフティプログラムＳＰＧの転送など）を行うことができる。このとき、公開鍵ＰＫ１に対しては、比較的短い有効期限（例えば、３０分）が設定される。このように、セーフティシステム１の中継ユニット２００は、外部からの要求に応答して、公開鍵ＰＫ１に対して予め有効期限を定めた上で、公開鍵ＰＫ１をサポート装置５００へ与える。
【０２０４】
上述したように、秘密鍵ＳＫ１および公開鍵ＰＫ１を用いることで、要件３である「書き換え対象デバイスがユニークに識別できること」を実現できる。さらに、現場のオペレータが表示操作装置６００を操作することで、リモートメンテナンスが可能になる構成を採用することで、要件５である「現場の作業者が安全であること」をより確実に実現できる。
【０２０５】
図２３は、図２２に示すサポート装置５００からのリモートメンテナンスの別形態を説明するための図である。図２３に示すように、セーフティユニット３００には、ライトカーテンなどのセーフティデバイス３８０からの信号が入力される。このような構成において、ライトカーテンが何らかの侵入者を検知して、セーフティユニット３００が何らかのセーフティアクションを実行するようになると、サポート装置５００からのリモートメンテナンスを禁止するようにしてもよい。
【０２０６】
すなわち、セーフティユニット３００が何らかのセーフティアクションを実行している期間においては、当該セーフティアクションの実行を中断させるような、セーフティプログラムＳＰＧの書き換えなどを禁止することが好ましいからである。
【０２０７】
具体的には、セーフティデバイス３８０からの信号を受けて、セーフティユニット３００が何らかのセーフティアクションを開始すると、中継ユニット２００に対してアクセス無効要求を送信してもよい。
【０２０８】
アクセスの無効化を実現する方法として、公開鍵失効リストＩＮＬを用いてもよい。公開鍵失効リストＩＮＬにいずれかの公開鍵が登録されると、当該登録された公開鍵は、たとえ有効期限内であっても、無効化される。すなわち、公開鍵失効リストＩＮＬに登録された公開鍵を用いて、サポート装置５００かリモートメンテナンスを行うことはできなくなる。
【０２０９】
なお、公開鍵失効リストＩＮＬについては、中継ユニット２００が保持するようにしてもよいし、セーフティシステム１外の認証局などが保持するようにしてもよい。
【０２１０】
このような公開鍵失効リストＩＮＬを用いることで、セーフティシステム１に対してリモートメンテナンスを行うことができる権限を制約して、セキュリティ強度を高めることができる。
【０２１１】
図２４は、図２２に示すサポート装置５００からのリモートメンテナンスのさらに別形態を説明するための図である。図２４に示すように、例えば、サポート装置５００を操作してリモートメンテナンスを行うオペレータと、現場のオペレータとが電話などのセキュアなコミュニケーション手段でパスワードを共有し、それぞれサポート装置５００および表示操作装置６００に対して、認証パスワードＡＴＰを入力する。
【０２１２】
サポート装置５００においては、入力された認証パスワードＡＴＰを公開鍵ＰＫ１で暗号化して暗号化済み認証パスワードＳＡＴを生成する。暗号化済み認証パスワードＳＡＴは、暗号化済みセーフティプログラムＳＳＰとともに、転送データとしてセーフティシステム１へ転送される。
【０２１３】
一方、表示操作装置６００は、入力された認証パスワードＡＴＰをセーフティシステム１（中継ユニット２００）へ送信する。中継ユニット２００は、サポート装置５００からの転送データに含まれる暗号化済み認証パスワードＳＡＴを復号するとともに、表示操作装置６００から受信した認証パスワードＡＴＰと一致しているか否かを照合する。この認証パスワードＡＴＰの照合が成功した場合に限って、サポート装置５００からのリモートメンテナンスを有効化する。
【０２１４】
このように、サポート装置５００を操作してリモートメンテナンスを行うオペレータと、現場のオペレータとが連絡を取り合うことで、要件５である「現場の作業者が安全であること」をより確実に実現できる。さらに、オペレータ同士が共有する認証パスワードＡＴＰを用いることで、セキュリティ強度をより高めることもできる。すなわち、中継ユニット２００からサポート装置５００へ提供した公開鍵ＰＫが盗聴されたとしても、認証パスワードＡＴＰにより不正なリモートメンテナンスの実施を禁止できる。
【０２１５】
＜Ｊ．その他の形態＞
上述の実施の形態においては、セーフティプログラムＳＰＧを実行するセーフティユニット３００と、サポート装置５００との間でデータを遣り取りする中継ユニット２００とは独立したユニットからなるシステムについて例示した。このような中継ユニット２００とセーフティユニット３００とを別体とした場合には、既存のシステムに対して、中継ユニット２００を追加することで、上述したようなリモートメンテナンスを容易に実現できる。
【０２１６】
但し、必ずしも、中継ユニット２００とセーフティユニット３００とを別体にする必要はなく、両者を一体化した構成を採用してもよい。さらに、制御ユニット１００と、中継ユニット２００と、セーフティユニット３００とのすべてを一体化した構成を採用してもよい。この場合には、筐体をコンパクト化できるなどの利点がある。
【０２１７】
図２５は、本実施の形態に従うセーフティシステム１の構成の変形例を示す模式図である。図２５には、制御ユニット１００、中継ユニット２００およびセーフティユニット３００の一部または全部が一体化された構成例を示す。
【０２１８】
図２５（Ａ）に示されるセーフティシステム１Ａは、制御ユニット１００およびセーフティユニット３００を一体化した統合ユニット５０Ａと、中継ユニット２００とから構成される。すなわち、セーフティシステム１Ａの統合ユニット５０Ａにおいては、標準制御およびセーフティ制御が同一のユニット内で実行される。
【０２１９】
図２５（Ｂ）に示されるセーフティシステム１Ｂは、中継ユニット２００および制御ユニット１００を一体化した統合ユニット５０Ｂと、セーフティユニット３００とから構成される。すなわち、セーフティシステム１Ｂの統合ユニット５０Ｂにおいては、他の装置との間の通信処理および標準制御が同一のユニット内で実行される。
【０２２０】
図２５（Ｃ）に示されるセーフティシステム１Ｃは、制御ユニット１００、中継ユニット２００およびセーフティユニット３００を一体化した統合ユニット５０Ｃから構成される。すなわち、セーフティシステム１Ｃの統合ユニット５０Ｃにおいては、他の装置との間の通信処理、標準制御およびセーフティ制御が同一のユニット内で実行される。
【０２２１】
このように、制御ユニット１００、中継ユニット２００およびセーフティユニット３００が担当する機能および処理の実装形態はどのようなものであってもよい。さらに、制御ユニット１００、中継ユニット２００およびセーフティユニット３００が担当する機能の一部同士を共通の処理ユニットに実装してもよい。
【０２２２】
＜Ｋ．付記＞
上述したような本実施の形態は、以下のような技術思想を含む。
［構成１］
セーフティプログラム（ＳＰＧ）に従ってセーフティ制御を実行する処理実行部（３００）と、
前記処理実行部と直接的に接続されるとともに、前記処理実行部が保持する前記セーフティプログラムに対する外部アクセスを仲介する通信部（２００）と、
前記通信部とネットワーク接続するとともに、ユーザ操作に従って、前記セーフティプログラムに対する追加または変更を含むメンテナンスを実行するサポート装置（５００）とを備え、
前記サポート装置および前記通信部は、予め取り交わされた情報（ＳＫ，ＰＫ，ＣＲ）で両者を特定し、前記メンテナンスに必要なデータを遣り取りする、セーフティシステム。
［構成２］
前記通信部は、前記予め取り交わされた情報の少なくとも一部として、鍵（ＳＫ）を保持しており、
前記サポート装置は、前記通信部が当該鍵で復号可能なように、前記メンテナンスに必要なデータを暗号化して、前記通信部へ転送する、構成１に記載のセーフティシステム。
［構成３］
前記通信部は、前記鍵として第１の秘密鍵（ＳＫ）を保持しており、
前記サポート装置は、前記第１の秘密鍵と対にある第１の公開鍵（ＰＫ）、および、前記第１の公開鍵に対して発行された第１の電子証明書（ＣＲ）の少なくとも一方を保持している、構成２に記載のセーフティシステム。
［構成４］
前記通信部は、前記サポート装置から転送されたデータを前記第１の秘密鍵（ＳＫ）で復号できた場合に、当該復号したデータを前記処理実行部へ転送する、構成３に記載のセーフティシステム。
［構成５］
前記通信部は、外部からの要求に応答して、前記第１の公開鍵（ＰＫ）に対して予め有効期限を定めた上で、当該第１の公開鍵（ＰＫ）を前記サポート装置へ与える、構成３または４に記載のセーフティシステム。
［構成６］
前記サポート装置は、前記第１の秘密鍵（ＳＫ）と対にある第１の公開鍵（ＰＫ）に対して発行された第１の電子証明書（ＣＲ）を保持しており、前記第１の電子証明書は、前記処理実行部を識別するための識別情報（ＳＲＮ）を含んでおり、
前記サポート装置は、前記メンテナンスに必要なデータの送信前に、前記通信部を介して取得した前記処理実行部の識別情報（ＳＲＮ）と、前記第１の電子証明書に含まれる識別情報（ＳＲＮ）とが一致しているか否かを判断する、構成３〜５のいずれか１項に記載のセーフティシステム。
［構成７］
前記サポート装置は、前記通信部を介して取得した前記処理実行部の識別情報（ＳＲＮ）と、前記第１の電子証明書（ＣＲ）に含まれる識別情報（ＳＲＮ）とが一致していることを条件に、前記メンテナンスに必要なデータを前記通信部へ送信する、構成６に記載のセーフティシステム。
［構成８］
前記サポート装置は、
前記メンテナンスに必要なデータを送信する必要がある場合に、ワンタイム鍵である第３の鍵（ＴＣＫ）を生成し、
前記第３の鍵（ＴＣＫ）で前記メンテナンスに必要なデータを暗号化するとともに、前記通信部が前記鍵で復号可能なように前記第３の鍵を暗号化して、前記通信部へ送信する、構成３〜７のいずれか１項に記載のセーフティシステム。
［構成９］
前記サポート装置は、前記メンテナンスに必要なデータとして前記セーフティプログラム（ＳＰＧ）を送信するように構成されており、
前記サポート装置は、第２の秘密鍵（ＳＫ’）を保持しており、
前記通信部は、前記第２の秘密鍵と対にある第２の公開鍵（ＰＫ’）、および、前記第２の公開鍵に対して発行された第２の電子証明書（ＣＲ’）の少なくとも一方を保持しており、
前記サポート装置は、前記セーフティプログラムから算出される第１のハッシュ値（ＨＳ）を前記第２の秘密鍵で暗号化して前記通信部へ送信し、
前記通信部は、前記サポート装置から受信したセーフティプログラムから算出した第２のハッシュ値（ＨＳ）と、前記サポート装置から受信した暗号化された前記第１のハッシュ値を前記第２の公開鍵で復号して得られた結果とが一致しているか否かを判断する、構成１〜８のいずれか１項に記載のセーフティシステム。
［構成１０］
前記通信部は、前記サポート装置から受信したセーフティプログラムから算出される前記第２のハッシュ値（ＨＳ）を暗号化して、前記サポート装置へ送信し、
前記サポート装置は、前記通信部から受信した暗号化された前記第２のハッシュ値（ＨＳ）を復号して得られる結果と、前記セーフティプログラムから算出される第１のハッシュ値とが一致しているか否かを判断する、構成９に記載のセーフティシステム。
［構成１１］
前記処理実行部および前記通信部は、互いに独立したユニットとして構成される、構成１〜１０のいずれか１項に記載のセーフティシステム。
［構成１２］
セーフティプログラム（ＳＰＧ）に従ってセーフティ制御を実行する処理実行部（３００）を含むコントローラシステムにおけるメンテナンス方法であって、
サポート装置と通信部とをネットワーク接続するステップ（ＳＱＳＱ１０６）と、
前記サポート装置が、ユーザ操作に従って、前記セーフティプログラムに対する追加または変更を含むメンテナンスを実行するステップ（ＳＱ１０４，ＳＱ１１４）と、
前記サポート装置および前記通信部は、予め取り交わされた情報で両者を特定し、前記メンテナンスに必要なデータを遣り取りするステップ（ＳＱ１０６〜ＳＱ１１０）とを備える、メンテナンス方法。
【０２２３】
＜Ｌ．利点＞
本実施の形態に係るセーフティシステム１によれば、サポート装置５００と中継ユニット２００との間で予め取り交わされた情報（例えば、秘密鍵／公開鍵）で両者を特定する。これによって、サポート装置５００から接続先の中継ユニット２００を一意に特定できる。また、逆に、中継ユニット２００は転送元のサポート装置５００を一意に特定できる。これによって、ＩＥＣ  ６２０６１に規定される要件を満足しつつ、リモートメンテナンスを実現できる。
【０２２４】
その結果、リモートメンテナンスの効率を高めることともに、それによって、生産設備の生産性を向上させることができる。
【０２２５】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０２２６】
１，１Ａ，１Ｂ，１Ｃ，２  セーフティシステム、４  ネットワーク、１０  内部バス、１００  制御ユニット、１０２，２０２，３０２，５０２  プロセッサ、１０４，２０４，３０４  チップセット、１０６，２０６，３０６，５０４  主記憶装置、１０８，２０８，３０８，５１０  二次記憶装置、１１０，２１０  通信コントローラ、１１２  ＵＳＢコントローラ、１１４，２１４，３１４  メモリカードインターフェイス、１１５，２１５，３１５  メモリカード、１１６，１１８，１２０，２１６，２１８  ネットワークコントローラ、１２２，３２２  内部バスコントローラ、１２４，２２４，３２４  インジケータ、２００  中継ユニット、２１２，５２０  通信インターフェイス、３００  セーフティユニット、３８０  セーフティデバイス、４００  機能ユニット、４５０  電源ユニット、５０Ａ，５０Ｂ，５０Ｃ  統合ユニット、５００  サポート装置、５０６  入力部、５０８  出力部、５１２  光学ドライブ、５１４  記録媒体、５１８  プロセッサバス、５９０  シリアル番号消化処理、６００  表示操作装置、７００  情報処理装置、８００  認証局、５１０２  ＯＳ、５１０４  サポートプログラム、５１０６  プロジェクト、５１０８  標準制御ソースプログラム、５１１０，５１１２  セーフティソースプログラム、ＡＴＰ  認証パスワード、ＣＲ  サーバ証明書、ＣＲ  クライアント証明書、ＨＳ  ハッシュ値、Ｉ  ＰＣ、ＩＮＬ  公開鍵失効リスト、ＬＳ  リスト、ＰＫ，ＰＫ’，ＰＫ１  公開鍵、ＰＫ１  秘密鍵、ＳＫ，ＳＫ’，ＳＫ１，ＳＫ２  秘密鍵、ＳＡＴ  暗号化済み認証パスワード、ＳＨＳ  暗号化済みハッシュ値、ＳＰＧ  セーフティプログラム、ＳＰＧ＃  悪意あるプログラム、ＳＲＮ  シリアル番号、ＳＳＰ  暗号化済みセーフティプログラム、ＳＴＣ  暗号化済み共通鍵、ＴＣＫ  共通鍵、ＵＴ  利用者情報。
【図１】
2020120367.tif 000003
【図２】
2020120367.tif 000004
【図３】
2020120367.tif 000005
【図４】
2020120367.tif 000006
【図５】
2020120367.tif 000007
【図６】
2020120367.tif 000008
【図７】
2020120367.tif 000009
【図８】
2020120367.tif 000010
【図９】
2020120367.tif 000011
【図１０】
2020120367.tif 000012
【図１１】
2020120367.tif 000013
【図１２】
2020120367.tif 000014
【図１３】
2020120367.tif 000015
【図１４】
2020120367.tif 000016
【図１５】
2020120367.tif 000017
【図１６】
2020120367.tif 000018
【図１７】
2020120367.tif 000019
【図１８】
2020120367.tif 000020
【図１９】
2020120367.tif 000021
【図２０】
2020120367.tif 000022
【図２１】
2020120367.tif 000023
【図２２】
2020120367.tif 000024
【図２３】
2020120367.tif 000025
【図２４】
2020120367.tif 000026
【図２５】
2020120367.tif 000027