(57)【特許請求の範囲】
【請求項１】
ネットワークを介して接続されている情報処理装置上で動作する不正モジュールを特定して無効化する不正モジュール特定装置であって、
改ざん検出を行う複数のモジュールから、改ざん検出結果を受信する受信手段と、
前記複数のモジュールのうちの一つを正常モジュールと仮定し、前記仮定に基づいて、受信した複数の改ざん検出結果における矛盾の有無を判断し、矛盾が有る場合に、正常モジュールと仮定した前記モジュールを不正モジュールと特定する判断手段と、
特定された不正モジュールの無効化指示を出力する無効化手段と
を備えることを特徴とする不正モジュール特定装置。
【請求項２】
前記判断手段は、
正常モジュールと仮定したモジュールの識別情報を記憶する仮正常モジュール群記憶手段と、
前記複数のモジュールから一つを選択し、正常モジュールと仮定し、識別情報を前記仮正常モジュール群記憶手段に記録する仮定手段と、
前記仮定手段により正常モジュールと仮定された前記モジュールを起点として、改ざん検出処理の結果、改ざんが検出されないモジュールを正常モジュールと仮定し、識別情報を前記仮正常モジュール群記憶手段に記録する手順を繰り返す仮正常モジュール群生成手段と、
前記仮正常モジュール群記憶手段に記憶されている識別情報に対応するモジュールによる改ざん検出結果に矛盾があるか否か判断する矛盾検出手段と、
矛盾が検出された場合に、前記仮定手段において正常モジュールと仮定した前記モジュールを不正モジュールと特定する特定手段と
を備えることを特徴とする請求項１に記載の不正モジュール特定装置。
【請求項３】
前記仮定手段は、第１モジュールを前記正常モジュールと仮定し、
前記矛盾検出手段は、前記第１モジュールと、前記第１モジュールによる改ざん検出結果が正常である第２モジュールとが改ざん検出を行なった第３モジュールについて、前記第１モジュールによる改ざん検出結果と前記第２モジュールによる改ざん検出結果とが矛盾するか判断し、
前記第１モジュールによる改ざん検出結果と前記第２モジュールによる改ざん検出結果とが矛盾する場合、前記特定手段は、前記第１モジュールを不正モジュールと特定する
ことを特徴とする請求項２に記載の不正モジュール特定装置。
【請求項４】
前記判断手段は、
一方向に循環して改ざん検出を行うモジュール群である循環パターンに含まれる複数のモジュールの識別情報を記憶している循環記憶手段と、
前記循環パターンに含まれる複数のモジュールが一方向に循環して改ざん検出を行った結果がすべて正常である場合に、前記循環パターンに含まれる複数のモジュールを正常モジュールと仮定する仮定手段と、
前記循環パターンに含まれる２以上のモジュールによる他のモジュールへの改ざん検出結果に矛盾があるか否か判断する矛盾検出手段と、
矛盾がある場合、前記循環パターンに含まれるすべてのモジュールを不正モジュールと特定する特定手段と
を備えることを特徴とする請求項１に記載の不正モジュール特定装置。
【請求項５】
前記矛盾検出手段は、
前記循環パターンに含まれる第１モジュールと第２モジュールとが改ざん検出を行った前記循環パターンに含まれない第３モジュールについて、前記第１モジュールによる改ざん検出結果と前記第２モジュールによる改ざん検出結果とが矛盾するか判断し、
前記第１モジュールによる改ざん検出結果と前記第２モジュールによる改ざん検出結果とが矛盾する場合、前記特定手段は、前記循環パターンに含まれるすべてのモジュールを不正モジュールと特定する
ことを特徴とする請求項４に記載の不正モジュール特定装置。
【請求項６】
前記矛盾検出手段は、
前記循環パターンに含まれる第１モジュールと第２モジュールとが改ざん検出を行った前記循環パターンに含まれる第３モジュールについて、前記第１モジュールによる改ざん検出結果と前記第２モジュールによる改ざん検出結果とが矛盾するか判断し、
前記第１モジュールによる改ざん検出結果と前記第２モジュールによる改ざん検出結果とが矛盾する場合、前記特定手段は、前記循環パターンに含まれるすべてのモジュールを不正モジュールと特定する
ことを特徴とする請求項４に記載の不正モジュール特定装置。
【請求項７】
前記矛盾検出手段は、
前記循環パターンに含まれる第１モジュールと第２モジュールとが相互に改ざん検出を行った結果が矛盾するか否か判断し、
相互に改ざん検出を行った結果が矛盾する場合、前記特定手段は、前記循環パターンに含まれるすべてのモジュールを不正モジュールと特定する
ことを特徴とする請求項４に記載の不正モジュール特定装置。
【請求項８】
前記不正モジュール特定装置は、さらに、
検証元のモジュールと検証先のモジュールとの組み合わせである監視パターンを記憶している監視パターン記憶手段を備え、
前記循環記憶手段は、前記監視パターン記憶手段に記憶されている監視パターンから、一方向に循環して改ざん検出を行うモジュール群である循環パターンを検出し、検出した前記循環パターンに含まれる複数のモジュールの識別情報を記憶する
ことを特徴とする請求項４に記載の不正モジュール特定装置。
【請求項９】
前記判断手段は、
前記循環記憶手段に複数の循環パターンが記憶されている場合、循環パターンに含まれるモジュール数が少ない循環パターンから順に、前記仮定手段、前記矛盾検出手段、および前記特定手段の処理を行う
こと特徴とする請求項４に記載の不正モジュール特定装置。
【請求項１０】
前記判断手段は、
前記循環記憶手段に複数の循環パターンが記憶されており、かつ、各循環パターンに含まれるモジュール数が同数である場合、各循環パターンに含まれるモジュールに対する改ざん検出処理を行う当該循環パターンに含まれないモジュールの数が多い循環パターンから順に、前記仮定手段、前記矛盾検出手段、および前記特定手段の処理を行う
こと特徴とする請求項９に記載の不正モジュール特定装置。
【請求項１１】
前記循環記憶手段は、さらに、
循環パターン毎に、各循環パターンに含まれるモジュール数、および、当該循環パターンに含まれるモジュールに対する改ざん検出処理を行う当該循環パターンに含まれないモジュールの数を含む循環パターンリストを記憶しており、
前記判断手段は、前記循環パターンリストを参照して、前記仮定手段、前記矛盾検出手段、および前記特定手段により処理を行う循環パターンの順序を決定する
ことを特徴とする請求項１０記載の不正モジュール特定装置。
【請求項１２】
前記循環記憶手段に記憶されている前記循環パターンリストは、各循環パターンに含まれるモジュール数が少ない順に、各循環パターンに含まれるモジュール数、および、当該循環パターンに含まれるモジュールに対する改ざん検出処理を行う当該循環パターンに含まれないモジュールの数を配置している
ことを特徴とする請求項１１に記載の不正モジュール特定装置。
【請求項１３】
前記不正モジュール特定装置は、さらに、
前記情報処理装置で動作し、相互に改ざん検出処理を行う複数のモジュールについて、検証元のモジュールと検証先のモジュールとの組み合わせである監視パターンを生成する監視パターン生成手段と、
生成した前記監視パターンを、前記情報処理装置へ送信する監視パターン送信手段とを備え、
前記監視パターン生成手段は、複数のモジュールが一方向に循環して改ざん検出を行う循環パターンを含む前記監視パターンを生成する
こと特徴とする請求項１に記載の不正モジュール特定装置。
【請求項１４】
ネットワークを介して接続されている情報処理装置上で動作する不正モジュールを特定して無効化する不正モジュール特定装置で用いられる不正モジュール特定方法であって、
改ざん検出を行う複数のモジュールから、改ざん検出結果を受信する受信ステップと、
前記複数のモジュールのうちの一つを正常モジュールと仮定し、前記仮定に基づいて、受信した複数の改ざん検出結果における矛盾の有無を判断し、矛盾が有る場合に、正常モジュールと仮定した前記モジュールを不正モジュールと特定する判断ステップと、
特定された不正モジュールの無効化指示を出力する無効化ステップと
を含むことを特徴とする不正モジュール特定方法。
【請求項１５】
ネットワークを介して接続されている情報処理装置上で動作する不正モジュールを特定して無効化する不正モジュール特定プログラムであって、
不正モジュール特定装置に、
改ざん検出を行う複数のモジュールから、改ざん検出結果を受信する受信ステップと、
前記複数のモジュールのうちの一つを正常モジュールと仮定し、前記仮定に基づいて、受信した複数の改ざん検出結果における矛盾の有無を判断し、矛盾が有る場合に、正常モジュールと仮定した前記モジュールを不正モジュールと特定する判断ステップと、
特定された不正モジュールの無効化指示を出力する無効化ステップと
を実行させることを特徴とする不正モジュール特定プログラム。
【請求項１６】
ネットワークを介して接続されている情報処理装置上で動作する不正モジュールを特定して無効化する不正モジュール特定装置で用いられる集積回路であって、
改ざん検出を行う複数のモジュールから、改ざん検出結果を受信する受信手段と、
前記複数のモジュールのうちの一つを正常モジュールと仮定し、前記仮定に基づいて、受信した複数の改ざん検出結果における矛盾の有無を判断し、矛盾が有る場合に、正常モジュールと仮定した前記モジュールを不正モジュールと特定する判断手段と、
特定された不正モジュールの無効化指示を出力する無効化手段と
を備えることを特徴とする集積回路。
【請求項１７】
情報処理装置と、前記情報処理装置上で動作する不正モジュールを特定して無効化する不正モジュール特定装置とから構成される不正モジュール無効化システムであって、
前記情報処理装置は、
秘匿データを含み、且つ、暗号化されているアプリケーションプログラムと、
前記秘匿データを保護する機能を有する保護制御モジュールと、
ソフトウェアを更新する機能を有し、相互に改ざんの有無を検証する複数の更新モジュールと、
前記不正モジュール特定装置は、
前記複数の更新モジュールから、改ざん検出結果を受信する受信手段と、
前記複数の更新モジュールのうちの一つを正常モジュールと仮定し、前記仮定に基づいて、受信した複数の改ざん検出結果における矛盾の有無を判断し、矛盾が有る場合に、正常モジュールと仮定した前記更新モジュールを不正モジュールと特定する判断手段と、
特定された不正モジュールの無効化指示を前記情報処理装置へ出力する無効化手段とを備える
ことを特徴とする不正モジュール無効化システム。
【請求項１８】
情報処理装置と、前記情報処理装置上で動作する不正モジュールを特定して無効化する不正モジュール特定装置とから構成される不正モジュール無効化システムで用いられる不正モジュール無効化方法であって、
前記情報処理装置は、
秘匿データを含み、且つ、暗号化されているアプリケーションプログラムと、
前記秘匿データを保護する機能を有する保護制御モジュールと、
ソフトウェアを更新する機能を有し、相互に改ざんの有無を検証する複数の更新モジュールとを備え、
前記不正モジュール無効化方法は、
前記複数の更新モジュールにより、相互に改ざん検出を行う改ざん検出ステップと、
前記複数の更新モジュールから、改ざん検出結果を受信する受信ステップと、
前記複数の更新モジュールのうちの一つを正常モジュールと仮定し、前記仮定に基づいて、受信した複数の改ざん検出結果における矛盾の有無を判断し、矛盾が有る場合に、正常モジュールと仮定した前記更新モジュールを不正モジュールと特定する判断ステップと、
特定された不正モジュールの無効化指示を出力する無効化ステップと
を含むことを特徴とする不正モジュール無効化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不正動作を行う可能性のあるモジュールを特定する技術に関する。
【背景技術】
【０００２】
従来、認証鍵等の秘匿データを有しているアプリケーションプログラムが、悪意のある第三者（以下、「攻撃者」という）に解析されないようにするため、耐タンパモジュールによる保護が知られている。耐タンパモジュールは、通常、ハードウェアとして機器上に実装され、アプリケーションプログラムを保護している。しかし、日々新たな攻撃手法が考案される昨今の現状を踏まえると、新たな攻撃手法に柔軟に対応するためにも、更新が容易なコンピュータプログラムであるソフトウェアにより、アプリケーションプログラムを保護することが望ましい。
【０００３】
ソフトウェアによってアプリケーションプログラムを保護する技術として、例えば、ハッシュ値を用いた改ざん検証や、アプリケーションプログラムを利用しない時には暗号化して保存しておき、利用する時にのみ復号してメモリへロードする復号ロード機能等がある。
ところが、このような技術を利用しても、アプリケーションプログラムを保護するソフトウェア（以下、「保護制御モジュール」という）自体が攻撃者により攻撃され得る。保護制御モジュールが改ざんされると、アプリケーションプログラムが攻撃者の攻撃にさらされることになる。
【０００４】
特許文献１は、プログラムの改変の有無をチェックするチェックプログラム自体の改変が行われた場合でも、改変されたプログラムの実行を確実に阻止することが可能なプログラムの改変防止のための技術を開示している。この技術によると、プログラムの改変の有無を監視するためのチェックプログラムを複数用意し、各チェックプログラムが他のチェックプログラムのうちのいずれかを監視する。以下にこの技術について簡単に説明する。
【０００５】
２つの監視モジュールＡ、Ｂが相互に監視を行うものとする。監視モジュールＡ、Ｂはそれぞれ、攻撃者による改ざんから保護すべきプログラム（本体プログラムＡ、Ｂ）、他のモジュールが改ざんされているかを検出するためのプログラム（チェックプログラムＡ、Ｂ）、及びそれぞれのチェックプログラムが改ざん検出を行うために必要な情報（チェック情報Ａ、Ｂ）から構成される。チェックプログラムＡは、監視モジュールＢの本体プログラムＢとチェックプログラムＢの改ざん検出を、チェック情報Ａを用いて行う。さらにチェックプログラムＢは、監視モジュールＡの本体プログラムＡとチェックプログラムＡの改ざん検出を、チェック情報Ｂを用いて行う。この様に、それぞれの監視モジュールが、相手の監視モジュールの本体プログラム及びチェックプログラムの改ざん検出を行う。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】日本国特許第３０５６７３２号公報
【特許文献２】ＷＯ２００８／０９９６８２
【非特許文献】
【０００７】
【非特許文献１】岡本龍明、山本博資、「現代暗号」、産業図書（１９９７年）
【非特許文献２】ＩＴＵ−Ｔ  Ｒｅｃｏｍｍｅｎｄａｔｉｏｎ  Ｘ．５０９  （１９９７  Ｅ）：  Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｅｃｈｎｏｌｏｇｙ  −  Ｏｐｅｎ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ  −  Ｔｈｅ  Ｄｉｒｅｃｔｏｒｙ：  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｆｒａｍｅｗｏｒｋ，１９９７
【非特許文献３】Ｆ．Ｐｒｅｐａｒａｔａ，Ｇ． Ｍｅｔｚｅ ａｎｄ  Ｒ．Ｔ． Ｃｈｉｅｎ，“Ｏｎ  Ｔｈｅ  Ｃｏｎｎｅｃｔｉｏｎ  ＡｓｓｉｇｎｍｅｎｔＰｒｏｂｌｅｍ  ｏｆ  Ｄｉａｇｎｏｓａｂｌｅ  Ｓｙｓｔｅｍｓ，”  ＩＥＥＥ  Ｔｒａｎｓ．  Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｍｐｕｔｅｒｓ，ｖｏｌ．１６，ｐｐ．８４８−８５４，１９６８．
【発明の概要】
【発明が解決しようとする課題】
【０００８】
このようにして改ざん検出を行い、改ざんを検出した場合には、例えば、ネットワークを介して、外部のサーバ装置から正常な保護制御モジュールを取得し、改ざんされた保護制御モジュールを正常な保護制御モジュールに更新すればよい。しかしながら、保護制御モジュールを更新する機能を担うモジュール（以下、「更新モジュール」という）も攻撃者により攻撃され得る。
【０００９】
更新モジュールが改ざんされると、保護制御モジュールが正しく更新されず、アプリケーションプログラムが有する秘匿データが漏洩する恐れがある。更新モジュールの改ざん検出を行うモジュールをさらに備えることにより、更新モジュールの改ざんを検出することは可能となるが、当該モジュール自体もやはり改ざんされる恐れがあるため、根本的な解決には至らない。
【００１０】
上記においては、保護制御モジュールの更新例を用いて説明したが、保護制御モジュールの更新以外に、アプリケーションプログラムや更新モジュール自身を更新する場合においても、これらが正しく更新されないことにより同様の問題が生じる。
上記のような問題を解決するために、本発明は、従来よりも高い確率で改ざんされている不正モジュールを特定することができる不正モジュール特定装置、情報処理装置、不正モジュール特定方法、不正モジュールー特定プログラム、集積回路、ソフトウェア更新システム、およびソフトウェア更新方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記の目的を達成するために、本発明は、ネットワークを介して接続されている情報処理装置上で動作する不正モジュールを特定して無効化する不正モジュール特定装置であって、改ざん検出を行う複数のモジュールから、改ざん検出結果を受信する受信手段と、前記複数のモジュールのうちの一つを正常モジュールと仮定し、前記仮定に基づいて、受信した複数の改ざん検出結果における矛盾の有無を判断し、矛盾が有る場合に、正常モジュールと仮定した前記モジュールを不正モジュールと特定する判断手段と、特定された不正モジュールの無効化指示を出力する無効化手段とを備えることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、モジュールが相互に改ざん検出処理を行った結果の矛盾を検出することにより不正なモジュールを特定するので、改ざん検出結果を偽って通知してきた不正なモジュールを論理的な検証方法を用いて効果的に特定することができる。そして、特定された不正なモジュールの無効化指示を出力することにより、不正なモジュールを適切に排除することができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１におけるソフトウェア更新システム１０の全体構成図である。
【図２】実施の形態１における更新モジュール１３１のブロック図である。
【図３】実施の形態１における保護制御モジュール１２０のブロック図である。
【図４】実施の形態１におけるアクセス制御モジュール１４０のブロック図である。
【図５】実施の形態１における機器１００のハードウェア構成図である。
【図６】実施の形態１における機器１００のソフトウェア構成図である。
【図７】実施の形態１における判断部２１０のブロック図である。
【図８】実施の形態１における更新用ソフトウェア配布部２２０のブロック図である。
【図９】実施の形態１におけるモジュール無効化部２３０のブロック図である。
【図１０】実施の形態１におけるソフトウェア更新システム１０全体の動作を示すフローチャートである。
【図１１】実施の形態１における初期設定処理の動作を説明するための図である。
【図１２】実施の形態１における初期設定処理のシーケンス図である。
【図１３】実施の形態１における更新モジュール初期化処理のフローチャートである。
【図１４】実施の形態１における検知処理のシーケンス図である。
【図１５】実施の形態１における解析・判断処理のシーケンス図である。
【図１６】実施の形態１における相互認証処理のシーケンス図である。
【図１７】実施の形態１における相互認証処理のシーケンス図である。
【図１８】実施の形態１における回復処理のフローチャートである。
【図１９】実施の形態１における相互監視処理のシーケンス図である。
【図２０】実施の形態１における更新処理のシーケンス図である。
【図２１】実施の形態１における更新処理のシーケンス図である。
【図２２】実施の形態１における相互監視処理と更新処理との連携動作について説明するための図である。
【図２３】実施の形態１における再暗号化処理のシーケンス図である。
【図２４】実施の形態１における次ラウンド準備処理のシーケンス図である。
【図２５】実施の形態１における無効化処理のシーケンス図である。
【図２６】実施の形態２における更新モジュール群１３０ｂの構成を説明するための図である。
【図２７】実施の形態２における判断部２１０ｂのブロック図である。
【図２８】実施の形態２における不正モジュール特定部６０５のブロック図である。
【図２９】実施の形態２における循環検出部６０６のブロック図である。
【図３０】実施の形態２における監視パターンについて説明するための図である。
【図３１】実施の形態２における相互監視結果について説明するための図である。
【図３２】実施の形態２における相互監視結果の矛盾について説明するための図である。
【図３３】実施の形態２における不正モジュール特定処理のフローチャートである。
【図３４】実施の形態２における不正モジュール特定処理を説明するための図である。
【図３５】実施の形態２における循環監視パターンについて説明するための図である。
【図３６】実施の形態２における循環監視パターンの矛盾について説明するための図である。
【図３７】実施の形態２における循環監視パターンの矛盾について説明するための図である。
【図３８】実施の形態２における循環監視パターンを考慮した不正モジュール特定処理のフローチャートである。
【図３９】実施の形態２における循環監視パターンリスト２１００のデータ構成を示す図である。
【図４０】実施の形態２における循環監視パターンリスト２２００のデータ構成を示す図である。
【図４１】実施の形態２における循環監視パターンを考慮した不正モジュール特定処理のフローチャートである。
【図４２】実施の形態２における循環監視パターンを考慮した不正モジュール特定処理のフローチャートである。
【図４３】循環監視パターンを考慮して分散情報を配布する具体例を説明するための図である。
【図４４】循環監視パターンを考慮して分散情報を配布する具体例を説明するための図である。
【図４５】ソフトウェア更新システム１０ｃｂにおける判断部２１０ｃｂの構成を示す構成図である。
【図４６】ソフトウェア更新システム１０ｃｂにおける正常モジュール特定部６０７の構成を示す構成図である。
【図４７】ソフトウェア更新システム１０ｃｂにおける検証結果判定部６７４による判定方法について説明するための監視パターン及び監視の結果の一例である。
【図４８】ソフトウェア更新システム１０ｃｂにおける各更新モジュールの改竄検出の監視の結果の一例を示す。
【図４９】ソフトウェア更新システム１０ｃｂにおける各更新モジュールの改竄検出の監視の結果の別の一例を示す。
【図５０】ソフトウェア更新システム１０ｃｂにおける正常な更新モジュールの特定処理の動作を示すフローチャートである。図５１へ続く。
【図５１】ソフトウェア更新システム１０ｃｂにおける正常な更新モジュールの特定処理の動作を示すフローチャートである。図５２へ続く。
【図５２】ソフトウェア更新システム１０ｃｂにおける正常な更新モジュールの特定処理の動作を示すフローチャートである。図５１から続く。
【図５３】ソフトウェア更新システム１０ｄｂの構成を示す構成図である。
【図５４】ソフトウェア更新システム１０ｄｂにおける監視パターン更新部２５０の構成を示す構成図である。
【図５５】ソフトウェア更新システム１０ｄｂにおける判断部２１０ｃｂの構成を示す構成図である。
【図５６】ソフトウェア更新システム１０ｄｂにおける妨害モジュール特定部６０８の構成を示す構成図である。
【図５７】監視の結果の一例を示す。
【図５８】ソフトウェア更新システム１０ｄｂにおける動作を示す動作図である。特に、妨害モジュール特定処理と正常モジュール特定処理との関係を表している。
【図５９】ソフトウェア更新システム１０ｄｂにおける妨害モジュールの特定処理と正常モジュールの特定処理の動作を示すシーケンス図である。図６０へ続く。
【図６０】ソフトウェア更新システム１０ｄｂにおける妨害モジュールの特定処理と正常モジュールの特定処理の動作を示すシーケンス図である。図５９から続く。
【図６１】ソフトウェア更新システム１０ｄｂにおける妨害モジュールの特定処理を示すフローチャートである。図６２へ続く。
【図６２】ソフトウェア更新システム１０ｄｂにおける妨害モジュールの特定処理を示すフローチャートである。図６３へ続く。
【図６３】ソフトウェア更新システム１０ｄｂにおける妨害モジュールの特定処理を示すフローチャートである。図６２から続く。
【図６４】ソフトウェア更新システム１０ｄｂの変形例における監視の結果の一例を示す。
【図６５】ソフトウェア更新システム１０ｄｂにおける監視パターンの一例を示す。
【図６６】ソフトウェア更新システム１０ｄｂにおける相互の監視の結果の一例を示す。
【図６７】ソフトウェア更新システム１０ｄｂにおける相互の監視の結果の別の一例を示す。
【図６８】ソフトウェア更新システム１０ｄｂにおける相互の監視の結果のさらに別の一例を示す。
【図６９】ソフトウェア更新システム１０ｄｂにおける相互の監視の結果のさらに別の一例を示す。
【図７０】変形例（２２）における監視結果の一例を示す。
【図７１】変形例（２５）における監視結果の一例を示す。
【図７２】変形例（２５）における監視結果の一例を示す。
【図７３】変形例（２６）における監視結果の一例を示す。
【図７４】変形例（２６）における監視結果の一例を示す。
【図７５】コンテンツ再生システム１０ｅの構成を示す構成図である。
【図７６】モバイルバンキングシステム１０ｆの構成を示す構成図である。
【図７７】本発明の実施の形態３における改竄監視システム１０ｃａの構成を示すブロック図である。
【図７８】本発明の実施の形態４における改竄監視システム１０ｄａの構成を示すブロック図である。
【図７９】実施の形態２に係るソフトウェア更新システム１０ａの全体構成図である。
【図８０】実施の形態２に係るソフトウェア更新システム１０ｂの全体構成図である。
【発明を実施するための形態】
【００１４】
請求項１に記載の態様である不正モジュール特定装置は、ネットワークを介して接続されている情報処理装置上で動作する不正モジュールを特定して無効化する不正モジュール特定装置であって、改ざん検出を行う複数のモジュールから、改ざん検出結果を受信する受信手段と、前記複数のモジュールのうちの一つを正常モジュールと仮定し、前記仮定に基づいて、受信した複数の改ざん検出結果における矛盾の有無を判断し、矛盾が有る場合に、正常モジュールと仮定した前記モジュールを不正モジュールと特定する判断手段と、特定された不正モジュールの無効化指示を出力する無効化手段とを備えることを特徴とする。
【００１５】
請求項２に記載の態様である不正モジュール特定装置において、前記判断手段は、正常モジュールと仮定したモジュールの識別情報を記憶する仮正常モジュール群記憶手段と、前記複数のモジュールから一つを選択し、正常モジュールと仮定し、識別情報を前記仮正常モジュール群記憶手段に記録する仮定手段と、前記仮定手段により正常モジュールと仮定された前記モジュールを起点として、改ざん検出処理の結果、改ざんが検出されないモジュールを正常モジュールと仮定し、識別情報を前記仮正常モジュール群記憶手段に記録する手順を繰り返す仮正常モジュール群生成手段と、前記仮正常モジュール群記憶手段に記憶されている識別情報に対応するモジュールによる改ざん検出結果に矛盾があるか否か判断する矛盾検出手段と、矛盾が検出された場合に、前記仮定手段において正常モジュールと仮定した前記モジュールを不正モジュールと特定する特定手段とを備えることを特徴とする。
【００１６】
この構成によると、正常なモジュールは誤った改ざん検出結果を出力しないという前提に基づき仮正常モジュール群を生成することにより、改ざん検出結果を偽って通知してきた不正なモジュールを論理的な検証方法を用いて効果的に特定することができる。
請求項３に記載の態様である不正モジュール特定装置において、前記仮定手段は、第１モジュールを前記正常モジュールと仮定し、前記矛盾検出手段は、前記第１モジュールと、前記第１モジュールによる改ざん検出結果が正常である第２モジュールとが改ざん検出を行なった第３モジュールについて、前記第１モジュールによる改ざん検出結果と前記第２モジュールによる改ざん検出結果とが矛盾するか判断し、前記第１モジュールによる改ざん検出結果と前記第２モジュールによる改ざん検出結果とが矛盾する場合、前記特定手段は、前記第１モジュールを不正モジュールと特定することを特徴とする。
【００１７】
この構成によると、３つのモジュールが相互に改ざん検出処理を行う場合には、前記矛盾検出手段による単純な検証によって、不正なモジュールを確実に特定することができる。
請求項４に記載の態様である不正モジュール特定装置において、前記判断手段は、
一方向に循環して改ざん検出を行うモジュール群である循環パターンに含まれる複数のモジュールの識別情報を記憶している循環記憶手段と、前記循環パターンに含まれる複数のモジュールが一方向に循環して改ざん検出を行った結果がすべて正常である場合に、前記循環パターンに含まれる複数のモジュールを正常モジュールと仮定する仮定手段と、前記循環パターンに含まれる２以上のモジュールによる他のモジュールへの改ざん検出結果に矛盾があるか否か判断する矛盾検出手段と、矛盾がある場合、前記循環パターンに含まれるすべてのモジュールを不正モジュールと特定する特定手段とを備えることを特徴とする。
【００１８】
この構成によると、一方向に循環して改ざん検出を行う複数のモジュールを一群として扱うことにより、個々の更新モジュール毎に不正であるか否かを判断する場合と比較して、処理効率を格段に向上させることができる。
請求項５に記載の態様である不正モジュール特定装置において、前記矛盾検出手段は、前記循環パターンに含まれる第１モジュールと第２モジュールとが改ざん検出を行った前記循環パターンに含まれない第３モジュールについて、前記第１モジュールによる改ざん検出結果と前記第２モジュールによる改ざん検出結果とが矛盾するか判断し、前記第１モジュールによる改ざん検出結果と前記第２モジュールによる改ざん検出結果とが矛盾する場合、前記特定手段は、前記循環パターンに含まれるすべてのモジュールを不正モジュールと特定することを特徴とする。
【００１９】
請求項６に記載の態様である不正モジュール特定装置において、前記矛盾検出手段は、前記循環パターンに含まれる第１モジュールと第２モジュールとが改ざん検出を行った前記循環パターンに含まれる第３モジュールについて、前記第１モジュールによる改ざん検出結果と前記第２モジュールによる改ざん検出結果とが矛盾するか判断し、前記第１モジュールによる改ざん検出結果と前記第２モジュールによる改ざん検出結果とが矛盾する場合、前記特定手段は、前記循環パターンに含まれるすべてのモジュールを不正モジュールと特定することを特徴とする。
【００２０】
請求項７に記載の態様である不正モジュール特定装置において、前記矛盾検出手段は、前記循環パターンに含まれる第１モジュールと第２モジュールとが相互に改ざん検出を行った結果が矛盾するか否か判断し、相互に改ざん検出を行った結果が矛盾する場合、前記特定手段は、前記循環パターンに含まれるすべてのモジュールを不正モジュールと特定することを特徴とする。
【００２１】
この構成によると、一方向に循環して改ざん検出処理を行う循環パターンが存在する場合には、様々な検証パターンにおいて不正モジュール特定処理の効率を向上させることができる。
請求項８に記載の態様である不正モジュール特定装置は、検証元のモジュールと検証先のモジュールとの組み合わせである監視パターンを記憶している監視パターン記憶手段を備え、前記循環記憶手段は、前記監視パターン記憶手段に記憶されている監視パターンから、一方向に循環して改ざん検出を行うモジュール群である循環パターンを検出し、検出した前記循環パターンに含まれる複数のモジュールの識別情報を記憶することを特徴とする。
【００２２】
この構成によると、不正モジュール特定装置が予め循環パターンを検出して記憶しておくことにより、不正モジュール特定処理の効率を向上させることができる。
請求項９に記載の態様である不正モジュール特定装置において、前記判断手段は、前記循環記憶手段に複数の循環パターンが記憶されている場合、循環パターンに含まれるモジュール数が少ない循環パターンから順に、前記仮定手段、前記矛盾検出手段、および前記特定手段の処理を行うこと特徴とする。
【００２３】
循環パターンに含まれるモジュール数が多い場合、循環パターンに含まれるすべてのモジュールが同時に改ざんされている可能性は低いと考えられる。また、循環パターンに含まれるモジュール数が多いほど、すべての検証結果が正常となる可能性は低くなる。
そこで、循環パターンが複数存在する場合には、モジュール数の少ない循環パターンから優先的に不正モジュール特定処理を行うことにより、不正な更新モジュールを効率的に発見し、無効化することができる。
【００２４】
請求項１０に記載の態様である不正モジュール特定装置において、前記判断手段は、前記循環記憶手段に複数の循環パターンが記憶されており、かつ、各循環パターンに含まれるモジュール数が同数である場合、各循環パターンに含まれるモジュールに対する改ざん検出処理を行う当該循環パターンに含まれないモジュールの数が多い循環パターンから順に、前記仮定手段、前記矛盾検出手段、および前記特定手段の処理を行うこと特徴とする。
【００２５】
循環パターン内の更新モジュールがすべて不正モジュールと判断された後は、循環パターン外の更新モジュールが、循環パターンに含まれるいずれかの更新モジュールを正常と判定している場合、当該循環パターン外の更新モジュールは、不正なモジュールであると判断できる。
そこで、循環パターンに含まれるモジュール数が同じである循環パターンが複数存在する場合には、循環パターン内の更新モジュールに対して改ざん検出処理を行っている循環パターン外のモジュールの数が多い循環パターンから、優先的に不正モジュール特定処理を行うことにより、全体の不正モジュール特定処理を効率的に行うことができる。
【００２６】
請求項１１に記載の態様である不正モジュール特定装置において、前記循環記憶手段は、さらに、循環パターン毎に、各循環パターンに含まれるモジュール数、および、当該循環パターンに含まれるモジュールに対する改ざん検出処理を行う当該循環パターンに含まれないモジュールの数を含む循環パターンリストを記憶しており、前記判断手段は、前記循環パターンリストを参照して、前記仮定手段、前記矛盾検出手段、および前記特定手段により処理を行う循環パターンの順序を決定することを特徴とする。
【００２７】
この構成によると、予め前記循環パターンリストを保持しておくことにより、不正モジュール特定処理を効率的に行うことができる。
請求項１２に記載の態様である不正モジュール特定装置において、前記循環記憶手段に記憶されている前記循環パターンリストは、各循環パターンに含まれるモジュール数が少ない順に、各循環パターンに含まれるモジュール数、および、当該循環パターンに含まれるモジュールに対する改ざん検出処理を行う当該循環パターンに含まれないモジュールの数を配置していることを特徴とする。
【００２８】
この構成によると、前記循環パターンリストの上位から順に情報を読み出して処理を行えば、モジュール数の少ない順に不正モジュール特定処理を行うことができる。
請求項１３に記載の態様である不正モジュール特定装置は、前記情報処理装置で動作し、相互に改ざん検出処理を行う複数のモジュールについて、検証元のモジュールと検証先のモジュールとの組み合わせである監視パターンを生成する監視パターン生成手段と、生成した前記監視パターンを、前記情報処理装置へ送信する監視パターン送信手段とを備え、前記監視パターン生成手段は、複数のモジュールが一方向に循環して改ざん検出を行う循環パターンを含む前記監視パターンを生成すること特徴とする。
【００２９】
この構成によると、一方向に循環して改ざん検出を行う複数のモジュールから改ざん検出結果を受信した場合には、前記複数のモジュールを一群として扱うことにより、個々の更新モジュール毎に不正であるか否かを判断する場合と比較して、処理効率を格段に向上させることができる。
請求項１４に記載の態様である情報処理装置は、秘匿データを含み、且つ、暗号化されているアプリケーションプログラムと、前記秘匿データを保護する機能を有する保護制御モジュールと、ソフトウェアを更新する機能を有し、相互に改ざんの有無を検証し合い、前記暗号化されているアプリケーションプログラムを復号するための復号鍵から所定の鍵分散法に従って生成された複数の分散鍵のうち、自身に割り当てられた分散鍵を保持する複数のモジュールとを備える情報処理装置であって、前記複数のモジュールが一方向に循環して改ざん検出を行うモジュール群である循環パターンを含む場合、前記循環パターンに含まれるモジュールに割り当てられる分散情報は、前記循環パターンに含まれないモジュールにも重複して割り当てられることを特徴とする。
【００３０】
循環パターンの場合、一つのモジュールが不正モジュールと特定されると、循環パターンに含まれるすべてのモジュールが不正モジュールと特定され、無効化される。
そこで、循環パターンに含まれるモジュールに割り当てられる分散情報を、前記循環パターンに含まれないモジュールにも重複して割り当てることにより、前記復号鍵の復元が不能となる事態を防止することができる。
１．実施の形態１
ここでは、本発明に係る不正モジュール無効化システムの実施の形態として、ソフトウェア更新システム１０について図面を参照しながら説明する。
１．１  ソフトウェア更新システム１０の構成
（１）全体構成
図１は、ソフトウェア更新システム１０の全体構成図である。
【００３１】
同図に示すように、ソフトウェア更新システム１０は、本発明に係る情報処理装置である機器１００と、本発明に係る不正モジュール特定装置である更新サーバ２００とから構成される。機器１００と更新サーバ２００とは、ネットワークを介して接続されている。
（２）機器１００の構成
次に、機器１００について説明する。
【００３２】
機器１００は、ネットワークを介した様々なサービスをユーザに提供する機器である。例えば、機器１００は、コンテンツ配信サーバにアクセスし、音楽や映像などのコンテンツを購入して再生したり、金融機関のシステムにアクセスし、ネットバンキング（預金の残高照会や口座振り込みなど）を利用したりする。
（ａ）機器１００のソフトウェア構成
図１に示すように、機器１００は、アプリケーションソフト（以下、「アプリ」という。）１１０、アプリ１１１、保護制御モジュール１２０、更新モジュール群１３０、およびアクセス制御モジュール１４０を含む。
【００３３】
アプリ１１０およびアプリ１１１は、ネットワークを介して、機器１００を使用するユーザに、様々な機能を提供するためのソフトウェアである。例えば、コンテンツ配信サーバ（不図示）から音楽コンテンツや映像コンテンツを購入し、その購入したコンテンツを再生するソフトウェアや、金融機関のシステム（不図示）にアクセスし、残高確認や振り込みなどのネットバンキングを利用するためのソフトウェアである。
【００３４】
アプリ１１０及びアプリ１１１は、コンテンツ配信サーバや金融機関のシステムと認証を行うための認証鍵など、秘匿データを有している。秘匿データは、悪意のある第三者（以下、「攻撃者」という。）によりアプリから抜き取られ、不正に利用されないようにするために保護される必要があるデータである。
保護制御モジュール１２０は、攻撃者によりアプリ１１０およびアプリ１１１が解析され、認証鍵などの秘匿データが抜き取られないようにアプリ１１０およびアプリ１１１を保護するための機能を制御するモジュールである。アプリを保護するための機能としては、アプリを利用しない時には暗号化して保存しておき、アプリを利用する時にのみ復号してメモリへロードする復号ロード機能や、アプリが改ざんされていないかをチェックする改ざん検出機能、デバッガなどの解析ツールが動作しないかをチェックする解析ツール検出機能などがある。
【００３５】
保護制御モジュール１２０は、これらの機能の動作を制御し、アプリ１１０およびアプリ１１１が攻撃者によって解析されていないかなどをチェックする。攻撃者による攻撃を検出したときには、保護制御モジュール１２０は、アプリ１１０およびアプリ１１１の動作を停止し、アプリ１１０およびアプリ１１１が利用していたメモリ、特に秘匿データが記録されたメモリ領域のクリアなどの処理を行い、秘匿データの漏洩を防止する。
【００３６】
更新モジュール群１３０は、複数の更新モジュールから構成される。実施の形態１では、更新モジュール群１３０は、図１に示すように、更新モジュール１３１、更新モジュール１３２、および更新モジュール１３３の３つの更新モジュールから構成される。
更新モジュール１３１、１３２、１３３は、それぞれ、保護制御モジュール１２０の改ざんの有無を検出する。各更新モジュールは、保護制御モジュール１２０が改ざんされている場合、更新サーバ２００から更新用の保護制御モジュールをダウンロードし、改ざんされている保護制御モジュールを更新する機能を有する。
【００３７】
また、更新モジュール１３１、１３２、１３３は、アプリ１１０およびアプリ１１１を更新する機能を有していてもよい。
そして、更新モジュール群１３０は、攻撃者によって各更新モジュールが改ざんされ、各更新モジュールを不正に利用されることを防止するために、更新モジュール同士が相互に改ざん検出を実施する。そして、改ざん検出結果を、更新サーバ２００へ送信する。更新サーバ２００により、ある更新モジュールが改ざんされていると判断された場合には、他の正常な更新モジュールは、更新サーバ２００からの無効化指示を受け、改ざんされた更新モジュールを無効化する。
【００３８】
これにより、更新モジュール群１３０に含まれる一部の更新モジュールが攻撃され、改ざんされた場合であっても、それを検出し、攻撃に対処することが可能となる。
アクセス制御モジュール１４０は、各更新モジュールが他のモジュールを消去するために必要なアクセス情報を保持する。アクセス情報は、例えば、消去対象であるモジュールが配置されているアドレスや、消去に必要な手順が書かれた手順書などである。なお、アクセス情報は、消去対象であるモジュール毎に、それぞれ個別のアクセス情報取得鍵で暗号化されている。
（ｂ）更新モジュールの構成
次に、更新モジュール１３１、１３２、１３３の詳細について説明する。
【００３９】
図２は、更新モジュール１３１の機能的な構成を示す機能ブロック図である。更新モジュール１３２および１３３も同様の構成を有する。更新モジュール１３１は、更新モジュール本体と、検証用証明書と、ＭＡＣ値テーブルとを含む。
更新モジュール本体は、受信部３０１、送信部３０２、制御部３０３、更新部３０４、検証部３０５、ＭＡＣ値生成部３０６、ＭＡＣ値テーブル更新部３０７、および分散情報保持部３０８から構成される。
【００４０】
受信部３０１は、更新サーバ２００から、各種指示や更新用ソフトウェアを受信する。また、受信部３０１は、他の更新モジュールから、相互監視を行うために必要な更新モジュール本体や更新モジュール検証用証明書などを受信する。さらに、受信部３０１は、他の更新モジュールから、依頼した処理の結果や、当該他の更新モジュールによる保護制御モジュール１２０の監視結果などを受信する。
【００４１】
送信部３０２は、更新サーバ２００、保護制御モジュール１２０、他の更新モジュール、およびアクセス制御モジュール１４０へ、各種処理結果や証明書などのデータを送信する。
制御部３０３は、受信部３０１が受信した各種指示や通知に基づいて、更新部３０４や検証部３０５を制御することにより各種の処理を行う。
【００４２】
具体的には、制御部３０３は、保護制御モジュール１２０、更新モジュール１３２．および更新モジュール１３３の改ざん検証処理、保護制御モジュール１２０、更新モジュール１３２、および更新モジュール１３３の更新処理、監視パターンの更新処理などを行う。
更新部３０４は、制御部３０３の制御に基づき、更新サーバ２００と連携して、機器１００内部のソフトウェア、具体的には、アプリ１１０および１１１、保護制御モジュール１２０、更新モジュール１３１．１３２および１３３を更新する。
【００４３】
検証部３０５は、制御部３０３の制御に基づき、保護制御モジュール１２０、更新モジュール１３２および更新モジュール１３３の改ざん検出処理を行う。
検証部３０５は、各モジュールに付加されている検証用証明書を用いて改ざん検出処理を行うとしてもよい。または、予め計算されたメッセージ認証コード（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）（以下、「ＭＡＣ値」という。）を用いてもよい。
【００４４】
検証部３０５が、どのタイミングでどのモジュールの改ざん検出処理を行うのかは、予め、更新サーバ２００から与えられている。検証部３０５は、更新サーバ２００から改ざん検出対象のモジュールの変更や改ざん検出を行うタイミングの変更の指示があった場合には、指示にしたがい変更する。
ＭＡＣ値生成部３０６は、検証鍵を保持している。ＭＡＣ値生成部３０６は、検証部３０５が改ざん検出処理にＭＡＣ値を用いる場合、検証鍵を用いてＭＡＣ値を生成する。
【００４５】
ＭＡＣ値テーブル更新部３０７は、各モジュールのＭＡＣ値が格納されているＭＡＣ値テーブルを更新する。ＭＡＣ値テーブルには、モジュールを識別するためのモジュール識別子と、そのモジュールに対応するＭＡＣ値とが対になって格納されている。
ＭＡＣ値生成部３０６は、改ざん検出処理の対象であるモジュールを取得し、ＭＡＣ値を計算する。検証部３０５は、計算されたＭＡＣ値とＭＡＣ値テーブルに格納されている対象モジュールのＭＡＣ値とを比較することにより改ざん検出を行う。
【００４６】
分散情報保持部３０８は、分散情報および配置情報を保持している。分散情報は、保護制御モジュール１２０がアプリ１１０および１１１の暗復号処理に用いる暗復号鍵から秘密分散法に基づいて生成された情報である。配置情報は、どの分散情報をどの更新モジュールに配布したかを記述した情報である。
なお、署名方式に関しては非特許文献１に詳しく説明されている。証明書に関しては非特許文献２に詳しく説明されている。また、分散情報に関しては特許文献２に詳しく説明されている。
（ｃ）保護制御モジュール１２０の構成
ここでは、保護制御モジュール１２０の詳細について説明する。
【００４７】
図３は、保護制御モジュール１２０の機能的な構成を示す機能ブロック図である。
同図に示すように、保護制御モジュール１２０は、受信部４０１、送信部４０２、制御部４０３、復号ロード部４０４、改ざん検出部４０５、解析ツール検出部４０６、暗復号鍵保持部４０７、暗復号鍵生成部４０８、暗復号鍵分散部４０９、証明書生成部４１０、および暗復号鍵復元部４１１から構成される。
【００４８】
受信部４０１は、更新モジュール１３１、１３２、１３３から、分散情報や各種依頼などを受信する。
送信部４０２は、更新モジュール１３１、１３２、１３３へ、各種依頼などを送信する。
制御部４０３は、復号ロード部４０４、改ざん検出部４０５、および解析ツール検出部４０６を制御することにより、アプリ１１０、１１１が攻撃者により攻撃されている場合に、それを検出する。
【００４９】
復号ロード部４０４は、暗号化されているアプリ１１０、１１１を実行するときに、暗復号鍵を用いて復号し、メモリ上にロードする処理を行う。また、アプリ１１０、１１１の実行中に、他のアプリへのコンテキストスイッチが発生すると、復号ロード部４０４は、メモリ上のデータを、暗復号鍵を用いて暗号化する。そして、再びアプリ１１０、１１１へコンテキストスイッチしたときに、暗号化したデータを復号する処理を行う。
【００５０】
さらに、後述する再暗号化処理において、復号ロード部４０４は、暗復号鍵復元部４１１から入力される復元された旧暗復号鍵を用いて、アプリ１１０、１１１を復号した後、暗復号鍵保持部４０７に保持されている新たな暗復号鍵を用いて、アプリ１１０、１１１を再暗号化する。
改ざん検出部４０５は、アプリ１１０、１１１の改ざん検出処理を実行する。改ざん検出処理は、アプリ１１０、１１１に付加されている検証用証明書を用いる方法と、ＭＡＣ値を比較する方法とがある。
【００５１】
解析ツール検出部４０６は、デバッガなどの解析ツールがインストールされたり、動作したときにそれを検出する。不正な攻撃者がアプリ１１０、１１１を攻撃するために、解析ツールをインストールしたり、動作させることが想定されるからである。検出方法としては、例えば、ファイル名を検索する方法や、デバッガが使用する特殊なレジスタが使用されているかを調べる方法や、デバッガが設定する割り込みを検出する方法などを用いる。
【００５２】
暗復号鍵保持部４０７は、アプリ１１０、１１１を暗復号するための暗復号鍵を保持する。
暗復号鍵生成部４０８は、アプリ１１０、１１１を暗復号するための暗復号鍵を生成する。
暗復号鍵分散部４０９は、初期設定時や次ラウンド準備時に、暗復号鍵から秘密分散法を用いて分散情報を生成する。
【００５３】
証明書生成部４１０は、暗復号鍵から生成された分散情報を復元したときに、正しく復元できたか否かを検証するために用いられる証明書を生成する。
暗復号鍵復元部４１１は、配置情報に基づいて、各更新モジュールから、各更新モジュールに配布されていた分散情報を取得する。そして、暗復号鍵復元部４１１は、取得した分散情報から暗復号鍵を復元し、復元した暗復号鍵を復号ロード部４０４に送信する。
（ｄ）アクセス制御モジュール１４０の構成
図４は、アクセス制御モジュール１４０の構成を機能的に示す機能ブロック図である。同図に示すように、アクセス制御モジュール１４０は、受信部５０１、送信部５０２、およびアクセス情報保持部５０３から構成される。
【００５４】
受信部５０１は、更新モジュール１３１、１３２、１３３から、改ざんされた更新モジュールを消去するために必要な情報であるアクセス情報の取得依頼を受信する。
送信部５０２は、アクセス情報取得依頼に応じて、アクセス情報取得を依頼してきた更新モジュールへアクセス情報を送信する。
アクセス情報保持部５０３は、更新モジュール１３１、１３２、１３３毎に、そのモジュールを消去するためのアクセス情報を保持する。
【００５５】
各アクセス情報は、消去対象となる更新モジュールを識別するための更新モジュール識別子が付されている。また、各アクセス情報は、アクセス情報取得鍵で暗号化されている。
更新モジュール１３１、１３２、１３３からアクセス情報取得依頼を受け付けると。アクセス情報保持部５０３は、消去対象の更新モジュールの識別子が付されたアクセス情報を、依頼元の更新モジュールへ送信する。
（ｅ）機器１００のハードウェア構成
続いて、図５を用いて、機器１００のハードウェア構成について説明する。
【００５６】
図５に示すように、機器１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１７１、不揮発性メモリであるＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲｅａｄＯｎｌｙ  Ｍｅｍｏｒｙ）１７２、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ Ｍｅｍｏｒｙ）１７３、およびＮＩＣ（Ｎｅｔｗｏｒｋ Ｉｎｔｅｒｆａｃｅ Ｃａｒｄ）１７４などを含んで構成される。また、これらはバスを介して、相互に通信可能に接続されている。
【００５７】
ＥＥＰＲＯＭ１７２には、保護制御モジュール１２０、更新モジュール１３１、１３２、１３３、及びアプリ１１０、１１１などが格納されている。
ＥＥＰＲＯＭ１７２に格納されている各種モジュールをＣＰＵ１７１が実行することにより、各種モジュールの各機能部が実現される。各機能部は、具体的には、コンピュータプログラムによって記述されている。
【００５８】
ＲＡＭ１７３は、ＣＰＵ１７１のワークエリアとして用いられる。ＲＡＭ１７３には更新モジュール１３１、１３２、１３３、および、アプリ１１０、１１１がロードされる。改ざん検出処理および無効化処理の対象となる更新モジュールは、ＲＡＭ１７３上で動作している更新モジュールである。
ＮＩＣ１７４は、ネットワークに接続するための拡張カードである。
（ｆ）ソフトウェア階層
続いて、図６を用いて、機器１００のソフトウェア階層について説明する。
【００５９】
図６に示すように、アクセス制御モジュール１４０及び更新モジュール群１３０は、ＯＳ１５０の中に組み込まれている。アプリ１１０及びアプリ１１１は、ＯＳ１５０上で動作し、保護制御モジュール１２０及びブートローダ１６０は、ＯＳ１５０の管理外にある。
機器１００の起動の際には、まず保護制御モジュール１２０及び更新モジュール群１３０が起動された上でアプリケーションが実行される。
（３）更新サーバ２００の構成
次に、更新サーバ２００の構成について説明する。
【００６０】
更新サーバ２００は、機器１００の更新モジュール群１３０から、改ざん検出結果を受信して、受信した改ざん検出結果を基に、無効化すべき不正な更新モジュールを特定する不正モジュール特定装置として機能する。さらに、更新サーバ２００は、機器１００上で動作するソフトウェア（例えば、保護制御モジュール１２０）を更新するために必要な更新用のソフトウェアを機器１００に配布するソフトウェア配布装置として機能する。
（ａ）全体構成
図１に示すように、更新サーバ２００は、判断部２１０、更新用ソフトウェア配布部２２０、モジュール無効化部２３０、および通信部２４０から構成される。更新サーバ２００は、具体的には、ＣＰＵ、ＲＯＭ、ＲＡＭ、ハードディスクユニットなどを備えるコンピュータシステムである。ＣＰＵが、ＲＯＭまたはハードディスクユニットに記憶されているコンピュータプログラムにしたがって動作することにより、更新サーバ２００は、上記の機能を発揮する。
【００６１】
判断部２１０は、機器１００の更新モジュール群１３０から、改ざん検出結果を受信して、受信した改ざん検出結果を基に、無効化すべき不正な更新モジュールを特定する。
更新用ソフトウェア配布部２２０は、保護制御モジュール１２０を更新する際に、更新モジュール１３１、１３２、１３３と連携して動作し、更新用のソフトウェアを機器１００へ安全に送信する。
【００６２】
モジュール無効化部２３０は、更新モジュール１３１、１３２、１３３からアクセス情報取得鍵取得要求を受け付けると、要求元の更新モジュールへ、アクセス情報取得鍵を送信する。
通信部２４０は、機器１００と、更新サーバ２００内部の各部との間で情報の送受信を行う。例えば、通信部２４０は、機器１００から受信した改ざん検出結果を判断部２１０に送信する。なお、機器１００と更新サーバ２００との間の通信には、データを暗号化するなど、セキュリティの確保された通信路を用いてもよい。
【００６３】
続いて、更新サーバ２００の各構成要素について説明する。
（ｂ）判断部２１０の構成
図７は、判断部２１０の構成を機能的に示す機能ブロック図である。
同図に示すように、判断部２１０は、受信部６０１、送信部６０２、指示生成部６０３、およびモジュール特定部６０４とから構成される。
【００６４】
受信部６０１は、更新モジュール１３１、１３２、１３３から、改ざん検出結果、分散情報、各種依頼などを受信し、それらを指示生成部６０３へ出力する。また、受信部６０１は、更新サーバ２００内の各部から、処理が完了した旨の通知を受け取り、それを指示生成部６０３へ出力する。
送信部６０２は、指示生成部６０３によって生成された指示を、更新サーバ２００内の各部へ出力する。
【００６５】
指示生成部６０３は、更新モジュール１３１、１３２、１３３から受信した改ざん検出結果（以下、「相互監視結果」ということがある。）を、モジュール特定部６０４へ出力する。また、指示生成部６０３は、モジュール特定部６０４から、改ざんされている不正な更新モジュールを識別する情報を取得し、取得した情報を基に、更新サーバ２００内の各部に対する指示を生成する。
【００６６】
モジュール特定部６０４は、更新モジュール１３１、１３２、１３３から受信した相互監視結果を用いて、各更新モジュールが改ざんされているか否かを判断し、改ざんされている不正な更新モジュールを特定する。モジュール特定部６０４は、不正な更新モジュールを識別する情報を指示生成部６０３へ出力する。
実施の形態１のモジュール特定部６０４は、例えば、各更新モジュールから受信した複数の改ざん検出結果を用いて、過半数の更新モジュールが「改ざんされている」と判断した更新モジュールを不正な更新モジュールであると特定する。具体的には、いま更新モジュール群１３０には、３つの更新モジュール１３１、１３２、１３３が含まれているので、２つの更新モジュールが「改ざんされている」と判断した更新モジュールを、不正な更新モジュールと特定する。
（ｃ）更新用ソフトウェア配布部２２０
図８は、更新用ソフトウェア配布部２２０の機能的な構成を示す機能ブロック図である。
【００６７】
同図に示すように、更新用ソフトウェア配布部２２０は、受信部７０１、送信部７０２、暗号鍵生成部７０３、暗号処理部７０４、認証部７０５、更新モジュール選択部７０６、制御部７０７、証明書生成部７０８、署名秘密鍵保持部７０９、更新用ソフトウェア保持部７１０、および暗号鍵保持部７１１から構成される。
受信部７０１は、更新モジュール１３１、１３２、１３３から保護制御モジュール１２０に対する改ざん検出結果、および更新モジュール間の相互監視結果を受信する。
【００６８】
送信部７０２は、機器１００のアプリ１１０、１１１、保護制御モジュール１２０を更新する必要がある場合に、更新モジュール１３１、１３２、１３３へ、更新処理の依頼、更新用ソフトウェア、復号に必要な鍵などのデータを送信する。
暗号鍵生成部７０３は、更新用ソフトウェアを更新モジュール１３１、１３２、１３３へ送信するときに使用する暗号鍵を生成する。
【００６９】
暗号処理部７０４は、暗号鍵生成部７０３が生成した暗号鍵を用いて、更新用ソフトウェアを暗号化する。また、暗号処理部７０４は、各更新モジュール固有の鍵を用いて、暗号鍵を暗号化する。
暗号鍵および更新用ソフトウェアは、更新モジュール１３１、１３２、１３３へ一度にすべてが送信されるのではなく、更新処理の中で、それぞれのデータが必要になったタイミングで、それぞれ各更新モジュールへ送信される。
【００７０】
認証部７０５は、更新モジュール１３１、１３２、１３３、および保護制御モジュール１２０と相互認証を行う。
更新モジュール選択部７０６は、保護制御モジュール１２０を更新する場合に、更新処理に使用する更新モジュールを選択する。暗号処理部７０４は、更新用の保護制御モジュールの暗号化に使用した暗号鍵を、更新モジュール選択部７０６が選択した更新モジュール固有の鍵を用いて暗号化する。そして、送信部７０２は、更新モジュール選択部７０６が選択した更新モジュールへ、暗号鍵および更新用の保護制御モジュールを送付する。
【００７１】
制御部７０７は、更新用ソフトウェア配布部２２０の各構成要素を制御する。
証明書生成部７０８は、更新モジュール１３１、１３２、１３３の認証公開鍵に対して署名秘密鍵を用いて認証証明書を生成する。また、証明書生成部７０８は、更新用の保護制御モジュールに対して署名秘密鍵を用いて、機器１００にて、保護制御モジュールが正しく更新されたか否かを検証するための更新検証証明書を生成する。
【００７２】
署名秘密鍵保持部７０９は、証明書生成部７０８が証明書を生成するときに用いる署名秘密鍵を保持する。
更新用ソフトウェア保持部７１０は、保護制御モジュール１２０が攻撃された場合に更新するための更新用の保護制御モジュールを保持する。
暗号鍵保持部７１１は、暗号鍵生成部７０３が生成した暗号鍵および暗号処理部７０４により暗号化された暗号鍵を保持する。
（ｄ）モジュール無効化部２３０
図９は、モジュール無効化部２３０の機能的な構成を示す機能ブロック図である。
【００７３】
同図に示すように、モジュール無効化部２３０は、受信部８０１、送信部８０２、アクセス情報取得鍵保持部８０３、および更新モジュール選択部８０４から構成される。
受信部８０１は、判断部２１０から改ざんされた不正な更新モジュールを無効化する指示を受信する。また、受信部８０１は、更新モジュール１３１、１３２、１３３からアクセス情報取得鍵の取得依頼を受信する。
【００７４】
送信部８０２は、アクセス情報取得鍵の取得依頼に応じて、アクセス情報取得鍵を依頼元の更新モジュールへ送信する。
アクセス情報取得鍵保持部８０３は、アクセス制御モジュール１４０が保持するアクセス情報を復号するための鍵であるアクセス情報取得鍵を保持する。
更新モジュール選択部８０４は、改ざんされた不正な更新モジュールの無効化処理を行う更新モジュールを選択し、選択した更新モジュールに、不正な更新モジュールの無効化を指示する。
【００７５】
なお、モジュール選択部８０４が選択した更新モジュールからアクセス情報取得鍵の取得依頼があった場合には、送信部８０２は、アクセス情報取得鍵に、消去対象となる更新モジュールの識別子を付して、前記更新モジュールへ送信する。
１．２  ソフトウェア更新システム１０の動作
続いて、ソフトウェア更新システム１０の動作を説明する。
（１）全体動作
図１０は、ソフトウェア更新システム１０全体の処理の流れを示したフローチャートである。
【００７６】
ソフトウェア更新システム１０は、先ず、初期設定処理を行う（Ｓ１００）。
初期設定処理とは、保護制御モジュール１２０を更新するために必要となる各種の鍵データや、ソフトウェア更新後に必要となるデータ（秘密分散法を用いて分散した分散情報）などを更新モジュール１３１、１３２、１３３のそれぞれに埋め込む処理である。なお、初期設定処理は、機器１００が工場で製造される際に行われる。その後、機器１００は、工場から出荷され、ユーザの利用に供される。
【００７７】
ユーザにより機器１００が利用される際には、機器１００内部では、保護制御モジュール１２０がアプリ１１０、１１１を攻撃者による攻撃から保護する。
これと同時に、更新モジュール１３１、１３２、１３３は、保護制御モジュール１２０の改ざん検出処理を実行し、保護制御モジュール１２０が攻撃されているか否かをチェックする検知処理を行う（Ｓ２００）。
【００７８】
次に、ソフトウェア更新システム１０は、ステップＳ２００で保護制御モジュール１２０の改ざんが検出された場合に、保護制御モジュール１２０を解析し、更新する必要があるか否か判断する解析・判断処理を行う（Ｓ３００）。
次に、ソフトウェア更新システム１０は、更新モジュール１３１、１３２、１３３と更新用ソフトウェア配布部２２０とが互いに正しいソフトウェアであるか否かを確認するための相互認証処理を行う（Ｓ４００）。
【００７９】
次に、ソフトウェア更新システム１０は、回復処理を行う（Ｓ５００）。
回復処理とは、更新モジュール群１３０に含まれる更新モジュール間で相互に改ざん検出処理を行った後、更新用の保護制御モジュールを機器１００へインストールする。そして、機器１００において、更新モジュール１３１、１３２、１３３へ埋め込まれた分散情報を用いて、保護制御モジュールを更新する処理である。
【００８０】
その後、ソフトウェア更新システム１０は、次に保護制御モジュールの更新が必要となる場合に備えて、更新に必要な鍵データや分散情報を生成し、各更新モジュールに埋め込む次ラウンド準備処理を行う（Ｓ６００）。その後、ソフトウェア更新システム１０は、ステップＳ２００の検知処理へ戻り、処理を続ける。
ここで、ソフトウェア更新システム１０は、ステップＳ４００の相互認証処理、および、ステップＳ４００の回復処理において、更新モジュール１３１、１３２、１３３の改ざんが検出された場合には、改ざんされた不正な更新モジュールを消去する無効化処理を行う。
【００８１】
なお、本発明のソフトウェア更新システムは、上記のすべての処理は必須ではない。ソフトウェア更新システムは、外部から更新のトリガを与えられて、更新を行う処理（回復処理）があればよい。
（２）初期設定処理の動作
ここでは、図１１から図１３を用いて、ソフトウェア更新システム１０の初期設定処理（図１０のＳ１００）の詳細について説明する。
【００８２】
図１２は、初期設定処理のシーケンス図である。
ソフトウェア更新システム１０は、機器１００の工場製造時に、機器１００の不揮発メモリへアプリ（１１０、１１１）、保護制御モジュール１２０、更新モジュール（１３１、１３２、１３３）などをインストールする（Ｓ１０００）。
これらのソフトウェアには、ソフトウェアが改ざんされているか否かを検証するための改ざん検出用証明書が付加されている。この改ざん検出用証明書は、更新サーバ２００の更新用ソフトウェア配布部２２０が保持する署名秘密鍵により署名が施されている。なお、Ｓ１０００では、上記のソフトウェア以外にも、機器１００の動作に必要なソフトウェアがインストールされる。
【００８３】
ここで、図１１を用いて、初期設定処理の際に機器１００に埋め込まれる鍵について説明する。図１１は、機器１００に埋め込まれる鍵を模式的に示す図である。ここでは、更新モジュール群１３０の内部に更新モジュール１３１のみ含まれている。実際には、更新モジュール１３２及び１３３も含まれるが、ここでは省略する。
図１１に示すように、保護制御モジュール１２０には暗復号鍵が埋め込まれ、更新モジュール１３１、１３２、１３３には署名公開鍵、検証鍵及び認証鍵対が埋め込まれる（この時点では、まだ、更新モジュールに分散情報の組は埋め込まれてない）。更に、更新モジュール１３１、１３２、１３３には、それぞれの更新モジュールを識別するための更新モジュール識別子が埋め込まれ、その状態で機器１００にインストールされる。
【００８４】
暗復号鍵は、アプリ１１０、１１１を暗号化及び復号するための鍵である。アプリ１１０、１１１は、暗復号鍵を用いて暗号化された状態で不揮発メモリへ記憶され、実行時に保護制御モジュール１２０により暗復号鍵を用いて復号された後、実行される。
機器１００が、コンテキストを切り替えながら複数のアプリを実行する場合には、コンテキスト切り替えのタイミングで、暗復号鍵を用いて、アプリ１１０、１１１が使用しているデータの暗号化及び復号を行うことにより、アプリ１１０、１１１の実行時に、デバッガなどの解析ツールによって、データが抜き取られることを防止する。
【００８５】
更新モジュール１３１、１３２、１３３に埋め込まれる鍵のうち、署名公開鍵は、すべての更新モジュールに共通の鍵である。検証鍵と認証鍵対とは、それぞれの更新モジュールで異なる鍵である。  図１２に戻り説明を続ける。Ｓ１０００で各ソフトウェアをインストールした後、機器１００は、初期設定を行うソフトウェア、および、正常に動作するかテストするためのソフトウェアなどを実行して、初期化する（Ｓ１００１）。また、機器１００は、保護制御モジュール１２０、および、更新モジュール１３１、１３２、１３３に対して、初期化指示を出力する。
【００８６】
保護制御モジュール１２０は、暗復号鍵から秘密分散法を用いて分散情報を生成する（Ｓ１００２）。なお、保護制御モジュール１２０は、分散情報保持部３０８を備える更新モジュールの数と同数の分散情報を生成する。更新モジュール１３１、１３２、１３３がすべて分散情報保持部３０８を備えている場合、保護制御モジュール１２０は、３つの分散情報を生成する。
【００８７】
更に、保護制御モジュール１２０は、署名秘密鍵を用いて、暗復号鍵証明書を生成する（Ｓ１００３）。暗復号鍵証明書は、暗復号鍵の復元時に、暗復号鍵が正しく復元できたか否かを確認するための証明書である。
保護制御モジュール１２０は、生成した分散情報と暗復号鍵証明書とを、更新モジュール１３１、１３２、１３３へ送信する（Ｓ１００４）。
【００８８】
なお、保護制御モジュール１２０は、更新モジュール１３１、１３２、１３３が、それぞれ異なる分散情報の組を保持するように、各更新モジュールに分散情報の組を送信する。更に、保護制御モジュール１２０は、どの更新モジュールへどの分散情報を送信したかを示す配置情報を、各更新モジュールへ送信する。各更新モジュールに送信される配置情報は、同一の情報である。
【００８９】
暗復号鍵から秘密分散法を用いて分散情報を生成する方法や、分散情報を更新モジュールへ送信する方法については、特許文献２の４７ページから４９ページに詳しく説明されている。特許文献２における秘密鍵ｄを本実施の形態の暗復号鍵に対応させ、認証局装置を保護制御モジュール１２０に対応させ、分散情報保持装置を更新モジュール１３１、１３２、１３３に対応させることで、特許文献２と同じ方法を用いることができる。
【００９０】
保護制御モジュール１２０から分散情報、配置情報及び暗復号鍵証明書を受信した各更新モジュールは、更新モジュール初期化処理を行う（Ｓ１００５）。
（３）更新モジュール初期化処理
図１３は、更新モジュール初期化処理（図１２のＳ１００５）の動作を示すフローチャートである。
【００９１】
なお、ここでは、更新モジュール１３１についてのみ説明するが、更新モジュール１３２、および１３３の動作も基本的に同一である。
更新モジュール１３１は、保護制御モジュール１２０から分散情報、配置情報及び暗復号鍵証明書を受信し、受信した各情報を分散情報保持部３０８に保持する（Ｓ１００６）。
【００９２】
更に、更新モジュール１３１は、改ざん検出対象である更新モジュール１３２、１３３及び保護制御モジュール１２０の改ざん検出用証明書の検証を行う（Ｓ１００７）。この検証は、各モジュールからハッシュ値を生成し、生成したハッシュ値とそれぞれの改ざん検出用証明書に記述されているハッシュ値とを比較することにより行う。
生成したハッシュ値が、それぞれの改ざん検出用証明書に記述されているハッシュ値と一致すれば（Ｓ１００８でＹ）、更新モジュール１３２、１３３、保護制御モジュール１２０のそれぞれに対してＭＡＣ値を生成する。そして、生成したＭＡＣ値を、ＭＡＣ値テーブルとして保持する（Ｓ１００９）。
【００９３】
少なくとも１のハッシュ値が、改ざん検出用証明書に記述されているハッシュ値と一致しなければ（Ｓ１００８でＮ）、更新モジュール１３１は、エラーを出力して停止する（Ｓ１０１０）。
（４）検知処理の動作
続いて、図１４のシーケンス図を用いて、ソフトウェア更新システム１０の検知処理（図１０のＳ２００）の詳細について説明する。
【００９４】
機器１００は、初期設定処理を終えると工場から出荷され、ユーザの元へ送られ、ユーザの元で機器１００が使用される。
機器１００でアプリ１１０、１１１が動作しているとき、機器１００内部では、保護制御モジュール１２０が復号ロード機能、改ざん検出機能、解析ツール検出機能などの機能を制御し、アプリ１１０、１１１を攻撃者による攻撃から保護する。
【００９５】
検知処理においては、先ず、更新モジュール１３１、１３２、１３３が、保護制御モジュール１２０の改ざん検出を実施する。改ざん検出は、検証鍵を使用して保護制御モジュール１２０のＭＡＣ値を計算し、計算したＭＡＣ値とＭＡＣ値テーブルに保持されているＭＡＣ値とを比較することにより行う。
ＭＡＣ値が一致すれば、保護制御モジュール１２０は改ざんされていないと判定し、ＭＡＣ値が一致しなければ、保護制御モジュール１２０は改ざんされていると判定する。
【００９６】
なお、図１４では記載を簡略化し、更新モジュール１３１のみが保護制御モジュール１２０の改ざん検出を行っているように記載されているが、当然ながら、更新モジュール１３２、１３３でも同様の処理が行われる。
その後の処理についても、更新モジュール１３１が保護制御モジュール１２０の改ざんを検出した場合を中心に記載しているが、更新モジュール１３２、１３３が保護制御モジュール１２０の改ざんを検出した場合も基本的には同様の処理が行われる。
【００９７】
保護制御モジュール１２０が改ざんされているか否か、即ち、ＭＡＣ値が一致するか否かを判定し、保護制御モジュール１２０が改ざんされていると判定した場合（Ｓ２０００でＹ）、更新モジュール１３１は、その旨を、更新サーバ２００の判断部２１０及び他の更新モジュールへ通知する（Ｓ２００１）。
保護制御モジュール１２０が改ざんされていないと判定した場合（Ｓ２０００でＮ）、更新モジュール１３１は、判断部２１０や他の更新モジュールへ通知を行わず、改ざん検出処理へ戻る。
【００９８】
他の更新モジュールから保護制御モジュール１２０が改ざんされている旨の通知を受けた更新モジュールは、検証鍵及びＭＡＣ値を用いて、保護制御モジュール１２０の改ざん検出を実施する（Ｓ２００２）。そして、改ざん検出結果を、判断部２１０及び他の更新モジュールへ通知する（Ｓ２００３）。
判断部２１０は、更新モジュール１３１、１３２、１３３から改ざん検出結果を受信する。
【００９９】
なお、ステップＳ２０００の検知処理時にも、更新モジュール群１３０が、相互に改ざん検出処理を行い、不正な更新モジュールを特定する相互監視処理を行ってもよい。そして、不正な更新モジュールが特定された場合には、特定された更新モジュールを無効化する無効化処理を行ってもよい。
相互監視処理および無効化処理の詳細については後述する。なお、相互監視処理では、本発明に係る実施の形態２で説明する方法を用いて、不正モジュール特定処理を行ってもよい。
（５）解析・判断処理の動作
続いて、図１５のシーケンス図を用いて、解析判断処理（図１０のＳ３００）の詳細について説明する。なお、図１５では、更新モジュール１３１、１３２、１３３のそれぞれが個別に行う処理を、更新モジュール群１３０が行う処理としてまとめて記載している。
【０１００】
図１４のＳ２００１およびＳ２００３において、判断部２１０が各更新モジュールから保護制御モジュール１２０の改ざん検出結果を受信すると、判断部２１０は、受信した改ざん検出結果に基づいて、保護制御モジュール１２０が正常であるか不正であるか（改ざんされているか否か）を判定する。
判定方法の一例として、例えば、所定数の更新モジュールが改ざんを検出した場合には、保護制御モジュール１２０は不正である（改ざんされている）と判定し、また、所定数未満の更新モジュールが改ざんを検出した場合には、保護制御モジュール１２０は正常である（改ざんされていない）と判定する。前記所定数は、更新モジュール群１３０に含まれる更新モジュールの過半数としてもよい。
【０１０１】
保護制御モジュール１２０が改ざんされていると判定した場合（Ｓ３０００でＹ）、判断部２１０は、保護制御モジュール１２０を回復する必要があるか否かを判断するために、更新モジュール群１３０に対して、保護制御モジュール１２０のどの部分が改ざんされたかなどの改ざん情報の通知を依頼する（Ｓ３００１）。
更新モジュール群１３０は、改ざん情報の通知を依頼されると、改ざん情報を収集して（Ｓ３００２）、判断部２１０へ通知する（Ｓ３００３）。
【０１０２】
判断部２１０は、改ざん情報に基づいて、保護制御モジュール１２０を回復するか、機器１００をリボークするか、または、何もしないかを判断する（Ｓ３００４）。
保護制御モジュール１２０を回復する場合（Ｓ３００４でＹ）、判断部２１０は、更新用の保護制御モジュールを準備し（Ｓ３００６）、更新モジュール群１３０に、更新処理の開始を指示する（Ｓ３００７）。また、機器１００をリボークする場合には、アプリ１１０、１１１にサービスを提供しているサーバに対して、機器１００をリボークするように依頼する（Ｓ３００５）。何もしない場合（Ｓ３００４でＮ）、検知処理へ戻る。
【０１０３】
保護制御モジュール１２０が正当である（改ざんされていない）と判定した場合（Ｓ３０００でＮ）は、検知処理へ戻る。
（６）相互認証処理の動作
次に、図１６および図１７のシーケンス図を用いて、ソフトウェア更新システム１０による相互認証処理（図１０のＳ４００）の詳細について説明する。
【０１０４】
更新サーバ２００の判断部２１０が、解析・判断処理において、保護制御モジュール１２０を回復する必要があると判断した場合、判断部２１０は、更新用ソフトウェア配布部２２０へ、保護制御モジュール１２０の回復を指示する。
更新用ソフトウェア配布部２２０は、更新モジュール１３１、１３２、１３３へ更新処理の開始を指示した後、各更新モジュールとの間で、それぞれ１対１の相互認証処理を行う。これにより、機器１００が不正なサーバと接続したり、更新サーバ２００が不正な機器と接続することを防止する。なお、相互認証処理において、更新用ソフトウェア配布部２２０は、署名秘密鍵および署名公開鍵を使用し、各更新モジュールは、認証鍵対（認証秘密鍵及び認証公開鍵）を使用する。
【０１０５】
図１６は、更新モジュール１３１が更新用ソフトウェア配布部２２０を認証するときのシーケンス図である。なお、更新モジュール１３２、１３３も、図１６の更新モジュール１３１と同様に動作し、更新用ソフトウェア配布部２２０を認証する。
更新モジュール１３１は、乱数生成器を用いて乱数（チャレンジデータ）を生成し（Ｓ４０００）、生成したチャレンジデータを更新用ソフトウェア配布部２２０へ送信する（Ｓ４００１）。この時、更新モジュール１３１を識別するための更新モジュール識別子を、チャレンジデータと共に送信する。  更新用ソフトウェア配布部２２０は、受信したチャレンジデータに署名秘密鍵を用いて署名データを生成し（Ｓ４００２）、生成した署名データをレスポンスデータとして、更新モジュール１３１へ返信する（Ｓ４００３）。
【０１０６】
更新モジュール１３１は、更新用ソフトウェア配布部２２０からレスポンスデータを受信すると、署名公開鍵を用いて、レスポンスデータが、チャレンジデータの署名データと一致するか否か検証する（Ｓ４００４）。
検証の結果、レスポンスデータが正しく、更新用ソフトウェア配布部２２０が正当なモジュールである場合（Ｓ４００５でＹ）、更新モジュール１３１は、処理を継続する。レスポンスデータが正しくなく、更新用ソフトウェア配布部２２０が不正なモジュールである場合（Ｓ４００５でＮ）、更新モジュール１３１は、エラーを出力し、処理を停止する（Ｓ４００６）。
【０１０７】
次に、更新用ソフトウェア配布部２２０が、更新モジュール１３１、１３２、１３３を認証する。
図１７は、更新用ソフトウェア配布部２２０が各更新モジュールを認証するときのシーケンス図である。
更新用ソフトウェア配布部２２０は、チャレンジデータを送信してきた各更新モジュールに対して、乱数生成器を用いてそれぞれ異なる乱数（チャレンジデータ）を生成し（Ｓ４１００）、生成したチャレンジデータを、各更新モジュールへ個別に送信する（Ｓ４１０１）。
【０１０８】
各更新モジュールは、受信したチャレンジデータに認証秘密鍵を用いて署名データを生成し（Ｓ４１０２）、生成した署名データをレスポンスデータとして更新用ソフトウェア配布部２２０へ返信する。
このとき、各更新モジュールは、レスポンスデータと共に認証公開鍵と認証鍵証明書とを更新用ソフトウェア配布部２２０へ送信する。
【０１０９】
更新用ソフトウェア配布部２２０は、それぞれの更新モジュールからレスポンスデータ、認証公開鍵及び認証鍵証明書を受信する（Ｓ４１０４）。更新用ソフトウェア配布部２２０は、認証鍵証明書が、自身が発行した証明書であるか否か検証し、更に、認証鍵証明書を用いて、認証公開鍵の正当性を検証する（Ｓ４１０５）。
認証鍵証明書及び認証公開鍵が不正であれば、更新用ソフトウェア配布部２２０は、処理を停止する（Ｓ４１０６）。
【０１１０】
認証鍵証明書及び認証公開鍵が正当であれば、更新用ソフトウェア配布部２２０は、認証公開鍵を用いて、受信したレスポンスデータがチャレンジデータの署名データと一致するか否か検証する（Ｓ４１０７）。
次に、更新用ソフトウェア配布部２２０は、正しいレスポンスデータを返した更新モジュール（正当な更新モジュール）の数が、予め設定されている回復処理に必要な数以上であるかを判断する（Ｓ４１０８）。
【０１１１】
正当な更新モジュールの数が、回復処理に必要な数に満たない場合、回復処理が実行できないため、更新用ソフトウェア配布部２２０は、処理を停止する（Ｓ４１０６）。正当な更新モジュールの数が、回復処理に必要な数を満たしている場合、相互認証処理を終了し、回復処理に移る。
また、更新用ソフトウェア配布部２２０は、相互認証処理において、正当性が確認されたすべての更新モジュールの更新モジュール識別子を記載した認証リストを作成する。そして、これ以降の回復処理では、認証リストに識別子が記載されている更新モジュールのみを利用する。
（７）回復処理の動作
続いて、図１８〜２３を用いて、回復処理（図１０のＳ５００）の詳細について説明する。回復処理は、上述した相互認証処理において、相互認証が成功した場合に、改ざんされた保護制御モジュール１２０を、新しい更新用の保護制御モジュールへ更新する処理である。
【０１１２】
図１８は、回復処理時の動作を示すフローチャートである。
先ず、各更新モジュール１３１、１３２、１３３が、相互監視処理を行う（Ｓ５０００）。相互監視処理では、各更新モジュールが、他の更新モジュールの改ざん検出処理を実行する。
さらに、更新用保護制御モジュールを用いて、保護制御モジュール１２０を更新する更新処理を行う（Ｓ５１００）。
【０１１３】
そして、暗号化されたアプリ１１０、１１１を再暗号化する再暗号化処理を行う（Ｓ５２００）。
なお、本発明のソフトウェア更新システムは、上記のすべての処理は必須ではない。ソフトウェア更新システムは、外部から更新のトリガを与えられて、新しい保護制御モジュールを用いて、改ざんされた保護制御モジュール１２０を更新する更新処理（Ｓ５０００）、及び、更新モジュールが相互に改ざん検出を実施する回復時相互監視処理（Ｓ５１００）があればよい。
（８）相互監視処理
ここでは、図１９のシーケンス図を用いて、相互監視処理（図１８のＳ５０００）の詳細について説明する。
【０１１４】
相互監視処理では、更新モジュール１３１、１３２、１３３が、更新モジュール群１３０内の他の更新モジュールに対して改ざん検出処理を実行する。相互監視処理において、どの更新モジュールに対して改ざん検出処理を実行するかは、更新モジュールが保持する監視パターンに記述されている。監視パターンには、改ざん検出対象であるモジュールに関する情報（モジュール識別子、メモリ上の位置、サイズ、アドレス、ファイル名等）が記述されている。
【０１１５】
先ず、更新モジュール１３１は、更新モジュール１３２の改ざん検出処理を行い、（Ｓ５００１ａ）、更新モジュール１３２は、更新モジュール１３３の改ざん検出処理を行い（Ｓ５００１ｂ）、更新モジュール１３３は、更新モジュール１３１の改ざん検出処理を行う（Ｓ５００１ｃ）。
各更新モジュールは、各更新モジュール１３１、１３２、１３３のＭＡＣ値を、検証鍵を用いて算出し、ＭＡＣ値テーブルに保持されている、初期設定時に算出されたＭＡＣ値と比較することにより改ざん検出処理を行う。
【０１１６】
また、各更新モジュールは、更新モジュール１３１、１３２、１３３のハッシュ値を算出し、算出したハッシュ値と、各更新モジュールに予め付加されている証明書に記述されているハッシュ値とを比較することにより改ざん検出処理を行ってもよい。
各更新モジュールは、改ざん検出結果を判断部２１０へ通知する（Ｓ５００２）。
判断部２１０は、各更新モジュールから改ざん検出結果を受信し（Ｓ５００３）、改ざんされた更新モジュールがあるか否かを判定する（Ｓ５００４）。
【０１１７】
改ざんされた更新モジュールがあると判定した場合には（Ｓ５００４でＹ）、判断部２１０は、直ちに回復処理を停止する（Ｓ５００５）。
改ざんされた更新モジュールがないと判定した場合には（Ｓ５００４でＮ）、処理を継続する。
（９）更新処理
続いて、図２０および図２１のシーケンス図を用いて、更新処理（図１８のＳ５１００）の詳細について説明する。
【０１１８】
先ず、更新用ソフトウェア配布部２２０の証明書生成部７０８は、署名秘密鍵を用いて、更新検証証明書を生成する（Ｓ５１０１）。更新検証証明書は、新しい保護制御モジュールが正しくインストールできたか否か、各更新モジュール１３１、１３２、１３３が確認するための証明書である。更新用ソフトウェア配布部２２０は、生成した証明書を、各更新モジュールへ送信する（Ｓ５１０２）。
【０１１９】
次に、更新用ソフトウェア配布部２２０の暗号鍵生成部７０３は、新しい保護制御モジュールを多重に暗号化するための暗号鍵を２つ（第１の鍵及び第２の鍵）生成する（Ｓ５１０３）。暗号処理部７０４は、第２の鍵を用いて新しい保護制御モジュールを暗号化し、暗号化新保護制御モジュールを生成する（Ｓ５１０４）。暗号処理部７０４は、暗号化新保護制御モジュールに対して、第１の鍵を用いてさらに暗号化し、多重暗号化新保護制御モジュールを生成する（Ｓ５１０５）。
【０１２０】
更新用ソフトウェア配布部２２０は、更新モジュール群１３０から正当な更新モジュールを一つ選択し（Ｓ５１０６）、選択した更新モジュールの識別子を判断部２１０に通知する。Ｓ５１０６では、判断部２１０内の不正モジュール特定部６０４に記憶されている不正な更新モジュール以外の更新モジュールを選択する。ここでは、一例として、更新モジュール１３１を選択するものとする。
【０１２１】
更新用ソフトウェア配布部２２０は、選択した更新モジュール１３１へ多重暗号化新保護制御モジュールを送信し（Ｓ５１０７）、更に、第１の鍵を送信する（Ｓ５１０８）。
更新モジュール１３１は、多重暗号化新保護制御モジュールと第１の鍵とを受信する。更新モジュール１３１は、第１の鍵を用いて、多重暗号化新保護制御モジュールを復号し、暗号化新保護制御モジュールを取得する（Ｓ５１０９）。そして、復号が終了すると、その旨を更新用ソフトウェア配布部２２０へ通知する（Ｓ５１１０）。
【０１２２】
更新用ソフトウェア配布部２２０は、復号終了通知を受信すると、更新モジュール群１３０から、正当なモジュールであって、且つ、Ｓ５１０６で選択した更新モジュールとは異なる更新モジュールを一つ選択する（Ｓ５１１２）。ここでは、一例として、更新モジュール１３２を選択するものとする。
更新モジュールの選択は、上記と同様に判断部２１０内の不正モジュール特定部６０４に記憶されている不正な更新モジュール以外の更新モジュールを選択する。
【０１２３】
更新用ソフトウェア配布部２２０は、選択した更新モジュール１３２に、第２の鍵を送信する（Ｓ５１１３）。さらに、更新用ソフトウェア配布部２２０は、更新モジュール１３１に対して、Ｓ５１０９で取得した暗号化新保護制御モジュールを更新モジュール１３２へ送信するよう依頼する（Ｓ５１１４）。
更新モジュール１３１は、更新用ソフトウェア配布部２２０からの依頼を受けて、暗号化新保護制御モジュールを更新モジュール１３２へ送信する（Ｓ５１１５）。
【０１２４】
更新モジュール１３２は、更新用ソフトウェア配布部２２０から第２の鍵を受信し、更新モジュール１３１から暗号化新保護制御モジュールを受信する。そして、第２の鍵を用いて、暗号化新保護制御モジュールを復号し、新しい保護制御モジュールを取得する（Ｓ５１１７）。
更新モジュール１３２は、Ｓ５１１７で取得した新しい保護制御モジュールを保護制御モジュール１２０に上書きし、更新する（Ｓ５１１８）。そして、更新モジュール１３２は、更新の終了を他の更新モジュールへ通知する（Ｓ５１１９）。  続いて、各更新モジュール１３１、１３２、１３３のそれぞれは、事前に受信した更新検証証明書を用いて、保護制御モジュールが正しく更新されたか否か検証し（Ｓ５１２０）、検証結果を更新用ソフトウェア配布部２２０へ通知する（Ｓ５１２１）。
【０１２５】
更新用ソフトウェア配布部２２０は、各更新モジュールから送信された検証結果通知を受信すると、保護制御モジュールが正しく更新されたかを判定する（Ｓ５１２２）。正しく更新されていないと判定する場合（Ｓ５１２１でＮ）、更新用ソフトウェア配布部２２０は、機器１００を停止させる（Ｓ５１２３）。
正しく更新されている場合（Ｓ５１２１でＹ）、更新用ソフトウェア配布部２２０は、更新処理終了を各更新モジュールへ通知する（Ｓ５１２４）。
【０１２６】
各更新モジュールは、更新処理終了通知を受信すると、新しい保護制御モジュールのＭＡＣ値を生成し、生成したＭＡＣ値と保護制御モジュールの識別子との組を、ＭＡＣ値テーブルに書き込む（Ｓ５１２５）。
以上説明したように、更新処理では、更新用ソフトウェア配布部２２０が更新用の新保護制御モジュールを複数の鍵を用いて多重に暗号化し、更新モジュール群１３０へ送信する。更新モジュール群１３０は、受信した新保護制御モジュールで、保護制御モジュール１２０を更新する。
【０１２７】
この時、更新用ソフトウェア配布部２２０は、多重に暗号化された新保護制御モジュールを復号するための複数の鍵を、更新モジュール群１３０に送信するタイミングを制御することにより、攻撃者が暗号化されていない新保護制御モジュールを入手することを困難にする。
（１０）相互監視処理と更新処理との関係
上述した相互監視処理と更新処理とは、互いに連携しながら実行される。
【０１２８】
相互監視処理は、更新用ソフトウェア配布部２２０から、更新モジュール群１３０に含まれる更新モジュールを送信先として、複数の鍵が送られる時と、暗号化された更新用保護制御モジュールの更新モジュール群１３０に含まれる更新モジュールでの復号処理中に定期的に実施される。定期的に実施する際の時間間隔は、例えば、更新用保護制御モジュールが通信路を通して完全に外部に出力されるまでの時間より短い間隔である。完全に外部に出力されるまでに１秒かかるのであれば、例えば、それより短い５００ミリ秒間隔のタイミングで監視処理を実行する。
【０１２９】
ここでは、図２２を用いて、相互監視処理と更新処理との連携動作について説明する。
先ず、機器１００は、更新サーバ２００から多重暗号化新保護制御モジュールが送付される前に、相互監視処理（相互監視１）を実施する。不正な更新モジュールを選択して、更新処理を行わないようにするためである。
その後、機器１００は、更新サーバ２００により送信された第１の鍵を更新モジュール１３１が受信する前に、相互監視処理（相互監視２）を実施し、機器１００が第１の鍵を受信する時に、不正な更新モジュールを選択していないことを確認する。
【０１３０】
さらに、更新モジュール１３１が第１の鍵を受信し、第１の鍵を用いて多重暗号化新保護制御モジュールを復号する間、定期的に、更新モジュール１３１による復号処理を中断して、相互監視処理（相互監視３−１、３−２）を実施する。これにより、復号処理中に、更新モジュール１３１、１３２、１３３が攻撃されたとしても、暗号化新保護制御モジュールがすべて漏洩する前に更新モジュールが攻撃されたことを検出し、漏洩を防止することが可能となる。
【０１３１】
これ以降の処理は、上記と同様である。即ち、機器１００は、更新サーバ２００により送信された第２の鍵を更新モジュール１３２が受信する前に、監視処理（相互監視４）を実施し、機器１００が鍵を受信する時に、不正な更新モジュールを更新処理において、選択していないことを確認する。
さらに、更新モジュール１３２が第２の鍵を受信し、第２の鍵を用いて暗号化新保護制御モジュールを復号する間、定期的に、更新モジュール１３２による復号処理を中断し、相互監視処理（相互監視５−１、５−２）を実施する。最後に、相互監視処理（相互監視６）を実施する。
【０１３２】
これにより、新保護制御モジュールがすべて漏洩する前に更新モジュールが攻撃されたことを検出し、漏洩を防止することが可能となる。
ここで、相互監視処理において、更新モジュールに改ざんが検出されたた場合には、回復処理を停止する。これにより、更新サーバ２００は、第１の鍵や第２の鍵の送信を中止することが可能となり、攻撃者は、多重暗号化新保護制御モジュールを復号するための鍵を入手することが不可能となる。
（１１）再暗号化処理
続いて、図２３のシーケンス図を用いて、再暗号化処理（図１８のＳ５２００）の詳細について説明する。
【０１３３】
先ず、更新された保護制御モジュール（図２３および図２４の説明においては、更新前の保護制御モジュール１２０と区別するために、「保護制御モジュール１２１」という。）が、各更新モジュール１３１、１３２、１３３に対して、それぞれが保持している分散情報及び暗復号鍵証明書の送信を依頼する（Ｓ５２０１）。
各更新モジュール１３１、１３２、１３３は、保護制御モジュール１２１からの依頼を受けて、分散情報及び暗復号鍵証明書を送信する（Ｓ５２０２）。
【０１３４】
保護制御モジュール１２１は、各更新モジュール１３１、１３２、１３３から分散情報及び暗復号鍵証明書を受信し（Ｓ５２０３）、受信した分散情報から更新前の保護制御モジュール１２０が使用していた暗復号鍵（ここでは、「旧暗復号鍵」という。）を復元する（Ｓ５２０４）。更に、保護制御モジュール１２１は、暗復号鍵証明書を用いて、旧暗復号鍵が正しく復元されたか否か検証する（Ｓ５２０５）。
【０１３５】
旧暗復号鍵が正しく復元されなかった場合（Ｓ５２０５でＮ）、保護制御モジュール１２１は、不正な更新モジュールを炙り出す（どの更新モジュールが不正な分散情報を送信したか特定する）（Ｓ５２０６）。特定された不正な更新モジュールは、更新サーバ２００へ通知される。
旧暗復号鍵が正しく復元された場合（Ｓ５２０５でＹ）、保護制御モジュール１２１の暗復号鍵生成部４０８は、新しい暗復号鍵（ここでは、「新暗復号鍵」という。）を生成する（Ｓ５２０７）。そして、復号ロード部４０４は、旧暗復号鍵を用いて暗号化されたアプリ（１１０、１１１）を復号し、新暗復号鍵を用いてアプリ（１１０、１１１）を再暗号化する（Ｓ５２０８）。
【０１３６】
ここで、Ｓ５２０６において、不正な更新モジュールを特定するための方法について説明する。先ず、保護制御モジュール１２１は、各更新モジュールから分散情報の組を集め、集めた分散情報に各更新モジュールを識別するための識別情報を付加する。
その後、初期設計時に同じ値に設定されて配布された分散情報同士をグループにまとめる。そして、各グループに含まれる分散情報同士の値を比較し、同じ値になる分散情報同士を更に１つのサブグループにまとめる。そして、すべてのグループの中からサブグループを１つずつ選び出す組み合わせを全て生成する。
【０１３７】
生成した組み合わせそれぞれに対して旧暗復号鍵を生成し、正しい旧暗復号鍵が生成できたかを検証する。検証ＯＫの場合、その組み合わせに含まれるサブグループに、検証ＯＫを表す検証通過識別情報を付加する。
すべての組み合わせについて、旧暗復号鍵の生成・検証を行った後、検証通過識別情報の付いているサブグループに含まれる分散情報を取り除く。
【０１３８】
取り除かれずに残っている分散情報は、不正な値となっている。そこで、この分散情報に付加された識別情報により、不正な値となっている分散情報を送信してきた更新モジュールを特定することができる。識別情報により特定された更新モジュールが不正な更新モジュールであると特定される。
分散情報から旧暗復号鍵を復元する方法や不正な更新モジュールの特定方法については、特許文献２の５０ページから５２ページに詳しく説明されている。特許文献２における秘密鍵ｄを本実施形態の暗復号鍵に対応させ、認証局装置を本実施形態の保護制御モジュール１２１に対応させ、分散情報保持装置を更新モジュール１３１、１３２、１３３に対応させることで、特許文献２と同じ方法が利用可能である。
【０１３９】
また、Ｓ５２０６において、不正な更新モジュールを特定するための方法として、後述する実施の形態２で詳細に説明する不正モジュール特定方法を用いてもよい。
（１２）次ラウンド準備処理の動作
続いて、図２４のシーケンス図を用いて、次ラウンド準備処理（図１０のＳ６００）の詳細について説明する。次ラウンド準備処理では、回復処理の終了後、次の回復処理のための準備を行う。以下、具体的に説明する。
【０１４０】
まず、保護制御モジュール１２１は、新暗復号鍵から、秘密分散法を用いて分散情報を生成し（Ｓ６０００）、更に、署名秘密鍵を用いて、新暗復号鍵証明書を生成する（Ｓ６００１）。そして、保護制御モジュール１２１は、生成した分散情報と暗復号鍵証明書とを各更新モジュール１３１、１３２、１３３へ送信する（Ｓ６００２）。
ここで、初期設計処理時と同様に、分散情報は、更新モジュールの数と同数が生成され、それぞれの更新モジュールが、異なる分散情報のペアを保持するように送信される。新暗復号鍵証明書は、各更新モジュール１３１、１３２、１３３へ同じ証明書が送信される。
【０１４１】
各更新モジュール１３１、１３２、１３３は、保護制御モジュール１２１から分散情報と新暗復号鍵証明書とを受信し、受信した分散情報と新暗復号鍵証明書とを分散情報保持部３０８に保持する（Ｓ６００３）。
（１３）無効化処理の動作
続いて、図２５のシーケンス図を用いて、無効化処理の詳細について説明する。
【０１４２】
無効化処理は、相互認証時に認証に失敗した更新モジュールが存在する場合、回復処理内の監視処理において改ざんされた更新モジュールを検出した場合、回復処理内の再暗号化処理において不正な更新モジュールを炙り出した場合など、機器１００内部に存在する不正な（改ざんされた）モジュールを無効化する処理である。
ここでは、更新モジュール１３３が改ざんされ、それを更新モジュール１３１および１３２が検出した場合の処理を例に、無効化処理の動作の詳細を説明する。
【０１４３】
判断部２１０は、更新モジュール１３１、１３２、１３３から受信した、相互監視結果を基に、どの更新モジュールが改ざんされているかを判定する（Ｓ７００１）。判定方法としては、例えば、過半数の更新モジュールが「改ざんされている」と判断した更新モジュールを不正な更新モジュールであると判定する。
判断部２１０は、改ざんされた更新モジュールの識別情報と共に、モジュール無効化部２３０へ無効化の指示を出力する（Ｓ７００２）。
【０１４４】
モジュール無効化部２３０は、改ざんされていないと判定した更新モジュール１３１及び１３２のいずれか（ここでは、更新モジュール１３１とする。）へ、改ざんされた更新モジュール１３３の無効化を依頼する（Ｓ７００３）。
更新モジュール１３１は、モジュール無効化部２３０から、更新モジュール１３３の無効化依頼を受信すると、モジュール無効化部２３０に対し、更新モジュール１３３を無効化するためのアクセス情報取得鍵の送付を依頼する（Ｓ７００４）。更に、更新モジュール１３１は、アクセス制御モジュール１４０へ、更新モジュール１３３を無効化するためのアクセス情報の取得を依頼する（Ｓ７００５）。
【０１４５】
モジュール無効化部２３０は、アクセス情報取得鍵の送付依頼を受信すると、更新モジュール１３１が正当な（改ざんされていない）更新モジュールか否か、及び、依頼されたアクセス情報取得鍵が不正な（改ざんされた）更新モジュール１３３を無効化するためのアクセス情報取得鍵か否かを確認する（Ｓ７００６）。この確認は、判断部２１０からモジュール無効化部２３０へ通知された更新モジュールの情報を利用して行なう。
【０１４６】
確認した結果、改ざんされた更新モジュール１３３からの依頼であったり、或いは、改ざんされていない更新モジュール１３１、１３２に対するアクセス情報取得鍵の取得依頼であったりする場合には（Ｓ７００６でＮ）、無効化処理を停止する。
確認した結果、問題なければ（Ｓ７００６でＹ）、依頼してきた更新モジュール１３１へ更新モジュール１３３を無効化するためのアクセス情報取得鍵を送付する（Ｓ７００８）。
【０１４７】
更新モジュール１３１は、モジュール無効化部２３０からアクセス情報取得鍵を受信し、さらに、アクセス制御モジュール１４０から暗号化されたアクセス情報を受信する（Ｓ７００９）。更新モジュール１３１は、アクセス情報取得鍵と暗号化されたアクセス情報とから、アクセス情報を取得する（Ｓ７０１０）。取得したアクセス情報は、更新モジュール１３３を消去するための専用ドライバである。更新モジュール１３１は、専用ドライバを利用して、改ざんされた不正な更新モジュール１３３を消去する（Ｓ７０１１）。
【０１４８】
更新モジュール１３１は、無効化処理が終了すると、アクセス情報取得鍵、暗号化されたアクセス情報、及び、アクセス情報等を消去し、モジュール無効化部２３０へ完了通知を送信する（Ｓ７０１２）。モジュール無効化部２３０は、更新モジュール１３１から完了通知を受信したら、判断部２１０へ無効化の完了通知を送信する（Ｓ７０１３）。
ここで、ステップＳ７００３では、更新モジュール１３１に対して、改ざんされた更新モジュール１３３の無効化処理を依頼しているが、正当な更新モジュールを１つ選択する方法としては、本発明に係る不正モジュール特定処理の結果を用いて、正当なモジュールを１つ選択するとしてもよい。
【０１４９】
なお、無効化処理により、分散情報保持部３０８を備える更新モジュールが無効化された場合、その更新モジュールが保持していた分散情報も消去される。そこで、分散情報保持部３０８を備える更新モジュールを無効化する場合は、分散情報の消去を考慮した無効化処理を行う必要がある。
分散情報の消去を考慮した無効化処理については、特許文献２の５６ページから６４ページに、「脱退処理」として詳しく説明されている。特許文献２における秘密鍵ｄを、本実施形態の暗復号鍵に対応させ、分散情報保持装置を、本実施形態の更新モジュール１３１、１３２、１３３に対応させることで、特許文献２と同じ方法が利用可能である。なお、分散情報の消去を考慮した無効化処理を行いには、無効化する不正な更新モジュール以外に、正当な更新モジュールが最低３つ必要である。無効化処理に保護制御モジュール１２０を使用する場合は、初期設計時と同じ方法で再度分散情報を生成し、配布すればよい。
【０１５０】
以上説明したように、更新モジュール群１３０内の複数の更新モジュールが相互監視処理を行うので、改ざんされた更新モジュールを検出することが可能となり、ソフトウェア更新システムの信頼性を高めることができる。また、改ざんされた更新モジュールを無効化するので、改ざんされた更新モジュールによる不正動作を防止することができる。
２．実施の形態２
ここでは、本発明に係る不正モジュール無効化システムの実施の形態２について、図面を参照しながら説明する。
【０１５１】
上記の実施の形態１では、改ざんされている不正な更新モジュールを特定する方法として、例えば、過半数など一定数の更新モジュールが「改ざんされている」と判定した場合、当該判定された更新モジュールを不正な更新モジュールと判断した。
しかし、更新モジュールが改ざんされている場合には、実際には改ざんされていないモジュールを「改ざんされている」と誤判断したり、実際には改ざんされているモジュールを「改ざんされていない」と誤判断する可能性がある。
【０１５２】
そうすると、無効化すべき更新モジュールを無効化できない場合や、無効化すべきでないモジュールを無効化してしまう事態が想定される。なお、非特許文献３には、モジュールの相互監視により故障診断をするため技術が記載されている。しかし、この技術では、システム内の故障数を制限しているため、実施の形態１の場合と同様に誤判断をする可能性がある。
【０１５３】
そこで、実施の形態２では、改ざん検出結果の矛盾から不正な更新モジュールを特定する。
２．１  ソフトウェア更新システム１０ａの構成
実施の形態２に係るソフトウェア更新システム１０ａの構成について、図７９を用いて説明する。
【０１５４】
同図に示すように、ソフトウェア更新システム１０ａは、情報処理装置１００ａと不正モジュール特定装置２００ａとが、ネットワークを介して接続されて構成される。
情報処理装置１００ａは、モジュール１３１、モジュール１３２、モジュール１３３を含む。これらのモジュールは、相互に改ざん検出処理を行い、改ざん検出結果を、ネットワークを介して不正モジュール特定装置２００ａへ送信する。なお、情報処理装置１００ａは、さらに多くのモジュールを含むように構成してもよい。
【０１５５】
不正モジュール特定装置２００ａは、受信手段２３１０、判断手段２１０ａ、および無効化手段２３２０から構成される。
受信手段２３１０は、情報処理装置１００ａのモジュール１３１、１３２、１３３から、改ざん検出結果を受信する。
判断手段２１０ａは、前記複数のモジュールのうちの一つを正常モジュールと仮定し、前記仮定に基づいて、受信した複数の改ざん検出結果における矛盾の有無を判断し、矛盾が有る場合に、正常モジュールと仮定した前記モジュールを不正モジュールと特定する。
【０１５６】
判断手段２１０ａは、図７９に示すように、仮正常モジュール群記憶手段２３３０、仮定手段２３４０、仮正常モジュール群生成手段２３５０、矛盾検出手段２３６０、および特定手段２３７０から構成される。
仮正常モジュール群記憶手段２３３０は、正常モジュールと仮定したモジュールの識別情報を記憶する。
【０１５７】
仮定手段２３４０は、モジュール１３１、１３２、１３３から一つを選択し、正常モジュールと仮定し、識別情報を仮正常モジュール群記憶手段２３３０に記録する。
仮正常モジュール群生成手段２３５０は、仮定手段２３４０により正常モジュールと仮定された前記モジュールを起点として、改ざん検出処理の結果、改ざんが検出されないモジュールを正常モジュールと仮定し、識別情報を仮正常モジュール群記憶手段２３３０に記録する手順を繰り返す。
【０１５８】
矛盾検出手段２３６０は、仮正常モジュール群記憶手段２３３０に記憶されている識別情報に対応するモジュールによる改ざん検出結果に矛盾があるか否か判断する。
特定手段２３７０は、矛盾検出手段２３６０により矛盾が検出された場合に、仮定手段２３４０において正常モジュールと仮定した前記モジュールを不正モジュールと特定する。
【０１５９】
無効化手段２３２０は、特定された不正モジュールの無効化指示を出力する。
２．２  ソフトウェア更新システム１０ｂの構成
ここでは、本発明に係る実施の形態２について、より具体的に説明する。
（１）全体構成
図８０は、実施の形態２をより具体的に説明するための実施例であるソフトウェア更新システム１０ｂの構成を示すブロック図である。
【０１６０】
同図に示すように、ソフトウェア更新システム１０ｂは、本発明に係る情報処理装置としての機器１００ｂと、本発明に係る不正モジュール特定装置としての更新サーバ２００ｂとから構成される。そして、機器１００ｂおよび更新サーバ２００ｂは、ネットワークを介して接続されている。
機器１００ｂは、アプリ１１０、アプリ１１１、保護制御モジュール１２０、更新モジュール群１３０ｂ、およびアクセス制御モジュール１４０から構成される。
【０１６１】
更新サーバ２００ｂは、判断部２１０ｂ、更新用ソフトウェア配布部２２０、モジュール無効化部２３０、および通信部２４０から構成される。
図８０において、実施の形態１と同様の機能を有する構成要素には、図１と同一の符号を付し、詳細な説明を省略する。以下では、実施の形態２の特徴的な構成要素および処理について詳細に説明する。
（２）更新モジュール群１３０ｂの構成
図２６は、実施の形態２の更新モジュール群１３０ｂの構成を示す図である。
【０１６２】
同図に示すように、実施の形態２の更新モジュール群１３０ｂは、更新モジュール１３１、１３２、１３３、１３４、１３５、１３６、および１３７の７つの更新モジュールが含まれ。各更新モジュールの構成は、実施の形態１と同様である（図２参照）。
（３）判断部２１０ｂの構成
図２７は、実施の形態２に係る判断部２１０ｂの構成を機能的に示す機能ブロック図である。
【０１６３】
同図に示すように、判断部２１０ｂは、受信部６０１、送信部６０２、指示生成部６０３、モジュール特定部６０４ｂ、および循環検出部６０６から構成される。そして、モジュール特定部６０４の内部に、不正モジュール特定部６０５を備える。
実施の形態１の判断部２１０との相違点は、モジュール特定部６０４の内部に、不正モジュール特定部６０５を備える点、および、循環検出部６０６を備える点である。
（ａ）不正モジュール特定部６０５の構成
ここでは、実施の形態２の特徴的な構成要素である不正モジュール特定部６０５の詳細な構成について説明する。
【０１６４】
図２８は、不正モジュール特定部６０５の機能的な構成を示す機能ブロック図である。同図に示すように、不正モジュール特定部６０５は、特定指示受信部６５１、特定結果送信部６５２、正常モジュール仮定部６５３、検証結果判定部６５４、仮正常更新モジュール群抽出部６５５、矛盾検出部６５６、および循環監視パターン取得部６５７から構成される。
【０１６５】
特定指示受信部６５１は、指示生成部６０３から、不正な更新モジュールの特定の指示と更新モジュール群１３０ｂの相互監視結果（改ざん検出結果）とを受け付けると、特定指示受信部５６１は、正常モジュール仮定部６５３に前記指示を出力する。
特定結果送信部６５２は、矛盾検出部６５６から不正な更新モジュールの特定結果を受け付けると、特定結果を、指示生成部６０３に出力する。
【０１６６】
正常モジュール仮定部６５３は、特定指示受信部６５１から指示を受け付けると、更新モジュール群１３０内の更新モジュールを一つ選択し、選択した更新モジュールを正常な更新モジュールと仮定する。そして、選択した更新モジュールを、仮正常更新モジュール群とする。
仮正常更新モジュール群は、正常モジュール仮定部６５３により、正常なモジュールと仮定された更新モジュールで構成される概念上のグループである。具体的には、正常モジュール仮定部６５３は、正常であると仮定したすべての更新モジュールの識別情報を含む仮正常更新モジュール群構成情報を生成する。
【０１６７】
正常モジュール仮定部６５３は、選択した更新モジュールの識別番号を矛盾検出部６５６へ出力する。また、仮正常更新モジュール群構成情報を検証結果判定部６５４へ出力する。
正常モジュール仮定部６５３は、循環監視パターン取得の指示を循環監視パターン取得部６５７へ出力する。循環監視パターン取得部６５７から特定結果を受け付けると、正常モジュール仮定部６５３は、循環監視パターン内の更新モジュール以外の更新モジュールを正常な更新モジュールと仮定する。なお、循環監視パターンの詳細については後述する。
【０１６８】
矛盾検出部６５６から矛盾がない旨の通知を受け付けると、正常モジュール仮定部６５３は、選択した更新モジュールとは別の更新モジュールを正常な更新モジュールと仮定し、仮正常更新モジュール群に含める。そして、仮正常更新モジュール群構成情報を更新する。正常モジュール仮定部６５３は、更新した仮正常更新モジュール群構成情報を、検証結果判定部６５４へ出力する。
【０１６９】
検証結果判定部６５４は、正常モジュール仮定部６５３から仮正常更新モジュール群構成情報を受け付けると、仮正常更新モジュール群内の更新モジュールによる他の更新モジュールに対する改ざん検出結果を判定する。
検証結果判定部６５４は、仮正常更新モジュール群内の更新モジュールによる他の更新モジュールに対する改ざん検出結果が正常の場合、検証された更新モジュールは正常な更新モジュールであるとみなす。つまり、正常な更新モジュールが「正常である」と判断した更新モジュールは、正常な更新モジュールとみなすことができる。
【０１７０】
そして、検証結果判定部６５４は、正常とみなした更新モジュールの識別情報と、正常モジュール仮定部６５３から受け付けた仮正常更新モジュール群構成情報とを、仮正常更新モジュール群抽出部６５５へ出力する。
正常とみなすことができる更新モジュールが存在しない場合、検証結果判定部６５４は、その旨を仮正常更新モジュール群抽出部６５５へ出力する。
【０１７１】
また、検証結果判定部６５４は、仮正常更新モジュール群抽出部６５５から仮正常更新モジュール群構成情報を受信した場合も、同様の処理を行う。
仮正常更新モジュール群抽出部６５５は、正常とみなすことができる更新モジュールの識別番号と仮正常更新モジュール群構成情報を受け取る。そして、受け取った識別番号を、受け取った仮正常更新モジュール群構成情報へ追加して、構成情報を更新する。仮正常更新モジュール群抽出部６５５は、更新した仮正常更新モジュール群構成情報を、検証結果判定部６５４へ出力する。
【０１７２】
検証結果判定部６５４から正常とみなすことができる更新モジュールが存在しない旨の通知を受け付けると、仮正常更新モジュール群抽出部６５５は、矛盾検出部６５６へ仮正常更新モジュール群構成情報を出力する。
矛盾検出部６５６は、仮正常更新モジュール群抽出部６５５から仮正常更新モジュール群構成情報を受け取ると、矛盾検出処理を行う。詳細については後述する。
【０１７３】
矛盾が検出された場合、正常モジュール仮定部６５３において、正常であると仮定した更新モジュールは不正な更新モジュールであると特定することができる。そこで、矛盾検出部６５６は、不正な更新モジュールが特定された旨を特定結果送信部６５２へ通知する。矛盾が検出されない場合、矛盾検出部６５６は、正常モジュール仮定部６５３へ矛盾がない旨を通知する。
【０１７４】
また、矛盾検出部６５６は、循環監視パターン取得部６５７から循環監視パターンを受け付けた場合、循環監視パターン内の更新モジュールが、循環監視パターン内の他の更新モジュールに対して改ざん検出処理を行った結果、不正と判定された更新モジュールが存在するか判断する。不正な更新モジュールが存在する場合、循環監視パターンに含まれるすべての更新モジュールは、不正モジュールであると特定する。
【０１７５】
さらに、矛盾検出部６５６は、循環監視パターン内の更新モジュールが改ざん検出処理を行った循環監視パターン外の同一更新モジュールの検出結果に矛盾があるか否かを検証する。矛盾がある場合、循環監視パターンに含まれるすべての更新モジュールは不正モジュールであると特定する。
そして、循環監視パターンに含まれるすべての更新モジュールが不正モジュールであると特定されたら、矛盾検出部６５６は、その旨を特定結果送信部６５２および正常モジュール仮定部６５３へ出力する。
【０１７６】
循環監視パターン取得部６５７は、正常モジュール仮定部６５３から取得指示を受け付けると、循環検出部６０６へ循環監視パターンの取得指示を出力する。また、循環検出部６０６から循環監視パターンを受け付けると、矛盾検出部６５６へ、循環監視パターンを出力する。
（ｂ）循環検出部６０６の構成
ここでは、実施の形態２の特徴的な構成要素である循環検出部６０６の詳細な構成について説明する。
【０１７７】
図２９は、循環検出部６０６の機能的な構成を示す機能ブロック図である。同図に示すように、循環検出部６０６は、取得指示受信部６６１、循環監視パターン送信部６６２、循環監視パターン取得部６６３、取得済み循環監視パターン記憶部６６４、監視パターン記憶部６６５、および循環監視パターン記憶部６６６から構成される。
取得指示受信部６６１は、不正モジュール特定部６０５から循環監視パターンの取得指示を受け付けると、循環監視パターン取得部６６３へ指示を出力する。
【０１７８】
循環監視パターン送信部６６２は、循環監視パターン取得部６６３から、循環監視パターンを取得すると、取得した循環監視パターンを、不正モジュール特定部６０５へ出力する。
循環監視パターン取得部６６３は、循環監視パターン記憶部６６６から循環監視パターンを読み出し、読み出した循環監視パターンに含まれる一群の更新モジュールが一方向に循環して行う改ざん検出処理の結果がすべて正常であるか判断する。すべて正常である場合、循環監視パターン取得部６６３は、循環監視パターン記憶部６６６から読み出した当該循環監視パターンを、循環監視パターン送信部６６２へ出力する。また、当該循環監視パターンを、取得済み循環監視パターン記憶部６６４へ出力する。
【０１７９】
取得済み循環監視パターン記憶部６６４は、循環監視パターン取得部６６３から取得した循環監視パターンを記憶する。
監視パターン記憶部６６５は、更新モジュール群１３０ｂに含まれる更新モジュール間の監視パターンを記憶している。監視パターンとは、更新モジュール群１３０ｂに含まれる更新モジュール１３１〜１３７が相互に改ざん検出処理を行うときの、監視対象（検証対象）のモジュールに関する情報を記述したものである。具体的には、監視パターンには、モジュール識別子、メモリ上の位置、サイズ、アドレス、ファイル名等が記述されている。
【０１８０】
図３０に示す具体例を用いて説明する。図３０では、監視パターンの説明を容易にするため、監視パターンを有向グラフで表している。矢印は、監視元（検証元）の更新モジュールから監視先（検証先）の更新モジュールへ向いている。
たとえば、矢印２０００は、更新モジュール１３１から更新モジュール１３２へ向いていることから、更新モジュール１３１は、更新モジュール１３２の改ざん検証処理を行う。矢印２００１は、更新モジュール１３１から更新モジュール１３４へ向いていることから、更新モジュール１３１は、さらに、更新モジュール１３４の改ざん検証処理を行う。矢印２００３は、更新モジュール１３３から更新モジュール１３１へ向いていることから、更新モジュール１３３は、更新モジュール１３１の改ざん検出処理を行う。
【０１８１】
循環監視パターン記憶部６６６は、監視パターン記憶部６６５に記憶されている監視パターンを取得し、全体の監視パターンから、一方向に循環して改ざん検出処理を行う一群の更新モジュールを検出し、循環監視パターンを生成する。そして、循環監視パターン記憶部６６６は、生成した循環監視パターンを記憶する。
循環監視パターンとは、一方向に循環して改ざん検出処理を行う複数の更新モジュールについて、監視対象（検証対象）のモジュールに関する情報を記述したものである。具体的には、循環監視パターンには、モジュール識別子、メモリ上の位置、サイズ、アドレス、ファイル名等が記述されている。
【０１８２】
図３０に示す具体例を用いて説明する。
一方向に循環して改ざん検出処理を行う一群の更新モジュールとは、例えば、更新モジュール１３１、更新モジュール１３２、および更新モジュール１３３である。図３０の矢印が示すように、更新モジュール１３１が更新モジュール１３２を検証し、更新モジュール１３２が更新モジュール１３３を検証し、更新モジュール１３３が更新モジュール１３１を検証する関係を有している。
【０１８３】
これらの更新モジュール１３１、１３２、および１３３の情報を記述したものが、循環監視パターンである。
また、図３０では、更新モジュール１３１、更新モジュール１３２、更新モジュール１３５、更新モジュール１３７、更新モジュール１３３も一方向に循環して改ざん検出処理を行っており、更新モジュール１３３、更新モジュール１３６、更新モジュール１３７も一方向に循環して改ざん検出処理を行っている。
【０１８４】
このように、循環監視パターン記憶部６６６は、図３０の監視パターンから、複数の循環監視パターンを生成することができる。
（ｂ）相互監視結果（改ざん検出結果）の矛盾
ここでは、改ざん検出結果の矛盾について説明する。
更新モジュール群１３０ｂが、図３０に示した監視パターンで相互に改ざん検出処理を行った場合、更新モジュール１３１〜１３７は、それぞれの改ざん検出結果を、更新サーバ２００ｂの判断部２１０ｂへ送信する。
【０１８５】
図３１は、判断部２１０ｂが受信した検出結果を示す図である。図３１では、「改ざんされていない」という検出結果を、矢印と対応して記載された○印で表し、「改ざんされている」という検出結果を、矢印と対応して記載された×印で表している。
例えば、○印２０１０は、更新モジュール１３１が、更新モジュール１３２の改ざん検出処理を行った結果、「改ざんされていない」と判定されたことを表している。
【０１８６】
また、○印２０１１は、更新モジュール１３１が、更新モジュール１３４の改ざん検出処理を行った結果、「改ざんされていない」と判定されたことを表している。
また、○印２０１２は、更新モジュール１３３が、更新モジュール１３１の改ざん検出処理を行った結果、「改ざんされていない」と判定されたことを表している。
また、×印２０１３は、更新モジュール１３４が、更新モジュール１３６の改ざん検出処理を行った結果、「改ざんされている」と判定されたことを表している。
【０１８７】
また、×印２０１４は、更新モジュール１３３が、更新モジュール１３６の改ざん検出処理を行った結果、「改ざんされている」と判定されたことを表している。
なお、図３１では、すべての矢印に対応して検出結果が記載されている。これは、判断部２１０ｂが、すべての改ざん検出結果の受信が完了していることを表している。
次に、図３２を用いて、矛盾について説明する。先ず、更新モジュール１３２を正常な更新モジュールであると仮定する。そして、更新モジュール１３３および１３５は、○印２０１５および○印２０１６により表されるように、何れも更新モジュール１３２によって、「改ざんされていない」と判定されている。正常な更新モジュール１３２によって、「改ざんされていない」と判定された更新モジュール１３３および１３５は、共に正常なモジュールであると仮定することができる。
【０１８８】
しかし、×印２０１７により表されるように、正常なモジュールであると仮定された更新モジュール１３３は、更新モジュール１３５を「改ざんされている」と判定しており、正常なモジュールである更新モジュール１３２による改ざん検出結果と、正常なモジュールである更新モジュール１３３による改ざん検出結果とが一致していない。このような場合を、改ざん検出結果の矛盾という。
（４）不正モジュール特定処理の動作
ここでは、図３３および図４２を用いて、ソフトウェア更新システム１０ｂにおける不正な更新モジュールの特定処理の動作について説明する。
（ａ）通常の監視パターンの場合
図３３は、不正モジュール特定処理の動作を示すフローチャートである。
【０１８９】
不正モジュール特定部６０５は、すべての更新モジュールについて、ステップＳ８００１からステップＳ８００６までの処理を繰り返す（Ｓ８０００）。
以下では、図３４に示した改ざん検出結果を具体例として用い、更新モジュール１３１に対する不正モジュール特定処理の動作について説明する。
まず、正常モジュール仮定部６５３は、更新モジュール１３１を正常な更新モジュールであると仮定し、更新モジュール１３１のみを含む仮正常更新モジュール群を生成する（Ｓ８００１）。
【０１９０】
次に、検証結果判定部６５４は、仮正常更新モジュール群に含まれる更新モジュール１３１による改ざん検出処理において、「改ざんされていない（正常）」と判定された更新モジュールが存在するか否か判断する（Ｓ８００２）。
図３４によれば、○印２０２１および○印２０２２に表されるように、更新モジュール１３２および更新モジュール１３４が正常と判定された。
【０１９１】
正常と判定された更新モジュールが存在する場合（Ｓ８００２でＹ）、検証結果判定部６５４は、正常と判定された更新モジュール１３２および更新モジュール１３４識別情報を、仮正常更新モジュール群抽出部６５５へ出力する。
仮正常更新モジュール群抽出部６５５は、受け取った識別情報を仮正常更新モジュール群に追加する。これにより、正常と判定された更新モジュール１３２および更新モジュール１３４が仮正常更新モジュール群に追加される（Ｓ８００３）。
【０１９２】
同様に、検証結果判定部６５４は、仮正常更新モジュール群に含まれる更新モジュール１３２および更新モジュール１３４による改ざん検出処理において、正常と判定された更新モジュールが存在するか否か判断する（Ｓ８００２）。○印２０２３に表されるように、更新モジュール１３３が正常と判定されたので、更新モジュール１３３が、仮正常更新モジュール群に追加される（Ｓ８００３）。
【０１９３】
同様に、検証結果判定部６５４は、仮正常更新モジュール群に含まれる更新モジュール１３３による改ざん検出処理において、正常と判定された更新モジュールが存在するか否か判断する（Ｓ８００２）。○印２０２４および○印２０２５に表されるように、更新モジュール１３１および更新モジュール１３６が正常と判定されたので、更新モジュール１３６が、仮正常更新モジュール群に追加される（Ｓ８００３）。
【０１９４】
仮正常更新モジュール群に含まれる更新モジュールが、正常であると判定する更新モジュールが存在しなくなった場合（Ｓ８００２でＮ）、矛盾検出部６５６は、仮正常更新モジュール群に含まれる更新モジュールの検証結果に矛盾があるか否か判断する（Ｓ８００４）。
このとき、図３４に示す仮正常更新モジュール群２０３１が形成されている。仮正常更新モジュール群２０３１に含まれる更新モジュールの検証結果を見ると、更新モジュール１３３による、更新モジュール１３６に対する検証結果は、○印２０２５であるのに対して、更新モジュール１３４による更新モジュール１３６に対する検証結果は×印２０２６であるから、検証結果に矛盾がある。
【０１９５】
仮正常更新モジュール内に矛盾がある場合（Ｓ８００４でＹ）、ステップＳ８００１において、正常であると仮定した更新モジュール１３１は、仮定が誤っていたことになる。すなわち、更新モジュール１３１は、不正な更新モジュールであると特定される（Ｓ８００５）。
仮正常更新モジュール内に矛盾がない場合（Ｓ８００４でＮ）、ステップＳ８００１において、正常と仮定した更新モジュール１３１についての特定は行なわない（Ｓ８００６）。
【０１９６】
次に、ステップＳ８０００に戻って他の更新モジュールを正常と仮定し、ステップＳ８００１からステップＳ８００６までの処理を行う。
更新モジュール群１３０ｂに含まれるすべての更新モジュールについてステップＳ８００１からステップＳ８００６までの処理が終了するまで繰り返す（Ｓ８００７）。
このように、実施の形態２における不正モジュール特定処理は、判断対象として一つの更新モジュールに着目し、当該更新モジュールを正常なモジュールと仮定した上で、その仮定に基づいて各更新モジュールの改ざん検出結果に矛盾があるか否か検証する。そして、矛盾がある場合に、判断対象の更新モジュールを、不正なモジュールであると特定する。
【０１９７】
これにより、判断部２１０ｂは、改ざん検出結果を偽って通知してきた不正な更新モジュールを論理的な検証方法を用いて効果的に特定することができる。そして、判断部２１０ｂは、特定された不正な更新モジュールの無効化指示を出力することにより、不正な更新モジュールを適切に排除することができる。
（ｂ）循環監視パターンの場合
次に、更新モジュール群１３０ｂに含まれる更新モジュール間の監視パターンに、循環監視パターンが含まれる場合の不正モジュール特定処理について説明する。
【０１９８】
例えば、図３５において、更新モジュール１３３、更新モジュール１３６、更新モジュール１３７は、矢印２０４１、２０４２、２０４３が示すように、一方向に循環して改ざん検出処理を行っている。そして、○印２０４５、２０４６、２０４７が示すように、改ざん検出結果は、すべて正常である。
このような場合、不正モジュール特定処理において、更新モジュール１３３、更新モジュール１３６、更新モジュール１３７を一群として扱うことができる。
【０１９９】
例えば、更新モジュール１３３が不正な更新モジュールであると特定された場合、更新モジュール１３７による、更新モジュール１３３の改ざん検出結果（図３５の○印２０４７）は、誤りであったことになる。そうすると、更新モジュール１３７は、正しく改ざん検出を行うことができない、不正な更新モジュールである可能性が高い。さらに、更新モジュール１３７が不正な更新モジュールである場合には、更新モジュール１３６による更新モジュール１３７の改ざん検出結果（図３５の○印２０４６）は、誤りであったことになる。そうすると、更新モジュール１３６もまた、正しく改ざん検出を行うことが出来ない、不正な更新モジュールである可能性が高い。
【０２００】
すなわち、すべての改ざん検出結果が正常である循環監視パターンにおいては、その内の一つの更新モジュールが不正であると特定された場合には、循環監視パターン内のすべての更新モジュールが不正であるとみなすことができる。
以下では、図３６および図３７を用いて、より具体的に説明する。
図３６において、更新モジュール１３３、１３６、１３７から成る循環監視パターンは、改ざん検出結果がすべて正常である。このため、更新モジュール１３３、１３６、１３７を、一群として扱うことができる。
【０２０１】
ここで、更新モジュール１３３による更新モジュール１３６の改ざん検出結果と、更新モジュール１３７による更新モジュール１３６の改ざん検出結果とに矛盾がある。そこで、更新モジュール１３３、１３６、１３７を一群として、すべて不正な更新モジュールであると特定することができる。
また、図３６の例では、更新モジュール１３６および更新モジュール１３７が、相互に改ざん検出処理を行っている。更新モジュール１３６は、更新モジュール１３７を「改ざんされている」と判断しており、更新モジュール１３７は、更新モジュール１３６を「改ざんされていない」と判断している。このように、循環監視パターン内の一組の更新モジュールの相互監視結果に矛盾がある場合にも、更新モジュール１３３、１３６，１３７を一群として、すべて不正な更新モジュールであると特定することができる。
【０２０２】
図３７において、更新モジュール１３１、１３２、１３３から成る循環監視パターンは、改ざん検出結果がすべて正常である。このため、更新モジュール１３１、１３２、１３３を、一群として扱うことができる。
ここで、更新モジュール１３２による更新モジュール１３５の改ざん検出結果（○印２０６１）と、更新モジュール１３３による更新モジュール１３５の改ざん検出結果（×印２０６２）とに矛盾がある。このように、循環監視パターン外の更新モジュールに対する改ざん検出結果が矛盾している場合にも、更新モジュール１３１、１３２、１３３を一群として、すべて不正な更新モジュールであると特定することができる。
【０２０３】
このように、循環監視パターンに含まれる更新モジュールを一群として扱うことにより、個々の更新モジュール毎に不正であるか否かを判断する場合と比較して、処理効率を格段に向上させることができる。
続いて、図３８のフローチャートを用いて、循環監視パターンを考慮した不正モジュール特定処理の動作について説明する。
【０２０４】
先ず、循環監視パターン取得部６６３は、循環監視パターン記憶部６６６を参照することにより、更新モジュール群１３０ｂの監視パターンの中に、循環監視パターンが存在するか否かを判断する（Ｓ８１０１）。循環監視パターンが存在しない場合（Ｓ８１０１でＮ）、不正モジュール特定処理を終了する。
循環監視パターンが存在する場合（Ｓ８１０１でＹ）、当該循環監視パターンの改ざん検出結果がすべて正常であるか否か判断する（Ｓ８１０２）。
【０２０５】
すべてが正常でない場合（Ｓ８１０２でＮ）、当該循環監視パターン内の更新モジュールを一群として扱うことはできない。そこで、ステップＳ８１０５へ進む。
当該循環監視パターンの改ざん検出結果がすべて正常である場合（Ｓ８１０２でＹ）、循環監視パターン内の更新モジュールが、改ざん検出処理を行う同一の更新モジュールについて、検証結果が一致するか否か判断する（Ｓ８１０３）。
【０２０６】
一致しない場合（Ｓ８１０３でＮ）、循環監視パターン内の更新モジュールは全て不正な更新モジュールであると特定する（Ｓ８１０４）。
循環監視パターンの監視結果がすべて正常でない場合（Ｓ８１０２でＮ）、および、循環監視パターン内の更新モジュールが、改ざん検出処理を行う同一の更新モジュールについて、検証結果が一致する場合（Ｓ８１０３でＹ）、更新モジュール群１３０ｂの監視パターンの中に、他の循環監視パターンが存在するか判断する（Ｓ８１０５）。
【０２０７】
他の循環監視パターンが存在する場合（Ｓ８１０５でＹ）、ステップＳ８１０２へ戻り処理を続ける。他の循環監視パターンが存在しない場合（Ｓ８１０５でＮ）、不正モジュール特定処理を終了する。
（ｃ）循環監視パターン選択方法
次に、循環監視パターン選択方法について説明する。
【０２０８】
上述したように、不正モジュール特定処理において、循環監視パターンの改ざん検出結果がすべて正常である場合には、循環監視パターンに含まれるすべての更新モジュールを一群として扱うことができる。
ここで、循環監視パターンに含まれる更新モジュールの数（以下では、「循環のサイズ」と表現する。）が大きい場合、循環監視パターンに含まれるすべての更新モジュールが同時に改ざんされている可能性は低いと考えられる。また、循環のサイズが大きいほど、すべての検証結果が正常となる可能性は低くなる。
【０２０９】
これらのことから、実施の形態２では、循環監視パターンが複数存在する場合には、循環のサイズが小さい循環監視パターンから優先的に不正モジュール特定処理を行うことにより、不正な更新モジュールを効率的に発見し、無効化する。
また、循環のサイズが同じである循環監視パターンが複数存在する場合には、循環監視パターン内の更新モジュールに対して改ざん検出処理を行っている循環監視パターン外の更新モジュールの数を基に、不正モジュール特定処理を行う場合の優先順位を決定する。
【０２１０】
循環監視パターン内の更新モジュールがすべて不正モジュールと判断された後に、循環監視パターン外の更新モジュールが、循環監視パターンに含まれるいずれかの更新モジュールを正常と判定している場合、当該循環監視パターン外の更新モジュールは、不正な更新モジュールであると判断できる。
そこで、循環のサイズが同じである循環監視パターンが複数存在する場合には、循環監視パターン内の更新モジュールに対して改ざん検出処理を行っている循環監視パターン外の更新モジュールの数が多い循環監視パターンから、優先的に不正モジュール特定処理を行う。
【０２１１】
上記の処理を実現するために、循環監視パターン記憶部６６６は、監視パターン記憶部６６５から、複数の循環監視パターンを検出すると、上述した循環監視パターンに加え、図３９または図４０に示す循環監視パターンリストを生成して、記憶する。循環監視パターンリストは、監視パターンに含まれる複数の循環監視パターンについて、循環監視パターン毎に、当該循環監視パターンに係る情報を記述したリストである。
【０２１２】
図３９は、循環監視パターンリスト２１００のデータ構成を示す図である。
同図に示すように、循環監視パターンリスト２１００は、各循環監視パターンについて、循環のサイズ、当該循環監視パターンを構成する更新モジュールの識別情報、および当該循環監視パターン内の更新モジュールに対して改ざん検出処理を行っている循環監視パターン外の更新モジュールの数（ここでは、「循環への入力」という。）を対応付けて記憶している。
【０２１３】
たとえば、Ｎｏ．１の循環監視パターンは、循環のサイズが３であり、更新モジュール１３１、１３２、１３３から構成される。また、当該循環監視パターン内の更新モジュールに対して改ざん検出処理を行っている循環監視パターン外の更新モジュールが、１つ存在する。
図４０は、循環監視パターンリスト２２００のデータ構成を示す図である。
【０２１４】
循環監視パターンリスト２２００は、図３９の循環監視パターンリスト２１００と比較すると、各循環監視パターンについての情報が、循環のサイズが小さい順に並べられている。さらに、循環のサイズが同一である循環監視パターンが複数ある場合には、循環監視パターン内の更新モジュールを検証する外部の更新モジュールの数（循環への入力）が大きい順に並べられている。
【０２１５】
そこで、図４０のリスト２２００を用いれば、複数の循環監視パターンのうち、何れの循環監視パターンから優先的に処理を行えば良いのかを判断しやすくなり、図３９のリスト２１００を用いる場合と比較して、不正な更新モジュールをより効率的に発見し、無効化することができる。
次に、図４１および図４２のフローチャートを用いて、循環監視パターンが複数存在する場合の不正モジュール特定処理の動作について説明する。
【０２１６】
先ず、循環監視パターン取得部６６３は、循環監視パターン記憶部６６６を参照することにより、更新モジュール群１３０ｂの監視パターンの中に、循環監視パターンが存在するか否かを判断する（Ｓ８１１１）。循環監視パターンが存在しない場合（Ｓ８１１１でＮ）、不正モジュール特定処理を終了する。
循環監視パターンが存在する場合（Ｓ８１１１でＹ）、循環監視パターン取得部６６３は、循環監視パターン記憶部６６６に記憶されている循環監視パターンリストから、循環のサイズが最小である循環監視パターンを探す（Ｓ８１１２）。さらに、循環のサイズが同一である循環監視パターンが複数存在する場合には、循環監視パターン取得部６６３は、循環監視パターン内の更新モジュールを検証する外部の更新モジュールの数が多い循環監視パターンを選択する（Ｓ８１１３）。
【０２１７】
次に、循環監視パターン取得部６６３は、選択した循環監視パターンの監視結果がすべて正常であるか否か判断する（Ｓ８１１４）。
すべて正常でない場合（Ｓ８１１４でＮ）、ステップＳ８１１８へ進む。
すべて正常である場合（Ｓ８１１４でＹ）、矛盾検出部６５６は、循環監視パターン内の更新モジュールが、循環監視パターン内の他の更新モジュールの改ざん検出処理を行った結果、不正と判定された更新モジュールが存在するか確認する（Ｓ８１１５）。
【０２１８】
不正と判定された更新モジュールが存在する場合（Ｓ８１１５でＹ）、循環監視パターン内の更新モジュールは全て不正な更新モジュールであると特定し（Ｓ８１１６）、ステップＳＳ８１１８へ進む。
不正と判定された更新モジュールが存在しない場合（Ｓ８１１５でＮ）、矛盾検出部６５６は、循環監視パターン内の更新モジュールが、循環監視パターン外の同一の更新モジュールに対して行なった改ざん検出結果に、矛盾があるか否か判断する（Ｓ８１１７）。
【０２１９】
検証結果が矛盾する場合（Ｓ８１１７でＮ）、循環監視パターン内の更新モジュールは全て不正な更新モジュールであると特定し（Ｓ８１１６）、ステップＳ８１１８へ進む。
検証結果が一致する場合（Ｓ８１１７でＹ）、循環監視パターン取得部６６３は、循環監視パターン記憶部６６６に記憶されている循環監視パターンリストを参照し、他に循環監視パターンが存在するかを判断する（Ｓ８１１８）。
【０２２０】
循環監視パターンが存在する場合（Ｓ８１１８でＹ）、循環監視パターン取得部６６３は、循環のサイズが、前回対象とした循環監視パターンの循環のサイズ以上であり、かつ、最小である循環監視パターンを選択する（Ｓ８１１９）。そして、ステップＳ８１１３へ戻り処理を続ける。
他に循環監視パターンが存在しない場合（Ｓ８１１８でＮ）、不正モジュール特定処理を終了する。
（５）分散情報について
ここでは、循環監視パターンと更新モジュールが保持する分散情報との関係について説明する。
【０２２１】
上述した初期設定処理では、保護制御モジュール１２０が暗復号鍵から秘密分散法を用いて分散情報を作成し、生成した分散情報を各更新モジュールへ送信する。
特許文献２に記載されている方法を用いる場合、同一の分散情報を複数の更新モジュールへ送信する。これにより、ある更新モジュールが無効化され、当該更新モジュールから分散情報が取得できない場合であっても、同一の分散情報を保持する他の更新モジュールから分散情報を取得することにより、暗復号鍵を復元することができる。
【０２２２】
循環監視パターンでは、一つの更新モジュールが不正モジュールと特定されると、循環監視パターンに含まれるすべての更新モジュールが不正モジュールと特定され、無効化される。
そこで、実施の形態２の保護制御モジュール１２０は、暗復号鍵の復元が不能となる事態を防止するために、循環監視パターンが存在する場合には、循環監視パターンの構成に基づいて、各更新モジュールに分散情報を送信する。
【０２２３】
以下、図４３および図４４を用いて具体的に説明する。
図４３は、監視パターンの一例を示す図である。同図によれば、更新モジュール１３１、１３２、１３３、および、更新モジュール１３３、１３６、１３７が循環監視パターンである。
このとき、循環監視パターン内の更新モジュール１３１、１３２、１３３のみが保持し、他の更新モジュールが保持しない分散情報がある場合、更新モジュール１３１、１３２、１３３のすべてが無効化されると、保護制御モジュール１２０は、暗復号鍵を復元できなくなる。
【０２２４】
同様に、更新モジュール１３３、１３６、１３７のみが保持し、他の更新モジュールが保持しない分散情報がある場合、更新モジュール１３３、１３６、１３７のすべてが無効化されると、保護制御モジュール１２０は、暗復号鍵を復元できなくなる。
そこで、保護制御モジュール１２０は、図４４に示すように、分散情報１、分散情報２、分散情報３、分散情報４、分散情報５、分散情報６、および分散情報７のすべてについて、更新モジュール１３１、１３２、１３３のみが保持する分散情報、および、更新モジュール１３３、１３６、１３７のみが保持する分散情報が存在しないように、各分散情報を、各更新モジュールへ送信する。
【０２２５】
これにより、更新モジュール１３１、１３２、１３３のすべてが無効化された場合であっても、または、更新モジュール１３３、１３６、１３７のすべてが無効化された場合であっても、保護制御モジュール１２０は、暗復号鍵を復元することができる。
３．実施の形態３
ここでは、別の実施の形態について説明する。
３．１  改竄監視システム１０ｃａ
別の実施の形態としての改竄監視システム１０ｃａについて、図７７に示す構成図を用いて、説明する。
【０２２６】
改竄監視システム１０ｃａは、図７７に示すように、情報セキュリティ装置１００ｃａ及び管理装置２００ｃａから構成されている。
情報セキュリティ装置１００ｃａは、改竄を監視する複数の監視モジュール１３１ｃａ、１３２ｃａ、１３３ｃａ、１３４ｃａを有する。
管理装置２００ｃａは、情報セキュリティ装置１００ｃａから、各監視モジュールによる他の監視モジュールに対する監視結果を受信する受信部２４０ｃａと、受信した前記監視結果を用いて、改竄されていない正常な監視モジュールの存在を検出する検出部６７８ｃａと、前記検出がされた場合に、前記監視モジュールから選択した１個の監視モジュールに対して改竄されていると仮定する第一仮定部６７３ｃａと、改竄されていると仮定された前記監視モジュールを起点として、受信した前記監視結果を用いて、改竄されていると仮定された監視モジュールを正常と判定する監視モジュールに対して改竄されていると仮定する手順を、未処理の監視モジュールについて、連鎖的に適用する第二仮定部６７９ｃａと、前記第二仮定部６７９ｃａによる手順の適用の結果、全ての監視モジュールが改竄されていると仮定されたか判断し、前記判断がされた場合に、最初に改竄されていると仮定された前記監視モジュールを正常な監視モジュールと決定する判断部６７６ｃａとから構成されている。
【０２２７】
管理装置２００ｃａによると、検出部６７８ｃａは、改竄されていない正常な監視モジュールの存在を検出しているので、少なくとも１個の監視モジュールは、正常である。
これに対して、判断部６７６ｃａにより、全ての監視モジュールに対して改竄されていると仮定されたと判断された場合には、この判断結果は、検出部６７８ｃａの検出の結果と矛盾している。これは、第一仮定部６７３ｃａによる仮定に誤りがあったためである。
【０２２８】
従って、第一仮定部６７３ｃａによる仮定を覆し、第一仮定部６７３ｃａにより、改竄されていると仮定された監視モジュールを正常な監視モジュールと決定する。
以上のようにして、正常な監視モジュールを決定することができるので、正常な監視モジュールの監視結果は信頼できるものであり、有効に利用することができる。
なお、以上のようにして、正常な監視モジュールが決定できた場合には、上記において不正とした仮定を全て取り消す。
３．２  ソフトウェア更新システム１０ｃｂ
別の実施の形態としてのソフトウェア更新システム１０ｃｂ（図示していない）について、説明する。
【０２２９】
ソフトウェア更新システム１０ｃｂでは、更新処理における更新モジュールの選択（図２０のステップＳ５１０６及び図２１のステップＳ５１１２）において、改竄されていない、つまり、正常な更新モジュールを特定する方式を用いる。この方式を用いると、複数の更新モジュールの中から正常である更新モジュールを、論理的に特定できるので、特定した正常な更新モジュールを用いて、保護制御モジュールを安全に更新することができる。
【０２３０】
なお、ソフトウェア更新システム１０ｃｂでは、実施の形態２と同様に更新モジュールが７個の場合について、説明する。しかし、更新モジュールは、８個以上であってもよいし、６個以下であってもよい。
（１）ソフトウェア更新システム１０ｃｂの構成
ソフトウェア更新システム１０ｃｂは、更新サーバ２００ｃｂ（図示していない）及び機器１００から構成される。機器１００は、実施の形態１の機器１００と同一の構成を有している。更新サーバ２００ｃｂは、実施の形態１の更新サーバ２００と類似の構成を有しており、更新サーバ２００の判断部２１０に代えて、図４５に示す判断部２１０ｃｂを有している。その他の構成は、更新サーバ２００と同一である。以下において、更新サーバ２００との相違点を中心として説明する。
（２）判断部２１０ｃｂの構成
判断部２１０ｃｂは、図２７に示す判断部２１０ｂと類似の構成を有している。判断部２１０ｃｂは、判断部２１０ｂのモジュール特定部６０４ｂに代えて、図４５に示すように、モジュール特定部６０４ｃｂを有している。モジュール特定部６０４ｃｂは、この図に示すように、不正モジュール特定部６０５及び正常モジュール特定部６０７を有している。不正モジュール特定部６０５は、図２７に示す不正モジュール特定部６０５と同一である。以下に正常モジュール特定部６０７について説明する。
（３）正常モジュール特定部６０７
正常モジュール特定部６０７は、以下に示すようにして、機器１００における各更新モジュールの相互監視結果を用いて、改竄されていない正常な更新モジュールを特定する。
【０２３１】
正常モジュール特定部６０７は、図４６に示すように、特定指示受信部６７１、特定結果送信部６７２、不正モジュール仮定部（第一仮定部とも呼ぶ。）６７３、検証結果判定部６７４、仮不正更新モジュール群抽出部６７５、抽出結果判断部６７６、循環監視パターン判定部６７７及び異常検出部６７８から構成されている。また、検証結果判定部６７４及び仮不正更新モジュール群抽出部６７５は、第二仮定部６７９を構成している。
【０２３２】
第二仮定部６７９は、不正モジュール仮定部６７３により、改竄されていると仮定された更新モジュールを起点として、受信した監視結果を用いて、改竄されていると仮定された更新モジュールを正常と判定する更新モジュールに対して改竄されていると仮定する手順を、未処理の更新モジュールについて、連鎖的に適用する。
（ａ）特定指示受信部６７１
特定指示受信部６７１は、指示生成部６０３から正常な更新モジュールの特定の指示を示す正常モジュール特定指示を受信する。正常モジュール特定指示を受信すると、正常モジュール特定指示を異常検出部６７８へ出力する。
【０２３３】
また、特定指示受信部６７１は、指示生成部６０３から更新モジュールリストを受信する。更新モジュールリストは、機器１００における更新モジュール群１３０を構成する全ての更新モジュールを識別する識別番号を含んでいる。次に、特定指示受信部６７１は、受信した更新モジュールリストを不正モジュール仮定部６７３及び抽出結果判断部６７６へ出力する。
【０２３４】
また、特定指示受信部６７１は、機器１００から、ネットワーク５、通信部２４０、受信部６０１及び指示生成部６０３を介して、機器１００における更新モジュール群１３０の監視の結果を受信する。また、受信した更新モジュール群１３０の監視の結果を異常検出部６７８、不正モジュール仮定部６７３、循環監視パターン判定部６７７及び検証結果判定部６７４へ出力する。
（ｂ）異常検出部６７８
異常検出部６７８は、以下に示すようにして、受信した前記監視結果を用いて、改竄されていない正常な更新モジュールの存在を検出する。簡単に説明すると、異常検出部６７８は、前回受信した監視結果と、今回受信した監視結果とを用い、前回受信した監視結果により、全ての更新モジュールが正常であると判定され、今回受信した監視結果により、全ての更新モジュールが正常であると判定されなかった場合に、改竄されていない正常な更新モジュールの存在を検出する。ここで、前回の監視と今回の監視との時間間隔は、所定の閾値より小さいものとする。
【０２３５】
以下に、さらに詳細に異常検出部６７８について説明する。
異常検出部６７８は、特定指示受信部６７１から正常モジュール特定指示を受信する。
正常モジュール特定指示を受信すると、異常検出部６７８は、特定指示受信部６７１から機器１００における更新モジュール群１３０の監視の結果（最新の監視の結果）を受信する。また、特定指示受信部６７１から、機器１００における更新モジュール群１３０の前回の監視の結果を受信する。
【０２３６】
前回の監視とは、最新の監視を行う１回前における監視を示している。機器１００は、定期的に又は不定期に、密な間隔により（例えば、１月に１０〜２０回、１週間に５〜６回、１日に２〜３回、１時間に１回など）、監視を繰り返している。前回の監視と今回の監視との時間間隔は、所定の閾値より小さい。ここで、所定の閾値の例は、５日、３日、１日、１２時間、６時間、３時間、１時間などである。
【０２３７】
更新サーバ２００ｃｂは、各監視における監視の結果を累積的に記憶している。
上記のように、機器１００は、定期的に又は不定期に、密な間隔により、監視を繰り返しているので、第１の監視時点から、その次の第２の監視時点までの間において、全ての更新モジュールが改竄されてしまうという事態は、避けられると仮定できる。
つまり、第１の監視時点において、全ての更新モジュールが改竄されていない場合において、第１の監視時点の次の第２の監視時点において、少なくとも１個の更新モジュールが改竄されていないものと仮定することができる。
【０２３８】
異常検出部６７８は、受信した最新の監視の結果を用いて、最新の監視の結果が全て正常であるか否かを判断する。最新の監視の結果が全て正常である場合には、最新の監視の結果が全て正常であることを示す正常結果を、特定結果送信部６７２を介して、指示生成部６０３へ出力し、モジュール特定部６０４ｃｂは、処理を終了する。この場合には、全ての更新モジュールが正常であるので、正常な更新モジュールの特定処理を行う必要はない。
【０２３９】
異常検出部６７８は、最新の監視の結果が全て正常であると判断されない場合、次に、受信した前回の監視の結果を用いて、前回の監視の結果が全て正常であるか否かを判断する。前回の監視の結果が全て正常であると判断されない場合には、その旨を示す結果を、特定結果送信部６７２を介して、指示生成部６０３へ出力し、モジュール特定部６０４ｃｂは、処理を終了する。この場合には、全ての更新モジュールが正常でない可能性があるので、正常な更新モジュールの特定処理を行わない。
【０２４０】
前回の監視の結果が全て正常である場合には、異常検出部６７８は、正常モジュール特定部６０７を構成するその他の構成部に対して、正常モジュールの特定処理をするように、制御する。また、循環監視パターン判定部６７７に対して、不正な更新モジュールを特定する旨を示す不正モジュール特定指示を出力する。
（ｃ）循環監視パターン判定部６７７
循環監視パターン判定部６７７は、異常検出部６７８から不正モジュール特定指示を受信し、特定指示受信部６７１から更新モジュール群１３０の監視の結果を受信する。不正モジュール特定指示を受信すると、循環監視パターン判定部６７７は、循環検出部６０６へ循環監視パターンの取得指示を送信する。循環検出部６０６は、存在すれば、１個以上の循環監視パターンを循環監視パターン判定部６７７へ送信する。次に、循環監視パターン判定部６７７は、循環検出部６０６から循環監視パターンを受信する。
【０２４１】
次に、循環監視パターン判定部６７７は、受信した監視の結果を用いて、受信した循環監視パターンにより示される複数の更新モジュールの監視の結果に矛盾があるかを検証する。矛盾がある場合には、受信した循環監視パターン内に含まれる更新モジュールはすべて不正な更新モジュールであると特定し、不正であると特定した全ての更新モジュールをそれぞれ識別する不正識別番号を、不正モジュール仮定部６７３へ送信する。
【０２４２】
なお、循環監視パターンについて、簡単に説明すると、以下の通りである。
更新モジュールに対して、循環監視パターンにより、監視対象の更新モジュールが定められている。循環監視パターンは、第１の更新モジュールによる監視対象である第２の更新モジュールが、前記第１の更新モジュールを監視し、又は、１個以上の更新モジュールを介在して、前記第１の更新モジュールを監視することを示している。
【０２４３】
要するに、循環監視パターン判定部６７７は、循環監視パターンに係る複数の更新モジュールによる他の１の更新モジュールに対する複数の監視結果が一致しない場合に、当該循環監視パターンに係る複数の更新モジュールを、不正な更新モジュールとして、特定する。
なお、次のようにして、不正な更新モジュールを特定するとしてもよい。すなわち、不正モジュール特定部は、１個の更新モジュールが正常であると仮定する場合に、受信する監視結果を用いて、複数の監視結果に不一致があるか否かを判断し、不一致がある場合に、正常であると仮定した前記更新モジュールを、不正な更新モジュールとして、特定する。
（ｄ）不正モジュール仮定部６７３
不正モジュール仮定部６７３は、以下に示すようにして、更新モジュールの中から選択した１個の更新モジュールに対して改竄されていると仮定する。
【０２４４】
不正モジュール仮定部６７３は、特定指示受信部６７１から更新モジュールリストを受信し、機器１００における更新モジュール群１３０の監視の結果を受信する。また、循環監視パターン判定部６７７から不正であると特定された全ての更新モジュールをそれぞれ識別する不正識別番号を受信する。
次に、不正モジュール仮定部６７３は、更新モジュールリストに含まれる更新モジュールの識別番号の内、受信した不正識別番号以外の更新モジュールの識別番号を一つ選択し、選択した識別番号により示される更新モジュールを不正な更新モジュールと仮定する。この選択した識別番号を仮定識別番号と呼ぶ。不正モジュール仮定部６７３は、空集合の仮不正更新モジュール群を定め、次に、仮定識別番号を仮不正更新モジュール群に含める。この時点において、仮不正更新モジュール群には、選択した更新モジュールを識別する仮定識別番号のみが含まれる。なお、仮不正更新モジュール群を、仮定不正グループと呼ぶとしてもよい。このように、不正モジュール仮定部６７３は、仮定識別番号を含む仮定不正グループを生成する。
【０２４５】
次に、不正モジュール仮定部６７３は、選択した更新モジュールの仮定識別番号を抽出結果判断部６７６へ送信し、仮不正更新モジュール群の仮不正構成情報を検証結果判定部６７４へ送信する。仮不正更新モジュール群の仮不正構成情報は、仮不正更新モジュール群に含まれる全ての識別番号から構成されている。
また、不正モジュール仮定部６７３は、抽出結果判断部６７６から正常な更新モジュールを特定できない旨の特定不可通知を受信する。特定不可通知を受信した場合、不正モジュール仮定部６７３は、更新モジュールリストに含まれる更新モジュールの識別番号の内、受信した不正識別番号以外の更新モジュールであって、選択した更新モジュールとは別の更新モジュールの識別番号を新たに選択し、選択した更新モジュールを不正な正常モジュールと仮定し、選択した当該更新モジュールを識別する仮定識別番号のみを仮不正更新モジュール群に含め、仮不正更新モジュール群の仮不正構成情報を検証結果判定部６７４へ送信する。
（ｅ）第二仮定部６７９
第二仮定部６７９は、上述したように、検証結果判定部６７４及び仮不正更新モジュール群抽出部６７５から構成されている。
【０２４６】
第二仮定部６７９は、以下に説明するように、不正モジュール仮定部６７３により、改竄されていると仮定された更新モジュールを起点として、受信した監視結果を用いて、改竄されていると仮定された更新モジュールを正常と判定する更新モジュールに対して改竄されていると仮定する手順を、未処理の更新モジュールについて、連鎖的に適用する。
第二仮定部６７９は、簡単に説明すると、監視結果を用いて、前記仮定不正グループに含まれている識別番号により識別される更新モジュールを正常と判断する更新モジュールが存在するか否かを判定し、存在すると判定された場合に、当該更新モジュールを識別する識別番号を前記仮定不正グループに追加し、未処理の更新モジュールについて、前記判定と前記追加とを繰り返し行うように制御する。
（i）検証結果判定部６７４
検証結果判定部６７４は、特定指示受信部６７１から、機器１００における更新モジュール群１３０の監視の結果を受信する。また、不正モジュール仮定部６７３から仮不正構成情報を受信する。
【０２４７】
検証結果判定部６７４は、特定指示受信部６７１から受信した機器１００における更新モジュール群１３０の監視の結果、及び、不正モジュール仮定部６７３から受信した仮不正更新モジュール群の仮不正構成情報を用いて、仮不正更新モジュール群内の更新モジュールへの検証結果を判定する。
ここでは、図４７に示す例を用いて、検証結果判定部６７４による判定方法について説明する。
【０２４８】
図４７に示すように、更新モジュール１３１は、更新モジュール１３２を監視（３００４）し、更新モジュール１３１による更新モジュール１３２に対する監視結果は、正常（３００３）であるものとする。また、更新モジュール１３２は、仮不正更新モジュール群３００２内に含まれる更新モジュールであるものとする。
このとき、検証結果判定部６７４は、受信した監視の結果を用いて、仮不正更新モジュール群３００２内に含まれる更新モジュール１３２を正常と判定する更新モジュールを探す。図４７に示す例では、更新モジュール１３１が更新モジュール１３２を正常（３００３）と判定している。そこで、検証結果判定部６７４は、更新モジュール１３２を正常と判定する更新モジュール１３１を仮不正更新モジュールとみなす。
【０２４９】
後述するように、更新モジュール１３１は、仮不正更新モジュールとして、仮不正更新モジュール群に追加して含まれるようになる。その結果、更新モジュール１３２及び１３１は、新たな仮不正更新モジュール群３００１に含まれることになる。
検証結果判定部６７４は、仮不正更新モジュール群内の更新モジュールへの監視の結果として、正常と判定する更新モジュールを識別する識別番号（以下、仮不正識別番号と呼ぶ。）と、受信した仮不正更新モジュール群の構成情報を仮不正更新モジュール群抽出部６７５へ送信する。仮不正更新モジュール群内の更新モジュールへの監視の結果として、正常とする更新モジュールが存在しない場合は、その旨を仮不正更新モジュール群抽出部６７５へ送信する。仮不正更新モジュール群抽出部６７５から仮不正更新モジュール群の構成情報を受信した場合も、同様の動作を行う。
（ii）仮不正更新モジュール群抽出部６７５
仮不正更新モジュール群抽出部６７５は、検証結果判定部６７４から仮不正更新モジュール群内の更新モジュールへの監視の結果として、正常と判定する更新モジュールの識別番号（仮不正識別番号）と、仮不正更新モジュール群の構成情報を受信する。次に、受信した更新モジュールの識別番号（仮不正識別番号）を受信した仮不正更新モジュール群へ追加する。
【０２５０】
図４７に示す例の場合には、更新モジュール１３１は、仮不正更新モジュールとして、仮不正更新モジュール群に追加して含まれるようになる。その結果、更新モジュール１３２及び１３１は、新たな仮不正更新モジュール群３００１に含まれることになる。
次に、仮不正更新モジュール群抽出部６７５は、識別番号が追加された新たな仮不正更新モジュール群の構成情報を検証結果判定部６７４へ送信する。検証結果判定部６７４から更新モジュールが存在しない旨の通知を受信した場合には、抽出結果判断部６７６へ仮不正更新モジュール群の構成情報を送信する。
（ｆ）抽出結果判断部６７６
抽出結果判断部６７６は、特定指示受信部６７１から更新モジュールリストを受信する。また、仮不正更新モジュール群抽出部６７５から仮不正更新モジュール群の仮不正構成情報及び仮定識別番号を受信する。さらに、循環監視パターン判定部６７７から不正な更新モジュールを識別する不正識別番号を受信する。
【０２５１】
次に、抽出結果判断部６７６は、仮不正更新モジュール群の仮不正構成情報及び不正な更新モジュールを識別する不正識別番号を用いて、循環監視パターン判定部６７７で特定した不正な更新モジュール以外の全ての更新モジュールが仮不正更新モジュール群に含まれているか否かを判断する。
また、不正な更新モジュールが存在しない場合には、抽出結果判断部６７６は、全ての更新モジュールが仮不正更新モジュール群に含まれているか否かを判断する。さらに、不正な更新モジュールが存在を検出しない場合にも、全ての更新モジュールが仮不正更新モジュール群に含まれているか否かを判断する。言い換えると、全ての更新モジュールに対して、改竄されていると仮定されたかを判断する。さらに、言い換えると、抽出結果判断部６７６は、仮定不正グループに、全ての更新モジュールを識別する識別番号が含まれるか否かを判断する。
【０２５２】
言い換えると、抽出結果判断部６７６は、更新モジュールリストに含まれる識別番号から、不正識別番号を取り除き、さらに、仮不正構成情報に含まれる識別番号を取り除いた結果、更新モジュールリストが空集合となるか、又は、空集合ではなく、識別番号を含んでいるかを判断する。
また、不正な更新モジュールが存在しない場合には、抽出結果判断部６７６は、更新モジュールリストに含まれる識別番号から、仮不正構成情報に含まれる識別番号を取り除いた結果、更新モジュールリストが空集合となるか、又は、空集合ではなく、識別番号を含んでいるかを判断する。さらに、不正な更新モジュールが存在を検出しない場合にも、更新モジュールリストに含まれる識別番号から、仮不正構成情報に含まれる識別番号を取り除いた結果、更新モジュールリストが空集合となるか、又は、空集合ではなく、識別番号を含んでいるかを判断する。
【０２５３】
循環監視パターン判定部６７７で特定した不正な更新モジュール以外の全ての更新モジュールが仮不正更新モジュール群に含まれている場合、抽出結果判断部６７６は、不正モジュール仮定部６７３で仮定した更新モジュールを正常な更新モジュールと特定し、受信した仮定識別番号を正常モジュールを示す識別番号とし、正常モジュール識別番号を、特定結果として、特定結果送信部６７２へ出力する。
【０２５４】
全ての更新モジュールが仮不正更新モジュール群に含まれない場合、抽出結果判断部６７６は、不正モジュール仮定部６７３で仮定した更新モジュール以外の更新モジュールを仮定するように、不正モジュール仮定部６７３へ指示（正常な更新モジュールを特定できない旨の特定不可通知）を送信する。
（ｇ）特定結果送信部６７２
特定結果送信部６７２は、抽出結果判断部６７６から正常な更新モジュールの特定結果を受信し、受信した特定結果を指示生成部６０３に送信する。
【０２５５】
また、特定結果送信部６７２は、最新の監視の結果が全て正常であることを示す正常結果を指示生成部６０３へ送信する。また、最新の監視の結果が全て正常ではなく（つまり、少なくとも一部は、不正）、また、前回の監視の結果が全て正常ではない（つまり、少なくとも一部は、不正）旨を示す結果を、指示生成部６０３へ送信する。
（４）正常モジュール特定処理の動作
ソフトウェア更新システム１０ｃｂにおける正常な更新モジュールの特定処理の動作を、図４８、図４９及び図５０〜図５２を用いて説明する。
【０２５６】
なお、図４８及び図４９は、それぞれ、各更新モジュールの改竄検出の監視の結果の一例を示し、図５０〜図５２は、正常モジュール特定処理の動作を示すフローチャートである。
以下に、正常モジュール特定処理の動作について、図５０〜図５２に示すフローチャートを用いて説明する。
【０２５７】
異常検出部６７８は、少なくとも１個の更新モジュールが正常か否かを判断する。言い換えると、改竄されていない正常な更新モジュールの存在を検出する（ステップＳ９０００）。ステップＳ９０００の詳細は、次の通り（ステップＳ９００１〜Ｓ９００４）である。
異常検出部６７８は、最新の全ての監視結果を受信することにより取得し（ステップＳ９００１）、最新の全ての監視結果が、正常であるか否かを判定する（ステップＳ９００２）。すべての監視結果が正常である場合（ステップＳ９００２でＹ）、全ての更新モジュールは正常であると特定し、モジュール特定部６０４ｃｂは、正常モジュール特定処理を終了する。全ての監視結果が正常であると判断されない場合（ステップＳ９００２でＮ）、直前の、つまり、前回の全ての監視結果を受信することにより取得し（ステップＳ９００３）、直前の監視結果が全て正常であるかを判定する（ステップＳ９００４）。直前の監視結果が全て正常である判断されない場合（ステップＳ９００４でＮ）、モジュール特定部６０４ｃｂは、正常モジュール特定処理を終了する。直前の監視結果が全て正常であった場合（ステップＳ９００４でＹ）、更新モジュール群１３０の少なくとも一つの更新モジュールが正常であると判断する。これは、直前の相互監視では全ての更新モジュールが正常であった場合、相互監視の間隔が狭いため、その間隔で全ての更新モジュールが不正な更新モジュールへ改竄されることはないと判断するためである。
【０２５８】
このようにして、更新モジュール群１３０の少なくとも一つの更新モジュールが正常であると確認することにより、後に説明するように、論理的に正常モジュールを特定することができる。
次に、直前の相互監視処理の監視結果が全て正常であった場合（ステップＳ９００４でＹ）、循環監視パターン判定部６７７は、循環監視パターンが存在するかを判断する（ステップＳ９００５）。この判断は、循環検出部６０６内の循環監視パターン記憶部６６６に循環監視パターンが記憶されているか否かを確認することにより行う。循環監視パターンが存在しない場合には（ステップＳ９００５でＮ）、ステップＳ９０１４へ移行する。
【０２５９】
循環監視パターンが存在する場合（ステップＳ９００５でＹ）には、循環監視パターン判定部６７７は、循環監視パターンを用いた不正な更新モジュールの特定を行う（ステップＳ９００６）。ステップＳ９００６の詳細は、次の通り（ステップＳ９００７〜Ｓ９０１３）である。なお、循環監視パターンを用いた不正な更新モジュールの特定を行わないとしてもよい。つまり、別の方法により、不正な更新モジュールの特定を行うとしてもよい。また、不正な更新モジュールの特定を行わないとしてもよい。
【０２６０】
循環監視パターン判定部６７７は、循環検出部６０６内の循環監視パターン記憶部６６６に記憶されている１個の循環監視パターンを選択し（ステップＳ９００７）、選択した循環監視パターン内における監視結果が全て正常であるかを判断する（ステップＳ９００８）。循環監視パターンの監視結果が全て正常である場合（ステップＳ９００８でＹ）、循環監視パターン内の複数の更新モジュールの監視対象である同一モジュールに対する複数の監視結果が一致するかを検証する（ステップＳ９００９）。一致しない場合には（ステップＳ９００９でＮ）、循環監視パターン内の更新モジュールは全て不正な更新モジュールであると特定する（ステップＳ９０１０）。さらに、ステップＳ９０１０で不正な更新モジュールであると特定された更新モジュールを正常と判定している更新モジュールが存在するかを判断する（ステップＳ９０１１）。存在する場合には（ステップＳ９０１１でＹ）、正常と判定する更新モジュールを不正な更新モジュールであると特定する（ステップＳ９０１２）。これにより、不正な更新モジュールであるか否かの判断がされずに残存する更新モジュールの数を減らすことができる。その結果、保護制御モジュールを更新する正常な更新モジュールを一層効果的に特定できる。次に、ステップＳ９０１３へ制御を移す。
【０２６１】
循環監視パターン判定部６７７は、循環監視パターンの監視結果が全て正常でない場合（ステップＳ９００８でＮ）、循環監視パターン内の複数の更新モジュールの監視対象である同一モジュールに対する複数の監視結果が一致する場合（ステップＳ９００９でＹ）、又は、不正な更新モジュールであると特定された更新モジュールを正常と判定している更新モジュールが存在しない場合（ステップＳ９０１１でＮ）、さらに、循環検出部６０６内の循環監視パターン記憶部６６６に循環監視パターンが他に存在するかを判断する（ステップＳ９０１３）。他に循環監視パターンが存在する場合には（ステップＳ９０１３でＹ）、ステップＳ９００７へ制御を移す。他に循環監視パターンが存在しない場合には（ステップＳ９０１３でＮ）、循環監視パターン判定部６７７は、循環監視パターンを用いた不正な更新モジュールの特定の処理を終了する。
【０２６２】
次に、不正モジュール仮定部６７３は、ステップＳ９０１０又はステップＳ９０１２で不正な更新モジュールと特定された更新モジュール以外の更新モジュールを選択し、選択した更新モジュールを不正な更新モジュールと仮定し、仮不正更新モジュール群がこの不正と仮定した更新モジュールの識別番号のみを含むとする（ステップＳ９０１４）。
検証結果判定部６７４は、仮不正更新モジュール群内に含まれる識別番号により識別される更新モジュールを正常と判定する更新モジュールが、仮不正更新モジュール群以外に、一個でも存在するかを判定する（ステップＳ９０１５）。仮不正更新モジュール群内のモジュールを正常と判定する仮不正更新モジュール群以外の更新モジュールが一個でも存在する場合（ステップＳ９０１５でＹ）、仮不正更新モジュール群抽出部６７５は、この更新モジュールを識別する識別番号を仮不正更新モジュール群に含める（ステップＳ９０１６）。次に、ステップＳ９０１５へ制御を移す。仮不正更新モジュール群内の更新モジュールを正常と判定する仮不正更新モジュール群以外の更新モジュールが一個でも存在しなかった場合（ステップＳ９０１５でＮ）、ステップＳ９０１０又はステップＳ９０１２で不正な更新モジュールと特定された不正な更新モジュールと、仮不正更新モジュール群以外の更新モジュールが存在するか判断する（ステップＳ９０１７）。存在しない場合（ステップＳ９０１７でＮ）、ステップＳ９０１４で仮定した更新モジュールを正常な更新モジュールと特定する（ステップＳ９０１８）。こうして、正常な更新モジュールが特定できた場合には、その後に、上記において不正とした仮定を全て取り消し、仮不正更新モジュール群に含まれる識別番号を消去する。
【０２６３】
また、存在する場合（ステップＳ９０１７でＹ）、ステップＳ９０１４で仮定した更新モジュールを正常な更新モジュールと特定しない（ステップＳ９０１９）。ステップＳ９０１４において、ステップＳ９０１０やステップＳ９０１２で不正な更新モジュールと特定された更新モジュール以外の全ての更新モジュールを選択していない場合には（ステップＳ９０２０でＮ）、ステップＳ９０１４へ制御を移す。全ての更新モジュールを仮定した場合（ステップＳ９０２０でＹ）、正常モジュール特定処理を終了する。
【０２６４】
以上説明したように、ステップＳ９０１９において、仮定した更新モジュールを正常な更新モジュールと特定しないことにより、不正な更新モジュールを、正常な更新モジュールと誤判断するのを防止できる。これにより、不正な更新モジュールを介して保護制御モジュールが不正な保護制御モジュールに更新されるのを防止できる。
上記、正常モジュール特定処理では、まず、複数の更新モジュールの中のいずれか一つの更新モジュールが不正な更新モジュールであるという仮定を行う。その上で、更新モジュールの中から正常である更新モジュールを論理的な検証方法を用いて効果的に特定できるので、特定した正常な更新モジュールを用いて、保護制御モジュールを安全に更新できる。
【０２６５】
なお、上記において、更新モジュールは、監視モジュールであるとしてもよい。
（５）正常モジュール特定の例
（ａ）正常モジュール特定の第１の例
次に、図４８に示す例を用いて、正常モジュール特定処理の一例について説明する。
図４８に示すように、機器１００が有する更新モジュール群１３０は、更新モジュール１３１〜１３７を含む。
【０２６６】
更新モジュール１３１は、更新モジュール１３２及び１３４を監視し、その監視結果は、それぞれ、正常（３０２２）及び不正であり、更新モジュール１３２は、更新モジュール１３１、１３３及び１３５を監視し、その監視結果は、それぞれ、不正（３０２１）、正常（３０２３）及び不正であり、更新モジュール１３３は、更新モジュール１３１、１３５及び１３６を監視し、その監視結果は、それぞれ、正常（３０２４）、不正及び不正であり、更新モジュール１３４は、更新モジュール１３６を監視し、その監視結果は、正常（３０２７）であり、更新モジュール１３５は、更新モジュール１３７を監視し、その監視結果は、正常（３０２５）であり、更新モジュール１３６は、更新モジュール１３７を監視し、その監視結果は、正常（３０２６）であり、更新モジュール１３７は、更新モジュール１３３を監視し、その監視結果は、不正であるとする。
【０２６７】
また、更新モジュール１３１は、更新モジュール１３２を監視し（３０２８）、更新モジュール１３２は、更新モジュール１３３を監視し（３０２９）、更新モジュール１３３は、更新モジュール１３１を監視（３０３０）しているものとする。従って、循環監視パターン３０１４が存在する。
このように、更新モジュールに対して、循環監視パターンにより、監視対象の更新モジュールが定められている。循環監視パターンは、第１の更新モジュールによる監視対象である第２の更新モジュールが、前記第１の更新モジュールを監視し、又は、１個以上の更新モジュールを介在して、前記第１の更新モジュールを監視することを示している。
【０２６８】
まず、循環監視パターン判定部６７７は、循環監視パターンが存在するか判断し（ステップＳ９００５）、循環監視パターンの全ての更新モジュール１３１、１３２及び１３３は、全て不正な更新モジュールであると特定する（ステップＳ９０１０）。図４８によると、循環監視パターン３０１４が存在し、循環監視パターン３０１４における監視結果は、全て正常（３０２２、３０２３、３０２４）であり、更新モジュール１３２による更新モジュール１３１に対する監視結果（３０２１）と、更新モジュール１３３による更新モジュール１３１に対する監視結果（３０２４）とが異なるからである。
【０２６９】
次に、不正モジュール仮定部６７３は、更新モジュール１３７を選択し、更新モジュール１３７を不正な更新モジュールと仮定し、更新モジュール１３７を識別する識別番号を仮不正更新モジュール群３０１１に含める（ステップＳ９０１４）。次に、図４８によると、不正と判定された更新モジュール１３１〜１３３以外の更新モジュール１３５及び１３６が更新モジュール１３７を正常と判定（３０２５、３０２６）しているので（ステップＳ９０１５）、仮不正更新モジュール群３０１１内の更新モジュール１３７を正常と判定する更新モジュール１３５、更新モジュール１３６を仮不正更新モジュール群に含める（ステップＳ９０１６）。この結果、新たな仮不正更新モジュール群３０１２が生成される。また、図４８によると、不正と判定された更新モジュール１３１〜１３３以外の更新モジュール１３４が更新モジュール１３６（仮不正更新モジュール群３０１２に含まれる）を正常と判定（３０２７）しているので（ステップＳ９０１５）、仮不正更新モジュール群３０１２内の更新モジュール１３６を正常と判定する更新モジュール１３４を仮不正更新モジュール群に含める（ステップＳ９０１６）。この結果、新たな仮不正更新モジュール群３０１３が生成される。
【０２７０】
次に、抽出結果判断部６７６は、ステップＳ９０１０で不正な更新モジュールと特定された不正な更新モジュール１３１〜１３３と、仮不正更新モジュール群（更新モジュール１３４〜１３７）以外の更新モジュールが存在するか判断する（ステップＳ９０１７）。図４８によると、全ての更新モジュールが不正な更新モジュールまたは仮不正更新モジュールであるので（ステップＳ９０１７でＮ）、抽出結果判断部６７６は、更新モジュール１３７が正常な更新モジュールであると特定する（ステップＳ９０１８）。
【０２７１】
このようにして、更新モジュールの中から正常である更新モジュール１３７を論理的な検証方法を用いて効果的に特定できるので、特定した正常である更新モジュール１３７を用いて、保護制御モジュールを安全に更新できる。
（ｂ）正常モジュール特定の第２の例
次に、図４９に示す例を用いて、正常モジュール特定処理の一例について説明する。
【０２７２】
図４９に示すように、機器１００が有する更新モジュール群１３０は、更新モジュール１３１〜１３７を含む。
更新モジュール１３１は、更新モジュール１３２及び１３４を監視し、その監視結果は、それぞれ、正常（３０５２）及び不正であり、更新モジュール１３２は、更新モジュール１３１、１３３及び１３５を監視し、その監視結果は、それぞれ、正常（３０５１）、正常（３０５３）及び正常（３０６０）であり、更新モジュール１３３は、更新モジュール１３１、１３５及び１３６を監視し、その監視結果は、それぞれ、正常（３０５４）、正常（３０５９）及び正常（３０５５）であり、更新モジュール１３４は、更新モジュール１３６を監視し、その監視結果は、正常（３０５６）であり、更新モジュール１３５は、更新モジュール１３７を監視し、その監視結果は、正常（３０５８）であり、更新モジュール１３６は、更新モジュール１３７を監視し、その監視結果は、正常（３０５７）であり、更新モジュール１３７は、更新モジュール１３３を監視し、その監視結果は、正常であるとする。
【０２７３】
また、更新モジュール１３１は、更新モジュール１３２を監視し（３０６１）、更新モジュール１３２は、更新モジュール１３３を監視し（３０６２）、更新モジュール１３３は、更新モジュール１３１を監視（３０６３）しているものとする。従って、循環監視パターン３０４１が存在する。
まず、循環監視パターン判定部６７７は、循環監視パターンが存在するか判断し（ステップＳ９００５）、監視する同一モジュールの監視結果が一致しているため（ステップＳ９００９でＹ）、ステップＳ９０１４へ制御を移す。図４９によると、循環監視パターン３０４１が存在し、循環監視パターン３０４１における監視結果は、全て正常（３０５２、３０５３、３０５４）であり、更新モジュール１３２による更新モジュール１３１の監視結果（３０５１）と、更新モジュール１３３による更新モジュール１３１の監視結果（３０５４）とが一致するからである。また、その他に矛盾する監視結果が存在しないからである。
【０２７４】
次に、不正モジュール仮定部６７３は、更新モジュール１３７を選択し、更新モジュール１３７を不正な更新モジュールと仮定し、更新モジュール１３７を識別する識別番号を仮不正更新モジュール群３０４２に含める（ステップＳ９０１４）。
次に、図４９によると、不正と判定されていない更新モジュール１３５及び１３６が更新モジュール１３７を正常と判定（３０５８、３０５７）しているので（ステップＳ９０１５）、仮不正更新モジュール群３０４２内の更新モジュール１３７を正常と判定する更新モジュール１３５、更新モジュール１３６を仮不正更新モジュール群に含める（ステップＳ９０１６）。この結果、新たな仮不正更新モジュール群３０４３が生成される。また、図４９によると、不正と判定されていない更新モジュール１３４が更新モジュール１３６（仮不正更新モジュール群３０４３に含まれる）を正常と判定（３０５６）しているので、また、不正と判定されていない更新モジュール１３２が更新モジュール１３５（仮不正更新モジュール群３０４３に含まれる）を正常と判定（３０６０）しているので、（ステップＳ９０１５）、仮不正更新モジュール群３０４３内の更新モジュール１３６及び１３５をそれぞれ正常と判定する更新モジュール１３４及び１３２を仮不正更新モジュール群に含める（ステップＳ９０１６）。この結果、新たな仮不正更新モジュール群３０４４が生成される。さらに、不正と判定されていない更新モジュール１３１が更新モジュール１３２（仮不正更新モジュール群３０４４に含まれる）を正常と判定（３０５２）しているので、（ステップＳ９０１５）、仮不正更新モジュール群３０４４内の更新モジュール１３２を正常と判定する更新モジュール１３１を仮不正更新モジュール群に含める（ステップＳ９０１６）。この結果、新たな仮不正更新モジュール群３０４５が生成される。
【０２７５】
こうして、更新モジュール１３１〜１３７の全てが仮不正更新モジュール群３０４５に含まれることになる。従って、仮不正更新モジュール群以外の更新モジュールが存在しないので（ステップＳ９０１７でＮ）、抽出結果判断部６７６は、更新モジュール１３７が正常な更新モジュールであると特定する（ステップＳ９０１８）。
このようにして、複数の更新モジュールの中から正常である更新モジュール１３７を論理的な検証方法を用いて効果的に特定できるので、特定した更新モジュール１３７を用いて保護制御モジュールを安全に更新できる。
４．実施の形態４
ここでは、別の実施の形態について説明する。
４．１  実施の形態３について
上記の実施の形態３のソフトウェア更新システム１０ｃｂでは、更新処理における更新モジュールの選択において、改竄されていない正常な更新モジュールを特定している。
【０２７６】
しかし、ソフトウェア更新システム１０ｃｂにおける正常モジュールを特定する方法においては、正常モジュールの特定を妨害する更新モジュールが存在すると、正常な更新モジュールが特定できないケースがある。
ここで、正常モジュールの特定を妨害する更新モジュールの一例は、その更新モジュールによる監視結果の全てを不正と判定するものである。図５７にその一例を示す。
【０２７７】
図５７は、更新モジュール群１３０に含まれる更新モジュール１３１〜１３７による監視の結果を示している。
この図においては、更新モジュール１３２は、更新モジュール１３１、１３３及び１３５を監視しており、更新モジュール１３２による更新モジュール１３１、１３３及び１３５に対する監視結果は、全て不正（４００１、４００３、４００４）である。
【０２７８】
また、更新モジュール１３１は、更新モジュール１３４を監視し、その監視の結果は、正常（４００６）であり、更新モジュール１３３は、更新モジュール１３１、１３５及び１３６を監視し、その監視の結果は、それぞれ、正常（４００５、４０１２及び４００８）であり、更新モジュール１３４は、更新モジュール１３６を監視し、その監視の結果は、正常（４００７）であり、更新モジュール１３５は、更新モジュール１３７を監視し、その監視の結果は、正常（４０１１）であり、更新モジュール１３６は、更新モジュール１３７を監視し、その監視の結果は、正常（４０１０）であり、更新モジュール１３７は、更新モジュール１３３を監視し、その監視の結果は、正常（４００９）である。
【０２７９】
このケースにおいて、上記の各実施の形態において説明した方法によって、不正モジュールを特定しようとしても、各更新モジュールの監視結果には、矛盾が生じないため、いずれの更新モジュールも不正な更新モジュールと特定されない。
また、このケースにおいて、実施の形態３のソフトウェア更新システム１０ｃｂにおいて説明した正常モジュールの特定処理を用いて、図５０のステップＳ９００１からＳ９０１３までの手順を適用しても、いずれの更新モジュールも不正な更新モジュールと判定されない。
【０２８０】
次に、ステップＳ９０１４の手順を適用して、１個の更新モジュールを選択し、ステップＳ９０１５からＳ９０１６の手順を適用して、不正と仮定した更新モジュールを仮不正更新モジュール群に追加する。この場合、図５７に示す監視の結果によると、更新モジュール１３２は仮不正更新モジュール群に含まれない。これは、更新モジュール１３２が更新モジュール１３１、１３３、１３５への監視を全て不正（４００１、４００３、４００４）と判定しているためである。この結果、図５７に示す更新モジュール１３１〜１３７を、仮不正更新モジュール群及び不正な更新モジュール群のみに分けることができない。このため、実施の形態３のソフトウェア更新システム１０ｃｂにおいて説明した正常モジュールの特定処理を適用できず、いずれの更新モジュールも正常な更新モジュールと特定できない。
【０２８１】
このように、ソフトウェア更新システム１０ｃｂにおける正常モジュールを特定する方法を用いても、更新モジュール１３２は、不正な更新モジュールと判定されないし、また、不正仮更新モジュール群に分類されない。このため、このケースに対して、ソフトウェア更新システム１０ｃｂにおける正常モジュールを特定する方式を適用して、正常モジュールを特定することができない。
【０２８２】
正常な更新モジュールを特定するためには、監視パターンを変更して、新たに監視の結果を受け取り、再度正常モジュール特定処理を行えばよいかもしれない。しかし、監視パターンを変更して再度監視を行ったとしても、更新モジュール１３２が対象の更新モジュールへの監視において全て不正と判定した場合には、同様に正常な更新モジュールが特定できない。
【０２８３】
このように、監視パターンを更新して再度監視を行っても、常に対象の更新モジュールへの監視結果を全て不正とする更新モジュールは、改竄されており、正常モジュールの特定を妨害する更新モジュール（以下、妨害モジュールと呼ぶ。）である。
４．２  改竄監視システム１０ｄａ
改竄監視システム１０ｄａでは、上記の問題を解決するために、全ての監視対象の監視モジュールに対して、不正と判定する監視モジュール（以下、妨害候補モジュールと呼ぶ。）を抽出し、抽出した妨害候補モジュールの中から、真の妨害モジュールを特定し、特定した妨害モジュールを予め排除する。このように、改竄され不正動作を行っている妨害モジュールを予め排除することにより、残りの複数の監視モジュールの中から正常である監視モジュールを効果的に特定することができ、特定した正常な監視モジュールを有効に用いることができる。
【０２８４】
別の実施の形態としての改竄監視システム１０ｄａについて、図７８に示す構成図を用いて、説明する。
改竄監視システム１０ｄａは、この図に示すように、情報セキュリティ装置１００ｄａ及び管理装置２００ｄａから構成されている。
情報セキュリティ装置１００ｄａは、改竄を監視する複数の監視モジュール１３１ｄａ、１３２ｄａ、１３３ｄａ、１３４ｄａを有する。
【０２８５】
管理装置２００ｄａは、情報セキュリティ装置１００ｄａから、各監視モジュールによる他の監視モジュールに対する監視結果を受信する受信部２４０ｄａと、受信した前記監視結果を用いて、前記監視モジュールのうちから、全ての監視対象の監視モジュールに対して改竄されていると判定する妨害候補モジュールを抽出する判定部６８３ｄａと、複数の妨害候補モジュールが検出された場合に、複数の妨害候補モジュール間で、相互に相手を監視するように、新たな監視パターンを生成し、生成した新たな監視パターンを前記情報セキュリティ装置に対して送信し、新たな監視パターンに置き換えさせる更新部２５０ｄａとから構成されている。受信部２４０ｄａは、さらに、情報セキュリティ装置１００ｄａから新たな監視パターンによる新たな監視結果を受信する。判定部６８３ｄａは、さらに、受信した新たな監視結果を用いて、前記妨害候補モジュールから、相互に正常と判定し、他の妨害候補モジュールに対して不正と判定する２個の妨害候補モジュールを除く他の妨害候補モジュールを妨害モジュールと特定する。
【０２８６】
このようにして、妨害モジュールを特定することができるので、特定された妨害モジュールを無効化すればよい。
ここで、判定部６８３ｄａは、さらに、受信した新たな監視結果を用いて、２個の妨害候補モジュールのうち、第１の妨害候補モジュールが第２の妨害候補モジュールに対して正常と判定し、第２の妨害候補モジュールが第１の妨害候補モジュールに対して不正と判定する場合に、第１の妨害候補モジュールを、改竄された不正な更新モジュールであると特定してもよい。
４．３  ソフトウェア更新システム１０ｄｂ
別の実施の形態としてのソフトウェア更新システム１０ｄｂについて、説明する。
【０２８７】
ソフトウェア更新システム１０ｄｂでは、実施の形態３における問題を解決するために、全ての監視対象の更新モジュールに対して、不正と判定する更新モジュール（以下、妨害候補モジュールと呼ぶ。）を抽出し、抽出した妨害候補モジュールの中から、真の妨害モジュールを特定し、特定した妨害モジュールを予め排除する。このように、改竄され不正動作を行っている妨害モジュールを予め排除することにより、残りの複数の更新モジュールの中から正常である更新モジュールを効果的に特定することができ、特定した正常な更新モジュールを用いて、保護制御モジュールを安全に更新できる。
【０２８８】
なお、ソフトウェア更新システム１０ｄｂでは、実施の形態２及び実施の形態３と同様に更新モジュールが７個の場合について、説明する。しかし、更新モジュールは、８個以上であってもよいし、６個以下であってもよい。
（１）ソフトウェア更新システム１０ｄｂの構成
ソフトウェア更新システム１０ｄｂは、図５３に示すように、更新サーバ２００ｄｂ及び機器１００ｄｂから構成されている。機器１００ｄｂは、実施の形態１の機器１００と同一の構成を有している。また、更新サーバ２００ｄｂは、実施の形態１の更新サーバ２００と類似の構成を有しており、判断部２１０ｄｂ、更新用ソフトウェア配布部２２０、モジュール無効化部２３０、通信部２４０及び監視パターン更新部２５０から構成されている。
【０２８９】
更新用ソフトウェア配布部２２０、モジュール無効化部２３０及び通信部２４０は、更新サーバ２００が有する更新用ソフトウェア配布部２２０、モジュール無効化部２３０及び通信部２４０と同一である。判断部２１０ｄｂは、ソフトウェア更新システム１０ｃｂの更新サーバ２００ｃｂが有する判断部２１０ｃｂと類似の構成を有している。
ここでは、判断部２１０ｄｂ及び監視パターン更新部２５０を中心として説明する。
（２）監視パターン更新部２５０の構成
監視パターン更新部２５０は、機器１００ｄｂ内部の更新モジュール群１３０の監視パターンを更新する場合に、判断部２１０ｄｂによる監視パターン更新の指示に応じて、更新モジュール群１３０内の各更新モジュールの監視パターンを更新するために、更新のための監視パターンを生成し、生成した監視パターンを各更新モジュールへ送信する。
【０２９０】
監視パターン更新部２５０は、図５４に示すように、受信部９０１、送信部９０２、監視パターン生成部９０３、監視パターン分割部９０４及び制御部９０５から構成されている。
（ａ）受信部９０１
受信部９０１は、判断部２１０ｄｂから、監視パターンの生成を示す生成指示及び指示した時点での更新モジュールリストを受信する。更新モジュールリストは、機器１００ｄｂが有する更新モジュール群１３０に含まれる全ての更新モジュールをそれぞれ識別する識別番号を含んでいる。また、妨害候補モジュールが存在する場合には、全ての妨害候補モジュールを識別する識別番号を受信する。
【０２９１】
受信部９０１は、受信した監視パターンの生成指示を制御部９０５へ出力する。また、受信した更新モジュールリストを、制御部９０５を介して、監視パターン生成部９０３へ出力する。また、妨害候補モジュールを識別する識別番号を受信した場合には、受信した識別番号を、制御部９０５を介して、監視パターン生成部９０３へ出力する。
（ｂ）監視パターン生成部９０３
監視パターン生成部９０３は、受信部９０１から、制御部９０５を介して、更新モジュールリストを受信する。また、妨害候補モジュールが存在する場合には、全ての妨害候補モジュールを識別する識別番号を受信する。
【０２９２】
更新モジュールリストを受信すると、監視パターン生成部９０３は、受信した更新モジュールリストを用いて、どの更新モジュールがどの更新モジュールを監視するかを決定し、機器１００ｄｂが有する更新モジュール群１３０における全体の監視パターンを生成する。
特に、監視パターン生成部９０３は、受信した妨害候補モジュールを識別する識別番号を用いて、複数の妨害候補モジュールの各々が、他の全ての妨害候補モジュールを監視するように、つまり、複数の妨害候補モジュール間での相互監視をするように、全体の監視パターンを生成する。
【０２９３】
なお、複数の妨害候補モジュール間での相互監視の監視パターンの具体例については、後述する。
なお、監視パターン生成部９０３は、全体の監視パターンとして、例えば、すべての更新モジュールが他のすべての更新モジュールを監視するように、決定してもよい。
監視パターン生成部９０３は、生成した全体の監視パターンを監視パターン分割部９０４へ出力する。
（ｃ）監視パターン分割部９０４
監視パターン分割部９０４は、監視パターン生成部９０３から、全体の監視パターンを受信する。
【０２９４】
全体の監視パターンを受信すると、監視パターン分割部９０４は、受信した全体の監視パターンを、それぞれの更新モジュール毎の監視パターンに分割する。次に、分割して得られた更新モジュール毎の監視パターンを、更新用の監視パターンとして、制御部９０５、送信部９０２、通信部２４０及びネットワーク５を介して、機器１００ｄｂのそれぞれの更新モジュールに送信する。
（ｄ）送信部９０２
送信部９０２は、通信部２４０及びネットワーク５を介して、機器１００ｄｂへ更新用の更新モジュール毎の監視パターンを送信する。また、判断部２１０ｄｂへ更新用の監視パターンの生成及び送信の終了を通知する。
（ｅ）制御部９０５
制御部９０５は、受信部９０１から、監視パターンの生成指示を受信する。
【０２９５】
監視パターンの生成指示を受信すると、制御部９０５は、監視パターン生成部９０３及び監視パターン分割部９０４に対して、機器１００ｄｂが有する更新モジュール群１３０における全体の監視パターンを生成し、更新用の更新モジュール毎の監視パターンを生成し、機器１００ｄｂへ更新用の更新モジュール毎の監視パターンを送信して、機器１００ｄｂにおいて監視パターンの更新処理をさせるように、制御する。
（３）判断部２１０ｄｂの構成
判断部２１０ｄｂは、図５５に示すように、受信部６０１、送信部６０２、指示生成部６０３、モジュール特定部６０４ｄｂ及び循環検出部６０６から構成されている。また、モジュール特定部６０４ｄｂは、不正モジュール特定部６０５、正常モジュール特定部６０７及び妨害モジュール特定部６０８から構成されている。
【０２９６】
受信部６０１、送信部６０２、指示生成部６０３及び循環検出部６０６は、それぞれ、ソフトウェア更新システム１０ｃｂの更新サーバ２００ｃｂの判断部２１０ｃｂが有する受信部６０１、送信部６０２、指示生成部６０３及び循環検出部６０６と同一である。
指示生成部６０３は、監視パターンの生成を示す生成指示を、送信部６０２を介して、監視パターン更新部２５０へ送信する。
【０２９７】
また、不正モジュール特定部６０５及び正常モジュール特定部６０７は、それぞれ、ソフトウェア更新システム１０ｃｂの更新サーバ２００ｃｂの判断部２１０ｃｂのモジュール特定部６０４ｃｂが有する不正モジュール特定部６０５及び正常モジュール特定部６０７と同一である。
次に、妨害モジュール特定部６０８について、説明する。
（４）妨害モジュール特定部６０８の構成
妨害モジュール特定部６０８は、改竄され、不正動作を行っている可能性のある更新モジュールがいるか否かを判断する。
【０２９８】
妨害モジュール特定部６０８は、図５６に示すように、特定指示受信部６８１、特定結果送信部６８２、検証結果判定部６８３、監視パターン更新指示生成部６８４及び検証結果受信部６８５から構成されている。
（ａ）特定指示受信部６８１
特定指示受信部６８１は、指示生成部６０３から、正常モジュールの特定を妨害する更新モジュールを特定する指示を示す妨害特定指示及び機器１００ｄｂにおける更新モジュールの監視の結果を受信し、受信した監視の結果を検証結果判定部６８３へ送信する。
（ｂ）検証結果受信部６８５
検証結果受信部６８５は、指示生成部６０３から、機器１００ｄｂにおいて、更新モジュール群１３０の監視パターンが更新された後の監視の結果を受信し、受信した更新後の監視の結果を検証結果判定部６８３へ送信する。
（ｃ）検証結果判定部６８３
検証結果判定部６８３は、特定指示受信部６８１から監視の結果を受信し、受信した監視の結果を用いて、正常モジュールの特定を妨害する更新モジュールが存在する可能性があるか否かを判断する。つまり、妨害候補モジュールが存在するか否かを判断する。妨害候補モジュールは、その全ての監視対象の更新モジュールに対して、不正と判断する更新モジュールである。なお、妨害候補モジュールが存在するか否かの判断の詳細ついては、後述する。
【０２９９】
妨害候補モジュールが存在しないと判断した場合、検証結果判定部６８３は、妨害候補モジュールが存在しない旨を特定結果送信部６８２へ送信する。
妨害候補モジュールが存在すると判断した場合、検証結果判定部６８３は、妨害候補モジュールが、真に妨害モジュールであるか否かを判断するため、監視パターン更新指示生成部６８４へ、全ての候補妨害モジュールの識別番号を送信し、監視パターンの更新を依頼する。これは、妨害候補モジュールが、不正に改竄され正常モジュールの特定を妨害しているのか、又は、正常な更新モジュールが不正な更新モジュールに対して、正常に監視しているのかを判断するためである。詳細については、後述する。
【０３００】
機器１００ｄｂにおいて、更新モジュール群１３０の監視パターンが更新された後、検証結果判定部６８３は、検証結果受信部６８５から、監視パターンの更新後の監視の結果を受信し、不正の可能性があるとされた更新モジュールが、不正な更新モジュールであるか否かを判断する。判断した結果を特定結果送信部６８２に送信し、更新モジュール群１３０の監視パターンを更新するため、監視パターン更新指示生成部６８４へ監視パターンの更新を依頼する。
（ｄ）監視パターン更新指示生成部６８４
監視パターン更新指示生成部６８４は、検証結果判定部６８３から、不正の可能性があるとされた更新モジュールの識別情報と監視パターンの更新依頼を受信し、受信した識別情報により識別される各更新モジュールが、自更新モジュール以外の全ての更新モジュールを監視する監視パターンになるように、指示生成部６０３へ監視パターンの更新指示を送信する。また、監視パターンの更新の依頼のみを受信した場合は、指示生成部６０３へ監視パターンの更新指示を送信する。
（ｅ）特定結果送信部６８２
特定結果送信部６８２は、検証結果判定部６８３から正常モジュールの特定を妨害する更新モジュールの特定結果を受信し、特定結果を指示生成部６０３に送信する。
（４）ソフトウェア更新システム１０ｄｂにおける動作
ここでは、ソフトウェア更新システム１０ｄｂにおける動作について、図５８に示す動作図を用いて、説明する。特に、妨害モジュール特定処理から正常モジュール特定処理までの処理の遷移について説明する。
【０３０１】
正常な更新モジュールを特定するために、更新モジュール群１３０内の複数の更新モジュールが相互に監視を行い、機器１００ｄｂは、監視の結果を更新サーバ２００ｄｂへ送信する。更新サーバ２００ｄｂは、監視の結果を受信し、監視対象の全ての更新モジュールへの監視結果を全て不正とする更新モジュール（上述したように、このような更新モジュールを妨害候補モジュールと呼ぶ。）が存在するか否かを判断する（ステップＳ１０００１）。妨害候補モジュールが存在する場合に、更新サーバ２００ｄｂは、更新モジュール群１３０から、全ての妨害候補モジュールを抽出する（ステップＳ１０００２）。次に、更新サーバ２００ｄｂは、抽出した妨害候補モジュールが妨害モジュールであるか否かを判断するため、各妨害候補モジュールが他の全ての妨害候補モジュールを監視するように、新たな監視パターンを生成する。次に、機器１００ｄｂの各更新モジュールに対して新たな監視パターンを送信し、新たな監視パターンに更新するように、機器１００ｄｂを制御する（ステップＳ１０００３）。
【０３０２】
機器１００ｄｂの各更新モジュールは、新たな監視パターンを用いて、相互に監視を行う。特に、各妨害候補モジュールは、他の全ての妨害候補モジュールの監視を行う。更新サーバ２００ｄｂは、機器１００ｄｂから、新たな監視パターンによる監視の結果を受信し、受信した監視の結果を用いて、妨害候補モジュールが妨害モジュールであるか否かを判断する。妨害モジュールは、常に、監視対象の全ての更新モジュールに対して不正と判定するが、正常な更新モジュールは、正常な更新モジュールに対して正常と判定する。このため、妨害候補モジュール群内に正常な更新モジュールが複数存在している場合、正常な妨害候補モジュール間での相互監視の結果は正常となる。一方、妨害候補モジュールによる、正常な妨害候補モジュール以外の妨害候補モジュールへの監視結果は全て不正となる。よって、妨害候補モジュールが妨害モジュールであるかの判断においては、（i ）２個の妨害候補モジュール間の相互監視の結果が正常であり、さらに、（ii）相互に正常と判定する当該２個の妨害候補モジュールにより、当該２個の妨害候補モジュール以外の妨害候補モジュールへの監視において、不正と判定する場合、当該２個の妨害候補モジュールは、妨害モジュールではないと決定する。この条件を満たさない妨害候補モジュールは、自妨害候補モジュール以外の妨害候補モジュールに対して、常に不正と判定するため、妨害モジュールと特定する（ステップＳ１０００４）。
【０３０３】
更新サーバ２００ｄｂは、上記の条件を満たす妨害候補モジュールが存在する場合に、条件を満たさない妨害候補モジュールを抽出して、妨害モジュールと特定し（ステップＳ１０００５）、モジュール無効化部２３０は、特定した妨害モジュールを無効化するように、機器１００ｄｂに対して指示を出力する（ステップＳ１０００６）。
また、更新サーバ２００ｄｂのモジュール無効化部２３０は、上記の条件を満たす妨害候補モジュールが存在しない場合には、全ての妨害候補モジュールが妨害モジュールであるので、特定した妨害モジュールを無効化するように、機器１００ｄｂに対して指示を出力する（ステップＳ１０００６）。
【０３０４】
次に、更新サーバ２００ｄｂは、全ての更新モジュールの監視パターンを更新し（ステップＳ１０００７）、更新モジュール全体で相互監視を行う（ステップＳ１０００１）。更新サーバ２００ｄｂは、更新モジュール群１３０による監視の結果を受信し、妨害候補モジュールが存在しない場合には、正常モジュール特定処理を実行し（ステップＳ１０００８）、正常な更新モジュールを特定する（ステップＳ１０００９）。
【０３０５】
以上説明したように、正常モジュールの特定を妨害する妨害モジュールを無効化して排除することにより、正常モジュール特定処理において、正常な更新モジュールを特定するための効率が向上する。
上記において、ステップＳ１０００１からステップＳ１０００６までが妨害モジュール特定処理である。
【０３０６】
（５）妨害モジュール特定処理及び正常モジュール特定処理のシーケンス
ここでは、妨害モジュール特定処理及び正常モジュール特定処理のシーケンスについて、図５９〜図６０に示すシーケンス図を用いて説明する。
判断部２１０ｄｂの指示生成部６０３は、監視パターン更新部２５０へ監視パターンの生成指示を送信し、監視パターン更新部２５０は、監視パターン生成指示を受信する（ステップＳ１１００１）。監視パターン更新部２５０の監視パターン生成部９０３は、全体の新たな監視パターンを生成し、監視パターン分割部９０４は、全体の新たな監視パターンを更新モジュール毎の監視パターンに分割する（ステップＳ１１００２）。監視パターン更新部２５０は、通信部２４０及びネットワーク５を介して、機器１００ｄｂの各更新モジュールへ、更新モジュール毎の監視パターンを送信し、機器１００ｄｂの更新モジュール群１３０内の各更新モジュールは、更新モジュール毎の監視パターンを受信する（ステップＳ１１００３）。
【０３０７】
更新モジュール群１３０内の各更新モジュールは、古い監視パターンを受信した新たな監視パターンに置き換えることにより、監視パターンを更新する（ステップＳ１１００４）。新たな監視パターンへ更新後、更新モジュール群１３０内の各更新モジュールは、新たな監視パターンにより、監視処理を実行し、実施の形態１の相互監視処理と同様に監視パターンに従って、改竄検出処理を行う（ステップＳ１１００５）。なお、実施の形態１の改竄された更新モジュールがあるか否かの判断（図１９のステップＳ５００４）は行わない。次に、機器１００ｄｂは、監視の結果を、ネットワーク５及び通信部２４０を介して、判断部２１０ｄｂへ送信し、判断部２１０ｄｂは、監視の結果を受信する（ステップＳ１１００６）。
【０３０８】
判断部２１０ｄｂは、妨害モジュールの特定処理を行う（ステップＳ１１００７）。妨害モジュール特定処理の詳細については、後述する。妨害モジュール処理の特定において、妨害モジュールを特定した場合、判断部２１０ｄｂは、特定した妨害モジュールを識別する識別番号とともに、モジュール無効化部２３０へ無効化指示を送信する（ステップＳ１１００８）。モジュール無効化部２３０は、特定した妨害モジュールを識別する識別番号とともに、更新モジュール群１３０内の更新モジュールへ無効化の依頼を送信する（ステップＳ１１００９）。無効化の依頼を受信した更新モジュールは、アクセス制御モジュール１４０と連携して、受信した妨害モジュールを識別する識別番号により、妨害モジュールを無効化する（ステップＳ１１０１０）。なお、無効化処理の詳細は、実施の形態１の無効化処理と同様であるので省略する。妨害モジュールの特定処理において、判断部２１０ｄｂは、監視パターンの生成指示を送信し、監視パターン更新部２５０は、監視パターンの生成指示を受信する（ステップＳ１１０１１）。
【０３０９】
監視パターン更新部２５０の監視パターン生成部９０３は、受信した監視パターンの生成指示に基づいて、全体の新たな監視パターンを生成し、監視パターン分割部９０４は、全体の新たな監視パターンを更新モジュール毎の監視パターンに分割する（ステップＳ１１０１２）。監視パターン更新部２５０は、通信部２４０及びネットワーク５を介して、機器１００ｄｂの各更新モジュールへ、更新モジュール毎の監視パターンを送信し、機器１００ｄｂの更新モジュール群１３０内の各更新モジュールは、更新モジュール毎の監視パターンを受信する（ステップＳ１１０１３）。
【０３１０】
機器１００ｄｂの更新モジュール群１３０内の各更新モジュールは、新しい監視パターンへ更新する（ステップＳ１１０１４）。新しい監視パターンへ更新後、各更新モジュールは、相互監視処理を実行する（ステップＳ１１０１５）。機器１００ｄｂは、監視の結果を送信し、判断部２１０ｄｂは、監視の結果を受信する（ステップＳ１１０１６）。
判断部２１０ｄｂは、正常モジュールの特定処理を行う（ステップＳ１１０１７）。なお、正常モジュールの特定処理の詳細は、実施の形態３と同様であるので省略する。
（６）相互監視の監視パターンの一例
相互監視の監視パターンの一例について、図６５に示す相互監視の監視パターンの例を用いて、説明する。
【０３１１】
４個の妨害候補モジュールにより相互に監視をする場合の例を図６５に示している。この図に示すように、更新モジュール１３１、１３２、１３６及び１３７が、それぞれ、妨害候補モジュールとして抽出されたものとする。
また、更新モジュール１３１、１３２、１３６及び１３７は、それぞれ、妨害候補モジュールとして抽出されているので、監視パターン更新部２５０により、更新モジュール１３１及び１３２は、相互に監視をし、更新モジュール１３２及び１３７は、相互に監視をし、更新モジュール１３７及び１３６は、相互に監視をし、更新モジュール１３６及び１３１は、相互に監視をし、更新モジュール１３７及び１３１は、相互に監視をするように、更新モジュール毎の監視パターンが生成されている。また、監視パターン更新部２５０により、更新モジュール毎の監視パターンが、更新モジュール１３１、１３２、１３６及び１３７に送信され、更新モジュール１３１、１３２、１３６及び１３７は、新たに受信した監視パターンにより、古い監視パターンを変更し、新たな監視パターンにより、相互の監視を行うものとする。
（７）相互監視の監視パターンによる相互監視の結果の例
図６５に示す相互監視の監視パターンの例を用いた場合の相互監視の結果の例について、図６６〜図６９を用いて説明する。
【０３１２】
なお、図６５において説明したように、一例として、妨害候補モジュールである更新モジュール１３１、１３２、１３６及び１３７が、それぞれ、相互に監視している。
（ａ）相互監視の結果の第１の例
図６５に示す相互監視の監視パターンの例を用いた場合の相互監視の結果の第１の例を図６６に示す。
【０３１３】
図６６に示す第１の例においては、全ての監視の結果が不正である。つまり、更新モジュール１３１、１３２、１３６及び１３７は、それぞれ、監視相手の更新モジュールを全て不正と判定している。
（ｂ）相互監視の結果の第２の例
図６５に示す相互監視の監視パターンの例を用いた場合の相互監視の結果の第２の例を図６７に示す。
【０３１４】
図６７に示す第２の例においては、更新モジュール１３１による更新モジュール１３２に対する監視の結果（４０５１）を除いて、その他の全ての監視の結果が不正である。
つまり、更新モジュール１３１は、更新モジュール１３２に対して正常（４０５１）と判定し、更新モジュール１３２は、更新モジュール１３１に対して不正と判定している。また、更新モジュール１３１及び１３７の間の相互監視、更新モジュール１３２及び１３７の間の相互監視、更新モジュール１３２及び１３６の間の相互監視、更新モジュール１３１及び１３６の間の相互監視及び更新モジュール１３６及び１３７の間の相互監視において、不正と判定している。
（ｃ）相互監視の結果の第３の例
図６５に示す相互監視の監視パターンの例を用いた場合の相互監視の結果の第３の例を図６８に示す。
【０３１５】
図６８に示す第３の例においては、更新モジュール１３１による更新モジュール１３２に対する監視の結果（４０６１）、更新モジュール１３１による更新モジュール１３７に対する監視の結果（４０６３）及び更新モジュール１３７による更新モジュール１３１に対する監視の結果（４０６２）を除いて、その他の全ての監視の結果が不正である。
つまり、更新モジュール１３１は、更新モジュール１３２に対して正常（４０６１）と判定し、更新モジュール１３２は、更新モジュール１３１に対して不正と判定している。また、更新モジュール１３１は、更新モジュール１３７に対して正常（４０６３）と判定し、更新モジュール１３７は、更新モジュール１３１に対して正常（４０６２）と判定している。さらに、更新モジュール１３２及び１３７の間の相互監視、更新モジュール１３２及び１３６の間の相互監視、更新モジュール１３１及び１３６の間の相互監視及び更新モジュール１３６及び１３７の間の相互監視において、不正と判定している。
（ｄ）相互監視の結果の第４の例
図６５に示す相互監視の監視パターンの例を用いた場合の相互監視の結果の第４の例を図６９に示す。
【０３１６】
図６９に示す第４の例においては、更新モジュール１３１による更新モジュール１３７に対する監視の結果（４０７２）及び更新モジュール１３７による更新モジュール１３１に対する監視の結果（４０７２）を除いて、その他の全ての監視の結果が不正である。
つまり、更新モジュール１３１は、更新モジュール１３７に対して正常（４０７２）と判定し、更新モジュール１３７は、更新モジュール１３１に対して正常（４０７１）と判定している。また、更新モジュール１３１及び１３２の間の相互監視、更新モジュール１３２及び１３７の間の相互監視、更新モジュール１３２及び１３６の間の相互監視、更新モジュール１３１及び１３６の間の相互監視及び更新モジュール１３６及び１３７の間の相互監視において、不正と判定している。
（８）妨害モジュールの特定処理の詳細な動作
次に、妨害モジュールの特定処理の動作について、図６１〜図６３に示すフローチャートを用いて、説明する。
【０３１７】
判断部２１０ｄｂは、以下に示すように、更新モジュール群１３０の各更新モジュールによる監視の結果をもとに、妨害モジュールの特定処理を行う。
検証結果判定部６８３は、全ての監視対象の更新モジュールに対する監視結果を全て不正と判定する更新モジュールが存在するか否か、言い換えると、妨害候補モジュールが存在するか否かを判断する（ステップＳ１２００１）。
【０３１８】
妨害候補モジュールが存在しない場合には（ステップＳ１２００１でＮ）、検証結果判定部６８３は、妨害モジュールの特定処理を終了する。
妨害候補モジュールが存在する場合には（ステップＳ１２００１でＹ）、検証結果判定部６８３は、全ての妨害候補モジュールをそれぞれ識別する識別番号を監視パターン更新部２５０へ出力する。監視パターン更新部２５０は、受信した全ての妨害候補モジュールをそれぞれ識別する識別番号を用いて、全ての妨害候補モジュールが相互に監視をするように、更新モジュール毎の監視パターンを生成する（ステップＳ１２００２）。
【０３１９】
一例として、更新モジュール群１３０のうちの、更新モジュール１３１、１３２、１３６及び１３７が、それぞれ、全ての監視の対象である更新モジュールに対して、不正と判定しているなら、更新モジュール１３１、１３２、１３６及び１３７は、それぞれ、妨害候補モジュールであり、更新モジュール１３１、１３２、１３６及び１３７が、相互に監視するように、監視パターンが生成される。この場合の監視パターンを図６５に示している。
【０３２０】
次に、機器１００ｄｂが有する更新モジュールが相互監視を実行するように、生成した監視パターンを機器１００ｄｂへ送信し、機器１００ｄｂが有する更新モジュールに相互監視を実行させる。機器１００ｄｂは、監視パターンを受信する。更新モジュール群１３０の各更新モジュールは、受信した監視パターンにより、古い監視パターンを更新し、新たに更新された監視パターンを用いて、相互に監視を行う（ステップＳ１２００３）。機器１００ｄｂは、その監視の結果を、更新サーバ２００ｄｂへ送信する。更新サーバ２００ｄｂの判断部２１０ｄｂの妨害モジュール特定部６０８の検証結果判定部６８３は、相互監視の結果を受信する（ステップＳ１２００４）。
【０３２１】
次に、検証結果判定部６８３は、妨害候補モジュール間の監視の結果に少なくとも１個の正常が存在するかを判断する（ステップＳ１２００５）。
検証結果判定部６８３は、妨害候補モジュール間の全ての相互監視の結果が全て不正であり、相互監視の結果に全く正常が存在しない場合（ステップＳ１２００５でＮ）には、全ての妨害候補モジュールを妨害モジュールと特定する（ステップＳ１２００６）。図６６に示す例の場合には、妨害候補モジュールである更新モジュール１３１、１３２、１３６及び１３７において、全ての相互監視の結果が全て不正（図６６において、「×」）であり、相互監視の結果に正常（「○」）が存在しないので、検証結果判定部６８３は、更新モジュール１３１、１３２、１３６及び１３７を妨害モジュールと特定する。次に、ステップＳ１２０１１へ制御を移す。
【０３２２】
妨害候補モジュールの監視の結果に少なくとも１個の正常が存在する場合（ステップＳ１２００５でＹ）、検証結果判定部６８３は、さらに、相互に正常と判定する２個の妨害候補モジュールが存在するかを判断する（ステップＳ１２００７）。
図６７、図６８及び図６９に示す例の場合には、それぞれ、妨害候補モジュールの監視の結果に少なくとも１個の正常が存在する。また、図６７に示す例の場合には、相互に正常と判定する２個の妨害候補モジュールは存在しない。さらに、図６８に示す例の場合には、更新モジュール１３１及び１３７は、相互に相手を正常と判定する妨害候補モジュールである。また、図６９に示す例の場合にも、更新モジュール１３１及び１３７は、相互に相手を正常と判定する妨害候補モジュールである。
【０３２３】
従って、図６７に示す例の場合には、ステップＳ１２００７の条件を満たさない。一方、図６８及び図６９に示す例の場合には、ステップＳ１２００７の条件を満たしている。
相互に正常と判定する２個の妨害候補モジュールが存在しないと判断される場合（ステップＳ１２００７でＮ）、図６７の例に示す更新モジュール１３１のように、監視結果を正常（４０５１「○」）と判定する妨害候補モジュールが存在すると、更新モジュール１３１による更新モジュール１３２に対する判定結果は、正常であるが、更新モジュール１３２による更新モジュール１３１に対する判定結果は、不正である。このように、監視結果に矛盾が発生する。よって、検証結果判定部６８３は、更新モジュール１３１を、不正な更新モジュールと特定する。ここで説明したケースは、相互に監視を行う２個の妨害候補モジュールのうち、第１の妨害候補モジュールが、第２の妨害候補モジュールに対して、正常と判定するが、第２の妨害候補モジュールが、第１の妨害候補モジュールに対して、不正と判定する場合である。このような場合に、相手の妨害候補モジュールを正常と判定する妨害候補モジュールを不正な更新モジュールと特定する（ステップＳ１２００８ａ）。
【０３２４】
次に、判断部２１０ｄｂは、不正な更新モジュールと特定した更新モジュールを無効化するため、無効化指示を送信する（ステップＳ１２００８ｂ）。
次に、図６７の例に示す場合において、更新モジュール１３２、１３６及び１３７は、妨害候補モジュールに対する全ての監視結果を不正（「×」）と判定しているため、検証結果判定部６８３は、更新モジュール１３２、１３６及び１３７を妨害モジュールであると特定する。つまり、検証結果判定部６８３は、全ての監視対象の妨害候補モジュールに対する全ての監視結果を不正と判定する妨害候補モジュールを、妨害モジュールと特定する（ステップＳ１２００８ｃ）。
【０３２５】
次に、ステップＳ１２０１１へ制御を移す。
相互に正常と判定する２個の妨害候補モジュールが存在する場合（ステップＳ１２００７でＹ）、検証結果判定部６８３は、さらに、相互に正常（「○」）と判定する妨害候補モジュール群が、監視結果を全て不正とする妨害候補モジュール群の中で、相互に正常（「○」）と判定する妨害候補モジュール群以外の妨害候補モジュールへ不正（「×」）と判定しているかを判断する（ステップＳ１２００９）。相互に正常（「○」）と判定する更新モジュール群が、監視結果を全て不正とする更新モジュール群の中で更新モジュール群以外の更新モジュールへ不正（「×」）と判定している場合（ステップＳ１２００９でＹ）、図６８に示す例の場合のように、更新モジュール１３１と更新モジュール１３７が相互に正常と（「○」）と判定しているが、更新モジュール１３１と更新モジュール１３２の相互監視の結果から、更新モジュール１３１の監視結果に矛盾が発生する（更新モジュール１３２は、更新モジュール１３１を不正と判定し、更新モジュール１３７は、更新モジュール１３１を正常と判定している）。さらに、更新モジュール１３７の監視結果にも矛盾が発生する。よって、更新モジュール１３１と更新モジュール１３７を不正な更新モジュールと特定する（ステップＳ１２０１０ａ）。
【０３２６】
次に、判断部２１０ｄｂは、不正な更新モジュールと特定した更新モジュール１３１と更新モジュール１３７を無効化するため、無効化指示を送信する（ステップＳ１２０１０ｂ）。
次に、検証結果判定部６８３は、更新モジュール１３２及び１３６は、常に全ての監視結果を不正（「×」）と判定しているため、更新モジュール１３２及び１３６を妨害モジュールであると特定する（ステップＳ１２０１０ｃ）。
【０３２７】
次に、検証結果判定部６８３は、妨害候補モジュールが相互に正常（「○」）と判定する妨害候補モジュール群以外の更新モジュールが存在するかを判断する。つまり、妨害モジュールが存在するか否かを判断する（ステップＳ１２０１１）。
図６９に示す例の場合のように、更新モジュール１３１と更新モジュール１３７が相互に正常（「○」）と判定する妨害候補モジュール群であり、それ以外に更新モジュール１３２と更新モジュール１３６が存在する。このとき、更新モジュール１３２と更新モジュール１３６は、常に全ての監視結果を不正（「×」）と判定しているため、検証結果判定部６８３は、妨害モジュールであると特定する。妨害モジュールが存在する場合（ステップＳ１２０１１でＹ）、判断部２１０ｄｂは、妨害モジュールを無効化する指示を送信する（ステップＳ１２０１２）。妨害モジュールが存在しない場合（ステップＳ１２０１１でＮ）又は無効化指示の送信後（ステップＳ１２０１２）、判断部２１０ｄｂは、監視パターン更新部２５０に対して、更新モジュール群１３０全体の新しい監視パターンを生成するように指示し、監視パターン更新部２５０は、更新モジュール群１３０全体の新しい監視パターンを生成し、新たな監視パターンを機器１００ｄｂに対して送信する（ステップＳ１２０１３）。判断部２１０ｄｂは、機器１００ｄｂの更新モジュール群１３０に対して、新しい監視パターンによる相互監視の指示を送信する（ステップＳ１２０１４）。
【０３２８】
以上説明したように、妨害モジュールの特定処理では、監視パターンを変更しても、監視対象の更新モジュールを常に不正（「×」）と判定する更新モジュールを無効化することで、正常な更新モジュールの特定を妨害する更新モジュール（つまり、妨害モジュール）を積極的に排除する。妨害モジュールを排除した後に、正常な更新モジュールを特定し、特定した正常な更新モジュールを用いて、保護制御モジュールの更新を行うことにより、保護制御モジュールを一層効果的に救済でき、システムの安全性を一層高めることができる。
【０３２９】
また、正常な更新モジュールの特定を妨害する更新モジュールを積極的に排除することで、正常な更新モジュールの特定ができない可能性が少なくなり、正常な更新モジュールを特定し、特定した正常な更新モジュールを用いて、保護制御モジュールを可能な限り更新することができる。
なお、上記において、更新モジュールは、監視モジュールであるとしてもよい。
５．その他の変形例
なお、本発明を上記各実施の形態に基づいて説明してきたが、本発明は、上記各実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
（１）上記各実施の形態では、保護制御モジュール１２０を更新するとしているが、これに限定するものではない。
【０３３０】
更新モジュールやアプリケーションプログラム等、保護制御モジュール１２０以外のモジュールを更新するとしてもよい。以下に、更新モジュール１３３を更新する場合を例に挙げ、更新モジュールの更新処理について説明する。
更新モジュールの更新処理では、保護制御モジュールを更新する場合と同様に、更新用ソフトウェア配布部２２０は、更新モジュール１３３を更新するための更新用更新モジュールを複数の鍵を用いて多重に暗号化し、更新モジュール群１３０に含まれる更新モジュール（更新モジュール１３３を除く）を送信先として送信する。更新モジュール群１３０に含まれる更新モジュール（更新モジュール１３３を除く）は、更新モジュール１３３を更新用更新モジュールに更新する。
【０３３１】
このとき、多重に暗号化された更新用更新モジュールを復号するための複数の鍵を、更新モジュール群１３０に含まれる更新モジュールへ送信するタイミングを更新用ソフトウェア配布部２２０が制御することにより、攻撃者が暗号化されていない更新用更新モジュールを入手することを不可能にする。
（２）上記各実施の形態では、各更新モジュールは、受信部３０１、送信部３０２、制御部３０３、更新部３０４、検証部３０５、ＭＡＣ値生成部３０６、ＭＡＣ値テーブル更新部３０７、分散情報保持部３０８を含んで構成されるとしている。しかし、これに限定するものではない。
【０３３２】
各更新モジュールは、監視処理に必要な構成要素（制御部３０３、検証部３０５）のみで構成されるとしてもよい。また、各更新モジュールは、更新処理に必要な構成要素（制御部３０３、更新部３０４）のみで構成されるとしてもよい。また、各更新モジュールは、無効化処理に必要な構成要素（制御部３０３、更新部３０４）のみで構成されるとしてもよい。
【０３３３】
さらに、各更新モジュールは、上記の組み合わせから構成されるとしてもよい。
この場合に、更新モジュール群１３０に含まれる複数の更新モジュールが、全体として、監視処理と更新処理に必要な構成要素を含むように、構成されていればよい。
（３）上記各実施の形態では、各更新モジュールの検証部３０５は、他の更新モジュールや保護制御モジュール１２０の改竄チェックを実行するとしているが、改竄チェックの対象は、当該モジュール全体に限定するものではない。
【０３３４】
改竄チェックの対象は、更新モジュール内の一部分、例えば、更新モジュールに含まれる特定の機能や関数、鍵等のデータであってもよい。また、一度に改竄対象全てを改竄チェックするのではなく、改竄対象の一部を改竄チェックするだけでもよい。このとき、改竄対象を一定のサイズに分割して得られた部分毎に改竄チェックしてもよいし、機能や関数単位で分割して得られた部分毎に改竄チェックしてもよい。さらに、改竄チェックの度に、改竄対象の複数の部分から一の部分を順番に選択し、選択した部分に対して改竄チェックするとしてもよい。また、改竄チェックの度に改竄チェックする部分をランダムに決定してもよい。また、他のモジュールや機器１００の外部の装置から、どの部分を改竄チェックするかの指示が与えられ、この指示により示される部分に対して改竄チェックをしてもよい。
（４）上記各実施の形態では、各更新モジュールや保護制御モジュール１２０は、耐タンパ化された領域等、攻撃者による攻撃から保護されている領域で動作するとしてもよい。
【０３３５】
監視処理に必要な構成要素のみで構成される更新モジュールが、攻撃者による攻撃から保護されている領域で動作する場合、他の更新モジュールや判断部２１０は、その保護された領域に存在する更新モジュールから、他の更新モジュールや保護制御モジュール１２０が攻撃されたことを検知した旨の通知を受けたときに、その通知を無条件に受け入れ、更新処理や無効化処理を実施してもよいし、その通知を他のモジュールからの通知よりも重要な通知として扱い、更新処理や無効化処理の判断を行ってもよい。
【０３３６】
また、保護制御モジュールが保護モードで動作し、つまり、耐タンパ化された領域等に存在して動作する。また、更新モジュールが通常モードで動作し、つまり、耐タンパ化されていない領域等に存在して動作するとしてもよい。
（５）上記各実施の形態では、モジュール無効化部２３０は、更新サーバ内に存在し、アクセス制御モジュール１４０は、機器内に存在するとしているが、これに限定するものではない。
【０３３７】
モジュール無効化部２３０及びアクセス制御モジュール１４０は、それぞれ、機器内部に存在してもよいし、更新サーバに存在してもよい。また、各更新モジュール内に存在してもよい。
また、モジュール無効化部２３０とアクセス制御モジュール１４０とは、別々のモジュールではなく、機器内部において、又は更新サーバ内部において、１つのモジュールであってもよい。
【０３３８】
モジュール無効化部２３０とアクセス制御モジュール１４０とが１つのモジュールである場合には、更新モジュールへアクセス情報取得鍵と暗号化アクセス情報とを送信するのではなく、アクセス情報を、無効化を実行する更新モジュールへ、直接送信してもよい。
さらに、モジュール無効化部２３０やアクセス制御モジュール１４０が機器内に存在する場合には、耐タンパ化などにより、攻撃から保護される領域に存在するとしてもよい。
（６）各実施の形態では、更新サーバは、判断部、更新用ソフトウェア配布部、モジュール無効化部、通信部及び監視パターン更新部などから構成されるとしているが、これに限定するものではない。判断部、更新用ソフトウェア配布部、モジュール無効化部、通信部及び監視パターン更新部などが１個のモジュールにより構成されているとしてもよい。また、上記の部の組み合わせから構成されるとしてもよい。
（７）上記各実施の形態では、ソフトウェア更新システムは、機器の工場製造時に初期設定処理を行うとしているが、これに限定するものではない。販売後など工場出荷後のどこかで初期化処理を実施してもよい。また、初期化処理は１度だけでなく、２度以上実施してもよい。
（８）上記各実施の形態では、初期設定処理において、検証用証明書及び認証鍵証明書は、更新用ソフトウェア配布部２２０が保持する署名秘密鍵を用いて生成された証明書であるとしたが、これに限定するものではなく、それぞれ別の鍵を用いて生成されてもよいし、更新用ソフトウェア配布部２２０以外の証明書発行装置により発行された証明書でもよい。
（９）上記各実施の形態では、初期設定処理や次ラウンド準備処理の動作として、暗復号鍵から生成する分散情報を更新モジュール１３ｘへ送信し、更新モジュール１３ｘが分散情報を保持するとしているが、これに限定するものではない。
【０３３９】
更新モジュールの代わりに、アプリケーションプログラムが分散情報を保持するとしてもよいし、更新モジュール１３ｘとアプリケーションプログラムとが分散情報を保持するとしてもよい。
（１０）上記各実施の形態では、検知処理の動作として、更新モジュール１３ｘが保護制御モジュール１２０の改竄検出を行うときに、検証鍵を使用して計算したＭＡＣ値を用いて改竄検出処理を行うとしている、これに限定するものではない。
【０３４０】
保護制御モジュール１２０の改竄検出用証明書を用いて検証するとしてもよい。また、ＭＡＣ値や証明書のようにハッシュ値を利用した改竄検証を行うのではなく、ログをチェックすることで改竄検証を行うとしてもよい。
（１１）上記各実施の形態では、検知処理の動作として、各更新モジュールが保護制御モジュール１２０の改竄を検出した場合、判断部２１０と他の更新モジュールへ通知するとしたが、これに限定するものではない。
【０３４１】
判断部２１０と他の更新モジュールのうち、どれか１つ以上のモジュールに通知するとしてもよい。また、保護制御モジュール１２０の改竄を検出した場合、更新モジュールを停止するとしてもよいし、機器１００や保護制御モジュール１２０を停止するとしてもよい。更に、改竄された保護制御モジュールを消去するとしてもよい。
さらに、各更新モジュールが保護制御モジュール１２０の改竄を検出しなかった場合、判断部２１０へ通知を行わないとしているが、これに限定するものではない。改竄検出処理を実施した結果として、改竄を検出しなかった旨を通知するとしてもよい。
（１２）上記各実施の形態では、検知処理の動作として、各更新モジュールは、他の更新モジュールに保護制御モジュールの改竄検出結果を送信しないとしているが、それぞれの更新モジュールで検出結果を共有するとしてもよい。
【０３４２】
また、検出結果を共有しない更新モジュールがあった場合に、当該更新モジュールを不正な更新モジュールと判断して、無効化するとしてもよい。
（１３）上記各実施の形態では、解析・判断処理の動作として、改竄情報に基づいて保護制御モジュール１２０を更新するかどうか判定するとしているが、これに限定するものではない。
【０３４３】
改竄されていると通知してきた更新モジュールの数によって更新するかどうかを判定してもよい。例えば、改竄されていると通知してきた更新モジュールの数が、所定の数よりも多いか等しい場合に、更新すると判定し、少ない場合に更新しないと判定してもよい。ここで、所定の数は、更新モジュール群に含まれる全ての更新モジュールの数である。
また、解析・判断時の動作として、保護制御モジュール１２０を更新するか否か、及び保護制御モジュール１２０を無効化するか否かを判断したが、これに限定するものではなく、機器１００を停止するか否かを判断するとしてもよい。
（１４）上記各実施の形態では、相互認証処理の動作として、各更新モジュールが、更新用ソフトウェア配布部２２０を認証し、その後、更新用ソフトウェア配布部２２０が各更新モジュールを認証するとしているが、これに限定するものではない。
【０３４４】
更新用ソフトウェア配布部２２０が各更新モジュールを認証し、その後、各更新モジュールが、更新用ソフトウェア配布部２２０を認証してもよい。また、各更新モジュールと更新用ソフトウェア配布部２２０とが個別に認証処理を行ってもよい。
（１５）上記各実施の形態では、相互認証処理の動作として、更新用ソフトウェア配布部２２０が各更新モジュールを認証する処理において、チャレンジデータをそれぞれの更新モジュールで異なる値にするとしているが、これに限定するものではない。チャレンジデータとして全ての更新モジュールで同じ値としてもよいし、全ての更新モジュールを複数のグループに分け、チャレンジデータをそれぞれのグループで異なる値にしてもよい。
（１６）上記各実施の形態では、相互認証処理の動作として、各更新モジュールが、更新用ソフトウェア配布部２２０を認証する処理において、各更新モジュールが個別に更新用ソフトウェア配布部２２０を認証するとしているが、これに限定するものではない。
【０３４５】
署名検証した結果を他の更新モジュールへ通知し、更新モジュール間で検証結果を共有し、自更新モジュールの認証結果と他の更新モジュールから受信した認証結果とから、更新用ソフトウェア配布部２２０が正当かどうかをそれぞれ判定してもよい。
判定方法としては、例えば、一定数（例えば、過半数等）の更新モジュールが認証に成功した場合には正当であると判定し、そうでない場合には、正当ではないと判定する方法がある。
（１７）上記各実施の形態では、相互認証処理の動作として、更新サーバ２００は署名秘密鍵と署名公開鍵とを使用して相互認証処理を実施するとしているが、これに限定するものではない。署名秘密鍵と署名公開鍵とは別に、相互認証に使用する認証鍵対を用いるとしてもよい。
【０３４６】
このとき、更新サーバの認証鍵対のうちの認証公開鍵は、予め１個の更新モジュールが保持するとしてもよいし、相互認証処理時に更新サーバから当該更新モジュールへ送信するとしてもよい。
（１８）上記各実施の形態では、相互認証処理の動作として、正当なモジュールであると検証できた更新モジュールの数が、回復処理に必要な数以上あるかどうかで、その後の回復処理を実施するかどうかを判定しているが、これに限定するものではない。
【０３４７】
不正な更新モジュールの数が、予め設定されている許容数未満かどうかで回復処理を実施するかどうかを判定してもよい。
また、相互認証処理において、回復処理に必要な数に満たないと判定された場合には、機器を停止するとしたが、この場合に、更新モジュールを無効化してもよい。
（１９）上記各実施の形態では、相互認証処理の動作として、更新用ソフトウェア配布部２２０が各更新モジュールを認証する時に、各更新モジュールは、レスポンスデータと一緒に認証公開鍵と認証鍵証明書とを更新用ソフトウェア配布部２２０へ送信するとしているが、これに限定するものではない。
【０３４８】
各更新モジュールは、レスポンスデータと一緒に認証公開鍵と認証鍵証明書とをそれぞれ別のタイミングで送信してもよい。
また、認証公開鍵や認証鍵証明書は、更新用ソフトウェア配布部２２０から要求があったときにのみそれぞれ送信するとしてもよい。このとき、更新用ソフトウェア配布部２２０は、全ての更新モジュールの認証公開鍵や認証鍵証明書を受信してもよいし、予め設定されており、回復処理に必要な数以上の数の更新モジュールの認証公開鍵や認証鍵証明書を受信してもよいし、また予め設定されており、不正な更新モジュールの許容数未満の更新モジュールの認証公開鍵と認証鍵証明書とを受信してもよい。
（２０）上記各実施の形態では、回復処理の動作として、監視処理時を、１回の復号中（監視３−１、３−２、５−１、５−２）に２回実施するとしているが、これに限定するものではない。復号処理の時間にあわせて何回監視処理を行ってもよいし、復号処理以外であっても、鍵や更新用保護制御モジュールの受信処理時や検知処理時、相互認証処理時に監視処理を行ってもよい。
【０３４９】
また、監視処理を一定時間間隔で定期的に実施するとしているが、これに限定するものではない。更新処理を複数のブロックに分割し、そのブロックの処理が終わるごとに実施してもよいし、ランダムな時間間隔で実施してもよいし、更新サーバから指定された時間間隔で実施してもよい。
また、各更新モジュールは、監視処理を実行するタイミングを示す同期情報を外部のサーバから取得し、取得した同期情報にしたがって監視処理を実行するとしてもよい。これにより、各更新モジュールは、他の更新モジュールと同じタイミングで監視処理を実行することができるので、不正な更新モジュールの検出精度を向上させることができる。
【０３５０】
さらに、通常時と回復処理時とにおける検知頻度を変更するとしてもよい。検知頻度の変更は、回復処理中であってもよい。
（２１）上記実施の形態２や実施の形態３では、循環監視パターン内の更新モジュールの数が３個であるとして、説明をしているが、これに限定するものではない。４個以上の更新モジュールが一方向に循環して検証していてもよい。
（２２）上記実施の形態２や実施の形態３では、一方向に循環検証する結果が全て正常である場合、循環監視パターン内の複数の更新モジュールを一群として扱うとしているが、これに限定するものではない。一組の更新モジュールが相互に監視しており、検証結果がともに正常である場合においても、一組の更新モジュールを一群として扱うとしてもよい。このとき、相互に監視している更新モジュールによる同一の更新モジュールへの検証結果が一致しない場合、一組の更新モジュールは全て不正な更新モジュールと特定する。
【０３５１】
図７０に示す監視結果の例を用いて説明する。更新モジュール１３１と更新モジュール１３２の一組の更新モジュールが相互に監視しており、検証結果がともに正常（３１０１、３１０２）である。このとき、更新モジュール１３１による更新モジュール１３３に対する検証結果（３１０３）と、更新モジュール１３２による更新モジュール１３３に対する検証結果（３１０４）が一致しないため、更新モジュール１３１と更新モジュール１３２は、不正な更新モジュールであると特定される。
（２３）上記実施の形態２や実施の形態３では、循環監視パターンの選択において、循環のサイズをもとに、選択をしているが、これに限定するものではない。
【０３５２】
循環監視パターン内の更新モジュールが同一の更新モジュールを検証する数が多い順に選択してもよい。例えば、第１、第２及び第３の循環監視パターンが存在し、第１の循環監視パターンにおいて、２０個の更新モジュールにより、第１の更新モジュールに対する監視がされ、第２の循環監視パターンにおいて、１０個の更新モジュールにより、第２の更新モジュールに対する監視がされ、第３の循環監視パターンにおいて、５個の更新モジュールにより、第３の更新モジュールに対する監視がされるとする。この場合に、第１、第２及び第３の循環監視パターンの順に、循環監視パターンを選択する。
【０３５３】
このようにすることにより、同一の更新モジュールを検証する数が多いほど矛盾があるか否かの検証を多く行うことができるため、矛盾が存在する場合、矛盾を速く見つけやすくなる。その結果、不正な更新モジュールを速く特定することができ、不正な更新モジュールを効率的かつ迅速に排除できる。
（２４）上記実施の形態２や実施の形態３では、循環のサイズが同じ循環監視パターンが複数個存在する場合、循環監視パターン外の更新モジュールが循環監視パターン内の更新モジュールを検証する数をもとに、複数の循環監視パターンから循環監視パターンを選択するとしているが、これに限定するものではない。
【０３５４】
循環監視パターン内の更新モジュールが同一の更新モジュールを検証する数が多い順に選択してもよい。これにより、同一の更新モジュールを検証する数が多いほど矛盾があるか否かの検証を多く行うことができるため、矛盾が存在する場合、矛盾を速く見つけやすくなる。その結果、不正な更新モジュールを速く特定することができ、不正な更新モジュールを効率的かつ迅速に排除できる。
（２５）上記実施の形態２では、一回の相互監視処理の監視結果において、不正な更新モジュールを特定しているが、これに限定するものではない。複数回の相互監視処理の監視結果をもとに、不正な更新モジュールを特定してもよい。
【０３５５】
図７１及び図７２に示す監視結果の例を用いて具体的に説明する。
更新サーバ２００ｂｂは、相互監視処理において、図７１の監視結果を受信し、さらに、次の相互監視処理において、図７２の監視結果を受信するものとする。
図７１に示す例においては、更新モジュール１３７による更新モジュール１３６への監視結果は、不正（３１１２）であり、更新モジュール１３６による更新モジュール１３７への監視結果も、不正（３１１１）である。その他の監視結果は、正常である。
【０３５６】
また、図７２に示す例においては、更新モジュール１３２による更新モジュール１３５への監視結果は、不正（３１１５）であり、更新モジュール１３３による更新モジュール１３５への監視結果も、不正（３１１４）である。また、更新モジュール１３７による更新モジュール１３３への監視結果は、不正（３１１３）である。さらに、更新モジュール１３７による更新モジュール１３６への監視結果は、不正（３１１２）であり、更新モジュール１３６による更新モジュール１３７への監視結果も、不正（３１１１）である。その他の監視結果は、正常である。
【０３５７】
図７１に一例として示す監視結果において、不正モジュールの特定処理を実行すると、更新モジュール１３７が不正な更新モジュールであると特定できる。不正な更新モジュールは、無効化処理で機器１００内から消去をしない限り、不正な更新モジュールとして存在し続ける。そのため、次の相互監視処理において、一度不正な更新モジュールと特定された更新モジュールを、正常な更新モジュールと判定する更新モジュールは、不正な更新モジュールである。よって、図７２に示す更新モジュール１３５も不正な更新モジュールであると特定できる。更新モジュール１３５は、不正と特定された更新モジュール１３７を正常と判定しているからである。
（２６）上記実施の形態２では、一回の相互監視処理の監視結果において、不正な更新モジュールを特定しているが、これに限定するものではない。
【０３５８】
複数回の相互監視処理の監視結果をもとに、不正な更新モジュールを特定してもよい。図７３及び図７４に示す監視結果の例を用いて具体的に説明する。
更新サーバ２００ｂｂは、相互監視処理において、図７３に示す監視結果を受信し、さらに、次の相互監視処理において、図７４に示す監視結果を受信するものとする。
図７３に示す例においては、更新モジュール１３７による更新モジュール１３６への監視結果は、不正（３１２１）であり、更新モジュール１３６による更新モジュール１３７への監視結果も、不正（３１２２）である。また、更新モジュール１３５による更新モジュール１３７への監視結果は、不正（３１２６）であり、更新モジュール１３７による更新モジュール１３３への監視結果も、不正（３１２３）である。その他の監視結果は、正常である。
【０３５９】
図７４に示す例においては、更新モジュール１３７による更新モジュール１３６への監視結果は、不正（３１２１）であり、更新モジュール１３６による更新モジュール１３７への監視結果も、不正（３１２２）である。また、更新モジュール１３３による更新モジュール１３５への監視結果は、不正（３１２４）であり、更新モジュール１３２による更新モジュール１３５への監視結果は、不正（３１２５）であり、更新モジュール１３７による更新モジュール１３３への監視結果も、不正（３１２３）である。その他の監視結果は、正常である。
【０３６０】
図７３に示す例によると、更新モジュール１３５は、更新モジュール１３７を不正（３１２６）な更新モジュールと判定している。その後に、図７４に示す例によると、更新モジュール１３５は、更新モジュール１３７を正常（３１２７）な更新モジュールと判定している。このように、図７３に示す例と、図７４に示す例とでは、更新モジュール１３５による更新モジュール１３７に対する判定結果が一致していない。従って、更新モジュール１３５が不正な更新モジュールであると特定できる。
（２７）上記実施の形態２では、正常モジュール仮定部６５３は、更新モジュール群１３０内の更新モジュールをランダムに一つ選択しているが、これに限定するものではない。      
【０３６１】
正常モジュール仮定部６５３は、多くの他の更新モジュールを正常と判定する更新モジュールを選ぶとしてもよい。これにより、他の更新モジュールを正常と判定することで、仮正常更新モジュール群に含まれる更新モジュールが多くなり、矛盾があるか否かの検証を多くすることができるため、矛盾を速く見つけやすくなる。その結果、不正な更新モジュールを速く特定することができ、不正な更新モジュールを効率的かつ迅速に排除できる。
（２８）上記実施の形態２では、図３３に示すステップＳ８００６で不正モジュール特定処理を終了し、他の更新モジュールを正常と仮定し、再度不正モジュール特定処理をする。このとき、不正モジュール特定処理において、正常モジュール仮定部６５３は、更新モジュール群１３０内の更新モジュールをランダムに一つ選択しているが、これに限定するものではない。
【０３６２】
前回の不正モジュール特定処理のステップＳ８００３の仮正常更新モジュール群内の更新モジュール以外を選択するとしてもよい。前回の不正モジュール特定処理では、仮正常更新モジュール群内の更新モジュールに矛盾がないことがわかっているため、仮正常更新モジュール群内の更新モジュールをステップＳ８００１で選択をしたとしても、不正な更新モジュールと特定できない。これにより、不正な更新モジュールと特定できない更新モジュールを選択しないことにより、処理効率を向上することができる。
（２９）上記実施の形態３では、正常モジュールの特定処理において、循環監視パターンが存在するかを判断し、循環監視パターンに矛盾があるか否かを判定しているが、これに限定するものではない。循環監視パターンに矛盾があるか否かを判定する代わりに、及び、循環監視パターンに矛盾があるか否かを判定するとともに、不正モジュール特定処理を実行してもよい。不正モジュール特定処理を実行することで、不正な更新モジュールを特定するとしてもよい。
（３０）上記実施の形態３では、不正モジュール仮定部６７３は、更新モジュール群１３０内の更新モジュールをランダムに一つ選択しているが、これに限定するものではない。不正モジュール仮定部６７３は、多くの他の更新モジュールから正常と判定される更新モジュールを選択するとしてもよい。他の更新モジュールから正常と判定されていることで、仮不正更新モジュール群に含まれる更新モジュールが多くなる。これにより、ステップＳ９０１４において、選択する更新モジュールの数が少なくなり、処理効率を向上することができる。
（３１）上記実施の形態３では、ステップＳ９０２０で全ての更新モジュールを選択していない場合、ステップＳ９０１４で他の更新モジュールをランダムに一つ選択しているが、これに限定するものではない。前回の正常モジュール特定処理のステップＳ９０１６の仮不正更新モジュール群内の更新モジュール以外を選択するとしてもよい。前回の正常モジュール特定処理では、仮不正更新モジュール群内の更新モジュールにおいて、矛盾がないことがわかっているため、仮不正更新モジュール群内の更新モジュールをステップＳ９０１４で選択をしたとしても、正常な更新モジュールと特定できない。これにより、正常な更新モジュールと特定できない更新モジュールを選択しないことにより、処理効率を向上することができる。
（３２）上記実施の形態３では、ステップＳ９００５からステップＳ９０１３において、循環監視パターンが存在するかを判断し、不正な更新モジュールを特定してから、ステップＳ９０１４からステップＳ９０１６において、更新モジュールを選択し、仮不正更新モジュール群とするとしているが、これに限定するものではなく、ステップＳ９００４のあと、ステップＳ９０１４からステップＳ９０１６の処理を行い、その後、ステップＳ９００５からステップＳ９０１３の処理をしたうえで、ステップＳ９０１７の判断をおこなってもよい。また、この場合、正常な更新モジュールを特定できない場合は、ステップＳ９０１４に戻り、ステップＳ９００５からステップＳ９０１３において、不正な更新モジュールと特定された更新モジュール以外の更新モジュールを選択する。
（３３）上記実施の形態２及び実施の形態３では、相互監視処理において、各モジュールから監視結果を受信するが、更新モジュールが監視結果を送信しない場合、監視結果を送信しない更新モジュールを不正な更新モジュールと特定するとしてもよい。また、監視結果を送信しない更新モジュールを正常と判定する更新モジュールを不正な更新モジュールと特定するとしてもよい。これにより、不正モジュール特定処理を行う前に、不正な更新モジュールを特定でき、不正な更新モジュールを効率的かつ迅速に排除できる。
（３４）上記実施の形態４では、ステップＳ１１０１７において、実施の形態３の正常モジュール特定処理を行うとしているが、これに限定するものではなく、変形例（２９）に記載の正常モジュール特定処理をするとしてもよい。
（３５）上記実施の形態４では、対象の更新モジュールへの監視結果を全て不正と判定する更新モジュール（つまり、妨害候補モジュール）が存在した場合、ステップＳ１２００２において、監視パターンを更新する。監視パターンを更新後に、監視結果から妨害モジュールがいるか否かを判断するが、これに限定するものではない。対象の更新モジュールへの監視結果を全て不正と判定する更新モジュール（つまり、妨害候補モジュール）が複数存在した場合、対象の更新モジュールへの監視結果を全て不正と判定する更新モジュールが相互に不正と判定していれば、相互に不正と判定している更新モジュールの無効化指示を送信するとしてもよい。
【０３６３】
また、上記実施の形態４では、対象の更新モジュールへの監視結果を全て不正と判定する更新モジュール（つまり、妨害候補モジュール）が１個だけ存在した場合、この妨害候補モジュールの無効化指示を送信するとしてもよい。その後、この妨害候補モジュールを排除した後において、正常モジュール特定処理をするとしてもよい。
また、改竄を監視する複数の監視モジュールを有する情報セキュリティ装置を管理する管理装置であるとしてもよい。前記管理装置は、前記情報セキュリティ装置から、各監視モジュールによる他の監視モジュールに対する監視結果を受信する受信部と、受信した前記監視結果を用いて、前記監視モジュールから、全ての監視対象の監視モジュールに対して改竄されていると判定する妨害候補モジュールを抽出する判定部と、１個の妨害候補モジュールのみが抽出された場合に、抽出された前記妨害候補モジュールを無効化するよう、前記情報セキュリティ装置を制御する無効化部と、１個の妨害候補モジュールのみが検出された場合に、当該妨害候補モジュールを除いて、新たに監視パターンを作成し、作成した監視パターンを前記情報セキュリティ装置へ送信し、新たな監視パターンに置き換えさせる更新部とを備える。前記受信部は、さらに、前記情報セキュリティ装置から新たな監視パターンによる新たな監視結果を受信し、前記判定部は、さらに、受信した新たな監視結果を用いて、正常な監視モジュールを特定する。
（３６）上記実施の形態４では、ステップＳ１２００７において、妨害候補モジュールである更新モジュールが相互に正常（「○」）と判定する妨害候補モジュール群が存在するかを判断する。相互に正常と判定する妨害候補モジュール群が存在した場合、相互に正常と判定する妨害候補モジュール群のステップＳ１２００１の監視結果において、相互に不正と判断していた場合、当該妨害候補モジュールを不正な更新モジュールと特定し、無効化指示を送信するとしてもよい。
【０３６４】
これは、一つの更新モジュールから他の一つの更新モジュールに対する監視結果において、ステップＳ１２００１では、監視対象の更新モジュールを不正と判定しており、ステップＳ１２００７では同じ監視対象の更新モジュールを正常と判定している場合、それぞれのステップにおける監視結果に矛盾が発生するため、判定した更新モジュールを不正な更新モジュールと特定できる。
（３７）上記実施の形態４では、正常モジュールの特定を妨害する更新モジュールを特定するとしているが、これに限定するものではない。不正モジュールの特定を妨害する更新モジュールを特定するとしてもよい。
【０３６５】
このとき、図５８に示す動作図のステップＳ１０００８において、正常モジュール特定処理に代えて、不正モジュール特定処理を行う。また、図６４に示す例の場合において、不正モジュール特定処理を行ったとき、更新モジュール１３１、１３２、１３６及び１３７は、不正な更新モジュールであるとは特定されない。つまり、更新モジュール１３１、１３２、１３６及び１３７の各更新モジュールが自身の不正モジュール特定を妨害していることになる。この場合、妨害モジュール特定処理を行うことにより、不正モジュール特定処理では、特定できなかった不正モジュールを、妨害モジュールとして特定し、特定した妨害モジュールを予め排除し、その後に、不正モジュール特定処理を実行することで、不正な更新モジュールを効率的かつ迅速に排除できる。
（３８）上記実施の形態４では、ステップＳ１２００２において、監視対象の更新モジュールへの監視結果を全て不正と判定する妨害候補モジュール群内で全ての妨害候補モジュールを監視する監視パターンを生成するとしているが、これに限定するものではない。更新モジュール群１３０の更新モジュール全てを監視する監視パターンを生成するとしてもよい。この場合、監視パターンを更新後に、妨害候補モジュールが全ての更新モジュールに対して不正と判定する場合、当該妨害モジュールを妨害モジュールと特定する。
（３９）上記の各モジュールは、具体的には、それぞれ個別のコンピュータプログラムであってもよいし、オペレーティングシステムに組み込まれるコンピュータプログラムであってもよいし、オペレーティングシステムから呼ばれるドライバプログラムであってもよいし、アプリケーションプログラムであってもよい。
（４０）各システムの適用例（１）
上記の各実施の形態の各システムは、図７５に示すように、コンテンツ再生システム１０ｅであるとしてもよい。
【０３６６】
コンテンツ再生システム１０ｅは、この図に示すように、ＢＤ再生装置１００ｅ、モニタ２０ｅ及びホームサーバ装置２００ｅから構成され、ＢＤ再生装置１００ｅ、モニタ２０ｅ及びホームサーバ装置２００ｅは、ホームネットワーク３０ｅを介して、相互に接続されている。
ホームサーバ装置２００ｅは、インターネット４０ｅを介して、インターネット４０ｅに接続されているコンテンツサーバ装置（図示していない）からコンテンツを取得する。コンテンツは、一例として、映像データ及び音声データが圧縮され、さらに暗号化されて構成されたものである。ホームサーバ装置２００ｅは、ホームネットワーク３０ｅを介して、取得したコンテンツをＢＤ再生装置１００ｅへ送信する。
【０３６７】
ＢＤ再生装置１００ｅは、ホームサーバ装置２００ｅからコンテンツを受信し、受信したコンテンツをＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）に記録する。また、ＢＤ再生装置１００ｅは、ＢＤに記録されているコンテンツの暗号化され、圧縮された映像データ及び音声データを伸張して、映像信号及び音声信号を生成し、生成した映像信号及び音声信号をホームネットワーク３０ｅを介して、モニタ２０ｅへ出力する。モニタ２０ｅは、映像信号及び音声信号を受信し、受信した映像信号及び音声信号により、映像を表示し、音声を出力する。
【０３６８】
ＢＤ再生装置１００ｅは、上記の各実施の形態の各ソフトウェア更新システムの機器に相当し、又は、各改竄監視システムの情報セキュリティ装置に相当し、当該機器又は当該情報セキュリティ装置と同様の構成を有している。ＢＤ再生装置１００ｅが有しているアプリケーションプログラムの一例は、暗号化されたデータを復号するためのコンピュータプログラムであり、また、他の一例は、圧縮された映像データ及び音声データを伸張するためのコンピュータプログラムである。
【０３６９】
また、ホームサーバ装置２００ｅは、各ソフトウェア更新システムの更新サーバに相当し、又は、各改竄監視システムの管理装置に相当し、更新サーバ又は管理装置と同様の構成を有している。
（４１）各システムの適用例（２）
上記の各実施の形態の各システムは、図７６に示すように、モバイルバンキングシステム１０ｆであるとしてもよい。
【０３７０】
モバイルバンキングシステム１０ｆは、この図に示すように、携帯電話１００ｆ、無線基地局５０ｆ、銀行サーバ装置４０ｆ及び更新サーバ装置２００ｆから構成されている。携帯電話１００ｆは、無線基地局５０ｆ、携帯電話網２０ｆ及びインターネット３０ｆを介して、更新サーバ装置２００ｆ及び銀行サーバ装置４０ｆに接続されている。
銀行サーバ装置４０ｆは、銀行の利用者の口座に相当する口座ファイルを記憶している。口座ファイルは、取引データを含む。取引データは、取引の種別、金額、日付、相手先の識別情報などを含む。
【０３７１】
携帯電話１００ｆは、一例として、操作者の指示により、無線基地局５０ｆ、携帯電話網２０ｆ及びインターネット３０ｆを介して、銀行サーバ装置４０ｆに対して、操作者の口座から取引先の口座への振替えを要求する。銀行サーバ装置４０ｆは、振替えの要求に従って、操作者の口座から取引先の口座への振替えを実行する。
携帯電話１００ｆは、銀行サーバ装置４０ｆとの間でデータを送受信する際に、デジタル署名を用いた相互の機器認証を行う。また、データの暗号化を要求する。銀行サーバ装置４０ｆは、振替えの要求に従って、操作者の口座から取引先の口座への振替えを実行する。
【０３７２】
携帯電話１００ｆと銀行サーバ装置４０ｆとの間で通信する際に、携帯電話１００ｆ及び銀行サーバ装置４０ｆは、それぞれ、デジタル署名を用いた相互の機器認証を行う。また、携帯電話１００ｆと銀行サーバ装置４０ｆとの間でデータの送受信を行う際に、携帯電話１００ｆ及び銀行サーバ装置４０ｆは、データの暗号化及び暗号化されたデータの復号を行う。
【０３７３】
携帯電話１００ｆは、各実施の形態の各ソフトウェア更新システムの機器に相当し、又は、各改竄監視システムの情報セキュリティ装置に相当し、機器又は情報セキュリティ装置と同様の構成を有している。携帯電話１００ｆが有しているアプリケーションプログラムの一例は、データを暗号化するためのコンピュータプログラム又は暗号化されたデータを復号するためのコンピュータプログラムであり、また、他の一例は、通信相手の装置との間で、デジタル署名を用いて機器認証をするためのコンピュータプログラムである。
【０３７４】
更新サーバ装置２００ｆは、各実施の形態の各ソフトウェア更新システムの更新サーバに相当し、又は、各改竄監視システムの管理装置に相当する。
（４２）上記の実施の形態１および実施の形態２で説明した更新サーバ２００、２００ａ、２００ｂは、それぞれ、機器１００、１００ａ、１００ｂの更新モジュール群が相互監視処理を行うときの監視パターンを生成する監視パターン生成部を有する構成であってもよい。そして、更新サーバ２００、２００ａ、２００ｂは、生成した監視パターンを、機器１００、１００ａ、１００ｂに送信し、機器１００、１００ａ、１００ｂは、監視パターンを受信する。機器１００、１００ａ、１００ｂは、受信した監視パターンに基づき相互監視処理を行う。
【０３７５】
特に、実施の形態２の更新サーバ２００ａおよび２００ｂは、循環監視パターンを含む監視パターンを生成するとよい。機器１００ａおよび１００ｂは、循環監視パターンを含む監視パターンを用いて相互監視処理を行うことにより、後に行なわれる更新サーバ２００ａおよび２００ｂによる不正モジュール特定処理の処理効率を向上させることができる。
（４３）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、各装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
（４４）上記の各装置を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。
【０３７６】
また、上記の各装置を構成する構成要素の各部は、個別に１チップ化されていても良いし、一部又は全てを含むように１チップ化されてもよい。
また、ここでは、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、ＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
【０３７７】
さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適用等が可能性としてありえる。
（４５）上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
（４６）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
【０３７８】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
【０３７９】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
【０３８０】
また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（４７）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
＜まとめ＞
本発明の一実施態様であるソフトウェア更新システムは、所定のアプリケーションを格納するソフトウェア更新装置と、このソフトウェア更新装置と接続される管理装置とを含み、前記ソフトウェア更新装置は、前記所定のアプリケーションが改ざんされていないかを検証する保護制御モジュールと、前記保護制御モジュールを更新する複数の更新モジュールとを含み、前記複数の更新モジュールは、他の更新モジュールが不正動作を行わないかの検証を行って、前記検証結果を前記管理装置に送信し、前記管理装置は、前記複数の更新モジュールから前記検証結果を受信する通信部と、前記受信した検証結果に基づいて不正動作を行う可能性のある更新モジュールを判断し、前記不正動作を行う可能性があると判断した更新モジュールを無効化する指示を前記ソフトウェア更新装置に送信する制御部と、を含み、前記制御部は、前記複数の更新モジュールの中の第１更新モジュールを判断対象とし、前記第１更新モジュールが正常であると仮定し、この仮定を前提に前記第１更新モジュールと前記第１更新モジュールが正常と検証した第２更新モジュールとが共通の第３更新モジュールを検証した場合であって、前記第１更新モジュールの検証結果と前記第２更新モジュールの検証結果とが一致しない場合、前記仮定を誤判断として前記第１更新モジュールは不正動作を行う可能性のあると判断する。
【０３８１】
この構成によると、保護制御モジュールを更新するための更新モジュールを複数の更新モジュールを含む更新モジュール群として、複数の更新モジュールが不正動作を行わないかを相互に検証することにより、前記更新モジュールの改ざんを前記更新モジュール群の内部で自己検証するので、前記更新モジュールの改ざんや前記更新モジュールの正常な動作が妨害されるのを防止できる。その結果、不正動作を行う更新モジュールを介して保護制御モジュールが不正な保護制御モジュールに更新されるのを防止し、前記不正な保護制御モジュールによって前記所定のアプリケーションが攻撃されるのを防止できる。
【０３８２】
また、前記管理装置は、前記複数の更新モジュールの各々から受信した検証結果を用いて、判断対象の更新モジュールを正常のものと仮定した上で、その仮定に矛盾がある場合に前記判断対象の更新モジュールを、不正動作を行う可能性のあると判断すること。そのため、改ざんされた更新モジュールが、改ざんされていない他の更新モジュールを「改ざんされている」と偽って管理装置に通知した場合でも、不正動作を行う可能性のある更新モジュールを適切に特定することができる。
【０３８３】
また、前記管理装置は、前記不正動作を行う可能性があると判断した更新モジュールを無効化する指示を行うことにより、改ざんされていない更新モジュールを無効化することを防止し、また、改ざんされた更新モジュールを無効化しないまま更新モジュール群内に残すのを防止できる。
また、本発明の一実施態様であるソフトウェア更新システムは、所定のアプリケーションを格納するソフトウェア更新装置と、このソフトウェア更新装置と接続される管理装置とを含み、前記ソフトウェア更新装置は、前記所定のアプリケーションが改ざんされていないかを検証する保護制御モジュールと、前記保護制御モジュールを更新する複数の更新モジュールとを含み、前記複数の更新モジュールの各々は、他の更新モジュールが不正動作を行わないかの検証を行って、前記検証結果を前記管理装置に送信し、前記管理装置は、前記複数の更新モジュールから前記検証結果を受信する通信部と、前記受信した検証結果に基づいて不正動作を行う可能性のある更新モジュールを判断し、前記不正動作を行う可能性があると判断した更新モジュールを無効化する指示を前記ソフトウェア更新装置に送信する制御部と、を含み、前記制御部は、前記複数の更新モジュールの間でどの更新モジュールについて検証を行うかの組合せを決め、この組合せを示した組合情報を前記ソフトウェア更新装置に送信し、前記組合せの中に、前記複数の更新モジュールの中の一部の複数の更新モジュールが一方向に循環して順次検証する所定の関係を含め、前記検証結果に基づいて前記所定の関係に含まれる複数の更新モジュールを一方向に循環して検証した結果前記所定の関係に含まれる複数の更新モジュールの全てが正常であると判断し、且つ、前記所定の関係に含まれる複数の更新モジュールの判断のいずれかに矛盾がある場合、前記所定の関係に含まれる複数の更新モジュールの全てが不正動作を行う可能性があると判断する。
【０３８４】
すなわち、前記管理装置は、複数の更新モジュールの間でどの更新モジュールの検証処理を行うかの組合せを決定するに際して、複数の更新モジュールの中の一部の更新モジュールが一方向に循環して順次検証する所定の関係を含めるようにする。
そして、前記所定の関係に含まれる複数の更新モジュールが一方向に循環して検証した結果、前記所定の関係に含まれる複数の更新モジュールの全てが正常であると判断され、且つ、前記所定の関係に含まれる複数の更新モジュールの判断のいずれかに矛盾がある場合には、前記所定の関係にある複数の更新モジュールを一群として扱い、前記所定の関係に含まれる複数の更新モジュールの全てが不正動作を行う可能性があると判断することができる。
【０３８５】
これにより、一つ一つの更新モジュールについて不正動作を行う可能性があるか否かを判断する場合に比較して、処理効率を格段に上げることができる。
ここで、前記制御部は、前記所定の関係に含まれる複数の更新モジュールを一方向に循環して検証した結果、いずれかの更新モジュールが不正動作を行う可能性があると判断した場合、前記所定の関係に含まれる複数の更新モジュールについては不正動作を行う可能性があるか否かの判断は行わない。
【０３８６】
この場合には、前記所定の関係に含まれる複数の更新モジュールを一群として扱うことができない。その後、他に前記所定の関係にある複数の更新モジュールが存在すれば、その複数の更新モジュールを一群として判断する処理に移行すればよい。
ここで、前記制御部は、前記所定の関係に含まれる複数の更新モジュールを一方向に循環して検証した結果、前記所定の関係に含まれる複数の更新モジュールの全てが正常であると判断し、且つ、前記所定の関係に含まれる複数の更新モジュールの判断のいずれかに矛盾がない場合、前記所定の関係に含まれる複数の更新モジュールについては不正動作を行う可能性があるか否かの判断は行わない。
【０３８７】
この場合も、前記所定の関係にある複数の更新モジュールを一群として扱い、不正動作を行う可能性があるか否かの判断ができないものと捕らえることができる。その後、他に前記の所定の関係にある複数の更新モジュールが存在すれば、その複数の更新モジュールを一群として判断する処理に移行すればよい。
ここで、前記所定の関係とは、第１更新モジュール、第２更新モジュール及び第３更新モジュールの３個の更新モジュールがある場合、第１更新モジュールが第２更新モジュールの改ざん検出を行い、第２更新モジュールが第３更新モジュールの改ざん検出を行い、第３更新モジュールが第１更新モジュールの改ざん検出を行う関係である。すなわち、第１更新モジュール、第２更新モジュール及び第３更新モジュールが、一方向に循環して順次改ざん検出処理を行う関係をいう。
【０３８８】
ここで、前記所定の関係に含まれる複数の更新モジュールの中の少なくとも２つの更新モジュールは、共通の他の更新モジュールを検証し、前記制御部は、前記２つの更新モジュールによる、前記共通の他の更新モジュールに対する検証結果が矛盾する場合に、前記所定の関係に含まれる複数の更新モジュールの判断のいずれかに矛盾があると判断する。
このような場合に、前記所定の関係に含まれる複数の更新モジュールがした判断の矛盾を見つけることができる。
【０３８９】
ここで、前記共通の他の更新モジュールは、前記所定の関係に含まれる更新モジュールであってもよい。
これにより、前記所定の関係に含まれる複数の更新モジュール以外に更新モジュールが存在しない場合であっても、前記所定の関係に含まれる複数の更新モジュールがした判断の矛盾を見つけることができる。
【０３９０】
ここで、前記共通の他の更新モジュールは、前記所定の関係に含まれない更新モジュールであってもよい。
これにより、前記所定の関係に含まれる複数の更新モジュール以外の更新モジュールを用いて、前記所定の関係に含まれる複数の更新モジュールがした判断の矛盾を見つけることも可能である。
【０３９１】
ここで、前記所定の関係に含まれる複数の更新モジュールの中の少なくとも一組の更新モジュールは相互に検証し合い、前記制御部は、前記一組の更新モジュールの検証結果が相互に矛盾する場合に、前記所定の関係に含まれる複数の更新モジュールの判断のいずれかに矛盾があると判断する。
このように、複数の更新モジュールがした判断の矛盾の検出に、一組の更新モジュールが相互に検証を行う関係を用いることもできる。そのため、前記所定の関係に含まれる複数の更新モジュール以外の更新モジュールが存在しない場合にも、前記所定の関係に含まれる複数の更新モジュールがした判断の矛盾を見つけることができる。
【０３９２】
ここで、前記管理装置の前記制御部は、前記所定の関係に含まれる更新モジュールの数が最小のものから順番に、前記所定の関係に含まれる複数の更新モジュールの全てが不正動作を行う可能性があるか否かを判断する。
所定の関係に含まれる更新モジュールの数が少ない方が、そこに含まれるすべての更新モジュールが正常であると判断される可能性が高い。そこで、前記所定の関係に含まれる更新モジュールの数が最小のものから優先的に処理を行うことにより、不正動作を行う可能性のある更新モジュールを効率的に排除できる。
【０３９３】
ここで、前記管理装置の前記制御部は、前記所定の関係に含まれる複数の更新モジュールの数が同数のものが複数存在する場合、前記所定の関係に含まれない他の更新モジュールから監視される更新モジュールをより多く含むものから順番に、前記所定の関係に含まれる複数の更新モジュールの全てが不正動作を行う可能性があるか否かを判断する。
この構成によると、所定の関係に含まれる複数の更新モジュールの全てが不正動作を行う可能性があると判断された後に、前記所定の関係に含まれない更新モジュールについて不正動作を行う可能性があるか否かを判断する際に、より多くの更新モジュールについて判断を行うことができる。
【０３９４】
ここで、前記管理装置は、前記所定の関係に含まれる複数の更新モジュールを示した関係リストを格納する記憶部を備え、前記制御部は、前記記憶部に格納された関係リストに基づいて、前記所定の関係に含まれる更新モジュールの数が最小のものを特定する。また、前記関係リストは、前記所定の関係に含まれる複数の更新モジュールを、前記所定の関係に含まれる複数の更新モジュールの数が少ない順番に配置してもよい。
【０３９５】
これにより、前記判断部は、前記所定の関係に含まれる更新モジュールの数が最小のものを迅速に特定することができる。
ここで、前記ソフトウェア更新装置において、前記所定のアプリケーションは、所定の暗号鍵を用いて暗号化されており、前記所定の暗号鍵に対応する復号鍵は、所定の分散法に従って複数の分散鍵に分散され、前記複数の分散鍵の各々は前記更新モジュールに割り当てられ、前記複数の更新モジュールの各々は、仮想の多角形の端点になるように配置され、自更新モジュールに割り当てられた分散鍵を保有すると共に、隣接する他の２の更新モジュールに割り当てられた分散鍵を保有し、前記保護制御モジュールは、前記分散鍵の少なくとも３個を前記更新モジュールから取得して前記復号鍵を復元し、前記所定の関係に含まれる複数の更新モジュールは、３個の更新モジュールから構成され、前記所定の関係に含まれる３個の更新モジュールは、一の更新モジュールと前記一の更新モジュールが保有する分散鍵に対応する隣接する他の２の更新モジュールとからなる３個の更新モジュールとは別の３個の更新モジュールであることを特徴とする。
【０３９６】
この構成によると、前記復号鍵から生成された複数の分散鍵を、前記更新モジュールに割り当てるので、不正な解析者が前記保護制御モジュールを解析しても、前記復号鍵を取得することはできない。そこで、前記所定のアプリケーションの機密性を担保できる。
また、前記複数の更新モジュールの各々を、仮想の多角形の端点になるように配置し、各更新モジュールは、自更新モジュールに割り当てられた分散鍵を保有すると共に隣接する他の２の更新モジュールに割り当てられた分散鍵を保有するので、一部の更新モジュールが無効化された場合であっても、復号鍵を再現することができる。
【０３９７】
また、前記所定の関係に含まれる３個の更新モジュールの全てが不正動作を行う可能性があると判断され、無効化された場合であっても、各分散鍵を保有する更新モジュールを確実に残すことができるので、前記保護制御モジュールは、復号鍵を復元することができる。
また、本発明の一実施態様である管理装置は、所定のアプリケーションが改ざんされていないかを検証する保護制御モジュール及び前記保護制御モジュールを更新する複数の更新モジュールを格納し、前記複数の更新モジュールは他の更新モジュールが不正動作を行わないかの検証を行うソフトウェア更新装置と接続可能であり、前記ソフトウェア更新装置から前記検証結果を受信する通信部と、前記受信した検証結果に基づいて不正動作を行う可能性のある更新モジュールを判断し、前記不正動作を行う可能性があると判断した更新モジュールを無効化する指示を前記ソフトウェア更新装置に送信する制御部とを含み、前記制御部は、前記複数の更新モジュールの間でどの更新モジュールについて検証を行うかの組合せを決め、この組合せを示した組合情報を前記ソフトウェア更新装置に送信し、前記組合せの中に、前記複数の更新モジュールの中の一部の複数の更新モジュールが一方向に循環して順次検証する所定の関係を含め、前記検証結果に基づいて前記所定の関係に含まれる複数の更新モジュールを一方向に循環して検証した結果前記所定の関係に含まれる複数の更新モジュールの全てが正常であると判断し、且つ、前記所定の関係に含まれる複数の更新モジュールの判断のいずれかに矛盾がある場合、前記所定の関係に含まれる複数の更新モジュールの全てが不正動作を行う可能性があると判断する。
【０３９８】
また、本発明の一実施態様である不正モジュール特定方法は、所定のアプリケーション、前記所定のアプリケーションが改ざんされていないかを検証する保護制御モジュール、及び前記保護制御モジュールを更新する複数の更新モジュールを格納する記憶手段と、前記複数の更新モジュールは他の更新モジュールが不正動作を行わないかの検証を行って、前記検証結果を前記管理装置に送信する制御を行う制御手段とを有するソフトウェア更新装置と、前記複数の更新モジュールから前記検証結果を受信する通信部と、前記受信した検証結果に基づいて不正動作を行う可能性のある更新モジュールを判断し、前記不正動作を行う可能性があると判断した更新モジュールを無効化する指示を前記ソフトウェア更新装置に送信する制御部とを有する管理装置とを含むソフトウェア更新システムにおいて、前記管理装置で、前記複数の更新モジュールの中から不正動作を行う可能性がある更新モジュールを判断する方法であって、前記複数の更新モジュールの間でどの更新モジュールについて検証を行うかの組合せを決め、この組合せを示した組合情報を前記ソフトウェア更新装置に送信し、前記組合せの中に、前記複数の更新モジュールの中の一部の複数の更新モジュールが一方向に循環して順次検証する所定の関係を含め、前記検証結果に基づいて前記所定の関係に含まれる複数の更新モジュールを一方向に循環して検証した結果前記所定の関係に含まれる複数の更新モジュールの全てが正常であると判断し、且つ、前記所定の関係に含まれる複数の更新モジュールの判断のいずれかに矛盾がある場合、前記所定の関係に含まれる複数の更新モジュールの全てが不正動作を行う可能性があると判断する。
【０３９９】
また、本発明は、ネットワークを介して接続されている情報処理装置上で動作する不正モジュールを特定して無効化する不正モジュール特定装置であって、改ざん検出を行う複数のモジュールから、改ざん検出結果を受信する受信手段と、前記複数のモジュールのうちの一つを正常モジュールと仮定し、前記仮定に基づいて、受信した複数の改ざん検出結果における矛盾の有無を判断し、矛盾が有る場合に、正常モジュールと仮定した前記モジュールを不正モジュールと特定する判断手段と、特定された不正モジュールの無効化指示を出力する無効化手段とを備えることを特徴とする不正モジュール特定装置。
【０４００】
ここで、前記判断手段は、前記複数のモジュールから一つを選択し、正常モジュールと仮定する仮定手段と、前記仮定手段により最初に正常モジュールと仮定されたモジュールを起点とし、そのモジュールによる改ざん検出処理の結果、改ざんが検出されない検出先モジュールを正常モジュールと仮定し、続いて、この新たに正常と仮定されたモジュールによる改ざん検出処理の結果、改ざんが検出されない更に新たな検出先モジュールを正常モジュールと仮定し、以下、新たな検出先モジュールが正常でないモジュールと判定されるのを終点として、終点に至るまで、改ざん検出処理を行う側のモジュール、検出先のモジュールを順繰りにシフトして正常モジュールと仮定する処理を繰り返す繰り返し手段と、前記仮定手段および前記繰り返し手段が正常モジュールと仮定したモジュールの識別情報を記憶する仮正常モジュール記憶手段と、仮正常モジュール記憶手段に記憶された識別情報を参照して、起点から終点に至るまでのモジュールによる改ざん検出結果を照合し、矛盾があるか否かを検出する矛盾検出手段と、矛盾が検出された場合に、前記仮定手段が仮定したモジュールを不正モジュールと特定する特定手段とを備えることを特徴とする。
【０４０１】
ここで、前記判断手段は、前記繰り返し手段による処理において、終点のモジュールに至るまでのいずれかの検出先モジュールが起点のモジュールと一致することによって、一巡するモジュール間で一方向に改ざん検出処理を行っていると認められる場合、一巡するモジュールのすべてを一つの正常なモジュールに置き換える処理を行う置換手段をさらに備えることを特徴とする。
【産業上の利用可能性】
【０４０２】
本発明は、情報処理装置に対してソフトウェアを提供する更新サーバを製造および販売する産業において、前記更新サーバが、情報処理装置上で動作する不正なソフトウェアを特定し、安全にソフトウェアを更新する技術として利用することができる。
【符号の説明】
【０４０３】
１０、１０ａ、１０ｂ      ソフトウェア更新システム
１００、１００ｂ      機器
１００ａ      情報処理装置
１１０、１１１      アプリ
１２０      保護制御モジュール
１３０、１３０ｂ      更新モジュール群
１３１〜１３７      更新モジュール
１４０      アクセス制御モジュール
２００、２００ｂ      更新サーバ
２００ａ      不正モジュール特定装置
２１０、２１０ｂ      判断部
２１０ａ      判断手段
２２０      更新用ソフトウェア配布部
２３０      モジュール無効化部
２４０      通信部
３０１      受信部
３０２      送信部
３０３      制御部
３０４      更新部
３０５      検証部
３０６      値生成部
３０７      ＭＡＣ値テーブル更新部
３０８      分散情報保持部
４０１      受信部
４０２      送信部
４０３      制御部
４０４      復号ロード部
４０５      検出部
４０６      解析ツール検出部
４０７      暗復号鍵保持部
４０８      暗復号鍵生成部
４０９      暗復号鍵分散部
４１０      証明書生成部
４１１      暗復号鍵復元部
５０１      受信部
５０２      送信部
５０３      アクセス情報保持部
５６１      特定指示受信部
６０１      受信部
６０２      送信部
６０３      指示生成部
６０４、６０４ｂ      モジュール特定部
６０５      不正モジュール特定部
６０６      循環検出部
６５１      特定指示受信部
６５２      特定結果送信部
６５３      正常モジュール仮定部
６５４      検証結果判定部
６５４      証結果判定部
６５５      仮正常更新モジュール群抽出部
６５６      矛盾検出部
６５７      循環監視パターン取得部
６６１      取得指示受信部
６６２      循環監視パターン送信部
６６３      循環監視パターン取得部
６６４      取得済み循環監視パターン記憶部
６６５      監視パターン記憶部
６６６      循環監視パターン記憶部
７０１      受信部
７０２      送信部
７０３      暗号鍵生成部
７０４      暗号処理部
７０５      認証部
７０６      更新モジュール選択部
７０７      制御部
７０８      証明書生成部
７０９      署名秘密鍵保持部
７１０      更新用ソフトウェア保持部
７１１      暗号鍵保持部
８０１      受信部
８０２      送信部
８０３      アクセス情報取得鍵保持部
８０４      モジュール選択部
８０４      更新モジュール選択部
２３２０    無効化手段
２３３０    仮正常モジュール群記憶手段
２３４０    仮定手段
２３５０    仮正常モジュール群生成手段
２３６０    矛盾検出手段
２３７０    特定手段
【図１】
0005453324.tif 000002
【図２】
0005453324.tif 000003
【図３】
0005453324.tif 000004
【図４】
0005453324.tif 000005
【図５】
0005453324.tif 000006
【図６】
0005453324.tif 000007
【図７】
0005453324.tif 000008
【図８】
0005453324.tif 000009
【図９】
0005453324.tif 000010
【図１０】
0005453324.tif 000011
【図１１】
0005453324.tif 000012
【図１２】
0005453324.tif 000013
【図１３】
0005453324.tif 000014
【図１４】
0005453324.tif 000015
【図１５】
0005453324.tif 000016
【図１６】
0005453324.tif 000017
【図１７】
0005453324.tif 000018
【図１８】
0005453324.tif 000019
【図１９】
0005453324.tif 000020
【図２０】
0005453324.tif 000021
【図２１】
0005453324.tif 000022
【図２２】
0005453324.tif 000023
【図２３】
0005453324.tif 000024
【図２４】
0005453324.tif 000025
【図２５】
0005453324.tif 000026
【図２６】
0005453324.tif 000027
【図２７】
0005453324.tif 000028
【図２８】
0005453324.tif 000029
【図２９】
0005453324.tif 000030
【図３０】
0005453324.tif 000031
【図３１】
0005453324.tif 000032
【図３２】
0005453324.tif 000033
【図３３】
0005453324.tif 000034
【図３４】
0005453324.tif 000035
【図３５】
0005453324.tif 000036
【図３６】
0005453324.tif 000037
【図３７】
0005453324.tif 000038
【図３８】
0005453324.tif 000039
【図３９】
0005453324.tif 000040
【図４０】
0005453324.tif 000041
【図４１】
0005453324.tif 000042
【図４２】
0005453324.tif 000043
【図４３】
0005453324.tif 000044
【図４４】
0005453324.tif 000045
【図４５】
0005453324.tif 000046
【図４６】
0005453324.tif 000047
【図４７】
0005453324.tif 000048
【図４８】
0005453324.tif 000049
【図４９】
0005453324.tif 000050
【図５０】
0005453324.tif 000051
【図５１】
0005453324.tif 000052
【図５２】
0005453324.tif 000053
【図５３】
0005453324.tif 000054
【図５４】
0005453324.tif 000055
【図５５】
0005453324.tif 000056
【図５６】
0005453324.tif 000057
【図５７】
0005453324.tif 000058
【図５８】
0005453324.tif 000059
【図５９】
0005453324.tif 000060
【図６０】
0005453324.tif 000061
【図６１】
0005453324.tif 000062
【図６２】
0005453324.tif 000063
【図６３】
0005453324.tif 000064
【図６４】
0005453324.tif 000065
【図６５】
0005453324.tif 000066
【図６６】
0005453324.tif 000067
【図６７】
0005453324.tif 000068
【図６８】
0005453324.tif 000069
【図６９】
0005453324.tif 000070
【図７０】
0005453324.tif 000071
【図７１】
0005453324.tif 000072
【図７２】
0005453324.tif 000073
【図７３】
0005453324.tif 000074
【図７４】
0005453324.tif 000075
【図７５】
0005453324.tif 000076
【図７６】
0005453324.tif 000077
【図７７】
0005453324.tif 000078
【図７８】
0005453324.tif 000079
【図７９】
0005453324.tif 000080
【図８０】
0005453324.tif 000081