(57)【要約】【課題】シーケンス番号を用いて通信データの検証を行う情報処理システムにおいて、保守性に優れるとともに処理負荷の少ない情報処理システムを提供する。【解決手段】第１情報処理装置（通信装置２０Ａ）は、所定系列の擬似乱数を生成し、生成した擬似乱数に基づき所定手順でシーケンス番号Ｄを生成し、シーケンス番号Ｄを付した通信データ（制御情報）を第２の情報処理装置（通信装置２０Ｂ）に送信する。第２情報処理装置は、上記所定系列の擬似乱数を生成し、通信データを受信し、生成した擬似乱数に基づき所定手順でシーケンス番号Ｓを生成し、受信した通信データのシーケンス番号Ｄをシーケンス番号Ｓと照合して通信データを検証する。第１情報処理装置は、通信データを暗号化して第２の情報処理装置に送信し、第２情報処理装置は受信した通信データを復号する。【選択図】図３
2016021700.tif 000002
【特許請求の範囲】
【請求項１】
通信可能に接続する第１情報処理装置と第２情報処理装置とを含んで構成される情報処理システムであって、
前記第１情報処理装置は、
所定系列の擬似乱数を生成する第１擬似乱数生成部、
前記擬似乱数に基づき所定手順でシーケンス番号を生成する第１シーケンス番号生成部、
前記シーケンス番号を付した通信データを前記第２の情報処理装置に送信する第１通信部、
を備え、
前記第２情報処理装置は、
前記所定系列の擬似乱数を生成する第２擬似乱数生成部、
前記通信データを受信する第２通信部、
前記擬似乱数に基づき前記所定手順でシーケンス番号を生成する第２シーケンス番号生成部、
受信した前記通信データに付されているシーケンス番号を、前記第２シーケンス番号取得部が生成したシーケンス番号と照合することにより前記通信データを検証する検証部、
を備える、
情報処理システム。
【請求項２】
請求項１に記載の情報処理システムであって、
前記所定手順は、生成された複数ビット列からなる擬似乱数を所定ビット数で分割して得られる複数のビット列の夫々を前記シーケンス番号とするものである、
情報処理システム。
【請求項３】
請求項１に記載の情報処理システムであって、
前記所定手順は、生成された複数ビット列からなる擬似乱数を所定ビット数で分割し、分割して得られる複数のビット列のうちの一部を前記シーケンス番号とするものである、
情報処理システム。
【請求項４】
請求項１に記載の情報処理システムであって、
前記所定手順は、
生成された第１擬似乱数から所定範囲のビット列を取得し、
取得した前記所定範囲のビット列の各ビットの値に応じて、前記第１擬似乱数の前記所定範囲以外の範囲のビット列に基づく第２擬似乱数を生成し、
前記第２擬似乱数に基づき前記シーケンス番号を生成するものである
情報処理システム。
【請求項５】
請求項１に記載の情報処理システムであって、
前記第２シーケンス番号生成部は、前記第２擬似乱数生成部が生成した擬似乱数からシーケンス番号列を生成し、
前記検証部は、前記シーケンス番号列から所定数のシーケンス番号を取得し、受信した前記通信データに付されているシーケンス番号を、前記所定数のシーケンス番号と照合することにより前記通信データを検証する
情報処理システム。
【請求項６】
請求項１に記載の情報処理システムであって、
前記第１擬似乱数生成部及び前記第２擬似乱数生成部は、擬似乱数生成器に対して、シード、初期値、及び擬似乱数生成期の内部状態のうちの少なくともいずれかを与えることにより、前記所定系列の擬似乱数を生成する、
情報処理システム。
【請求項７】
請求項１に記載の情報処理システムであって、
前記第１情報処理装置は、前記通信データをシーケンス番号とともに暗号化して前記第２の情報処理装置に送信する暗号化処理部をさらに備え、
前記第２情報処理装置は、前記通信データをシーケンス番号とともに復号する復号処理部をさらに備える、
情報処理システム。
【請求項８】
請求項１に記載の情報処理システムであって、
前記第１シーケンス番号生成部は、シーケンス番号の生成が必要か否かの判断に用いる情報を記憶し、前記情報に基づきシーケンス番号の生成が必要と判断した場合にのみ、前記擬似乱数に基づき所定手順でシーケンス番号を生成し、
前記第１通信部は、前記シーケンス番号を付した通信データを前記第２の情報処理装置に送信し、
前記第２シーケンス番号生成部は、シーケンス番号の生成が必要か否かの判断に用いる情報を記憶し、前記情報に基づきシーケンス番号の生成が必要と判断した場合にのみ、前記擬似乱数に基づき所定手順でシーケンス番号を生成し、
前記検証部は、受信した前記通信データに付されているシーケンス番号を、前記第２シーケンス番号取得部が生成したシーケンス番号と照合することにより前記通信データを検証する
情報処理システム。
【請求項９】
請求項１に記載の情報処理システムにおける前記第１情報処理装置であって、
所定系列の擬似乱数を生成する第１擬似乱数生成部、
前記擬似乱数に基づき所定手順でシーケンス番号を生成する第１シーケンス番号生成部、
前記シーケンス番号を付した通信データを前記第２の情報処理装置に送信する第１通信部、
を備える、情報処理装置。
【請求項１０】
請求項１に記載の情報処理システムにおける前記第２情報処理装置であって、
前記所定系列の擬似乱数を生成する第２擬似乱数生成部、
前記通信データを受信する第２通信部、
前記擬似乱数に基づき前記所定手順でシーケンス番号を生成する第２シーケンス番号生成部、
受信した前記通信データに付されているシーケンス番号を、前記第２シーケンス番号取得部が生成したシーケンス番号と照合することにより前記通信データを検証する検証部、
を備える、情報処理装置。
【請求項１１】
通信可能に接続する第１情報処理装置と第２情報処理装置とを含んで構成される情報処理システムの制御方法であって、
前記第１情報処理装置が、
所定系列の擬似乱数を生成するステップ、
前記擬似乱数に基づき所定手順でシーケンス番号を生成するステップ、
前記シーケンス番号を付した通信データを前記第２の情報処理装置に送信するステップと、
前記第２情報処理装置が、
前記所定系列の擬似乱数を生成するステップ、
前記通信データを受信するステップ、
前記擬似乱数に基づき前記所定手順でシーケンス番号を生成するステップ、
受信した前記通信データに付されているシーケンス番号を、生成したシーケンス番号と照合することにより前記通信データを検証するステップ、
を含む、
情報処理システムの制御方法。
【請求項１２】
請求項１１に記載の情報処理システムの制御方法であって、
前記所定手順は、生成された複数ビット列からなる擬似乱数を所定ビット数で分割して得られる複数のビット列の夫々を前記シーケンス番号とするものである、
情報処理システムの制御方法。
【請求項１３】
請求項１１に記載の情報処理システムの制御方法であって、
前記所定手順は、生成された複数ビット列からなる擬似乱数を所定ビット数で分割し、分割して得られる複数のビット列のうちの一部を前記シーケンス番号とするものである、
情報処理システムの制御方法。
【請求項１４】
請求項１１に記載の情報処理システムの制御方法であって、
前記所定手順は、
生成された第１擬似乱数から所定範囲のビット列を取得し、
取得した前記所定範囲のビット列の各ビットの値に応じて、前記第１擬似乱数の前記所定範囲以外の範囲のビット列に基づく第２擬似乱数を生成し、
前記第２擬似乱数に基づき前記シーケンス番号を生成するものである
情報処理システムの制御方法。
【請求項１５】
請求項１１に記載の情報処理システムの制御方法であって、
前記第２情報処理装置が、
生成した前記擬似乱数からシーケンス番号列を生成するステップ、
前記シーケンス番号列から所定数のシーケンス番号を取得し、受信した前記通信データに付されているシーケンス番号を、前記所定数のシーケンス番号と照合することにより前記通信データを検証するステップ、
をさらに含む、
情報処理システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理装置、及び情報処理システムの制御方法に関する。
【背景技術】
【０００２】
鉄道、電力、水道、ガスといった重要な社会インフラを支えている制御系の情報処理システム（以下、制御系システムとも称する。）は、従来、閉じた通信ネットワーク内に構築され、また専用のＯＳ（Operating System）や通信プロトコルが用いられてきた。そのため、早期にネットワーク化やオープン化が進展した情報処理システムとは異なり、制御系システムは、ウィルスによる攻撃等の脅威に晒される機会が少なく、比較的安全であるとされてきた。
【０００３】
しかし、昨今、制御系システムについても、インターネット等のオープンなネットワークに接続する機会が増加している。また制御系システムを構成する通信機器への汎用ＯＳの導入も進んでいる。さらにスタックスネット（Stuxnet）等の制御系システムを攻撃対象としたウィルスの出現も報告されている。こうした状況に鑑み、制御系システムの分野においても、適切なセキュリティ技術の導入の必要性が高まっている。
【０００４】
制御系システムにおける脅威として、近年、攻撃者が通信ネットワークを流れるパケットを取得し、これを再送するいわゆるリプレイ攻撃（再送攻撃）が問題となっている。リプレイ攻撃が行われると制御系システムが不正に動作し、現場の作業者に危険が及ぶ可能性がある。
【０００５】
このリプレイ攻撃に対する対策手段として、以下の特許文献１、非特許文献１の先行技術によるシーケンス番号を付与する方法が知られている。
このうち特許文献１には、パイプライン構成でＩＰＳｅｃ機能を実現するＶＰＮ装置において、性能を劣化することなくリプレイ攻撃を完全に遮断するＶＰＮ装置を提供するため、ＶＰＮ装置が、ＩＰＳｅｃに基づくシーケンス番号が予め定められ認証対象となる入力パケットを入力し、入力パケットのシーケンス番号に基づき入力パケットを通過させるか判定し、通過させると判定した場合に入力パケットを通過させ、通過した入力パケットを入力して認証し、認証の結果、合格と認証した場合に、入力パケットを認証合格パケットとして通過させ、通過した認証合格パケットを入力し、入力した認証合格パケットをそのシーケンス番号に基づき通過させるか判定し、通過させると判定した場合に認証合格パケットを通過させることが記載されている。
また非特許文献１には、ＴＣＰ／ＩＰのＴＣＰ接続において、初期シーケンス番号として乱数を採用し、上記番号の予測困難性を確保することが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７‐１３５１３７号公報
【非特許文献】
【０００７】
【非特許文献１】S.M.Bellovin,Security Problems in the TCP/IP Protocol Suite,Computer Communication Review,Vol.19,No.2,April,1989.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、制御系システムにおいては、ミリ秒（ｍｓｅｃ）単位の周期で送信元から送信先に制御情報等の通信データが送信される、いわゆる短周期処理が行われていることが少なくない。ここで例えば、制御系システムにおける通信データに、その毎回の送信時に値を１ずつ増加させるインクリメント方式でシーケンス番号を付与する構成とした場合、特許文献１におけるＩＰＳｅｃ等の従来の暗号プロトコルの仕様はシーケンス番号のデータサイズに関して次のような課題がある。
【０００９】
まずシーケンス番号のデータサイズが小さい（例えば３２ビット）場合、シーケンス番号を短期間で使い切ってしまうため（例えば、通信データの送信周期が１ｍｓｅｃでデータサイズが３２ビットである場合は５０日）、暗号／ＭＡＣ（Message Authentication Code）単体としては暗号鍵の更新時期が到来していない（安全性を確保可能な状態である）にも拘わらず、リプレイ攻撃を防ぐために暗号鍵の更新を余儀なくされる。制御系システムは連続稼動が要求されることが多いが、暗号鍵の更新は保守作業等で機器の動作を停止させている期間に迅速に行う必要があり、保守員等の負担が高まる。
【００１０】
またシーケンス番号のデータサイズが大きい（例えば６４ビット）場合、通信データの生成、送信、受信、受信後の処理等に要する時間が長くなり、通信データの検証のための処理を送信周期内に終えることができない場合が生じる可能性がある。さらに、非特許文献１に記載の技術では、送信側装置と受信側装置が予め同一のシード（暗号学的擬似乱数生成器の入力）を保持し、送信側装置から送信されるデータに付与された擬似乱数の初期シーケンス番号を受信側装置もシードから生成することができるため、一致しなければデータを受け付けない、という処理になる。そのため、非特許文献１の技術を、暗号プロトコルのシーケンス番号付与で利用した場合、システムを停めることが許される可能性がある情報系システムには適しているものの、通信ノイズの影響を比較的受けやすい制御システムにおいて、暗号プロトコルに対するリプレイ対策として単純適用すると連続稼動に影響を及ぼしてしまうという課題がある。
【００１１】
本発明は、こうした背景に鑑みてなされたものであり、シーケンス番号を用いて通信データの検証を行う情報処理システムにおいて、保守性に優れるとともに処理負荷の少ない情報処理システムを実現することを目的としている。
【課題を解決するための手段】
【００１２】
上記目的を達成するための本発明のうちの一つは、通信可能に接続する第１情報処理装置と第２情報処理装置とを含んで構成される情報処理システムであって、前記第１情報処理装置は、所定系列の擬似乱数を生成する第１擬似乱数生成部、前記擬似乱数に基づき所定手順でシーケンス番号を生成する第１シーケンス番号生成部、前記シーケンス番号を付した通信データを前記第２の情報処理装置に送信する第１通信部、を備え、前記第２情報処理装置は、前記所定系列の擬似乱数を生成する第２擬似乱数生成部、前記通信データを受信する第２通信部、前記擬似乱数に基づき前記所定手順でシーケンス番号を生成する第２シーケンス番号生成部、受信した前記通信データに付されているシーケンス番号を、前記第２シーケンス番号取得部が生成したシーケンス番号と照合することにより前記通信データを検証する検証部を備える。
【００１３】
その他、本願が開示する課題、及びその解決方法は、発明を実施するための形態の欄、及び図面により明らかにされる。
【発明の効果】
【００１４】
本発明によれば、シーケンス番号を用いて通信データの検証を行う情報処理システムにおいて、保守性に優れるとともに処理負荷の少ない情報処理システムを実現することができる。
【図面の簡単な説明】
【００１５】
【図１】情報処理システム１の概略的な構成を示す図である。
【図２】監視制御装置１０、通信装置２０Ａ、及び通信装置２０Ｂの実現に用いる情報処理装置（コンピュータ）のハードウェアの一例である。
【図３】制御情報送受信処理Ｓ３００を説明するフローチャートである。
【図４】シーケンス番号生成処理Ｓ２１１，Ｓ３１１を説明するフローチャートである。
【図５】擬似乱数列をシーケンス番号列に変換する処理Ｓ４１３を説明するフローチャートである。
【図６】実施例１の変換関数Ｔを説明するフローチャートである。
【図７】シーケンス番号検証処理Ｓ３１５を説明するフローチャートである。
【図８】暗号化処理Ｓ２１４を説明するフローチャートである。
【図９】実施例２の変換関数Ｔを説明するフローチャートである。
【図１０】実施例３の変換関数Ｔを説明するフローチャートである。
【図１１】図１０の変換関数Ｔの一態様を説明するフローチャートである。
【図１２】実施例４における通信システム１２００の概略的な構成を示す図である。
【発明を実施するための形態】
【００１６】
以下、実施形態について図面とともに詳細に説明する。尚、以下の説明において、符号の一部を構成しているアルファベットの表記を省略することにより、共通の構成を備える装置を総称することがある（例えば、「通信装置２０Ａ」と「通信装置２０Ｂ」を「通信装置２０」と総称する場合等）。
【実施例１】
【００１７】
図１に制御系システムの一例として示す情報処理システム１の概略的な構成を示している。同図に示すように、情報処理システム１は、監視制御装置１０、通信装置２０（通信装置２０Ａ（第１情報処理装置），通信装置２０Ｂ（第２情報処理装置））、Ｉ／Ｏ装置４０（Ｉ／Ｏ装置４０Ａ，Ｉ／Ｏ装置４０Ｂ）を含む。監視制御装置１０及び通信装置２０は、インターネット等の通信ネットワーク５０を介して互いに通信可能に接続している。通信装置２０Ａには、通信路６０Ａを介してＩ／Ｏ装置４０Ａが通信可能に接続している。通信装置２０Ｂには、通信路６０Ｂを介してＩ／Ｏ装置４０Ｂが通信可能に接続している。尚、同図に示す情報処理システム１の構成は一例に過ぎず、情報処理システム１は、監視制御装置１０、通信装置２０、及びＩ／Ｏ装置４０の各構成をさらに多く含んでいてもよい。通信路６０は、例えば、ＬＡＮ（Local Area Network）、ＵＳＢ（Universal Serial Bus）、ＲＳ−２３２Ｃ等である。
【００１８】
監視制御装置１０は、通信装置２０、Ｉ／Ｏ装置４０、及びこれら各装置間で行われる通信の監視や制御を行う。上記監視に際し、監視制御装置１０は、通信ネットワーク５０を介して通信装置２０から送られてくる監視情報（通信装置２０やＩ／Ｏ装置４０の稼働状態や稼働環境、通信ネットワーク５０や通信路６０の通信状況等に関する情報）を受信する。また上記制御に際し、監視制御装置１０は、通信ネットワーク５０を介して通信装置２０に制御情報（Ｉ／Ｏ装置４０を制御するための情報）（通信データ）を送信する。
【００１９】
通信装置２０は、通信ネットワーク５０を介して他の通信装置２０に制御情報を送信する。また通信装置２０は、通信ネットワーク５０を介して監視制御装置１０に監視情報を送信する。通信装置２０は、監視制御装置１０または他の通信装置２０から送られてくる制御情報を受信し、受信した制御情報に応じて、通信路６０を介してＩ／Ｏ装置４０に制御指示を送信する。
【００２０】
Ｉ／Ｏ装置４０は、制御対象装置４０１（アクチュエータ、制御バルブ等）及び監視情報取得装置４０２（センサ等）を備える。制御対象装置４０１は、例えば、通信装置２０からの制御情報に応じて所定の処理や動作を行う。監視情報取得装置４０２は、制御対象装置４０１の稼働状況や稼働環境、通信ネットワーク５０や通信路６０の通信状況等に関する情報を取得し、取得した情報を監視情報として通信装置２０に送信する。
【００２１】
＜情報処理装置＞
図２は、監視制御装置１０、通信装置２０Ａ、及び通信装置２０Ｂの実現に用いる情報処理装置（コンピュータ）のハードウェアの一例である。同図に示すように、この情報処理装置２００は、プロセッサ２０１、メモリ２０２、入出力装置２０３、及び通信装置２０４を備えている。これらは図示しないバス等の通信手段を介して通信可能に接続されている。
【００２２】
プロセッサ２０１は、例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）を用いて構成されている。プロセッサ２０１が、記憶装置２０２に格納されているプログラムを読み出して実行することにより、監視制御装置１０、通信装置２０Ａ、及び通信装置２０Ｂの夫々が備える機能が実現される。
【００２３】
記憶装置２０２は、プログラムやデータを記憶する装置であり、例えば、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、ＮＶＲＡＭ（Non Volatile RAM）、ハードディスクドライブ、ＳＳＤ（Solid State Drive）、光学式記憶装置等である。
【００２４】
通信装置２０４は、通信ネットワーク５０や通信路６０を介して他の装置と通信する機能を実現する通信インタフェースであり、例えば、ＮＩＣ（Network Interface Card）や各種通信規格（ＲＳ−２３２Ｃ、ＵＳＢ（Universal Serial Bus）等）に準拠した送受信装置である。
【００２５】
続いて、通信装置２０及び監視制御装置１０が備える機能について説明する。尚、通信装置２０Ａと通信装置２０Ｂは同等の機能を備えるが、説明の便宜上、以下では、通信装置２０Ａ（または監視制御装置１０）が通信ネットワーク５０を介して通信装置２０Ｂに制御情報を送信し、これを通信装置２０Ｂが受信してＩ／Ｏ装置４０Ｂを制御する場合を例として説明する。
【００２６】
＜通信装置２０Ａ＞
図１に示すように、通信装置２０Ａは、監視制御部２０１Ａ、暗号選択部２０２Ａ、暗復号処理部２０３Ａ（第１擬似乱数生成部、暗号化処理部）、暗号モード取得部２０４Ａ、暗号情報保管部２０５Ａ、通信部２０６Ａ（第１通信部）、シーケンス番号管理部２０７Ａ（第１シーケンス番号生成部）、シーケンス番号取得部２０８Ａ、シーケンス番号検証部２０９Ａ、及び入出力部２１０Ａを備える。これらの機能は、通信装置２０Ａのプロセッサ２０１が、通信装置２０Ａの記憶装置２０２に格納されているプログラムを読み出して実行することにより実現される。
【００２７】
監視制御部２０１Ａは、制御情報を生成して他の通信装置２０Ｂに送信する一連の処理を統括する。監視制御部２０１Ａは、制御情報の生成に際し、シーケンス番号管理部２０７Ａにシーケンス番号の生成を指示するとともに、シーケンス番号取得部２０８Ａにシーケンス番号の取得を指示する。また制御情報の生成に際し、監視制御部２０１Ａは、通信部２０６Ａから制御情報に設定する情報であるヘッダ情報（通信ネットワーク５０の通信に用いる情報）を取得する。ヘッダ情報には、制御情報の送信元を示す情報である送信元情報（例えば、送信元の通信装置２０のネットワークアドレス）、制御情報の送信先を示す情報（例えば、送信先の通信装置２０のネットワークアドレス（ＩＰアドレス等））である送信先情報、後述する暗号化の処理に関する情報（暗号アルゴリズム、鍵長、暗号利用モード、初期ベクトル等）等が含まれる。
【００２８】
監視制御部２０１Ａは、取得したヘッダ情報と制御内容を含むデータである制御データとを暗号選択部２０２Ａに渡し、暗号選択部２０２Ａから後述する平文制御データ（または制御データを暗号化したデータである暗号化制御データ）を取得する。監視制御部２０１Ａは、ヘッダ情報と、シーケンス番号取得部２０８Ａから取得されるシーケンス番号と、後述する平文制御データ（または暗号化制御データ）とを含んだ制御情報を生成し、生成した制御情報を、通信部２０６Ａを介して通信装置２０Ｂに送信する。
【００２９】
シーケンス番号管理部２０７Ａは、制御情報の送信先（送信先情報）毎の、シーケンス番号の生成に用いる付随情報の参照先を示す情報、及びシーケンス番号の生成が必要か否かの判断に用いる情報を管理（記憶）している。シーケンス番号管理部２０７Ａは、監視制御部２０１Ａからシーケンス番号の生成指示を受けると、シーケンス番号の生成が必要か否かの判断に用いる情報に基づきシーケンス番号の生成要否を判断する。シーケンス番号の生成が必要と判断した場合、シーケンス番号管理部２０７Ａは、暗号選択部２０２Ａに疑似乱数生成器のアルゴリズムの選択を指示するとともに、暗号情報保管部２０５Ａに格納されている疑似乱数のシード長情報（例えば１２８ビット等）及びシード（またはシードの付随情報）を取得する。またシーケンス番号管理部２０７Ａは、シード長情報及びシード（またはシードの付随情報）を暗復号処理部２０３Ａに渡す。シーケンス番号の生成が不要と判断した場合、シーケンス番号管理部２０７Ａはシーケンス番号の生成を行わない。尚、シーケンス番号の生成に使用するシード（または後述するAES-CTRなどの場合はカウンタ）は通信先毎に変更してもよいし、情報処理システム１で同一、または情報処理システム１の複数の装置をグルーピングし、各グループ毎にシードを共有するようにしてもよく、その実現方法は問わない。
【００３０】
シーケンス番号取得部２０８Ａは、監視制御部２０１Ａからシーケンス番号の取得を指示されると、シーケンス番号管理部２０７Ａに格納されているシーケンス番号の生成に用いる付随情報の参照先を示す情報、及び暗号情報保管部２０５Ａに格納されているシーケンス番号の生成に用いる付随情報を用いてシーケンス番号を取得し、取得したシーケンス番号を監視制御部２０１Ａに渡す。
【００３１】
暗号選択部２０２Ａは、暗号化の指示とともに監視制御部２０１Ａから受け取った制御データについて暗号化の要否を判定する。制御データについて暗号化が不要と判断する場合、暗号選択部２０２Ａは暗号化を行わずに平文の制御データ（以下、平文制御データとも称する。）を監視制御部２０１Ａに返す。一方、制御データについて暗号化が必要と判断する場合、暗号選択部２０２Ａは、暗号情報保管部２０５Ａに格納されている暗号アルゴリズム群の中から、制御情報の送信先（送信先情報）に対応する暗号アルゴリズムを取得する。また暗号選択部２０２Ａは、暗号情報保管部２０５Ａに格納されている鍵長情報（１２８ビット等）、及び、鍵データ（または鍵データの付随情報）を取得する。ここで、上記暗号アルゴリズム群は、データの暗復号化で用いるアルゴリズム（例えば、ＡＥＳ（Advanced Encryption Standard））だけでなく、改ざん検知で用いるアルゴリズム（例えば、ＨＭＡＣ（Hash-based Message Authentication Code））を含んでいてもよい。上記暗号アルゴリズム群は、疑似乱数生成器の暗号アルゴリズムを少なくとも一つ以上含んでいる。鍵データの付随情報は、例えば、ストリーム暗号方式を利用する場合であれば、擬似乱数生成器のシードと初期値とから生成された擬似乱数列である。
【００３２】
暗号選択部２０２Ａは、送信先（送信先情報）に対応する暗号利用モード（例えば、ＣＢＣ（Cipher Block Chaining）モード、ＣＴＲ（CounTeR）モード等）を選択するように暗号モード取得部２０４Ａに指示し、その結果を暗号モード取得部２０４Ａから受け取る。また暗号選択部２０２Ａは、制御データ、暗号アルゴリズム、鍵長情報、鍵データ、及び暗号利用モードを暗復号処理部２０３Ａに渡す。また暗号選択部２０２Ａは、暗復号処理部２０３Ａが制御データを暗号化処理によって暗号化したデータである暗号化制御データを監視制御部２０１Ａに渡す。また暗号選択部２０２Ａは、シーケンス番号管理部２０７Ａからアルゴリズムの選択指示を受けると、暗号情報保管部２０５Ａに格納されている暗号アルゴリズム群の中から、送信先（送信先情報）に対応する疑似乱数生成器のアルゴリズムを取得する。
【００３３】
暗復号処理部２０３Ａは、暗号選択部２０２Ａから、制御データと、暗号アルゴリズム、鍵長情報、鍵データ、及び暗号利用モードとを受け取り、暗号アルゴリズム、鍵長情報、鍵データ、及び暗号利用モードを用いて、受け取った制御データを暗号化する。このとき、暗号化の代わりにＭＡＣ（Message Authentication Code）の生成を行ってもよいし、認証暗号による暗号化（暗号化及びＭＡＣの生成）を行ってもよい。また上記の暗号化、ＭＡＣの生成、認証暗号による暗号化において、シーケンス番号は制御データに含めてもよいし、ヘッダ情報に含めてもよい。暗復号処理部２０３Ａは、シーケンス番号管理部２０７Ａから、シード長情報、シード（またはシードの付随情報）を受け取ると、擬似乱数生成器により所定系列の擬似乱数を生成してシーケンス番号を生成し、生成したシーケンス番号を暗号情報保管部２０５Ａに格納する。
【００３４】
暗号情報保管部２０５Ａは、送信先（送信先情報）毎の、暗復号処理、ＭＡＣ処理、認証暗号処理などを含む暗号処理で使用する暗号アルゴリズム群、暗号利用モード、鍵長、鍵データ、鍵の使用回数、鍵データの付随情報、及びシーケンス番号の生成に用いる付随情報を格納する。暗号情報保管部２０５Ａは、シーケンス番号の生成に際して用いる疑似乱数生成器のアルゴリズム群、疑似乱数のシード長情報（例えば１２８ビット）、及びシード（またはシードの付随情報）を取得する。ここでシードの付随情報とは、例えば、擬似乱数生成器に入力する初期値、疑似乱数生成器の内部状態に関する情報（生成済みの乱数の次以降の乱数を生成する際に必要な情報）等である。
【００３５】
通信部２０６Ａは、通信ネットワーク５０を介して他の装置(監視制御装置１０、通信装置２０等）と通信する。通信部２０６Ａは、他の装置に送信する制御情報や監視情報に設定するヘッダ情報を生成して監視制御部２０１Ａに渡す。
【００３６】
＜通信装置２０Ｂ＞
図１に示すように、通信装置２０Ｂは、監視制御部２０１Ｂ、暗号選択部２０２Ｂ、暗復号処理部２０３Ｂ（第２擬似乱数生成部、復号処理部）、暗号モード取得部２０４Ｂ、暗号情報保管部２０５Ｂ、通信部２０６Ｂ（第２通信部）、シーケンス番号管理部２０７Ｂ（第２シーケンス番号生成部）、シーケンス番号取得部２０８Ｂ、シーケンス番号検証部２０９Ｂ（検証部）、及び入出力部２１０Ｂを備える。これらの機能は、通信装置２０Ｂのプロセッサ２０１が、通信装置２０Ｂの記憶装置２０２に格納されているプログラムを読み出して実行することにより実現される。
【００３７】
監視制御部２０１Ｂは、通信装置２０Ａ（もしくは監視制御装置１０）が通信ネットワーク５０を介して送信した制御情報を受信してＩ／Ｏ装置４０Ｂを制御する一例の処理を統括する。監視制御部２０１Ｂは、制御情報を受信すると、受信した制御情報に含まれているヘッダ情報の検証を通信部２０６Ｂに指示する。ヘッダ情報が正常である場合、監視制御部２０１Ｂは、制御情報からヘッダ情報を除去することにより取得される制御データ（平文制御データまたは暗号化制御データ）を暗号選択部２０２Ｂに渡す。一方、ヘッダ情報が正常でない場合、監視制御部２０１Ｂは受信した制御情報を破棄する。
【００３８】
監視制御部２０１Ｂは、シーケンス番号管理部２０７Ｂに、後述する検証で用いるシーケンス番号の生成を指示するとともに、シーケンス番号取得部２０８Ｂにシーケンス番号の取得を指示する。監視制御部２０１Ｂは、シーケンス番号取得部２０８Ｂからシーケンス番号を受け取ると、受け取ったシーケンス番号（これをシーケンス番号Ｓとする。）と制御データ（平文制御データまたは暗号化制御データを復号した後述の復号制御データ）とをシーケンス番号検証部２０９Ｂに渡す。
【００３９】
監視制御部２０１Ｂは、シーケンス番号検証部２０９Ｂからシーケンス番号(後述するシーケンス番号Ｄ）の検証結果を受け取る。受け取った検証結果が正しい場合、監視制御部２０１Ｂは、制御データ（平文制御データまたは復号制御データ）に従ってＩ／Ｏ装置４０Ｂを制御し、検証結果が正しくない場合は、当該制御データを破棄する。
【００４０】
暗号選択部２０２Ｂは、監視制御部２０１Ｂから受け取った制御データに対し、復号の要否を判定する。復号が不要と判断する場合、暗号選択部２０２Ｂは、復号を行わずに制御データを監視制御部２０１Ｂに渡す。一方、復号が必要と判断した場合、暗号選択部２０２Ｂは、暗号情報保管部２０５Ｂに格納されている暗号アルゴリズム群の中から、ヘッダ情報の送信先情報に対応する暗号アルゴリズムを取得する。また暗号選択部２０２Ｂは、暗号情報保管部２０５Ｂに格納されている鍵長情報（例えば、１２８ビット、など）、及び鍵データ（または鍵データの付随情報）を取得する。ここで上記暗号アルゴリズム群は、データの暗復号化で用いるアルゴリズム（例えば、ＡＥＳ）だけでなく、改ざん検知で用いるアルゴリズム（例えば、ＨＭＡＣ）を含んでいてもよい。上記暗号アルゴリズム群は、疑似乱数生成器の暗号アルゴリズムを少なくとも一つ以上含んでいる。鍵データの付随情報とは、例えば、ストリーム暗号方式を利用する場合であれば擬似乱数生成器のシードと初期値から生成された擬似乱数列である。また暗号選択部２０２Ｂは、送信先（送信先情報）に対応する暗号利用モード（例えば、ＣＢＣモード、ＣＴＲモード、など）を選択するように暗号モード取得部２０４Ｂに命令し、その結果を暗号モード取得部２０４Ｂから受け取る。
【００４１】
暗号選択部２０２Ｂは、監視制御部２０１Ｂから取得した暗号化制御データと、暗号アルゴリズムと、鍵長情報と、鍵データと、暗号利用モードとを暗復号処理部２０３Ｂに渡す。暗号選択部２０２Ｂは、暗復号処理部２０３Ｂから返される、暗号化制御データを復号したデータである復号制御データを監視制御部２０１Ｂに渡す。暗号選択部２０２Ｂは、シーケンス番号管理部２０７Ｂからアルゴリズム選択の命令を受け取ると、暗号情報保管部２０５Ｂに格納されている暗号アルゴリズム群の中から、送信先（送信先情報）に対応する疑似乱数生成器のアルゴリズムを取得する。
【００４２】
暗復号処理部２０３Ｂは、暗号化制御データと、暗号アルゴリズム、鍵長情報、鍵データ、及び暗号利用モードとを暗号選択部２０２Ｂから受け取ると、暗号アルゴリズム、鍵長情報、鍵データ、暗号利用モードを用いて暗号化制御データの復号を行う。このとき、復号に代えてＭＡＣの検証を行ってもよいし、認証暗号による復号（復号及びＭＡＣの検証）を行ってもよい。
【００４３】
暗復号処理部２０３Ｂは、シーケンス番号管理部２０７Ｂからシード長情報、シードまたはシードの付随情報を受け取ると、擬似乱数生成器により所定系列の擬似乱数を生成してシーケンス番号の生成を行い、生成したシーケンス番号を暗号情報保管部２０５Ｂに格納する。
【００４４】
暗号情報保管部２０５Ｂは、送信先（送信先情報）毎の、暗復号処理、ＭＡＣの検証、認証暗号による復号で使用する暗号アルゴリズム群、暗号利用モード、鍵長、鍵データ、鍵データの付随情報、及びシーケンス番号の生成に用いる付随情報を格納する。暗号情報保管部２０５Ｂは、シーケンス番号の生成処理で使用する疑似乱数生成器のアルゴリズム群、疑似乱数のシード長情報（例えば１２８ビット）、及びシードまたはシードの付随情報を取得する。
【００４５】
通信部２０６Ｂは、通信ネットワーク５０を介して他の装置(監視制御装置１０、通信装置２０等）と通信する。通信部２０６Ｂは、監視制御部２０１Ｂからヘッダ情報の検証指示を受けると、受信した制御情報に含まれているヘッダ情報を検証し、その検証結果を監視制御部２０１Ｂに渡す。ここでヘッダ情報の検証は、例えばヘッダ情報に格納されている送信元情報（例えば送信元の通信装置２０のネットワークアドレス（ＩＰアドレス等））が、予め記憶している送信元情報の一覧に含まれているか否かを調べることにより行う。
【００４６】
シーケンス番号管理部２０７Ｂは、制御情報の送信先毎（送信先情報毎）の、シーケンス番号の生成に用いる付随情報の参照先を示す情報、シーケンス番号の生成が必要か否かの判断に用いる情報、シーケンス番号の検証に際して用いる付随情報の参照先を示す情報、及び検証するシーケンス番号の個数を示す情報を管理（記憶）している。
【００４７】
シーケンス番号管理部２０７Ｂは、監視制御部２０１Ｂからシーケンス番号の生成指示を受けると、シーケンス番号の生成が必要か否かの判断に用いる情報に基づきシーケンス番号の生成要否を判断する。シーケンス番号の生成が必要と判断した場合、シーケンス番号管理部２０７Ｂは、暗号選択部２０２Ｂに疑似乱数生成器のアルゴリズムの選択を指示するとともに、暗号情報保管部２０５Ｂに格納されている疑似乱数のシード長情報（例えば１２８ビット）及びシード（またはシードの付随情報）を取得する。またシーケンス番号管理部２０７Ｂは、シード長情報と、シード（またはシードの付随情報）を暗復号処理部２０３Ｂに渡す。シーケンス番号の生成が不要と判断した場合、シーケンス番号管理部２０７Ｂはシーケンス番号の生成を行わない。
【００４８】
シーケンス番号取得部２０８Ｂは、監視制御部２０１Ｂからシーケンス番号の取得指示を受けると、シーケンス番号管理部２０７Ｂに格納されているシーケンス番号の生成に用いる付随情報の参照先を示す情報、及び暗号情報保管部２０５Ｂに格納されているシーケンス番号の生成に用いる付随情報を用いてシーケンス番号を取得し、取得したシーケンス番号を監視制御部２０１Ｂに渡す。
【００４９】
シーケンス番号検証部２０９Ｂは、監視制御部２０１Ｂからシーケンス番号Ｓと制御データ（又復号制御データ）を受け取ると、制御データ（または復号制御データ）に含まれているシーケンス番号（これをシーケンス番号Ｄとする。）を取り出す。そして、シーケンス番号検証部２０９Ｂは、シーケンス番号Ｓとシーケンス番号Ｄとを照合することによりシーケンス番号Ｄを検証し、その結果を監視制御部２０１Ｂに返す。
【００５０】
入出力部２１０Ｂは、通信路６０を介してＩ／Ｏ装置４０と通信し、Ｉ／Ｏ装置４０への（制御データに従った）制御指示の送信やＩ／Ｏ装置４０から送られてくる監視情報の受信を行う。
【００５１】
＜監視制御装置＞
監視制御装置１０は、監視制御部１０１、暗号選択部１０２、暗復号処理部１０３、暗号モード取得部１０４、暗号情報保管部１０５、通信部１０６、シーケンス番号管理部１０７、シーケンス番号取得部１０８、シーケンス番号検証部１０９を備える。監視制御装置１０は、通信装置２０と同等の機能を備える。このうち監視制御部１０１は、通信装置２０、Ｉ／Ｏ装置４０、及びこれらの各装置間で行われる通信の監視や制御についての統括的な制御を行う。暗号選択部１０２からシーケンス番号検証部１０９までの各機能は、通信装置２０Ａまたは通信装置２０Ｂが備える同名の機能と同等であるので説明を省略する。
【００５２】
続いて、以上の構成からなる情報処理システム１において行われる処理について説明する。
【００５３】
＜制御情報送受信処理＞
まず図３に示すフローチャートとともに、通信装置２０Ａが平文制御データを暗号化して暗号化制御データを生成し、生成した暗号化制御データを含む制御情報を通信装置２０Ｂに送信し、通信装置２０Ｂが制御情報を受信して復号（復号制御データ（平文制御データ）を取得）する際の一連の処理（以下、制御情報送受信処理Ｓ３００とも称する。）について説明する。
【００５４】
制御情報送受信処理Ｓ３００は、例えば、通信装置２０Ａが制御情報を通信装置２０Ｂに送信し、通信装置２０Ｂが制御情報に含まれている制御データに従ってＩ／Ｏ装置４０を制御する一連の動作が行われる際に行われる。尚、説明の簡単化のため、以下では、通信装置２０Ａが平文制御データを暗号化して通信装置２０Ｂに送信する場合を例として説明するが、通信装置２０Ａが平文制御データの暗号化を行わずに平文制御データを通信装置２０Ｂに送信するようにしてもよいし、暗号化に代えて通信装置２０ＡがＭＡＣを生成し、通信装置２０ＢがＭＡＣの検証を行うようにしてもよい。また通信装置２０Ａと通信装置２０Ｂとの間では、認証暗号（暗号＋ＭＡＣ）を用いて制御情報を送受信する構成としてもよい。
【００５５】
また以下では通信装置２０Ａが平文制御データを暗号化した暗号化制御データにシーケンス番号を付与する場合を一例として説明するが、通信装置２０Ａがシーケンス番号を平文制御データに付与した後、シーケンス番号と平文制御データとを共に暗号化する構成としてもよい。この場合、通信装置２０Ｂは暗号化制御データを復号してからシーケンス番号を検証することになる。
【００５６】
図３に示すように、通信装置２０Ｂに制御情報を送信するタイミングが到来すると、まず通信装置２０Ａの監視制御部２０１Ａは、制御情報に付与するシーケンス番号を生成する（Ｓ２１１）。上記タイミングは、例えば、通信装置２０Ａにおいて動作するアプリケーションソフトウェア等から制御情報が出力されることにより到来する。この処理の詳細については後述する。
【００５７】
このとき、シーケンス番号管理部２０７Ａは、シーケンス番号管理部２０７Ａに格納されているシーケンス番号の生成が必要か否かを判断するための情報を参照し、シーケンス番号の生成の必要がある場合には、暗号情報保管部２０５Ａに格納されているシーケンス番号を生成するために必要な付随情報を用いてシーケンス番号列の生成処理を行い、シーケンス番号の生成が不要な場合は本処理を行わない。
【００５８】
続いて、監視制御部２０１Ａは、通信部２０６Ａからヘッダ情報を取得する（Ｓ２１２）。このとき、監視制御部２０１Ａは、暗号アルゴリズム等のヘッダ情報の生成に必要な情報を暗号選択部２０２Ａから取得し、取得した情報を通信部２０６Ａに渡す。通信部２０６Ａは上記情報に基づきヘッダ情報を生成して監視制御部２０１Ａに返す。
【００５９】
続いて、監視制御部２０１Ａは、シーケンス番号取得部２０８Ａからシーケンス番号を取得する（Ｓ２１３）。具体的には、監視制御部２０１Ａは、シーケンス番号取得部２０８Ａが暗号情報保管部２０５Ａから取得したシーケンス番号をシーケンス番号取得部２０８Ａから取得する。
【００６０】
続いて、監視制御部２０１Ａは、平文制御データを暗号選択部２０２Ａに送り、暗号選択部２０２Ａから暗号化制御データを取得する（Ｓ２１４）。
【００６１】
続いて、監視制御部２０１Ａは、Ｓ２１２で取得したヘッダ情報、Ｓ２１３で取得したシーケンス番号、及びＳ２１４で取得した暗号化制御データを含む制御情報を生成する（Ｓ２１５）。尚、生成する制御情報には改ざん検知のためのメッセージ認証子（ＭＡＣ）を付してもよい。
【００６２】
続いて、監視制御部２０１Ａは、生成した制御情報を通信部２０６Ａに渡す。これにより通信装置２０Ａから通信装置２０Ｂに制御情報が送信される（Ｓ２１６）。その後、処理はＳ２１１に戻り、通信装置２０Ａは次のタイミングの到来を待機する。
【００６３】
通信装置２０Ｂの監視制御部２０１Ｂは、制御情報の受信をリアルタイムに待機している。また通信装置２０Ｂのシーケンス番号管理部２０７Ｂは、次の制御情報を受信する前に次に受信する制御情報の検証に用いるシーケンス番号（前述したシーケンス番号Ｓに相当）を生成する（Ｓ３１１）。この処理（シーケンス番号生成処理Ｓ３１１）の詳細については後述する。
【００６４】
通信装置２０Ｂの通信部２０６Ｂは、制御情報を受信すると（Ｓ３１２）、受信した制御情報のヘッダ情報を検証する（Ｓ３１３）。このとき、通信部２０６Ｂは、ヘッダ情報から暗号化処理に係る情報（暗号アルゴリズム、鍵長、暗号利用モード、初期ベクトル等）を取得する。また通信装置２０Ｂは必要に応じて制御情報の改ざん検知処理も行う。例えば、通信装置２０Ｂは、制御情報に含まれているデータについてＭＡＣを求め、これを制御情報に付帯するＭＡＣと照合することにより改ざんを検知する。
【００６５】
続いて、監視制御部２０１Ｂは、制御情報から暗号化制御データを取得し、取得した暗号化制御データを復号して復号制御データを取得し、Ｓ３１１でシーケンス番号管理部２０７Ｂが生成したシーケンス番号Ｓと復号制御データとをシーケンス番号検証部２０９Ｂに渡す（Ｓ３１４）。
【００６６】
シーケンス番号検証部２０９Ｂが、復号制御データに含まれているシーケンス番号（前述したシーケンス番号Ｄに相当）をシーケンス番号Ｓと照合することにより、シーケンス番号Ｄの検証（制御情報の検証）を行う（Ｓ３１５）。シーケンス番号検証部２０９Ｂは、検証の結果を監視制御部２０１Ｂに渡す（Ｓ３１６）。検証結果が正しい場合、監視制御部２０１Ｂは復号制御データに従ってＩ／Ｏ装置４０Ｂを制御する。検証結果が正しくない場合、監視制御部２０１Ｂは復号制御データを破棄する。その後、処理はＳ３１１に戻り、シーケンス番号管理部２０７Ｂは、次の制御情報の受信に備えてシーケンス番号を生成する。
【００６７】
＜シーケンス番号生成処理＞
続いて、図４に示すフローチャートとともに図３のシーケンス番号生成処理Ｓ２１１，Ｓ３１１について説明する。尚、本処理は、シーケンス番号管理部２０７、３０７に格納されているシーケンス番号の生成が必要か否かを判断するための情報を参照した結果、シーケンス番号の生成の必要があると判定された場合である。
【００６８】
まず通信装置２０のシーケンス番号管理部２０７は、シーケンス番号の生成に用いる付随情報の参照先を示す情報を参照し、暗号情報保管部２０５から、擬似乱数生成器に入力するシード、擬似乱数生成器に入力する初期値、及び擬似乱数生成器の内部状態のうちの少なくともいずれかを取得する（Ｓ４１１）。
【００６９】
続いて暗復号処理部２０３は、Ｓ４１１で取得した擬似乱数生成器に入力するシード、擬似乱数生成器に入力する初期値、及び擬似乱数生成器の内部状態のうちの少なくともいずれかを用いて所定系列の擬似乱数列を生成する（Ｓ４１２）。
【００７０】
続いてシーケンス番号管理部２０７は、Ｓ４１２で生成された擬似乱数列を所定の手順にてシーケンス番号列に変換する（Ｓ４１３）。この処理の詳細については後述する。
【００７１】
続いてシーケンス番号管理部２０７は、Ｓ４１３で生成したシーケンス番号列を暗号情報保管部２０５に格納する（Ｓ４１４）。
【００７２】
シーケンス番号管理部２０７は、シーケンス番号の生成が必要か否かの判断に用いる情報を更新する（Ｓ４１５）。ここでシーケンス番号の生成が必要か否かを判断するための情報とは、例えば、シーケンス番号で使用するために生成した擬似乱数列の個数、及び未使用の擬似乱数の先頭アドレスに相当する情報である。例えば、シーケンス番号のデータサイズがｂビットで、ｂ×ｍビット分の擬似乱数を生成している場合、上記の擬似乱数列の個数はｍである。またシーケンス番号管理部２０７は、図３のＳ２１３（シーケンス番号を取得する処理）において、ｂビットの擬似乱数を取得した場合、上述の擬似乱数列の個数をｍからｍ−１に更新し、上述の先頭アドレスは次のｂビットの擬似乱数の先頭アドレスに更新する。
【００７３】
尚、Ｓ４１２の擬似乱数列の生成において、例えば、通信装置２０Ａと通信装置２０Ｂとが所定値を事前に共有しておき、１つのシードから生成された擬似乱数列のバイト長が上記所定値に到達する度にリシード（エントロピーソースの追加）するようにしてもよく、またシードの更新を行ってもよい。シードの更新は、例えば、通信装置２０Ａまたは通信装置２０Ｂにおいて、１つのシードから生成された擬似乱数列のバイト長が上記所定値に到達するとシードを生成し、上記更新用のシードを平文として暗号化を行い、もう一方の装置に送信するようにする。また例えば、疑似乱数を生成する毎に、上記シードとカウンタの連結値のハッシュ値を疑似乱数生成器のシードとし、疑似乱数の生成処理が完了してから次の疑似乱数の生成処理を行うまでの間の任意の時間にカウンタをインクリメントするようにしてもよい。そのようにすれば疑似乱数の内部状態を保持する機能が不要になる。例えば、擬似乱数生成方法として、このようなシードとカウンタの連結値を利用しても良い。リシードやシードの更新を随時実施することにより、シードを把握していない第三者のシーケンス番号の予測困難性を高めることができる。
【００７４】
また、Ｓ４１２の疑似乱数列の生成において、例えば擬似乱数生成器としてブロック暗号ＡＥＳのカウンターモード（AES-CTR）を利用し、通信装置２０Ａ、通信装置２０Ｂ、監視制御装置１０とが所定値のカウンタを事前に共有しておき、前記カウンタを所定の方法に従って更新（例えば、所定値をインクリメントする）しながら暗号化を行い、その暗号化データをシーケンス番号列として使用してもよい。このようにすれば、疑似乱数の内部状態を保持する機能が不要になるとともに、シーケンス番号列を事前に生成せず、シーケンス番号を検証するタイミングで生成するようにすることも可能である。このとき、通信装置２０Ａ、通信装置２０Ｂ、監視制御装置１０は、上記の所定値のカウンタとして、現在使用している最新のカウンタをそれぞれ暗号情報保管部またはシーケンス番号管理部に格納していてもよいし、上記の所定値のカウンタの初期値、およびインクリメントした幅を暗号情報保管部またはシーケンス番号管理部に格納していてもよい。
【００７５】
＜擬似乱数列をシーケンス番号列に変換する処理＞
続いて、図５に示すフローチャートとともに、図４のＳ４１３の処理（擬似乱数列をシーケンス番号列に変換する処理）について説明する。尚、Ｓ４１２で生成された擬似乱数列Ｒのサイズは、必要に応じて乱数列データを切り取ることによりＬ×ｍビットであるとする。ここでＬは擬似乱数生成器の内部で使用する暗号プリミティブの演算１回あたりに出力される乱数長であり、ｍは上記暗号プリミティブの呼び出し回数である。例えば、擬似乱数生成器としてブロック暗号ＡＥＳのカウンターモード（AES-CTR）を用いる場合、Ｌは１２８である。またシーケンス番号のビット長ｂはＬで割り切れるものとし、例えば、ｂは３２ビットであるものとする。
【００７６】
同図に示すように、まずシーケンス番号管理部２０７は、Ｓ４１２で生成されたＬ×ｍビットの疑似乱数列Ｒに対し、所定の変換関数Ｔを用いてｔ'個のｂビット乱数を生成する（Ｓ５１１）。ここでｔ'は、ｔ'≦（Ｌ／ｂ）×ｍを満たす正の整数である。
【００７７】
続いて通信装置２０は、Ｓ５１１で生成されたｔ'個の乱数をシーケンス番号列とする（Ｓ５１２）。
【００７８】
＜変換関数Ｔ＞
続いて、図６に示すフローチャートとともに、図５のＳ５１１における変換関数Ｔについて説明する。変換関数Ｔは、生成した所定長さのビット列からなる擬似乱数列Ｒから所定範囲のビット列を取得してシーケンス番号とする関数である。
【００７９】
まず通信装置２０は、変換前のＬ×ｍビットの擬似乱数列Ｒをｂビット毎に区切る（ビット列の順序を保ったままｂビット毎に分割する。）（Ｓ６１１）。
【００８０】
続いて通信装置２０は、Ｓ６１１で区切った各ｂビットの擬似乱数列をシーケンス番号列とする（Ｓ６１２）。
【００８１】
尚、このように実施例１では、生成した擬似乱数列の全てをシーケンス番号として利用するので、擬似乱数列の一部のみをシーケンス番号として利用する実施例２，３に比べて擬似乱数を生成するための処理の実行回数が少なくて済み、シーケンス番号の生成にかかる処理負荷が小さい。
【００８２】
＜シーケンス番号検証処理＞
続いて、図７に示すフローチャートとともに、シーケンス番号を検証する処理（図３のＳ３１５の処理）（以下、シーケンス番号検証処理Ｓ３１５と称する。）について説明する。
【００８３】
まずシーケンス番号管理部２０７は、シーケンス番号の検証に際して用いる付随情報の参照先を示す情報を用いて暗号情報保管部３０５からシーケンス番号の検証に際して用いる付随情報を取得する（Ｓ７１１）。尚、シーケンス番号の検証に際して用いる付随情報とは、例えば、シーケンス番号の検証において未使用の擬似乱数が格納されている領域の先頭アドレスである。
【００８４】
続いてシーケンス番号管理部２０７は、シーケンス番号（前述したシーケンス番号Ｄに相当）の検証に際して照合の対象とするシーケンス番号(前述したシーケンス番号Ｓに相当）の個数を示す情報（ｋ個）を取得する（Ｓ７１２）。
【００８５】
続いてシーケンス番号検証部２０９は、検証対象のシーケンス番号（前述したシーケンス番号Ｄに相当）が、当該照合の対象とするシーケンス番号列ｒ１，ｒ２，．．．，ｒｋ（１≦ｉ≦ｋ）の中に存在するか否かを検証し（Ｓ７１３）、その結果を出力する（Ｓ７１４）。
【００８６】
尚、制御系システムを構成する装置間で行われる通信においてはノイズの影響等によるパケットロスについての対策が必要であり、例えば、パケットを再送する仕組みが設けられるが、連続稼動が求められる制御系システムではパケットの再送が許容されないことも想定される。しかし上述のようにシーケンス番号Ｄを一度に複数のシーケンス番号Ｓとを照合する構成とした場合、一定時間パケットロスが発生した後に制御情報を受信した場合でも、それが複数のシーケンス番号Ｓの範囲内であれば制御情報を正当なものとして処理することができる。また、上記のシーケンス番号列の個数（ｋ個）は、情報処理システム１に固有の値としてもよいし、情報処理システム１を構成する各装置の性能に合わせた個別の値としてもよい。
【００８７】
＜暗号鍵の使用回数の確認を含む暗号化処理＞
続いて、図８に示すフローチャートとともに、図３のＳ２１４における暗号化制御データを取得する処理（平文制御データを暗号化する処理を含む。以下、暗号化処理Ｓ２１４とも称する。）について説明する。尚、以下に説明する処理は、通信装置２０Ｂの復号（図３のＳ３１４）やＭＡＣの生成／検証、認証暗号の暗号化／復号に適用することもできる。
【００８８】
以下の説明において、通信装置２０Ａの暗号情報保管部２０５Ａには暗号鍵の使用回数Ｎが格納されているものとする。この暗号鍵の使用回数Ｎには、暗号鍵が未使用の状態では０がセットされ、暗号鍵を使用する毎に暗号化したデータ長に依存して値が随時インクリメントされる。インクリメントする値としては、例えば、暗号アルゴリズムとしてブロック暗号を利用している場合には、暗号鍵を用いて暗号化したブロック長である。また暗号鍵を更新すると暗号鍵の使用回数Ｎは０にリセットされる。
【００８９】
同図に示すように、まず通信装置２０Ａの暗復号処理部２０３Ａは、暗号情報保管部２０５に格納されている暗号鍵の使用回数Ｎ、及び所定数ＭＡＸ＿Ｎを取得する（Ｓ８０１）。ここでＭＡＸ＿Ｎとは、１つの暗号鍵による暗号化が許可されている回数の上限値であり、例えば、暗号鍵のライフサイクルを考慮して決定される。例えば、ＮＩＳＴが発行するＳＰ８００−３８Ｃ（ＣＣＭモード）では、１つの暗号鍵による暗号化の回数の上限は２の６１乗回と定められている。
【００９０】
続いて、暗復号処理部２０３Ａは、Ｓ８０１で取得した使用回数ＮとＭＡＸ＿Ｎを比較する（Ｓ８０２）。使用回数ＮがＭＡＸ＿Ｎより小さい場合（Ｓ８０２：ＭＡＸ＿Ｎ＞Ｎ）には処理Ｓ８０３に進み、使用回数ＮがＭＡＸ＿Ｎ以上の場合（Ｓ８０２：ＭＡＸ＿Ｎ≦Ｎ）にはＳ８０６に進む。
【００９１】
Ｓ８０３では、暗復号処理部２０３Ａは、暗号アルゴリズム及び鍵データを取得して平文制御データを暗号化する。続いて、暗復号処理部２０３Ａは、Ｓ８０３で暗号化した平文制御データのブロック長の個数ＮＢを取得し（Ｓ８０４）、使用回数ＮにＮ＋ＮＢを代入する（Ｓ８０５）。
【００９２】
Ｓ８０６では、暗復号処理部２０３Ａは、暗号鍵の使用回数が上限に達した旨の警告を出力する。警告が出力されることにより、例えば、暗復号処理部２０３Ａが通信部２０６Ａに警告を通知し、通信部２０６Ａが監視制御装置１０に暗号鍵の使用回数が上限に達した旨の警告を通知し、監視制御装置１０から情報処理システム１に接続する監視用の端末等に上記警告が通知されて暗号鍵の管理者等が暗号鍵の更新を実施する。
【００９３】
以上に説明したように、本実施形態の情報処理システム１においては、通信装置２０Ａ及び通信装置２０Ｂの双方が夫々所定系列の擬似乱数に基づき所定手順でシーケンス番号を生成し、通信装置２０Ａがシーケンス番号Ｄを付した制御情報（通信データ）を送信し、通信装置Ｂが上記制御情報を受信し、通信装置２０Ｂがシーケンス番号Ｄを自身が生成したシーケンス番号Ｓと照合することにより制御情報を検証する。
【００９４】
ここでこのように擬似乱数を用いてシーケンス番号を生成するようにした場合、通信装置２０Ａ及び通信装置２０Ｂの夫々が順次生成するシーケンス番号の順序が正当であれば制御情報を検証することが可能であり、攻撃者が制御処理の各周期において送信できる通信データの数、または情報処理システム１の各装置が各周期において受信可能な通信データの数、が少ない場合には、生成される擬似乱数が暗号学的に安全である限り、同じシーケンス番号を安全に再利用することができる。このため、例えば、シーケンス番号がｂビットの固定長のフィールドで構成される場合、当該フィールドを２＾ｂ−１を超える数をカウントするカウンタとして機能させることができる。従って、通信装置２０Ａ及び通信装置２０Ｂは安全なシーケンス番号を長期に亘って生成することが可能であり、シーケンス番号のフィールドのサイズを拡張することなく長期に亘ってシーケンス番号を生成することができる。また通信装置２０Ａから通信装置２０Ｂに送信する制御情報を暗号化する場合には、１つの暗号鍵を用いたときに許容される暗号化処理回数（暗号鍵の有効期限、鍵更新期間）とシーケンス番号で使用できる番号の数との間のバランスをとることができる。
【００９５】
またこのようにシーケンス番号のフィールドのサイズが小さくて済むため、シーケンス番号を低負荷で高速に生成することができ、以上の仕組みは短周期処理が行われる制御系システムにも適用することができる。また擬似乱数生成器のシードを把握していない第三者がシーケンス番号を偽造することは暗号学的に困難であるから、第三者によるリプレイ攻撃を回避することができる。
【実施例２】
【００９６】
実施例２は、図５のＳ５１１における擬似乱数からシーケンス番号への変換方法（変換関数Ｔ）のみが実施例１と異なる。他の構成は、実施例１と同様である。図６に示したように、実施例１の変換関数Ｔは、擬似乱数を区切ることにより得られる複数の擬似乱数の全てをシーケンス番号として利用する。これに対し実施例２の変換関数Ｔは、擬似乱数生成器により生成される擬似乱数をｂビット毎に分割し、分割して得られる複数のビット列のうち一部のみをシーケンス番号として使用し、残りのビット列についてはシーケンス番号として利用しない。このため、実施例２の仕組みによればシーケンス番号の予測困難性を実施例１よりも高めることができる。
【００９７】
図９は実施例２の変換関数Ｔを説明するフローチャートである。同図に示すように、まず通信装置２０は、変換前のＬ×ｍビットの疑似乱数列Ｒをｂビット毎に区切る（Ｓ９１１）。
【００９８】
続いて通信装置２０は、Ｓ９１１で区切った各ｂビット×Ｌ／ｂ個の乱数に対し、所定位置のｂビット乱数を抽出する（Ｓ９１２）。
【００９９】
続いて通信装置２０は、Ｓ９１２で抽出した乱数列をシーケンス番号列とする（Ｓ９１３）。
【０１００】
尚、Ｓ９１２の処理において、各ｂビット×Ｌ／ｂ個の乱数に対し、抽出するｂビットの乱数の位置は、送信側と受信側で共通の位置を利用していればよく、各ｂビット×Ｌ／ｂ個の乱数毎に変えてもよいし、同一であってもよい。また抽出する乱数は互いに隣接するｂビットを抽出してもよいし、隣接しないビットを抽出してもよい。
【実施例３】
【０１０１】
実施例３は、図５のＳ５１１における擬似乱数からシーケンス番号への変換方法（変換関数Ｔ）のみが実施例１，２と異なる。他の構成は、実施例１と同様である。実施例３では、実施例２と同様に生成した擬似乱数のうち使用しない部分があるものの、擬似乱数生成器の１回あたりの暗号演算により出力される擬似乱数を実施例２よりも多く利用する点で実施例２と異なる。
【０１０２】
図１０は実施例３の変換関数Ｔ（図５のＳ５１１）を説明するフローチャートである。実施例３の変換関数Ｔは、生成した疑似乱数列をＬビット毎に分割し、そのうちの一部分をシーケンス番号として出力するか否かを判断するためのテンプレートとして使用し、残りの部分については上記テンプレートを利用してシーケンス番号として利用するか否かを決定する。
【０１０３】
同図に示すように、まず通信装置２０は、変換前のＬ×ｍビットの疑似乱数列ＲをＬビット毎に区切る（Ｓ１０１１）。
【０１０４】
続いて通信装置２０は、Ｓ１０１１で区切ったＬビットの各乱数について、所定位置のビットをｂビット分だけ抽出して連結する（Ｓ１０１２）。
【０１０５】
続いて通信装置２０は、Ｓ１０１１で区切ったＬビットの各乱数の抽出されていないｂ×（Ｌ／ｂ−１）ビットの乱数を順に連結する（Ｓ１０１３）。
【０１０６】
続いて通信装置２０は、Ｓ１０１３で連結した乱数をｂビット毎に区切り、ｂビットの各乱数の各ビットに対し、Ｓ１０１２で抽出したｂビット乱数の同一ポジションが１である場合は当該ビットを抽出し、０の場合は当該ビットを抽出しない（Ｓ１０１４）。
【０１０７】
続いて通信装置２０は、Ｓ１０１４で抽出した全てのビットを順に連結して得られる乱数列をシーケンス番号列とする（Ｓ１０１５）。
【０１０８】
図１１に図１０の変換関数Ｔの一態様を示す。同図に示すように、変換前の各擬似乱数Ｒ＿ｉ（１≦ｉ≦ｍ）をｒ＿（ｉ，１），．．．，ｒ＿（ｉ，Ｌ／ｂ）とする（Ｓ１１１１）。
【０１０９】
また各ｒ＿（ｉ，ｊ）（１≦ｉ≦ｍ、１≦ｊ≦ｔ）に対し、ｒ＿（ｉ，ｊ）のビット列表現をｒ＿（ｉ，ｊ）＝ｒ＿（ｉ，ｊ）＾（０）｜｜．．．ｒ＿（ｉ，ｊ）＾（ｂ−１）とする（Ｓ１１１２）。
【０１１０】
また各ｉ（１≦ｉ≦ｍ）に対し、ｒ'＿ｉを空集合とする（Ｓ１１１３）。
【０１１１】
まずｉに１を代入する（Ｓ１１１４）。
【０１１２】
続いてｉがｍ＋１より小さいか否かを判定する。判定の結果、ｉ＜ｍ＋１が成り立つ場合にはＳ１１１６に進み、ｉ＜ｍ＋１が成り立たない場合にはＳ１１２４に進む（Ｓ１１１５）。
【０１１３】
Ｓ１１１６ではｊに２を代入する。
【０１１４】
続いてｊがｔ＋１より小さいか否かを判定する。判定の結果、ｊ＜ｔ＋１が成り立つ場合はＳ１１１８に進み、ｊ＜ｔ＋１が成り立たない場合はＳ１１２３に進む（Ｓ１１１７）。
【０１１５】
Ｓ１１１８ではｓに０を代入する（Ｓ１１１８）。
【０１１６】
Ｓ１１１９ではｓがｂより小さいか否かを判定する。判定の結果、ｓ＜ｂが成り立つ場合はＳ１１２０に進み、ｓ＜ｂが成り立たない場合はＳ１１２２に進む。
【０１１７】
Ｓ１１２０では、もしｒ＿（ｉ，１）＾（ｓ）＝１であればｒ'＿ｉ｜｜ｒ＿（ｉ，ｊ）＾（ｓ）をｒ'＿ｉに代入する。続いて、ｓを１増加する（Ｓ１１２１）。その後はＳ１１１９に戻る。
【０１１８】
Ｓ１１２２では、ｊを１増加する。その後はＳ１１１７に戻る。
【０１１９】
Ｓ１１２３では、ｉを１増加する。その後はＳ１１１５に戻る（Ｓ１１２３）。
【０１２０】
Ｓ１１２４では、ｒ'＿ｉ｜｜．．．｜｜ｒ'＿ｍをｂビット毎に区切り、それらをシーケンス番号とする（Ｓ１１２４）。
【０１２１】
尚、Ｓ１１２０において、一度の暗号演算から出力される擬似乱数Ｒ＿ｉからシーケンス番号を生成する方法では、擬似乱数Ｒ＿ｉの最上位ｂビットであるｒ＿（ｉ，１）はシーケンス番号として出力するか否かを判断するテンプレートとして使用し、残りの擬似乱数ｒ＿（ｉ，２），．．．，ｒ＿（ｉ，Ｌ／ｂ）は、上記テンプレートを利用してシーケンス番号として利用するか否かを決めているが、テンプレートとして使用する部分はｒ＿（ｉ，１）である必要はなく、例えばｊの値を予め定めておき、ｒ＿（ｉ，ｊ）をテンプレートとして利用してもよい。
【０１２２】
実施例３によれば実施例２と同様に実施例１に比べてシーケンス番号の予測困難性を高めることができる。また実施例３によれば実施例２よりもシーケンス番号の生成にかかる処理負荷を小さくすることができる。例えば、暗号演算１回あたりに出力される擬似乱数が１２８ビットとすると、実施例１では、１２８ビット全てをシーケンス番号として使用し、実施例２では例えば３２ビットをシーケンス番号として使用する。一方、実施例３において上記１２８ビットのうち、例えば３２ビットをテンプレートとして使用すると、平均的に４８ビットをシーケンス番号として使用する。これはテンプレートは平均的に１６ビットが１となるからである。従って実施例３によるシーケンス番号の生成にかかる処理負荷は実施例１によるシーケンス番号生成にかかる処理負荷より大きくなるが、実施例２によるシーケンス番号の生成にかかる処理負荷よりは小さくなる。
【実施例４】
【０１２３】
実施例１乃至３に示した仕組みは、例えば、図１２に示す構成の通信システム１２００にも適用することができる。同図に示すように、通信システム１２００は、インターネット等の通信ネットワーク１２３１を介して通信可能に接続された、送信装置１２０１及び受信装置１２４１を含む。送信装置１２０１及び受信装置１２４１は、例えば、図２に示した情報処理装置２００を用いて実現することができる。本実施例によると、従来の情報系システムや上述した制御システムだけでなく、例えば、自動車などの車載ネットワーク（CAN: Controller Area Network）を用いたシステムや医療機器などで構成される組込みシステムなどにおいても本発明を利用することができる。
【０１２４】
尚、同図に示す通信システム１２００は、送信機能を有する送信装置１２０１と受信機能を有する受信装置１２４１を１つずつ含んでいるが、より多くの数の送信装置１２０１や受信装置１２４１を含む構成であってもよい。また送信装置１２０１はさらに受信装置１２４１の機能を備えるものであってもよく、受信装置１２４１はさらに送信装置１２０１の機能を備えるものであってもよい。また通信ネットワーク１２３１のキャストの種別は限定されず、例えば、ユニキャスト、マルチキャスト、ブロードキャストのように送信先の数がいくつであっても構わない。
【０１２５】
送信装置１２０１は、例えば、平文データとシーケンス番号とを含む情報を暗号化した情報（以下、暗号化情報（通信データ）とも称する。）を、通信ネットワーク１２３１を介して受信装置１２４１に送信する。受信装置１２４１は、送信装置１２０１から送られてくる暗号化情報を受信して復号し、シーケンス番号を検証して検証に成功した場合は復号した平文データの内容に応じた処理を行う。
【０１２６】
送信装置１２０１は、暗号処理部１２１０、暗号選択部１２１１、暗復号処理部１２１２、暗号モード取得部１２１３、暗号情報保管部１２１４、シーケンス番号管理部１２１５、シーケンス番号取得部１２１６、シーケンス番号検証部１２１７、入出力インタフェース１２１８、及びデータ処理部１２１９を備える。入出力インタフェース１２１８は、送信装置１２０１と外部との間での情報の授受を行う役割を担っており、例えば、ユーザインタフェース（ディスプレイ１２２１、キーボード１２２２）、着脱可能な可搬型記憶媒体の読み書き装置（不図示）等が接続されていてもよい。
【０１２７】
データ処理部１２１９は、例えば、当該データ処理部１２１９において動作するアプリケーションソフトウェアから出力される平文のデータをシーケンス番号とともに暗号化して暗号化情報１２３０を生成し、生成した暗号化情報１２３０を受信装置１２４１に送信する。暗号選択部１２１１、暗復号処理部１２１２、暗号モード取得部１２１３、暗号情報保管部１２１４、シーケンス番号管理部１２１５、シーケンス番号取得部１２１６、及びシーケンス番号検証部１２１７の各機能は、暗号化情報１２３０を生成する機能を提供する。これらは基本的に図１に示した同名称の機能と同等の機能を有する。
【０１２８】
尚、シーケンス番号の生成処理は、実施例１（制御システム）の場合には暗復号処理の事前に実施しているが、通信システム１２００においては、必ずしも事前に実施する必要はなく、暗復号処理時に実施してもよい。
【０１２９】
受信装置１２４１は、暗号処理部１２５０、暗号選択部１２５１、暗復号処理部１２５２、暗号モード取得部１２５３、暗号情報保管部１２５４、シーケンス番号管理部１２５５、シーケンス番号取得部１２５６、シーケンス番号検証部１２５７、入出力インタフェース１２５８、及びデータ処理部１２５９を備える。入出力インタフェース１２５８は、受信装置１２４１と外部との間での情報の授受を行う役割を担っており、例えば、ユーザインタフェース（ディスプレイ１２６１、キーボード１２６２）、着脱可能な可搬型記憶媒体の読み書き装置（不図示）等が接続されていてもよい。
【０１３０】
データ処理部１２５９は、送信装置１２０１がネットワーク１２３１を介して受信装置１２４１に送信した暗号化情報１２３０を受信すると、これを復号して平文データを取得するとともに付随するシーケンス番号を検証する。暗号選択部１２５１、暗復号処理部１２５２、暗号モード取得部１２５３、暗号情報保管部１２５４、シーケンス番号管理部１２５５、シーケンス番号取得部１２５６、及びシーケンス番号検証部１２５７の各機能は、暗号化情報１２３０を復号して復号データを取得する機能、シーケンス番号を検証する機能を提供する。これらは基本的に図１に示した同名称の機能と同等の機能を有する。
【０１３１】
ところで、本発明は上記した実施例に限定されるものではなく、他の様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。またある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、またある実施例の構成に他の実施例の構成を加えることも可能である。また各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１３２】
また上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０１３３】
また制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０１３４】
１０  監視制御装置、２０  通信装置、４０  Ｉ／Ｏ装置、５０  通信ネットワーク、６０  通信路、１０１  監視制御部、１０２  暗号選択部、１０３  暗復号処理部、１０４  暗号モード取得部、１０５  暗号情報保管部、１０６  通信部、１０７  シーケンス番号管理部、１０８  シーケンス番号取得部、１０９  シーケンス番号検証部、２０１  監視制御部、２０２  暗号選択部、２０３  暗復号処理部、２０４  暗号モード取得部、２０５  暗号情報保管部、２０６  通信部、２０７  シーケンス番号管理部、２０８  シーケンス番号取得部、２０９  シーケンス番号検証部、２１０  入出力部、４０１  制御対象装置、４０２  監視情報取得装置
【図１】
2016021700.tif 000003
【図２】
2016021700.tif 000004
【図３】
2016021700.tif 000005
【図４】
2016021700.tif 000006
【図５】
2016021700.tif 000007
【図６】
2016021700.tif 000008
【図７】
2016021700.tif 000009
【図８】
2016021700.tif 000010
【図９】
2016021700.tif 000011
【図１０】
2016021700.tif 000012
【図１１】
2016021700.tif 000013
【図１２】
2016021700.tif 000014