(57)【特許請求の範囲】
【請求項１】
被制御装置を制御する制御装置であって、
前記制御装置の稼働中に発生するイベントのイベント履歴データに基づいて第１のハッシュ値を算出するハッシュ値算出部と、
前記第１のハッシュ値を前記制御装置の外部に配置された第１の他の制御装置に送信し、また前記制御装置の外部に配置された第２の他の制御装置で発生するイベントのイベント履歴データに基づいて算出された第２のハッシュ値を受信する通信部と、
前記イベント履歴データと前記第１のハッシュ値と前記第２のハッシュ値とを記憶する記憶部と、
を備え、
前記イベント履歴データは、前記制御装置において前回算出した第１のハッシュ値と、前記制御装置で発生したイベントデータまたは前記第２の他の制御装置から送信された第２のハッシュ値と、を含み、
前記ハッシュ値算出部は、前記イベント履歴データに基づいて新たな前記第１のハッシュ値を生成することでハッシュチェーンを形成し、
前記記憶部に記憶された第１のハッシュ値は、前記制御装置と前記第１の他の制御装置と前記第２の他の制御装置とのいずれとも異なる検証装置における、前記第１のハッシュ値と、前記第１の他の制御装置または前記第２の他の制御装置に記録されたハッシュ値と、を比較することにより前記記憶部に記憶された第１のハッシュ値が前記制御装置で算出されて記憶された正しいハッシュ値であるかの検証に用いられること、
を特徴とする制御装置。
【請求項２】
前記イベント履歴データに基づいて前記第１のハッシュ値を再計算して前記再計算したハッシュ値の異常を検出する異常検出部を備えること、
を特徴とする請求項１に記載の制御装置。
【請求項３】
前記記憶部に前記イベント履歴データを記憶する際に、前記イベント履歴データより以前に前記制御装置で発生したイベントのイベント履歴データに基づいて算出されたハッシュ値を前記イベント履歴データとともに記憶すること、
を特徴とする請求項１または２に記載の制御装置。
【請求項４】
請求項１から３のいずれか１つに記載の制御装置と、前記第１の他の制御装置および前記第２の他の制御装置と、が通信可能に構成されていること、
を特徴とする制御装置システム。
【請求項５】
前記第１の他の制御装置および前記第２の他の制御装置は、現在の時刻を管理する現在時刻管理サーバであること、
を特徴とする請求項４に記載の制御装置システム。
【請求項６】
前記第１の他の制御装置および前記第２の他の制御装置は、前記イベント履歴データを記憶するイベント履歴記憶サーバであること、
を特徴とする請求項４に記載の制御装置システム。
【請求項７】
請求項１から３のいずれか１つに記載の制御装置が、通信可能に複数台接続されて構成されており、
前記制御装置は、前記ハッシュ値算出部で算出した前記第１のハッシュ値と、他の前記制御装置のうち少なくとも１つの他の前記制御装置の前記ハッシュ値算出部で算出された前記第２のハッシュ値を記憶すること、
を特徴とする制御装置システム。
【請求項８】
前記制御装置と前記第１の他の制御装置と前記第２の他の制御装置とのいずれとも異なる検証装置を備え、
前記検証装置は、前記第１のハッシュ値と、前記第１の他の制御装置または前記第２の他の制御装置に記録されたハッシュ値と、を比較することにより、前記記憶部に記憶された第１のハッシュ値が前記制御装置で算出されて記憶された正しいハッシュ値であるかの検証を行うこと、
を特徴とする請求項４から６のいずれか１つに記載の制御装置システム。
【請求項９】
通信可能に接続された複数台の請求項１から３のいずれか１つに記載の制御装置と、
複数台の前記制御装置のいずれとも異なる検証装置と、
を備え、
前記検証装置は、複数台の前記制御装置のうち１つの制御装置の前記ハッシュ値算出部で算出した前記第１のハッシュ値と、複数台の前記制御装置のうち他の前記制御装置に記録されたハッシュ値と、を比較することにより、前記１つの制御装置の記憶部に記憶された第１のハッシュ値が前記１つの制御装置で算出されて記憶された正しいハッシュ値であるかの検証を行うこと、
を特徴とする請求項７に記載の制御装置システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、イベントの発生履歴を管理する制御装置および制御装置システムに関する。
【背景技術】
【０００２】
従来、プログラマブルロジックコントローラ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ：ＰＬＣ）といった装置では、稼働中に発生するイベントの発生の履歴の情報が記録されている。イベントは、稼働中の装置に対して外部の装置から行われる種々の情報の通知の受信に代表される、あらかじめ決められた装置の処理である。ＰＬＣにおけるイベントは、ＰＬＣが制御する被制御装置からＰＬＣに対して行われる、被制御装置におけるセンサ値の変化の通知、被制御装置における出力値の変化の通知、および被制御装置における許容範囲外の入出力の発生の通知、といった被制御装置における状態の変化の通知の受信処理が例示される。【０００３】
ＰＬＣは、使用可能なメモリ容量が、パーソナルコンピュータ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ：ＰＣ）またはクラウドコンピューティングに比べて極めて小さい。また、ＰＬＣは、イベントの情報のデータ容量も少なく、計算機がイベントの情報の記録に費やすメモリの使用容量および計算量といった計算機資源も少ない。このため、ＰＬＣの外部からネットワークを介してＰＬＣ単体に記録されている情報を容易に改ざんすることができる可能性があった。【０００４】
一方、稼働中に発生するイベントごとに前のイベントの情報のハッシュ値を含めて、現在のイベントのハッシュ値を計算することで、装置が記録しているイベントの発生履歴のデータが正しいことを検証する技術が用いられている。【０００５】
特許文献１には、発生するイベント情報ごとにハッシュ値を作成し、作成したハッシュ値とイベント情報とを記録するハッシュノードを生成して、生成順に連鎖させることでハッシュノードチェーンを生成する技術が開示されている。特許文献１の技術では、イベント情報を検証するときには、ハッシュノードの記録するハッシュ値とイベント情報とを使ってハッシュノードチェーンの正当性を評価し、検証対象のイベント情報とこれに対応付けられるハッシュノードの記録するイベント情報とが一致するか否かを検証する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第４２３５１９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記特許文献１の技術によれば、１つのイベント情報のハッシュ値が、イベント履歴情報蓄積システムにおいて１つのハッシュノードチェーン蓄積サーバのみに記憶されている。この場合には、記憶されているハッシュ値が改ざんされた場合には、装置に記録されているイベント履歴のデータが正しいデータであることを検証することができなくなる、という問題があった。【０００８】
したがって、イベント情報のハッシュ値を複数箇所に保持することで、記録されているイベント情報のハッシュ値が改ざんされた場合にイベント履歴のデータが正しいデータであることを検証することができなくなるリスクを分散して、イベント履歴のデータが正しいデータであることを検証できるようにしておくことが好ましい。しかしながら、上記特許文献１の技術では、このようなリスク分散については開示されていない。【０００９】
本発明は、上記に鑑みてなされたものであって、制御装置に記憶されているイベント履歴のハッシュ値が改ざんされた場合でもイベント履歴のデータが正しいデータであるかどうかを検証することが可能な制御装置を得ることを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、本発明にかかる制御装置は、被制御装置を制御する制御装置であって、制御装置の稼働中に発生するイベントのイベント履歴データに基づいて第１のハッシュ値を算出するハッシュ値算出部と、第１のハッシュ値を制御装置の外部に配置された第１の他の制御装置に送信し、また制御装置の外部に配置された第２の他の制御装置で発生するイベントのイベント履歴データに基づいて算出された第２のハッシュ値を受信する通信部と、イベント履歴データと第１のハッシュ値と第２のハッシュ値とを記憶する記憶部と、を備える。イベント履歴データは、制御装置において前回算出した第１のハッシュ値と、制御装置で発生したイベントデータまたは第２の他の制御装置から送信された第２のハッシュ値と、を含む。ハッシュ値算出部は、イベント履歴データに基づいて新たな第１のハッシュ値を生成することでハッシュチェーンを形成する。記憶部に記憶された第１のハッシュ値は、制御装置と第１の他の制御装置と第２の他の制御装置とのいずれとも異なる検証装置における、第１のハッシュ値と、第１の他の制御装置または第２の他の制御装置に記録されたハッシュ値と、を比較することにより記憶部に記憶された第１のハッシュ値が制御装置で算出されて記憶された正しいハッシュ値であるかの検証に用いられる。
【発明の効果】
【００１１】
本発明にかかる制御装置は、制御装置に記憶されているイベント履歴のハッシュ値が改ざんされた場合でもイベント履歴のデータが正しいデータであるかどうかを検証することが可能な制御装置が得られる、という効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施の形態１にかかる制御装置である第１プログラマブルロジックコントローラの機能構成例を示す図
【図２】本発明の実施の形態１にかかる第１ＰＬＣにおけるイベント記録処理の手順を示すフローチャート
【図３】本発明の実施の形態１にかかる第１ＰＬＣにおけるイベント履歴データの作成方法を示す図
【図４】本発明の実施の形態１にかかる第１ＰＬＣにおける第１ハッシュ値受信処理の手順を示すフローチャート
【図５】本発明の実施の形態１にかかる制御装置システムであるＰＬＣシステムの構成例を示す図
【図６】本発明の実施の形態１にかかるＰＬＣシステムにおいてイベント履歴データを記憶する場合のデータの流れの一例を示す図
【図７】本発明の実施の形態１にかかるＰＬＣシステムの構成を示す図
【図８】本発明の実施の形態１にかかる第１ＰＬＣにおける受信可否判定処理の手順を示すフローチャート
【図９】本発明の実施の形態１にかかる第１ＰＬＣにおける受信可否判定処理を含めた第２ハッシュ値受信処理の手順を示すフローチャート
【図１０】本発明の実施の形態１にかかる第１ＰＬＣにおける時刻通知機能とハッシュ値の送信とを組み合わせた第３ハッシュ値受信処理の手順を示すフローチャート
【図１１】本発明の実施の形態１にかかる第１ＰＬＣにおけるハッシュ値を含む探索要求の送信処理の手順を示すフローチャート
【図１２】本発明の実施の形態１にかかる第１ＰＬＣにおけるハッシュ値を含む探索要求の受信処理の手順を示すフローチャート
【図１３】本発明の実施の形態１にかかる第１ＰＬＣにおける探索応答可否判定処理の手順を示すフローチャート
【図１４】本発明の実施の形態１にかかる第１ＰＬＣにおける探索応答処理の手順を示すフローチャート
【図１５】本発明の実施の形態１にかかるイベント履歴サーバに収集されたＰＬＣのイベント履歴記憶部に蓄積されたイベント履歴の一例を説明する図
【図１６】実施の形態１にかかるＰＬＣとしての機能を実現するコンピュータ装置の構成の一例を模式的に示すブロック図
【発明を実施するための形態】
【００１３】
以下に、本発明の実施の形態にかかる制御装置および制御装置システムを図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１４】
実施の形態１．
図１は、本発明の実施の形態１にかかる制御装置である第１プログラマブルロジックコントローラ１の機能構成例を示す図である。以下、プログラマブルロジックコントローラをＰＬＣと表記する。第１ＰＬＣ１は、プログラムを実行して被制御装置６０を制御する制御装置である。被制御装置６０は、通信線７０によって第１ＰＬＣ１と接続されており、第１ＰＬＣ１と通信可能である。そして、第１ＰＬＣ１は、稼働中に第１ＰＬＣ１に発生するイベントの発生の履歴の情報であるイベント履歴データを記録する機能、他のＰＬＣにイベント履歴データのハッシュ値を送信する機能、および他のＰＬＣから送信されるハッシュ値を記憶する機能を有する。以下、第１ＰＬＣ１の機能について詳細に説明する。
【００１５】
第１ＰＬＣ１は、第１ＰＬＣ１の稼働中に発生するイベントのイベント履歴データおよび各種情報を記録する第１記憶部１１０と、第１ＰＬＣ１内に発生するイベントについてのイベント履歴データおよびハッシュ値の作成および記憶に関する動作の制御と、第１ＰＬＣ１全体の動作の制御とを行う第１制御部１２０と、第１ＰＬＣ１の外部に配置された他装置との通信を行う第１通信部１３０と、を備える。これらの各構成部は、互いに情報を通信可能に接続されている。
【００１６】
第１記憶部１１０は、イベント履歴データを記憶する第１イベント履歴記憶部１１１と、ハッシュ値を記憶する第１ハッシュ値履歴記憶部１１２と、被制御装置６０を制御するための制御プログラムおよび第１ＰＬＣ１内における処理全般を制御するための制御プログラムを記憶する第１プログラム記憶部１１３と、を備える。
【００１７】
第１ＰＬＣ１に発生するイベントは、稼働中の第１ＰＬＣ１に対する各種情報の通知の受信処理、または稼働中の第１ＰＬＣ１からの各種情報の送信処理に代表される、第１ＰＬＣ１におけるあらかじめ決められた処理である。第１ＰＬＣ１に発生するイベントは、稼働中の第１ＰＬＣ１に対して被制御装置６０または第１ＰＬＣ１の外部の装置から行われる各種情報の通知の、後述する第１ハッシュ値算出部１２１における受信処理が例示される。ここで、イベントに該当する各種情報には、被制御装置６０におけるセンサ値が変化した旨を示すセンサ値の変化情報、被制御装置６０からの出力値が変化した旨を示す出力値の変化情報、被制御装置６０における許容範囲外の入出力に起因した警報情報、といった被制御装置６０における状態の変化の情報、第１ＰＬＣ１の外部のＰＬＣから送信されたハッシュ値、時刻通知および探索要求が挙げられる。
【００１８】
イベントデータは、イベントの内容を示すものであり、第１ＰＬＣ１の外部に配置された装置から第１ＰＬＣ１へ行われるデータの送信の内容に対応付けられたコードである。また、イベントデータは、第１ＰＬＣ１以外の装置から受信した情報を含んで構成されてもよい。
【００１９】
イベント履歴データは、稼働中の第１ＰＬＣ１に発生するイベントごとに第１ＰＬＣ１において作成された、イベントの発生履歴を示す旨のデータである。イベント履歴データは、第１ＰＬＣ１に発生するイベントごとに、前回に第１ＰＬＣ１で作成されたハッシュ値と、今回、第１ＰＬＣ１で発生したイベントに基づいて作成された今回のイベントデータと、が結合された結合データである。
【００２０】
第１ＰＬＣ１は、第１ＰＬＣ１の稼働中に発生したイベントの情報を収集して、収集したデータをイベント履歴データとして記憶する。すなわち、第１ＰＬＣ１は、第１ＰＬＣ１の稼働中に発生したイベントのイベントデータを含むイベント履歴データを記憶する。
【００２１】
第１イベント履歴記憶部１１１は、第１ＰＬＣ１にイベントが発生するごとに、最新のイベント履歴データを記憶する。第１イベント履歴記憶部１１１は、イベント履歴データを記憶している状態で新たなイベント履歴データを記憶する場合には、記憶しているイベント履歴データが削除される。第１イベント履歴記憶部１１１から削除されたイベント履歴データは、イベントの履歴の収集用のイベント履歴サーバといった、第１ＰＬＣ１の外部に設けられた履歴収集用記憶装置１０に記憶される。履歴収集用記憶装置１０は、通信線２０によって第１ＰＬＣ１と接続されており、第１ＰＬＣ１と通信可能である。なお、履歴収集用記憶装置１０と第１ＰＬＣ１との通信は、無線通信であってもよい。第１イベント履歴記憶部１１１に対するイベント履歴データの記憶処理、イベント履歴データの削除処理、および履歴収集用記憶装置１０へのイベント履歴データの記憶処理は、後述する第１ハッシュ値算出部１２１の制御によって行われる。
【００２２】
なお、第１イベント履歴記憶部１１１は、あらかじめ設定された既定個数のイベント履歴データを記憶してもよい。この場合、第１イベント履歴記憶部１１１は、既定個数のイベント履歴データを記憶している状態で新たなイベント履歴データを記憶する際には、記憶した時間が古いイベント履歴データが削除される。
【００２３】
ハッシュ値は、イベント履歴データに基づいて第１ハッシュ値算出部１２１において算出されたイベント履歴データのハッシュ値である。
【００２４】
第１ハッシュ値履歴記憶部１１２は、第１ＰＬＣ１にイベントが発生するごとに、最新のイベント履歴データのハッシュ値を記憶する。第１ハッシュ値履歴記憶部１１２は、ハッシュ値を記憶している状態で新たなハッシュ値を記憶する場合には、記憶しているハッシュ値が削除される。第１ハッシュ値履歴記憶部１１２から削除されたハッシュ値は、ハッシュ値の収集用のハッシュ値履歴サーバといった、第１ＰＬＣ１の外部に設けられた履歴収集用記憶装置１０に記憶される。第１ハッシュ値履歴記憶部１１２に対するハッシュ値の記憶処理、ハッシュ値の削除処理、および履歴収集用記憶装置１０へのハッシュ値の記憶処理は、後述する第１ハッシュ値算出部１２１の制御によって行われる。
【００２５】
なお、第１ハッシュ値履歴記憶部１１２は、あらかじめ設定された既定個数のハッシュ値を記憶してもよい。この場合、第１ハッシュ値履歴記憶部１１２は、既定個数のハッシュ値を記憶している状態で新たなハッシュ値を記憶する際には、記憶した時間が古いハッシュ値が削除される。
【００２６】
第１制御部１２０は、第１プログラム記憶部１１３に記憶されたプログラムを実行することにより、イベント履歴データおよびハッシュ値の作成および記憶に関する動作の制御と、被制御装置６０に対する制御を含む第１ＰＬＣ１全体の動作の制御とを行う。第１制御部１２０は、第１ハッシュ値算出部１２１と、第１異常検出部１２２と、を備える。
【００２７】
第１ハッシュ値算出部１２１は、第１ＰＬＣ１内に発生するイベントごとに、イベントのイベントデータを作成し、さらにイベントデータに基づいてハッシュ値を算出する。第１ハッシュ値算出部１２１は、第１通信部１３０を介して第１ＰＬＣ１の外部から各種情報を受信する。また、第１ハッシュ値算出部１２１は、第１通信部１３０を介して第１ＰＬＣ１の外部に各種情報を送信する。
【００２８】
第１異常検出部１２２は、第１イベント履歴記憶部１１１に記憶されているイベント履歴データをイベント履歴サーバといった履歴収集用記憶装置１０に送信する際に、イベント履歴データのハッシュ値を再計算し、再計算したハッシュ値の異常を検出する。
【００２９】
第１異常検出部１２２は、第１イベント履歴記憶部１１１に記憶されたイベント履歴データを読み出して、読み出したイベント履歴データのハッシュ値を再計算する。第１ハッシュ値履歴記憶部１１２に記憶されているハッシュ値が改ざんされている場合には、第１ハッシュ値履歴記憶部１１２に記憶されているハッシュ値と再計算したハッシュ値とが異なる値となる。また、第１イベント履歴記憶部１１１に記憶されているイベント履歴データが改ざんされている場合も、第１ハッシュ値履歴記憶部１１２に記憶されているハッシュ値と再計算したハッシュ値とが異なる値となる。したがって、第１異常検出部１２２は、ハッシュ値の再計算を行ったイベント履歴データの、第１ハッシュ値履歴記憶部１１２に記憶されているハッシュ値と、再計算したハッシュ値とを比較することで、再計算したハッシュ値の異常を検出することができる。
【００３０】
すなわち、第１異常検出部１２２は、第１ハッシュ値履歴記憶部１１２に記憶されているハッシュ値と再計算したハッシュ値とが異なる場合には、再計算したハッシュ値が異常であり、第１ハッシュ値履歴記憶部１１２に記憶されているハッシュ値または第１イベント履歴記憶部１１１に記憶されているイベント履歴データが改ざんされていると判定する。また、第１異常検出部１２２は、第１ハッシュ値履歴記憶部１１２に記憶されているハッシュ値と再計算したハッシュ値とが同じ値である場合には、再計算したハッシュ値が正常であり、第１ハッシュ値履歴記憶部１１２に記憶されているハッシュ値および第１イベント履歴記憶部１１１に記憶されているイベント履歴データのイベントデータは第１ＰＬＣ１におけるイベント記録処理で記録された正しいデータであると判定する。
【００３１】
第１異常検出部１２２は、再計算したハッシュ値の異常を検出した場合には、第１イベント履歴記憶部１１１に記憶されているイベント履歴データを破棄する。したがって、再計算したハッシュ値の異常が検出されたイベント履歴データは、第１ハッシュ値履歴記憶部１１２から外部の履歴収集用記憶装置１０に送信されずに、破棄される。なお、第１異常検出部１２２が再計算を行うタイミングは、イベント履歴データを履歴収集用記憶装置１０に送信する際に限定されず、第１異常検出部１２２は任意のタイミングで再計算を行うことができる。
【００３２】
第１通信部１３０は、履歴収集用記憶装置１０および他の制御装置３０を含む、第１ＰＬＣ１の外部に配置された他装置と通信を行う。第１通信部１３０は、第１ハッシュ値算出部１２１の制御により、イベントに紐付けてハッシュ値を他の制御装置３０に送信する。ここで、他の制御装置３０は、第１ＰＬＣ１で発生したイベントのイベント履歴データのハッシュ値を記憶して第１ＰＬＣ１と情報共有するための装置であって、第１ＰＬＣ１の外部に配置された他の制御装置である。他の制御装置３０は、通信線４０によって第１ＰＬＣ１と接続されており、第１通信部１３０と通信可能である。なお、他の制御装置３０と第１通信部１３０との通信は、無線通信であってもよい。
【００３３】
また、第１通信部１３０は、第１ＰＬＣ１の外部に配置された他装置から、イベントとなる各種情報を受信し、第１ハッシュ値算出部１２１に送信する。イベントとなる各種情報の例には、他のＰＬＣで発生したイベントのイベント履歴データに対するハッシュ値が例示される。また、イベントとなる各種情報の他の例には、被制御装置６０から送信された、被制御装置６０におけるセンサ値の変化情報、被制御装置６０からの出力値の変化情報、被制御装置６０における許容範囲外の入出力に起因した警報情報といった情報が例示される。他装置と第１通信部１３０との間の通信手段は、特に問わない。
【００３４】
つぎに、本実施の形態１にかかる第１ＰＬＣ１における基本的なイベント記録処理について説明する。図２は、本発明の実施の形態１にかかる第１ＰＬＣ１におけるイベント記録処理の手順を示すフローチャートである。図３は、本発明の実施の形態１にかかる第１ＰＬＣ１におけるイベント履歴データの作成方法を示す図である。
【００３５】
第１ＰＬＣ１の起動後に、第１ＰＬＣ１においてイベントが発生すると、イベント記録処理がスタートする。イベント記録処理においては、まず、ステップＳ１０において第１ハッシュ値算出部１２１が、第１ハッシュ値履歴記憶部１１２に記憶されているなかで最新のハッシュ値である「前回のハッシュ値」を取得する。なお、「前回のイベントのイベント履歴データのハッシュ値」を単に「前回のハッシュ値」と読み替えている。
【００３６】
つぎに、ステップＳ２０において第１ハッシュ値算出部１２１が、図３に示すように今回のイベントデータと前回のハッシュ値とを結合して図３に示すようにイベント履歴データを作成する。ここで、第１ハッシュ値算出部１２１は、ステップＳ２０の開始時において今回のイベントデータを作成済みである場合には、作成済みの今回のイベントデータを用いてイベント履歴データを作成する。また、第１ハッシュ値算出部１２１は、ステップＳ２０の開始時において今回のイベントデータをまだ作成していない場合には、今回、第１ＰＬＣ１で発生したイベントに基づいて今回のイベントデータを作成する。そして、第１ハッシュ値算出部１２１は、作成したイベントデータを用いてイベント履歴データを作成する。
【００３７】
つぎに、ステップＳ３０において第１イベント履歴記憶部１１１が、イベント履歴データを記憶する。すなわち、第１ハッシュ値算出部１２１が、作成したイベント履歴データを第１イベント履歴記憶部１１１に記憶させる。また、第１ＰＬＣ１が保持する現在時刻をイベント履歴データに付与し、イベント履歴に記録してもよい。
【００３８】
つぎに、ステップＳ４０において第１ハッシュ値算出部１２１が、図３に示すように今回のイベントデータと前回のハッシュ値とを結合した結合データのハッシュ値、すなわちイベント履歴データのハッシュ値を算出する。そして、ステップＳ４０において算出されたハッシュ値が、今回のハッシュ値となる。なお、「今回のイベントのイベント履歴データのハッシュ値」を単に「今回のハッシュ値」と読み替えている。
【００３９】
つぎに、ステップＳ５０において第１ハッシュ値履歴記憶部１１２が、今回のハッシュ値を記憶する。すなわち、第１ハッシュ値算出部１２１が、算出した今回のハッシュ値を第１ハッシュ値履歴記憶部１１２に記憶させる。
【００４０】
つぎに、ステップＳ６０において第１ハッシュ値算出部１２１が、算出した今回のハッシュ値を既定の送信先の他のＰＬＣに送信するか否かを判定する。今回のハッシュ値を送信するか否かは、算出したハッシュ値を何回に１回のペースで他の装置に送信するかといった、判定条件に基づいて決定される。判定条件は、あらかじめ決定されて第１ハッシュ値算出部１２１に記憶されている。なお、判定条件は、第１ＰＬＣ１における第１ハッシュ値算出部１２１以外の構成部に記憶されていてもよい。
【００４１】
今回のハッシュ値を送信しないと判定された場合、すなわちステップＳ６０においてＮｏの場合は、一連のイベント記録処理が終了する。
【００４２】
今回のハッシュ値を送信すると判定された場合、すなわちステップＳ６０においてＹｅｓの場合は、ステップＳ７０において第１ハッシュ値算出部１２１が、既定の送信先の他のＰＬＣ宛に、今回のイベントのハッシュ値を送信し、一連のイベント記録処理が終了する。以上の処理を行うことにより、第１ＰＬＣ１におけるイベント記録処理が実施される。なお、今回のイベントのハッシュ値を送信する送信先の他のＰＬＣの数は限定されない。そして、ステップＳ７０においてハッシュ値が送信された他のＰＬＣでは、ハッシュ値を受信して記憶する。
【００４３】
そして、第１ＰＬＣ１の第１異常検出部１２２は、上記のイベント記録処理後、第１イベント履歴記憶部１１１に記憶されたイベント履歴データを読み出して、読み出したイベント履歴データのハッシュ値を再計算する。そして、第１異常検出部１２２は、ハッシュ値の再計算を行ったイベント履歴データの、第１ハッシュ値履歴記憶部１１２に記憶されているハッシュ値と、再計算したハッシュ値とを比較することで、再計算したハッシュ値の異常を検出する。
【００４４】
上述したように、第１ＰＬＣ１は、第１ハッシュ値算出部１２１が、第１ＰＬＣ１で発生したイベントのイベント履歴データのハッシュ値を他のＰＬＣに送信する機能を有する。このため、第１ＰＬＣ１で発生した１つのイベントに対応するハッシュ値が、第１ＰＬＣ１と他のＰＬＣとの複数の装置に記憶される。これにより、第１ＰＬＣ１と他のＰＬＣとは別に設けられる検証装置において、第１ＰＬＣ１と他のＰＬＣとに記憶されている２つのハッシュ値を比較することで、第１ＰＬＣ１に記憶されたハッシュ値が第１ＰＬＣ１のイベント記録処理で記録された正しいハッシュ値であるかどうかを検証することが可能となる。すなわち、第１ＰＬＣ１は、第１ＰＬＣ１と他のＰＬＣとに記憶されている１つのイベントに対応するハッシュ値が異なる値である場合に、第１ＰＬＣ１に記憶されたハッシュ値の改ざんを検出することができる。したがって、第１ＰＬＣ１は、第１ＰＬＣ１に記憶された第１ＰＬＣ１のイベントのハッシュ値と第１ＰＬＣ１に記憶されたハッシュ値とを比較することで、第１ＰＬＣ１に記憶されたイベントのハッシュ値の改ざんを容易に検出することができる。
【００４５】
また、上述したように、第１異常検出部１２２は、再計算したハッシュ値が正常であるか異常であるかを判定でき、第１ハッシュ値履歴記憶部１１２に記憶されているハッシュ値および第１イベント履歴記憶部１１１に記憶されているイベント履歴データが正しいデータであるか否かを検証することが可能である。
【００４６】
つぎに、第１ＰＬＣ１が他のＰＬＣからハッシュ値を受信した場合における、第１ＰＬＣ１におけるイベント記録処理について説明する。他のＰＬＣは、第１ＰＬＣ１と同じ機能を有する。図４は、本発明の実施の形態１にかかる第１ＰＬＣ１における第１ハッシュ値受信処理の手順を示すフローチャートである。
【００４７】
第１ＰＬＣ１の起動後に、既定のタイミングで第１ハッシュ値受信処理がスタートする。まず、ステップＳ１１０において第１ハッシュ値算出部１２１が、他のＰＬＣからハッシュ値を受信しているか否かを判定する。第１通信部１３０は、他のＰＬＣからハッシュ値を含む通信情報を受信した場合には、ハッシュ値を含む通信情報を第１ハッシュ値算出部１２１に送信する。したがって、第１ハッシュ値算出部１２１は、ハッシュ値を含む通信情報を第１通信部１３０から受信しているか否かによって、他のＰＬＣからハッシュ値を受信しているか否かを判定可能である。
【００４８】
他のＰＬＣからハッシュ値を受信していないと判定された場合、すなわちステップＳ１１０においてＮｏの場合は、一連のイベント記録処理が終了する。
【００４９】
他のＰＬＣからハッシュ値を受信していると判定された場合、すなわちステップＳ１１０においてＹｅｓの場合は、ステップＳ１２０において第１ハッシュ値算出部１２１が、ハッシュ値を含む通信情報から、受信したハッシュ値を読み出す。
【００５０】
つぎに、ステップＳ１３０において第１ハッシュ値算出部１２１が、読み出したハッシュ値に基づいて、読み出したハッシュ値を含むイベントデータを作成する。そして、ステップＳ１３０において作成されたイベントデータが、他のＰＬＣのハッシュ値の受信をイベントとしたイベントデータとなる。
【００５１】
つぎに、ステップＳ１４０において第１ハッシュ値算出部１２１が、図２に示したイベント記録処理を行う。以上の処理を行うことにより、第１ＰＬＣ１が他のＰＬＣからハッシュ値を受信した場合のイベント記録処理が実施される。第１ハッシュ値受信処理は、定周期に実行されてもよく、第１ＰＬＣ１がイベント履歴データを保存するごとに実行してもよく、第１ＰＬＣ１に設定された任意のタイミングおよび任意の頻度で実行可能である。
【００５２】
上述したように、第１ＰＬＣ１は、第１ハッシュ値算出部１２１が、第１ＰＬＣ１で発生したイベントのイベント履歴データのハッシュ値を他のＰＬＣに送信する機能に加えて、他のＰＬＣから送信されるハッシュ値をイベント履歴データに含めて第１イベント履歴記憶部１１１に記憶させる機能を有する。そして、第１ＰＬＣ１が上述した第１ハッシュ値受信処理を行うことによって、他のＰＬＣのイベントのイベント履歴データのハッシュ値を受信して第１ＰＬＣ１に記憶することができる。
【００５３】
これにより、第１ＰＬＣ１で発生したイベントに対応するハッシュ値が、第１ＰＬＣ１と他のＰＬＣとの複数の装置に記憶される。第１ＰＬＣ１は、第１ＰＬＣ１と他のＰＬＣとのどちらとも別に設けられる検証装置において、第１ＰＬＣ１と他のＰＬＣとに記憶されている１つのイベントに対応する２つのハッシュ値を比較することで、第１ＰＬＣ１に記憶されたハッシュ値が第１ＰＬＣ１のイベント記録処理で記録された正しいハッシュ値であるかどうかを検証することが可能である。すなわち、第１ＰＬＣ１は、第１ＰＬＣ１と他のＰＬＣとに記憶されている１つのイベントに対応するハッシュ値が異なる値である場合に、第１ＰＬＣ１に記憶されたハッシュ値の改ざんを検出することができる。
【００５４】
また、他のＰＬＣで発生した１つのイベントに対応するハッシュ値が、第１ＰＬＣ１と他のＰＬＣとの複数の装置に記憶される。この場合も、検証装置において、第１ＰＬＣ１と他のＰＬＣとに記憶されている１つのイベントに対応する２つのハッシュ値を比較することで、他のＰＬＣに記憶されているハッシュ値が他のＰＬＣにおけるイベント記録処理で記録された正しいハッシュ値であるかどうかを検証することが可能である。すなわち、他のＰＬＣは、第１ＰＬＣ１と他のＰＬＣとに記憶されている１つのイベントに対応するハッシュ値が異なる値である場合に、他のＰＬＣに記憶されているハッシュ値の改ざんを検出することができる。したがって、他のＰＬＣは、他のＰＬＣに記憶されたイベントのハッシュ値の改ざんが行われた場合でも、他のＰＬＣに記憶されたイベントのハッシュ値と第１ＰＬＣ１に記憶された他のＰＬＣのイベントのハッシュ値とを比較することで、他のＰＬＣに記憶されたイベントのハッシュ値の改ざんを容易に検出することができる。
【００５５】
図２および図４に示した処理は、１台の第１ＰＬＣ１において実行される。この第１ＰＬＣ１の機能を有する２台のＰＬＣを組み合わせた構成が、他のＰＬＣのハッシュ値を互いに記憶可能な最小のＰＬＣシステムの構成となる。このようなＰＬＣシステムの構成において各ＰＬＣにおけるハッシュ値を記憶する場合のデータの流れを以下に示す。
【００５６】
図５は、本発明の実施の形態１にかかる制御装置システムであるＰＬＣシステム３００の構成例を示す図である。図５に示すＰＬＣシステム３００は、第１ＰＬＣ１と第２ＰＬＣ２とがネットワーク５０によって通信可能とされ、第１ＰＬＣ１と第２ＰＬＣ２との間でハッシュ値を互いに記憶可能な最小のＰＬＣシステムである。この場合、第１ＰＬＣ１と第２ＰＬＣ２とのうちの一方のＰＬＣは、他方のＰＬＣの外部に配置された他の制御装置３０としての機能を有する。
【００５７】
第２ＰＬＣ２は、第１ＰＬＣ１と同様の構成および機能を有する。すなわち、第２ＰＬＣ２は、第２記憶部２１０と、第２制御部２２０と、第２通信部２３０と、を備える。これらの各構成部は、互いに情報を通信可能に接続されている。第２記憶部２１０は第１記憶部１１０に対応し、第２制御部２２０は第１制御部１２０に対応し、第２通信部２３０は第１通信部１３０に対応する。
【００５８】
第２記憶部２１０は、第２イベント履歴記憶部２１１と、第２ハッシュ値履歴記憶部２１２と、第２プログラム記憶部２１３と、を備える。第２イベント履歴記憶部２１１は第１イベント履歴記憶部１１１に対応し、第２ハッシュ値履歴記憶部２１２は第１ハッシュ値履歴記憶部１１２に対応し、第２プログラム記憶部２１３は第１プログラム記憶部１１３に対応する。
【００５９】
第２制御部２２０は、第２ハッシュ値算出部２２１と、第２異常検出部２２２と、を備える。第２ハッシュ値算出部２２１は第１ハッシュ値算出部１２１に対応し、第２異常検出部２２２は第１異常検出部１２２に対応する。
【００６０】
第１ＰＬＣ１と第２ＰＬＣ２とは、各ＰＬＣで発生した最新のイベントのイベント履歴のハッシュ値をサイクリック通信によって互いに送信する。最新のイベント履歴のハッシュ値を受信したＰＬＣは、受信したハッシュ値をイベント履歴データとして記憶し、このイベント履歴データのハッシュ値を算出し、記憶する。第１ＰＬＣ１は、第２ＰＬＣ２から受信したハッシュ値に基づいてイベントデータを作成し、さらにこのイベントデータと第１ＰＬＣ１における前回のハッシュ値とからイベント履歴データを作成し、記憶する。第２ＰＬＣ２は、第１ＰＬＣ１から受信したハッシュ値に基づいてイベントデータを作成し、さらにこのイベントデータと第２ＰＬＣ２における前回のハッシュ値とからイベント履歴データを作成し、記憶する。すなわち、第１ＰＬＣ１と第２ＰＬＣ２とが互いにイベント履歴のハッシュ値の送受信を行うことで、記憶するイベント履歴に他方のＰＬＣのイベント履歴のハッシュ値が含まれるため、第１ＰＬＣ１と第２ＰＬＣ２との両方のイベント履歴データのハッシュチェーンが形成される。
【００６１】
なお、ＰＬＣシステム３００においては、他のＰＬＣのハッシュ値を互いに記憶可能とされているが、必ずしもハッシュ値を互いに交換する必要はなく、一方のＰＬＣのハッシュ値を他方のＰＬＣに送信して記憶させる構成とすることも可能である。
【００６２】
図６は、本発明の実施の形態１にかかるＰＬＣシステム３００においてイベント履歴データを記憶する場合のデータの流れの一例を示す図である。なお、以下では、第１ＰＬＣ１と第２ＰＬＣ２とを区別しない場合には、単にＰＬＣと呼ぶ場合がある。
【００６３】
図６に示す例では、第１ＰＬＣ１において、第１ハッシュ値算出部１２１が、第１ＰＬＣ１内に発生したイベントのイベントデータであるイベントデータａ１と前回のイベントのハッシュ値Ｈａ１とからなるイベント履歴データを作成し、さらに作成したイベント履歴データのハッシュ値Ｈａ２を算出する。第１ハッシュ値算出部１２１は、作成したイベント履歴データを第１イベント履歴記憶部１１１に記憶させ、作成したハッシュ値Ｈａ２を第１ハッシュ値履歴記憶部１１２に記憶させる。また、第１ハッシュ値算出部１２１は、作成したハッシュ値Ｈａ２を第２ＰＬＣ２に送信する。
【００６４】
つぎに、第１ハッシュ値算出部１２１は、第１ＰＬＣ１内に発生したイベントのイベントデータであるイベントデータａ２と前回のイベントのハッシュ値Ｈａ２とからなるイベント履歴データを作成し、さらに作成したイベント履歴データのハッシュ値Ｈａ３を算出する。第１ハッシュ値算出部１２１は、作成したイベント履歴データを第１イベント履歴記憶部１１１に記憶させ、作成したハッシュ値Ｈａ３を第１ハッシュ値履歴記憶部１１２に記憶させる。
【００６５】
つぎに、第１ハッシュ値算出部１２１は、第２ＰＬＣ２から送信されたハッシュ値Ｈｂ４のイベントデータであるイベントデータａ３と前回のイベントのハッシュ値Ｈａ３とからなるイベント履歴データを作成し、さらに作成したイベント履歴データのハッシュ値Ｈａ４を算出する。ここで、イベントデータａ３は、第２ＰＬＣ２から送信されたハッシュ値Ｈｂ４を含んで構成されている。
【００６６】
一方、図６に示す例では、第２ＰＬＣ２において、第２ハッシュ値算出部２２１が、第２ＰＬＣ２内に発生したイベントのイベントデータであるイベントデータｂ１と前回のイベントのハッシュ値Ｈｂ１とからなるイベント履歴データを作成し、さらに作成したイベント履歴データのハッシュ値Ｈｂ２を算出する。第２ハッシュ値算出部２２１は、作成したイベント履歴データを第２イベント履歴記憶部２１１に記憶させ、作成したハッシュ値Ｈｂ２を第２ハッシュ値履歴記憶部２１２に記憶させる。
【００６７】
つぎに、第２ハッシュ値算出部２２１は、第１ＰＬＣ１から送信されたハッシュ値Ｈａ２のイベントデータであるイベントデータｂ２と前回のイベントのハッシュ値Ｈｂ２とからなるイベント履歴データを作成し、さらに作成したイベント履歴データのハッシュ値Ｈｂ３を算出する。第２ハッシュ値算出部２２１は、作成したイベント履歴データを第２イベント履歴記憶部２１１に記憶させ、作成したハッシュ値Ｈｂ３を第２ハッシュ値履歴記憶部２１２に記憶させる。ここで、イベントデータｂ２は、第１ＰＬＣ１から送信されたハッシュ値Ｈａ２を含んで構成されている。
【００６８】
つぎに、第２ハッシュ値算出部２２１は、第２ＰＬＣ２内に発生したイベントのイベントデータであるイベントデータｂ３と前回のイベントのハッシュ値Ｈｂ３とからなるイベント履歴データを作成し、さらに作成したイベント履歴データのハッシュ値Ｈｂ４を算出する。第２ハッシュ値算出部２２１は、作成したイベント履歴データを第２イベント履歴記憶部２１１に記憶させ、作成したハッシュ値Ｈｂ４を第２ハッシュ値履歴記憶部２１２に記憶させる。また、第２ハッシュ値算出部２２１は、作成したハッシュ値Ｈｂ４を第１ＰＬＣ１に送信する。
【００６９】
第１ＰＬＣ１と第２ＰＬＣ２とにおけるイベント履歴のハッシュ値の送信のタイミングは特に問わない。ハッシュ値の送信のタイミングは、上述したように各ＰＬＣにおいてイベント履歴データを記録するごとに行う形態の他、記憶したイベント履歴のハッシュ値が既定の数量だけ溜まった場合に間欠的に送信してもよい。ただし、各ＰＬＣにおいて記憶されたイベント履歴の正しいハッシュ値を送信して、他方のＰＬＣに記憶させる観点では、各ＰＬＣにおいてイベント履歴データを記録するごとに行う形態が好ましい。
【００７０】
また、送信されたハッシュ値を受信する受信側のＰＬＣでは、送信されてくるハッシュ値を毎回受信して記憶する必要はなく、受信側のＰＬＣの使用条件に合わせてハッシュ値を受信して記憶すればよい。送信されたハッシュ値を受信する受信側のＰＬＣでは、ハッシュ値をとりこぼして記憶できない場合があってもかまわない。すなわち、受信側の動作も不確実でよく、受信できた範囲内で記憶処理を行えばよい。これにより、電池駆動などの無線通信ネットワークなどにおいて、送受信処理の動作する頻度を抑えて電力消費を抑制することができる。
【００７１】
上述したように、ＰＬＣシステム３００は、図６に示した処理を第１ＰＬＣ１と第２ＰＬＣ２との２台のＰＬＣが互いに実施する。これにより、２台のＰＬＣは、互いにハッシュ値を送り合うことで互いに相手側のＰＬＣのハッシュ値を記憶するため、一方のＰＬＣで発生した同じイベントのイベント履歴データのハッシュ値が２台のＰＬＣにおいて記憶される。したがって、ＰＬＣシステム３００は、２台のＰＬＣのうち一方に記憶されたイベントのハッシュ値の改ざんが行われた場合でも、２台のＰＬＣに記憶されたハッシュ値を比較することで、ハッシュ値の改ざんを容易に検出することができる。また、第１ＰＬＣ１と同じ機能を有する３台以上の複数のＰＬＣが互いに通信可能に接続されたＰＬＣシステムを構成することができる。各ＰＬＣは、ハッシュ値算出部で算出したハッシュ値と、ＰＬＣシステムにおける他の複数のＰＬＣのうち少なくとも１つのＰＬＣのハッシュ値を記憶する。すなわち、各ＰＬＣは、他のＰＬＣとの間でハッシュ値を送り合うことで互いに相手側のＰＬＣのハッシュ値を記憶することができる。
【００７２】
なお、ＰＬＣシステム３００においては１つのイベントのハッシュ値を他の装置に記憶させて情報共有するための他の制御装置３０としてＰＬＣを用いているが、他の制御装置３０には、現在の時刻を管理する現在時刻管理サーバ、イベントデータを記憶するイベント履歴記憶サーバを用いることができる。他の制御装置３０に現在時刻管理サーバを用いる場合は、ＰＬＣで発生したイベントのイベント履歴データのハッシュ値が、ＰＬＣと現在時刻管理サーバとに記憶される。他の制御装置３０にイベント履歴記憶サーバを用いる場合は、ＰＬＣで発生したイベントのイベント履歴データのハッシュ値が、ＰＬＣとイベント履歴記憶サーバとに記憶される。
【００７３】
また、送信したデータの消失、送信データのビット化け、受信データの取りこぼしが一定の頻度で発生する不確実なネットワークがＰＬＣシステム３００においてネットワーク５０に用いられることを想定した場合、受信すべきハッシュ値が受信できていない状況が発生する。このような不確実なネットワークに対して、送信側のＰＬＣが、ハッシュ値を送信する際にイベント履歴データの実データと今回のハッシュ値を受信側のＰＬＣに送信してもよい。すなわち、送信側のＰＬＣが、前回のイベントのハッシュ値と、今回のイベントデータと、今回のイベントのハッシュ値と、を送信してもよい。これにより、イベントに紐付けられたハッシュ値が他の制御装置３０である受信側のＰＬＣに送信される。
【００７４】
受信側のＰＬＣは、ハッシュ値とともにイベント履歴データの実データを記憶する。この場合、受信側のＰＬＣは、異常検出部である第１異常検出部１２２または第２異常検出部２２２がイベント履歴データの実データを用いてハッシュ値を再計算することで、受信したイベント履歴データの実データおよびハッシュ値が正しいことを検証することが可能となる。また、再計算の結果、イベント履歴データの実データおよびハッシュ値が正しくなく、これらのデータの破損を検出した場合は、受信データを破棄する。受信側のＰＬＣが、上記の再計算を行うタイミングは限定されず、ハッシュ値とイベント履歴データの実データとを受信した際に行ってもよく、他のタイミングで行ってもよい。
【００７５】
また、ハッシュ値の送信側のＰＬＣは、不確実なネットワークに対してハッシュ値を送信したことをイベント履歴記憶部である第１イベント履歴記憶部１１１または第２イベント履歴記憶部２１１に記憶してもよい。ハッシュ値を送信したことを示すイベント履歴データを作成してイベント履歴記憶部に記憶した場合、ハッシュ値の送信側のＰＬＣとハッシュ値の受信側のＰＬＣとからイベント履歴データを読み出して検証することで、送信側のＰＬＣに保存されているハッシュ値と、送信側のＰＬＣが本来受信しているべきハッシュ値とで差異があることを検出可能である。なお、受信側のＰＬＣが受信したハッシュ値を取りこぼしていても、読み出した分のハッシュ値は検証可能であり、取りこぼした度合いは送信側のＰＬＣが送信したハッシュ値の履歴から算出可能である。したがって、これらの情報から、ネットワークの不確実度、および受信して記憶したハッシュ値の信頼度を定量的に算出できる。
【００７６】
つぎに、他のＰＬＣから送信されるハッシュ値を制約なく無条件で記憶するのではなく、制限する場合について説明する。図７は、本発明の実施の形態１にかかるＰＬＣシステム４００の構成を示す図である。ＰＬＣシステム４００は、第１ＰＬＣ１と同じ機能を有する多数台のＰＬＣがネットワーク５０により接続されて構成されて、１台のＰＬＣで発生したイベントのイベント履歴データのハッシュ値を他の複数台のＰＬＣで記憶可能なＰＬＣシステムである。以下では、ＰＬＣシステム４００において、他のＰＬＣから送信されるハッシュ値が受信可能であるか否かを判定する受信可否判定処理を含めた第２ハッシュ値受信処理について説明する。ＰＬＣシステム４００は、第１ＰＬＣ１および第２ＰＬＣ２を含む、第１ＰＬＣ１と同じ機能を有するｎ台のＰＬＣが、互いに通信可能に構成されている。なお、以下においては、第１ＰＬＣ１における処理について説明するが、ＰＬＣシステム４００を構成するＰＬＣは第１ＰＬＣ１と同じ機能を有するので、ＰＬＣシステム４００を構成する全てのＰＬＣにおいて、以下で示す処理が可能である。
【００７７】
まず、第１ＰＬＣ１が他のＰＬＣから送信されるハッシュ値を受信可能であるか否かを判定する受信可否判定処理について説明する。図８は、本発明の実施の形態１にかかる第１ＰＬＣ１における受信可否判定処理の手順を示すフローチャートである。
【００７８】
第１ＰＬＣ１の起動後に、ハッシュ値を含む通信情報がＰＬＣシステム４００における他のＰＬＣから第１通信部１３０に送信されてくると受信可否判定処理がスタートする。まず、ステップＳ２１０において第１ＰＬＣ１の第１通信部１３０が、ＰＬＣシステム４００における他のＰＬＣから送信された、ハッシュ値を含む通信情報が、ハッシュ値についての登録制御装置であるハッシュ値についての登録ＰＬＣから送信された通信情報であるか否かを判定する。ハッシュ値についての登録ＰＬＣは、ＰＬＣシステム４００における他のＰＬＣからハッシュ値を含む通信情報が送信された場合に、ＰＬＣシステム４００における他のＰＬＣのうち第１ＰＬＣ１においてハッシュ値の受信を許可するＰＬＣとして登録されたＰＬＣである。ハッシュ値についての登録ＰＬＣの情報は、送信元のＰＬＣのＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスまたはポート番号といった情報が例示され、あらかじめ決定されて第１通信部１３０に登録されている。なお、受信を許可するＰＬＣの情報は、第１ＰＬＣ１における第１通信部１３０以外の構成部に記憶されていてもよい。
【００７９】
他のＰＬＣから送信されたハッシュ値を含む通信情報が登録ＰＬＣから送信された通信情報でない場合、すなわちステップＳ２１０においてＮｏの場合は、ステップＳ２５０において第１通信部１３０は、ハッシュ値を含む通信情報を受信しない、と判定する。
【００８０】
一方、他のＰＬＣから送信されたハッシュ値を含む通信情報が登録ＰＬＣから送信された通信情報である場合、すなわちステップＳ２１０においてＹｅｓの場合は、第１通信部１３０は、ステップＳ２２０に進む。ステップＳ２２０において第１通信部１３０は、他のＰＬＣから送信されたハッシュ値を含む通信情報に含まれる認証情報が、ハッシュ値の受信を許可する制御装置であるＰＬＣに付与されている認証情報と一致するか否かを判定する。ハッシュ値の受信を許可するＰＬＣに付与されている認証情報は、あらかじめ決定されて第１通信部１３０に登録されている。なお、ハッシュ値の受信を許可するＰＬＣの情報は、第１ＰＬＣ１における第１通信部１３０以外の構成部に記憶されていてもよい。
【００８１】
他のＰＬＣから送信されたハッシュ値を含む通信情報に含まれる認証情報がハッシュ値の受信を許可するＰＬＣに付与されている認証情報と一致しない場合、すなわちステップＳ２２０においてＮｏの場合は、ステップＳ２５０において第１通信部１３０は、ハッシュ値を含む通信情報を受信しない、と判定する。
【００８２】
一方、他のＰＬＣから送信されたハッシュ値を含む通信情報に含まれる認証情報がハッシュ値の受信を許可するＰＬＣに付与されている認証情報と一致する場合、すなわちステップＳ２２０においてＹｅｓの場合は、第１通信部１３０は、ステップＳ２３０に進む。ステップＳ２３０において第１通信部１３０は、当該登録ＰＬＣからのハッシュ値を含む通信情報の前回の受信から、既定時間以上が経過しているか否かを判定する。既定時間は、登録ＰＬＣからのハッシュ値を含む通信情報の前回の受信からの受信後経過時間であり、登録ＰＬＣについてあらかじめ決定されて第１通信部１３０に登録されている。なお、既定時間の情報は、第１ＰＬＣ１における第１通信部１３０以外の構成部に記憶されていてもよい。
【００８３】
既定時間以上が経過していない場合、すなわちステップＳ２３０においてＮｏの場合は、ステップＳ２５０において第１通信部１３０は、ハッシュ値を含む通信情報を受信しない、と判定する。
【００８４】
一方、既定時間以上が経過している場合、すなわちステップＳ２３０においてＹｅｓの場合は、ステップＳ２４０において第１通信部１３０は、ハッシュ値を含む通信情報を受信する、と判定する。
【００８５】
つぎに、上述した受信可否判定処理を含めた第２ハッシュ値受信処理について説明する。図９は、本発明の実施の形態１にかかる第１ＰＬＣ１における受信可否判定処理を含めた第２ハッシュ値受信処理の手順を示すフローチャートである。
【００８６】
第１ＰＬＣ１の起動後に、ハッシュ値を含む通信情報がＰＬＣシステム４００における他のＰＬＣから第１通信部１３０に送信されてくると第２ハッシュ値受信処理がスタートする。まず、ステップＳ３１０において第１通信部１３０が、図８に示した受信可否判定処理を行う。
【００８７】
つぎに、ステップＳ３２０において第１通信部１３０が、受信可否判定処理での判定結果に基づいて他のＰＬＣから送信されたハッシュ値を受信するか否かを決定する。
【００８８】
受信可否判定処理での判定結果に基づいて、他のＰＬＣから送信されたハッシュ値を受信しないと決定された場合、すなわちステップＳ３２０においてＮｏの場合は、一連の第２ハッシュ値受信処理が終了する。
【００８９】
一方、受信可否判定処理での判定結果に基づいて、他のＰＬＣから送信されたハッシュ値を受信すると決定された場合、すなわちステップＳ３２０においてＹｅｓの場合は、ステップＳ３３０において第１通信部１３０は、他のＰＬＣから送信されたハッシュ値を受信する。
【００９０】
つぎに、ステップＳ３４０において第１ハッシュ値算出部１２１が、図４に示した第１ハッシュ値受信処理を行い、一連の第２ハッシュ値受信処理が終了する。
【００９１】
上述した受信可否判定処理は、他のＰＬＣから送信されたハッシュ値を含む通信情報を受信するか否かを、登録ＰＬＣ、認証情報および受信後経過時間を受信可否の判定条件に用いた判定処理を行っている。すなわち、第１ＰＬＣ１が実施する受信可否判定処理は、ハッシュ値を含む通信情報を送信した他のＰＬＣと第１ＰＬＣ１との間の相互認証によるハッシュ値のフィルタリング機能となる。
【００９２】
このため、第１ＰＬＣ１は、受信可否判定処理を含む第２ハッシュ値受信処理を実施することで、既定の条件を満たす場合のみ、ハッシュ値の受信をイベントとしたイベント履歴データを記憶することができる。これにより、第１ＰＬＣ１は、ＤｏＳ（Ｄｅｎｉａｌ  ｏｆ  Ｓｅｒｖｉｃｅ  ａｔｔａｃｋ）攻撃、なりすましによるデータ改ざん、単純な処理落ち、および取りこぼしといった障害の被害を低減する対策として効果を発揮する。また、ＰＬＣシステム４００において多数のＰＬＣ間でハッシュ値の送受信を行う場合には、１台のＰＬＣにおけるハッシュ値の受信処理が多くなるために受信時にハッシュ値の取りこぼしが増える可能性がある。第１ＰＬＣ１は、上述した第２ハッシュ値受信処理を用いることで、ハッシュ値の選択が可能となり、ハッシュ値の受信の取りこぼしを低減できる。
【００９３】
なお、上記においては、登録ＰＬＣ、認証情報および受信後経過時間を受信可否の判定条件に用いているが、上記の受信可否の判定条件はこれらに限定されない。したがって、受信可否判定処理は、上述した処理に限定されるものではない。
【００９４】
第１ＰＬＣ１が、ハッシュ値を送信するコマンドは、独立したものではなく、他のコマンドと組み合せたコマンドで実現してもよい。特に、他の機能のコマンドをハッシュ値の送信に利用する方式として、現在時刻を通知する時刻通知機能で使用する通信、または他のＰＬＣを探索する探索機能で使用する通信といった、定期的に実行される通信にハッシュ値を含めて送信する方式がある。
【００９５】
まず、現在時刻を通知する時刻通知機能で使用する通信をハッシュ値の送信に利用する場合について説明する。すわなち、ＰＬＣシステム４００における第１ＰＬＣ１が、ハッシュ値の送信を第１ＰＬＣ１の有する時刻通知機能と組み合わせて実行する場合の、ハッシュ値受信処理について説明する。
【００９６】
ここでは、第１ＰＬＣ１は、第１制御部１２０が有する時計機能でカウントしている現在の時刻情報を他のＰＬＣに報知する時刻通知機能を有する。そして、図２のステップＳ７０において第１ＰＬＣ１は、第１ＰＬＣ１におけるイベントのハッシュ値を、ＰＬＣシステム４００における他のＰＬＣに現在の時刻情報を通知する時刻通知に含ませて他のＰＬＣに送信可能である。また、ＰＬＣシステム４００における第１ＰＬＣ１以外のＰＬＣも同様である。
【００９７】
図１０は、本発明の実施の形態１にかかる第１ＰＬＣ１における時刻通知機能とハッシュ値の送信とを組み合わせた第３ハッシュ値受信処理の手順を示すフローチャートである。第１ＰＬＣ１の起動後に、時刻通知がＰＬＣシステム４００における他のＰＬＣから第１通信部１３０に送信されてくると第３ハッシュ値受信処理がスタートする。まず、ステップＳ４１０において第１通信部１３０が、ＰＬＣシステム４００における他のＰＬＣから送信された時刻通知にハッシュ値が含まれているか否かを判定する。
【００９８】
時刻通知にハッシュ値が含まれている場合、すなわちステップＳ４１０においてＹｅｓの場合は、ステップＳ４２０において第１通信部１３０が、ハッシュ値に対して図８に示した受信可否判定処理を行う。
【００９９】
つぎに、ステップＳ４３０において第１通信部１３０が、受信可否判定処理での判定結果に基づいて、ハッシュ値を受信するか否かを決定する。
【０１００】
受信可否判定処理での判定結果に基づいて、ハッシュ値を受信すると決定された場合、すなわちステップＳ４３０においてＹｅｓの場合は、ステップＳ４４０において第１通信部１３０は、時刻通知とともにハッシュ値を受信する。そして、第１通信部１３０は、ハッシュ値および時刻通知を第１ハッシュ値算出部１２１に送信する。
【０１０１】
つぎに、ステップＳ４５０において第１ハッシュ値算出部１２１が、図４に示した第１ハッシュ値受信処理を行う。
【０１０２】
つぎに、ステップＳ４６０において第１ハッシュ値算出部１２１が、時刻通知を記録するか否かを判定する。第１ハッシュ値算出部１２１は、あらかじめ決定されて第１ハッシュ値算出部１２１に記憶されている判定基準に基づいて、時刻通知を記録するか否かを判定する。
【０１０３】
時刻通知を記録すると判定された場合、すなわちステップＳ４６０においてＹｅｓの場合は、ステップＳ４７０において第１ハッシュ値算出部１２１は、受信した時刻通知に基づいてイベントデータを作成する。すなわち、第１ハッシュ値算出部１２１は、時刻通知の受信をイベントとしたイベントデータを作成する。
【０１０４】
つぎに、ステップＳ４８０において第１ハッシュ値算出部１２１が、図２に示したイベント記録処理を行い、一連の第３ハッシュ値受信処理が終了する。
【０１０５】
ステップＳ４１０に戻って、時刻通知にハッシュ値が含まれていない場合、すなわちステップＳ４１０においてＮｏの場合は、第１通信部１３０は時刻通知を受信して第１ハッシュ値算出部１２１に送信し、ステップＳ４６０に進む。
【０１０６】
ステップＳ４３０に戻って、受信可否判定処理での判定結果に基づいて、ハッシュ値を受信しないと決定された場合、すなわちステップＳ４３０においてＮｏの場合は、第１通信部１３０はハッシュ値を受信せずに時刻通知のみを受信して第１ハッシュ値算出部１２１に送信し、ステップＳ４６０に進む。
【０１０７】
ステップＳ４６０に戻って、時刻通知を記録しないと判定された場合、すなわちステップＳ４６０においてＮｏの場合は、一連の第３ハッシュ値受信処理が終了する。
【０１０８】
第１ＰＬＣ１は、図１０に示した第３ハッシュ値受信処理を実施することで、時刻通知に含めて他のＰＬＣから送信されたハッシュ値を記憶することができる。そして、第１ＰＬＣ１は、時刻通知に基づいて記憶されたイベント履歴を参照することで、ＰＬＣシステム４００における任意のＰＬＣで出現したハッシュ値を他のＰＬＣで記録開始したことを、ハッシュチェーンの他に、時刻通知に基づいて記憶されたイベント履歴を比較することでも判定することが可能となる。なお、上述した処理は、時刻通知の受信とハッシュ値の受信を１つにまとめた場合の処理の一例であり、時刻通知の受信とハッシュ値の受信を１つにまとめた場合の処理は上記の手順に限定されない。
【０１０９】
つぎに、他のＰＬＣを探索する探索機能で使用する通信をハッシュ値の送信に利用する場合について説明する。ＰＬＣの探索機能で使用する通信をハッシュ値の送信に利用した場合の第１ＰＬＣ１のハッシュ値の受信動作も、上述したＰＬＣの時刻通知機能を利用した場合と同様の処理となる。ただし、この場合は、探索要求を送信する送信先のＰＬＣの情報が無い状態で探索要求の送信を行うため、ブロードキャスト送信を行う必要がある。また、探索要求の受信側のＰＬＣは、探索要求に対して応答を返す必要がある。
【０１１０】
まず、探索要求の送信処理について説明する。図１１は、本発明の実施の形態１にかかる第１ＰＬＣ１におけるハッシュ値を含む探索要求の送信処理の手順を示すフローチャートである。第１ＰＬＣ１の起動後に、既定のタイミングでハッシュ値を含む探索要求の送信処理がスタートする。まず、ステップＳ５１０において第１ハッシュ値算出部１２１が、第１ハッシュ値履歴記憶部１１２に記憶させたハッシュ値を取得する。
【０１１１】
つぎに、ステップＳ５２０において第１ハッシュ値算出部１２１が、ハッシュ値を含めて探索要求のデータを作成する。
【０１１２】
つぎに、ステップＳ５３０において第１ハッシュ値算出部１２１が、ハッシュ値を含む探索要求をブロードキャスト送信でＰＬＣシステム４００における全てのＰＬＣに送信する。
【０１１３】
つぎに、図１１のフローチャートに示す処理でブロードキャスト送信された、ハッシュ値を含む探索要求を受信する探索要求受信処理を第１ＰＬＣ１が行う場合について説明する。図１２は、本発明の実施の形態１にかかる第１ＰＬＣ１におけるハッシュ値を含む探索要求の受信処理の手順を示すフローチャートである。第１ＰＬＣ１の起動後に、探索要求がＰＬＣシステム４００における他のＰＬＣから第１通信部１３０に送信されてくるとハッシュ値を含む探索要求の受信処理がスタートする。まず、ステップＳ６１０において第１通信部１３０が、ＰＬＣシステム４００における他のＰＬＣから送信された探索要求にハッシュ値が含まれているか否かを判定する。
【０１１４】
探索要求にハッシュ値が含まれている場合、すなわちステップＳ６１０においてＹｅｓの場合は、ステップＳ６２０において第１通信部１３０が、ハッシュ値に対して図８に示した受信可否判定処理を行う。
【０１１５】
つぎに、ステップＳ６３０において第１通信部１３０が、受信可否判定処理での判定結果に基づいて、ハッシュ値を受信するか否かを決定する。
【０１１６】
受信可否判定処理での判定結果に基づいて、ハッシュ値を受信すると決定された場合、すなわちステップＳ６３０においてＹｅｓの場合は、ステップＳ６４０において第１通信部１３０は、探索要求とともにハッシュ値を受信する。そして、第１通信部１３０は、ハッシュ値および探索要求を第１ハッシュ値算出部１２１に送信する。
【０１１７】
つぎに、ステップＳ６５０において第１ハッシュ値算出部１２１が、図４に示した第１ハッシュ値受信処理を行う。
【０１１８】
つぎに、ステップＳ６６０において第１ハッシュ値算出部１２１が、探索要求に対する応答の可否を判定する探索応答可否判定処理を実施する。探索応答可否判定処理については、後述する。
【０１１９】
つぎに、ステップＳ６７０において第１ハッシュ値算出部１２１が、探索応答可否判定処理での判定結果に基づいて、探索要求へ応答するか否かを決定する。第１ハッシュ値算出部１２１は、あらかじめ決定されて第１ハッシュ値算出部１２１に記憶されている判定基準に基づいて、探索要求へ応答するか否かを判定する。
【０１２０】
探索応答可否判定処理での判定結果に基づいて探索要求へ応答すると決定された場合、すなわちステップＳ６７０においてＹｅｓの場合は、ステップＳ６８０において第１ハッシュ値算出部１２１は、探索要求へ応答する探索応答処理を行って、一連の探索要求受信処理が終了する。
【０１２１】
ステップＳ６１０に戻って、探索要求にハッシュ値が含まれていない場合、すなわちステップＳ６１０においてＮｏの場合は、第１通信部１３０は探索要求を受信して第１ハッシュ値算出部１２１に送信し、ステップＳ６６０に進む。
【０１２２】
ステップＳ６３０に戻って、受信可否判定処理での判定結果に基づいてハッシュ値を受信しないと決定された場合、すなわちステップＳ６３０においてＮｏの場合は、第１通信部１３０はハッシュ値を受信せずに探索要求のみを受信して第１ハッシュ値算出部１２１に送信し、ステップＳ６６０に進む。
【０１２３】
ステップＳ６７０に戻って、探索要求に応答しない場合、すなわちステップＳ６７０においてＮｏの場合は、一連の探索要求受信処理が終了する。
【０１２４】
つぎに、第１ＰＬＣ１が探索応答可否判定処理を行う場合について説明する。図１３は、本発明の実施の形態１にかかる第１ＰＬＣ１における探索応答可否判定処理の手順を示すフローチャートである。
【０１２５】
まず、ステップＳ７１０において第１ＰＬＣ１の第１ハッシュ値算出部１２１が、ＰＬＣシステム４００における他のＰＬＣから送信された探索要求が、探索要求への応答についての登録制御装置である探索要求への応答についての登録ＰＬＣから送信された探索要求であるか否かを判定する。探索要求への応答についての登録ＰＬＣは、ＰＬＣシステム４００における他のＰＬＣから探索要求が送信された場合に、探索要求への応答を許可するＰＬＣとして登録されたＰＬＣである。探索要求への応答についての登録ＰＬＣの情報は、あらかじめ決定されて第１通信部１３０に登録されている。なお、登録ＰＬＣの情報は、第１ＰＬＣ１における第１通信部１３０以外の構成部に記憶されていてもよい。
【０１２６】
探索要求が登録ＰＬＣから送信された通信情報でない場合、すなわちステップＳ７１０においてＮｏの場合は、ステップＳ７５０において第１ハッシュ値算出部１２１は、探索要求に応答しない、と判定する。
【０１２７】
一方、探索要求が登録ＰＬＣから送信された探索要求である場合、すなわちステップＳ７１０においてＹｅｓの場合は、第１ハッシュ値算出部１２１は、ステップＳ７２０に進む。ステップＳ７２０において第１ハッシュ値算出部１２１は、探索要求に含まれる認証情報が、登録ＰＬＣに付与されている認証情報と一致するか否かを判定する。登録ＰＬＣに付与されている認証情報は、あらかじめ決定されて第１ハッシュ値算出部１２１に登録されている。なお、登録ＰＬＣに付与されている認証情報は、第１ＰＬＣ１における第１ハッシュ値算出部１２１以外の構成部に記憶されていてもよい。
【０１２８】
探索要求に含まれる認証情報が登録ＰＬＣに付与されている認証情報と一致しない場合、すなわちステップＳ７２０においてＮｏの場合は、ステップＳ７５０において第１ハッシュ値算出部１２１は、探索要求に応答しない、と判定する。
【０１２９】
一方、探索要求に含まれる認証情報が登録ＰＬＣに付与されている認証情報と一致する場合、すなわちステップＳ７２０においてＹｅｓの場合は、第１ハッシュ値算出部１２１は、ステップＳ７３０に進む。ステップＳ７３０において第１ハッシュ値算出部１２１は、当該探索要求を送信した登録ＰＬＣからの前回の探索要求の受信から、既定時間以上が経過しているか否かを判定する。既定時間は、登録ＰＬＣから送信された前回の探索要求の受信からの受信後経過時間であり、登録ＰＬＣについてあらかじめ決定されて第１ハッシュ値算出部１２１に登録されている。なお、既定時間の情報は、第１ＰＬＣ１における第１ハッシュ値算出部１２１以外の構成部に記憶されていてもよい。
【０１３０】
既定時間以上が経過していない場合、すなわちステップＳ７３０においてＮｏの場合は、ステップＳ７５０において第１ハッシュ値算出部１２１は、探索要求に応答しない、と判定する。
【０１３１】
一方、既定時間以上が経過している場合、すなわちステップＳ７３０においてＹｅｓの場合は、ステップＳ７４０において第１ハッシュ値算出部１２１は、探索要求に応答する、と判定する。
【０１３２】
つぎに、第１ＰＬＣ１が探索応答処理を行う場合について説明する。図１４は、本発明の実施の形態１にかかる第１ＰＬＣ１における探索応答処理の手順を示すフローチャートである。
【０１３３】
まず、ステップＳ８１０において第１ハッシュ値算出部１２１が、ハッシュ値を探索要求の送信元のＰＬＣに送信するか否かを判定する。ハッシュ値を送信するか否かは、既定の判定条件に基づいて決定される。判定条件は、あらかじめ決定されて第１ハッシュ値算出部１２１に記憶されている。なお、判定条件は、第１ＰＬＣ１における第１ハッシュ値算出部１２１以外の構成部に記憶されていてもよい。
【０１３４】
ハッシュ値を探索要求の送信元のＰＬＣに送信すると判定された場合、すなわちステップＳ８１０においてＹｅｓの場合は、ステップＳ８２０において第１ハッシュ値算出部１２１が、第１ハッシュ値履歴記憶部１１２に記憶させたハッシュ値を取得する。
【０１３５】
つぎに、ステップＳ８３０において第１ハッシュ値算出部１２１が、探索要求への応答として、ハッシュ値を含めた探索応答のデータを作成する。
【０１３６】
つぎに、ステップＳ８４０において第１ハッシュ値算出部１２１が、ハッシュ値を含む探索応答を探索要求の送信元のＰＬＣに送信して、一連の探索応答処理が終了する。
【０１３７】
ステップＳ８１０に戻って、ハッシュ値を探索要求の送信元のＰＬＣに送信しないと判定された場合、すなわちステップＳ８１０においてＮｏの場合は、ステップＳ８５０において第１ハッシュ値算出部１２１が、探索要求への応答として、ハッシュ値を含めない探索応答のデータを作成する。そして、ステップＳ８４０が実施されて、一連の探索応答処理が終了する。
【０１３８】
第１ＰＬＣ１は、図１２に示した探索要求の受信処理を実施することで、探索要求に含めて他のＰＬＣから送信されたハッシュ値を記憶することができる。また、第１ＰＬＣ１は、図１０に示した第３ハッシュ値受信処理の場合と同様に、探索要求に基づいてイベント履歴を記憶してもよい。探索要求に基づいて記憶したイベント履歴を参照することで、ＰＬＣシステム４００における任意のＰＬＣで出現したハッシュ値を他のＰＬＣで記録開始したことを、ハッシュチェーンの他に、探索要求に基づいて記憶されたイベント履歴を比較することでも判定することが可能となる。
【０１３９】
なお、図１２においては、探索要求の応答に先立ってハッシュ値の受信処理を行っているが、探索要求に応答した場合のみ、ハッシュ値の受信処理を行う処理としてもよい。なお、上述した処理は、探索要求の受信とハッシュ値の受信を１つにまとめた場合の処理の一例であり、探索要求の受信とハッシュ値の受信を１つにまとめた場合の処理は上記の手順に限定されない。
【０１４０】
また、ブロードキャスト通信は、ネットワークに対する負荷が大きく障害の要因となる。このため、探索応答を受信することによって通信先のＰＬＣが明確となった場合は、通信方式を変更してもよい。ここで、ブロードキャストに対して、受信側のスロットが空いているＰＬＣが応答し、送受信の関係を確立する方式を採用することで、ＰＬＣごとに通信の隣接関係を構築できる。そして、送信側のＰＬＣが、隣接関係における隣のＰＬＣにハッシュ値を送信する処理を行うことで、ネットワークの負荷を上げずにハッシュ値を送受信することができる。すなわち、通常の通信におけるデータの通信経路と、ハッシュ値の通信経路とを別に構成してもよい。
【０１４１】
また、上記においては、ハッシュ値を送信する方法として、一対一の関係の通信およびブロードキャストについて示したが、ハッシュ値を送信する方式として送信を一方通行としてもよい。サイクリック通信は、ネットワークによっては確実に受信される方法ではない。このようなサイクリック通信において、常にデータを更新し続けるステータスを公開する送信側のＰＬＣのデータとして現在の最新のハッシュ値を送信し続ける構成をとることもできる。また、確実に受信されることが期待できる、あらかじめ登録したアドレスまたは探索の結果検出した１つまたは複数のアドレスに対して順番にハッシュ値を送信してもよい。
【０１４２】
つぎに、ＰＬＣシステム４００における複数のＰＬＣである第１ＰＬＣ１、第２ＰＬＣ２、第３ＰＬＣ３、・・・、第ｎＰＬＣｎにおける各イベント履歴記憶部に蓄積されたイベント履歴を、１箇所に収集した際のイベント履歴の例について説明する。
【０１４３】
図１５は、本発明の実施の形態１にかかるイベント履歴サーバ５００に収集されたＰＬＣのイベント履歴記憶部に蓄積されたイベント履歴の一例を説明する図である。イベント履歴サーバ５００は、上述した履歴収集用記憶装置１０であって、ＰＬＣシステム４００における複数のＰＬＣの各イベント履歴記憶部に蓄積されたイベント履歴を収集して蓄積する、イベント履歴の蓄積サーバである。図１５においては、図中の各ＰＬＣの下方に、各ＰＬＣに記憶されたイベントの詳細を示している。ここでは、各ＰＬＣに６個のイベント履歴を記憶可能な場合について示している。
【０１４４】
第１ＰＬＣ１のイベント履歴記憶部には、イベント履歴データＥａ１、イベント履歴データＥａ２、イベント履歴データＥａ３、イベント履歴データＥａ４、イベント履歴データＥａ５およびイベント履歴データＥａ６が記憶されており、これらのイベント履歴データがコピーされてイベント履歴サーバ５００に送信されている。
【０１４５】
第２ＰＬＣ２のイベント履歴記憶部には、イベント履歴データＥｂ１、イベント履歴データＥｂ２、イベント履歴データＥｂ３、イベント履歴データＥｂ４、イベント履歴データＥｂ５およびイベント履歴データＥｂ６が記憶されており、これらのイベント履歴データがコピーされてイベント履歴サーバ５００に送信されている。
【０１４６】
第３ＰＬＣ３のイベント履歴記憶部には、イベント履歴データＥｃ１、イベント履歴データＥｃ２、イベント履歴データＥｃ３、イベント履歴データＥｃ４およびイベント履歴データＥｃ５が記憶されており、これらのイベント履歴データがコピーされてイベント履歴サーバ５００に送信されている。
【０１４７】
第ｎＰＬＣｎのイベント履歴記憶部には、イベント履歴データＥｎ１、イベント履歴データＥｎ２、イベント履歴データＥｎ３、イベント履歴データＥｎ４、イベント履歴データＥｎ５およびイベント履歴データＥｎ６が記憶されており、これらのイベント履歴データがコピーされてイベント履歴サーバ５００に送信されている。
【０１４８】
図１５において、イベント履歴データ同士をつなぐ実線は、イベント履歴データ同士がハッシュチェーンによりつながりを有していることを示している。また、図１５において、イベント履歴データ同士をつなぐ矢印線は、イベント履歴データのハッシュ値が他のＰＬＣに送信されていることを示している。
【０１４９】
イベント履歴サーバ５００に収集されたイベント履歴を検証することによって、第１ＰＬＣ１がイベント履歴データＥａ１のハッシュ値を、第２ＰＬＣ２、第３ＰＬＣ３、・・・、第ｎＰＬＣｎに送信していることが検出できる。イベント履歴データＥａ１のハッシュ値を受信した各ＰＬＣでは、イベント履歴データＥａ１のハッシュ値の受信をイベントとしてイベントデータが作成されている。ただし、第３ＰＬＣ３については、第２ＰＬＣ２および第ｎＰＬＣｎと同様に、イベント履歴データＥｃ１の後にイベント履歴データＥａ１のハッシュ値を受信していることが推測される。しかしながら、第３ＰＬＣ３では、イベント履歴データＥａ１のハッシュ値が消失し、または破損したため、イベント履歴データＥａ１のハッシュ値の受信をイベントとしたイベントデータが作成されず、記憶されていないことが検出できる。
【０１５０】
また、イベント履歴サーバ５００に収集されたイベント履歴を検証することによって、第１ＰＬＣ１がイベント履歴データＥａ５のハッシュ値を、第２ＰＬＣ２、第３ＰＬＣ３、・・・、第ｎＰＬＣｎに送信していることが検出できる。また、第１ＰＬＣ１は、イベント履歴データＥａ５のハッシュ値とともに、イベント履歴データＥａ１のハッシュ値を、第２ＰＬＣ２、第３ＰＬＣ３、・・・、第ｎＰＬＣｎに送信していることが検出できる。イベント履歴データＥａ５のハッシュ値を受信した各ＰＬＣでは、イベント履歴データＥａ５およびイベント履歴データＥａ１のハッシュ値の受信をイベントとしてイベントデータが作成されている。
【０１５１】
また、第３ＰＬＣ３のイベント履歴データＥｃ５を検証することによって、第３ＰＬＣ３では、イベント履歴データＥａ１のハッシュ値を未受信であることが検出できる。
【０１５２】
したがって、ＰＬＣシステム４００における複数のＰＬＣからイベント履歴データをイベント履歴サーバ５００に収集し、検証することで、ＰＬＣシステム４００全体としてどのイベント履歴データが消失したかを特定することができる。また、ＰＬＣシステム４００全体としてどれだけの量のイベント履歴データが消失したかを定量的に検出することができ、ＰＬＣシステム４００全体としての信頼度についても定量的に算出することが可能である。
【０１５３】
また、第１ＰＬＣ１のイベント履歴データについて、イベント履歴データＥａ１から順番にハッシュ値を再計算して検証することによって、ハッシュチェーンにより、第１ＰＬＣ１に記憶されているイベント履歴データ同士が正しく記憶されていることが確認できる。第２ＰＬＣ２、第３ＰＬＣ３、・・・、第ｎＰＬＣｎにおいても同様である。これにより、第１ＰＬＣ１、第２ＰＬＣ２、第３ＰＬＣ３、・・・、第ｎＰＬＣｎに記憶されているイベント履歴データが、各ＰＬＣにおいて記憶された正しいデータであることを確認できる。
【０１５４】
また、ＰＬＣシステム４００においては、第１ＰＬＣ１におけるイベント履歴データＥａ５のハッシュ値およびイベント履歴データＥａ１のハッシュ値の送信に例示されるように、他のＰＬＣにイベント履歴データのハッシュ値を送信する際に複数のイベント履歴データのハッシュ値を送信することができる。すなわち、ＰＬＣシステム４００においては、最新のイベント履歴データのハッシュ値を送信する際に、以前に送信した１つまたは複数のイベント履歴データのハッシュ値を含めて送信することができる。これにより、上述したように第３ＰＬＣ３のイベント履歴データＥｃ５を検証することによって、第３ＰＬＣ３では、イベント履歴データＥａ１のハッシュ値を未受信であることが検出でき、未受信のイベント履歴データのハッシュ値を記憶することができる。
【０１５５】
図１６は、上述した実施の形態１にかかるＰＬＣとしての機能を実現するコンピュータ装置６００の構成の一例を模式的に示すブロック図である。上述した実施の形態１にかかるＰＬＣにおいて実行される処理を、該処理手順が格納されたプログラムとして構成し、このプログラムを図１６に示すようにＣＰＵ、記憶装置といった構成を有するコンピュータ装置で実行することによって実現することができる。
【０１５６】
図１６に示されるように、コンピュータ装置６００は、ＬＣＤ（Liquid  Crystal  Display）といった表示装置６０１、簡易なキーボードといった入力装置６０２、演算を行うＣＰＵ６０３、ＲＯＭ（Read  Only  Memory）といった不揮発性メモリ６０４、ＲＡＭ（Random  Access  Memory）といった揮発性メモリ６０５、表示装置６０１に表示する表示画面を記憶する表示用メモリ６０６、フラッシュメモリといった着脱可能な外部メモリとのインタフェースである外部メモリインタフェース６０７、外部機器との間で通信を行う通信インタフェース６０８などがバス６０９を介して接続された構成を有する。なお、表示装置６０１、入力装置６０２および表示用メモリ６０６が含まれない構成としてもよい。
【０１５７】
上記の第１記憶部１１０は、不揮発性メモリ６０４によって実現される。そして、不揮発性メモリ６０４に格納された上記のＰＬＣの処理手順が記述されたプログラムが揮発性メモリ６０５にロードされ、ＣＰＵ６０３によって実行されることで、第１制御部１２０および第１通信部１３０が実現される。このプログラムは、ハードディスク、ＣＤ（Compact  Disk）−ＲＯＭ（Read  Only  Memory）、ＭＯ（Magneto-Optical  disk）、ＤＶＤ（Digital  Versatile  Disc）に例示される、コンピュータ装置６００で読取可能な記録媒体に記録され、または、このプログラムは、インターネットなどのネットワークを介して配布することもできる。この場合には、通信インタフェース６０８を介して接続された情報処理端末からプログラムが不揮発性メモリ６０４上に格納される。
【０１５８】
上述したように、本実施の形態１にかかる第１ＰＬＣ１は、他の制御装置３０にイベント履歴データのハッシュ値を送信する機能を有する。すなわち、第１ＰＬＣ１は、第１ＰＬＣ１に発生したイベントに対応するハッシュ値を他の制御装置３０に記憶させることができるため、第１ＰＬＣ１で発生したイベントに対応するハッシュ値を複数の装置で情報共有できる。これにより、第１ＰＬＣ１では、検証装置を用いて、第１ＰＬＣ１と他の制御装置３０とに記憶されている１つのイベントに対応する２つのハッシュ値を比較することで、第１ＰＬＣ１に記憶されたハッシュ値が第１ＰＬＣ１の記録処理で記録された正しいハッシュ値であるかどうかを検証することが可能である。
【０１５９】
すなわち、検証装置を用いて、複数の他の制御装置３０に記憶されているハッシュ値と第１ＰＬＣ１に記憶されたハッシュ値とを比較し、複数の他の制御装置３０に記憶されているハッシュ値が同じであり、複数の他の制御装置３０に記憶されているハッシュ値と第１ＰＬＣ１に記憶されたハッシュ値とが異なる場合には、他の制御装置３０に記憶されているハッシュ値を正しいハッシュ値として扱うことができる。
【０１６０】
また、第１ＰＬＣ１では、検証装置を用いて、第１ＰＬＣ１に記憶されたイベント履歴データのハッシュ値を再算出し、再計算したハッシュ値と、このイベント履歴データに対応するハッシュ値であり他の制御装置３０に記憶されているハッシュ値と、を比較することで、第１ＰＬＣ１に記憶されたイベント履歴データが第１ＰＬＣ１の記録処理で記録された正しいイベント履歴データであるかどうかを検証することが可能である。すなわち、再計算したハッシュ値と、このイベント履歴データに対応するハッシュ値であり他の制御装置３０に記憶されているハッシュ値とが同じである場合に、第１ＰＬＣ１に記憶されたイベント履歴データが第１ＰＬＣ１の記録処理で記録された正しいイベント履歴データである。
【０１６１】
また、第１ＰＬＣ１は、他の制御装置３０にハッシュ値を送信する毎に、前回のイベントのハッシュ値と、今回のイベントデータと、今回のイベントのハッシュ値と、を送信することができる。そして、他の制御装置３０では、イベント履歴データの実データを用いてハッシュ値を再計算することで、受信したイベント履歴データの実データおよびハッシュ値が正しいことを検証することが可能である。
【０１６２】
そして、第１ＰＬＣ１に記憶されたハッシュ値が第１ＰＬＣ１の記録処理で記録された正しいハッシュ値ではないことが検出された場合には、検証装置において、他の制御装置３０に記憶されているハッシュ値を正しいハッシュ値として用いて、第１ＰＬＣ１に記憶されたイベント履歴データのハッシュ値を再算出できる。そして、検証装置において、再計算したハッシュ値と、このイベント履歴データに対応するハッシュ値であり他の制御装置３０に記憶されている正しいハッシュ値と、を比較することで、第１ＰＬＣ１に記憶されたイベント履歴データが第１ＰＬＣ１の記録処理で記録された正しいイベント履歴データであるかどうかを検証することが可能である。これにより、第１ＰＬＣ１に記憶されたハッシュ値が改ざんされていた場合でも、第１ＰＬＣ１に記憶されたイベント履歴データが第１ＰＬＣ１の記録処理で記録された正しいイベント履歴データであるかどうかを検証することが可能である。この場合、再計算したハッシュ値と他の制御装置３０に記憶されているハッシュ値とが異なる場合には、第１ＰＬＣ１に記憶されたイベント履歴データは、第１ＰＬＣ１の記録処理で記録された正しいイベント履歴データではなく、改ざんされている。
【０１６３】
なお、上述した検証装置は、図１６に示された構成を有するコンピュータ装置６００によって実現できる。すなわち、上述した、再計算、ハッシュ値の比較処理といった処理の処理手順が記述されたプログラムが揮発性メモリ６０５にロードされ、ＣＰＵ６０３によって実行されることで検証装置の機能を実現できる。
【０１６４】
また、本実施の形態１にかかる第１ＰＬＣ１は、他のＰＬＣから送信されるハッシュ値をイベント履歴データに含めて記憶する機能を有する。すなわち、第１ＰＬＣ１は、他のＰＬＣに発生したイベントに対応するハッシュ値を記憶することができるため、他のＰＬＣで発生したイベントに対応するハッシュ値を複数の装置で情報共有できる。これにより、第１ＰＬＣ１は、他のＰＬＣにおける他の制御装置３０としての役割を果たすことができる。
【０１６５】
上述した第１ＰＬＣ１を用いてＰＬＣシステムを構成することで、他のＰＬＣに記憶されたイベントのハッシュ値の改ざんが行われた場合でも、ハッシュ値の改ざんを容易に検出することが可能なＰＬＣシステムを実現できる。そして、上述した第１ＰＬＣ１を用いてＰＬＣシステムを構成することで、第１ＰＬＣ１に記憶されたイベント履歴データが第１ＰＬＣ１の記録処理で記録された正しいイベント履歴データであるかどうかを検証することが可能なＰＬＣシステムを実現できる。すなわち、ＰＬＣシステム内においてイベント履歴データのハッシュ値を相互に保存することで、ＰＬＣシステム全体でイベント履歴データのハッシュ値のチェーンを共有し、ハッシュ値およびイベント履歴データの正当性を検証でき、ハッシュ値の改ざんに耐えられるデータ保護を実現することができる。これにより、ハッシュ値の暗号化といった複雑な処理および計算機資源の消費が不要となる。
【０１６６】
また、上記において説明した種々の機能を組み合わせることで、ＰＬＣごとの計算機資源であるメモリおよび計算量をほとんど消費せずに、不確実なネットワークで構成されたシステム全体でデータ信頼性の高いイベント履歴データを収集することができる。
【０１６７】
以上の実施の形態に示した構成は、本発明の内容の一例を示すものであり、別の公知の技術と組み合わせることも可能であるし、本発明の要旨を逸脱しない範囲で、構成の一部を省略、変更することも可能である。
【符号の説明】
【０１６８】
１  第１ＰＬＣ、２  第２ＰＬＣ、３  第３ＰＬＣ、１０  履歴収集用記憶装置、２０，４０，７０  通信線、３０  他の制御装置、５０  ネットワーク、６０  被制御装置、１１０  第１記憶部、１１１  第１イベント履歴記憶部、１１２  第１ハッシュ値履歴記憶部、１１３  第１プログラム記憶部、１２０  第１制御部、１２１  第１ハッシュ値算出部、１２２  第１異常検出部、１３０  第１通信部、２１０  第２記憶部、２１１  第２イベント履歴記憶部、２１２  第２ハッシュ値履歴記憶部、２１３  第２プログラム記憶部、２２０  第２制御部、２２１  第２ハッシュ値算出部、２２２  第２異常検出部、２３０  第２通信部、３００，４００  ＰＬＣシステム、５００  イベント履歴サーバ、６００  コンピュータ装置、６０１  表示装置、６０２  入力装置、６０３  ＣＰＵ、６０４  不揮発性メモリ、６０５  揮発性メモリ、６０６  表示用メモリ、６０７  外部メモリインタフェース、６０８  通信インタフェース、６０９  バス、ｎ  第ｎＰＬＣ。
【図１】
0006584699.tif 000002
【図２】
0006584699.tif 000003
【図３】
0006584699.tif 000004
【図４】
0006584699.tif 000005
【図５】
0006584699.tif 000006
【図６】
0006584699.tif 000007
【図７】
0006584699.tif 000008
【図８】
0006584699.tif 000009
【図９】
0006584699.tif 000010
【図１０】
0006584699.tif 000011
【図１１】
0006584699.tif 000012
【図１２】
0006584699.tif 000013
【図１３】
0006584699.tif 000014
【図１４】
0006584699.tif 000015
【図１５】
0006584699.tif 000016
【図１６】
0006584699.tif 000017