(57)【要約】  所定のアプリケーションが改ざんされていないかを検証する保護制御モジュール（１２０）を更新する更新用の保護制御モジュール（１２１）を外部サーバ（２００）から受信し、前記保護制御モジュールを更新する更新モジュールを複数含む更新モジュール群（１３０）を備え、前記更新モジュール群に含まれる複数の更新モジュールの各々は、同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証を行い、前記複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合、前記更新モジュール群に含まれる他の更新モジュールが、前記不正動作を行う可能性があると検証された更新モジュールを無効化することを特徴とするソフトウェア更新装置。
2009118801.tif 000002
【特許請求の範囲】
【請求項１】
所定のアプリケーションと、
前記所定のアプリケーションが改ざんされていないかを検証する保護制御モジュールと、
前記保護制御モジュールを更新する更新用の保護制御モジュールを外部サーバから受信し前記保護制御モジュールを更新する更新モジュールを複数含む更新モジュール群と、を備え、
前記更新モジュール群に含まれる複数の更新モジュールの各々は、
同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証を行い、
前記複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合、前記更新モジュール群に含まれる他の更新モジュールが、前記不正動作を行う可能性があると検証された更新モジュールを無効化する
ことを特徴とするソフトウェア更新装置。
【請求項２】
前記更新モジュール群に含まれる複数の更新モジュールの各々を無効化するための所定の情報を格納し、所定の暗号鍵で暗号化されたアクセス制御モジュールをさらに備え、
前記他の更新モジュールは、前記外部サーバにアクセスして前記外部サーバから前記所定の暗号鍵に対応した復号鍵を取得し、前記取得した復号鍵を用いてアクセス制御モジュールを復号し、
前記不正動作を行う可能性があると検証された更新モジュールを無効化するための所定の情報を前記アクセス制御モジュールから取得し、前記所定の情報に基づいて前記不正動作を行う可能性があると検証された更新モジュールを無効化する
ことを特徴とする請求項１記載のソフトウェア更新装置。
【請求項３】
前記更新モジュール群に含まれる複数の更新モジュールの各々を無効化するための所定の情報を格納しているアクセス制御モジュールをさらに備え、
前記所定の情報は、更新モジュール毎に異なる暗号鍵で暗号化されており、
前記他の更新モジュールは、前記外部サーバにアクセスし、前記不正動作を行う可能性があると検証された更新モジュールに関する所定の情報を暗号化した暗号鍵に対応した復号鍵を前記外部サーバから取得し、前記不正動作を行う可能性があると検証された更新モジュールに関する所定の情報を前記取得した復号鍵を用いて復号し、
前記復号された所定の情報に基づいて前記不正動作を行う可能性があると検証された更新モジュールを無効化する
ことを特徴とする請求項１記載のソフトウェア更新装置。
【請求項４】
前記所定の情報は、前記更新モジュール群に含まれる複数の更新モジュールの各々の格納位置情報である
ことを特徴とする請求項２または３の何れかに記載のソフトウェア更新装置。
【請求項５】
前記所定の情報は、前記更新モジュール群に含まれる複数の更新モジュールの各々を無効化するための処理手順を示す情報である
ことを特徴とする請求項２または３の何れかに記載のソフトウェア更新装置。
【請求項６】
前記他の更新モジュールは、前記格納位置情報に基づいて、前記不正動作を行う可能性があると検証された更新モジュールの全体を消去することで無効化する
ことを特徴とする請求項４記載のソフトウェア更新装置。
【請求項７】
前記格納位置情報は、前記更新モジュールが無効化される際に消去される消去部分を示し、
前記他の更新モジュールは、前記格納位置情報に基づいて、前記不正動作を行う可能性があると検証された更新モジュールの消去部分を消去することで無効化する
ことを特徴とする請求項４記載のソフトウェア更新装置。
【請求項８】
前記格納位置情報は、前記更新モジュールが無効化される際に消去されるコード部分を示し、
前記他の更新モジュールは、前記格納位置情報に基づいて、前記不正動作を行う可能性があると検証された更新モジュールのコード部分を消去することで無効化する
ことを特徴とする請求項４記載のソフトウェア更新装置。
【請求項９】
前記他の更新モジュールは、前記不正動作を行う可能性があると検証された更新モジュールを無効化した場合、前記アクセス制御モジュールに格納されている、無効化した更新モジュールについての所定の情報を消去する
ことを特徴とする請求項２または３の何れかに記載のソフトウェア更新装置。
【請求項１０】
前記無効化は、前記不正動作を行う可能性があると検証された更新モジュールが、検証対象となる更新モジュールを検証する際に参照する、当該検証対象の更新モジュールにアクセスするための情報を消去することである
ことを特徴とする請求項１記載のソフトウェア更新装置。
【請求項１１】
前記無効化は、前記不正動作を行う可能性があると検証された更新モジュールが、前記保護制御モジュールにアクセスするための情報を消去することである
ことを特徴とする請求項１記載のソフトウェア更新装置。
【請求項１２】
前記複数の更新モジュールの各々による検証は、当該更新モジュールが自更新モジュールを検証する場合を含む
ことを特徴とする請求項１記載のソフトウェア更新装置。
【請求項１３】
自更新モジュールが不正動作を行う可能性があることを検証した場合には、前記自更新モジュールは前記自更新モジュールを無効化する
ことを特徴とする請求項１２記載のソフトウェア更新装置。
【請求項１４】
前記複数の更新モジュールの各々は、前記選定した更新モジュールのハッシュ値を算出し、当該更新モジュールに予め付加されているハッシュ値と、算出したハッシュ値が一致するか判断することにより、前記検証を行う
ことを特徴とする請求項１記載のソフトウェア更新装置。
【請求項１５】
ソフトウェア更新装置と当該ソフトウェア更新装置に接続されるサーバとを含むソフトウェア更新システムであって、
前記ソフトウェア更新装置は、
所定のアプリケーションと、
前記所定のアプリケーションが改ざんされていないかを検証する保護制御モジュールと、
前記保護制御モジュールを更新する更新用の保護制御モジュールを前記サーバから受信し前記保護制御モジュールを更新する更新モジュールを複数含む更新モジュール群と、を備え、
前記サーバは、
前記保護制御モジュールを更新する更新用の保護制御モジュールを格納する格納部と、
前記更新用の保護制御モジュールを前記ソフトウェア更新装置に送信する通信部と、を備え、
前記更新モジュール群に含まれる複数の更新モジュールの各々は、
同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証を行い、
前記複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合、前記更新モジュール群に含まれる他の更新モジュールが、前記不正動作を行う可能性があると検証された更新モジュールを無効化する
ことを特徴とするソフトウェア更新システム。
【請求項１６】
無効化方法であって、
所定のアプリケーションが改ざんされていないかを検証する保護制御モジュールと、前記保護制御モジュールを更新する更新用の保護制御モジュールを外部サーバから受信し前記保護制御モジュールを更新する更新モジュールを複数含む更新モジュール群とを起動する起動ステップと、
前記所定のアプリケーションを実行する実行ステップとを含み、
前記更新モジュール群に含まれる複数の更新モジュールの各々は、
同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証を行い、
前記複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合、前記更新モジュール群に含まれる他の更新モジュールが、前記不正動作を行う可能性があると検証された更新モジュールを無効化する
ことを特徴とする無効化方法。
【請求項１７】
無効化プログラムであって、
前記無効化プログラムは、
所定のアプリケーションが改ざんされていないかを検証する保護制御モジュールと、
前記保護制御モジュールを更新する更新用の保護制御モジュールを外部サーバから受信し前記保護制御モジュールを更新する更新モジュールを複数含む更新モジュール群と、を含み、
前記更新モジュール群に含まれる複数の更新モジュールの各々は、
同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証する検証手順と、
前記複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合、前記更新モジュール群に含まれる他の更新モジュールが、前記不正動作を行う可能性があると検証された更新モジュールを無効化する無効化手順とを含む処理をコンピュータに行わせる
無効化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機器内部で動作するモジュール等を無効化する技術に関する。
【背景技術】
【０００２】
従来、認証鍵等の秘匿データを有しているアプリケーションが、悪意のある第三者（以下、「攻撃者」という）に解析されないよう、耐タンパモジュールを備えた機器が知られている。耐タンパモジュールは、ハードウェアとして機器上に実装されるが、日々新たな攻撃手法が考案される昨今の現状を踏まえると、新たな攻撃手法に柔軟に対応するためにも、更新が容易なソフトウェアでアプリケーションを保護することが望ましい。ソフトウェアによるアプリケーションの保護には、例えば、ハッシュ値を用いた改ざん検証や、アプリケーションを利用しない時には暗号化して保存しておき、利用する時にのみ復号してメモリへロードする復号ロード機能等がある。ところが、その場合には、アプリケーションを保護するソフトウェア（以下、「保護制御モジュール」という）自体が攻撃者により攻撃され得る。保護制御モジュールが改ざんされると、アプリケーションが攻撃者の攻撃にさらされることになる。【０００３】
そこで、保護制御モジュールの改ざん検出を行い、保護制御モジュールが改ざんされた場合には、ネットワークを通して外部のサーバから正常な保護制御モジュールを機器にダウンロードし更新する方法が考えられる。このような保護制御モジュールの改ざん検出に関する先行技術としては、特許文献１に記載のものがある。
【特許文献１】特許第３０５６７３２号公報（第４〜６頁、図２）
【非特許文献１】岡本龍明、山本博資、「現代暗号」、産業図書（１９９７年）
【非特許文献２】ITU-Ｔ Recommendation X.509 (1997 E): Information Technology - Open Systems Interconnection - The Directory: Authentication Framework,1997
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、保護制御モジュールを更新する機能を担うモジュール（以下、「更新モジュール」という）も攻撃者により攻撃され得る。攻撃者による攻撃で更新モジュールが改ざんされ、当該更新モジュールにより保護制御モジュールの更新が行われると、保護制御モジュールが正しく更新されず、アプリケーションが有する秘匿データが漏洩する恐れがある。更新モジュールの改ざん検出を行うモジュールをさらに備えることにより、更新モジュールの改ざんを検出することは可能となるが、当該モジュール自体もやはり改ざんされる恐れがあるため、根本的な解決には至らない。【０００５】
以上は、保護制御モジュールの更新例を用いて説明したが、保護制御モジュールの更新以外に、アプリケーションや更新モジュール自身を更新することも考えられる。このような場合もそれらが正しく更新されないことにより同様の課題が生じる。【０００６】
本発明は、改ざんされた更新モジュールによる不正な動作を防止するソフトウェア更新装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、本発明の一実施態様であるソフトウェア更新装置は、所定のアプリケーションと、前記所定のアプリケーションが改ざんされていないかを検証する保護制御モジュールと、前記保護制御モジュールを更新する更新用の保護制御モジュールを外部サーバから受信し前記保護制御モジュールを更新する更新モジュールを複数含む更新モジュール群と、を備え、前記更新モジュール群に含まれる複数の更新モジュールの各々は、同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証を行い、前記複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合、前記更新モジュール群に含まれる他の更新モジュールが、前記不正動作を行う可能性があると検証された更新モジュールを無効化することを特徴とする。
【発明の効果】
【０００８】
上記課題を解決するための手段に記載の構成により、更新モジュール群に含まれる複数の更新モジュールの各々は、同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証を行うので、同時に起動している全ての更新モジュールに対して不正動作を行わないか検証が行われる。同時に起動している全ての更新モジュールの検証を実現することができるので、改ざんされた更新モジュールがあればそれを発見でき、一つでも正常な更新モジュールが存在すれば、当該更新モジュールにより改ざんされた更新モジュールを無効化することができるので、改ざんされた更新モジュールを排除でき、更新モジュール全体としての安全性を確保することができる。その結果、改ざんされた更新モジュールによる不正な動作（例えば、不正な保護制御モジュールに更新する）を防止することができるので、改ざんされた更新モジュールを介して保護制御モジュールが不正な保護制御モジュールに更新されるのを防止でき、前記不正な保護制御モジュールによる前記所定のアプリケーションへの攻撃を防止できる。ゆえに、アプリケーションが有する秘匿データが漏洩するリスクを低減することができる。【０００９】
さらに、更新モジュールが無効化機能を備えることにより、別途無効化する手段を設ける必要はなく、簡易な構成で改ざんされたモジュールを排除することができる。【００１０】
ここで、前記更新モジュール群に含まれる複数の更新モジュールの各々を無効化するための所定の情報を格納し、所定の暗号鍵で暗号化されたアクセス制御モジュールをさらに備え、前記他の更新モジュールは、前記外部サーバにアクセスして前記外部サーバから前記所定の暗号鍵に対応した復号鍵を取得し、前記取得した復号鍵を用いてアクセス制御モジュールを復号し、前記不正動作を行う可能性があると検証された更新モジュールを無効化するための所定の情報を前記アクセス制御モジュールから取得し、前記所定の情報に基づいて前記不正動作を行う可能性があると検証された更新モジュールを無効化するとしてもよい。【００１１】
これにより、アクセス制御モジュールが複数の更新モジュールの各々を無効化するための所定の情報を格納しているので、複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合に当該更新モジュールを無効化するための所定の情報の特定が容易となり、当該更新モジュールを無効化する処理を簡易に行うことができる。【００１２】
また、アクセス制御モジュールは所定の暗号鍵で暗号化されているので、所定の情報が外部に漏れるのを防止できる。したがって、例えば、不正動作を行う可能性があると検証された更新モジュールを無効化するための所定の情報が事前に書き換えられて、当該更新モジュールが無効化されずに残存することを防止することができる。【００１３】
さらに、他の更新モジュールは、外部サーバから復号鍵を取得するので、当該復号鍵がソフトウェア更新装置への攻撃により漏洩することはなく、復号鍵の秘匿性を担保できる。加えて、他の更新モジュールは、取得した復号鍵を用いてアクセス制御モジュールを復号し、不正動作を行う可能性があると検証された更新モジュールを無効化するための所定の情報をアクセス制御モジュールから取得し、当該所定の情報に基づいて当該更新モジュールを無効化するので、当該所定の情報の秘匿性を担保しつつ当該所定の情報を無効化に利用でき、不正動作を行う可能性があると検証された更新モジュールが無効化されずに残存することなく確実に無効化できる。【００１４】
ここで、前記更新モジュール群に含まれる複数の更新モジュールの各々を無効化するための所定の情報を格納しているアクセス制御モジュールをさらに備え、前記所定の情報は、更新モジュール毎に異なる暗号鍵で暗号化されており、前記他の更新モジュールは、前記外部サーバにアクセスし、前記不正動作を行う可能性があると検証された更新モジュールに関する所定の情報を暗号化した暗号鍵に対応した復号鍵を前記外部サーバから取得し、前記不正動作を行う可能性があると検証された更新モジュールに関する所定の情報を前記取得した復号鍵を用いて復号し、前記復号された所定の情報に基づいて前記不正動作を行う可能性があると検証された更新モジュールを無効化するとしてもよい。【００１５】
これにより、アクセス制御モジュールが格納している所定の情報は、更新モジュール毎に異なる暗号鍵で暗号化されているので、所定の情報において全ての更新モジュールで共通の復号鍵を用いる場合に、当該復号鍵が漏洩した場合に全ての更新モジュールについての所定の情報が漏洩する危険があるのに対し、復号鍵が漏洩した場合の被害を最小限に抑えることができる。したがって、不正動作を行う可能性があると検証された更新モジュールに対応する所定の情報が事前に書き換えられて、当該更新モジュールが無効化されずに残存する危険性を減少させることができる。【００１６】
ここで、前記所定の情報は、前記更新モジュール群に含まれる複数の更新モジュールの各々の格納位置情報であるとしてもよい。【００１７】
また、前記他の更新モジュールは、前記格納位置情報に基づいて、前記不正動作を行う可能性があると検証された更新モジュールの全体を消去することで無効化するとしてもよい。【００１８】
これにより、他の更新モジュールは、不正動作を行う可能性があると検証された更新モジュールに対応する格納位置情報に基づいて、当該更新モジュール全体を消去することで無効化するので、当該更新モジュールは完全に無効化され、当該更新モジュールの再起動を確実に阻止することができる。【００１９】
ここで、前記格納位置情報は、前記更新モジュールが無効化される際に消去される消去部分を示し、前記他の更新モジュールは、前記格納位置情報に基づいて、前記不正動作を行う可能性があると検証された更新モジュールの消去部分を消去することで無効化するとしてもよい。【００２０】
これにより、格納位置情報は、更新モジュールが無効化される際に消去される消去部分を示しているので、不正動作を行う可能性があると検証された更新モジュールを無効化する際に当該更新モジュールの全てを無効化する場合と比較し、当該更新モジュールの起動を不能にしつつ無効化する際の処理負担を軽減することができる。【００２１】
ここで、前記格納位置情報は、前記更新モジュールが無効化される際に消去されるコード部分を示し、前記他の更新モジュールは、前記格納位置情報に基づいて、前記不正動作を行う可能性があると検証された更新モジュールのコード部分を消去することで無効化するとしてもよい。【００２２】
これにより、格納位置情報は、更新モジュールが無効化される際に消去されるコード部分を示しているので、不正動作を行う可能性があると検証された更新モジュールを無効化する際に当該更新モジュールの全てを無効化する場合と比較し、当該更新モジュールの起動を不能にしつつ無効化する際の処理負担を軽減することができる。【００２３】
ここで、前記他の更新モジュールは、前記不正動作を行う可能性があると検証された更新モジュールを無効化した場合、前記アクセス制御モジュールに格納されている、無効化した更新モジュールについての所定の情報を消去するとしてもよい。【００２４】
これにより、無効化された更新モジュールに対応する所定の情報が外部に漏洩することはないので、当該更新モジュールを再度有効にすることを阻止することができる。
【図面の簡単な説明】
【００２５】
【図１】ソフトウェア更新システム１０００の全体構成図である。
【図２】更新モジュール１３１の機能ブロック図である。
【図３】更新用ソフトウェア配布モジュール２１０の機能ブロック図である。
【図４】保護制御モジュール１２０の機能ブロック図である。
【図５】アクセス制御モジュール１４０の機能ブロック図である。
【図６】アクセス情報取得鍵配布モジュール２２０の機能ブロック図である。
【図７】機器１００のハードウェア構成を示す図である。
【図８】機器１００のソフトウェア階層を示す図である。
【図９】ソフトウェア更新システム１０００の全体的な動作の流れを示すフローチャートである。
【図１０】機器１００に埋め込まれる鍵を模式的に示す図である。
【図１１】初期設計時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１２】更新モジュール初期化処理を示すフローチャートである。
【図１３】検知時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１４】解析・判断時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１５】解析・判断時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１６】更新モジュール１３１が更新用ソフトウェア配布モジュール２１０を認証する時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１７】更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証する時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１８】回復処理時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１９】監視処理を示すフローチャートである。
【図２０】保護制御モジュールの更新処理を示すフローチャートである。
【図２１】保護制御モジュールの更新処理を示すフローチャートである。
【図２２】保護制御モジュールの更新処理を示すフローチャートである。
【図２３】監視処理と更新処理との連携動作の流れを模式的に示す図である。
【図２４】再暗号化処理を示すフローチャートである。
【図２５】次ラウンド準備時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図２６】無効化時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図２７】更新モジュールの更新処理を示すフローチャートである。
【図２８】更新モジュールの更新処理を示すフローチャートである。
【図２９】更新モジュールの更新処理を示すフローチャートである。
【図３０】脱退処理の動作の流れを示す流れ図である。
【図３１】部分情報の生成処理の動作の流れを示す流れ図である。
【図３２】部分情報の検証処理の動作の流れを示す流れ図である。
【図３３】脱退時の第１更新処理における更新モジュール１２２A、１２３A及び１２４Aの動作の流れを示す流れ図である。
【図３４】脱退時の第１更新処理における更新モジュール１２５A及び１２６Aの動作の流れを示す流れ図である。
【図３５】脱退時の第２更新処理における更新モジュール１２２A、１２６Aの動作の流れを示す流れ図である。
【図３６】脱退処理後における更新モジュール１２２Aから１２６Aそれぞれが保持する３つの分散情報を示す図である。
【図３７】追加処理の動作の流れを示す流れ図である。
【図３８】配布処理の動作の流れを示す流れ図である。
【図３９】分散情報の動作の流れを示す流れ図である。
【図４０】他モジュール分散情報の格納処理の動作の流れを示す流れ図である。
【図４１】追加時の第１分割処理の動作の流れを示す流れ図である。
【図４２】追加時の第１更新処理における更新モジュール１２１A及び１２２Aの動作の流れを示す流れ図である。
【図４３】追加時の第１更新処理における更新モジュール１２３A、１２４A及び１２５Aの動作の流れを示す流れ図である。
【図４４】追加時の第１更新処理における更新モジュール１２６A及び１２７Aの動作の流れを示す流れ図である。
【図４５】追加時の第２分割処理の動作の流れを示す流れ図である。
【図４６】追加時の第２更新処理における更新モジュール１２１A、１２２A及び１２３Aの動作の流れを示す流れ図である。
【図４７】追加時の第２更新処理における更新モジュール１２４A及び１２５Aの動作の流れを示す流れ図である。
【図４８】追加時の第２更新処理における更新モジュール１２６A及び１２７Aの動作の流れを示す流れ図である。
【図４９】追加処理後における更新モジュール１２１Aから１２７Aそれぞれが保持する３つの分散情報を示す図である。
【符号の説明】
【００２６】
１０００  ソフトウェア更新システム
１００    機器
１１０    アプリケーション
１１１    アプリケーション
１２０    保護制御モジュール
１３０    更新モジュール群
１３１    更新モジュール
１３２    更新モジュール
１３３    更新モジュール
１４０    アクセス制御モジュール
２００    更新サーバ
２１０    更新用ソフトウェア配布モジュール
２２０    アクセス情報取得鍵配布モジュール
３０１    監視制御部
３０２    改ざんチェック実行部
３０３    更新制御部
３０４    復号部
３０５    認証部
３０６    署名公開鍵保持部
３０７    検証鍵保持部
３０８    認証鍵対保持部
３０９    MAC値保持部
３１０    分散情報保持部
３１１    アクセス情報取得部
３１２    無効化処理部
４０１    暗号鍵生成部
４０２    暗号処理部
４０３    暗号鍵保持部
４０４    認証部
４０５    更新判定部
４０６    不正モジュール判定部
４０７    更新モジュール選択部
４０８    証明書生成部
４０９    署名秘密鍵保持部
４１０    更新用ソフトウェア保持部
５０１    制御部
５０２    復号ロード部
５０３    改ざん検出部
５０４    解析ツール検出部
５０５    暗復号鍵保持部
５０６    暗復号鍵生成部
５０７    暗復号鍵分散部
５０８    証明書生成部
５０９    暗復号鍵復元部
６０１    通信部
６０２    アクセス情報保持部
７０１    通信部
７０２    アクセス情報取得鍵保持部
【発明を実施するための最良の形態】
【００２７】
以下、図面に基づき本発明の実施の形態を説明する。
（実施の形態１）
１．ソフトウェア更新システム１０００の構成
図１は、本発明の実施の形態１において、本発明に係るソフトウェア更新装置が適用されたソフトウェア更新システム１０００の全体構成図である。ソフトウェア更新システム１０００は、図１に示すように、機器１００と更新サーバ２００とから構成され、機器１００は、ネットワークを介して更新サーバ２００と接続されている。【００２８】
１．１．機器１００の構成
機器１００は、ネットワークを介して、例えば、コンテンツ配信サーバから音楽や映像等のコンテンツを購入し再生したり、金融機関のシステムにアクセスし、ネットバンキング（預金の残高照会や口座振り込み等）を行ったりするなど、ユーザに対してネットワークを利用した様々な機能を提供するデータ処理装置である。【００２９】
機器１００は、アプリケーションソフト（以下、「アプリ」という）１１０、１１１と、保護制御モジュール１２０と、更新モジュール群１３０と、アクセス制御モジュール１４０とを含んで構成される。【００３０】
アプリ１１０、１１１は、機器１００を使用するユーザに対して、ネットワークを利用した機能を提供するソフトウェアであり、例えば、ネットワーク上のコンテンツ配信サーバ（不図示）から音楽や映像等のコンテンツを購入し、購入したコンテンツを再生するソフトウェアや、ネットワークを介して金融機関のシステム（不図示）にアクセスし、預金の残高照会や口座振り込み等のネットバンキングを行うソフトウェア等である。【００３１】
アプリ１１０、１１１は、コンテンツ配信サーバや金融機関のシステムと認証を行うための認証鍵等の秘匿データを有している。この秘匿データは、悪意のある第三者（以下、「攻撃者」という）によりアプリから抜き取られ、不正に利用されないよう、保護される必要がある。【００３２】
保護制御モジュール１２０は、攻撃者によりアプリ１１０、１１１が解析され、認証鍵等の秘匿データが抜き取られないようにアプリ１１０、１１１を保護するための機能を有するモジュールである。アプリを保護するための機能としては、例えば、アプリを利用しない時には暗号化して保存しておき、アプリを利用する時にのみ復号してメモリへロードする復号ロード機能や、アプリが改ざんされていないかをチェックする改ざん検出機能、デバッガなどの解析ツールが動作していないかをチェックする解析ツール検出機能などがある。保護制御モジュール１２０は、これらの機能の動作を制御し、アプリ１１０、１１１を保護する。【００３３】
保護制御モジュール１２０は、改ざん検出機能や解析ツール検出機能により、攻撃者による攻撃を検出した場合には、アプリ１１０、１１１の動作を停止し、アプリ１１０、１１１が利用していたメモリ領域、特に秘匿データが記憶されたメモリ領域のクリア処理等を行い、秘匿データの漏洩を防止する。【００３４】
更新モジュール群１３０は、複数の更新モジュール（ここでは３つ）から構成される。更新モジュール１３１、１３２、１３３は、機器１００内部のソフトウェア（ここでは保護制御モジュール１２０）が改ざんされていないかを検出し、改ざんされている場合には、機器１００外部の更新サーバ２００から更新用のソフトウェア（保護制御モジュール１２１）をダウンロードし保護制御モジュールを更新する機能を持つ。【００３５】
また、更新モジュール１３１、１３２、１３３は、攻撃者によって更新モジュール自体が改ざんされ、改ざんされた更新モジュールが不正に利用されることを防止するために、更新モジュール間で改ざん検出を実施する。更新モジュールの改ざんが検出された場合には、他の正常な更新モジュールは、後述するアクセス制御モジュール１４０から暗号化アクセス情報を、後述するアクセス情報取得鍵配布モジュールからアクセス情報取得鍵をそれぞれ取得し、取得した暗号化アクセス情報とアクセス情報取得鍵とに基づいて、改ざんされた更新モジュールを無効化する。これにより、更新モジュール群に含まれる一部の更新モジュールが攻撃され、改ざんされた場合であっても、それを検出し、攻撃に対処することが可能となる。【００３６】
アクセス制御モジュール１４０は、更新モジュール１３１、１３２、１３３が他の更新モジュールを消去するために必要な情報（アクセス情報）を保持するモジュールである。アクセス情報は、消去対象となる更新モジュールを消去するために必要な情報（例えば、更新モジュールを消去するための専用ドライバや更新モジュールが配置されているアドレス、消去に必要な手順が書かれた手順書等）であり、更新モジュール毎にそれぞれ個別のアクセス情報取得鍵で暗号化されている。【００３７】
１．２．更新サーバ２００の構成
更新サーバ２００は、機器１００内部のソフトウェア（ここでは保護制御モジュール１２０）を更新するために必要な更新用のソフトウェア（保護制御モジュール１２１）を機器１００に配布するソフトウェア配布装置である。【００３８】
更新サーバ２００は、更新用ソフトウェア配布モジュール２１０とアクセス情報取得鍵配布モジュール２２０とを含んで構成される。【００３９】
更新用ソフトウェア配布モジュール２１０は、機器１００内部のソフトウェア（保護制御モジュール１２０）が更新される際に、更新モジュール１３１、１３２、１３３と連携して動作し、更新用のソフトウェア（保護制御モジュール１２１）を機器１００へ安全に送信するためのモジュールである。【００４０】
アクセス情報取得鍵配布モジュール２２０は、機器１００内部の更新モジュール１３１、１３２、１３３からのアクセス情報取得鍵取得要求に応じて、アクセス情報取得鍵を更新モジュールへ配布するモジュールである。【００４１】
機器１００内部のソフトウェア（保護制御モジュール１２０、更新モジュール１３１、１３２、１３３）が攻撃され改ざんされた場合には、改ざんされていない更新モジュールとアクセス制御モジュール１４０とアクセス情報取得鍵配布モジュール２２０とが連係して動作し、改ざんされたソフトウェアを消去または更新する。【００４２】
なお、機器１００と更新サーバ２００との間のネットワークを介した通信には、通信データが暗号化されるなど、セキュリティの確保された通信路を用いてもよい。【００４３】
続いて、各モジュールの詳細を順に説明する。
２．更新モジュールの詳細な構成
図２は、更新モジュールの機能ブロック図である。実際には、この構成は更新モジュールの数だけ存在するが、ここでは、代表的に更新モジュール１３１のものだけ示す。他の更新モジュールの構成も基本的に同一構成である。同図に示すように、更新モジュール１３１は、監視制御部３０１、改ざんチェック実行部３０２、更新制御部３０３、復号部３０４、認証部３０５、署名公開鍵保持部３０６、検証鍵保持部３０７、認証鍵対保持部３０８、MAC値保持部３０９、分散情報保持部３１０、アクセス情報取得部３１１、及び無効化処理部３１２を含んで構成される。【００４４】
監視制御部３０１は、予め設定されている、改ざん検出対象となる更新モジュール（ここでは更新モジュール１３２）の識別子を保持しており、更新用ソフトウェア配布モジュール２１０から更新処理開始指示を受け付けると、識別子に対応する更新モジュールの改ざんチェックを、予め設定されているタイミングで、改ざんチェック実行部３０２に指示する。改ざん検出のタイミングについての詳細は、後述する。【００４５】
改ざんチェック実行部３０２は、監視制御部３０１から改ざんチェック指示を受け付けると、識別子に対応する更新モジュールの改ざんチェックを実施し、改ざんチェック結果を更新用ソフトウェア配布モジュール２１０に送信する。【００４６】
また、定期的あるいは不定期に、保護制御モジュール１２０の改ざんチェックを実施し、改ざんを検出した場合には、更新ソフトウェア配布モジュール２１０及び他の更新モジュールに改ざん検出通知を送信する。その一方で、他の更新モジュールから保護制御モジュール１２０の改ざん検出通知を受け付けた場合には、保護制御モジュール１２０の改ざんチェックを実施し、チェック結果を更新用ソフトウェア配布モジュール２１０に送信する。【００４７】
また、機器１００の全体の制御を司る制御部（不図示）から、初期化指示を受信すると、署名公開鍵保持部３０６から署名公開鍵を取得し、取得した署名公開鍵を用いて、改ざん検出対象となる更新モジュール及び保護制御モジュール１２０の改ざんチェックを行う。改ざんチェック結果に応じて、検証鍵保持部３０７から検証鍵を取得し、取得した検証鍵を用いて改ざん検出対象となる更新モジュール及び保護更新モジュール１２０のMAC値を生成し、各々のモジュールの識別子と対応付けて、MAC値保持部３０９に送信する。【００４８】
さらに、更新用ソフトウェア配布モジュール２１０から更新処理終了通知を受け付けると、検証鍵保持部３０７から検証鍵を取得し、取得した検証鍵を用いて保護制御モジュール１２１のMAC値を生成し、MAC値保持部３０９に送信する。【００４９】
更新制御部３０３は、機器１００内部のソフトウェア（保護制御モジュール１２０）の更新を制御する。具体的には、他の更新モジュールまたは更新用ソフトウェア配布モジュール２１０から、暗号化されている更新用の保護制御モジュール１２１を受け取り、更新用ソフトウェア配布モジュール２１０から、更新用の保護制御モジュール１２１の証明書（例えば、更新用の保護制御モジュール１２１のハッシュ値が記述されている）、及び更新用の保護制御モジュール１２１を復号するための復号鍵を受け取ると、当該更新用の保護制御モジュール１２１を復号部３０４に復号させ、復号された更新用の保護制御モジュール１２１を他の更新モジュールへ送信し、あるいは機器１００内部の保護制御モジュール１２０を復号された更新用の保護制御モジュール１２１に更新する。【００５０】
また、更新用の保護制御モジュール１２１に更新した後、または他の更新モジュールから更新終了通知を受け付けると、更新用ソフトウェア配布モジュール２１０から受け取った証明書を用いて保護制御モジュールが正しく更新されたかの検証を行い、検証結果を更新用ソフトウェア配布モジュール２１０に送信する。【００５１】
復号部３０４は、暗号化された更新用の保護制御モジュール１２１の復号を更新制御部３０３から依頼されると、更新制御部３０３から入力される復号鍵を用いて、暗号化された更新用の保護制御モジュール１２１を復号する。更新用ソフトウェア配布モジュール２１０から入力される復号鍵は、復号部３０４が保持する、更新モジュール１３１固有の鍵を用いて暗号化された状態あるため、復号部３０４は、復号鍵を使用する前に、更新モジュール１３１固有の鍵を用いて当該復号鍵を復号する。【００５２】
認証部３０５は、更新用ソフトウェア配布モジュール２１０から認証処理開始指示を受け付けると、更新用ソフトウェア配布モジュール２１０と相互認証の処理を行い、互いに正しい権利を持ったソフトウェアであることを確認する。具体的には、認証鍵対保持部３０８から認証鍵を取得し、取得した認証鍵を用いて更新サーバ２００を認証する。【００５３】
署名公開鍵保持部３０６は、署名公開鍵を保持する。署名公開鍵は、更新モジュール１３１が機器１００内のソフトウェア（保護制御モジュール１２０）の改ざんチェックを、改ざん検出用証明書を用いて行う場合に使用される。署名公開鍵と更新用ソフトウェア配布モジュール２１０が保持する署名秘密鍵とは、公開鍵暗号方式における鍵対になる。【００５４】
検証鍵保持部３０７は、検証鍵を保持する。検証鍵は、更新モジュール１３１が機器１００内のソフトウェア（保護制御モジュール１２０）の改ざんチェックを、メッセージ認証コード（ＭＡＣ）値を用いて行う場合に使用される。【００５５】
認証鍵対保持部３０８は、認証鍵対を保持する。認証鍵対は、更新モジュール１３１と更新用ソフトウェア配布モジュール２１０とが相互認証処理を行うときに用いられる。認証鍵対は、公開鍵暗号方式における公開鍵（認証公開鍵）と秘密鍵（認証秘密鍵）との鍵対で構成される。認証公開鍵には、更新用ソフトウェア配布モジュール２１０が保持する署名秘密鍵を用いて生成された証明書（認証鍵証明書）が付加されている。【００５６】
ＭＡＣ値保持部３０９は、改ざんチェック実行部３０２から入力される、改ざん検出対象となる更新モジュール及び保護更新モジュール１２０のMAC値と、各々のモジュールの識別子との対を保持する。【００５７】
分散情報保持部３１０は、保護制御モジュール１２０から入力される、分散情報（ｓｈａｒｅ）と暗復号鍵証明書とを保持する。【００５８】
アクセス情報取得部３１１は、更新用ソフトウェア配布モジュール２１０から、改ざんされた更新モジュールの無効化指示を受け付けると、アクセス情報取得鍵配布モジュール２２０に対しアクセス情報取得鍵の送付を依頼し、アクセス情報取得鍵を取得する。さらに、アクセス制御モジュール１４０から暗号化アクセス情報を取得し、アクセス情報取得鍵を用いて暗号化アクセス情報を復号し、復号されたアクセス情報を取得し、無効化処理部３１２に送信する。【００５９】
無効化処理部３１２は、アクセス情報取得部３１３から入力されるアクセス情報に基づいて、改ざんされた更新モジュールを無効化する。無効化する方法としては、無効化対象の更新モジュールを全て消去する方法の他、改ざんされた部分や秘匿すべきデータなど無効化対象となる更新モジュールの一部を消去する方法や、機器１００内部のプログラムやデータを読み込むための機能を消去する方法等がある。なお、無効化処理部３１２は、アクセス情報を取得するまで、ソフトウェアを無効化することはできない。【００６０】
署名方式に関しては非特許文献１に、証明書に関しては非特許文献２に詳しく説明されているので、ここでの説明は省略する。
３．更新用ソフトウェア配布モジュール２１０の詳細な構成
図３は、本発明の実施の形態１における更新用ソフトウェア配布モジュール２１０の機能ブロック図である。同図に示すように、更新用ソフトウェア配布モジュール２１０は、暗号鍵生成部４０１、暗号処理部４０２、暗号鍵保持部４０３、認証部４０４、更新判定部４０５、不正モジュール判定部４０６、更新モジュール選択部４０７、証明書生成部４０８、署名秘密鍵保持部４０９、及び更新用ソフトウェア保持部４１０から構成される。【００６１】
暗号鍵生成部４０１は、更新判定部４０５から保護制御モジュール１２０を更新する旨の通知を受け付けると、更新用の保護制御モジュール１２１を暗号化するための暗号鍵を複数生成し、生成した複数の暗号鍵を暗号鍵保持部４０３及び暗号処理部４０２に送信する。【００６２】
暗号処理部４０２は、更新用ソフトウェア保持部４１０から更新用の保護制御モジュール１２１を取得し、暗号鍵生成部４０１から入力される複数の暗号鍵を用いて、取得した更新用の保護制御モジュール１２１を多重に暗号化する。そして、暗号化された更新用の保護制御モジュール１２１及び複数の暗号鍵を更新モジュール選択部４０７に送信する。【００６３】
暗号鍵保持部４０３は、暗号鍵生成部４０１が生成した複数の暗号鍵や、更新モジュール選択部４０７により暗号化された複数の暗号鍵を保持する。【００６４】
認証部４０４は、更新モジュール１３１、１３２、１３３と相互認証の処理を行う。具体的には、更新モジュールから送信される認証鍵（公開鍵）を用いて更新モジュール１３１、１３２、１３３を認証し、認証結果を更新判定部４０５に送信する。【００６５】
更新判定部４０５は、更新モジュール１３１、１３２、１３３から保護制御モジュール１２０の改ざん検出通知を受け付けると、改ざん検出通知に基づいて、保護制御モジュールが改ざんされているか否かを最終判断する。保護制御モジュールが改ざんされていると判断した場合には、各更新モジュールに改ざん情報の収集を依頼する。その後、各更新モジュールから入力される改ざん情報に基づいて、保護制御モジュールを更新すべきか否かを判定し、更新すべきと判定した場合には、各更新モジュールに認証処理の開始を指示する。【００６６】
また、認証処理開始の指示後、認証部４０４から入力される認証結果に応じて、更新処理開始指示を更新モジュール１３１、１３２、１３３に送信するとともに、不正モジュール判定部４６、暗号鍵生成部４０１、及び証明書生成部４０８に保護制御モジュール１２０を更新する旨を通知する。【００６７】
さらに、更新モジュール１３１、１３２、１３３から入力される検証結果通知に基づいて、保護制御モジュールが正しく更新されたか判定し、判定結果に応じて、保護制御モジュール１２０の更新終了通知を更新モジュール１３１、１３２、１３３に送信する。【００６８】
不正モジュール判定部４０６は、更新判定部４０５から保護制御モジュール１２０を更新する旨の通知を受け付けると、更新モジュール１３１、１３２、１３３から入力される各更新モジュールの改ざんチェック結果に基づいて、各更新モジュールが改ざんされているかどうかの判定、及び更新モジュールが改ざんされていると判定した場合、どの更新モジュールが改ざんされたかを判定する。判定後、判定結果を更新モジュール選択部４０７に送信する。【００６９】
更新モジュール選択部４０７は、不正モジュール判定部４０６から入力される判定結果に基づいて、保護制御モジュール１２０を更新する際に使用する更新モジュールを複数選択する。そして、暗号処理部４０２から入力される、更新用の保護制御モジュール１２１の暗号化に使用した複数の暗号鍵を、更新モジュール選択部４０７が選択した各更新モジュール固有の鍵を用いて暗号化する。暗号化した鍵を、暗号処理部４０２から入力される、暗号化された保護制御モジュールとともに、選択した更新モジュールへ送付する。暗号化された保護制御モジュールの証明書は、各更新モジュールに送付される。【００７０】
なお、暗号化された保護制御モジュール１２１及び暗号鍵は、選択された更新モジュールへ一度に送信されるのではなく、更新処理の中で、それぞれのデータが必要になったタイミングで、各更新モジュールへ送信される。更新処理におけるタイミングに関しては後述する。【００７１】
また、正常な更新モジュールに対し、改ざんされた更新モジュールを無効化するよう指示するとともに、アクセス情報取得鍵配布モジュール２２０に無効化に関する情報を通知する。【００７２】
証明書生成部４０８は、更新判定部４０５から保護制御モジュール１２０を更新する旨の通知を受け付けると、署名秘密鍵保持部４０９から署名秘密鍵を、更新用ソフトウェア保持部４１０から更新用の保護制御モジュール１２１をそれぞれ取得し、取得した更新用の保護制御モジュール１２１に対して、正しく更新されたかを検証するための更新検証証明書を、取得した署名秘密鍵を用いて生成し、更新モジュール選択部４０７に送信する。【００７３】
また、署名秘密鍵を用いて、更新モジュール１３１、１３２、１３３の認証公開鍵に対して認証証明書を生成する。【００７４】
署名秘密鍵保持部４０９は、証明書生成部４０８による証明書の生成に用いられる署名秘密鍵を保持する。【００７５】
更新用ソフトウェア保持部４１０は、保護制御モジュール１２０が改ざんされた場合に用いられ、当該保護制御モジュールを更新するための更新用の保護制御モジュール１２１を保持する。ここで、更新用の保護制御モジュール１２１は、正常なものであることが保障されているものとし、必ずしも最新版の保護制御モジュールである必要はない。
４．保護制御モジュールの詳細な構成
図４は、本発明の実施の形態１における保護制御モジュール１２０の機能ブロック図である。同図に示すように、保護制御モジュール１２０は、制御部５０１、復号ロード部５０２、改ざん検出部５０３、解析ツール検出部５０４、暗復号鍵保持部５０５、暗復号鍵生成部５０６、暗復号鍵分散部５０７、証明書生成部５０８、及び暗復号鍵復元部５０９を含んで構成される。【００７６】
制御部５０１は、復号ロード部５０２、改ざん検出部５０３、及び解析ツール検出部５０４を制御し、アプリ１１０、１１１が攻撃者により攻撃されている場合には、それを検出する。【００７７】
復号ロード部５０２は、暗号化されて機器１００内部に保持されているアプリ１１０、１１１が実行される際に、暗復号鍵保持部５０５に保持されている暗復号鍵を用いてアプリを復号し、メモリ上にロードする処理を行う。【００７８】
また、アプリ１１０、１１１実行中に、他のアプリへのコンテキストスイッチが発生した場合には、暗復号鍵を用いてメモリ上のデータを暗号化し、再びアプリ１１０、１１１へコンテキストスイッチしたときに、暗号化したデータを復号する。【００７９】
さらに、後述する再暗号化処理において、暗復号鍵復元部５０９から入力される復元された旧暗復号鍵を用いてアプリ１１０、１１１を復号し、暗復号鍵保持部５０５に保持されている新たな暗復号鍵でアプリ１１０、１１１を暗号化する。【００８０】
改ざん検出部５０３は、アプリ１１０、１１１が改ざんされているか検出する改ざん検出処理を実行する。改ざん検出処理には、アプリ１１０、１１１に付加されている改ざん検出用の証明書を用いて改ざん検出を行う方法と、ＭＡＣ値を用いて改ざん検出を行う方法とがある。【００８１】
解析ツール検出部５０４は、攻撃者がアプリ１１０、１１１を攻撃しようとして、デバッガ等の解析ツールをインストールし動作させたときに、解析ツールの動作を検出する。検出方法としては、例えば、ファイル名を検索する方法や、デバッガが使用する特殊なレジスタが使われているかを調べる方法、デバッガが設定する割り込みを検出する方法などがある。【００８２】
暗復号鍵保持部５０５は、後述する初期化処理時に埋め込まれ、アプリ１１０、１１１を暗復号するための暗復号鍵を保持している。また、暗復号鍵生成部５０６にて新たに暗復号鍵が生成されると、暗復号鍵生成部５０６から入力される暗復号鍵を保持する。【００８３】
暗復号鍵生成部５０６は、暗復号鍵復元部５０９から暗復号鍵を復元した旨の通知を受け付けると、アプリ１１０、１１１を暗復号するための新たな暗復号鍵を生成する。生成した暗復号鍵を暗復号鍵保持部５０５、証明書生成部５０８、及び暗復号鍵分散部５０７に送信する。【００８４】
暗復号鍵分散部５０７は、後述する初期設計時や次ラウンド準備時に、暗復号鍵生成部５０７から入力される暗復号鍵に基づいて、秘密分散法を用いて分散情報を生成し、生成した分散情報を更新モジュール１３１、１３２、１３３に送信する。【００８５】
証明書生成部５０８は、暗復号鍵生成部５０６から入力される暗復号鍵に基づいて証明書を生成し、生成した証明書を更新モジュール１３１、１３２、１３３に送信する。証明書は、暗復号鍵から生成される分散情報を復元する際に、正しく復元できたかの検証に使用される。【００８６】
暗復号鍵復元部５０９は、更新モジュール１３１、１３２、１３３から分散情報及び暗復号鍵証明書を取得し、取得した分散情報及び暗復号鍵証明書に基づいて、旧暗復号鍵を復元する。復元した旧暗復号鍵を復号ロード部５０２に送信する。また、暗復号鍵生成部５０６に暗復号鍵を復元した旨を通知する。
５．アクセス制御モジュール
図５は、本発明の実施の形態１におけるアクセス制御モジュール１４０の機能ブロック図である。同図に示すように、アクセス制御モジュール１４０は、通信部６０１と、アクセス情報保持部６０２とから構成される。【００８７】
通信部６０１は、更新モジュール１３１、１３２、１３３からアクセス情報の取得依頼を受信する。アクセス情報取得依頼に基づいて、不正に改ざんされた更新モジュールに対応するアクセス情報をアクセス情報保持部６０２から取得し、取得したアクセス情報取得を依頼してきた更新モジュールへ送信する。【００８８】
アクセス情報保持部６０２は、更新モジュール毎に当該更新モジュールを消去するためのアクセス情報を保持する。アクセス情報は、更新モジュール毎にそれぞれ個別のアクセス情報取得鍵で暗号化され、識別子（更新モジュール識別子）等により、各更新モジュールと対応付けられる。
６．アクセス情報取得鍵配布モジュール
図６は、本発明の実施の形態１におけるアクセス情報取得鍵配布モジュール２２０の機能ブロック図である。同図に示すように、アクセス情報取得鍵配布モジュール２２０は、通信部７０１と、アクセス情報取得鍵保持部７０２とから構成される。【００８９】
通信部７０１は、更新モジュール１３１、１３２、１３３からアクセス情報取得鍵の取得依頼を、更新モジュール選択部４０７から無効化に関する情報の通知をそれぞれ受信する。アクセス情報取得鍵の取得依頼及び無効化に関する情報に基づいて、当該取得依頼が正しいか否かを判断し、判断結果に応じて、消去対象となる更新モジュールに対応するアクセス情報取得鍵をアクセス情報取得鍵保持部７０２から取得し、依頼してきた更新モジュールへ送信する。【００９０】
アクセス情報取得鍵保持部７０２は、アクセス制御モジュール１４０が保持している、暗号化された各アクセス情報を復号するためのアクセス情報取得鍵を保持する。アクセス情報取得鍵は、識別子（更新モジュール識別子）等により、各更新モジュールと対応付けられる。
７．機器１００のハードウェア構成
続いて、機器１００のハードウェア構成について説明する。図７は、機器１００のハードウェア構成を示す図である。同図に示すように、機器１００は、CPU（Central Processing Unit）１１、不揮発メモリ（例えば、EEPROM（Electrically Erasable and Programmable Read Only Memory））１２、RAM（Random Access Memory）１３、及びNIC（Network Interface Card）１４等を含んで構成され、これらはバスを介して相互に通信可能に接続されている。【００９１】
EEPROM１２には、保護制御モジュール１２０、更新モジュール１３１、１３２、１３３、及びアプリ１１０、１１１等が格納されている。【００９２】
EEPROM１２に格納されている制御用の各種モジュールをCPU１１が実行することにより、各種モジュールの各機能部の制御は実現される。各機能部は、具体的には、コンピュータプログラムによって記述され実現される。【００９３】
RAM１３は、CPU１１のワークエリアとして用いられる。RAM１３には更新モジュール１３１、１３２、１３３及びアプリ１１０、１１１がロードされる。改ざんチェック及び無効化の対象となる更新モジュールは、RAM１３上で動作している更新モジュールである。【００９４】
NICは、ネットワークに接続するための拡張カードである。
８．ソフトウェア階層
続いて、機器１００におけるソフトウェア階層について説明する。図８は、機器１００のソフトウェア階層を示す図である。同図に示すように、アクセス制御モジュール１４０及び更新モジュール群１３０は、OS１５０の中に組み込まれている。アプリ１１０、１１１はOS１５０上で動作し、保護制御モジュール１２０はブートローダ１６０等とともにOSの管理外にある。機器１００の起動の際には、まず保護制御モジュール１２０及び更新モジュール群１３０が起動された上でアプリケーションが実行される。
９．ソフトウェア更新システム１０００の動作
９．１．ソフトウェア更新システム１０００の動作概略
続いて、ソフトウェア更新システム１０００の動作を説明する。初めに、ソフトウェア更新システム１０００の大まかな処理を説明する。大まかな処理として、以下の７つの処理がある。【００９５】
１つ目の処理は、ソフトウェア（保護制御モジュール１２０）を更新するために必要となる各種鍵データや、ソフトウェア更新後に必要となるデータ（秘密分散法を用いて分散した分散情報）などを更新モジュール１３１、１３２、１３３のそれぞれに埋め込む処理（初期設計処理）である。【００９６】
２つ目の処理は、機器１００内部のソフトウェア（保護制御モジュール１２０）が改ざんされていないかを検知する処理（検知処理）である。【００９７】
３つ目の処理は、改ざんが検出された時に、改ざんされたソフトウェアを解析し、改ざんされたモジュールを含むソフトウェアを更新するかどうかを判断し、更新する場合は更に、更新モジュール１３１、１３２、１３３へ更新処理の実施を通知する処理（解析・判断処理）である。【００９８】
４つ目の処理は、更新モジュール１３１、１３２、１３３と更新用ソフトウェア配布モジュール２１０とが互いに正しいソフトウェアであるかどうかを確認するために、相互に行う認証処理（相互認証処理）である。【００９９】
５つ目の処理は、更新モジュール間で改ざんチェックを行うとともに更新用のソフトウェアを機器１００へインストールし、更新モジュール１３１、１３２、１３３へ埋め込まれた分散情報からデータを復元する処理（回復処理）である。【０１００】
６つ目の処理は、次のソフトウェア更新のための鍵データや分散情報を生成し、各更新モジュールに埋め込む処理（次ラウンド準備処理）である。【０１０１】
７つ目の処理は、相互認証処理や回復処理において、更新モジュール１３１、１３２、１３３が不正に改ざんされたことを検出したときに、不正に改ざんされた更新モジュールを消去する処理（無効化処理）である。【０１０２】
上記７つの処理のうち、無効化処理以外の６つの処理の関係は、図９に示す関係になる。無効化処理は、それぞれの処理の中で必要に応じて呼び出される。図９は、ソフトウェア更新システム１０００の全体的な動作の流れを示すフローチャートである。【０１０３】
ソフトウェア更新システム１０００では、機器１００が工場で製造される際に初期設計処理が行われ、各更新モジュール１３１、１３２、１３３へ分散情報が埋め込まれる（ステップＳ１００）。その後、機器１００が工場から出荷され、ユーザの利用に供される。【０１０４】
ユーザにより機器１００が利用される際には、機器１００内部では、保護制御モジュール１２０がアプリ１１０、１１１を攻撃者による攻撃から保護する。これと同時に、更新モジュール１３１、１３２、１３３が保護制御モジュール１２０の改ざん検出を実施し、保護制御モジュール１２０が攻撃されていないかをチェックする検知処理を行う（ステップＳ２００）。【０１０５】
検知処理を行った結果、保護制御モジュール１２０が改ざんされたと判明した場合には、解析・判断処理（ステップＳ３００）、相互認証処理（ステップＳ４００）、回復処理（ステップＳ５００）、次ラウンド準備処理（ステップＳ６００）を行い、再び検知処理（ステップＳ２００）へ戻る。【０１０６】
なお、上記すべての処理が必要ではなく、少なくとも外部から更新のトリガを与えられて、更新を行う処理（回復処理）があればよい。【０１０７】
続いて、上記７つの処理について、その詳細を順に説明する。【０１０８】
９．２．初期設計時の動作
まず、初期化処理について説明する。図１１は、初期設計時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール１３１、１３２、１３３の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。【０１０９】
機器１００が工場で製造される際に、機器１００の不揮発メモリへアプリ１１０、１１１、保護制御モジュール１２０、更新モジュール１３１、１３２、１３３、及びアクセス制御モジュールがインストール（書き込み）される（ステップＳ１０１）。これらのソフトウェアには、ソフトウェアが改ざんされているかどうかを検証するための証明書（改ざん検出用証明書）が付加されている。この改ざん検出用証明書は、更新用ソフトウェア配布モジュール２１０が保持する署名秘密鍵により署名されている。上記ソフトウェア以外にも、機器１００の動作に必要なソフトウェアがインストールされる。ここで、初期化処理の際に機器１００に埋め込まれる鍵について説明する。図１０は、機器１００に埋め込まれる鍵を模式的に示す図である。更新モジュールについては、代表的に更新モジュール１３１のものだけ示す。本図に示すように、保護制御モジュール１２０には暗復号鍵が、更新モジュール１３１、１３２、１３３には署名公開鍵、検証鍵、及び認証鍵対がそれぞれ埋め込まれる。また、更新モジュール１３１、１３２、１３３には、それぞれの更新モジュールを識別するための更新モジュール識別子も埋め込まれる。【０１１０】
暗復号鍵は、アプリ１１０、１１１を暗復号するための鍵であり、アプリ１１０、１１１は、暗復号鍵を用いて暗号化された状態で不揮発メモリへ記憶され、実行時には保護制御モジュール１２０により暗復号鍵を用いて復号された後、実行される。コンテキストを切替えながら複数のアプリを実行する場合には、コンテキスト切替えのタイミングで、暗復号鍵を用いて、アプリ１１０、１１１の暗復号を実施し、デバッガなどの解析ツールにより、アプリ１１０、１１１実行時のデータが抜き取られることを防止する。【０１１１】
更新モジュール１３１、１３２、１３３に埋め込まれる鍵のうち、署名公開鍵は、全ての更新モジュールで共通とし、検証鍵と認証鍵対とは、更新モジュール毎に異なるものとする。また、分散情報ペアは、更新モジュール毎に異なるものとする。【０１１２】
図１１に戻って、各ソフトウェアのインストール後、機器１００の初期設定を行うソフトウェアや、正常に動作するかをテストするためのソフトウェアなどを実行し、初期化処理を行い（ステップＳ１０２）、保護制御モジュール１２０及び更新モジュール１３１、１３２、１３３に初期化指示を送信する（ステップＳ１０３）。初期化指示を受信する保護制御モジュール１２０及び更新モジュール１３１、１３２、１３３でもそれぞれ初期化処理が行われる。【０１１３】
保護制御モジュール１２０は、初期化指示を受信すると（ステップＳ１０４ａ）、秘密分散法を用いて暗復号鍵から分散情報を生成する（ステップＳ１０５）。さらに、暗復号鍵の復元時に、正しく復元できたかを確認するための証明書（暗復号鍵証明書）を、署名秘密鍵を用いて生成する（ステップＳ１０６）。生成した分散情報と暗復号鍵証明書とをそれぞれ、更新モジュール１３１、１３２、１３３へ送信する（ステップＳ１０７）。ここで、分散情報は、更新モジュールと同数だけ生成され、それぞれの更新モジュール１３１、１３２、１３３には、異なる分散情報のペアが送信される。また、各分散情報にはどの分散情報かを識別するための識別子が付加される。暗復号鍵証明書については、それぞれの更新モジュール１３１、１３２、１３３へ同じものが送信される。【０１１４】
更新モジュール群は、初期化指示を受信し（ステップＳ１０４ｂ）、分散情報と暗復号鍵証明書とを受信すると（ステップＳ１０８）、更新モジュール初期化処理を行う（ステップＳ１０９）。【０１１５】
図１２は、更新モジュール初期化処理を示すフローチャートである。本図では、代表的に更新モジュール１３１のものだけ示す。他の更新モジュールの動作も基本的に同一である。【０１１６】
まず、更新モジュール１３１は、保護制御モジュール１２０から受信した分散情報のペアと暗復号鍵証明書とを分散情報保持部３１０に保持する（ステップＳ１１１）。【０１１７】
改ざん検出対象となる他の更新モジュール及び保護制御モジュール１２０の改ざん検出用証明書の検証を実施する（ステップＳ１１２）。この検証は、各モジュールからハッシュ値を生成し、生成したハッシュ値とそれぞれの改ざん検出用証明書に記述されているハッシュ値とを比較することにより行われる。【０１１８】
生成した各ハッシュ値がそれぞれの改ざん検出用証明書に記述されているハッシュ値と一致するか否かを判定し（ステップＳ１１３）、各ハッシュ値がそれぞれの改ざん検出用証明書に記述されているハッシュ値と一致すれば（ステップ１１３でＹｅｓ）、改ざん検出対象となる他の更新モジュール及び保護制御モジュール１２０それぞれに対してＭＡＣ値を生成し、ＭＡＣ値テーブルとしてＭＡＣ値保持部３０９に保持する（ステップＳ１１４）。【０１１９】
少なくとも何れか一方のハッシュ値が改ざん検出用証明書に記述されているハッシュ値と一致しなければ（ステップＳ１１３でＮｏ）、エラーを出力して処理を停止する（ステップＳ１１５）。【０１２０】
９．３．検知時の動作
続いて、検知処理について説明する。機器１００は、初期化処理を終えると工場から出荷され、ユーザの元へ送られる。ユーザが機器１００を使用し、アプリ１１０、１１１を利用しているときには、機器１００内部では、保護制御モジュール１２０が復号ロード機能や改ざん検出機能、解析ツール検出機能などの機能を制御し、アプリ１１０、１１１を攻撃者による攻撃から保護する。【０１２１】
図１３は、検知時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。検知処理においては、まず、更新モジュール１３１、１３２、１３３が、保護制御モジュール１２０の改ざん検出を実施する（ステップＳ２０１）。改ざん検出は、保護制御モジュール１２０のＭＡＣ値を、検証鍵を使用して計算し、ＭＡＣ値テーブルに保持されている、初期設計時に算出した保護制御モジュール１２０のＭＡＣ値と比較することで、行われる。なお、本図では記載を簡略化し、更新モジュール１３１のみが保護制御モジュールが改ざんされているかをチェックしているが、当然、更新モジュール１３２、１３３でも同様の処理が行われる。その後の処理についても、更新モジュール１３１が保護制御モジュールの改ざんを検出した場合を中心に記載しているが、更新モジュール１３２、１３３が保護制御モジュールの改ざんを検出した場合も基本的には同様の処理が行われる。【０１２２】
保護制御モジュール１２０が改ざんされているか否か、言い換えるとＭＡＣ値が一致するか否かを判定し（ステップＳ２０２）、保護制御モジュール１２０が改ざんされていると判定した場合には（ステップＳ２０２でＹｅｓ）、更新用ソフトウェア配布モジュール２１０と他の更新モジュールとに改ざん検出通知を送信する（ステップＳ２０３）。【０１２３】
保護制御モジュール１２０が改ざんされていないと判定した場合には（ステップＳ２０２でＮｏ）、更新用ソフトウェア配布モジュール２１０や他の更新モジュールへの通知を行わず、改ざん検出処理（Ｓ２０１）へ戻る。【０１２４】
更新モジュール１３２、１３３は、更新モジュール１３１から改ざん検出通知を受信すると（ステップＳ２０４ｂ）、検証鍵及びＭＡＣ値を利用して、保護制御モジュール１２０の改ざんチェックを実施し（ステップＳ２０５）、改ざんチェック結果を更新用ソフトウェア配布モジュール２１０へ送信する（ステップＳ２０６）。【０１２５】
更新用ソフトウェア配布モジュール２１０は、更新モジュール１３１から改ざん検出通知を（ステップＳ２０４ａ）、更新モジュール１３２、１３３から改ざんチェック結果をそれぞれ受信する（ステップＳ２０７）。【０１２６】
９．４．解析・判断時の動作
続いて、解析判断処理について説明する。図１４、１５は、解析・判断時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール１３１、１３２、１３３の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。【０１２７】
検知処理において、更新用ソフトウェア配布モジュール２１０が更新モジュール１３１、１３２、１３３から改ざん検出通知及び改ざんチェック結果を受信した場合には（ステップＳ２０４ａ及びＳ２０７）、受信した改ざん検出通知及び改ざんチェック結果に基づいて、保護制御モジュール１２０が改ざんされているか否かを判定する（ステップＳ３０１）。判定方法としては、例えば、一定数の更新モジュール（例えば、過半数等）が改ざんされていると判定している場合には、保護制御モジュール１２０は改ざんされていると判定し、逆に、過半数の更新モジュールが改ざんされていないと判定している場合には、保護制御モジュール１２０は改ざんされていないと判定する。【０１２８】
保護制御モジュール１２０が改ざんされていないと判定した場合には（ステップＳ３０１でＮｏ）、検知処理に戻る（ステップＳ３０２）。【０１２９】
保護制御モジュール１２０が改ざんされていると判定した場合には（ステップＳ３０１でＹｅｓ）、更新用ソフトウェア配布モジュール２１０は、更新モジュール１３１、１３２、１３３に対して保護制御モジュール１２０のどの部分が改ざんされたかを示す改ざん情報を通知するよう依頼する（ステップＳ３０３）。【０１３０】
更新モジュール群は、改ざん情報の通知依頼を受け付けると（ステップＳ３０４）、改ざん情報を収集する（ステップＳ３０５）。改ざん情報の収集は、例えば、保護制御モジュール１２０が複数の部分に分けられており、予め部分毎に証明書（ハッシュ値が記述されている）が発行されていることを前提とすれば、部分毎にハッシュ値を算出し、算出された各ハッシュ値が各証明書に記述されたハッシュ値と一致するか否かにより、行うことができる。【０１３１】
更新モジュール群は、改ざん情報を収集すると、改ざん情報を更新用ソフトウェア配布モジュール２１０に送信する（ステップＳ３０６）。【０１３２】
更新用ソフトウェア配布モジュール２１０は、更新モジュール群から改ざん情報を受信すると（ステップＳ３０７）、受信した改ざん情報を解析し（ステップＳ３０８）、解析結果に基づいて、保護制御モジュール１２０を無効化するか否かを判断する（ステップＳ３０９）。【０１３３】
保護制御モジュール１２０を無効化すると判断した場合には（ステップＳ３０９でＹｅｓ）、アプリ１１０、１１１を介して、当該アプリ１１０、１１１にサービスを提供しているサーバ（不図示）に機器１００を無効化するよう依頼する（ステップＳ３１０、３１１）。【０１３４】
保護制御モジュール１２０を無効化しないと判断した場合には（ステップＳ３０９でＮｏ）、保護制御モジュール１２０を更新するか否かを判断する（ステップＳ３１２）。【０１３５】
保護制御モジュール１２０を更新すると判断した場合には（ステップＳ３１２でＹｅｓ）、更新モジュール群に認証処理開始指示を送信し（ステップＳ３１３）、更新モジュール群は、認証処理開始指示を受信する（ステップＳ３１４）。【０１３６】
保護制御モジュール１２０を更新しないと判断した場合には（ステップＳ３１２でＮｏ）、検知処理に戻る（ステップＳ３０２）。【０１３７】
保護制御モジュール１２０の無効化及び更新は、例えば、保護制御モジュール１２０の重要な部分が改ざんされているか、一定部分以上改ざんされているか等を判断することにより行われる。【０１３８】
９．５．相互認証時の動作
続いて、相互認証処理について説明する。解析・判断処理において、保護制御モジュール１２０を更新する必要があると判断され、更新モジュール１３１、１３２、１３３へ認証処理の開始を指示した後、更新用ソフトウェア配布モジュール２１０と各更新モジュール１３１、１３２、１３３との間で、それぞれ１対１の相互認証処理が行われる。これにより、機器１００が不正な更新サーバへ接続されることや、更新サーバ２００が不正な機器へ接続されることを防止することができる。相互認証には、更新サーバ２００は署名秘密鍵と署名公開鍵を使用し、各更新モジュール１３１、１３２、１３３は認証鍵対（認証秘密鍵、認証公開鍵）を使用する。【０１３９】
相互認証時の動作としては、まず、更新モジュール１３１、１３２、１３３が、更新用ソフトウェア配布モジュール２１０を認証する。図１６は、更新モジュール１３１が更新用ソフトウェア配布モジュール２１０を認証する時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。本図では、代表的に更新モジュール１３１のものだけ示す。他の更新モジュールの動作も基本的に同一である。【０１４０】
更新モジュール１３１は、乱数生成器を用いて乱数を生成し（ステップＳ４０１）、生成した乱数をチャレンジデータとして更新用ソフトウェア配布モジュール２１０へ送信する（ステップＳ４０２）。この時、更新モジュール１３１を識別するための更新モジュール識別子もチャレンジデータと一緒に送信する。【０１４１】
更新用ソフトウェア配布モジュール２１０は、各更新モジュールからチャレンジデータを受信すると（ステップＳ４０３）、受信したチャレンジデータに対し、署名秘密鍵を用いて署名生成を行い（ステップＳ４０４）、生成した署名をレスポンスデータとして、送信してきた更新モジュールへ返信する（ステップＳ４０５）。【０１４２】
更新モジュール１３１は、更新用ソフトウェア配布モジュール２１０からレスポンスデータを受信すると（ステップＳ４０６）、受信したレスポンスデータが送信したチャレンジデータに対する署名になっているかを、署名公開鍵を用いて署名検証する（ステップＳ４０７）。【０１４３】
検証した結果、レスポンスデータが送信したチャレンジデータに対する署名になっている、すなわち、更新用ソフトウェア配布モジュール２１０が正当なモジュールである場合には（ステップＳ４０８でＹｅｓ）、処理を継続する。【０１４４】
レスポンスデータが送信したチャレンジデータに対する署名になっていない、すなわち、更新用ソフトウェア配布モジュール２１０が正当なモジュールでない場合には（ステップＳ４０８でＮｏ）、エラーを出力して、処理を停止する（ステップＳ４０９）。【０１４５】
次に、更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証する。図１７は、更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証する時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール１３１、１３２、１３３の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。【０１４６】
更新用ソフトウェア配布モジュール２１０は、乱数生成器を用いて、上記処理においてチャレンジデータを送信してきた更新モジュールの数だけ乱数を生成し（ステップＳ４１１）、生成した各乱数をチャレンジデータとして、更新モジュールと一対一に対応する形態で、送信する（ステップＳ４１２）。【０１４７】
更新モジュール群は、更新用ソフトウェア配布モジュール２１０からチャレンジデータを受信すると（ステップＳ４１３）、受信したチャレンジデータに対し、認証秘密鍵を用いて署名生成を行い（ステップＳ４１４）、生成した署名をレスポンスデータとして更新用ソフトウェア配布モジュール２１０へ返信する（ステップＳ４１５）。その際、認証公開鍵と認証鍵証明書とを併せて更新用ソフトウェア配布モジュール２１０へ返信する（ステップＳ４１５）。【０１４８】
更新用ソフトウェア配布モジュール２１０は、更新モジュール群からレスポンスデータ、認証公開鍵、及び認証鍵証明書を受信すると（ステップＳ４１６）、認証鍵証明書が、更新用ソフトウェア配布モジュール２１０により発行された証明書であるかを検証した後、認証鍵証明書を使用して認証公開鍵の検証を行う（ステップＳ４１７）。【０１４９】
検証した結果、認証鍵証明書あるいは認証公開鍵に問題があれば（ステップＳ４１８でＮｏ）、処理を停止する（ステップＳ４１９）。【０１５０】
検証した結果、認証鍵証明書及び認証公開鍵ともに問題がなければ（ステップＳ４１８でＹｅｓ）、受信したレスポンスデータが、更新用ソフトウェア配布モジュール２１０が送信したチャレンジデータの署名になっているかを、認証公開鍵を用いて署名検証する（ステップＳ４２０）。そして、検証結果に基づいて、回復処理を行うか否かを判定する。この判定は、例えば、署名検証により、正当なモジュールであると検証できた更新モジュールの数が予め設定されている回復処理に必要な数以上あるかを判断することにより、行われる（ステップＳ４２１）。【０１５１】
正当なモジュールであると検証できた更新モジュールが、回復処理に必要な数に満たないと判定した場合には（ステップＳ４２１でＮｏ）、処理を停止する（ステップＳ４１９）。【０１５２】
正当なモジュールであると検証できた更新モジュールが、回復処理に必要な数を満たすと判定した場合には（ステップＳ４２１でＹｅｓ）、正当なモジュールであると検証できた更新モジュールに更新処理開始指示を送信し（ステップＳ４２２）、正当なモジュールであると検証された更新モジュールは、更新処理開始指示を受信する（ステップＳ４２３）。以上で相互認証処理を終了する。【０１５３】
なお、更新用ソフトウェア配布モジュール２１０は、相互認証処理において、認証できた全ての更新モジュールの更新モジュール識別子からなる認証リストを作成し、以降の回復処理では、この認証リストに記載されている更新モジュールのみを利用して処理を実施する。【０１５４】
９．６．回復時の動作
続いて、回復処理について図１８〜２４を用いて説明する。相互認証処理において、相互認証が成功した場合には、改ざんされた保護制御モジュール１２０を更新用の保護制御モジュール（更新用保護制御モジュール）１２１へ更新する回復処理を実施する。図１８は、回復処理時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。回復処理は、大きく３つの処理からなる。【０１５５】
１つ目の処理は、更新モジュール１３１、１３２、１３３が他の更新モジュールに対して改ざん検出処理を実施する監視処理（ステップＳ５０１）である。【０１５６】
２つ目の処理は、更新用保護制御モジュール１２１を用いて保護制御モジュール１２０を更新する更新処理（ステップＳ５０２）である。【０１５７】
３つ目の処理は、暗号化されたアプリ１１０、１１１を再暗号化する再暗号化処理（ステップＳ５０３）である。【０１５８】
なお、上記３つの処理がすべて必要ではなく、他の更新モジュールに対して改ざん検出処理を実施する監視処理（ステップＳ５０１）、及び外部から更新のトリガを与えられて、更新用保護制御モジュール１２１を用いて保護制御モジュール１２０を更新する更新処理（ステップＳ５０２）があればよい。【０１５９】
上記３つの処理について、その詳細を順に説明する。【０１６０】
９．６．１．監視処理
監視処理では、更新モジュール群１３０内の更新モジュール１３１、１３２、１３３が、更新モジュール群１３０内の他の更新モジュールに対して改ざん検出の処理を実施する。これにより、回復処理中に一部の更新モジュールが攻撃者により改ざんされた場合にも、改ざん検出が可能となる。さらに、監視処理を定期的に実施することで、更新用保護制御モジュール１２１が完全に漏洩する前に改ざんを検出し、漏洩を防止することが可能となる。【０１６１】
以下、監視処理の一例を、フローチャートを用いて詳細に説明する。図１９は、監視処理を示すフローチャートである。【０１６２】
まず、更新モジュール１３１は、更新モジュール１３２に対し改ざん検出処理を実施し（ステップＳ５１１ａ）、更新モジュール１３２は、更新モジュール１３３に対し改ざん検出処理を実施し（ステップＳ５１１ｂ）、更新モジュール１３３は、更新モジュール１３１に対し改ざん検出処理を実施する（ステップＳ５１１ｃ）。改ざん検出は、更新モジュール１３１、１３２、１３３のＭＡＣ値を、検証鍵を使用して計算し、ＭＡＣ値テーブルに保持されている、初期設計時に計算したＭＡＣ値と比較することにより、行われる。また、更新モジュール１３１、１３２、１３３のハッシュ値を算出し、算出したハッシュ値と、各更新モジュールに予め付加されている証明書に記述されているハッシュ値とを比較することにより行われるとしてもよい。【０１６３】
各更新モジュールは、改ざん検出結果を更新用ソフトウェア配布モジュール２１０へ通知する（ステップＳ５１２）。【０１６４】
更新用ソフトウェア配布モジュール２１０は、各更新モジュールから改ざん検出結果を受信し（ステップＳ５１３）、改ざんされた更新モジュールがあるか否かを判定する（ステップＳ５１４）。【０１６５】
改ざんされた更新モジュールがあると判定した場合には（ステップＳ５１４でＹｅｓ）、更新用ソフトウェア配布モジュール２１０は、直ちに回復処理を停止する（ステップＳ５１５）。【０１６６】
改ざんされた更新モジュールがないと判定した場合には（ステップＳ５１４でＮｏ）、処理を継続する。【０１６７】
９．６．２．更新処理
続いて更新処理について説明する。更新処理では、更新用ソフトウェア配布モジュール２１０が更新用保護制御モジュール１２１を複数の鍵を用いて多重に暗号化し、更新モジュール群１３０に含まれる更新モジュールを送信先として送信する。更新モジュール群１３０に含まれる複数の更新モジュールは、保護制御モジュール１２０を更新用保護制御モジュール１２１に更新する。この時、多重に暗号化された更新用保護制御モジュール１２１を復号するための複数の鍵を、更新モジュール群１３０に含まれる各更新モジュールへ送信するタイミングを更新用ソフトウェア配布モジュール２１０が制御することで、攻撃者が暗号化されていない更新用保護制御モジュール１２１を入手することを不可能にする。【０１６８】
以下、更新処理の一例を、フローチャートを用いて詳細に説明する。図２０〜２２は、更新処理を示すフローチャートである。【０１６９】
まず、更新用ソフトウェア配布モジュール２１０は、更新用保護制御モジュール１２１が機器１００に正しくインストールされたかを更新モジュール１３１、１３２、１３３が検証できるように、更新用保護制御モジュール１２１の証明書（更新検証証明書）を、証明書生成部４０８を用いて生成し（ステップＳ５２１）、生成した更新検証証明書を各更新モジュール１３１、１３２、１３３へ送信する（ステップＳ５２２）。更新検証証明書の生成には、署名秘密鍵を利用する。各更新モジュールは、更新検証証明書を受信する（ステップＳ５２３）。【０１７０】
次に、更新用ソフトウェア配布モジュール２１０は、更新用保護制御モジュール１２１を多重に暗号化するための暗号鍵を、暗号鍵生成部４０３を用いて複数（ここでは第１の鍵及び第２の鍵の２つ）生成する（ステップＳ５２４）。そして、暗号処理部４０２を利用して、第２の鍵を用いて更新用保護制御モジュール１２１を暗号化し、暗号化更新用保護制御モジュールを生成する（ステップＳ５２５）。暗号化更新用保護制御モジュール１２１に対して、第１の鍵を用いてさらに暗号化し、多重暗号化更新用保護制御モジュール１２１を生成する（ステップＳ５２６）。【０１７１】
更新用ソフトウェア配布モジュール２１０は、更新モジュール群１３０に含まれる複数の更新モジュールから一の更新モジュール（ここでは、更新モジュール１３１）を選択し（ステップＳ５２７）、多重暗号化更新用保護制御モジュール１２１及び第１の鍵を、選択した更新モジュール１３１に送信する（ステップＳ５２８）。【０１７２】
更新モジュール１３１は、多重暗号化更新用保護制御モジュール１２１及び第１の鍵を受信すると（ステップＳ５２９）、第１の鍵を用いて、多重暗号化更新用保護制御モジュール１２１を復号し、暗号化更新用保護制御モジュール１２１を取得する（ステップＳ５３０）。復号が終了すると、復号終了通知を更新用ソフトウェア配布モジュール２１０に送信する（ステップＳ５３１）。【０１７３】
更新用ソフトウェア配布モジュール２１０は、復号終了通知を受信すると（ステップＳ５３２）、更新モジュール群１３０に含まれる複数の更新モジュールから、上記選択した更新モジュール１３１とは異なる更新モジュール（ここでは、更新モジュール１３２）を１つ選択し（ステップＳ５３３）、選択した更新モジュール１３２に第２の鍵を送信するとともに（ステップＳ５３４）、更新モジュール１３１に対して、暗号化更新用保護制御モジュール１２１を更新モジュール１３２へ送信するよう依頼する（ステップＳ５３６）。【０１７４】
更新モジュール１３１は、更新用ソフトウェア配布モジュール２１０からの依頼を受けて（ステップＳ５３７）、暗号化更新用保護制御モジュール１３１を更新モジュール１３２へ送信する（ステップＳ５３８）。【０１７５】
更新モジュール１３２は、更新用ソフトウェア配布モジュール２１０から第２の鍵を受信し（ステップＳ５３５）、更新モジュール１３１から暗号化更新用保護制御モジュール１２１を受信すると（ステップＳ５３９）、第２の鍵を用いて、暗号化更新用保護制御モジュール１２１を復号し、更新用保護制御モジュール１２１を取得する（ステップＳ５４０）。【０１７６】
更新モジュール１３２は、取得した更新用保護制御モジュール１２１を保護制御モジュール１２０に上書きし、新たな保護制御モジュール１２１に更新する（ステップＳ５４１）。更新が終了すると、更新の終了を他の更新モジュール１３１、１３３へ通知する（ステップＳ５４２）。更新モジュール１３１、１３３は、更新終了通知を受信する（ステップＳ５４３ａ、５４３ｂ）。【０１７７】
更新モジュール１３１、１３２、１３３はそれぞれ、事前に受信した更新検証証明書を用いて、保護制御モジュール１２１が正しく更新されたかを検証し（ステップＳ５４４）、検証結果を更新用ソフトウェア配布モジュール２１０へ通知する（ステップＳ５４５）。【０１７８】
更新用ソフトウェア配布モジュール２１０は、各更新モジュールから送信された検証結果を受信すると（ステップＳ５４６）、受信した検証結果から保護制御モジュール１２１が正しく更新されたかを判定し（ステップＳ５４７）、正しく更新されていないと判定した場合には（ステップＳ５４７でＮｏ）、機器１００を停止する（ステップＳ５４８）。【０１７９】
正しく更新されていると判定した場合には（ステップＳ５４７でＹｅｓ）、更新処理の終了を各更新モジュールへ通知する（ステップＳ５４９）。【０１８０】
更新モジュール１３１、１３２、１３３はそれぞれ、更新処理の終了の通知を受けると（ステップＳ５５０）、保護制御モジュール１２１のＭＡＣ値を生成し、ＭＡＣ値テーブルに保護制御モジュール１２１の識別子とＭＡＣ値との組を保存する（ステップＳ５５１）。【０１８１】
９．６．３．監視処理と更新処理との関係
続いて、監視処理と更新処理との関係について説明する。上述した監視処理と更新処理とは、互いに連携しながら実行される。【０１８２】
監視処理は、更新用ソフトウェア配布モジュール２１０から、更新モジュール群１３０に含まれる更新モジュールを送信先として、複数の鍵が送られる時と、暗号化された更新用保護制御モジュールの更新モジュール群１３０に含まれる更新モジュールでの復号処理中に定期的に実施される。定期的に実施する際の時間間隔は、例えば、更新用保護制御モジュール１２１が通信路を通して完全に外部に出力されるまでの時間より短い間隔である。完全に外部に出力されるまでに１秒かかるのであれば、例えば、それより短い５００ミリ秒間隔のタイミングで監視処理を実行する。【０１８３】
監視処理と更新処理との連携動作を、図２３を用いて説明する。図２３は、監視処理と更新処理との連携動作の流れを模式的に示す図である。本図において、監視処理及び更新処理に関しては、ポイントとなる処理のみ説明する。【０１８４】
まず、回復処理の開始後、更新サーバ２００から機器１００へ多重暗号化更新用保護制御モジュール１２１が送付される前に、機器１００内部で監視処理（監視１）を実施する。更新処理を開始するにあたって、不正な更新モジュールが機器１００内部に存在しないことを検証するためである。【０１８５】
その後、更新サーバ２００から機器１００へ第１の鍵が送信され、更新モジュール１３１が第１の鍵を受信する前に、監視処理（監視２）を実施する。機器１００が鍵を受信する時に、不正な更新モジュールが機器１００内部に存在しないことを検証するためである。【０１８６】
さらに、更新モジュール１３１が第１の鍵を受信し、第１の鍵を用いて多重暗号化更新用保護制御モジュール１２１を復号する間、定期的に更新モジュール１３１による復号処理を中断し、監視処理（監視３−１、３−２）を実施する。これにより、復号処理中に、更新モジュール１３１、１３２、１３３の何れかが攻撃されたとしても、暗号化更新用保護制御モジュール１２１が全て漏洩する前に攻撃者による攻撃を検出することができ、暗号化更新用保護制御モジュール１２１の漏洩を防止することが可能となる。【０１８７】
これ以降の処理は、上記と同様に、更新サーバ２００から機器１００へ送信される第２の鍵を更新モジュール１３２が受信する前に、監視処理（監視４）を実施し、機器１００が鍵を受信する時に、不正な更新モジュールが機器１００内部に存在しないことを検証する。【０１８８】
さらに、更新モジュール１３２が第２の鍵を受信した後、第２の鍵を用いて暗号化更新用保護制御モジュール１２１を復号する間、定期的に更新モジュール１３２による復号処理を中断し、監視処理（監視５−１、５−２）を実施する。これにより、更新用保護制御モジュール１２１が全て漏洩する前に攻撃者による攻撃を検出することができ、更新用保護制御モジュール１２１の漏洩を防止することが可能となる。【０１８９】
また、上記の各監視処理において、各更新モジュールは改ざん検出結果を更新用ソフトウェア配布モジュール２１０へ通知する。更新用ソフトウェア配布モジュール２１０は、改ざん検出結果に基づいて、何れかの更新モジュールが改ざんされていると判定した場合には、回復処理を停止する。これにより、第１の鍵あるいは第２の鍵の送信前に、攻撃者による攻撃が検出されれば、攻撃者は多重暗号化更新用保護制御モジュール１２１を復号するための鍵を入手することが不可能になる。【０１９０】
９．６．４．再暗号化処理
続いて、再暗号化処理について説明する。再暗号化処理では、更新用保護制御モジュール１２１が、各更新モジュールが保持している分散情報を取得し、取得した分散情報から、更新前の保護制御モジュール１２０が保持していた暗復号鍵（旧暗復号鍵）を復元する。さらに、新たに暗復号鍵（新暗復号鍵）を生成し、復元した旧暗復号鍵を用いて、暗号化されたアプリ１１０、１１１を復号した後、新暗復号鍵を用いて、アプリ１１０、１１１を再暗号化する。【０１９１】
以下、再暗号化処理の一例を、フローチャートを用いて詳細に説明する。図２４は、再暗号化処理を示すフローチャートである。本フローチャートにおいて、更新モジュール１３１、１３２、１３３の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。【０１９２】
まず、更新された保護制御モジュール１２１が、各更新モジュール１３１、１３２、１３３に対して、それぞれが保持している分散情報と暗復号鍵証明書とを送信するよう依頼する（ステップＳ５６１）。【０１９３】
更新モジュール群は、保護制御モジュール１２１からの依頼を受信すると（ステップＳ５６２）、保護制御モジュール１２１に分散情報と暗復号鍵証明書とを送信する（ステップＳ５６３）。【０１９４】
保護制御モジュール１２１は、更新モジュール群から分散情報と暗復号鍵証明書とを受信すると（ステップＳ５６４）、受信した分散情報から更新前の保護制御モジュール１２０が使用していた暗復号鍵（旧暗復号鍵）を復元する（ステップＳ５６５）。そして、旧暗復号鍵が正しく復元されたか否かを、暗復号鍵証明書を用いて検証する（ステップＳ５６６）。【０１９５】
旧暗復号鍵が正しく復元されなかった場合には（ステップＳ５６６でＮｏ）、どの更新モジュールが不正な分散情報を送信したかを特定する（炙り出し）（ステップＳ５６７）。特定した不正な更新モジュールは、更新サーバ２００へ通知される。【０１９６】
ここで、不正な更新モジュールを特定するための方法としては、以下の方法がある。まず、保護制御モジュール１２１は、各更新モジュールから分散情報のペアを取得し、取得した各分散情報に、どの更新モジュールから取得したかを識別するための識別情報をつける。次に、同じ識別子が付された、同一の値となるべき分散情報同士をグループ化し、各グループ中の分散情報同士の値を比較し、同じ値になる分散情報同士をさらにグループ化（サブグループ）する。そして、全てのグループからサブグループを１つずつ選び出す組み合わせの全てに対して、それぞれ旧暗復号鍵を生成し、正しい旧暗復号鍵が生成できたかを検証する。検証した結果、正しい旧暗復号鍵が生成できた場合は、当該組み合わせで選択されているサブグループに検証を通ったことを表す検証通過識別情報を付す。全ての組み合わせで旧暗復号鍵の生成及び検証を行った後、検証通過識別情報が付されているサブグループに含まれる分散情報を取り除く。ここで取り除かれずに残った分散情報が不正な値になっている分散情報である。そして、この分散情報の識別情報から当該分散情報を保持していた更新モジュールを特定する。これにより、識別情報に対応する更新モジュールが不正な分散情報を保持していた不正な更新モジュールであると特定することができる。【０１９７】
図２４に戻って、旧暗復号鍵が正しく復元された場合には（ステップＳ５６６でＹｅｓ）、保護制御モジュール１２１が暗復号鍵生成部５０６を用いて、新しい暗復号鍵（新暗復号鍵）を生成し（ステップＳ５６８）、旧暗復号鍵を用いて暗号化されたアプリ１１０、１１１を復号した後（ステップＳ５６９）、新暗復号鍵を用いてアプリ１１０、１１１を再暗号化する（ステップＳ５７０）。【０１９８】
９．７．次ラウンド準備時の動作
続いて、次ラウンド準備処理について説明する。回復処理の終了後、次の回復処理のための準備を行う次ラウンド準備処理を実施する。次ラウンド準備処理では、初期設計時の初期化処理と同様に、分散情報の生成と埋め込みを行う。【０１９９】
図２５は、次ラウンド準備時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール１３１、１３２、１３３の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。【０２００】
まず、保護制御モジュール１２１が、暗復号鍵（新暗復号鍵）から秘密分散法を用いて分散情報を生成し（ステップＳ６０１）、更に、署名秘密鍵を用いて暗復号鍵証明書を生成する（ステップＳ６０２）。生成した分散情報と暗復号鍵証明書とをそれぞれ、更新モジュール群へ送信する（ステップＳ６０３）。ここで、分散情報は、初期化処理時と同様に、更新モジュールと同数だけ生成され、それぞれの更新モジュール１３１、１３２、１３３には、異なる分散情報のペアが送信される。暗復号鍵証明書については、それぞれの更新モジュール１３１、１３２、１３３へ同じものが送信される。【０２０１】
更新モジュール群は、保護制御モジュール１２１から分散情報と暗復号鍵証明書とを受信すると（ステップＳ６０４）、受信した分散情報と暗復号鍵証明書とを分散情報保持部３１０に保持する（ステップＳ６０５）。【０２０２】
なお、この時、相互認証時において認証に失敗した不正な更新モジュールや、回復処理内の監視処理において検出した不正な更新モジュール、回復処理内の再暗号化処理において炙り出した不正な更新モジュールに対しては、分散情報を送信しない。【０２０３】
９．８．無効化時の動作
続いて、無効化処理について説明する。無効化処理は、相互認証時において認証に失敗した更新モジュールが存在した場合や、回復処理内の監視処理において改ざんされた更新モジュールを検出した場合、回復処理内の再暗号化処理において不正な更新モジュールを炙り出した場合等に、機器１００内部に存在する不正な更新モジュールを無効化する処理である。【０２０４】
上述のように改ざんされた更新モジュールを検出した場合には、不正な動作を防止するためにも、その更新モジュールの機能を停止させる必要があるのは言うまでもないが、その際、当該更新モジュールの機能を停止させる構成として、複数の更新モジュールの各々に予め更新モジュールの無効化機能を持たせておくことが考えられる。しかしながら、複数の更新モジュールの各々に予め更新モジュールの無効化機能を持たせておくと、更新モジュール群に含まれる一の更新モジュールが改ざんされた場合に、当該更新モジュールが正常な更新モジュールを無効化することが可能になる。本実施の形態によれば、更新サーバ２００に選択された更新モジュールのみが改ざんされた更新モジュールを無効化することができるので、改ざんされた更新モジュールによる正常な更新モジュールの無効化を防止することができる。【０２０５】
以下に、回復処理内の監視処理において更新モジュール１３３の改ざんのみが検出され、更新モジュール１３１、１３２の改ざんは検出されなかった場合の処理を例に挙げ、無効化時の動作の詳細を説明する。図２６は、更新モジュール１３３無効化時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。【０２０６】
まず、更新用ソフトウェア配布モジュール２１０は、監視処理において更新モジュール１３１、１３２、１３３から受信した改ざん検出結果に基づいて、どの更新モジュールが改ざんされたかを判定する（ステップＳ７０１）。この例では、更新モジュール１３３が改ざんされていると判定し、それ以外の更新モジュールは改ざんされていないと判定する。【０２０７】
更新用ソフトウェア配布モジュール２１０は、改ざんされていないと判定した更新モジュールの何れか（ここでは更新モジュール１３１）へ、改ざんされた更新モジュール１３３の無効化を依頼する（ステップＳ７０２）。さらに、アクセス情報取得鍵配布モジュール２２０へ、無効化に関する情報を通知する（ステップＳ７０３）。無効化に関する情報は、改ざんされた更新モジュール１３３の情報（更新モジュール識別子）及び無効化を依頼した更新モジュール１３１の情報（更新モジュール識別子）である。【０２０８】
更新モジュール１３１は、更新用ソフトウェア配布モジュール２１０から更新モジュール１３３の無効化依頼を受信すると（ステップＳ７０４）、アクセス情報取得鍵配布モジュール２２０に対し更新モジュール１３３を無効化するためのアクセス情報取得鍵を送付するよう依頼する（ステップＳ７０５）。さらに、アクセス制御モジュール１４０に対し更新モジュール１３３を無効化するためのアクセス情報を送信するよう依頼する（ステップＳ７０６）。【０２０９】
アクセス情報取得鍵配布モジュール２２０は、無効化に関する情報を更新用ソフトウェア配布モジュール２１０から受信し（ステップＳ７０７）、アクセス情報取得鍵の送付依頼を更新モジュール１３１から受信すると（ステップＳ７０８）、無効化に関する情報に基づいて、送付依頼が正しい依頼であるか否かを判断する（ステップＳ７０９）。この判断は、更新用ソフトウェア配布モジュール２１０から通知された無効化に関する情報に基づいて、送付依頼をした更新モジュール１３１が更新用ソフトウェア配布モジュール２１０により無効化依頼をされた更新モジュールかどうか、及び送付依頼の対象であるアクセス情報取得鍵が改ざんされた更新モジュール１３３に対応するアクセス情報取得鍵かどうかを判断することにより行われる。【０２１０】
正しい依頼でないと判断した場合（ステップＳ７０９でＮｏ）、すなわち、改ざんされた更新モジュール１３３からの依頼であったり、あるいは改ざんされていない更新モジュール１３１、１３２に対応するアクセス情報取得鍵の取得依頼であったりする場合には、無効化処理を終了する。【０２１１】
正しい依頼であると判断した場合には（ステップＳ７０９でＹｅｓ）、依頼元の更新モジュール１３１へ、更新モジュール１３３を無効化するためのアクセス情報取得鍵を送付する（ステップＳ７１０）。【０２１２】
アクセス制御モジュール１４０は、更新モジュール１３１から更新モジュール１３３を無効化するためのアクセス情報取得依頼を受信すると（ステップＳ７１１）、更新モジュール１３３に対応する暗号化アクセス情報を送信する（ステップＳ７１２）。【０２１３】
更新モジュール１３１は、アクセス制御モジュール１４０から暗号化アクセス情報を受信し（ステップＳ７１３）、アクセス情報取得鍵配布モジュール２２０からアクセス情報取得鍵を受信すると（ステップＳ７１４）、受信したアクセス情報取得鍵を用いて暗号化アクセス情報を復号し、アクセス情報を取得する（ステップＳ７１５）。取得したアクセス情報は、更新モジュール１３３を消去するための専用ドライバである。更新モジュール１３１は、そのドライバを利用して、RAM１３上に展開されている、改ざんされた不正な更新モジュール１３３を無効化する（ステップＳ７１６）。【０２１４】
無効化処理が終了すると、更新モジュール１３１は、アクセス情報取得鍵配布モジュール２２０から取得したアクセス情報取得鍵や、アクセス制御モジュール１４０から取得した暗号化されたアクセス情報、復号後のアクセス情報等を消去する。【０２１５】
以上のように本実施の形態によれば、回復処理において、更新モジュール群内の複数の更新モジュールが監視処理を行うので、改ざんされた更新モジュールを検出することが可能となり、ソフトウェア更新システムの信頼性を高めることができる。【０２１６】
また、改ざんされた更新モジュールを無効化するので、改ざんされた更新モジュールによる不正動作を防止することができる。
（実施の形態２）
実施の形態２では、保護制御モジュール１２０が、復号ロード機能や改ざん検出機能、解析ツール検出機能等の機能を制御し、アプリ１１０、１１１を攻撃者による攻撃から保護するだけではなく、更新モジュール１３１、１３２、１３３を攻撃者による攻撃から保護する。これにより、更新モジュール１３１、１３２、１３３が一方的に保護制御モジュール１２０の改ざんを検出するだけでなく、更新モジュール１３１、１３２、１３３と保護制御モジュール１２０とが相互に監視し合う構成とすることができる。【０２１７】
実施の形態２における検知時の動作としては、保護制御モジュール１２０がそれぞれの更新モジュールが改ざんされていないかどうかを、改ざん検出用証明書を用いて検証する。更新モジュール１３１、１３２、１３３のうち何れかの更新モジュールの改ざんを検出した場合には、その旨を更新用ソフトウェア配布モジュール２１０へ通知する。【０２１８】
改ざんを検出しなかった場合には、更新用ソフトウェア配布モジュール２１０への通知は行わない。【０２１９】
保護制御モジュール１２０から更新用ソフトウェア配布モジュール２１０へ、更新モジュール１３１、１３２、１３３の改ざんを検出した旨の通知があった場合には、更新用ソフトウェア配布モジュール２１０は、保護制御モジュール１２０が改ざんされていないかを確認するために、更新モジュール１３１、１３２、１３３へ保護制御モジュール１２０の改ざん検出を依頼する。【０２２０】
更新用ソフトウェア配布モジュール２１０から依頼を受けた更新モジュール１３１、１３２、１３３は、保護制御モジュール１２０の改ざん検出を実施し、改ざん検出結果を更新用ソフトウェア配布モジュール２１０へ通知する。この時、保護制御モジュール１２０が改ざんされていた場合でも、他の更新モジュールへは通知しない。【０２２１】
以降の処理は、本発明の実施の形態１における検知処理において、更新モジュール１３１、１３２、１３３から更新用ソフトウェア配布モジュール２１０へ、保護制御モジュール１２０の改ざんを検出した旨の通知があった場合の処理と同様であるので、ここでは省略する。【０２２２】
以上のように本実施の形態によれば、検知処理において、更新モジュール１３１、１３２、１３３と保護制御モジュール１２０とが相互に監視し合い、更新モジュールが改ざんされている場合には、保護制御モジュール１２０もそれを検出することが可能となるので、ソフトウェア更新システムの信頼性を高めることができる。
（実施の形態３）
実施の形態３では、各更新モジュールに保護制御モジュール１２０を更新するための機能を予め持たせるのではなく、保護制御モジュール１２０の改ざんを検出し、保護制御モジュール１２０を更新する必要が生じた時に、保護制御モジュール１２０を更新するためのアクセス情報を取得することにより、保護制御モジュール１２０を更新する機能を更新モジュールに付加する。【０２２３】
そこで、本実施の形態におけるアクセス情報取得鍵配布モジュール２２０は、各更新モジュールのアクセス情報取得鍵に加え、保護制御モジュール１２０を更新するためのアクセス情報取得鍵を保持している。【０２２４】
また、本実施の形態におけるアクセス情報モジュール１４０は、各更新モジュールのアクセス情報に加え、保護制御モジュール１２０を更新するための暗号化アクセス情報を保持している。【０２２５】
図２０〜２２を用いて、保護制御モジュール１２０を更新する機能を更新モジュールに付加する処理を説明する。以降の説明において、実施の形態１と同じ処理については同じ符号を用いる。【０２２６】
更新処理（ステップＳ５０２）において、更新用ソフトウェア配布モジュール２１０が更新用保護制御モジュール１２１を複数の鍵を用いて多重に暗号化し、多重暗号化更新用保護制御モジュールと第１の鍵とを、更新モジュール群に含まれる更新モジュール１３１を送信先として送信する（ステップＳ５２１からＳ５２８）。【０２２７】
更新モジュール群に含まれる更新モジュールは、更新用ソフトウェア配布モジュール２１０から第２の鍵を受信し、多重暗号化された更新用保護制御モジュールを復号し、更新用保護制御モジュールを取得する（ステップＳ５２９からＳ５４０）。【０２２８】
更新用保護制御モジュールを取得後、更新モジュール１３２は、保護制御モジュール１２０を更新用保護制御モジュール１２１へ更新するために、アクセス情報取得鍵配布モジュール２２０に対し保護制御モジュール１２０を更新するためのアクセス情報取得鍵を送付するよう依頼する。さらに、アクセス制御モジュール１４０に対し保護制御モジュール１２０を更新するためのアクセス情報を送信するよう依頼する。【０２２９】
アクセス情報取得鍵配布モジュール２２０は、アクセス情報取得鍵の送付依頼を受けると、依頼元の更新モジュールが保護制御モジュール１２０を更新する更新モジュールであるかどうかを、更新用ソフトウェア配布モジュール２１０に問い合わせ、保護制御モジュール１２０を更新する更新モジュールであった場合には、依頼元の更新モジュール１３２へ、保護制御モジュール１２０を更新するためのアクセス情報取得鍵を送付する。【０２３０】
アクセス情報モジュール１４０は、更新モジュール１３２からアクセス情報の送信依頼を受け付けると、保護制御モジュール１２０に対応する暗号化アクセス情報を更新モジュール１３２に送信する。【０２３１】
更新モジュール１３２は、アクセス情報取得鍵配布モジュール２２０からアクセス情報取得鍵を受信し、アクセス制御モジュール１４０から暗号化アクセス情報を受信すると、受信したアクセス情報取得鍵を用いて、暗号化アクセス情報を復号し、アクセス情報を取得する。取得したアクセス情報は、保護制御モジュール１２０を更新するための専用ドライバである。更新モジュール１３２は、そのドライバを利用して、保護制御モジュール１２０を更新用保護制御モジュール１２１へ更新する（ステップＳ５４１）。そして、更新の終了を他の更新モジュールへ通知する（ステップＳ５４２）。【０２３２】
更新モジュール群１３０に含まれる各更新モジュールは、保護制御モジュール１２０が更新用保護制御モジュール１２１へ正しく更新されたか検証し、正しく更新されている場合には、保護制御モジュール１２１のＭＡＣ値を生成する（ステップＳ５４３からＳ５５１）。
（その他の変形例）
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。【０２３３】
（１）上記実施の形態では、保護制御モジュール１２０を更新するとしたが、これに限定するものではなく、更新モジュールやアプリ等、保護制御モジュール１２０以外のモジュールを更新するとしてもよい。以下に、更新モジュール１３３を更新する場合を例に挙げ、更新モジュールの更新処理を説明する。更新モジュールの更新処理では、保護制御モジュールを更新する場合と同様に、更新用ソフトウェア配布モジュール２１０が更新用更新モジュール１３３を複数の鍵を用いて多重に暗号化し、更新モジュール群１３０に含まれる更新モジュール（更新モジュール１３３を除く）を送信先として送信する。更新モジュール群１３０に含まれる更新モジュールは、更新モジュール１３３を更新用更新モジュール１３３に更新する。この時、多重に暗号化された更新用更新モジュール１３３を復号するための複数の鍵を、更新モジュール群１３０に含まれる更新モジュールへ送信するタイミングを更新用ソフトウェア配布モジュール２１０が制御することで、攻撃者が暗号化されていない更新用更新モジュール１３３を入手することを不可能にする。【０２３４】
図２８〜３０は、更新モジュールの更新処理の一例を示すフローチャートである。ここでは、上述したように更新モジュール１３３を更新するものとする。【０２３５】
図２８〜３０は、基本的には、図２０〜２２と同様である。異なる点は、更新対象となる更新モジュール１３３には、更新検証証明書や、復号終了通知、更新終了通知が送信されないことである。【０２３６】
また、更新モジュールを無効化するとしたが、これに限定するものではなく、保護制御モジュール１２０やアプリ等、更新モジュール以外のモジュールを無効化するとしてもよい。アプリ１００、１１０は、上述した機能以外の機能を提供するソフトウェアであってもよい。【０２３７】
また、一つでも更新モジュールが改ざんされている場合には、改ざんされていない更新モジュールが全ての更新モジュール及び保護制御モジュールを更新あるいは無効化するとしてもよい。【０２３８】
（２）上記実施の形態では、更新モジュール１３１、１３２、１３３は、監視制御部３０１、改ざんチェック実行部３０２、更新制御部３０３、復号部３０４、認証部３０５、署名公開鍵保持部３０６、検証鍵保持部３０７、認証鍵対保持部３０８、MAC値保持部３０９、分散情報保持部３１０、アクセス情報取得部３１１、及び無効化処理部３１２を含んで構成されるとしたが、これに限定するものではなく、監視処理に必要な構成要素（監視制御部３０１、改ざんチェック実行部３０２、署名公開鍵保持部３０６）のみで構成されるとしてもよいし、更新処理に必要な構成要素（更新制御部３０３、復号部３０４、認証部３０５、署名公開鍵保持部３０６、認証鍵対保持部３０８）のみで構成されるとしてもよいし、無効化処理に必要な構成要素（アクセス情報取得部３１１、無効化処理部３１２）のみで構成されるとしてもよいし、さらに、上記の組み合わせから構成されるとしてもよい。この時、更新モジュール群１３０に含まれる更新モジュール全体として、監視処理と更新処理に必要な構成要素を含むよう構成されていればよい。【０２３９】
（３）上記実施の形態では、更新モジュール１３１、１３２、１３３において監視制御部３０３が他の更新モジュールを改ざん検出するタイミング、及び改ざん検出対象となる更新モジュールの選択処理を制御するとした。すなわち、各更新モジュールの監視制御部３０３が独立に監視に関する制御を行うとしたが、これに限定するものではなく、１つの更新モジュールの監視制御部３０３が監視処理全体を制御するとしてもよいし、監視制御部３０３が更新サーバ２００からの指示に基づいて、改ざん検出タイミングや改ざん検出対象となる更新モジュールの選択を制御するとしてもよい。【０２４０】
（４）上記実施の形態では、更新モジュール１３１、１３２、１３３において改ざんチェック実行部３０２により他の更新モジュールや保護制御モジュール１２０の改ざんチェックを実行するとしたが、改ざんチェック対象はモジュール全体に限定するものではなく、モジュール内の一部、例えば、特定の機能や関数、鍵等のデータであってもよい。また、一度に改ざん対象全てを改ざんチェックするのではなく、改ざん対象の一部を改ざんチェックするだけでもよい。この時、改ざん対象を一定のサイズに分割した部分毎に改ざんチェックしてもよいし、機能や関数単位で分割した部分毎に改ざんチェックしてもよい。さらに、改ざん対象の一部を、改ざんチェックの度に順番に改ざんチェックするとしてもよいし、改ざんチェックする部分を改ざんチェックの度にランダムに決定してもよし、どの部分を改ざんチェックするかが他のモジュールや機器１００外部などから与えられるとしてもよい。【０２４１】
（５）上記実施の形態では、更新モジュール１３１、１３２、１３３や保護制御モジュール１２０は、耐タンパ化された領域等、攻撃者による攻撃から保護されている領域で動作するとしてもよい。監視処理に必要な構成要素のみで構成される更新モジュールが、攻撃者による攻撃から保護されている領域で動作する場合、他の更新モジュールや更新用ソフトウェア配布モジュール２１０、アクセス情報取得鍵配布モジュール２２０は、その保護された領域にある更新モジュールから、他の更新モジュールや保護制御モジュール１２０が攻撃されたことを検知した旨の通知を受けたときに、その通知を無条件に受け入れ、更新処理や無効化処理を実施してもよいし、その通知を他のモジュールからの通知よりも重要な通知として扱い、更新処理や無効化処理の判断を行ってもよい。【０２４２】
また、保護制御モジュールが保護モード（耐タンパ化された領域等）で、更新モジュールが通常モード（耐タンパ化されていない領域等）で動作するとしてもよい。これにより、保護モードで動作する保護制御モジュールが信頼できなくなったときにもそれを検知し、更新できる。【０２４３】
（６）上記実施の形態では、アクセス情報取得鍵配布モジュール２２０は、更新サーバ２００にあり、アクセス制御モジュール１４０は、機器１００にあるとしたが、これに限定するものではなく、アクセス情報取得鍵配布モジュール２２０とアクセス制御モジュール１４０とはそれぞれ、機器１００にあってもよいし、更新サーバ２００にあってもよいし、各更新モジュール内にあってもよい。また、アクセス情報取得鍵配布モジュール２２０とアクセス制御モジュール１４０とは、別々のモジュールではなく１つのモジュールであってもよい。アクセス情報取得鍵配布モジュール２２０とアクセス制御モジュール１４０とが１つのモジュールである場合には、更新モジュールへアクセス情報取得鍵と暗号化アクセス情報とを送信するのではなく、アクセス情報を直接送信してもよい。さらに、アクセス情報取得鍵配布モジュール２２０やアクセス制御モジュール１４０が機器１００内にあるときには、耐タンパ化などにより攻撃から保護される領域にあるとしてもよい。【０２４４】
（７）上記実施の形態では、更新サーバ２００は、更新用ソフトウェア配布モジュール２１０とアクセス情報取得鍵配布モジュール２２０とから構成されるとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール２１０とアクセス情報取得鍵配布モジュール２２０とは、１つのモジュールであってもよいし、どちらか１つのモジュールのみで構成されてもよい。【０２４５】
（８）上記実施の形態では、ソフトウェア更新システム１０００は、機器１００の工場製造時に初期設計処理を行うとしたが、これに限定するものではなく、販売後など工場出荷後のどこかで初期化処理を実施してもよい。また、初期化処理は１度だけでなく、２度以上実施してもよい。【０２４６】
（９）上記実施の形態では、初期設計時の動作として、改ざん検出用証明書及び認証鍵証明書は、更新用ソフトウェア配布モジュール２１０が保持する署名秘密鍵を用いて生成された証明書であるとしたが、これに限定するものではなく、それぞれ別の鍵を用いて生成されてもよいし、更新用ソフトウェア配布モジュール２１０以外の証明書発行装置により発行された証明書でもよい。【０２４７】
（１０）上記実施の形態では、初期設計時や次ラウンド準備時の動作として、暗復号鍵から生成する分散情報を更新モジュール１３１、１３２、１３３へ送信し、更新モジュール１３１、１３２、１３３が分散情報を保持するとしたが、これに限定するものではなく、更新モジュールの代わりにアプリが保持するとしてもよいし、更新モジュール１３１、１３２、１３３とアプリとが保持するとしてもよい。【０２４８】
（１１）上記実施の形態では、検知時の動作として、更新モジュール１３１、１３２、１３３が保護制御モジュール１２０の改ざん検出を行うときに、検証鍵を使用して計算したＭＡＣ値を用いて改ざん検出処理を行うとしたが、これに限定するものではなく、保護制御モジュール１２０の改ざん検出用証明書を用いて検証するとしてもよい。また、MAC値や証明書のようにハッシュ値を利用した改ざん検証を行うのではなく、ログをチェックすることで改ざん検証を行うとしてもよい。【０２４９】
（１２）上記実施の形態では、検知時の動作として、更新モジュール１３１、１３２、１３３が保護制御モジュール１２０の改ざんを検出した場合、更新用ソフトウェア配布モジュール２１０と他の更新モジュールへ通知するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール２１０と他の更新モジュールのうち、どれか１つ以上のモジュールに通知するとしてもよい。また、保護制御モジュール１２０の改ざんを検出した場合、更新モジュールを停止するとしてもよいし、機器１００や保護制御モジュール１２０を停止するとしてもよい。更に、改ざんされた保護制御モジュールを消去するとしてもよい。さらに、更新モジュール１３１、１３２、１３３が保護制御モジュール１２０の改ざんを検出しなかった場合、更新用ソフトウェア配布モジュール２１０へ通知を行わないとしたが、これに限定するものではなく、改ざん検出処理を実施した結果として、改ざんを検出しなかった旨を通知するとしてもよい。【０２５０】
（１３）上記実施の形態では、検知時の動作として、更新モジュール１３１、１３２、１３３は、他の更新モジュールに保護制御モジュールの改ざん検出結果を送信しないとしたが、それぞれの更新モジュールで検出結果を共有するとしてもよい。また、検出結果を共有しない更新モジュールがあった場合に、当該更新モジュールを不正な更新モジュールと判断して、無効化するとしてもよい。【０２５１】
（１４）上記実施の形態では、解析・判断時の動作として、改ざん情報に基づいて保護制御モジュール１２０を更新するかどうか判定するとしたが、これに限定するものではなく、改ざんされていると通知してきた更新モジュールの数によって更新するかどうかを判定してもよい。また、解析・判断時の動作として、保護制御モジュール１２０を更新するか否か、及び保護制御モジュール１２０を無効化するか否かを判断したが、これに限定するものではなく、機器１００を停止するか否かを判断するとしてもよい。【０２５２】
（１５）上記実施の形態では、相互認証時の動作として、更新モジュール１３１、１３２、１３３が、更新用ソフトウェア配布モジュール２１０を認証し、その後、更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証し、その後、更新モジュール１３１、１３２、１３３が、更新用ソフトウェア配布モジュール２１０を認証してもよいし、それぞれの更新モジュール１３１、１３２、１３３と更新用ソフトウェア配布モジュール２１０とが個別に認証処理を行ってもよい。【０２５３】
（１６）上記実施の形態では、相互認証時の動作として、更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証する処理において、チャレンジデータをそれぞれの更新モジュールで異なる値にするとしたが、これに限定するものではなく、チャレンジデータとして全ての更新モジュールで同じ値としてもよいし、更新モジュール１３１、１３２、１３３を複数のグルーブに分け、それぞれのグループで異なる値にしてもよい。【０２５４】
（１７）上記実施の形態では、相互認証時の動作として、それぞれの更新モジュール１３１、１３２、１３３が、更新用ソフトウェア配布モジュール２１０を認証する処理において、それぞれの更新モジュール１３１、１３２、１３３が個別に更新用ソフトウェア配布モジュール２１０を認証するとしたが、これに限定するものではなく、署名検証した結果を他の更新モジュールへ通知し、更新モジュール間で検証結果を共有し、自更新モジュールの認証結果と他の更新モジュールから受信した認証結果とから、更新用ソフトウェア配布モジュール２１０が正当なモジュールかどうかをそれぞれ判定してもよい。判定方法としては、例えば、一定数（例えば、過半数等）の更新モジュールが認証に成功した場合には正当なモジュールであると判定し、そうでない場合には、正当なモジュールではないと判定する方法がある。【０２５５】
（１８）上記実施の形態では、相互認証時の動作として、更新サーバ２００は署名秘密鍵と署名公開鍵とを使用して相互認証処理を実施するとしたが、これに限定するものではなく、署名秘密鍵と署名公開鍵とは別に、相互認証に使用する認証鍵対を用いるとしてもよい。この時、更新サーバ２００の認証鍵対のうちの認証公開鍵は、予め更新モジュール１３１、１３２、１３３で保持するとしてもよいし、相互認証処理時に更新サーバ２００から更新モジュール１３１、１３２、１３３へ送信するとしてもよい。【０２５６】
（１９）上記実施の形態では、相互認証時の動作として、正当なモジュールであると検証できた更新モジュールが、回復処理に必要な数以上あるかどうかで、その後の回復処理を実施するかどうか判定したが、これに限定するものではなく、不正な更新モジュールの数が、予め設定されている許容数未満かどうかで回復処理を実施するかどうか判定してもよい。また、相互認証処理において、回復処理に必要な数に満たないと判定した場合には、機器を停止するとしたが、更新モジュールを無効化してもよい。【０２５７】
（２０）本発明の実施の形態１では、相互認証時の動作として、更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証する時に、更新モジュール１３１、１３２、１３３は、レスポンスデータと一緒に認証公開鍵と認証鍵証明書とを更新用ソフトウェア配布モジュール２１０へ送信するとしたが、これに限定するものではなく、それぞれ別のタイミングで送信してもよい。また、認証公開鍵や認証鍵証明書は、更新用ソフトウェア配布モジュール２１０から要求があったときにのみそれぞれ送信するとしてもよい。この時、更新用ソフトウェア配布モジュール２１０は、全ての更新モジュールの認証公開鍵や認証鍵証明書を受信してもよいし、予め設定されている、回復処理に必要な数以上、或いは予め設定されている、不正な更新モジュールの許容数未満の更新モジュールの認証公開鍵と認証鍵証明書とを受信してもよい。【０２５８】
（２１）本発明の実施の形態１では、回復時の動作として、監視処理時を、１回の復号中（監視３−１、３−２、５−１、５−２）に２回実施するとしたが、これに限定するものではなく、復号処理の時間にあわせて何回監視処理を行ってもよいし、復号処理以外であっても、鍵や更新用保護制御モジュールの受信処理時や検知処理時、相互認証時に監視処理を行ってもよい。また、監視処理を一定時間間隔で定期的に実施するとしたが、これに限定するものではなく、更新処理を複数のブロックに分割し、その処理ブロックの処理が終わるごとに実施してもよいし、ランダムな時間間隔で実施してもよいし、更新サーバ２００から指定された時間間隔で実施してもよい。【０２５９】
また、各更新モジュールは、監視処理を実行するタイミングを示す同期情報を外部のサーバから取得し、取得した同期情報にしたがって監視処理を実行するとしてもよい。これにより、各更新モジュールは、他の更新モジュールと同じタイミングで監視処理を実行することができるので、不正な更新モジュールの検出精度を向上させることができる。【０２６０】
さらに、通常時と回復処理時とにおける検知頻度を変更するとしてもよい。例えば、通常時より回復処理時の検知頻度を高くすることにより、回復処理中の保護制御モジュールの保護に万全を期すことができる。検知頻度の変更は、回復処理中であってもよい。【０２６１】
（２２）本発明の実施の形態１では、回復時の動作として、監視処理のパターンは、更新モジュール１３１が更新モジュール１３２の改ざん検出を行い、更新モジュール１３２が更新モジュール１３３の改ざん検出を行い、更新モジュール１３３が更新モジュール１３１の改ざん検出を行うものであったが、これに限定するものではなく、例えば、更新モジュール１３１が更新モジュール１３３の改ざん検出を行い、更新モジュール１３２が更新モジュール１３１の改ざん検出を行い、更新モジュール１３３が更新モジュール１３２の改ざん検出を行うなど、予め決められたパターンで改ざん検出するとしてもよいし、どの更新モジュールの改ざん検出を行うかをランダムに決定してもよいし、他のモジュールや機器１００外部から与えられるとしてもよい。また、各更新モジュールは、当該更新モジュール（自更新モジュール）が改ざんされていないかを検証するとしてもよい。さらに、自更新モジュールの改ざんを検出すると、自更新モジュール自身を無効化するとしてもよい。更に、全ての更新モジュールが他の更新モジュールから監視される必要はなく、他の更新モジュールから監視されない更新モジュールがあってもよいし、複数の更新モジュールから監視されてもよい。また、監視処理のパターンを変更する場合は、改ざん検出の処理毎など、一定の間隔で変更するとしてもよいし、ランダムなタイミングで変更するとしてもよいし、他のモジュールや機器１００外部から与えられたタイミングで変更するとしてもよい。また、複数の更新モジュールは、改ざん検出の結果を、更新サーバにより指定される順序で、更新サーバに送信してもよい。【０２６２】
（２３）本発明の実施の形態１では、回復時の動作として、監視処理時に、更新モジュール１３１が更新モジュール１３２の改ざん検出を行い、更新モジュール１３２が更新モジュール１３３の改ざん検出を行い、更新モジュール１３３が更新モジュール１３１の改ざん検出を行うというように、全ての更新モジュールが監視処理を行うとしたが、これに限定するものではなく、一つの更新モジュールが更新処理を実施し、他の更新モジュールが監視処理を実施してもよい。この時の監視パターンとしては、更新処理を行っている更新モジュールを、１つの更新モジュールが監視してもよいし、複数または全ての更新モジュールが監視してもよい。例えば、更新モジュール１３１が更新モジュール１３２の改ざん検出を行い、更新モジュール１３２が更新モジュール１３３の改ざん検出を行い、更新モジュール１３３が更新処理を行う。これにより、更新処理を中断することなく監視処理も実施できる。【０２６３】
また、上記実施の形態では、更新モジュール１３１が更新モジュール１３２の改ざん検出を行い、更新モジュール１３２が更新モジュール１３３の改ざん検出を行い、更新モジュール１３３が更新モジュール１３１の改ざん検出を行うというように、監視構成としてループ方式を用いたが、複数の更新モジュールの各々が相互に監視し合う構成としてもよいし、それらを組み合わせてもよい。複数の更新モジュールの各々が相互に監視し合う構成とすることにより、改ざん検証精度をさらに高めることができる。【０２６４】
（２４）本発明の実施の形態１では、回復時の動作として、更新モジュール１３２は、取得した更新用保護制御モジュール１２１を保護制御モジュール１２０に上書きし、保護制御モジュール１２０を更新するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール２１０から保護制御モジュール１２０と更新用保護制御モジュール１２１との差分を取得し、差分のみを更新するとしてもよいし、更新用保護制御モジュール１２１を保護制御モジュール１２０とは別の領域へ書き込み、保護制御モジュール１２０に代わって、更新用保護制御モジュール１２１が実行されるようにしてもよい。【０２６５】
（２５）本発明の実施の形態１では、回復時の動作として、監視処理により、更新モジュール１３１、１３２、１３３の改ざんが検出された場合、改ざん検出の通知を受けた更新用ソフトウェア配布モジュール２１０は、直ちに回復処理を停止するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール２１０から更新モジュールへ、鍵などのデータを次に送信するタイミングで回復処理を停止するとしてもよい。また、回復処理を停止するのではなく、改ざんされた更新モジュールを使用せずに、正常な更新モジュールを用いて回復処理を行うとしてもよいし、改ざんされた更新モジュールを無効化あるいは更新するとしてもよい。この時、無効化や更新などの処理を行うタイミングとしては、直ちに処理してもよいし、次に鍵が送付されるタイミングで処理してもよいし、改ざんされた更新モジュールを使用せずに回復処理を再開するときに処理してもよい。改ざんされた更新モジュールを無効化あるいは更新する処理を担う更新モジュールを更新サーバが指定するとしてもよい。また、監視処理により改ざんが検出された場合だけでなく、検知処理時に保護制御モジュール１２０によって改ざんが検出された更新モジュールや、相互認証処理時に認証に失敗した更新モジュールについても同様に、当該更新モジュールを使用せずに回復処理を行うとしてもよいし、改ざんされた更新モジュールを無効化するとしてもよいし、更新するとしてもよい。さらに、改ざんされた更新モジュールが存在する場合には、保護制御モジュールの更新を行わないとしてもよい。【０２６６】
（２６）本発明の実施の形態１では、回復時の動作として、更新処理において復号に使用する更新モジュールを、更新用ソフトウェア配布モジュール２１０が更新モジュール群１３０から一つ選択するとしたが、その選択方法は、予め決められた更新モジュールを選択するとしてもよいし、ランダムに決定するとしてもよいし、機器１００から通知された情報を元に決定するとしてもよいし、相互認証時に認証した順番に応じて選択するとしてもよい。【０２６７】
（２７）本発明の実施の形態１では、回復時の動作として、更新処理において更新用ソフトウェア配布モジュール２１０が更新用保護制御モジュール１２１を複数の鍵を用いて多重に暗号化するとしたが、これに限定するものではなく、更新用保護制御モジュール１２１を複数の部分に分割した分割モジュールを生成し、分割モジュールそれぞれを個別に暗号化し、更新モジュールと一対一に対応する形態で、更新モジュールへ送信するとしてもよい。この場合、更新処理としては、暗号化した分割モジュールと暗号に使用した鍵を送信するときに、それらを１度に全て送信するのではなく、１つの暗号化した分割モジュールの復号処理が終了するまで、他の暗号化した分割モジュールと鍵を送信しないように、更新モジュールへの送信を制御する。別の方法として、暗号化した分割モジュールは１度に更新モジュールへ送信し、それらを復号するための鍵の送信のタイミングのみを制御するとしてもよいし、鍵は１度に更新モジュールへ送信し、暗号化した分割モジュールの送信のタイミングのみを制御するとしてもよいし、全ての鍵と暗号化した分割モジュールを１度に送信するとしてもよい。また、分割モジュールは、１つの鍵で暗号化されるのではなく、複数の鍵を用いて多重に暗号化されてもよい。この場合、鍵や多重暗号化した分割モジュールの送信制御は、更新用保護制御モジュール１２１を複数の鍵を用いて多重に暗号化した時と同様である。更に、暗号化した分割モジュールとそれを復号する鍵は、１つの更新モジュールへ送信してもよいし、それぞれ別の更新モジュールへ送信し、機器１００内部で更新モジュール同士が協調動作するとしてもよい。その際、分割モジュールを受信する前後で監視処理を実施してもよい。また、監視処理により、改ざんされた不正な更新モジュールが検出された場合、次の分割モジュールを送信するタイミングで更新処理を停止してもよい。さらに、複数の更新モジュールは、改ざんされた更新モジュールが存在する場合には、それを更新サーバに通知し、更新サーバは、改ざんされた更新モジュールには復号鍵を送信しないとしてもよい。分割モジュールはそれぞれ異なる暗号鍵で暗号化されていてもよい。【０２６８】
（２８）本発明の実施の形態１では、回復時の動作として、暗復号鍵（旧暗復号鍵）で暗号化されたアプリ１１０、１１１を新しい暗復号鍵（新暗復号鍵）を用いて再暗号化するとしたが、これに限定するものではなく、再暗号化処理を行わなくてもよい。この時、新暗復号鍵を生成せずに旧暗復号鍵を使い続けるとしてもよいし、旧暗復号鍵と新暗復号鍵を保持しておき、アプリによって使用する鍵を変える構成にしてもよいし、旧暗復号鍵が必要になったときには分散情報から再び生成するとしてもよい。旧暗復号鍵を使用し続ける場合は、保護制御モジュール１２０が更新される度に旧暗復号鍵が増えることになる。また、各更新モジュールで新暗復号鍵と旧暗復号鍵の分散情報を保持しておく必要がある。【０２６９】
（２９）本発明の実施の形態１において、保護制御モジュール１２１が正しく更新されなかった場合に機器１００を停止するとしたが、これに限定するものではなく、再度、相互認証処理及び回復処理を実施するとしても良い。【０２７０】
（３０）本発明の実施の形態１において、無効化時の動作として、アクセス情報は、更新モジュールを消去するための専用ドライバであるとしたが、これに限定するものではなく、更新モジュールを消去するための専用プログラムであってもよいし、更新モジュールを消去するための手順が記された手順書であってもよいし、消去する更新モジュールのアドレスであってもよいし、更新モジュールを消去するプログラムのアドレスであってもよいし、更新モジュールを消去するための機能を動作させるためのレジスタやメモリのアドレスやレジスタやメモリに設定する値であってもよい。また、アクセス情報は、コード部分を消去する旨が記述された情報であってもよい。この場合、コード位置はヘッダに格納されており、ヘッダを参照して消去すべきコード部分を判断するとしてもよい。さらに、アクセス制御モジュール自体が暗号鍵で暗号化されているとしてもよい。その場合には、改ざんされていない更新モジュールは、更新サーバから、アクセス制御モジュールを暗号化した暗号鍵に対応する復号鍵を取得し、取得した復号鍵を用いてアクセス制御モジュールを復号し、改ざんされた更新モジュールに対応するアクセス情報をアクセス制御モジュールから取得し、取得したアクセス情報に基づいて、改ざんされた更新モジュールを無効化するとしてもよい。【０２７１】
（３１）本発明の実施の形態１において、無効化時の動作として、改ざんされた更新モジュール全体を消去するとしたが、これに限定するものではなく、改ざんされた不正な更新モジュールの一部、例えば、他のモジュールを読み込むための読み込み機能など特定の機能や関数、鍵や他のモジュールをアクセスするための情報（チケット、トークン、ソケット）などのデータを消去するとしてもよいし、他のプログラムからアクセスできなくしてもよいし、不活性化してもよいし、更新してもよい。また、改ざんされた更新モジュールを無効化した後、無効化処理を行った更新モジュールは、アクセス制御モジュールに格納されている、無効化した更新モジュールに対応するアクセス情報を消去するとしてもよい。【０２７２】
（３２）本発明の実施の形態１において、改ざんされた不正な更新モジュールを無効化するとしたが、これに限定するものではなく、改ざんされた不正な更新モジュールを無効化しないとしてもよい。この時、どのくらいの部分が改ざんされているか、どの部分が改ざんされたか等によって、無効化するかどうかを判断してもよいし、改ざんされた不正な更新モジュールの数によって無効化する更新モジュール数を決めてもよい。【０２７３】
（３３）本発明の実施の形態２では、保護制御モジュール１２０が更新モジュール１３１、１３２、１３３の改ざん検出を行うときに、各更新モジュールの改ざん検出用証明書を検証するとしたが、これに限定するものではなく、更新モジュール１３１、１３２、１３３と同様に、検証鍵を使用して計算したＭＡＣ値を用いる改ざん検出を行うとしてもよい。この場合、保護制御モジュール１２０には、検証鍵が埋め込まれ、初期設計時に、改ざん検出用証明書の検証が実施される。問題なかった場合には、保護制御モジュール１２０が、それぞれの更新モジュールに対して検証鍵を使用してＭＡＣ値を生成し、ＭＡＣ値テーブルとして保持する処理を追加する必要がある。【０２７４】
（３４）本発明の実施の形態２では、保護制御モジュール１２０が、更新モジュール１３１、１３２、１３３の改ざんを検出しなかった場合には、更新用ソフトウェア配布モジュール２１０へ通知を行わないとしたが、これに限定するものではなく、改ざんを検出しなかった旨を更新用ソフトウェア配布モジュール２１０へ通知してもよい。【０２７５】
（３５）本発明の実施の形態２では、保護制御モジュール１２０から更新用ソフトウェア配布モジュール２１０へ、更新モジュール１３１、１３２、１３３の改ざんを検出した旨の通知があった場合、更新用ソフトウェア配布モジュール２１０は、保護制御モジュール１２０が改ざんされていないかを確認するために、更新モジュール１３１、１３２、１３３へ保護制御モジュール１２０の改ざん検出を依頼するとしたが、これに限定するものではなく、保護制御モジュール１２０から更新用ソフトウェア配布モジュール２１０へ、更新モジュール１３１、１３２、１３３の改ざんを検出した旨の通知があった場合、検出された更新モジュールが改ざんされていると判断し、当該更新モジュールを相互認証処理や回復処理に使用しないとしてもよいし、保護制御モジュール１２０が無効化処理を実施するとしてもよい。この時、保護制御モジュール１２０は、耐タンパー化された領域で動作するなど、攻撃から保護されていることが望ましい。【０２７６】
（３６）本発明の実施の形態３では、アクセス情報取得鍵の送付依頼をした更新モジュールが、保護制御モジュール１２０を更新する更新モジュールであるかどうかを、更新用ソフトウェア配布モジュール２１０に問い合わせたが、これに限定するものではなく、更新サーバ２００が保護制御モジュール１２０を更新する更新モジュールであるかどうかを確認してもよい。【０２７７】
（３７）上記の各モジュールは、具体的には、それぞれ個別のコンピュータプログラムであってもよいし、オペレーティングシステムに組み込まれるモジュールであってもよいし、オペレーティングシステムから呼ばれるドライバであってもよいし、アプリケーションプログラムであってもよい。【０２７８】
（３８）上記の各装置を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。【０２７９】
また、上記の各装置を構成する構成要素の各部は、個別に１チップ化されていても良いし、一部又は全てを含むように１チップ化されてもよい。【０２８０】
また、ここでは、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、ＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。【０２８１】
（３９）上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。【０２８２】
（４０）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。【０２８３】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。【０２８４】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。【０２８５】
また、前記コンピュータプログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記コンピュータプログラムまたは前記デジタル信号を、前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。【０２８６】
（４１）上記実施の形態では、更新モジュールの数を３として説明したが、これに限定されるものでなく、更新モジュールは、複数あればよい。【０２８７】
（４２）上記実施の形態では、アクセス制御モジュール１４０及び更新モジュール群１３０は、OS１５０の中に組み込まれているとしたが、更新モジュールがOSを更新する機能を備えている場合等には、更新モジュールは、OSの管理外にプログラムとして格納されているとしてもよい。また、保護制御モジュールがOSに組み込まれているとしてもよい。【０２８８】
（４３）上記実施の形態では、RAM上で動作しているモジュールが改ざん検出及び無効化の対象であったが、EEPROMに記憶されているモジュールの改ざんチェックを行ってもよし、改ざんされている場合には無効化してもよい。また、一つでも改ざんされている更新モジュールがあれば、全ての更新モジュールを無効化あるいは更新してもよい。RAM及びEEPROMの両方のモジュールを無効化するとしてもよい。また、更新の対象となるのは、EEPROMに記憶されているモジュールでもよいし、RAM上で動作しているモジュールでもよい。【０２８９】
（４４）機器１００は具体的には、携帯電話等の携帯端末やデジタルテレビ等、双方向のデータ通信が可能な機器であればよい。【０２９０】
（４５）上記実施の形態では、アクセス情報は、更新モジュール毎にそれぞれ個別のアクセス情報取得鍵で暗号化されているとしたが、同一のアクセス情報取得鍵で暗号化されているとしてもよい。その場合には、正常な更新モジュールが更新サーバにアクセスして、アクセス情報取得鍵に対応した復号鍵を取得し、取得した復号鍵を用いてアクセス制御モジュールを復号し、アクセス制御モジュールから、改ざんされた更新モジュールに対応するアクセス情報を取得し、取得したアクセス情報に基づいて、改ざんされた更新モジュールを無効化するとしてもよい。【０２９１】
（４６）上記実施の形態では、保護制御モジュールが改ざんされている場合に、当該保護制御モジュールを更新し、その際、更新モジュール群に含まれる複数の更新モジュールの各々が、他の更新モジュールの改ざん検証を行うとしたが、改ざんの有無に関わらず、例えば、保護制御モジュールのバージョンをアップさせる場合等において、改ざん検証を行うとしてもよい。【０２９２】
（４７）上記実施の形態では、更新用の保護制御モジュールは、複数の暗号鍵で暗号化されていたが、一つの暗号鍵で暗号化されているとしてもよい。その場合、当該暗号鍵に対応する復号鍵が複数に分割され、分割された復号鍵の全てが、改ざんされていない更新モジュールを送信先として送信され、分割された全ての復号鍵を用いて、改ざんされていない更新モジュールは、更新用の保護制御モジュールを復号するとしてもよい。【０２９３】
（４８）分散情報を保持している更新モジュールが無効化されたときに、他の更新モジュールで保持している分散情報を更新する処理（脱退処理）を行ってもよいし、更新モジュールを新たに追加するときに分散情報を更新する処理（追加処理）を行ってもよい。【０２９４】
以下に、脱退処理及び追加処理の詳細を説明する。ここでは、機器１００Aは６つの更新モジュール１２１A〜１２６Aを備えるものとして説明する。【０２９５】
更新モジュール１２１A〜１２６Aは、制御部２５０＿ｊ、分散情報格納部２５１＿ｊ、他モジュール分散情報格納部２５２＿ｊ、認証子格納部２５３＿ｊ、リスト格納部２５４＿ｊ、ＩＤ格納部２５５＿ｊ、送信部２５６＿ｊ及び受信部２５７＿ｊから構成されている。制御部２５０＿ｊは、分散情報更新部２６０＿ｊ、分散情報分割部２６１＿ｊ、分散情報検証部２６２＿ｊ、他モジュール分散情報検証部２６３＿ｊ、部分情報検証部２６４＿ｊ、変形情報生成部２６５＿ｊ、リスト更新部２６６＿ｊ及び取得部２６７＿ｊを有している。なお、符号２５ｘ（ｘ＝１、２、・・・、７）に付与されている添え字ｊは、１、２、・・・、６の値であり、ｊ番目の更新モジュールに対応する。【０２９６】
また、他モジュール分散情報ＸＸＸ＿Ｙは、分散情報ＸＸＸと同じと識別される分散情報で、更新モジュール１２Ｙが保持していることを表す。この様に、複数の更新モジュールで共通の分散情報を持つことで分散情報に対して冗長性を持たせた構成としている。また、以降の説明において、第１及び第２他モジュール分散情報を特に区別する必要がない場合には、単に、他モジュール分散情報と言い、各他モジュール分散情報と分散情報とを特に区別する必要がない場合には、単に、分散情報と言う。【０２９７】
脱退処理の動作
脱退処理について、図３０にて示す流れ図を用いて説明する。【０２９８】
この処理では、更新モジュールが不正な動作を行う可能性を考え、更新モジュール間で送信されるデータが正しいデータであるかを常に検証することで、不正な動作を行う更新モジュールが存在した場合に検知できるようにしている。さらに、各処理において、分散情報の値を更新する場合には、更新前の分散情報の値を退避しておき、脱退処理中に不正な動作を行う更新モジュールの存在を検知した場合には、脱退処理を中止し、分散情報の値を脱退処理前の値に戻すことで、分散情報が不正な値になることを防止する。【０２９９】
また、当該処理では、脱退する更新モジュールが所有する分散情報と同じ分散情報を持つ更新モジュールが分散情報の生成及び配布を行うものとする。この様な処理にすることで、脱退する更新モジュールが脱退処理を行わなくても分散情報を更新することが可能となり、不正な動作を行う更新モジュールを無効化する処理などにも利用できる。【０３００】
なお、脱退対象となるモジュールを更新モジュール１２１Aとし、部分情報の生成を更新モジュール１２６Aが行うものとして、以下説明する。【０３０１】
更新モジュール１２６Aは、外部の装置（図示せず）から、脱退対象の更新モジュール１２１Aが有する分散情報“ｄ＿１”と同一の他モジュール分散情報から部分情報を生成する旨の脱退時の部分情報生成指示を受け取る。【０３０２】
更新モジュール１２６Aは、第１他モジュール分散情報“ｄ１＿１”から５つの分散情報を生成し、配布する処理を行う（ステップＳ４０００）。言い換えると、更新モジュール１２６Aは、第１他モジュール分散情報“ｄ１＿１”を、５つの分散情報に分散（分解）する。【０３０３】
更新モジュール１２６Aが有する第１他モジュール分散情報“ｄ１＿１”と同一の情報を持つべきモジュールである更新モジュール１２２Aは、部分情報に用いられた第１他モジュール分散情報“ｄ１＿１”の検証を行う（ステップＳ４０５０）。【０３０４】
更新モジュール１２２A〜１２６Aは、脱退時における第１及び第２更新処理を行い、それぞれが保持する分散情報、第１及び第２他モジュール分散情報を更新する（ステップＳ４１００、Ｓ４１５０）。【０３０５】
更新モジュール１２２A〜１２６Aは、更新が正常に行われたか否かを判断する（ステップＳ４２００）。このとき、更新モジュール１２２A〜１２５Aは、判断結果を部分情報送信元である更新モジュール１２６Aへ通知する。具体的には、分散情報を共通に持っている更新モジュール同士で、分散情報検証部２６２＿ｊ及び他モジュール分散情報検証部２６３＿ｊを用いて、互いに持っている分散情報が同じ値に更新されたかを、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と各自が保持していた分散情報が同じ値かどうかを検証する。更新モジュール１２２A〜１２５Aは、検証結果を更新モジュール１２６Aへ通知し、更新モジュール１２６Aは、検証結果を一時的に保持する。【０３０６】
全ての装置にて更新が正常に行われた場合には（ステップＳ４２００における「ＹＥＳ」）、更新モジュール１２６Aは、配布先リストＴ１００を更新する。更新モジュール１２６Aは、更新後の配布先リストをリスト格納部２５４＿６へ格納するとともに、更新モジュール１２２A〜１２５A及び保護制御モジュール装置へ送信する。更新モジュール１２２A〜１２５A及び保護制御モジュール装置は、現在格納している配布先リストから更新後の配布先リストへと更新する（ステップＳ４２５０）。【０３０７】
全ての装置にて更新が正常に行われていない場合には（ステップＳ４２００における「ＮＯ」）、更新モジュール１２６Aは、更新モジュール１２２A〜１２５Aへその旨を通知する。更新モジュール１２６A、及び通知を受けた更新モジュール１２２A〜１２５Aは、脱退処理を中止し、自装置の分散情報の値を脱退処理の前に戻し、処理を終了する。【０３０８】
なお、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と同じ値かどうかを検証するとしたが、これに限定するものではなく、ゼロ知識証明などの暗号プロトコルを使用して検証してもよい。ゼロ知識証明については、非特許文献１の１３２〜１５０ページに、暗号プロトコルについては、非特許文献１の２２４〜２２５ページに詳しく説明されている。【０３０９】
以下、ステップＳ４００からＳ４１５にて行われる各処理について説明する。【０３１０】
（部分情報の生成処理）
ここでは、図３０のステップＳ４０００にて示す部分情報の生成処理について、図３１にて示す流れ図を用いて説明する。【０３１１】
更新モジュール１２６Aの分散情報分割部２６１＿６は、第１他モジュール分散情報“ｄ１＿１”２１１＿６から５つの部分情報（ｄ＿１＿１〜ｄ＿１＿５）を生成する（ステップＳ４５００）。このとき、各部分情報は、次式を満たすものとする。【０３１２】
（式）  ｄ１＿１＝ｄ＿１＿１＋ｄ＿１＿２＋ｄ＿１＿３＋ｄ＿１＿４＋ｄ＿１＿５  ｍｏｄ  Ｌ
具体的には、分散情報分割部２６１＿６は、乱数生成器を用いて、（ｋ−２）個（＝４個）の乱数を生成することにより、部分情報（ｄ＿１＿１〜ｄ＿１＿４）を生成する。次に、分散情報分割部２６１＿６は、
ｄ＿１＿５  ＝  ｄ１＿１  −  （ｄ＿１＿１＋ｄ＿１＿２＋ｄ＿1＿３＋ｄ＿１＿４）
により、ｄ＿１＿５を算出する。このとき、減算結果が負の数になる事もあるが、そのまま部分情報として扱う。【０３１３】
分散情報分割部２６１＿６は、脱退対象の装置（ここでは、更新モジュール１２１A）が保持する分散情報“ｄ＿１”及びこの情報と同一の値となるべき情報“ｄ１＿１”及び“ｄ２＿１”を除く残りの分散情報に対して、同一となるべき分散情報毎に、異なる部分情報を割り当てる。具体的には、部分情報ｄ＿１＿ｉを分散情報ｄ＿（ｉ＋１）に割り当てる。【０３１４】
分散情報分割部２６１＿６は、配布先リストＴ１００の内容に基づいて、配布先の更新モジュール毎に、２つ若しくは３つの部分情報を配布する（ステップＳ４５５０）。なお、自装置へは２つの部分情報が配布されるが、この場合、分散情報分割部２６１＿ｊは、分散情報更新部２６０＿ｊへ出力する。【０３１５】
具体的には、分散情報分割部２６１＿６は、以下のように各部分情報を配布する。【０３１６】
分散情報分割部２６１＿６は、部分情報ｄ＿１＿１、ｄ＿１＿２を更新モジュール１２２Aへ送信する（ステップＳ４６００）。分散情報分割部２６１＿６は、部分情報ｄ＿１＿１、ｄ＿１＿２、ｄ＿１＿３を更新モジュール１２３Aへ送信する（ステップＳ４６１０）。分散情報分割部２６１＿６は、部分情報ｄ＿１＿２、ｄ＿１＿３、ｄ＿１＿４を更新モジュール１２４Aへ送信する（ステップＳ４６２）。分散情報分割部２６１＿６は、部分情報ｄ＿１＿３、ｄ＿１＿４、ｄ＿１＿５を更新モジュール１２５Aへ送信する（ステップＳ４６３０）。分散情報分割部２６１＿６は、部分情報ｄ＿１＿４、ｄ＿１＿５を分散情報更新部２６０＿６へ出力し、一時的に記憶する。ｉ番目の更新モジュールは、受信した各部分情報を分散情報更新部２６０＿ｊに一時的に格納する。【０３１７】
（分散情報の検証処理）
ここでは、図３０のステップＳ４０５０にて示す分散情報の検証処理について、図３２にて示す流れ図を用いて説明する。【０３１８】
分散情報２１１＿６が正当な値であることを検証するために更新モジュール１２２Aが保持する第２他モジュール分散情報２１１＿２を利用する。【０３１９】
部分情報検証部２６４＿２は、更新モジュール１２６Aから部分情報検証指示を、受信部２５７＿ｊを介して受け取ると、更新モジュール１２１Aを除く残りのモジュール１２３A、１２４A、１２５A及び１２６Aそれぞれから部分情報ｄ＿１＿２、ｄ＿１＿３、ｄ＿１＿４、ｄ＿１＿５を収集する（ステップＳ４７００）。【０３２０】
具体的には、ｉ番目（ｉ＝３〜６）の更新モジュールは部分情報ｄ＿１＿（ｉ−１）を更新モジュール１２２Aへ出力する（ステップＳ４７１０〜Ｓ４７４０）。【０３２１】
部分情報検証部２６４＿２は、分散情報更新部２６０＿ｊにて記憶しているｄ＿１＿１と、受信した各部分情報ｄ＿１＿２、ｄ＿１＿３、ｄ＿１＿４、ｄ＿１＿５とを加算し、値ｓ’を算出し、算出した値ｓ’が正当であるか否かを検証する（ステップＳ４８００）。具体的には、部分情報検証部２６４＿２は、算出した値ｓ’と、他モジュール分散情報格納部２５２＿ｊに格納されている第２他モジュール分散情報“ｄ２＿１”とが一致するか否かを判断する。【０３２２】
部分情報検証部２６４＿２は、検証結果を各更新モジュール１２３A〜１２６Aへ通知する（ステップＳ４８５０）。具体的には、部分情報検証部２６４＿２は、検証結果により、値ｓ’が第２他モジュール分散情報“ｄ２＿１”と同一であると判断する場合には、同一である旨の検証結果を各更新モジュール１２３A〜１２６Aへ出力する。同一でないと判断する場合には、部分情報検証部２６４＿２は、同一でない旨の検証結果を各更新モジュール１２３A〜１２６Aへ出力する。なお、当該モジュールに対しては、検証結果を分散情報更新部２６０＿ｊへ出力する。【０３２３】
（脱退時の第１更新処理）
ここでは、図３０のステップＳ４１０にて示す脱退時の第１更新処理について、図３３及び図３４にて示す流れ図を用いて説明する。【０３２４】
更新モジュール１２２Aの分散情報更新部２６０＿２は、部分情報検証部２６４＿２にて行われた検証の結果により、更新モジュール１２６Aの第１他モジュール分散情報“ｄ１＿１”が正当であるか否かを判断する（ステップＳ５０００）。正当であると判断する場合には（ステップＳ５０００における「ＹＥＳ」）、分散情報更新部２６０＿２は、一時的に記憶している部分情報“ｄ＿１＿１”を用いて分散情報“ｄ＿２”を更新する（ステップＳ５０５０）。具体的には、分散情報更新部２６０＿２は、分散情報“ｄ＿２”に部分情報“ｄ＿１＿１”を加算することにより、新たな分散情報“ｄ＿２’（＝ｄ＿２＋ｄ＿１＿１）”を算出する。次に、分散情報更新部２６０＿２は、一時的に記憶している部分情報“ｄ＿１＿２”を用いて第１他モジュール分散情報“ｄ１＿３”を更新する（ステップＳ５１００）。具体的には、分散情報更新部２６０＿２は、第１他モジュール分散情報“ｄ１＿３”に部分情報“ｄ＿１＿２”を加算することにより、新たな分散情報“ｄ１＿３’（＝ｄ１＿３＋ｄ＿１＿２）”を算出する。【０３２５】
更新モジュール１２３Aの分散情報更新部２６０＿３は、更新モジュール１２２Aから受け取った検証結果により、更新モジュール１２６Aの第１他モジュール分散情報“ｄ１＿１”が正当であるか否かを判断する（ステップＳ５２００）。正当であると判断する場合には（ステップＳ５２００における「ＹＥＳ」）、分散情報更新部２６０＿３は、一時的に記憶している部分情報“ｄ＿１＿２”を用いて分散情報“ｄ＿３”を更新する（ステップＳ５２５０）。具体的には、分散情報更新部２６０＿３は、分散情報“ｄ＿３”に部分情報“ｄ＿１＿２”を加算することにより、新たな分散情報“ｄ＿３’（＝ｄ＿３＋ｄ＿１＿２）”を算出する。次に、分散情報更新部２６０＿３は、一時的に記憶している部分情報“ｄ＿１＿３”、及び“ｄ＿１＿１”を用いて第１及び他モジュール分散情報“ｄ１＿４”、“ｄ２＿２”を更新する（ステップＳ５３００）。具体的には、分散情報更新部２６０＿３は、第１他モジュール分散情報“ｄ１＿４”に部分情報“ｄ＿１＿３”を加算することにより、新たな分散情報“ｄ１＿４’（＝ｄ１＿４＋ｄ＿１＿３）”を算出する。分散情報更新部２６０＿３は、第２他モジュール分散情報“ｄ２＿２”に部分情報“ｄ＿１＿１”を加算することにより、新たな分散情報“ｄ２＿３’（＝ｄ２＿２＋ｄ＿１＿１）”を算出する。【０３２６】
更新モジュール１２４Aの分散情報更新部２６０＿４は、更新モジュール１２２Aから受け取った検証結果により、更新モジュール１２６Aの第１他モジュール分散情報“ｄ１＿１”が正当であるか否かを判断する（ステップＳ５４００）。正当であると判断する場合には（ステップＳ５４００における「ＹＥＳ」）、分散情報更新部２６０＿４は、一時的に記憶している部分情報“ｄ＿１＿３”を用いて分散情報“ｄ＿４”を更新する（ステップＳ５４５０）。具体的には、分散情報更新部２６０＿４は、分散情報“ｄ＿４”に部分情報“ｄ＿１＿３”を加算することにより、新たな分散情報“ｄ＿４’（＝ｄ＿４＋ｄ＿１＿３）”を算出する。次に、分散情報更新部２６０＿４は、一時的に記憶している部分情報“ｄ＿１＿４”、及び“ｄ＿１＿２”を用いて第１及び他モジュール分散情報“ｄ１＿５”、“ｄ２＿３”を更新する（ステップＳ５５００）。具体的には、分散情報更新部２６０＿４は、第１他モジュール分散情報“ｄ１＿５”に部分情報“ｄ＿１＿４”を加算することにより、新たな分散情報“ｄ１＿５’（＝ｄ１＿５＋ｄ＿１＿４）”を算出する。分散情報更新部２６０＿４は、第２他モジュール分散情報“ｄ２＿３”に部分情報“ｄ＿１＿２”を加算することにより、新たな分散情報“ｄ２＿３’（＝ｄ２＿３＋ｄ＿１＿２）”を算出する。【０３２７】
更新モジュール１２５Aの分散情報更新部２６０＿５は、更新モジュール１２２Aから受け取った検証結果により、更新モジュール１２６Aの第１他モジュール分散情報“ｄ１＿１”が正当であるか否かを判断する（ステップＳ５６００）。正当であると判断する場合には（ステップＳ５６００における「ＹＥＳ」）、分散情報更新部２６０＿５は、一時的に記憶している部分情報“ｄ＿１＿４”を用いて分散情報“ｄ＿５”を更新する（ステップＳ５６５０）。具体的には、分散情報更新部２６０＿５は、分散情報“ｄ＿５”に部分情報“ｄ＿１＿４”を加算することにより、新たな分散情報“ｄ＿５’（＝ｄ＿５＋ｄ＿１＿４）”を算出する。次に、分散情報更新部２６０＿５は、一時的に記憶している部分情報“ｄ＿１＿５”、及び“ｄ＿１＿３”を用いて第１及び他モジュール分散情報“ｄ１＿６”、“ｄ２＿４”を更新する（ステップＳ５７００）。具体的には、分散情報更新部２６０＿５は、第１他モジュール分散情報“ｄ１＿６”に部分情報“ｄ＿１＿５”を加算することにより、新たな分散情報“ｄ１＿６’（＝ｄ１＿６＋ｄ＿１＿５）”を算出する。分散情報更新部２６０＿５は、第２他モジュール分散情報“ｄ２＿４”に部分情報“ｄ＿１＿３”を加算することにより、新たな分散情報“ｄ２＿４’（＝ｄ２＿４＋ｄ＿１＿３）”を算出する。【０３２８】
更新モジュール１２６Aの分散情報更新部２６０＿６は、更新モジュール１２２Aから受け取った検証結果により、当該更新モジュールの第１他モジュール分散情報“ｄ１＿１”が正当であるか否かを判断する（ステップＳ５８００）。正当であると判断する場合には（ステップＳ５８００における「ＹＥＳ」）、分散情報更新部２６０＿６は、一時的に記憶している部分情報“ｄ＿１＿５”を用いて分散情報“ｄ＿６”を更新する（ステップＳ５８５０）。具体的には、分散情報更新部２６０＿６は、分散情報“ｄ＿６”に部分情報“ｄ＿１＿５”を加算することにより、新たな分散情報“ｄ＿６’（＝ｄ＿６＋ｄ＿１＿５）”を算出する。次に、分散情報更新部２６０＿６は、一時的に記憶している部分情報“ｄ＿１＿４”を用いて第２他モジュール分散情報“ｄ２＿５”を更新する（ステップＳ５９００）。具体的には、分散情報更新部２６０＿６は、第２他モジュール分散情報“ｄ２＿５”に部分情報“ｄ＿１＿４”を加算することにより、新たな分散情報“ｄ２＿５’（＝ｄ２＿５＋ｄ＿１＿４）”を算出する。【０３２９】
各更新モジュール１２２A〜１２６Aにおいて、第１他モジュール分散情報“ｄ１＿１”が正当でないと判断する場合には（ステップＳ５０００、Ｓ５２００、Ｓ５４００、Ｓ５６００及びＳ５８００における「ＮＯ」）、検証の結果が一致しないと通知を受け取った場合には、更新モジュール１２２Aか１２６Aが不正な動作を行っているので、各更新モジュールは、脱退処理を中止する。【０３３０】
（脱退時の第２更新処理）
ここでは、図３０のステップＳ４１５にて示す脱退時の第２更新処理について、図３５にて示す流れ図を用いて説明する。【０３３１】
更新モジュール１２６Aの分散情報更新部２６０＿６は、分散情報“ｄ＿６’”を更新モジュール１２２Aへ出力する（ステップＳ６０００）。【０３３２】
更新モジュール１２２Aの分散情報更新部２６０＿２は、分散情報“ｄ＿２’”を更新モジュール１２６Aへ出力する（ステップＳ６０５０）。【０３３３】
分散情報更新部２６０＿６は、分散情報“ｄ＿２’”及び“ｄ２＿２’”を収集する（ステップＳ６１００）。このとき、更新モジュール１２３Aの分散情報更新部２６０＿３は分散情報“ｄ２＿２’”を送信する（ステップＳ６１１０）。【０３３４】
分散情報更新部２６０＿２は、分散情報“ｄ＿６’”及び“ｄ２＿６’”を収集する（ステップＳ６１５０）。このとき、更新モジュール１２３Aの分散情報更新部２６０＿３は分散情報“ｄ２＿２’”を送信する（ステップＳ６１６０）。【０３３５】
分散情報更新部２６０＿６は、収集した分散情報“ｄ＿２’”及び“ｄ２＿２’”が一致するか否かを判断する（ステップＳ６２００）。一致すると判断する場合には（ステップＳ６２００における「ＹＥＳ」）、分散情報更新部２６０＿６は、第１他モジュール分散情報を“ｄ＿２’”とする（ステップＳ６２５０）。【０３３６】
分散情報更新部２６０＿２は、収集した分散情報“ｄ＿６’”及び“ｄ２＿６’”が一致するか否かを判断する（ステップＳ６３００）。一致すると判断する場合には（ステップＳ６３００における「ＹＥＳ」）、分散情報更新部２６０＿２は、第２他モジュール分散情報を“ｄ＿６’”とする（ステップＳ６３５０）。【０３３７】
分散情報更新部２６０＿６は、一致しないと判断する場合には（ステップＳ６２００における「ＮＯ」）、更新モジュール１２６Aは、更新モジュール１２２A〜１２５Aへその旨を通知する。更新モジュール１２６A、及び通知を受けた更新モジュール１２２A〜１２５Aは、脱退処理を中止し、自モジュールの分散情報の値を脱退処理の前に戻し、処理を終了する。【０３３８】
分散情報更新部２６０＿２は、一致しないと判断する場合には（ステップＳ６３００における「ＮＯ」）、更新モジュール１２２Aは、更新モジュール１２３A〜１２６Aへその旨を通知する。更新モジュール１２２A、及び通知を受けた更新モジュール１２３A〜１２６Aは、脱退処理を中止し、自モジュールの分散情報の値を脱退処理の前に戻し、処理を終了する。【０３３９】
（具体例）
脱退処理後の更新モジュール１２２A〜１２６Aのそれぞれが保持する分散情報、第１及び第２他モジュール分散情報を、図３６にて示す。【０３４０】
例えば、更新モジュール１２２Aは、脱退処理後において、更新後の分散情報“ｄ＿２’”２１２ｂ、第１他モジュール分散情報“ｄ１＿３’”２１３＿２ｂ及び第２他モジュール分散情報“ｄ２＿６’”２１１＿２ｂを保持している。【０３４１】
ここで、更新後の各分散情報“ｄ＿２’”〜“ｄ＿６’”により、秘密鍵“ｄ”が回復されることを以下に示す。【０３４２】
ｄ＿２’＋ｄ＿３’＋ｄ＿４’＋ｄ＿５’＋ｄ＿６’
＝  （ｄ＿２＋ｄ＿１＿１）＋（ｄ＿３＋ｄ＿１＿２）＋（ｄ＿４＋ｄ＿１＿３）
＋（ｄ＿５＋ｄ＿１＿４）＋（ｄ＿６＋ｄ＿１＿５）
＝  （ｄ＿１＿１＋ｄ＿１＿２＋ｄ＿１＿３＋ｄ＿１＿４＋ｄ＿１＿５）
＋（ｄ＿２＋ｄ＿３＋ｄ＿４＋ｄ＿５＋ｄ＿６）
＝  ｄ＿１＋ｄ＿２＋ｄ＿３＋ｄ＿４＋ｄ＿５＋ｄ＿６
＝  ｄ
このように、更新モジュール１２１Aが脱退後も、それぞれの更新モジュールが保持する分散情報の総和を一定とすることが可能となるため、脱退処理時において、ソフトウェア更新システムは、新しい秘密鍵“ｄ”を復元し分散情報を再生成することなく、更新モジュールを脱退させることが可能となる。【０３４３】
追加処理の動作
ここでは、追加処理について、図３７にて示す流れ図を用いて説明する。【０３４４】
追加処理では、更新モジュールが不正な動作を行う可能性を考え、更新モジュール間で送信されるデータが正しいデータであるかを常に検証することで、不正な動作を行う更新モジュールが存在した場合に検知できるようにしている。さらに、追加処理では、分散情報の値を更新する場合には、更新前の分散情報の値を退避しておき、追加処理中に不正な動作を行う更新モジュールの存在を検知した場合には、追加処理を中止し、分散情報の値を追加処理前の値に戻すことで、分散情報が不正な値になることを防止する。【０３４５】
ここでは、複数の更新モジュールから変形情報を追加する更新モジュールへ送信し、追加する更新モジュールの分散情報を生成することで、追加する更新モジュールに変形情報を送信する更新モジュールが不正な動作を行い、「新しい秘密鍵」が正しく生成できないように、不正な変形情報を送信するような行為を防止している。また、分散情報を正しく更新しなかったりするような行為を防止する。また、各更新モジュールは分散情報が正しく更新されたかを、同じ分散情報を共通に持っている更新モジュール同士で確認することで、不正な更新モジュールによる不正な更新を防止している。【０３４６】
また、追加する更新モジュールへ変形情報を送信した更新モジュールが、追加する更新モジュールの分散情報を共通に持つ構成の場合、元々保持していた分散情報と追加する更新モジュールの分散情報と追加する更新モジュールへ送信した変形情報から、本来保持していない分散情報を計算することが可能になる。そのため、更新モジュールの追加処理の最後に、変形情報を送信した更新モジュールの所有する分散情報から上記とは異なる値の変形情報を切り出し、その変形情報を分割して各更新モジュールへ送信することで、分散情報の値を更新する処理が必要になる。より詳細な説明は後述する。【０３４７】
なお、追加対象となる更新モジュールを更新モジュール１２７Aとし、変形情報の生成を更新モジュール１２１A、及び１２６Aが行うものとして、以下説明する。【０３４８】
更新モジュール１２１A、及び１２６Aが、変形情報を生成し、各更新モジュールへ配布する配布処理を行う（ステップＳ７０００）。【０３４９】
追加対象の更新モジュール１２７A及び、更新モジュール１２７Aと同一の分散情報を保持する更新モジュール１２１A、及び１２６Aとが分散情報を生成する分散情報の生成処理を行う（ステップＳ７０５０）。【０３５０】
更新モジュール１２７Aが、第１及び第２他モジュール分散情報を格納する他モジュール分散情報の格納処理を行う（ステップＳ７１００）。【０３５１】
更新モジュール１２１A、１２２A、１２５A〜１２７Aは、更新が正常に行われたか否かを判断する（ステップＳ７１５０）。更新モジュール１２１A、１２２A、１２５A及び１２６Aは、検証結果を更新モジュール１２７Aへ通知し、更新モジュール１２７Aは、検証結果を一時的に保持する。【０３５２】
更新対象の全ての更新モジュールにおいて正常に更新がされたと判断する場合には（ステップＳ７１５０における「ＹＥＳ」）、更新モジュール１２７Aの分散情報更新部２６０＿７は、更新モジュール１２１A及び１２６Aから証明書を収集する（ステップＳ７２００）。【０３５３】
分散情報更新部２６０＿７は、更新モジュール１２１A及び１２６Aから収集した証明書が正当であるか否かを判断する（ステップＳ７２５０）。具体的には、分散情報更新部２６０＿７は、収集した２つの証明書が同一であるか否かを判断する。【０３５４】
同一であると判断する場合には（ステップＳ７２５０における「ＹＥＳ」）、分散情報更新部２６０＿７は、証明書を認証子格納部２５３＿７へ格納する（ステップＳ７３００）。分散情報更新部２６０＿７は、証明書の格納後、追加時の第１分割処理の開始を示す旨の指示を更新モジュール１２１Aへ出力する。【０３５５】
次に、更新モジュール１２１Aが、自身が保持する分散情報から７つの部分情報を生成し、生成した各部分情報を各更新モジュールへ配布する追加時の第１分割処理を行う（ステップＳ７３５０）。【０３５６】
更新モジュール１２１A〜１２７Aは、配布された部分情報を用いて分散情報を更新する追加時の第１更新処理を行う（ステップＳ７４００）。【０３５７】
更新モジュール１２１A〜１２７Aは、更新が正常に行われたか否かを判断する（ステップＳ７４５０）。このとき、更新モジュール１２２A〜１２７Aは、判断結果を部分情報送信元である更新モジュール１２１Aへ通知する。具体的には、分散情報を共通に持っている更新モジュール同士で、分散情報検証部２６２＿ｊ及び他モジュール分散情報検証部２６３＿ｊを用いて、互いに持っている分散情報が同じ値に更新されたかを、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と各自が保持していた分散情報が同じ値かどうかを検証する。更新モジュール１２２A〜１２７Aは、検証結果を更新モジュール１２１Aへ通知し、更新モジュール１２１Aは、検証結果を一時的に保持する。【０３５８】
全ての更新モジュールにて更新が正常に行われた場合には（ステップＳ７４５０における「ＹＥＳ」）、更新モジュール１２１Aは、更新モジュール１２６Aへ追加時の第２分割処理を行う旨の分割指示を送信する。更新モジュール１２６Aは分割指示を受け取ると、自身が保持する分散情報から７つの部分情報を生成し、生成した各部分情報を各更新モジュールへ配布する追加時の第２分割処理を行う（ステップＳ７５００）。【０３５９】
更新モジュール１２１A〜１２７Aは、配布された部分情報を用いて分散情報を更新する追加時の第２更新処理を行う（ステップＳ７５５０）。【０３６０】
更新モジュール１２１A〜１２７Aは、更新が正常に行われたか否かを判断する（ステップＳ７６００）。更新モジュール１２１A〜１２５A及び１２７Aは、検証結果を更新モジュール１２６Aへ通知し、更新モジュール１２６Aは、検証結果を一時的に保持する。【０３６１】
全ての更新モジュールにて更新が正常に行われた場合には（ステップＳ７６００における「ＹＥＳ」）、更新モジュール１２６Aは、配布先リストＴ１００を更新する。更新モジュール１２６Aは、更新後の配布先リストをリスト格納部２５４＿６へ格納するとともに、更新モジュール１２１A〜１２５A、１２７A及び保護制御モジュールへ送信する。更新モジュール１２１A〜１２５A、１２７A及び保護制御モジュールは、現在格納している配布先リストから更新後の配布先リストへと更新する（ステップＳ７６５０）。【０３６２】
更新対象の更新モジュールにて更新が正常に行われていないと判断する場合には（ステップＳ７１５０における「ＮＯ」）、及び証明書が正当でないと判断する場合には（ステップＳ７２５０における「ＮＯ」）、更新モジュール１２７Aは、更新対象の各更新モジュール１２１A、１２２A、１２５A及び１２６Aへその旨を通知する。更新対象の各更新モジュールは、追加理を中止し、自モジュールの分散情報の値を追加処理の前に戻し、処理を終了する。【０３６３】
全てのモジュールにて更新が正常に行われていない場合には（ステップＳ７４５０における「ＮＯ」）、更新モジュール１２１Aは、更新モジュール１２２A〜１２７Aへその旨を通知する。更新モジュール１２１A〜１２７Aは、追加処理を中止し、自モジュールの分散情報の値を追加処理の前に戻し、処理を終了する。【０３６４】
また、ステップＳ７６００における「ＮＯ」の場合も同様に、更新モジュール１２１A〜１２７Aは、脱退処理を中止し、自モジュールの分散情報の値を脱退処理の前に戻し、処理を終了する。【０３６５】
なお、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と同じ値かどうかを検証するとしたが、これに限定するものではなく、ゼロ知識証明などの暗号プロトコルを使用して検証してもよい。ゼロ知識証明については、非特許文献１の１３２〜１５０ページに、暗号プロトコルについては、非特許文献１の２２４〜２２５ページに詳しく説明されている。【０３６６】
以下、追加処理の詳細について説明する。【０３６７】
（配布処理）
ここでは、図３７のステップＳ７０００にて示す部分情報の生成処理について、図３８にて示す流れ図を用いて説明する。【０３６８】
更新モジュール１２６Aの変形情報生成部２６５＿６は、外部装置から追加時の分散情報生成指示を受け取ると、変形情報ｎを生成する（ステップＳ８０００）。【０３６９】
更新モジュール１２１Aの変形情報生成部２６５＿１は、外部装置から追加時の分散情報生成指示を受け取ると、変形情報ｍを生成する（ステップＳ８０５０）。【０３７０】
変形情報生成部２６５＿６は、生成した変形情報ｎを更新モジュール１２１A、１２５及び１２７へ出力する（ステップＳ８１００）。【０３７１】
変形情報生成部２６５＿１は、生成した変形情報ｍを更新モジュール１２２A、１２６A、及び１２７Aへ出力する（ステップＳ８１５０）。【０３７２】
更新モジュール１２６Aの分散情報更新部２６０＿６は、変形情報ｍを受け取ると、受け取った変形情報ｍを一時的に格納する（ステップＳ８２００）。【０３７３】
更新モジュール１２１Aの分散情報更新部２６０＿１は、変形情報ｎを受け取ると、受け取った変形情報ｎを一時的に格納する（ステップＳ８２５０）。【０３７４】
分散情報更新部２６０＿６は、生成した変形情報ｎを用いて、新たな分散情報“ｄ＿６’（＝ｄ＿６−ｎ）”を生成し、分散情報格納部２５１＿６に格納されている分散情報“ｄ＿６“を“ｄ＿６’”へと更新する（ステップＳ８３００）。【０３７５】
分散情報更新部２６０＿１は、生成した変形情報ｍを用いて、新たな分散情報“ｄ＿１’（＝ｄ＿１−ｍ）”を生成し、分散情報格納部２５１＿１に格納されている分散情報“ｄ＿１”を“ｄ＿１’”へと更新する（ステップＳ８３５０）。【０３７６】
更新モジュール１２５Aの分散情報更新部２６０＿５は、変形情報ｎを受け取ると、受け取った変形情報ｎを用いて新たな第１他モジュール分散情報“ｄ１＿６’（＝ｄ１＿６−ｎ）”を生成し、他モジュール分散情報格納部２５２＿５に格納されている第１他モジュール分散情報“ｄ１＿６”を“ｄ１＿６’”へと更新する（ステップＳ８４００）。【０３７７】
更新モジュール１２７Aの分散情報更新部２６０＿７は、変形情報ｎ及びｍを受け取ると、受け取った変形情報ｎ及びｍを一時的に格納する（ステップＳ８４５０）。【０３７８】
更新モジュール１２２Aの分散情報更新部２６０＿２は、変形情報ｍを受け取ると、受け取った変形情報ｍを用いて新たな第２他モジュール分散情報“ｄ２＿１’（＝ｄ２＿１−ｍ）”を生成し、他モジュール分散情報格納部２５２＿２に格納されている第２他モジュール分散情報“ｄ２＿１”を“ｄ２＿１’”へと更新する（ステップＳ８５００）。【０３７９】
（分散情報の生成処理）
ここでは、図３７のステップＳ７０５にて示す分散情報の生成処理について、図３９にて示す流れ図を用いて説明する。【０３８０】
分散情報更新部２６０＿６は、変形情報ｎ及びｍを用いて他モジュール分散情報“ｄ１＿７＝（ｍ＋ｎ）”を生成する（ステップＳ８６００）。分散情報更新部２６０＿６は、他モジュール分散情報格納部２５２＿６に格納されている第１他モジュール分散情報“ｄ１＿１”を“ｄ１＿７”へと更新（置換）する（ステップＳ８６５０）。【０３８１】
分散情報更新部２６０＿７は、変形情報ｎ及びｍを用いて分散情報“ｄ＿７＝（ｍ＋ｎ）”を生成する（ステップＳ８７００）。分散情報更新部２６０＿７は、分散情報格納部２５１＿７に生成した分散情報“ｄ＿７”を格納する（ステップＳ８７５０）。【０３８２】
分散情報更新部２６０＿１は、変形情報ｎ及びｍを用いて他モジュール分散情報“ｄ２＿７＝（ｍ＋ｎ）”を生成する（ステップＳ８８００）。分散情報更新部２６０＿１は、他モジュール分散情報格納部２５２＿１に格納されている第２他モジュール分散情報“ｄ２＿１”を“ｄ２＿７”へと更新（置換）する（ステップＳ８８５０）。【０３８３】
（他モジュール分散情報の格納処理）
ここでは、図３７のステップＳ７１００にて示す他モジュール分散情報の格納処理について、図４０にて示す流れ図を用いて説明する。【０３８４】
更新モジュール１２７Aの分散情報更新部２６０＿７は、更新モジュール１２１Aへ分散情報要求指示を、更新モジュール１２２Aへ第２他モジュール分散情報要求指示を、それぞれ出力し、分散情報“ｄ＿１’”及び“ｄ２＿１’”を収集する（ステップＳ９０００）。このとき、分散情報要求指示を受け付けた更新モジュール１２１Aの取得部２６７＿１は、分散情報“ｄ＿１’”を取得して、更新モジュール１２７Aへ出力する（ステップＳ９０１０）。また、第２他モジュール分散情報要求指示を受け付けた更新モジュール１２２Aの取得部２６７＿２は、分散情報“ｄ２＿１’”を取得して、更新モジュール１２７Aへ出力する（ステップＳ９０２０）。【０３８５】
分散情報更新部２６０＿７は、収集した分散情報“ｄ＿１’”と“ｄ２＿１’”とが同一の値であるか否かを判断する（ステップＳ９０５０）。【０３８６】
同一であると判断する場合には（ステップＳ９０５０における「ＹＥＳ」）、分散情報更新部２６０＿７は、収集した分散情報“ｄ＿１’”を第１他モジュール分散情報として他モジュール分散情報格納部２５２＿７へ格納する（ステップＳ９１００）。【０３８７】
分散情報更新部２６０＿７は、更新モジュール１２６Aへ分散情報要求指示を、更新モジュール１２５Aへ第１他モジュール分散情報要求指示を、それぞれ出力し、分散情報“ｄ＿６’”及び“ｄ１＿６’”を収集する（ステップＳ９１５０）。このとき、分散情報要求指示を受け付けた更新モジュール１２６Aの取得部２６７＿６は、分散情報“ｄ＿６’”を取得して、更新モジュール１２７Aへ出力する（ステップＳ９１６０）。また、第１他モジュール分散情報要求指示を受け付けた更新モジュール１２５Aの取得部２６７＿５は、分散情報“ｄ１＿６’”を取得して、更新モジュール１２７Aへ出力する（ステップＳ９１７０）。【０３８８】
分散情報更新部２６０＿７は、収集した分散情報“ｄ＿６’”と“ｄ１＿６’”とが同一の値であるか否かを判断する（ステップＳ９２００）。【０３８９】
同一であると判断する場合には（ステップＳ９２００における「ＹＥＳ」）、分散情報更新部２６０＿７は、収集した分散情報“ｄ＿６’”を第２他モジュール分散情報として他モジュール分散情報格納部２５２＿７へ格納する（ステップＳ９２５０）。【０３９０】
同一でないと判断する場合には（ステップＳ９０５０若しくはステップＳ９２００における「ＮＯ」）、更新モジュール１２７Aは、更新モジュール１２１A〜１２６Aへその旨を通知する。更新モジュール１２１A〜１２７Aは、追加処理を中止し、自モジュールの分散情報の値を追加処理の前に戻し、処理を終了する。【０３９１】
（追加時の第１分割処理）
ここでは、図３７のステップＳ７３５０にて示す追加時の第１分割処理について、図４１にて示す流れ図を用いて説明する。【０３９２】
更新モジュール１２１Aの分散情報分割部２６１＿１は、分散情報“ｄ＿１’”から７つの部分情報（ｄ＿１＿１〜ｄ＿１＿７）を生成する（ステップＳ９５００）。言い換えると、分散情報分割部２６１＿１は、分散情報“ｄ＿１’”を、７つの部分情報（ｄ＿１＿１〜ｄ＿１＿７）に分散（分解）する。このとき、各部分情報は、次式を満たすものとする。【０３９３】
（式）  ｄ＿１’＝  ｄ＿１＿１＋ｄ＿１＿２＋ｄ＿１＿３＋ｄ＿１＿４＋ｄ＿１＿５
＋ｄ＿１＿６＋ｄ＿１＿７  ｍｏｄ  Ｌ
具体的には、分散情報分割部２６１＿１は、乱数生成器を用いて、６個の乱数を生成することにより、部分情報（ｄ＿１＿１〜ｄ＿１＿６）を生成する。次に、分散情報分割部２６１＿１は、
ｄ＿１＿７  ＝  ｄ＿１’  −  （ｄ＿１＿１＋ｄ＿１＿２＋・・・＋ｄ＿１＿６）
により、ｄ＿１＿７を算出する。このとき、減算結果が負の数になる事もあるが、そのまま部分情報として扱う。【０３９４】
分散情報分割部２６１＿１は、生成（分散）した３個若しくは６個の部分情報を各モジュール１２２A〜１２７Aへ配布する（ステップＳ９５５０）。【０３９５】
具体的には、分散情報分割部２６１＿１は、更新モジュール１２２A及び１２７に対して生成した部分情報ｄ＿１＿２〜ｄ＿１＿７を配布する（ステップＳ９５６０及びＳ９６１０）。他のモジュール１２３A〜１２６Aにおけるｉ番目のモジュールに対しては、部分情報ｄ＿１＿（ｉ−１）、ｄ＿１＿ｉ及びｄ＿１＿（ｉ＋１）を配布する（ステップＳ９５７０、Ｓ９５８０、Ｓ９５９０及びＳ９６００）。【０３９６】
更新モジュール１２２A〜１２７Aは、受信した各部分情報を分散情報更新部２６０＿ｊに一時的に格納する。【０３９７】
（追加時の第１更新処理）
ここでは、図３７のステップＳ７４００にて示す追加時の第１更新処理について、図４２から図４４にて示す流れ図を用いて説明する。【０３９８】
更新モジュール１２１Aの分散情報更新部２６０＿１は、生成した部分情報“ｄ＿１＿１”を新たな分散情報“Ｄ＿１（＝ｄ＿１＿１）”として、分散情報格納部２５１＿１に格納されている分散情報“ｄ＿１’”を新たな分散情報“Ｄ＿１”に更新する（ステップＳ９７００）。分散情報更新部２６０＿１は、生成した部分情報“ｄ＿１＿２”及び“ｄ＿１＿７”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿２（＝ｄ１＿２＋ｄ＿１＿２）”及び“Ｄ２＿７（＝ｄ２＿７＋ｄ＿１＿７）”を生成し、分散情報格納部２５１＿１に格納されている第１及び第２他モジュール分散情報“ｄ１＿２”及び“ｄ２＿７’”を新たな第１及び第２他モジュール分散情報“Ｄ１＿２”及び“Ｄ２＿７”に更新する（ステップＳ９７５０）。【０３９９】
更新モジュール１２２Aの分散情報更新部２６０＿２は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿２”を用いて新たな分散情報“Ｄ＿２（＝ｄ＿２＋ｄ＿１＿２）”を生成し、分散情報格納部２５１＿２に格納されている分散情報“ｄ＿２”を新たな分散情報“Ｄ＿２”に更新する（ステップＳ９８００）。分散情報更新部２６０＿２は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿２”〜“ｄ＿１＿７”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿３（＝ｄ１＿３＋ｄ＿１＿３）”及び“Ｄ２＿１（＝ｄ２＿１’−（ｄ＿１＿２＋ｄ＿１＿３＋・・・＋ｄ＿１＿７））”を生成し、分散情報格納部２５１＿２に格納されている第１及び第２他モジュール分散情報“ｄ１＿３”及び“ｄ２＿１’”を新たな第１及び第２他モジュール分散情報“Ｄ１＿３”及び“Ｄ２＿１”に更新する（ステップＳ９８５０）。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。【０４００】
更新モジュール１２３Aの分散情報更新部２６０＿３は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿３”を用いて新たな分散情報“Ｄ＿３（＝ｄ＿３＋ｄ＿１＿３）”を生成し、分散情報格納部２５１＿３に格納されている分散情報“ｄ＿３”を新たな分散情報“Ｄ＿３”に更新する（ステップＳ９９００）。分散情報更新部２６０＿３は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿４”及び“ｄ＿１＿２”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿４（＝ｄ１＿４＋ｄ＿１＿４）”及び“Ｄ２＿２（＝ｄ２＿２＋ｄ＿１＿２）”を生成し、分散情報格納部２５１＿３に格納されている第１及び第２他モジュール分散情報“ｄ１＿４”及び“ｄ２＿２”を新たな第１及び第２他モジュール分散情報“Ｄ１＿４”及び“Ｄ２＿２”に更新する（ステップＳ９９５０）。【０４０１】
更新モジュール１２４Aの分散情報更新部２６０＿４は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿４”を用いて新たな分散情報“Ｄ＿４（＝ｄ＿４＋ｄ＿１＿４）”を生成し、分散情報格納部２５１＿４に格納されている分散情報“ｄ＿４”を新たな分散情報“Ｄ＿４”に更新する（ステップＳ１００００）。分散情報更新部２６０＿４は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿５”及び“ｄ＿１＿３”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿５（＝ｄ１＿５＋ｄ＿１＿５）”及び“Ｄ２＿３（＝ｄ２＿３＋ｄ＿１＿３）”を生成し、分散情報格納部２５１＿４に格納されている第１及び第２他モジュール分散情報“ｄ１＿５”及び“ｄ２＿３”を新たな第１及び第２他モジュール分散情報“Ｄ１＿５”及び“Ｄ２＿３”に更新する（ステップＳ１００５０）。【０４０２】
更新モジュール１２５Aの分散情報更新部２６０＿５は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿５”を用いて新たな分散情報“Ｄ＿５（＝ｄ＿５＋ｄ＿１＿５）”を生成し、分散情報格納部２５１＿５に格納されている分散情報“ｄ＿５”を新たな分散情報“Ｄ＿５”に更新する（ステップＳ１０１０）。分散情報更新部２６０＿５は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿６”及び“ｄ＿１＿４”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿６（＝ｄ１＿６＋ｄ＿１＿６）”及び“Ｄ２＿４（＝ｄ２＿４＋ｄ＿１＿４）”を生成し、分散情報格納部２５１＿５に格納されている第１及び第２他モジュール分散情報“ｄ１＿６”及び“ｄ２＿４”を新たな第１及び第２他モジュール分散情報“Ｄ１＿６”及び“Ｄ２＿４”に更新する（ステップＳ１０１５０）。【０４０３】
更新モジュール１２６Aの分散情報更新部２６０＿６は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿６”を用いて新たな分散情報“Ｄ＿６（＝ｄ＿６’＋ｄ＿１＿６）”を生成し、分散情報格納部２５１＿６に格納されている分散情報“ｄ＿６’”を新たな分散情報“Ｄ＿６”に更新する（ステップＳ１０２００）。分散情報更新部２６０＿６は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿７”及び“ｄ＿１＿５”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿７（＝ｄ１＿７＋ｄ＿１＿７）”及び“Ｄ２＿５（＝ｄ２＿５＋ｄ＿１＿５）”を生成し、分散情報格納部２５１＿６に格納されている第１及び第２他モジュール分散情報“ｄ１＿７”及び“ｄ２＿５”を新たな第１及び第２他モジュール分散情報“Ｄ１＿７”及び“Ｄ２＿５”に更新する（ステップＳ１０２５０）。【０４０４】
更新モジュール１２７Aの分散情報更新部２６０＿７は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿７”を用いて新たな分散情報“Ｄ＿７（＝ｄ＿７＋ｄ＿１＿７）”を生成し、分散情報格納部２５１＿７に格納されている分散情報“ｄ＿７”を新たな分散情報“Ｄ＿７”に更新する（ステップＳ１０３００）。分散情報更新部２６０＿７は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿２”〜“ｄ＿１＿７”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿１（＝ｄ１＿１’−（ｄ＿１＿２＋ｄ＿１＿３＋・・・＋ｄ＿１＿７））”及び“Ｄ２＿６（＝ｄ２＿６’＋ｄ＿１＿６）”を生成し、分散情報格納部２５１＿７に格納されている第１及び第２他モジュール分散情報“ｄ１＿１’”及び“ｄ２＿６’”を新たな第１及び第２他モジュール分散情報“Ｄ１＿１”及び“Ｄ２＿６”に更新する（ステップＳ１０３５０）。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。【０４０５】
（追加時の第２分割処理）
ここでは、図３７のステップＳ７５０にて示す追加時の第２分割処理について、図４５にて示す流れ図を用いて説明する。【０４０６】
更新モジュール１２６Aの分散情報分割部２６１＿６は、分散情報“Ｄ＿６”から７つの部分情報（ｄ＿６＿１〜ｄ＿６＿７）を生成する（ステップＳ１０５０）。言い換えると、分散情報分割部２６１＿６は、分散情報“Ｄ＿６”を、７つの部分情報（ｄ＿６＿１〜ｄ＿６＿７）に分散（分解）する。このとき、各部分情報は、次式を満たすものとする。【０４０７】
（式）  Ｄ＿６＝  ｄ＿６＿１＋ｄ＿６＿２＋ｄ＿６＿３＋ｄ＿６＿４＋ｄ＿６＿５
＋ｄ＿６＿６＋ｄ＿６＿７  ｍｏｄ  Ｌ
具体的には、分散情報分割部２６１＿６は、乱数生成器を用いて、６個の乱数を生成することにより、部分情報（ｄ＿６＿１〜ｄ＿６＿６）を生成する。次に、分散情報分割部２６１＿６は、
ｄ＿６＿７  ＝  Ｄ＿６  −  （ｄ＿６＿１＋ｄ＿６＿２＋・・・＋ｄ＿６＿６）
により、ｄ＿６＿７を算出する。このとき、減算結果が負の数になる事もあるが、そのまま部分情報として扱う。【０４０８】
分散情報分割部２６１＿６は、生成（分散）した３個若しくは６個分散情報を各更新モジュール１２１A〜１２５A及び１２７Aへ配布する（ステップＳ１０５５０）。【０４０９】
更新モジュール１２５A及び１２７Aに対して生成した部分情報ｄ＿６＿１〜ｄ＿６＿５及びｄ＿６＿７を配布する（ステップＳ１０６００及びＳ１０６１０）。他のモジュール１２１A〜１２４Aにおけるｉ番目のモジュールに対しては、部分情報ｄ＿６＿（ｉ−１）、ｄ＿６＿ｉ及びｄ＿６＿（ｉ＋１）を配布する（ステップＳ１０５６０、Ｓ１０５７０、Ｓ１０５８０及びＳ１０５９０）。なお、ｉ−１＝０の場合には、部分情報ｄ＿６＿７を配布する。【０４１０】
更新モジュール１２１A〜１２５A及び１２７Aは、受信した各部分情報を分散情報更新部２６０＿ｊに一時的に格納する。【０４１１】
（追加時の第２更新処理）
ここでは、図３７のステップＳ７５５０にて示す追加時の第２更新処理について、図４６から図４８にて示す流れ図を用いて説明する。【０４１２】
更新モジュール１２１Aの分散情報更新部２６０＿１は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿１”を用いて、新たな分散情報“Ｄ＿１’（＝Ｄ＿１＋ｄ＿６＿１）”を生成し、分散情報格納部２５１＿１に格納されている分散情報“Ｄ＿１”を新たな分散情報“Ｄ＿１’”に更新する（ステップＳ１０７００）。分散情報更新部２６０＿１は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿２”及び“ｄ＿６＿７”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿２’（＝Ｄ１＿２＋ｄ＿６＿２）”及び“Ｄ２＿７’（＝Ｄ２＿７＋ｄ＿６＿７）”を生成し、分散情報格納部２５１＿１に格納されている第１及び第２他モジュール分散情報“Ｄ１＿２”及び“Ｄ２＿７’”を新たな第１及び第２他モジュール分散情報“Ｄ１＿２’”及び“Ｄ２＿７’”に更新する（ステップＳ１０７５０）。【０４１３】
更新モジュール１２２Aの分散情報更新部２６０＿２は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿２”を用いて新たな分散情報“Ｄ＿２’（＝Ｄ＿２＋ｄ＿６＿２）”を生成し、分散情報格納部２５１＿２に格納されている分散情報“Ｄ＿２”を新たな分散情報“Ｄ＿２’”に更新する（ステップＳ１０８００）。分散情報更新部２６０＿２は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿３”及び“ｄ＿６＿１”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿３’（＝Ｄ１＿３＋ｄ＿６＿３）”及び“Ｄ２＿１’（＝Ｄ２＿１＋ｄ＿６＿１）”を生成し、分散情報格納部２５１＿２に格納されている第１及び第２他モジュール分散情報“Ｄ１＿３”及び“Ｄ２＿１”を新たな第１及び第２他モジュール分散情報“Ｄ１＿３’”及び“Ｄ２＿１’”に更新する（ステップＳ１０８５０）。【０４１４】
更新モジュール１２３Aの分散情報更新部２６０＿３は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿３”を用いて新たな分散情報“Ｄ＿３’（＝Ｄ＿３＋ｄ＿６＿３）”を生成し、分散情報格納部２５１＿３に格納されている分散情報“Ｄ＿３”を新たな分散情報“Ｄ＿３’”に更新する（ステップＳ１０９０）。分散情報更新部２６０＿３は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿４”及び“ｄ＿６＿２”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿４’（＝Ｄ１＿４＋ｄ＿６＿４）”及び“Ｄ２＿２’（＝Ｄ２＿２＋ｄ＿６＿２）”を生成し、分散情報格納部２５１＿３に格納されている第１及び第２他モジュール分散情報“Ｄ１＿４”及び“Ｄ２＿２”を新たな第１及び第２他モジュール分散情報“Ｄ１＿４’”及び“Ｄ２＿２’”に更新する（ステップＳ１０９５０）。【０４１５】
更新モジュール１２４Aの分散情報更新部２６０＿４は、更新モジュール１２１Aから受け取った部分情報“ｄ＿６＿４”を用いて新たな分散情報“Ｄ＿４’（＝Ｄ＿４＋ｄ＿６＿４）”を生成し、分散情報格納部２５１＿４に格納されている分散情報“Ｄ＿４”を新たな分散情報“Ｄ＿４’”に更新する（ステップＳ１１０００）。分散情報更新部２６０＿４は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿５”及び“ｄ＿６＿３”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿５’（＝Ｄ１＿５＋ｄ＿６＿５）”及び“Ｄ２＿３’（＝Ｄ２＿３＋ｄ＿６＿３）”を生成し、分散情報格納部２５１＿４に格納されている第１及び第２他モジュール分散情報“Ｄ１＿５”及び“Ｄ２＿３”を新たな第１及び第２他モジュール分散情報“Ｄ１＿５’”及び“Ｄ２＿３’”に更新する（ステップＳ１１０５０）。【０４１６】
更新モジュール１２５Aの分散情報更新部２６０＿５は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿５”を用いて新たな分散情報“Ｄ＿５’（＝Ｄ＿５＋ｄ＿６＿５）”を生成し、分散情報格納部２５１＿５に格納されている分散情報“Ｄ＿５”を新たな分散情報“Ｄ＿５’”に更新する（ステップＳ１１１００）。分散情報更新部２６０＿５は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿１”〜“ｄ＿６＿５”及び“ｄ＿６＿７”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿６’（＝Ｄ１＿６−（ｄ＿６＿１＋ｄ＿６＿２＋・・・＋ｄ＿６＿５＋ｄ＿６＿７）”及び“Ｄ２＿４’（＝Ｄ２＿４＋ｄ＿６＿４）”を生成し、分散情報格納部２５１＿５に格納されている第１及び第２他モジュール分散情報“Ｄ１＿６”及び“Ｄ２＿４”を新たな第１及び第２他モジュール分散情報“Ｄ１＿６’”及び“Ｄ２＿４’”に更新する（ステップＳ１１１５０）。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。【０４１７】
更新モジュール１２６Aの分散情報更新部２６０＿６は、生成した部分情報“ｄ＿１＿６”を新たな分散情報“Ｄ＿６’（＝ｄ＿６＿６）”として、分散情報格納部２５１＿６に格納されている分散情報“Ｄ＿６”を新たな分散情報“Ｄ＿６’”に更新する（ステップＳ１１２００）。分散情報更新部２６０＿６は、生成した部分情報“ｄ＿６＿７”及び“ｄ＿６＿５”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿７’（＝Ｄ１＿７＋ｄ＿６＿７）”及び“Ｄ２＿５’（＝Ｄ２＿５＋ｄ＿６＿５）”を生成し、分散情報格納部２５１＿６に格納されている第１及び第２他モジュール分散情報“Ｄ１＿７”及び“Ｄ２＿５”を新たな第１及び第２他モジュール分散情報“Ｄ１＿７’”及び“Ｄ２＿５’”に更新する（ステップＳ１１２５０）。【０４１８】
更新モジュール１２７Aの分散情報更新部２６０＿７は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿７”を用いて新たな分散情報“Ｄ＿７’（＝Ｄ＿７＋ｄ＿６＿７）”を生成し、分散情報格納部２５１＿７に格納されている分散情報“Ｄ＿７”を新たな分散情報“Ｄ＿７’”に更新する（ステップＳ１１３００）。分散情報更新部２６０＿７は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿１”〜“ｄ＿１＿５”及び“ｄ＿１＿７”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿１’（＝Ｄ１＿１＋ｄ＿６＿１）”及び“Ｄ２＿６’（＝Ｄ２＿６−（ｄ＿６＿１＋ｄ＿６＿２＋・・・＋ｄ＿６＿５＋ｄ＿６＿７））”を生成し、分散情報格納部２５１＿７に格納されている第１及び第２他モジュール分散情報“Ｄ１＿１”及び“Ｄ２＿６”を新たな第１及び第２他モジュール分散情報“Ｄ１＿１’”及び“Ｄ２＿６’”に更新する（ステップＳ１１３５０）。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。【０４１９】
（具体例）
追加処理後の更新モジュール１２１A〜１２７Aのそれぞれが保持する分散情報、第１及び第２他モジュール分散情報を、図４９にて示す。【０４２０】
例えば、更新モジュール１２１Aは、追加処理後において、更新後の分散情報“Ｄ＿１’”２１１ｃ、第１他モジュール分散情報“Ｄ１＿２’”２１２＿１ｃ及び第２他モジュール分散情報“Ｄ２＿７’”２１７＿１ｃを保持している。【０４２１】
ここで、更新後の各分散情報“Ｄ＿１’”〜“Ｄ＿７’”により、秘密鍵“ｄ”が回復されることを以下に示す。【０４２２】
Ｄ＿１’＋Ｄ＿２’＋Ｄ＿３’＋Ｄ＿４’＋Ｄ＿５’＋Ｄ＿６’＋Ｄ＿７’
＝  （Ｄ＿１＋ｄ＿６＿１）＋（Ｄ＿２＋ｄ＿６＿２）＋（Ｄ＿３＋ｄ＿６＿３）
＋（Ｄ＿４＋ｄ＿６＿４）＋（Ｄ＿５＋ｄ＿６＿５）＋（ｄ＿６＿６）＋（Ｄ＿７＋ｄ＿６＿７）
＝  Ｄ＿１＋Ｄ＿２＋Ｄ＿３＋Ｄ＿４＋Ｄ＿５＋Ｄ＿７
＋ｄ＿６＿１＋ｄ＿６＿２＋ｄ＿６＿３＋ｄ＿６＿４＋ｄ＿６＿５＋ｄ＿６＿６＋ｄ＿６＿７
＝  Ｄ＿１＋Ｄ＿２＋Ｄ＿３＋Ｄ＿４＋Ｄ＿５＋Ｄ＿６＋Ｄ＿７
＝  （ｄ＿１＿１）＋（ｄ＿２＋ｄ＿１＿２）＋（ｄ＿３＋ｄ＿１＿３）＋（ｄ＿４＋ｄ＿１＿４）
＋（ｄ＿５＋ｄ＿１＿５）＋（ｄ＿６’＋ｄ＿１＿６）＋（ｄ＿７＋ｄ＿１＿７）
＝  ｄ＿２＋ｄ＿３＋ｄ＿４＋ｄ＿５＋ｄ＿６’＋ｄ＿７
＋ｄ＿１＿１＋ｄ＿１＿２＋ｄ＿１＿３＋ｄ＿１＿４＋ｄ＿１＿５＋ｄ＿１＿６＋ｄ＿１＿７
＝  ｄ＿１’＋ｄ＿２＋ｄ＿３＋ｄ＿４＋ｄ＿５＋ｄ＿６’＋ｄ＿７
＝  （ｄ＿１−ｍ）＋ｄ＿２＋ｄ＿３＋ｄ＿４＋ｄ＿５＋（ｄ＿６−ｎ）＋ｍ＋ｎ
＝  ｄ＿１＋ｄ＿２＋ｄ＿３＋ｄ＿４＋ｄ＿５＋ｄ＿６＋ｄ＿７
＝  ｄ
このように、更新モジュール１２７Aの追加後も、それぞれの更新モジュールが保持する分散情報の総和を一定とすることが可能となるため、追加処理時において、ソフトウェア更新システムは、新しい秘密鍵“ｄ”を復元し分散情報を再生成することなく、更新モジュールを追加させることが可能となる。【０４２３】
（追加処理時の第１及び第２更新処理の必要性）
追加時における第１及び第２更新処理は、更新モジュール１２１Aと１２６Aが分散情報を持ちすぎるために必要になる処理である。【０４２４】
具体的には、更新モジュール１２１Aは、追加処理のステップＳ７３００の終了後には、分散情報“ｄ＿１’”と他モジュール分散情報“ｄ１＿２”及びと“ｄ２＿７”の３つの分散情報を保持することになる。この時、他モジュール分散情報“ｄ２＿７”は、更新モジュール１２１Aが生成した変形情報ｍと更新モジュール１２６Aが生成した変形情報ｎの和になっている。そのため、他モジュール分散情報“ｄ２＿７”と更新モジュール１２１Aが生成した変形情報ｍから更新モジュール１２６Aが送信した変形情報ｎを求めることが出来る。さらに、追加処理前には更新前の他モジュール分散情報“ｄ２＿６”も保持していたため、この更新前の他モジュール分散情報“ｄ２＿６”と更新モジュール１２６Aが生成した変形情報ｎとから、更新後の分散情報“ｄ２＿６’（＝ｄ＿６’）”の値を求めることが出来る。この様に更新モジュール１２１Aは、本来は３つの分散情報しか保持しないはずが４つの分散情報を保持することが可能となり、分散情報を持ちすぎることになる。同様の事が更新モジュール１２６Aにも言えるため、更新モジュールの追加処理の最後に、このような分散情報の持ちすぎを解消するために、更新モジュール１２１Aと１２６Aが所有する分散情報の更新を行う必要がある。【０４２５】
なお、追加される更新モジュールの所有する分散情報を生成するために２つの更新モジュールが変形情報を生成、送信する構成としたが、これに限定するものではなく、例えば追加される更新モジュール以外のすべての更新モジュールが変形情報を送信する構成にしてもよい。
（４９）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。【０４２６】
また、本発明に係るソフトウェア更新装置は、その範囲を逸脱することなく本発明の趣旨に沿って様々な変形または修正が可能であることは言うまでもない。
【産業上の利用可能性】
【０４２７】
本発明は、ネットワークで接続された外部サーバから更新用のソフトウェアを取得し、取得したソフトウェアで自装置内のソフトウェアを更新するソフトウェア更新装置に広く適用することができる。
【図１】
2009118801.tif 000003
【図２】
2009118801.tif 000004
【図３】
2009118801.tif 000005
【図４】
2009118801.tif 000006
【図５】
2009118801.tif 000007
【図６】
2009118801.tif 000008
【図７】
2009118801.tif 000009
【図８】
2009118801.tif 000010
【図９】
2009118801.tif 000011
【図１０】
2009118801.tif 000012
【図１１】
2009118801.tif 000013
【図１２】
2009118801.tif 000014
【図１３】
2009118801.tif 000015
【図１４】
2009118801.tif 000016
【図１５】
2009118801.tif 000017
【図１６】
2009118801.tif 000018
【図１７】
2009118801.tif 000019
【図１８】
2009118801.tif 000020
【図１９】
2009118801.tif 000021
【図２０】
2009118801.tif 000022
【図２１】
2009118801.tif 000023
【図２２】
2009118801.tif 000024
【図２３】
2009118801.tif 000025
【図２４】
2009118801.tif 000026
【図２５】
2009118801.tif 000027
【図２６】
2009118801.tif 000028
【図２７】
2009118801.tif 000029
【図２８】
2009118801.tif 000030
【図２９】
2009118801.tif 000031
【図３０】
2009118801.tif 000032
【図３１】
2009118801.tif 000033
【図３２】
2009118801.tif 000034
【図３３】
2009118801.tif 000035
【図３４】
2009118801.tif 000036
【図３５】
2009118801.tif 000037
【図３６】
2009118801.tif 000038
【図３７】
2009118801.tif 000039
【図３８】
2009118801.tif 000040
【図３９】
2009118801.tif 000041
【図４０】
2009118801.tif 000042
【図４１】
2009118801.tif 000043
【図４２】
2009118801.tif 000044
【図４３】
2009118801.tif 000045
【図４４】
2009118801.tif 000046
【図４５】
2009118801.tif 000047
【図４６】
2009118801.tif 000048
【図４７】
2009118801.tif 000049
【図４８】
2009118801.tif 000050
【図４９】
2009118801.tif 000051
【手続補正書】
【提出日】平成21年11月12日(2009.11.12)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機器内部で動作するモジュール等を無効化する技術に関する。
【背景技術】
【０００２】
従来、認証鍵等の秘匿データを有しているアプリケーションが、悪意のある第三者（以下、「攻撃者」という）に解析されないよう、耐タンパモジュールを備えた機器が知られている。耐タンパモジュールは、ハードウェアとして機器上に実装されるが、日々新たな攻撃手法が考案される昨今の現状を踏まえると、新たな攻撃手法に柔軟に対応するためにも、更新が容易なソフトウェアでアプリケーションを保護することが望ましい。ソフトウェアによるアプリケーションの保護には、例えば、ハッシュ値を用いた改ざん検証や、アプリケーションを利用しない時には暗号化して保存しておき、利用する時にのみ復号してメモリへロードする復号ロード機能等がある。ところが、その場合には、アプリケーションを保護するソフトウェア（以下、「保護制御モジュール」という）自体が攻撃者により攻撃され得る。保護制御モジュールが改ざんされると、アプリケーションが攻撃者の攻撃にさらされることになる。
【０００３】
そこで、保護制御モジュールの改ざん検出を行い、保護制御モジュールが改ざんされた場合には、ネットワークを通して外部のサーバから正常な保護制御モジュールを機器にダウンロードし更新する方法が考えられる。このような保護制御モジュールの改ざん検出に関する先行技術としては、特許文献１に記載のものがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３０５６７３２号公報（第４〜６頁、図２）
【非特許文献】
【０００５】
【非特許文献１】岡本龍明、山本博資、「現代暗号」、産業図書（１９９７年）
【非特許文献２】ITU-Ｔ Recommendation X.509 (1997 E): InformationTechnology - Open SystemsInterconnection - The Directory:Authentication Framework,1997
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、保護制御モジュールを更新する機能を担うモジュール（以下、「更新モジュール」という）も攻撃者により攻撃され得る。攻撃者による攻撃で更新モジュールが改ざんされ、当該更新モジュールにより保護制御モジュールの更新が行われると、保護制御モジュールが正しく更新されず、アプリケーションが有する秘匿データが漏洩する恐れがある。更新モジュールの改ざん検出を行うモジュールをさらに備えることにより、更新モジュールの改ざんを検出することは可能となるが、当該モジュール自体もやはり改ざんされる恐れがあるため、根本的な解決には至らない。
【０００７】
以上は、保護制御モジュールの更新例を用いて説明したが、保護制御モジュールの更新以外に、アプリケーションや更新モジュール自身を更新することも考えられる。このような場合もそれらが正しく更新されないことにより同様の課題が生じる。
本発明は、改ざんされた更新モジュールによる不正な動作を防止するソフトウェア更新装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明の一実施態様であるソフトウェア更新装置は、所定のアプリケーションと、前記所定のアプリケーションが改ざんされていないかを検証する保護制御モジュールと、前記保護制御モジュールを更新する更新用の保護制御モジュールを外部サーバから受信し前記保護制御モジュールを更新する更新モジュールを複数含む更新モジュール群と、を備え、前記更新モジュール群に含まれる複数の更新モジュールの各々は、同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証を行い、前記複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合、前記更新モジュール群に含まれる他の更新モジュールが、前記不正動作を行う可能性があると検証された更新モジュールを無効化することを特徴とする。
【発明の効果】
【０００９】
上記課題を解決するための手段に記載の構成により、更新モジュール群に含まれる複数の更新モジュールの各々は、同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証を行うので、同時に起動している全ての更新モジュールに対して不正動作を行わないか検証が行われる。同時に起動している全ての更新モジュールの検証を実現することができるので、改ざんされた更新モジュールがあればそれを発見でき、一つでも正常な更新モジュールが存在すれば、当該更新モジュールにより改ざんされた更新モジュールを無効化することができるので、改ざんされた更新モジュールを排除でき、更新モジュール全体としての安全性を確保することができる。その結果、改ざんされた更新モジュールによる不正な動作（例えば、不正な保護制御モジュールに更新する）を防止することができるので、改ざんされた更新モジュールを介して保護制御モジュールが不正な保護制御モジュールに更新されるのを防止でき、前記不正な保護制御モジュールによる前記所定のアプリケーションへの攻撃を防止できる。ゆえに、アプリケーションが有する秘匿データが漏洩するリスクを低減することができる。
【００１０】
さらに、更新モジュールが無効化機能を備えることにより、別途無効化する手段を設ける必要はなく、簡易な構成で改ざんされたモジュールを排除することができる。
ここで、前記更新モジュール群に含まれる複数の更新モジュールの各々を無効化するための所定の情報を格納し、所定の暗号鍵で暗号化されたアクセス制御モジュールをさらに備え、前記他の更新モジュールは、前記外部サーバにアクセスして前記外部サーバから前記所定の暗号鍵に対応した復号鍵を取得し、前記取得した復号鍵を用いてアクセス制御モジュールを復号し、前記不正動作を行う可能性があると検証された更新モジュールを無効化するための所定の情報を前記アクセス制御モジュールから取得し、前記所定の情報に基づいて前記不正動作を行う可能性があると検証された更新モジュールを無効化するとしてもよい。
【００１１】
これにより、アクセス制御モジュールが複数の更新モジュールの各々を無効化するための所定の情報を格納しているので、複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合に当該更新モジュールを無効化するための所定の情報の特定が容易となり、当該更新モジュールを無効化する処理を簡易に行うことができる。
また、アクセス制御モジュールは所定の暗号鍵で暗号化されているので、所定の情報が外部に漏れるのを防止できる。したがって、例えば、不正動作を行う可能性があると検証された更新モジュールを無効化するための所定の情報が事前に書き換えられて、当該更新モジュールが無効化されずに残存することを防止することができる。
【００１２】
さらに、他の更新モジュールは、外部サーバから復号鍵を取得するので、当該復号鍵がソフトウェア更新装置への攻撃により漏洩することはなく、復号鍵の秘匿性を担保できる。加えて、他の更新モジュールは、取得した復号鍵を用いてアクセス制御モジュールを復号し、不正動作を行う可能性があると検証された更新モジュールを無効化するための所定の情報をアクセス制御モジュールから取得し、当該所定の情報に基づいて当該更新モジュールを無効化するので、当該所定の情報の秘匿性を担保しつつ当該所定の情報を無効化に利用でき、不正動作を行う可能性があると検証された更新モジュールが無効化されずに残存することなく確実に無効化できる。
【００１３】
ここで、前記更新モジュール群に含まれる複数の更新モジュールの各々を無効化するための所定の情報を格納しているアクセス制御モジュールをさらに備え、前記所定の情報は、更新モジュール毎に異なる暗号鍵で暗号化されており、前記他の更新モジュールは、前記外部サーバにアクセスし、前記不正動作を行う可能性があると検証された更新モジュールに関する所定の情報を暗号化した暗号鍵に対応した復号鍵を前記外部サーバから取得し、前記不正動作を行う可能性があると検証された更新モジュールに関する所定の情報を前記取得した復号鍵を用いて復号し、前記復号された所定の情報に基づいて前記不正動作を行う可能性があると検証された更新モジュールを無効化するとしてもよい。
【００１４】
これにより、アクセス制御モジュールが格納している所定の情報は、更新モジュール毎に異なる暗号鍵で暗号化されているので、所定の情報において全ての更新モジュールで共通の復号鍵を用いる場合に、当該復号鍵が漏洩した場合に全ての更新モジュールについての所定の情報が漏洩する危険があるのに対し、復号鍵が漏洩した場合の被害を最小限に抑えることができる。したがって、不正動作を行う可能性があると検証された更新モジュールに対応する所定の情報が事前に書き換えられて、当該更新モジュールが無効化されずに残存する危険性を減少させることができる。
【００１５】
ここで、前記所定の情報は、前記更新モジュール群に含まれる複数の更新モジュールの各々の格納位置情報であるとしてもよい。
また、前記他の更新モジュールは、前記格納位置情報に基づいて、前記不正動作を行う可能性があると検証された更新モジュールの全体を消去することで無効化するとしてもよい。
【００１６】
これにより、他の更新モジュールは、不正動作を行う可能性があると検証された更新モジュールに対応する格納位置情報に基づいて、当該更新モジュール全体を消去することで無効化するので、当該更新モジュールは完全に無効化され、当該更新モジュールの再起動を確実に阻止することができる。
ここで、前記格納位置情報は、前記更新モジュールが無効化される際に消去される消去部分を示し、前記他の更新モジュールは、前記格納位置情報に基づいて、前記不正動作を行う可能性があると検証された更新モジュールの消去部分を消去することで無効化するとしてもよい。
【００１７】
これにより、格納位置情報は、更新モジュールが無効化される際に消去される消去部分を示しているので、不正動作を行う可能性があると検証された更新モジュールを無効化する際に当該更新モジュールの全てを無効化する場合と比較し、当該更新モジュールの起動を不能にしつつ無効化する際の処理負担を軽減することができる。
ここで、前記格納位置情報は、前記更新モジュールが無効化される際に消去されるコード部分を示し、前記他の更新モジュールは、前記格納位置情報に基づいて、前記不正動作を行う可能性があると検証された更新モジュールのコード部分を消去することで無効化するとしてもよい。
【００１８】
これにより、格納位置情報は、更新モジュールが無効化される際に消去されるコード部分を示しているので、不正動作を行う可能性があると検証された更新モジュールを無効化する際に当該更新モジュールの全てを無効化する場合と比較し、当該更新モジュールの起動を不能にしつつ無効化する際の処理負担を軽減することができる。
ここで、前記他の更新モジュールは、前記不正動作を行う可能性があると検証された更新モジュールを無効化した場合、前記アクセス制御モジュールに格納されている、無効化した更新モジュールについての所定の情報を消去するとしてもよい。
【００１９】
これにより、無効化された更新モジュールに対応する所定の情報が外部に漏洩することはないので、当該更新モジュールを再度有効にすることを阻止することができる。
【図面の簡単な説明】
【００２０】
【図１】ソフトウェア更新システム１０００の全体構成図である。
【図２】更新モジュール１３１の機能ブロック図である。
【図３】更新用ソフトウェア配布モジュール２１０の機能ブロック図である。
【図４】保護制御モジュール１２０の機能ブロック図である。
【図５】アクセス制御モジュール１４０の機能ブロック図である。
【図６】アクセス情報取得鍵配布モジュール２２０の機能ブロック図である。
【図７】機器１００のハードウェア構成を示す図である。
【図８】機器１００のソフトウェア階層を示す図である。
【図９】ソフトウェア更新システム１０００の全体的な動作の流れを示すフローチャートである。
【図１０】機器１００に埋め込まれる鍵を模式的に示す図である。
【図１１】初期設計時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１２】更新モジュール初期化処理を示すフローチャートである。
【図１３】検知時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１４】解析・判断時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１５】解析・判断時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１６】更新モジュール１３１が更新用ソフトウェア配布モジュール２１０を認証する時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１７】更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証する時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１８】回復処理時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図１９】監視処理を示すフローチャートである。
【図２０】保護制御モジュールの更新処理を示すフローチャートである。
【図２１】保護制御モジュールの更新処理を示すフローチャートである。
【図２２】保護制御モジュールの更新処理を示すフローチャートである。
【図２３】監視処理と更新処理との連携動作の流れを模式的に示す図である。
【図２４】再暗号化処理を示すフローチャートである。
【図２５】次ラウンド準備時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図２６】無効化時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
【図２７】更新モジュールの更新処理を示すフローチャートである。
【図２８】更新モジュールの更新処理を示すフローチャートである。
【図２９】更新モジュールの更新処理を示すフローチャートである。
【図３０】脱退処理の動作の流れを示す流れ図である。
【図３１】部分情報の生成処理の動作の流れを示す流れ図である。
【図３２】部分情報の検証処理の動作の流れを示す流れ図である。
【図３３】脱退時の第１更新処理における更新モジュール１２２A、１２３A及び１２４Aの動作の流れを示す流れ図である。
【図３４】脱退時の第１更新処理における更新モジュール１２５A及び１２６Aの動作の流れを示す流れ図である。
【図３５】脱退時の第２更新処理における更新モジュール１２２A、１２６Aの動作の流れを示す流れ図である。
【図３６】脱退処理後における更新モジュール１２２Aから１２６Aそれぞれが保持する３つの分散情報を示す図である。
【図３７】追加処理の動作の流れを示す流れ図である。
【図３８】配布処理の動作の流れを示す流れ図である。
【図３９】分散情報の動作の流れを示す流れ図である。
【図４０】他モジュール分散情報の格納処理の動作の流れを示す流れ図である。
【図４１】追加時の第１分割処理の動作の流れを示す流れ図である。
【図４２】追加時の第１更新処理における更新モジュール１２１A及び１２２Aの動作の流れを示す流れ図である。
【図４３】追加時の第１更新処理における更新モジュール１２３A、１２４A及び１２５Aの動作の流れを示す流れ図である。
【図４４】追加時の第１更新処理における更新モジュール１２６A及び１２７Aの動作の流れを示す流れ図である。
【図４５】追加時の第２分割処理の動作の流れを示す流れ図である。
【図４６】追加時の第２更新処理における更新モジュール１２１A、１２２A及び１２３Aの動作の流れを示す流れ図である。
【図４７】追加時の第２更新処理における更新モジュール１２４A及び１２５Aの動作の流れを示す流れ図である。
【図４８】追加時の第２更新処理における更新モジュール１２６A及び１２７Aの動作の流れを示す流れ図である。
【図４９】追加処理後における更新モジュール１２１Aから１２７Aそれぞれが保持する３つの分散情報を示す図である。
【発明を実施するための形態】
【００２１】
以下、図面に基づき本発明の実施の形態を説明する。
（実施の形態１）
１．ソフトウェア更新システム１０００の構成
図１は、本発明の実施の形態１において、本発明に係るソフトウェア更新装置が適用されたソフトウェア更新システム１０００の全体構成図である。ソフトウェア更新システム１０００は、図１に示すように、機器１００と更新サーバ２００とから構成され、機器１００は、ネットワークを介して更新サーバ２００と接続されている。
【００２２】
１．１．機器１００の構成
機器１００は、ネットワークを介して、例えば、コンテンツ配信サーバから音楽や映像等のコンテンツを購入し再生したり、金融機関のシステムにアクセスし、ネットバンキング（預金の残高照会や口座振り込み等）を行ったりするなど、ユーザに対してネットワークを利用した様々な機能を提供するデータ処理装置である。
【００２３】
機器１００は、アプリケーションソフト（以下、「アプリ」という）１１０、１１１と、保護制御モジュール１２０と、更新モジュール群１３０と、アクセス制御モジュール１４０とを含んで構成される。
アプリ１１０、１１１は、機器１００を使用するユーザに対して、ネットワークを利用した機能を提供するソフトウェアであり、例えば、ネットワーク上のコンテンツ配信サーバ（不図示）から音楽や映像等のコンテンツを購入し、購入したコンテンツを再生するソフトウェアや、ネットワークを介して金融機関のシステム（不図示）にアクセスし、預金の残高照会や口座振り込み等のネットバンキングを行うソフトウェア等である。
【００２４】
アプリ１１０、１１１は、コンテンツ配信サーバや金融機関のシステムと認証を行うための認証鍵等の秘匿データを有している。この秘匿データは、悪意のある第三者（以下、「攻撃者」という）によりアプリから抜き取られ、不正に利用されないよう、保護される必要がある。
保護制御モジュール１２０は、攻撃者によりアプリ１１０、１１１が解析され、認証鍵等の秘匿データが抜き取られないようにアプリ１１０、１１１を保護するための機能を有するモジュールである。アプリを保護するための機能としては、例えば、アプリを利用しない時には暗号化して保存しておき、アプリを利用する時にのみ復号してメモリへロードする復号ロード機能や、アプリが改ざんされていないかをチェックする改ざん検出機能、デバッガなどの解析ツールが動作していないかをチェックする解析ツール検出機能などがある。保護制御モジュール１２０は、これらの機能の動作を制御し、アプリ１１０、１１１を保護する。
【００２５】
保護制御モジュール１２０は、改ざん検出機能や解析ツール検出機能により、攻撃者による攻撃を検出した場合には、アプリ１１０、１１１の動作を停止し、アプリ１１０、１１１が利用していたメモリ領域、特に秘匿データが記憶されたメモリ領域のクリア処理等を行い、秘匿データの漏洩を防止する。
更新モジュール群１３０は、複数の更新モジュール（ここでは３つ）から構成される。更新モジュール１３１、１３２、１３３は、機器１００内部のソフトウェア（ここでは保護制御モジュール１２０）が改ざんされていないかを検出し、改ざんされている場合には、機器１００外部の更新サーバ２００から更新用のソフトウェア（保護制御モジュール１２１）をダウンロードし保護制御モジュールを更新する機能を持つ。
【００２６】
また、更新モジュール１３１、１３２、１３３は、攻撃者によって更新モジュール自体が改ざんされ、改ざんされた更新モジュールが不正に利用されることを防止するために、更新モジュール間で改ざん検出を実施する。更新モジュールの改ざんが検出された場合には、他の正常な更新モジュールは、後述するアクセス制御モジュール１４０から暗号化アクセス情報を、後述するアクセス情報取得鍵配布モジュールからアクセス情報取得鍵をそれぞれ取得し、取得した暗号化アクセス情報とアクセス情報取得鍵とに基づいて、改ざんされた更新モジュールを無効化する。これにより、更新モジュール群に含まれる一部の更新モジュールが攻撃され、改ざんされた場合であっても、それを検出し、攻撃に対処することが可能となる。
【００２７】
アクセス制御モジュール１４０は、更新モジュール１３１、１３２、１３３が他の更新モジュールを消去するために必要な情報（アクセス情報）を保持するモジュールである。アクセス情報は、消去対象となる更新モジュールを消去するために必要な情報（例えば、更新モジュールを消去するための専用ドライバや更新モジュールが配置されているアドレス、消去に必要な手順が書かれた手順書等）であり、更新モジュール毎にそれぞれ個別のアクセス情報取得鍵で暗号化されている。
【００２８】
１．２．更新サーバ２００の構成
更新サーバ２００は、機器１００内部のソフトウェア（ここでは保護制御モジュール１２０）を更新するために必要な更新用のソフトウェア（保護制御モジュール１２１）を機器１００に配布するソフトウェア配布装置である。
更新サーバ２００は、更新用ソフトウェア配布モジュール２１０とアクセス情報取得鍵配布モジュール２２０とを含んで構成される。
【００２９】
更新用ソフトウェア配布モジュール２１０は、機器１００内部のソフトウェア（保護制御モジュール１２０）が更新される際に、更新モジュール１３１、１３２、１３３と連携して動作し、更新用のソフトウェア（保護制御モジュール１２１）を機器１００へ安全に送信するためのモジュールである。
アクセス情報取得鍵配布モジュール２２０は、機器１００内部の更新モジュール１３１、１３２、１３３からのアクセス情報取得鍵取得要求に応じて、アクセス情報取得鍵を更新モジュールへ配布するモジュールである。
【００３０】
機器１００内部のソフトウェア（保護制御モジュール１２０、更新モジュール１３１、１３２、１３３）が攻撃され改ざんされた場合には、改ざんされていない更新モジュールとアクセス制御モジュール１４０とアクセス情報取得鍵配布モジュール２２０とが連係して動作し、改ざんされたソフトウェアを消去または更新する。
なお、機器１００と更新サーバ２００との間のネットワークを介した通信には、通信データが暗号化されるなど、セキュリティの確保された通信路を用いてもよい。
【００３１】
続いて、各モジュールの詳細を順に説明する。
２．更新モジュールの詳細な構成
図２は、更新モジュールの機能ブロック図である。実際には、この構成は更新モジュールの数だけ存在するが、ここでは、代表的に更新モジュール１３１のものだけ示す。他の更新モジュールの構成も基本的に同一構成である。同図に示すように、更新モジュール１３１は、監視制御部３０１、改ざんチェック実行部３０２、更新制御部３０３、復号部３０４、認証部３０５、署名公開鍵保持部３０６、検証鍵保持部３０７、認証鍵対保持部３０８、MAC値保持部３０９、分散情報保持部３１０、アクセス情報取得部３１１、及び無効化処理部３１２を含んで構成される。
【００３２】
監視制御部３０１は、予め設定されている、改ざん検出対象となる更新モジュール（ここでは更新モジュール１３２）の識別子を保持しており、更新用ソフトウェア配布モジュール２１０から更新処理開始指示を受け付けると、識別子に対応する更新モジュールの改ざんチェックを、予め設定されているタイミングで、改ざんチェック実行部３０２に指示する。改ざん検出のタイミングについての詳細は、後述する。
【００３３】
改ざんチェック実行部３０２は、監視制御部３０１から改ざんチェック指示を受け付けると、識別子に対応する更新モジュールの改ざんチェックを実施し、改ざんチェック結果を更新用ソフトウェア配布モジュール２１０に送信する。
また、定期的あるいは不定期に、保護制御モジュール１２０の改ざんチェックを実施し、改ざんを検出した場合には、更新ソフトウェア配布モジュール２１０及び他の更新モジュールに改ざん検出通知を送信する。その一方で、他の更新モジュールから保護制御モジュール１２０の改ざん検出通知を受け付けた場合には、保護制御モジュール１２０の改ざんチェックを実施し、チェック結果を更新用ソフトウェア配布モジュール２１０に送信する。
【００３４】
また、機器１００の全体の制御を司る制御部（不図示）から、初期化指示を受信すると、署名公開鍵保持部３０６から署名公開鍵を取得し、取得した署名公開鍵を用いて、改ざん検出対象となる更新モジュール及び保護制御モジュール１２０の改ざんチェックを行う。改ざんチェック結果に応じて、検証鍵保持部３０７から検証鍵を取得し、取得した検証鍵を用いて改ざん検出対象となる更新モジュール及び保護更新モジュール１２０のMAC値を生成し、各々のモジュールの識別子と対応付けて、MAC値保持部３０９に送信する。
【００３５】
さらに、更新用ソフトウェア配布モジュール２１０から更新処理終了通知を受け付けると、検証鍵保持部３０７から検証鍵を取得し、取得した検証鍵を用いて保護制御モジュール１２１のMAC値を生成し、MAC値保持部３０９に送信する。
更新制御部３０３は、機器１００内部のソフトウェア（保護制御モジュール１２０）の更新を制御する。具体的には、他の更新モジュールまたは更新用ソフトウェア配布モジュール２１０から、暗号化されている更新用の保護制御モジュール１２１を受け取り、更新用ソフトウェア配布モジュール２１０から、更新用の保護制御モジュール１２１の証明書（例えば、更新用の保護制御モジュール１２１のハッシュ値が記述されている）、及び更新用の保護制御モジュール１２１を復号するための復号鍵を受け取ると、当該更新用の保護制御モジュール１２１を復号部３０４に復号させ、復号された更新用の保護制御モジュール１２１を他の更新モジュールへ送信し、あるいは機器１００内部の保護制御モジュール１２０を復号された更新用の保護制御モジュール１２１に更新する。
【００３６】
また、更新用の保護制御モジュール１２１に更新した後、または他の更新モジュールから更新終了通知を受け付けると、更新用ソフトウェア配布モジュール２１０から受け取った証明書を用いて保護制御モジュールが正しく更新されたかの検証を行い、検証結果を更新用ソフトウェア配布モジュール２１０に送信する。
復号部３０４は、暗号化された更新用の保護制御モジュール１２１の復号を更新制御部３０３から依頼されると、更新制御部３０３から入力される復号鍵を用いて、暗号化された更新用の保護制御モジュール１２１を復号する。更新用ソフトウェア配布モジュール２１０から入力される復号鍵は、復号部３０４が保持する、更新モジュール１３１固有の鍵を用いて暗号化された状態あるため、復号部３０４は、復号鍵を使用する前に、更新モジュール１３１固有の鍵を用いて当該復号鍵を復号する。
【００３７】
認証部３０５は、更新用ソフトウェア配布モジュール２１０から認証処理開始指示を受け付けると、更新用ソフトウェア配布モジュール２１０と相互認証の処理を行い、互いに正しい権利を持ったソフトウェアであることを確認する。具体的には、認証鍵対保持部３０８から認証鍵を取得し、取得した認証鍵を用いて更新サーバ２００を認証する。
署名公開鍵保持部３０６は、署名公開鍵を保持する。署名公開鍵は、更新モジュール１３１が機器１００内のソフトウェア（保護制御モジュール１２０）の改ざんチェックを、改ざん検出用証明書を用いて行う場合に使用される。署名公開鍵と更新用ソフトウェア配布モジュール２１０が保持する署名秘密鍵とは、公開鍵暗号方式における鍵対になる。
【００３８】
検証鍵保持部３０７は、検証鍵を保持する。検証鍵は、更新モジュール１３１が機器１００内のソフトウェア（保護制御モジュール１２０）の改ざんチェックを、メッセージ認証コード（ＭＡＣ）値を用いて行う場合に使用される。
認証鍵対保持部３０８は、認証鍵対を保持する。認証鍵対は、更新モジュール１３１と更新用ソフトウェア配布モジュール２１０とが相互認証処理を行うときに用いられる。認証鍵対は、公開鍵暗号方式における公開鍵（認証公開鍵）と秘密鍵（認証秘密鍵）との鍵対で構成される。認証公開鍵には、更新用ソフトウェア配布モジュール２１０が保持する署名秘密鍵を用いて生成された証明書（認証鍵証明書）が付加されている。
【００３９】
ＭＡＣ値保持部３０９は、改ざんチェック実行部３０２から入力される、改ざん検出対象となる更新モジュール及び保護更新モジュール１２０のMAC値と、各々のモジュールの識別子との対を保持する。
分散情報保持部３１０は、保護制御モジュール１２０から入力される、分散情報（ｓｈａｒｅ）と暗復号鍵証明書とを保持する。
【００４０】
アクセス情報取得部３１１は、更新用ソフトウェア配布モジュール２１０から、改ざんされた更新モジュールの無効化指示を受け付けると、アクセス情報取得鍵配布モジュール２２０に対しアクセス情報取得鍵の送付を依頼し、アクセス情報取得鍵を取得する。さらに、アクセス制御モジュール１４０から暗号化アクセス情報を取得し、アクセス情報取得鍵を用いて暗号化アクセス情報を復号し、復号されたアクセス情報を取得し、無効化処理部３１２に送信する。
【００４１】
無効化処理部３１２は、アクセス情報取得部３１３から入力されるアクセス情報に基づいて、改ざんされた更新モジュールを無効化する。無効化する方法としては、無効化対象の更新モジュールを全て消去する方法の他、改ざんされた部分や秘匿すべきデータなど無効化対象となる更新モジュールの一部を消去する方法や、機器１００内部のプログラムやデータを読み込むための機能を消去する方法等がある。なお、無効化処理部３１２は、アクセス情報を取得するまで、ソフトウェアを無効化することはできない。
【００４２】
署名方式に関しては非特許文献１に、証明書に関しては非特許文献２に詳しく説明されているので、ここでの説明は省略する。
３．更新用ソフトウェア配布モジュール２１０の詳細な構成
図３は、本発明の実施の形態１における更新用ソフトウェア配布モジュール２１０の機能ブロック図である。同図に示すように、更新用ソフトウェア配布モジュール２１０は、暗号鍵生成部４０１、暗号処理部４０２、暗号鍵保持部４０３、認証部４０４、更新判定部４０５、不正モジュール判定部４０６、更新モジュール選択部４０７、証明書生成部４０８、署名秘密鍵保持部４０９、及び更新用ソフトウェア保持部４１０から構成される。
【００４３】
暗号鍵生成部４０１は、更新判定部４０５から保護制御モジュール１２０を更新する旨の通知を受け付けると、更新用の保護制御モジュール１２１を暗号化するための暗号鍵を複数生成し、生成した複数の暗号鍵を暗号鍵保持部４０３及び暗号処理部４０２に送信する。
暗号処理部４０２は、更新用ソフトウェア保持部４１０から更新用の保護制御モジュール１２１を取得し、暗号鍵生成部４０１から入力される複数の暗号鍵を用いて、取得した更新用の保護制御モジュール１２１を多重に暗号化する。そして、暗号化された更新用の保護制御モジュール１２１及び複数の暗号鍵を更新モジュール選択部４０７に送信する。
【００４４】
暗号鍵保持部４０３は、暗号鍵生成部４０１が生成した複数の暗号鍵や、更新モジュール選択部４０７により暗号化された複数の暗号鍵を保持する。
認証部４０４は、更新モジュール１３１、１３２、１３３と相互認証の処理を行う。具体的には、更新モジュールから送信される認証鍵（公開鍵）を用いて更新モジュール１３１、１３２、１３３を認証し、認証結果を更新判定部４０５に送信する。
【００４５】
更新判定部４０５は、更新モジュール１３１、１３２、１３３から保護制御モジュール１２０の改ざん検出通知を受け付けると、改ざん検出通知に基づいて、保護制御モジュールが改ざんされているか否かを最終判断する。保護制御モジュールが改ざんされていると判断した場合には、各更新モジュールに改ざん情報の収集を依頼する。その後、各更新モジュールから入力される改ざん情報に基づいて、保護制御モジュールを更新すべきか否かを判定し、更新すべきと判定した場合には、各更新モジュールに認証処理の開始を指示する。
【００４６】
また、認証処理開始の指示後、認証部４０４から入力される認証結果に応じて、更新処理開始指示を更新モジュール１３１、１３２、１３３に送信するとともに、不正モジュール判定部４６、暗号鍵生成部４０１、及び証明書生成部４０８に保護制御モジュール１２０を更新する旨を通知する。
さらに、更新モジュール１３１、１３２、１３３から入力される検証結果通知に基づいて、保護制御モジュールが正しく更新されたか判定し、判定結果に応じて、保護制御モジュール１２０の更新終了通知を更新モジュール１３１、１３２、１３３に送信する。
【００４７】
不正モジュール判定部４０６は、更新判定部４０５から保護制御モジュール１２０を更新する旨の通知を受け付けると、更新モジュール１３１、１３２、１３３から入力される各更新モジュールの改ざんチェック結果に基づいて、各更新モジュールが改ざんされているかどうかの判定、及び更新モジュールが改ざんされていると判定した場合、どの更新モジュールが改ざんされたかを判定する。判定後、判定結果を更新モジュール選択部４０７に送信する。
【００４８】
更新モジュール選択部４０７は、不正モジュール判定部４０６から入力される判定結果に基づいて、保護制御モジュール１２０を更新する際に使用する更新モジュールを複数選択する。そして、暗号処理部４０２から入力される、更新用の保護制御モジュール１２１の暗号化に使用した複数の暗号鍵を、更新モジュール選択部４０７が選択した各更新モジュール固有の鍵を用いて暗号化する。暗号化した鍵を、暗号処理部４０２から入力される、暗号化された保護制御モジュールとともに、選択した更新モジュールへ送付する。暗号化された保護制御モジュールの証明書は、各更新モジュールに送付される。
【００４９】
なお、暗号化された保護制御モジュール１２１及び暗号鍵は、選択された更新モジュールへ一度に送信されるのではなく、更新処理の中で、それぞれのデータが必要になったタイミングで、各更新モジュールへ送信される。更新処理におけるタイミングに関しては後述する。
また、正常な更新モジュールに対し、改ざんされた更新モジュールを無効化するよう指示するとともに、アクセス情報取得鍵配布モジュール２２０に無効化に関する情報を通知する。
【００５０】
証明書生成部４０８は、更新判定部４０５から保護制御モジュール１２０を更新する旨の通知を受け付けると、署名秘密鍵保持部４０９から署名秘密鍵を、更新用ソフトウェア保持部４１０から更新用の保護制御モジュール１２１をそれぞれ取得し、取得した更新用の保護制御モジュール１２１に対して、正しく更新されたかを検証するための更新検証証明書を、取得した署名秘密鍵を用いて生成し、更新モジュール選択部４０７に送信する。
【００５１】
また、署名秘密鍵を用いて、更新モジュール１３１、１３２、１３３の認証公開鍵に対して認証証明書を生成する。
署名秘密鍵保持部４０９は、証明書生成部４０８による証明書の生成に用いられる署名秘密鍵を保持する。
更新用ソフトウェア保持部４１０は、保護制御モジュール１２０が改ざんされた場合に用いられ、当該保護制御モジュールを更新するための更新用の保護制御モジュール１２１を保持する。ここで、更新用の保護制御モジュール１２１は、正常なものであることが保障されているものとし、必ずしも最新版の保護制御モジュールである必要はない。
４．保護制御モジュールの詳細な構成
図４は、本発明の実施の形態１における保護制御モジュール１２０の機能ブロック図である。同図に示すように、保護制御モジュール１２０は、制御部５０１、復号ロード部５０２、改ざん検出部５０３、解析ツール検出部５０４、暗復号鍵保持部５０５、暗復号鍵生成部５０６、暗復号鍵分散部５０７、証明書生成部５０８、及び暗復号鍵復元部５０９を含んで構成される。
【００５２】
制御部５０１は、復号ロード部５０２、改ざん検出部５０３、及び解析ツール検出部５０４を制御し、アプリ１１０、１１１が攻撃者により攻撃されている場合には、それを検出する。
復号ロード部５０２は、暗号化されて機器１００内部に保持されているアプリ１１０、１１１が実行される際に、暗復号鍵保持部５０５に保持されている暗復号鍵を用いてアプリを復号し、メモリ上にロードする処理を行う。
【００５３】
また、アプリ１１０、１１１実行中に、他のアプリへのコンテキストスイッチが発生した場合には、暗復号鍵を用いてメモリ上のデータを暗号化し、再びアプリ１１０、１１１へコンテキストスイッチしたときに、暗号化したデータを復号する。
さらに、後述する再暗号化処理において、暗復号鍵復元部５０９から入力される復元された旧暗復号鍵を用いてアプリ１１０、１１１を復号し、暗復号鍵保持部５０５に保持されている新たな暗復号鍵でアプリ１１０、１１１を暗号化する。
【００５４】
改ざん検出部５０３は、アプリ１１０、１１１が改ざんされているか検出する改ざん検出処理を実行する。改ざん検出処理には、アプリ１１０、１１１に付加されている改ざん検出用の証明書を用いて改ざん検出を行う方法と、ＭＡＣ値を用いて改ざん検出を行う方法とがある。
解析ツール検出部５０４は、攻撃者がアプリ１１０、１１１を攻撃しようとして、デバッガ等の解析ツールをインストールし動作させたときに、解析ツールの動作を検出する。検出方法としては、例えば、ファイル名を検索する方法や、デバッガが使用する特殊なレジスタが使われているかを調べる方法、デバッガが設定する割り込みを検出する方法などがある。
【００５５】
暗復号鍵保持部５０５は、後述する初期化処理時に埋め込まれ、アプリ１１０、１１１を暗復号するための暗復号鍵を保持している。また、暗復号鍵生成部５０６にて新たに暗復号鍵が生成されると、暗復号鍵生成部５０６から入力される暗復号鍵を保持する。
暗復号鍵生成部５０６は、暗復号鍵復元部５０９から暗復号鍵を復元した旨の通知を受け付けると、アプリ１１０、１１１を暗復号するための新たな暗復号鍵を生成する。生成した暗復号鍵を暗復号鍵保持部５０５、証明書生成部５０８、及び暗復号鍵分散部５０７に送信する。
【００５６】
暗復号鍵分散部５０７は、後述する初期設計時や次ラウンド準備時に、暗復号鍵生成部５０７から入力される暗復号鍵に基づいて、秘密分散法を用いて分散情報を生成し、生成した分散情報を更新モジュール１３１、１３２、１３３に送信する。
証明書生成部５０８は、暗復号鍵生成部５０６から入力される暗復号鍵に基づいて証明書を生成し、生成した証明書を更新モジュール１３１、１３２、１３３に送信する。証明書は、暗復号鍵から生成される分散情報を復元する際に、正しく復元できたかの検証に使用される。
【００５７】
暗復号鍵復元部５０９は、更新モジュール１３１、１３２、１３３から分散情報及び暗復号鍵証明書を取得し、取得した分散情報及び暗復号鍵証明書に基づいて、旧暗復号鍵を復元する。復元した旧暗復号鍵を復号ロード部５０２に送信する。また、暗復号鍵生成部５０６に暗復号鍵を復元した旨を通知する。
５．アクセス制御モジュール
図５は、本発明の実施の形態１におけるアクセス制御モジュール１４０の機能ブロック図である。同図に示すように、アクセス制御モジュール１４０は、通信部６０１と、アクセス情報保持部６０２とから構成される。
【００５８】
通信部６０１は、更新モジュール１３１、１３２、１３３からアクセス情報の取得依頼を受信する。アクセス情報取得依頼に基づいて、不正に改ざんされた更新モジュールに対応するアクセス情報をアクセス情報保持部６０２から取得し、取得したアクセス情報取得を依頼してきた更新モジュールへ送信する。
アクセス情報保持部６０２は、更新モジュール毎に当該更新モジュールを消去するためのアクセス情報を保持する。アクセス情報は、更新モジュール毎にそれぞれ個別のアクセス情報取得鍵で暗号化され、識別子（更新モジュール識別子）等により、各更新モジュールと対応付けられる。
６．アクセス情報取得鍵配布モジュール
図６は、本発明の実施の形態１におけるアクセス情報取得鍵配布モジュール２２０の機能ブロック図である。同図に示すように、アクセス情報取得鍵配布モジュール２２０は、通信部７０１と、アクセス情報取得鍵保持部７０２とから構成される。
【００５９】
通信部７０１は、更新モジュール１３１、１３２、１３３からアクセス情報取得鍵の取得依頼を、更新モジュール選択部４０７から無効化に関する情報の通知をそれぞれ受信する。アクセス情報取得鍵の取得依頼及び無効化に関する情報に基づいて、当該取得依頼が正しいか否かを判断し、判断結果に応じて、消去対象となる更新モジュールに対応するアクセス情報取得鍵をアクセス情報取得鍵保持部７０２から取得し、依頼してきた更新モジュールへ送信する。
【００６０】
アクセス情報取得鍵保持部７０２は、アクセス制御モジュール１４０が保持している、暗号化された各アクセス情報を復号するためのアクセス情報取得鍵を保持する。アクセス情報取得鍵は、識別子（更新モジュール識別子）等により、各更新モジュールと対応付けられる。
７．機器１００のハードウェア構成
続いて、機器１００のハードウェア構成について説明する。図７は、機器１００のハードウェア構成を示す図である。同図に示すように、機器１００は、CPU（Central Processing Unit）１１、不揮発メモリ（例えば、EEPROM（ElectricallyErasable and Programmable Read Only Memory））１２、RAM（Random Access Memory）１３、及びNIC（NetworkInterface Card）１４等を含んで構成され、これらはバスを介して相互に通信可能に接続されている。
【００６１】
EEPROM１２には、保護制御モジュール１２０、更新モジュール１３１、１３２、１３３、及びアプリ１１０、１１１等が格納されている。
EEPROM１２に格納されている制御用の各種モジュールをCPU１１が実行することにより、各種モジュールの各機能部の制御は実現される。各機能部は、具体的には、コンピュータプログラムによって記述され実現される。
【００６２】
RAM１３は、CPU１１のワークエリアとして用いられる。RAM１３には更新モジュール１３１、１３２、１３３及びアプリ１１０、１１１がロードされる。改ざんチェック及び無効化の対象となる更新モジュールは、RAM１３上で動作している更新モジュールである。
NICは、ネットワークに接続するための拡張カードである。
８．ソフトウェア階層
続いて、機器１００におけるソフトウェア階層について説明する。図８は、機器１００のソフトウェア階層を示す図である。同図に示すように、アクセス制御モジュール１４０及び更新モジュール群１３０は、OS１５０の中に組み込まれている。アプリ１１０、１１１はOS１５０上で動作し、保護制御モジュール１２０はブートローダ１６０等とともにOSの管理外にある。機器１００の起動の際には、まず保護制御モジュール１２０及び更新モジュール群１３０が起動された上でアプリケーションが実行される。
９．ソフトウェア更新システム１０００の動作
９．１．ソフトウェア更新システム１０００の動作概略
続いて、ソフトウェア更新システム１０００の動作を説明する。初めに、ソフトウェア更新システム１０００の大まかな処理を説明する。大まかな処理として、以下の７つの処理がある。
【００６３】
１つ目の処理は、ソフトウェア（保護制御モジュール１２０）を更新するために必要となる各種鍵データや、ソフトウェア更新後に必要となるデータ（秘密分散法を用いて分散した分散情報）などを更新モジュール１３１、１３２、１３３のそれぞれに埋め込む処理（初期設計処理）である。
２つ目の処理は、機器１００内部のソフトウェア（保護制御モジュール１２０）が改ざんされていないかを検知する処理（検知処理）である。
【００６４】
３つ目の処理は、改ざんが検出された時に、改ざんされたソフトウェアを解析し、改ざんされたモジュールを含むソフトウェアを更新するかどうかを判断し、更新する場合は更に、更新モジュール１３１、１３２、１３３へ更新処理の実施を通知する処理（解析・判断処理）である。
４つ目の処理は、更新モジュール１３１、１３２、１３３と更新用ソフトウェア配布モジュール２１０とが互いに正しいソフトウェアであるかどうかを確認するために、相互に行う認証処理（相互認証処理）である。
【００６５】
５つ目の処理は、更新モジュール間で改ざんチェックを行うとともに更新用のソフトウェアを機器１００へインストールし、更新モジュール１３１、１３２、１３３へ埋め込まれた分散情報からデータを復元する処理（回復処理）である。
６つ目の処理は、次のソフトウェア更新のための鍵データや分散情報を生成し、各更新モジュールに埋め込む処理（次ラウンド準備処理）である。
【００６６】
７つ目の処理は、相互認証処理や回復処理において、更新モジュール１３１、１３２、１３３が不正に改ざんされたことを検出したときに、不正に改ざんされた更新モジュールを消去する処理（無効化処理）である。
上記７つの処理のうち、無効化処理以外の６つの処理の関係は、図９に示す関係になる。無効化処理は、それぞれの処理の中で必要に応じて呼び出される。図９は、ソフトウェア更新システム１０００の全体的な動作の流れを示すフローチャートである。
【００６７】
ソフトウェア更新システム１０００では、機器１００が工場で製造される際に初期設計処理が行われ、各更新モジュール１３１、１３２、１３３へ分散情報が埋め込まれる（ステップＳ１００）。その後、機器１００が工場から出荷され、ユーザの利用に供される。
ユーザにより機器１００が利用される際には、機器１００内部では、保護制御モジュール１２０がアプリ１１０、１１１を攻撃者による攻撃から保護する。これと同時に、更新モジュール１３１、１３２、１３３が保護制御モジュール１２０の改ざん検出を実施し、保護制御モジュール１２０が攻撃されていないかをチェックする検知処理を行う（ステップＳ２００）。
【００６８】
検知処理を行った結果、保護制御モジュール１２０が改ざんされたと判明した場合には、解析・判断処理（ステップＳ３００）、相互認証処理（ステップＳ４００）、回復処理（ステップＳ５００）、次ラウンド準備処理（ステップＳ６００）を行い、再び検知処理（ステップＳ２００）へ戻る。
なお、上記すべての処理が必要ではなく、少なくとも外部から更新のトリガを与えられて、更新を行う処理（回復処理）があればよい。
【００６９】
続いて、上記７つの処理について、その詳細を順に説明する。
９．２．初期設計時の動作
まず、初期化処理について説明する。図１１は、初期設計時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール１３１、１３２、１３３の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
【００７０】
機器１００が工場で製造される際に、機器１００の不揮発メモリへアプリ１１０、１１１、保護制御モジュール１２０、更新モジュール１３１、１３２、１３３、及びアクセス制御モジュールがインストール（書き込み）される（ステップＳ１０１）。これらのソフトウェアには、ソフトウェアが改ざんされているかどうかを検証するための証明書（改ざん検出用証明書）が付加されている。この改ざん検出用証明書は、更新用ソフトウェア配布モジュール２１０が保持する署名秘密鍵により署名されている。上記ソフトウェア以外にも、機器１００の動作に必要なソフトウェアがインストールされる。ここで、初期化処理の際に機器１００に埋め込まれる鍵について説明する。図１０は、機器１００に埋め込まれる鍵を模式的に示す図である。更新モジュールについては、代表的に更新モジュール１３１のものだけ示す。本図に示すように、保護制御モジュール１２０には暗復号鍵が、更新モジュール１３１、１３２、１３３には署名公開鍵、検証鍵、及び認証鍵対がそれぞれ埋め込まれる。また、更新モジュール１３１、１３２、１３３には、それぞれの更新モジュールを識別するための更新モジュール識別子も埋め込まれる。
【００７１】
暗復号鍵は、アプリ１１０、１１１を暗復号するための鍵であり、アプリ１１０、１１１は、暗復号鍵を用いて暗号化された状態で不揮発メモリへ記憶され、実行時には保護制御モジュール１２０により暗復号鍵を用いて復号された後、実行される。コンテキストを切替えながら複数のアプリを実行する場合には、コンテキスト切替えのタイミングで、暗復号鍵を用いて、アプリ１１０、１１１の暗復号を実施し、デバッガなどの解析ツールにより、アプリ１１０、１１１実行時のデータが抜き取られることを防止する。
【００７２】
更新モジュール１３１、１３２、１３３に埋め込まれる鍵のうち、署名公開鍵は、全ての更新モジュールで共通とし、検証鍵と認証鍵対とは、更新モジュール毎に異なるものとする。また、分散情報ペアは、更新モジュール毎に異なるものとする。
図１１に戻って、各ソフトウェアのインストール後、機器１００の初期設定を行うソフトウェアや、正常に動作するかをテストするためのソフトウェアなどを実行し、初期化処理を行い（ステップＳ１０２）、保護制御モジュール１２０及び更新モジュール１３１、１３２、１３３に初期化指示を送信する（ステップＳ１０３）。初期化指示を受信する保護制御モジュール１２０及び更新モジュール１３１、１３２、１３３でもそれぞれ初期化処理が行われる。
【００７３】
保護制御モジュール１２０は、初期化指示を受信すると（ステップＳ１０４ａ）、秘密分散法を用いて暗復号鍵から分散情報を生成する（ステップＳ１０５）。さらに、暗復号鍵の復元時に、正しく復元できたかを確認するための証明書（暗復号鍵証明書）を、署名秘密鍵を用いて生成する（ステップＳ１０６）。生成した分散情報と暗復号鍵証明書とをそれぞれ、更新モジュール１３１、１３２、１３３へ送信する（ステップＳ１０７）。ここで、分散情報は、更新モジュールと同数だけ生成され、それぞれの更新モジュール１３１、１３２、１３３には、異なる分散情報のペアが送信される。また、各分散情報にはどの分散情報かを識別するための識別子が付加される。暗復号鍵証明書については、それぞれの更新モジュール１３１、１３２、１３３へ同じものが送信される。
【００７４】
更新モジュール群は、初期化指示を受信し（ステップＳ１０４ｂ）、分散情報と暗復号鍵証明書とを受信すると（ステップＳ１０８）、更新モジュール初期化処理を行う（ステップＳ１０９）。
図１２は、更新モジュール初期化処理を示すフローチャートである。本図では、代表的に更新モジュール１３１のものだけ示す。他の更新モジュールの動作も基本的に同一である。
【００７５】
まず、更新モジュール１３１は、保護制御モジュール１２０から受信した分散情報のペアと暗復号鍵証明書とを分散情報保持部３１０に保持する（ステップＳ１１１）。
改ざん検出対象となる他の更新モジュール及び保護制御モジュール１２０の改ざん検出用証明書の検証を実施する（ステップＳ１１２）。この検証は、各モジュールからハッシュ値を生成し、生成したハッシュ値とそれぞれの改ざん検出用証明書に記述されているハッシュ値とを比較することにより行われる。
【００７６】
生成した各ハッシュ値がそれぞれの改ざん検出用証明書に記述されているハッシュ値と一致するか否かを判定し（ステップＳ１１３）、各ハッシュ値がそれぞれの改ざん検出用証明書に記述されているハッシュ値と一致すれば（ステップ１１３でＹｅｓ）、改ざん検出対象となる他の更新モジュール及び保護制御モジュール１２０それぞれに対してＭＡＣ値を生成し、ＭＡＣ値テーブルとしてＭＡＣ値保持部３０９に保持する（ステップＳ１１４）。
【００７７】
少なくとも何れか一方のハッシュ値が改ざん検出用証明書に記述されているハッシュ値と一致しなければ（ステップＳ１１３でＮｏ）、エラーを出力して処理を停止する（ステップＳ１１５）。
９．３．検知時の動作
続いて、検知処理について説明する。機器１００は、初期化処理を終えると工場から出荷され、ユーザの元へ送られる。ユーザが機器１００を使用し、アプリ１１０、１１１を利用しているときには、機器１００内部では、保護制御モジュール１２０が復号ロード機能や改ざん検出機能、解析ツール検出機能などの機能を制御し、アプリ１１０、１１１を攻撃者による攻撃から保護する。
【００７８】
図１３は、検知時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。検知処理においては、まず、更新モジュール１３１、１３２、１３３が、保護制御モジュール１２０の改ざん検出を実施する（ステップＳ２０１）。改ざん検出は、保護制御モジュール１２０のＭＡＣ値を、検証鍵を使用して計算し、ＭＡＣ値テーブルに保持されている、初期設計時に算出した保護制御モジュール１２０のＭＡＣ値と比較することで、行われる。なお、本図では記載を簡略化し、更新モジュール１３１のみが保護制御モジュールが改ざんされているかをチェックしているが、当然、更新モジュール１３２、１３３でも同様の処理が行われる。その後の処理についても、更新モジュール１３１が保護制御モジュールの改ざんを検出した場合を中心に記載しているが、更新モジュール１３２、１３３が保護制御モジュールの改ざんを検出した場合も基本的には同様の処理が行われる。
【００７９】
保護制御モジュール１２０が改ざんされているか否か、言い換えるとＭＡＣ値が一致するか否かを判定し（ステップＳ２０２）、保護制御モジュール１２０が改ざんされていると判定した場合には（ステップＳ２０２でＹｅｓ）、更新用ソフトウェア配布モジュール２１０と他の更新モジュールとに改ざん検出通知を送信する（ステップＳ２０３）。
保護制御モジュール１２０が改ざんされていないと判定した場合には（ステップＳ２０２でＮｏ）、更新用ソフトウェア配布モジュール２１０や他の更新モジュールへの通知を行わず、改ざん検出処理（Ｓ２０１）へ戻る。
【００８０】
更新モジュール１３２、１３３は、更新モジュール１３１から改ざん検出通知を受信すると（ステップＳ２０４ｂ）、検証鍵及びＭＡＣ値を利用して、保護制御モジュール１２０の改ざんチェックを実施し（ステップＳ２０５）、改ざんチェック結果を更新用ソフトウェア配布モジュール２１０へ送信する（ステップＳ２０６）。
更新用ソフトウェア配布モジュール２１０は、更新モジュール１３１から改ざん検出通知を（ステップＳ２０４ａ）、更新モジュール１３２、１３３から改ざんチェック結果をそれぞれ受信する（ステップＳ２０７）。
【００８１】
９．４．解析・判断時の動作
続いて、解析判断処理について説明する。図１４、１５は、解析・判断時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール１３１、１３２、１３３の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
【００８２】
検知処理において、更新用ソフトウェア配布モジュール２１０が更新モジュール１３１、１３２、１３３から改ざん検出通知及び改ざんチェック結果を受信した場合には（ステップＳ２０４ａ及びＳ２０７）、受信した改ざん検出通知及び改ざんチェック結果に基づいて、保護制御モジュール１２０が改ざんされているか否かを判定する（ステップＳ３０１）。判定方法としては、例えば、一定数の更新モジュール（例えば、過半数等）が改ざんされていると判定している場合には、保護制御モジュール１２０は改ざんされていると判定し、逆に、過半数の更新モジュールが改ざんされていないと判定している場合には、保護制御モジュール１２０は改ざんされていないと判定する。
【００８３】
保護制御モジュール１２０が改ざんされていないと判定した場合には（ステップＳ３０１でＮｏ）、検知処理に戻る（ステップＳ３０２）。
保護制御モジュール１２０が改ざんされていると判定した場合には（ステップＳ３０１でＹｅｓ）、更新用ソフトウェア配布モジュール２１０は、更新モジュール１３１、１３２、１３３に対して保護制御モジュール１２０のどの部分が改ざんされたかを示す改ざん情報を通知するよう依頼する（ステップＳ３０３）。
【００８４】
更新モジュール群は、改ざん情報の通知依頼を受け付けると（ステップＳ３０４）、改ざん情報を収集する（ステップＳ３０５）。改ざん情報の収集は、例えば、保護制御モジュール１２０が複数の部分に分けられており、予め部分毎に証明書（ハッシュ値が記述されている）が発行されていることを前提とすれば、部分毎にハッシュ値を算出し、算出された各ハッシュ値が各証明書に記述されたハッシュ値と一致するか否かにより、行うことができる。
【００８５】
更新モジュール群は、改ざん情報を収集すると、改ざん情報を更新用ソフトウェア配布モジュール２１０に送信する（ステップＳ３０６）。
更新用ソフトウェア配布モジュール２１０は、更新モジュール群から改ざん情報を受信すると（ステップＳ３０７）、受信した改ざん情報を解析し（ステップＳ３０８）、解析結果に基づいて、保護制御モジュール１２０を無効化するか否かを判断する（ステップＳ３０９）。
【００８６】
保護制御モジュール１２０を無効化すると判断した場合には（ステップＳ３０９でＹｅｓ）、アプリ１１０、１１１を介して、当該アプリ１１０、１１１にサービスを提供しているサーバ（不図示）に機器１００を無効化するよう依頼する（ステップＳ３１０、３１１）。
保護制御モジュール１２０を無効化しないと判断した場合には（ステップＳ３０９でＮｏ）、保護制御モジュール１２０を更新するか否かを判断する（ステップＳ３１２）。
【００８７】
保護制御モジュール１２０を更新すると判断した場合には（ステップＳ３１２でＹｅｓ）、更新モジュール群に認証処理開始指示を送信し（ステップＳ３１３）、更新モジュール群は、認証処理開始指示を受信する（ステップＳ３１４）。
保護制御モジュール１２０を更新しないと判断した場合には（ステップＳ３１２でＮｏ）、検知処理に戻る（ステップＳ３０２）。
【００８８】
保護制御モジュール１２０の無効化及び更新は、例えば、保護制御モジュール１２０の重要な部分が改ざんされているか、一定部分以上改ざんされているか等を判断することにより行われる。
９．５．相互認証時の動作
続いて、相互認証処理について説明する。解析・判断処理において、保護制御モジュール１２０を更新する必要があると判断され、更新モジュール１３１、１３２、１３３へ認証処理の開始を指示した後、更新用ソフトウェア配布モジュール２１０と各更新モジュール１３１、１３２、１３３との間で、それぞれ１対１の相互認証処理が行われる。これにより、機器１００が不正な更新サーバへ接続されることや、更新サーバ２００が不正な機器へ接続されることを防止することができる。相互認証には、更新サーバ２００は署名秘密鍵と署名公開鍵を使用し、各更新モジュール１３１、１３２、１３３は認証鍵対（認証秘密鍵、認証公開鍵）を使用する。
【００８９】
相互認証時の動作としては、まず、更新モジュール１３１、１３２、１３３が、更新用ソフトウェア配布モジュール２１０を認証する。図１６は、更新モジュール１３１が更新用ソフトウェア配布モジュール２１０を認証する時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。本図では、代表的に更新モジュール１３１のものだけ示す。他の更新モジュールの動作も基本的に同一である。
【００９０】
更新モジュール１３１は、乱数生成器を用いて乱数を生成し（ステップＳ４０１）、生成した乱数をチャレンジデータとして更新用ソフトウェア配布モジュール２１０へ送信する（ステップＳ４０２）。この時、更新モジュール１３１を識別するための更新モジュール識別子もチャレンジデータと一緒に送信する。
更新用ソフトウェア配布モジュール２１０は、各更新モジュールからチャレンジデータを受信すると（ステップＳ４０３）、受信したチャレンジデータに対し、署名秘密鍵を用いて署名生成を行い（ステップＳ４０４）、生成した署名をレスポンスデータとして、送信してきた更新モジュールへ返信する（ステップＳ４０５）。
【００９１】
更新モジュール１３１は、更新用ソフトウェア配布モジュール２１０からレスポンスデータを受信すると（ステップＳ４０６）、受信したレスポンスデータが送信したチャレンジデータに対する署名になっているかを、署名公開鍵を用いて署名検証する（ステップＳ４０７）。
検証した結果、レスポンスデータが送信したチャレンジデータに対する署名になっている、すなわち、更新用ソフトウェア配布モジュール２１０が正当なモジュールである場合には（ステップＳ４０８でＹｅｓ）、処理を継続する。
【００９２】
レスポンスデータが送信したチャレンジデータに対する署名になっていない、すなわち、更新用ソフトウェア配布モジュール２１０が正当なモジュールでない場合には（ステップＳ４０８でＮｏ）、エラーを出力して、処理を停止する（ステップＳ４０９）。
次に、更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証する。図１７は、更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証する時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール１３１、１３２、１３３の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
【００９３】
更新用ソフトウェア配布モジュール２１０は、乱数生成器を用いて、上記処理においてチャレンジデータを送信してきた更新モジュールの数だけ乱数を生成し（ステップＳ４１１）、生成した各乱数をチャレンジデータとして、更新モジュールと一対一に対応する形態で、送信する（ステップＳ４１２）。
更新モジュール群は、更新用ソフトウェア配布モジュール２１０からチャレンジデータを受信すると（ステップＳ４１３）、受信したチャレンジデータに対し、認証秘密鍵を用いて署名生成を行い（ステップＳ４１４）、生成した署名をレスポンスデータとして更新用ソフトウェア配布モジュール２１０へ返信する（ステップＳ４１５）。その際、認証公開鍵と認証鍵証明書とを併せて更新用ソフトウェア配布モジュール２１０へ返信する（ステップＳ４１５）。
【００９４】
更新用ソフトウェア配布モジュール２１０は、更新モジュール群からレスポンスデータ、認証公開鍵、及び認証鍵証明書を受信すると（ステップＳ４１６）、認証鍵証明書が、更新用ソフトウェア配布モジュール２１０により発行された証明書であるかを検証した後、認証鍵証明書を使用して認証公開鍵の検証を行う（ステップＳ４１７）。
検証した結果、認証鍵証明書あるいは認証公開鍵に問題があれば（ステップＳ４１８でＮｏ）、処理を停止する（ステップＳ４１９）。
【００９５】
検証した結果、認証鍵証明書及び認証公開鍵ともに問題がなければ（ステップＳ４１８でＹｅｓ）、受信したレスポンスデータが、更新用ソフトウェア配布モジュール２１０が送信したチャレンジデータの署名になっているかを、認証公開鍵を用いて署名検証する（ステップＳ４２０）。そして、検証結果に基づいて、回復処理を行うか否かを判定する。この判定は、例えば、署名検証により、正当なモジュールであると検証できた更新モジュールの数が予め設定されている回復処理に必要な数以上あるかを判断することにより、行われる（ステップＳ４２１）。
【００９６】
正当なモジュールであると検証できた更新モジュールが、回復処理に必要な数に満たないと判定した場合には（ステップＳ４２１でＮｏ）、処理を停止する（ステップＳ４１９）。
正当なモジュールであると検証できた更新モジュールが、回復処理に必要な数を満たすと判定した場合には（ステップＳ４２１でＹｅｓ）、正当なモジュールであると検証できた更新モジュールに更新処理開始指示を送信し（ステップＳ４２２）、正当なモジュールであると検証された更新モジュールは、更新処理開始指示を受信する（ステップＳ４２３）。以上で相互認証処理を終了する。
【００９７】
なお、更新用ソフトウェア配布モジュール２１０は、相互認証処理において、認証できた全ての更新モジュールの更新モジュール識別子からなる認証リストを作成し、以降の回復処理では、この認証リストに記載されている更新モジュールのみを利用して処理を実施する。
９．６．回復時の動作
続いて、回復処理について図１８〜２４を用いて説明する。相互認証処理において、相互認証が成功した場合には、改ざんされた保護制御モジュール１２０を更新用の保護制御モジュール（更新用保護制御モジュール）１２１へ更新する回復処理を実施する。図１８は、回復処理時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。回復処理は、大きく３つの処理からなる。
【００９８】
１つ目の処理は、更新モジュール１３１、１３２、１３３が他の更新モジュールに対して改ざん検出処理を実施する監視処理（ステップＳ５０１）である。
２つ目の処理は、更新用保護制御モジュール１２１を用いて保護制御モジュール１２０を更新する更新処理（ステップＳ５０２）である。
３つ目の処理は、暗号化されたアプリ１１０、１１１を再暗号化する再暗号化処理（ステップＳ５０３）である。
【００９９】
なお、上記３つの処理がすべて必要ではなく、他の更新モジュールに対して改ざん検出処理を実施する監視処理（ステップＳ５０１）、及び外部から更新のトリガを与えられて、更新用保護制御モジュール１２１を用いて保護制御モジュール１２０を更新する更新処理（ステップＳ５０２）があればよい。
上記３つの処理について、その詳細を順に説明する。
【０１００】
９．６．１．監視処理
監視処理では、更新モジュール群１３０内の更新モジュール１３１、１３２、１３３が、更新モジュール群１３０内の他の更新モジュールに対して改ざん検出の処理を実施する。これにより、回復処理中に一部の更新モジュールが攻撃者により改ざんされた場合にも、改ざん検出が可能となる。さらに、監視処理を定期的に実施することで、更新用保護制御モジュール１２１が完全に漏洩する前に改ざんを検出し、漏洩を防止することが可能となる。
【０１０１】
以下、監視処理の一例を、フローチャートを用いて詳細に説明する。図１９は、監視処理を示すフローチャートである。
まず、更新モジュール１３１は、更新モジュール１３２に対し改ざん検出処理を実施し（ステップＳ５１１ａ）、更新モジュール１３２は、更新モジュール１３３に対し改ざん検出処理を実施し（ステップＳ５１１ｂ）、更新モジュール１３３は、更新モジュール１３１に対し改ざん検出処理を実施する（ステップＳ５１１ｃ）。改ざん検出は、更新モジュール１３１、１３２、１３３のＭＡＣ値を、検証鍵を使用して計算し、ＭＡＣ値テーブルに保持されている、初期設計時に計算したＭＡＣ値と比較することにより、行われる。また、更新モジュール１３１、１３２、１３３のハッシュ値を算出し、算出したハッシュ値と、各更新モジュールに予め付加されている証明書に記述されているハッシュ値とを比較することにより行われるとしてもよい。
【０１０２】
各更新モジュールは、改ざん検出結果を更新用ソフトウェア配布モジュール２１０へ通知する（ステップＳ５１２）。
更新用ソフトウェア配布モジュール２１０は、各更新モジュールから改ざん検出結果を受信し（ステップＳ５１３）、改ざんされた更新モジュールがあるか否かを判定する（ステップＳ５１４）。
【０１０３】
改ざんされた更新モジュールがあると判定した場合には（ステップＳ５１４でＹｅｓ）、更新用ソフトウェア配布モジュール２１０は、直ちに回復処理を停止する（ステップＳ５１５）。
改ざんされた更新モジュールがないと判定した場合には（ステップＳ５１４でＮｏ）、処理を継続する。
【０１０４】
９．６．２．更新処理
続いて更新処理について説明する。更新処理では、更新用ソフトウェア配布モジュール２１０が更新用保護制御モジュール１２１を複数の鍵を用いて多重に暗号化し、更新モジュール群１３０に含まれる更新モジュールを送信先として送信する。更新モジュール群１３０に含まれる複数の更新モジュールは、保護制御モジュール１２０を更新用保護制御モジュール１２１に更新する。この時、多重に暗号化された更新用保護制御モジュール１２１を復号するための複数の鍵を、更新モジュール群１３０に含まれる各更新モジュールへ送信するタイミングを更新用ソフトウェア配布モジュール２１０が制御することで、攻撃者が暗号化されていない更新用保護制御モジュール１２１を入手することを不可能にする。
【０１０５】
以下、更新処理の一例を、フローチャートを用いて詳細に説明する。図２０〜２２は、更新処理を示すフローチャートである。
まず、更新用ソフトウェア配布モジュール２１０は、更新用保護制御モジュール１２１が機器１００に正しくインストールされたかを更新モジュール１３１、１３２、１３３が検証できるように、更新用保護制御モジュール１２１の証明書（更新検証証明書）を、証明書生成部４０８を用いて生成し（ステップＳ５２１）、生成した更新検証証明書を各更新モジュール１３１、１３２、１３３へ送信する（ステップＳ５２２）。更新検証証明書の生成には、署名秘密鍵を利用する。各更新モジュールは、更新検証証明書を受信する（ステップＳ５２３）。
【０１０６】
次に、更新用ソフトウェア配布モジュール２１０は、更新用保護制御モジュール１２１を多重に暗号化するための暗号鍵を、暗号鍵生成部４０３を用いて複数（ここでは第１の鍵及び第２の鍵の２つ）生成する（ステップＳ５２４）。そして、暗号処理部４０２を利用して、第２の鍵を用いて更新用保護制御モジュール１２１を暗号化し、暗号化更新用保護制御モジュールを生成する（ステップＳ５２５）。暗号化更新用保護制御モジュール１２１に対して、第１の鍵を用いてさらに暗号化し、多重暗号化更新用保護制御モジュール１２１を生成する（ステップＳ５２６）。
【０１０７】
更新用ソフトウェア配布モジュール２１０は、更新モジュール群１３０に含まれる複数の更新モジュールから一の更新モジュール（ここでは、更新モジュール１３１）を選択し（ステップＳ５２７）、多重暗号化更新用保護制御モジュール１２１及び第１の鍵を、選択した更新モジュール１３１に送信する（ステップＳ５２８）。
更新モジュール１３１は、多重暗号化更新用保護制御モジュール１２１及び第１の鍵を受信すると（ステップＳ５２９）、第１の鍵を用いて、多重暗号化更新用保護制御モジュール１２１を復号し、暗号化更新用保護制御モジュール１２１を取得する（ステップＳ５３０）。復号が終了すると、復号終了通知を更新用ソフトウェア配布モジュール２１０に送信する（ステップＳ５３１）。
【０１０８】
更新用ソフトウェア配布モジュール２１０は、復号終了通知を受信すると（ステップＳ５３２）、更新モジュール群１３０に含まれる複数の更新モジュールから、上記選択した更新モジュール１３１とは異なる更新モジュール（ここでは、更新モジュール１３２）を１つ選択し（ステップＳ５３３）、選択した更新モジュール１３２に第２の鍵を送信するとともに（ステップＳ５３４）、更新モジュール１３１に対して、暗号化更新用保護制御モジュール１２１を更新モジュール１３２へ送信するよう依頼する（ステップＳ５３６）。
【０１０９】
更新モジュール１３１は、更新用ソフトウェア配布モジュール２１０からの依頼を受けて（ステップＳ５３７）、暗号化更新用保護制御モジュール１３１を更新モジュール１３２へ送信する（ステップＳ５３８）。
更新モジュール１３２は、更新用ソフトウェア配布モジュール２１０から第２の鍵を受信し（ステップＳ５３５）、更新モジュール１３１から暗号化更新用保護制御モジュール１２１を受信すると（ステップＳ５３９）、第２の鍵を用いて、暗号化更新用保護制御モジュール１２１を復号し、更新用保護制御モジュール１２１を取得する（ステップＳ５４０）。
【０１１０】
更新モジュール１３２は、取得した更新用保護制御モジュール１２１を保護制御モジュール１２０に上書きし、新たな保護制御モジュール１２１に更新する（ステップＳ５４１）。更新が終了すると、更新の終了を他の更新モジュール１３１、１３３へ通知する（ステップＳ５４２）。更新モジュール１３１、１３３は、更新終了通知を受信する（ステップＳ５４３ａ、５４３ｂ）。
【０１１１】
更新モジュール１３１、１３２、１３３はそれぞれ、事前に受信した更新検証証明書を用いて、保護制御モジュール１２１が正しく更新されたかを検証し（ステップＳ５４４）、検証結果を更新用ソフトウェア配布モジュール２１０へ通知する（ステップＳ５４５）。
更新用ソフトウェア配布モジュール２１０は、各更新モジュールから送信された検証結果を受信すると（ステップＳ５４６）、受信した検証結果から保護制御モジュール１２１が正しく更新されたかを判定し（ステップＳ５４７）、正しく更新されていないと判定した場合には（ステップＳ５４７でＮｏ）、機器１００を停止する（ステップＳ５４８）。
【０１１２】
正しく更新されていると判定した場合には（ステップＳ５４７でＹｅｓ）、更新処理の終了を各更新モジュールへ通知する（ステップＳ５４９）。
更新モジュール１３１、１３２、１３３はそれぞれ、更新処理の終了の通知を受けると（ステップＳ５５０）、保護制御モジュール１２１のＭＡＣ値を生成し、ＭＡＣ値テーブルに保護制御モジュール１２１の識別子とＭＡＣ値との組を保存する（ステップＳ５５１）。
【０１１３】
９．６．３．監視処理と更新処理との関係
続いて、監視処理と更新処理との関係について説明する。上述した監視処理と更新処理とは、互いに連携しながら実行される。
監視処理は、更新用ソフトウェア配布モジュール２１０から、更新モジュール群１３０に含まれる更新モジュールを送信先として、複数の鍵が送られる時と、暗号化された更新用保護制御モジュールの更新モジュール群１３０に含まれる更新モジュールでの復号処理中に定期的に実施される。定期的に実施する際の時間間隔は、例えば、更新用保護制御モジュール１２１が通信路を通して完全に外部に出力されるまでの時間より短い間隔である。完全に外部に出力されるまでに１秒かかるのであれば、例えば、それより短い５００ミリ秒間隔のタイミングで監視処理を実行する。
【０１１４】
監視処理と更新処理との連携動作を、図２３を用いて説明する。図２３は、監視処理と更新処理との連携動作の流れを模式的に示す図である。本図において、監視処理及び更新処理に関しては、ポイントとなる処理のみ説明する。
まず、回復処理の開始後、更新サーバ２００から機器１００へ多重暗号化更新用保護制御モジュール１２１が送付される前に、機器１００内部で監視処理（監視１）を実施する。更新処理を開始するにあたって、不正な更新モジュールが機器１００内部に存在しないことを検証するためである。
【０１１５】
その後、更新サーバ２００から機器１００へ第１の鍵が送信され、更新モジュール１３１が第１の鍵を受信する前に、監視処理（監視２）を実施する。機器１００が鍵を受信する時に、不正な更新モジュールが機器１００内部に存在しないことを検証するためである。
さらに、更新モジュール１３１が第１の鍵を受信し、第１の鍵を用いて多重暗号化更新用保護制御モジュール１２１を復号する間、定期的に更新モジュール１３１による復号処理を中断し、監視処理（監視３−１、３−２）を実施する。これにより、復号処理中に、更新モジュール１３１、１３２、１３３の何れかが攻撃されたとしても、暗号化更新用保護制御モジュール１２１が全て漏洩する前に攻撃者による攻撃を検出することができ、暗号化更新用保護制御モジュール１２１の漏洩を防止することが可能となる。
【０１１６】
これ以降の処理は、上記と同様に、更新サーバ２００から機器１００へ送信される第２の鍵を更新モジュール１３２が受信する前に、監視処理（監視４）を実施し、機器１００が鍵を受信する時に、不正な更新モジュールが機器１００内部に存在しないことを検証する。
さらに、更新モジュール１３２が第２の鍵を受信した後、第２の鍵を用いて暗号化更新用保護制御モジュール１２１を復号する間、定期的に更新モジュール１３２による復号処理を中断し、監視処理（監視５−１、５−２）を実施する。これにより、更新用保護制御モジュール１２１が全て漏洩する前に攻撃者による攻撃を検出することができ、更新用保護制御モジュール１２１の漏洩を防止することが可能となる。
【０１１７】
また、上記の各監視処理において、各更新モジュールは改ざん検出結果を更新用ソフトウェア配布モジュール２１０へ通知する。更新用ソフトウェア配布モジュール２１０は、改ざん検出結果に基づいて、何れかの更新モジュールが改ざんされていると判定した場合には、回復処理を停止する。これにより、第１の鍵あるいは第２の鍵の送信前に、攻撃者による攻撃が検出されれば、攻撃者は多重暗号化更新用保護制御モジュール１２１を復号するための鍵を入手することが不可能になる。
【０１１８】
９．６．４．再暗号化処理
続いて、再暗号化処理について説明する。再暗号化処理では、更新用保護制御モジュール１２１が、各更新モジュールが保持している分散情報を取得し、取得した分散情報から、更新前の保護制御モジュール１２０が保持していた暗復号鍵（旧暗復号鍵）を復元する。さらに、新たに暗復号鍵（新暗復号鍵）を生成し、復元した旧暗復号鍵を用いて、暗号化されたアプリ１１０、１１１を復号した後、新暗復号鍵を用いて、アプリ１１０、１１１を再暗号化する。
【０１１９】
以下、再暗号化処理の一例を、フローチャートを用いて詳細に説明する。図２４は、再暗号化処理を示すフローチャートである。本フローチャートにおいて、更新モジュール１３１、１３２、１３３の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
まず、更新された保護制御モジュール１２１が、各更新モジュール１３１、１３２、１３３に対して、それぞれが保持している分散情報と暗復号鍵証明書とを送信するよう依頼する（ステップＳ５６１）。
【０１２０】
更新モジュール群は、保護制御モジュール１２１からの依頼を受信すると（ステップＳ５６２）、保護制御モジュール１２１に分散情報と暗復号鍵証明書とを送信する（ステップＳ５６３）。
保護制御モジュール１２１は、更新モジュール群から分散情報と暗復号鍵証明書とを受信すると（ステップＳ５６４）、受信した分散情報から更新前の保護制御モジュール１２０が使用していた暗復号鍵（旧暗復号鍵）を復元する（ステップＳ５６５）。そして、旧暗復号鍵が正しく復元されたか否かを、暗復号鍵証明書を用いて検証する（ステップＳ５６６）。
【０１２１】
旧暗復号鍵が正しく復元されなかった場合には（ステップＳ５６６でＮｏ）、どの更新モジュールが不正な分散情報を送信したかを特定する（炙り出し）（ステップＳ５６７）。特定した不正な更新モジュールは、更新サーバ２００へ通知される。
ここで、不正な更新モジュールを特定するための方法としては、以下の方法がある。まず、保護制御モジュール１２１は、各更新モジュールから分散情報のペアを取得し、取得した各分散情報に、どの更新モジュールから取得したかを識別するための識別情報をつける。次に、同じ識別子が付された、同一の値となるべき分散情報同士をグループ化し、各グループ中の分散情報同士の値を比較し、同じ値になる分散情報同士をさらにグループ化（サブグループ）する。そして、全てのグループからサブグループを１つずつ選び出す組み合わせの全てに対して、それぞれ旧暗復号鍵を生成し、正しい旧暗復号鍵が生成できたかを検証する。検証した結果、正しい旧暗復号鍵が生成できた場合は、当該組み合わせで選択されているサブグループに検証を通ったことを表す検証通過識別情報を付す。全ての組み合わせで旧暗復号鍵の生成及び検証を行った後、検証通過識別情報が付されているサブグループに含まれる分散情報を取り除く。ここで取り除かれずに残った分散情報が不正な値になっている分散情報である。そして、この分散情報の識別情報から当該分散情報を保持していた更新モジュールを特定する。これにより、識別情報に対応する更新モジュールが不正な分散情報を保持していた不正な更新モジュールであると特定することができる。
【０１２２】
図２４に戻って、旧暗復号鍵が正しく復元された場合には（ステップＳ５６６でＹｅｓ）、保護制御モジュール１２１が暗復号鍵生成部５０６を用いて、新しい暗復号鍵（新暗復号鍵）を生成し（ステップＳ５６８）、旧暗復号鍵を用いて暗号化されたアプリ１１０、１１１を復号した後（ステップＳ５６９）、新暗復号鍵を用いてアプリ１１０、１１１を再暗号化する（ステップＳ５７０）。
【０１２３】
９．７．次ラウンド準備時の動作
続いて、次ラウンド準備処理について説明する。回復処理の終了後、次の回復処理のための準備を行う次ラウンド準備処理を実施する。次ラウンド準備処理では、初期設計時の初期化処理と同様に、分散情報の生成と埋め込みを行う。
図２５は、次ラウンド準備時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール１３１、１３２、１３３の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
【０１２４】
まず、保護制御モジュール１２１が、暗復号鍵（新暗復号鍵）から秘密分散法を用いて分散情報を生成し（ステップＳ６０１）、更に、署名秘密鍵を用いて暗復号鍵証明書を生成する（ステップＳ６０２）。生成した分散情報と暗復号鍵証明書とをそれぞれ、更新モジュール群へ送信する（ステップＳ６０３）。ここで、分散情報は、初期化処理時と同様に、更新モジュールと同数だけ生成され、それぞれの更新モジュール１３１、１３２、１３３には、異なる分散情報のペアが送信される。暗復号鍵証明書については、それぞれの更新モジュール１３１、１３２、１３３へ同じものが送信される。
【０１２５】
更新モジュール群は、保護制御モジュール１２１から分散情報と暗復号鍵証明書とを受信すると（ステップＳ６０４）、受信した分散情報と暗復号鍵証明書とを分散情報保持部３１０に保持する（ステップＳ６０５）。
なお、この時、相互認証時において認証に失敗した不正な更新モジュールや、回復処理内の監視処理において検出した不正な更新モジュール、回復処理内の再暗号化処理において炙り出した不正な更新モジュールに対しては、分散情報を送信しない。
【０１２６】
９．８．無効化時の動作
続いて、無効化処理について説明する。無効化処理は、相互認証時において認証に失敗した更新モジュールが存在した場合や、回復処理内の監視処理において改ざんされた更新モジュールを検出した場合、回復処理内の再暗号化処理において不正な更新モジュールを炙り出した場合等に、機器１００内部に存在する不正な更新モジュールを無効化する処理である。
【０１２７】
上述のように改ざんされた更新モジュールを検出した場合には、不正な動作を防止するためにも、その更新モジュールの機能を停止させる必要があるのは言うまでもないが、その際、当該更新モジュールの機能を停止させる構成として、複数の更新モジュールの各々に予め更新モジュールの無効化機能を持たせておくことが考えられる。しかしながら、複数の更新モジュールの各々に予め更新モジュールの無効化機能を持たせておくと、更新モジュール群に含まれる一の更新モジュールが改ざんされた場合に、当該更新モジュールが正常な更新モジュールを無効化することが可能になる。本実施の形態によれば、更新サーバ２００に選択された更新モジュールのみが改ざんされた更新モジュールを無効化することができるので、改ざんされた更新モジュールによる正常な更新モジュールの無効化を防止することができる。
【０１２８】
以下に、回復処理内の監視処理において更新モジュール１３３の改ざんのみが検出され、更新モジュール１３１、１３２の改ざんは検出されなかった場合の処理を例に挙げ、無効化時の動作の詳細を説明する。図２６は、更新モジュール１３３無効化時のソフトウェア更新システム１０００の動作の流れを示すフローチャートである。
まず、更新用ソフトウェア配布モジュール２１０は、監視処理において更新モジュール１３１、１３２、１３３から受信した改ざん検出結果に基づいて、どの更新モジュールが改ざんされたかを判定する（ステップＳ７０１）。この例では、更新モジュール１３３が改ざんされていると判定し、それ以外の更新モジュールは改ざんされていないと判定する。
【０１２９】
更新用ソフトウェア配布モジュール２１０は、改ざんされていないと判定した更新モジュールの何れか（ここでは更新モジュール１３１）へ、改ざんされた更新モジュール１３３の無効化を依頼する（ステップＳ７０２）。さらに、アクセス情報取得鍵配布モジュール２２０へ、無効化に関する情報を通知する（ステップＳ７０３）。無効化に関する情報は、改ざんされた更新モジュール１３３の情報（更新モジュール識別子）及び無効化を依頼した更新モジュール１３１の情報（更新モジュール識別子）である。
【０１３０】
更新モジュール１３１は、更新用ソフトウェア配布モジュール２１０から更新モジュール１３３の無効化依頼を受信すると（ステップＳ７０４）、アクセス情報取得鍵配布モジュール２２０に対し更新モジュール１３３を無効化するためのアクセス情報取得鍵を送付するよう依頼する（ステップＳ７０５）。さらに、アクセス制御モジュール１４０に対し更新モジュール１３３を無効化するためのアクセス情報を送信するよう依頼する（ステップＳ７０６）。
【０１３１】
アクセス情報取得鍵配布モジュール２２０は、無効化に関する情報を更新用ソフトウェア配布モジュール２１０から受信し（ステップＳ７０７）、アクセス情報取得鍵の送付依頼を更新モジュール１３１から受信すると（ステップＳ７０８）、無効化に関する情報に基づいて、送付依頼が正しい依頼であるか否かを判断する（ステップＳ７０９）。この判断は、更新用ソフトウェア配布モジュール２１０から通知された無効化に関する情報に基づいて、送付依頼をした更新モジュール１３１が更新用ソフトウェア配布モジュール２１０により無効化依頼をされた更新モジュールかどうか、及び送付依頼の対象であるアクセス情報取得鍵が改ざんされた更新モジュール１３３に対応するアクセス情報取得鍵かどうかを判断することにより行われる。
【０１３２】
正しい依頼でないと判断した場合（ステップＳ７０９でＮｏ）、すなわち、改ざんされた更新モジュール１３３からの依頼であったり、あるいは改ざんされていない更新モジュール１３１、１３２に対応するアクセス情報取得鍵の取得依頼であったりする場合には、無効化処理を終了する。
正しい依頼であると判断した場合には（ステップＳ７０９でＹｅｓ）、依頼元の更新モジュール１３１へ、更新モジュール１３３を無効化するためのアクセス情報取得鍵を送付する（ステップＳ７１０）。
【０１３３】
アクセス制御モジュール１４０は、更新モジュール１３１から更新モジュール１３３を無効化するためのアクセス情報取得依頼を受信すると（ステップＳ７１１）、更新モジュール１３３に対応する暗号化アクセス情報を送信する（ステップＳ７１２）。
更新モジュール１３１は、アクセス制御モジュール１４０から暗号化アクセス情報を受信し（ステップＳ７１３）、アクセス情報取得鍵配布モジュール２２０からアクセス情報取得鍵を受信すると（ステップＳ７１４）、受信したアクセス情報取得鍵を用いて暗号化アクセス情報を復号し、アクセス情報を取得する（ステップＳ７１５）。取得したアクセス情報は、更新モジュール１３３を消去するための専用ドライバである。更新モジュール１３１は、そのドライバを利用して、RAM１３上に展開されている、改ざんされた不正な更新モジュール１３３を無効化する（ステップＳ７１６）。
【０１３４】
無効化処理が終了すると、更新モジュール１３１は、アクセス情報取得鍵配布モジュール２２０から取得したアクセス情報取得鍵や、アクセス制御モジュール１４０から取得した暗号化されたアクセス情報、復号後のアクセス情報等を消去する。
以上のように本実施の形態によれば、回復処理において、更新モジュール群内の複数の更新モジュールが監視処理を行うので、改ざんされた更新モジュールを検出することが可能となり、ソフトウェア更新システムの信頼性を高めることができる。
【０１３５】
また、改ざんされた更新モジュールを無効化するので、改ざんされた更新モジュールによる不正動作を防止することができる。
（実施の形態２）
実施の形態２では、保護制御モジュール１２０が、復号ロード機能や改ざん検出機能、解析ツール検出機能等の機能を制御し、アプリ１１０、１１１を攻撃者による攻撃から保護するだけではなく、更新モジュール１３１、１３２、１３３を攻撃者による攻撃から保護する。これにより、更新モジュール１３１、１３２、１３３が一方的に保護制御モジュール１２０の改ざんを検出するだけでなく、更新モジュール１３１、１３２、１３３と保護制御モジュール１２０とが相互に監視し合う構成とすることができる。
【０１３６】
実施の形態２における検知時の動作としては、保護制御モジュール１２０がそれぞれの更新モジュールが改ざんされていないかどうかを、改ざん検出用証明書を用いて検証する。更新モジュール１３１、１３２、１３３のうち何れかの更新モジュールの改ざんを検出した場合には、その旨を更新用ソフトウェア配布モジュール２１０へ通知する。
改ざんを検出しなかった場合には、更新用ソフトウェア配布モジュール２１０への通知は行わない。
【０１３７】
保護制御モジュール１２０から更新用ソフトウェア配布モジュール２１０へ、更新モジュール１３１、１３２、１３３の改ざんを検出した旨の通知があった場合には、更新用ソフトウェア配布モジュール２１０は、保護制御モジュール１２０が改ざんされていないかを確認するために、更新モジュール１３１、１３２、１３３へ保護制御モジュール１２０の改ざん検出を依頼する。
【０１３８】
更新用ソフトウェア配布モジュール２１０から依頼を受けた更新モジュール１３１、１３２、１３３は、保護制御モジュール１２０の改ざん検出を実施し、改ざん検出結果を更新用ソフトウェア配布モジュール２１０へ通知する。この時、保護制御モジュール１２０が改ざんされていた場合でも、他の更新モジュールへは通知しない。
以降の処理は、本発明の実施の形態１における検知処理において、更新モジュール１３１、１３２、１３３から更新用ソフトウェア配布モジュール２１０へ、保護制御モジュール１２０の改ざんを検出した旨の通知があった場合の処理と同様であるので、ここでは省略する。
【０１３９】
以上のように本実施の形態によれば、検知処理において、更新モジュール１３１、１３２、１３３と保護制御モジュール１２０とが相互に監視し合い、更新モジュールが改ざんされている場合には、保護制御モジュール１２０もそれを検出することが可能となるので、ソフトウェア更新システムの信頼性を高めることができる。
（実施の形態３）
実施の形態３では、各更新モジュールに保護制御モジュール１２０を更新するための機能を予め持たせるのではなく、保護制御モジュール１２０の改ざんを検出し、保護制御モジュール１２０を更新する必要が生じた時に、保護制御モジュール１２０を更新するためのアクセス情報を取得することにより、保護制御モジュール１２０を更新する機能を更新モジュールに付加する。
【０１４０】
そこで、本実施の形態におけるアクセス情報取得鍵配布モジュール２２０は、各更新モジュールのアクセス情報取得鍵に加え、保護制御モジュール１２０を更新するためのアクセス情報取得鍵を保持している。
また、本実施の形態におけるアクセス情報モジュール１４０は、各更新モジュールのアクセス情報に加え、保護制御モジュール１２０を更新するための暗号化アクセス情報を保持している。
【０１４１】
図２０〜２２を用いて、保護制御モジュール１２０を更新する機能を更新モジュールに付加する処理を説明する。以降の説明において、実施の形態１と同じ処理については同じ符号を用いる。
更新処理（ステップＳ５０２）において、更新用ソフトウェア配布モジュール２１０が更新用保護制御モジュール１２１を複数の鍵を用いて多重に暗号化し、多重暗号化更新用保護制御モジュールと第１の鍵とを、更新モジュール群に含まれる更新モジュール１３１を送信先として送信する（ステップＳ５２１からＳ５２８）。
【０１４２】
更新モジュール群に含まれる更新モジュールは、更新用ソフトウェア配布モジュール２１０から第２の鍵を受信し、多重暗号化された更新用保護制御モジュールを復号し、更新用保護制御モジュールを取得する（ステップＳ５２９からＳ５４０）。
更新用保護制御モジュールを取得後、更新モジュール１３２は、保護制御モジュール１２０を更新用保護制御モジュール１２１へ更新するために、アクセス情報取得鍵配布モジュール２２０に対し保護制御モジュール１２０を更新するためのアクセス情報取得鍵を送付するよう依頼する。さらに、アクセス制御モジュール１４０に対し保護制御モジュール１２０を更新するためのアクセス情報を送信するよう依頼する。
【０１４３】
アクセス情報取得鍵配布モジュール２２０は、アクセス情報取得鍵の送付依頼を受けると、依頼元の更新モジュールが保護制御モジュール１２０を更新する更新モジュールであるかどうかを、更新用ソフトウェア配布モジュール２１０に問い合わせ、保護制御モジュール１２０を更新する更新モジュールであった場合には、依頼元の更新モジュール１３２へ、保護制御モジュール１２０を更新するためのアクセス情報取得鍵を送付する。
【０１４４】
アクセス情報モジュール１４０は、更新モジュール１３２からアクセス情報の送信依頼を受け付けると、保護制御モジュール１２０に対応する暗号化アクセス情報を更新モジュール１３２に送信する。
更新モジュール１３２は、アクセス情報取得鍵配布モジュール２２０からアクセス情報取得鍵を受信し、アクセス制御モジュール１４０から暗号化アクセス情報を受信すると、受信したアクセス情報取得鍵を用いて、暗号化アクセス情報を復号し、アクセス情報を取得する。取得したアクセス情報は、保護制御モジュール１２０を更新するための専用ドライバである。更新モジュール１３２は、そのドライバを利用して、保護制御モジュール１２０を更新用保護制御モジュール１２１へ更新する（ステップＳ５４１）。そして、更新の終了を他の更新モジュールへ通知する（ステップＳ５４２）。
【０１４５】
更新モジュール群１３０に含まれる各更新モジュールは、保護制御モジュール１２０が更新用保護制御モジュール１２１へ正しく更新されたか検証し、正しく更新されている場合には、保護制御モジュール１２１のＭＡＣ値を生成する（ステップＳ５４３からＳ５５１）。
（その他の変形例）
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【０１４６】
（１）上記実施の形態では、保護制御モジュール１２０を更新するとしたが、これに限定するものではなく、更新モジュールやアプリ等、保護制御モジュール１２０以外のモジュールを更新するとしてもよい。以下に、更新モジュール１３３を更新する場合を例に挙げ、更新モジュールの更新処理を説明する。
更新モジュールの更新処理では、保護制御モジュールを更新する場合と同様に、更新用ソフトウェア配布モジュール２１０が更新用更新モジュール１３３を複数の鍵を用いて多重に暗号化し、更新モジュール群１３０に含まれる更新モジュール（更新モジュール１３３を除く）を送信先として送信する。更新モジュール群１３０に含まれる更新モジュールは、更新モジュール１３３を更新用更新モジュール１３３に更新する。この時、多重に暗号化された更新用更新モジュール１３３を復号するための複数の鍵を、更新モジュール群１３０に含まれる更新モジュールへ送信するタイミングを更新用ソフトウェア配布モジュール２１０が制御することで、攻撃者が暗号化されていない更新用更新モジュール１３３を入手することを不可能にする。
【０１４７】
図２８〜３０は、更新モジュールの更新処理の一例を示すフローチャートである。ここでは、上述したように更新モジュール１３３を更新するものとする。
図２８〜３０は、基本的には、図２０〜２２と同様である。異なる点は、更新対象となる更新モジュール１３３には、更新検証証明書や、復号終了通知、更新終了通知が送信されないことである。
【０１４８】
また、更新モジュールを無効化するとしたが、これに限定するものではなく、保護制御モジュール１２０やアプリ等、更新モジュール以外のモジュールを無効化するとしてもよい。アプリ１００、１１０は、上述した機能以外の機能を提供するソフトウェアであってもよい。
また、一つでも更新モジュールが改ざんされている場合には、改ざんされていない更新モジュールが全ての更新モジュール及び保護制御モジュールを更新あるいは無効化するとしてもよい。
【０１４９】
（２）上記実施の形態では、更新モジュール１３１、１３２、１３３は、監視制御部３０１、改ざんチェック実行部３０２、更新制御部３０３、復号部３０４、認証部３０５、署名公開鍵保持部３０６、検証鍵保持部３０７、認証鍵対保持部３０８、MAC値保持部３０９、分散情報保持部３１０、アクセス情報取得部３１１、及び無効化処理部３１２を含んで構成されるとしたが、これに限定するものではなく、監視処理に必要な構成要素（監視制御部３０１、改ざんチェック実行部３０２、署名公開鍵保持部３０６）のみで構成されるとしてもよいし、更新処理に必要な構成要素（更新制御部３０３、復号部３０４、認証部３０５、署名公開鍵保持部３０６、認証鍵対保持部３０８）のみで構成されるとしてもよいし、無効化処理に必要な構成要素（アクセス情報取得部３１１、無効化処理部３１２）のみで構成されるとしてもよいし、さらに、上記の組み合わせから構成されるとしてもよい。この時、更新モジュール群１３０に含まれる更新モジュール全体として、監視処理と更新処理に必要な構成要素を含むよう構成されていればよい。
【０１５０】
（３）上記実施の形態では、更新モジュール１３１、１３２、１３３において監視制御部３０３が他の更新モジュールを改ざん検出するタイミング、及び改ざん検出対象となる更新モジュールの選択処理を制御するとした。すなわち、各更新モジュールの監視制御部３０３が独立に監視に関する制御を行うとしたが、これに限定するものではなく、１つの更新モジュールの監視制御部３０３が監視処理全体を制御するとしてもよいし、監視制御部３０３が更新サーバ２００からの指示に基づいて、改ざん検出タイミングや改ざん検出対象となる更新モジュールの選択を制御するとしてもよい。
【０１５１】
（４）上記実施の形態では、更新モジュール１３１、１３２、１３３において改ざんチェック実行部３０２により他の更新モジュールや保護制御モジュール１２０の改ざんチェックを実行するとしたが、改ざんチェック対象はモジュール全体に限定するものではなく、モジュール内の一部、例えば、特定の機能や関数、鍵等のデータであってもよい。
また、一度に改ざん対象全てを改ざんチェックするのではなく、改ざん対象の一部を改ざんチェックするだけでもよい。この時、改ざん対象を一定のサイズに分割した部分毎に改ざんチェックしてもよいし、機能や関数単位で分割した部分毎に改ざんチェックしてもよい。さらに、改ざん対象の一部を、改ざんチェックの度に順番に改ざんチェックするとしてもよいし、改ざんチェックする部分を改ざんチェックの度にランダムに決定してもよし、どの部分を改ざんチェックするかが他のモジュールや機器１００外部などから与えられるとしてもよい。
【０１５２】
（５）上記実施の形態では、更新モジュール１３１、１３２、１３３や保護制御モジュール１２０は、耐タンパ化された領域等、攻撃者による攻撃から保護されている領域で動作するとしてもよい。監視処理に必要な構成要素のみで構成される更新モジュールが、攻撃者による攻撃から保護されている領域で動作する場合、他の更新モジュールや更新用ソフトウェア配布モジュール２１０、アクセス情報取得鍵配布モジュール２２０は、その保護された領域にある更新モジュールから、他の更新モジュールや保護制御モジュール１２０が攻撃されたことを検知した旨の通知を受けたときに、その通知を無条件に受け入れ、更新処理や無効化処理を実施してもよいし、その通知を他のモジュールからの通知よりも重要な通知として扱い、更新処理や無効化処理の判断を行ってもよい。
【０１５３】
また、保護制御モジュールが保護モード（耐タンパ化された領域等）で、更新モジュールが通常モード（耐タンパ化されていない領域等）で動作するとしてもよい。これにより、保護モードで動作する保護制御モジュールが信頼できなくなったときにもそれを検知し、更新できる。
（６）上記実施の形態では、アクセス情報取得鍵配布モジュール２２０は、更新サーバ２００にあり、アクセス制御モジュール１４０は、機器１００にあるとしたが、これに限定するものではなく、アクセス情報取得鍵配布モジュール２２０とアクセス制御モジュール１４０とはそれぞれ、機器１００にあってもよいし、更新サーバ２００にあってもよいし、各更新モジュール内にあってもよい。
【０１５４】
また、アクセス情報取得鍵配布モジュール２２０とアクセス制御モジュール１４０とは、別々のモジュールではなく１つのモジュールであってもよい。アクセス情報取得鍵配布モジュール２２０とアクセス制御モジュール１４０とが１つのモジュールである場合には、更新モジュールへアクセス情報取得鍵と暗号化アクセス情報とを送信するのではなく、アクセス情報を直接送信してもよい。
【０１５５】
さらに、アクセス情報取得鍵配布モジュール２２０やアクセス制御モジュール１４０が機器１００内にあるときには、耐タンパ化などにより攻撃から保護される領域にあるとしてもよい。
（７）上記実施の形態では、更新サーバ２００は、更新用ソフトウェア配布モジュール２１０とアクセス情報取得鍵配布モジュール２２０とから構成されるとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール２１０とアクセス情報取得鍵配布モジュール２２０とは、１つのモジュールであってもよいし、どちらか１つのモジュールのみで構成されてもよい。
【０１５６】
（８）上記実施の形態では、ソフトウェア更新システム１０００は、機器１００の工場製造時に初期設計処理を行うとしたが、これに限定するものではなく、販売後など工場出荷後のどこかで初期化処理を実施してもよい。また、初期化処理は１度だけでなく、２度以上実施してもよい。
（９）上記実施の形態では、初期設計時の動作として、改ざん検出用証明書及び認証鍵証明書は、更新用ソフトウェア配布モジュール２１０が保持する署名秘密鍵を用いて生成された証明書であるとしたが、これに限定するものではなく、それぞれ別の鍵を用いて生成されてもよいし、更新用ソフトウェア配布モジュール２１０以外の証明書発行装置により発行された証明書でもよい。
【０１５７】
（１０）上記実施の形態では、初期設計時や次ラウンド準備時の動作として、暗復号鍵から生成する分散情報を更新モジュール１３１、１３２、１３３へ送信し、更新モジュール１３１、１３２、１３３が分散情報を保持するとしたが、これに限定するものではなく、更新モジュールの代わりにアプリが保持するとしてもよいし、更新モジュール１３１、１３２、１３３とアプリとが保持するとしてもよい。
【０１５８】
（１１）上記実施の形態では、検知時の動作として、更新モジュール１３１、１３２、１３３が保護制御モジュール１２０の改ざん検出を行うときに、検証鍵を使用して計算したＭＡＣ値を用いて改ざん検出処理を行うとしたが、これに限定するものではなく、保護制御モジュール１２０の改ざん検出用証明書を用いて検証するとしてもよい。また、MAC値や証明書のようにハッシュ値を利用した改ざん検証を行うのではなく、ログをチェックすることで改ざん検証を行うとしてもよい。
【０１５９】
（１２）上記実施の形態では、検知時の動作として、更新モジュール１３１、１３２、１３３が保護制御モジュール１２０の改ざんを検出した場合、更新用ソフトウェア配布モジュール２１０と他の更新モジュールへ通知するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール２１０と他の更新モジュールのうち、どれか１つ以上のモジュールに通知するとしてもよい。
【０１６０】
また、保護制御モジュール１２０の改ざんを検出した場合、更新モジュールを停止するとしてもよいし、機器１００や保護制御モジュール１２０を停止するとしてもよい。更に、改ざんされた保護制御モジュールを消去するとしてもよい。さらに、更新モジュール１３１、１３２、１３３が保護制御モジュール１２０の改ざんを検出しなかった場合、更新用ソフトウェア配布モジュール２１０へ通知を行わないとしたが、これに限定するものではなく、改ざん検出処理を実施した結果として、改ざんを検出しなかった旨を通知するとしてもよい。
【０１６１】
（１３）上記実施の形態では、検知時の動作として、更新モジュール１３１、１３２、１３３は、他の更新モジュールに保護制御モジュールの改ざん検出結果を送信しないとしたが、それぞれの更新モジュールで検出結果を共有するとしてもよい。また、検出結果を共有しない更新モジュールがあった場合に、当該更新モジュールを不正な更新モジュールと判断して、無効化するとしてもよい。
【０１６２】
（１４）上記実施の形態では、解析・判断時の動作として、改ざん情報に基づいて保護制御モジュール１２０を更新するかどうか判定するとしたが、これに限定するものではなく、改ざんされていると通知してきた更新モジュールの数によって更新するかどうかを判定してもよい。また、解析・判断時の動作として、保護制御モジュール１２０を更新するか否か、及び保護制御モジュール１２０を無効化するか否かを判断したが、これに限定するものではなく、機器１００を停止するか否かを判断するとしてもよい。
【０１６３】
（１５）上記実施の形態では、相互認証時の動作として、更新モジュール１３１、１３２、１３３が、更新用ソフトウェア配布モジュール２１０を認証し、その後、更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証し、その後、更新モジュール１３１、１３２、１３３が、更新用ソフトウェア配布モジュール２１０を認証してもよいし、それぞれの更新モジュール１３１、１３２、１３３と更新用ソフトウェア配布モジュール２１０とが個別に認証処理を行ってもよい。
【０１６４】
（１６）上記実施の形態では、相互認証時の動作として、更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証する処理において、チャレンジデータをそれぞれの更新モジュールで異なる値にするとしたが、これに限定するものではなく、チャレンジデータとして全ての更新モジュールで同じ値としてもよいし、更新モジュール１３１、１３２、１３３を複数のグルーブに分け、それぞれのグループで異なる値にしてもよい。
【０１６５】
（１７）上記実施の形態では、相互認証時の動作として、それぞれの更新モジュール１３１、１３２、１３３が、更新用ソフトウェア配布モジュール２１０を認証する処理において、それぞれの更新モジュール１３１、１３２、１３３が個別に更新用ソフトウェア配布モジュール２１０を認証するとしたが、これに限定するものではなく、署名検証した結果を他の更新モジュールへ通知し、更新モジュール間で検証結果を共有し、自更新モジュールの認証結果と他の更新モジュールから受信した認証結果とから、更新用ソフトウェア配布モジュール２１０が正当なモジュールかどうかをそれぞれ判定してもよい。
【０１６６】
判定方法としては、例えば、一定数（例えば、過半数等）の更新モジュールが認証に成功した場合には正当なモジュールであると判定し、そうでない場合には、正当なモジュールではないと判定する方法がある。
（１８）上記実施の形態では、相互認証時の動作として、更新サーバ２００は署名秘密鍵と署名公開鍵とを使用して相互認証処理を実施するとしたが、これに限定するものではなく、署名秘密鍵と署名公開鍵とは別に、相互認証に使用する認証鍵対を用いるとしてもよい。この時、更新サーバ２００の認証鍵対のうちの認証公開鍵は、予め更新モジュール１３１、１３２、１３３で保持するとしてもよいし、相互認証処理時に更新サーバ２００から更新モジュール１３１、１３２、１３３へ送信するとしてもよい。
【０１６７】
（１９）上記実施の形態では、相互認証時の動作として、正当なモジュールであると検証できた更新モジュールが、回復処理に必要な数以上あるかどうかで、その後の回復処理を実施するかどうか判定したが、これに限定するものではなく、不正な更新モジュールの数が、予め設定されている許容数未満かどうかで回復処理を実施するかどうか判定してもよい。また、相互認証処理において、回復処理に必要な数に満たないと判定した場合には、機器を停止するとしたが、更新モジュールを無効化してもよい。
【０１６８】
（２０）本発明の実施の形態１では、相互認証時の動作として、更新用ソフトウェア配布モジュール２１０がそれぞれの更新モジュール１３１、１３２、１３３を認証する時に、更新モジュール１３１、１３２、１３３は、レスポンスデータと一緒に認証公開鍵と認証鍵証明書とを更新用ソフトウェア配布モジュール２１０へ送信するとしたが、これに限定するものではなく、それぞれ別のタイミングで送信してもよい。
【０１６９】
また、認証公開鍵や認証鍵証明書は、更新用ソフトウェア配布モジュール２１０から要求があったときにのみそれぞれ送信するとしてもよい。この時、更新用ソフトウェア配布モジュール２１０は、全ての更新モジュールの認証公開鍵や認証鍵証明書を受信してもよいし、予め設定されている、回復処理に必要な数以上、或いは予め設定されている、不正な更新モジュールの許容数未満の更新モジュールの認証公開鍵と認証鍵証明書とを受信してもよい。
【０１７０】
（２１）本発明の実施の形態１では、回復時の動作として、監視処理時を、１回の復号中（監視３−１、３−２、５−１、５−２）に２回実施するとしたが、これに限定するものではなく、復号処理の時間にあわせて何回監視処理を行ってもよいし、復号処理以外であっても、鍵や更新用保護制御モジュールの受信処理時や検知処理時、相互認証時に監視処理を行ってもよい。また、監視処理を一定時間間隔で定期的に実施するとしたが、これに限定するものではなく、更新処理を複数のブロックに分割し、その処理ブロックの処理が終わるごとに実施してもよいし、ランダムな時間間隔で実施してもよいし、更新サーバ２００から指定された時間間隔で実施してもよい。
【０１７１】
また、各更新モジュールは、監視処理を実行するタイミングを示す同期情報を外部のサーバから取得し、取得した同期情報にしたがって監視処理を実行するとしてもよい。これにより、各更新モジュールは、他の更新モジュールと同じタイミングで監視処理を実行することができるので、不正な更新モジュールの検出精度を向上させることができる。
さらに、通常時と回復処理時とにおける検知頻度を変更するとしてもよい。例えば、通常時より回復処理時の検知頻度を高くすることにより、回復処理中の保護制御モジュールの保護に万全を期すことができる。検知頻度の変更は、回復処理中であってもよい。
【０１７２】
（２２）本発明の実施の形態１では、回復時の動作として、監視処理のパターンは、更新モジュール１３１が更新モジュール１３２の改ざん検出を行い、更新モジュール１３２が更新モジュール１３３の改ざん検出を行い、更新モジュール１３３が更新モジュール１３１の改ざん検出を行うものであったが、これに限定するものではなく、例えば、更新モジュール１３１が更新モジュール１３３の改ざん検出を行い、更新モジュール１３２が更新モジュール１３１の改ざん検出を行い、更新モジュール１３３が更新モジュール１３２の改ざん検出を行うなど、予め決められたパターンで改ざん検出するとしてもよいし、どの更新モジュールの改ざん検出を行うかをランダムに決定してもよいし、他のモジュールや機器１００外部から与えられるとしてもよい。
【０１７３】
また、各更新モジュールは、当該更新モジュール（自更新モジュール）が改ざんされていないかを検証するとしてもよい。さらに、自更新モジュールの改ざんを検出すると、自更新モジュール自身を無効化するとしてもよい。更に、全ての更新モジュールが他の更新モジュールから監視される必要はなく、他の更新モジュールから監視されない更新モジュールがあってもよいし、複数の更新モジュールから監視されてもよい。
【０１７４】
また、監視処理のパターンを変更する場合は、改ざん検出の処理毎など、一定の間隔で変更するとしてもよいし、ランダムなタイミングで変更するとしてもよいし、他のモジュールや機器１００外部から与えられたタイミングで変更するとしてもよい。また、複数の更新モジュールは、改ざん検出の結果を、更新サーバにより指定される順序で、更新サーバに送信してもよい。
【０１７５】
（２３）本発明の実施の形態１では、回復時の動作として、監視処理時に、更新モジュール１３１が更新モジュール１３２の改ざん検出を行い、更新モジュール１３２が更新モジュール１３３の改ざん検出を行い、更新モジュール１３３が更新モジュール１３１の改ざん検出を行うというように、全ての更新モジュールが監視処理を行うとしたが、これに限定するものではなく、一つの更新モジュールが更新処理を実施し、他の更新モジュールが監視処理を実施してもよい。
【０１７６】
この時の監視パターンとしては、更新処理を行っている更新モジュールを、１つの更新モジュールが監視してもよいし、複数または全ての更新モジュールが監視してもよい。例えば、更新モジュール１３１が更新モジュール１３２の改ざん検出を行い、更新モジュール１３２が更新モジュール１３３の改ざん検出を行い、更新モジュール１３３が更新処理を行う。これにより、更新処理を中断することなく監視処理も実施できる。
【０１７７】
また、上記実施の形態では、更新モジュール１３１が更新モジュール１３２の改ざん検出を行い、更新モジュール１３２が更新モジュール１３３の改ざん検出を行い、更新モジュール１３３が更新モジュール１３１の改ざん検出を行うというように、監視構成としてループ方式を用いたが、複数の更新モジュールの各々が相互に監視し合う構成としてもよいし、それらを組み合わせてもよい。複数の更新モジュールの各々が相互に監視し合う構成とすることにより、改ざん検証精度をさらに高めることができる。
【０１７８】
（２４）本発明の実施の形態１では、回復時の動作として、更新モジュール１３２は、取得した更新用保護制御モジュール１２１を保護制御モジュール１２０に上書きし、保護制御モジュール１２０を更新するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール２１０から保護制御モジュール１２０と更新用保護制御モジュール１２１との差分を取得し、差分のみを更新するとしてもよいし、更新用保護制御モジュール１２１を保護制御モジュール１２０とは別の領域へ書き込み、保護制御モジュール１２０に代わって、更新用保護制御モジュール１２１が実行されるようにしてもよい。
【０１７９】
（２５）本発明の実施の形態１では、回復時の動作として、監視処理により、更新モジュール１３１、１３２、１３３の改ざんが検出された場合、改ざん検出の通知を受けた更新用ソフトウェア配布モジュール２１０は、直ちに回復処理を停止するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール２１０から更新モジュールへ、鍵などのデータを次に送信するタイミングで回復処理を停止するとしてもよい。
【０１８０】
また、回復処理を停止するのではなく、改ざんされた更新モジュールを使用せずに、正常な更新モジュールを用いて回復処理を行うとしてもよいし、改ざんされた更新モジュールを無効化あるいは更新するとしてもよい。この時、無効化や更新などの処理を行うタイミングとしては、直ちに処理してもよいし、次に鍵が送付されるタイミングで処理してもよいし、改ざんされた更新モジュールを使用せずに回復処理を再開するときに処理してもよい。改ざんされた更新モジュールを無効化あるいは更新する処理を担う更新モジュールを更新サーバが指定するとしてもよい。
【０１８１】
また、監視処理により改ざんが検出された場合だけでなく、検知処理時に保護制御モジュール１２０によって改ざんが検出された更新モジュールや、相互認証処理時に認証に失敗した更新モジュールについても同様に、当該更新モジュールを使用せずに回復処理を行うとしてもよいし、改ざんされた更新モジュールを無効化するとしてもよいし、更新するとしてもよい。さらに、改ざんされた更新モジュールが存在する場合には、保護制御モジュールの更新を行わないとしてもよい。
【０１８２】
（２６）本発明の実施の形態１では、回復時の動作として、更新処理において復号に使用する更新モジュールを、更新用ソフトウェア配布モジュール２１０が更新モジュール群１３０から一つ選択するとしたが、その選択方法は、予め決められた更新モジュールを選択するとしてもよいし、ランダムに決定するとしてもよいし、機器１００から通知された情報を元に決定するとしてもよいし、相互認証時に認証した順番に応じて選択するとしてもよい。
【０１８３】
（２７）本発明の実施の形態１では、回復時の動作として、更新処理において更新用ソフトウェア配布モジュール２１０が更新用保護制御モジュール１２１を複数の鍵を用いて多重に暗号化するとしたが、これに限定するものではなく、更新用保護制御モジュール１２１を複数の部分に分割した分割モジュールを生成し、分割モジュールそれぞれを個別に暗号化し、更新モジュールと一対一に対応する形態で、更新モジュールへ送信するとしてもよい。
【０１８４】
この場合、更新処理としては、暗号化した分割モジュールと暗号に使用した鍵を送信するときに、それらを１度に全て送信するのではなく、１つの暗号化した分割モジュールの復号処理が終了するまで、他の暗号化した分割モジュールと鍵を送信しないように、更新モジュールへの送信を制御する。
別の方法として、暗号化した分割モジュールは１度に更新モジュールへ送信し、それらを復号するための鍵の送信のタイミングのみを制御するとしてもよいし、鍵は１度に更新モジュールへ送信し、暗号化した分割モジュールの送信のタイミングのみを制御するとしてもよいし、全ての鍵と暗号化した分割モジュールを１度に送信するとしてもよい。また、分割モジュールは、１つの鍵で暗号化されるのではなく、複数の鍵を用いて多重に暗号化されてもよい。
【０１８５】
この場合、鍵や多重暗号化した分割モジュールの送信制御は、更新用保護制御モジュール１２１を複数の鍵を用いて多重に暗号化した時と同様である。更に、暗号化した分割モジュールとそれを復号する鍵は、１つの更新モジュールへ送信してもよいし、それぞれ別の更新モジュールへ送信し、機器１００内部で更新モジュール同士が協調動作するとしてもよい。その際、分割モジュールを受信する前後で監視処理を実施してもよい。
【０１８６】
また、監視処理により、改ざんされた不正な更新モジュールが検出された場合、次の分割モジュールを送信するタイミングで更新処理を停止してもよい。さらに、複数の更新モジュールは、改ざんされた更新モジュールが存在する場合には、それを更新サーバに通知し、更新サーバは、改ざんされた更新モジュールには復号鍵を送信しないとしてもよい。分割モジュールはそれぞれ異なる暗号鍵で暗号化されていてもよい。
【０１８７】
（２８）本発明の実施の形態１では、回復時の動作として、暗復号鍵（旧暗復号鍵）で暗号化されたアプリ１１０、１１１を新しい暗復号鍵（新暗復号鍵）を用いて再暗号化するとしたが、これに限定するものではなく、再暗号化処理を行わなくてもよい。この時、新暗復号鍵を生成せずに旧暗復号鍵を使い続けるとしてもよいし、旧暗復号鍵と新暗復号鍵を保持しておき、アプリによって使用する鍵を変える構成にしてもよいし、旧暗復号鍵が必要になったときには分散情報から再び生成するとしてもよい。旧暗復号鍵を使用し続ける場合は、保護制御モジュール１２０が更新される度に旧暗復号鍵が増えることになる。また、各更新モジュールで新暗復号鍵と旧暗復号鍵の分散情報を保持しておく必要がある。
【０１８８】
（２９）本発明の実施の形態１において、保護制御モジュール１２１が正しく更新されなかった場合に機器１００を停止するとしたが、これに限定するものではなく、再度、相互認証処理及び回復処理を実施するとしても良い。
（３０）本発明の実施の形態１において、無効化時の動作として、アクセス情報は、更新モジュールを消去するための専用ドライバであるとしたが、これに限定するものではなく、更新モジュールを消去するための専用プログラムであってもよいし、更新モジュールを消去するための手順が記された手順書であってもよいし、消去する更新モジュールのアドレスであってもよいし、更新モジュールを消去するプログラムのアドレスであってもよいし、更新モジュールを消去するための機能を動作させるためのレジスタやメモリのアドレスやレジスタやメモリに設定する値であってもよい。
【０１８９】
また、アクセス情報は、コード部分を消去する旨が記述された情報であってもよい。この場合、コード位置はヘッダに格納されており、ヘッダを参照して消去すべきコード部分を判断するとしてもよい。さらに、アクセス制御モジュール自体が暗号鍵で暗号化されているとしてもよい。その場合には、改ざんされていない更新モジュールは、更新サーバから、アクセス制御モジュールを暗号化した暗号鍵に対応する復号鍵を取得し、取得した復号鍵を用いてアクセス制御モジュールを復号し、改ざんされた更新モジュールに対応するアクセス情報をアクセス制御モジュールから取得し、取得したアクセス情報に基づいて、改ざんされた更新モジュールを無効化するとしてもよい。
【０１９０】
（３１）本発明の実施の形態１において、無効化時の動作として、改ざんされた更新モジュール全体を消去するとしたが、これに限定するものではなく、改ざんされた不正な更新モジュールの一部、例えば、他のモジュールを読み込むための読み込み機能など特定の機能や関数、鍵や他のモジュールをアクセスするための情報（チケット、トークン、ソケット）などのデータを消去するとしてもよいし、他のプログラムからアクセスできなくしてもよいし、不活性化してもよいし、更新してもよい。
【０１９１】
また、改ざんされた更新モジュールを無効化した後、無効化処理を行った更新モジュールは、アクセス制御モジュールに格納されている、無効化した更新モジュールに対応するアクセス情報を消去するとしてもよい。
（３２）本発明の実施の形態１において、改ざんされた不正な更新モジュールを無効化するとしたが、これに限定するものではなく、改ざんされた不正な更新モジュールを無効化しないとしてもよい。この時、どのくらいの部分が改ざんされているか、どの部分が改ざんされたか等によって、無効化するかどうかを判断してもよいし、改ざんされた不正な更新モジュールの数によって無効化する更新モジュール数を決めてもよい。
【０１９２】
（３３）本発明の実施の形態２では、保護制御モジュール１２０が更新モジュール１３１、１３２、１３３の改ざん検出を行うときに、各更新モジュールの改ざん検出用証明書を検証するとしたが、これに限定するものではなく、更新モジュール１３１、１３２、１３３と同様に、検証鍵を使用して計算したＭＡＣ値を用いる改ざん検出を行うとしてもよい。
【０１９３】
この場合、保護制御モジュール１２０には、検証鍵が埋め込まれ、初期設計時に、改ざん検出用証明書の検証が実施される。問題なかった場合には、保護制御モジュール１２０が、それぞれの更新モジュールに対して検証鍵を使用してＭＡＣ値を生成し、ＭＡＣ値テーブルとして保持する処理を追加する必要がある。
（３４）本発明の実施の形態２では、保護制御モジュール１２０が、更新モジュール１３１、１３２、１３３の改ざんを検出しなかった場合には、更新用ソフトウェア配布モジュール２１０へ通知を行わないとしたが、これに限定するものではなく、改ざんを検出しなかった旨を更新用ソフトウェア配布モジュール２１０へ通知してもよい。
【０１９４】
（３５）本発明の実施の形態２では、保護制御モジュール１２０から更新用ソフトウェア配布モジュール２１０へ、更新モジュール１３１、１３２、１３３の改ざんを検出した旨の通知があった場合、更新用ソフトウェア配布モジュール２１０は、保護制御モジュール１２０が改ざんされていないかを確認するために、更新モジュール１３１、１３２、１３３へ保護制御モジュール１２０の改ざん検出を依頼するとしたが、これに限定するものではなく、保護制御モジュール１２０から更新用ソフトウェア配布モジュール２１０へ、更新モジュール１３１、１３２、１３３の改ざんを検出した旨の通知があった場合、検出された更新モジュールが改ざんされていると判断し、当該更新モジュールを相互認証処理や回復処理に使用しないとしてもよいし、保護制御モジュール１２０が無効化処理を実施するとしてもよい。この時、保護制御モジュール１２０は、耐タンパー化された領域で動作するなど、攻撃から保護されていることが望ましい。
【０１９５】
（３６）本発明の実施の形態３では、アクセス情報取得鍵の送付依頼をした更新モジュールが、保護制御モジュール１２０を更新する更新モジュールであるかどうかを、更新用ソフトウェア配布モジュール２１０に問い合わせたが、これに限定するものではなく、更新サーバ２００が保護制御モジュール１２０を更新する更新モジュールであるかどうかを確認してもよい。
【０１９６】
（３７）上記の各モジュールは、具体的には、それぞれ個別のコンピュータプログラムであってもよいし、オペレーティングシステムに組み込まれるモジュールであってもよいし、オペレーティングシステムから呼ばれるドライバであってもよいし、アプリケーションプログラムであってもよい。
（３８）上記の各装置を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。
【０１９７】
また、上記の各装置を構成する構成要素の各部は、個別に１チップ化されていても良いし、一部又は全てを含むように１チップ化されてもよい。
また、ここでは、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、ＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
【０１９８】
（３９）上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
【０１９９】
（４０）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
【０２００】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、前記コンピュータプログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記コンピュータプログラムまたは前記デジタル信号を、前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
【０２０１】
（４１）上記実施の形態では、更新モジュールの数を３として説明したが、これに限定されるものでなく、更新モジュールは、複数あればよい。
（４２）上記実施の形態では、アクセス制御モジュール１４０及び更新モジュール群１３０は、OS１５０の中に組み込まれているとしたが、更新モジュールがOSを更新する機能を備えている場合等には、更新モジュールは、OSの管理外にプログラムとして格納されているとしてもよい。また、保護制御モジュールがOSに組み込まれているとしてもよい。
【０２０２】
（４３）上記実施の形態では、RAM上で動作しているモジュールが改ざん検出及び無効化の対象であったが、EEPROMに記憶されているモジュールの改ざんチェックを行ってもよし、改ざんされている場合には無効化してもよい。また、一つでも改ざんされている更新モジュールがあれば、全ての更新モジュールを無効化あるいは更新してもよい。RAM及びEEPROMの両方のモジュールを無効化するとしてもよい。また、更新の対象となるのは、EEPROMに記憶されているモジュールでもよいし、RAM上で動作しているモジュールでもよい。
【０２０３】
（４４）機器１００は具体的には、携帯電話等の携帯端末やデジタルテレビ等、双方向のデータ通信が可能な機器であればよい。
（４５）上記実施の形態では、アクセス情報は、更新モジュール毎にそれぞれ個別のアクセス情報取得鍵で暗号化されているとしたが、同一のアクセス情報取得鍵で暗号化されているとしてもよい。その場合には、正常な更新モジュールが更新サーバにアクセスして、アクセス情報取得鍵に対応した復号鍵を取得し、取得した復号鍵を用いてアクセス制御モジュールを復号し、アクセス制御モジュールから、改ざんされた更新モジュールに対応するアクセス情報を取得し、取得したアクセス情報に基づいて、改ざんされた更新モジュールを無効化するとしてもよい。
【０２０４】
（４６）上記実施の形態では、保護制御モジュールが改ざんされている場合に、当該保護制御モジュールを更新し、その際、更新モジュール群に含まれる複数の更新モジュールの各々が、他の更新モジュールの改ざん検証を行うとしたが、改ざんの有無に関わらず、例えば、保護制御モジュールのバージョンをアップさせる場合等において、改ざん検証を行うとしてもよい。
【０２０５】
（４７）上記実施の形態では、更新用の保護制御モジュールは、複数の暗号鍵で暗号化されていたが、一つの暗号鍵で暗号化されているとしてもよい。その場合、当該暗号鍵に対応する復号鍵が複数に分割され、分割された復号鍵の全てが、改ざんされていない更新モジュールを送信先として送信され、分割された全ての復号鍵を用いて、改ざんされていない更新モジュールは、更新用の保護制御モジュールを復号するとしてもよい。
【０２０６】
（４８）分散情報を保持している更新モジュールが無効化されたときに、他の更新モジュールで保持している分散情報を更新する処理（脱退処理）を行ってもよいし、更新モジュールを新たに追加するときに分散情報を更新する処理（追加処理）を行ってもよい。
以下に、脱退処理及び追加処理の詳細を説明する。ここでは、機器１００Aは６つの更新モジュール１２１A〜１２６Aを備えるものとして説明する。
【０２０７】
更新モジュール１２１A〜１２６Aは、制御部２５０＿ｊ、分散情報格納部２５１＿ｊ、他モジュール分散情報格納部２５２＿ｊ、認証子格納部２５３＿ｊ、リスト格納部２５４＿ｊ、ＩＤ格納部２５５＿ｊ、送信部２５６＿ｊ及び受信部２５７＿ｊから構成されている。制御部２５０＿ｊは、分散情報更新部２６０＿ｊ、分散情報分割部２６１＿ｊ、分散情報検証部２６２＿ｊ、他モジュール分散情報検証部２６３＿ｊ、部分情報検証部２６４＿ｊ、変形情報生成部２６５＿ｊ、リスト更新部２６６＿ｊ及び取得部２６７＿ｊを有している。なお、符号２５ｘ（ｘ＝１、２、・・・、７）に付与されている添え字ｊは、１、２、・・・、６の値であり、ｊ番目の更新モジュールに対応する。
【０２０８】
また、他モジュール分散情報ＸＸＸ＿Ｙは、分散情報ＸＸＸと同じと識別される分散情報で、更新モジュール１２Ｙが保持していることを表す。この様に、複数の更新モジュールで共通の分散情報を持つことで分散情報に対して冗長性を持たせた構成としている。また、以降の説明において、第１及び第２他モジュール分散情報を特に区別する必要がない場合には、単に、他モジュール分散情報と言い、各他モジュール分散情報と分散情報とを特に区別する必要がない場合には、単に、分散情報と言う。
【０２０９】
脱退処理の動作
脱退処理について、図３０にて示す流れ図を用いて説明する。
この処理では、更新モジュールが不正な動作を行う可能性を考え、更新モジュール間で送信されるデータが正しいデータであるかを常に検証することで、不正な動作を行う更新モジュールが存在した場合に検知できるようにしている。さらに、各処理において、分散情報の値を更新する場合には、更新前の分散情報の値を退避しておき、脱退処理中に不正な動作を行う更新モジュールの存在を検知した場合には、脱退処理を中止し、分散情報の値を脱退処理前の値に戻すことで、分散情報が不正な値になることを防止する。
【０２１０】
また、当該処理では、脱退する更新モジュールが所有する分散情報と同じ分散情報を持つ更新モジュールが分散情報の生成及び配布を行うものとする。この様な処理にすることで、脱退する更新モジュールが脱退処理を行わなくても分散情報を更新することが可能となり、不正な動作を行う更新モジュールを無効化する処理などにも利用できる。
なお、脱退対象となるモジュールを更新モジュール１２１Aとし、部分情報の生成を更新モジュール１２６Aが行うものとして、以下説明する。
【０２１１】
更新モジュール１２６Aは、外部の装置（図示せず）から、脱退対象の更新モジュール１２１Aが有する分散情報“ｄ＿１”と同一の他モジュール分散情報から部分情報を生成する旨の脱退時の部分情報生成指示を受け取る。
更新モジュール１２６Aは、第１他モジュール分散情報“ｄ１＿１”から５つの分散情報を生成し、配布する処理を行う（ステップＳ４０００）。言い換えると、更新モジュール１２６Aは、第１他モジュール分散情報“ｄ１＿１”を、５つの分散情報に分散（分解）する。
【０２１２】
更新モジュール１２６Aが有する第１他モジュール分散情報“ｄ１＿１”と同一の情報を持つべきモジュールである更新モジュール１２２Aは、部分情報に用いられた第１他モジュール分散情報“ｄ１＿１”の検証を行う（ステップＳ４０５０）。
更新モジュール１２２A〜１２６Aは、脱退時における第１及び第２更新処理を行い、それぞれが保持する分散情報、第１及び第２他モジュール分散情報を更新する（ステップＳ４１００、Ｓ４１５０）。
【０２１３】
更新モジュール１２２A〜１２６Aは、更新が正常に行われたか否かを判断する（ステップＳ４２００）。このとき、更新モジュール１２２A〜１２５Aは、判断結果を部分情報送信元である更新モジュール１２６Aへ通知する。具体的には、分散情報を共通に持っている更新モジュール同士で、分散情報検証部２６２＿ｊ及び他モジュール分散情報検証部２６３＿ｊを用いて、互いに持っている分散情報が同じ値に更新されたかを、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と各自が保持していた分散情報が同じ値かどうかを検証する。更新モジュール１２２A〜１２５Aは、検証結果を更新モジュール１２６Aへ通知し、更新モジュール１２６Aは、検証結果を一時的に保持する。
【０２１４】
全ての装置にて更新が正常に行われた場合には（ステップＳ４２００における「ＹＥＳ」）、更新モジュール１２６Aは、配布先リストＴ１００を更新する。更新モジュール１２６Aは、更新後の配布先リストをリスト格納部２５４＿６へ格納するとともに、更新モジュール１２２A〜１２５A及び保護制御モジュール装置へ送信する。更新モジュール１２２A〜１２５A及び保護制御モジュール装置は、現在格納している配布先リストから更新後の配布先リストへと更新する（ステップＳ４２５０）。
【０２１５】
全ての装置にて更新が正常に行われていない場合には（ステップＳ４２００における「ＮＯ」）、更新モジュール１２６Aは、更新モジュール１２２A〜１２５Aへその旨を通知する。更新モジュール１２６A、及び通知を受けた更新モジュール１２２A〜１２５Aは、脱退処理を中止し、自装置の分散情報の値を脱退処理の前に戻し、処理を終了する。
なお、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と同じ値かどうかを検証するとしたが、これに限定するものではなく、ゼロ知識証明などの暗号プロトコルを使用して検証してもよい。ゼロ知識証明については、非特許文献１の１３２〜１５０ページに、暗号プロトコルについては、非特許文献１の２２４〜２２５ページに詳しく説明されている。
【０２１６】
以下、ステップＳ４００からＳ４１５にて行われる各処理について説明する。
（部分情報の生成処理）
ここでは、図３０のステップＳ４０００にて示す部分情報の生成処理について、図３１にて示す流れ図を用いて説明する。
更新モジュール１２６Aの分散情報分割部２６１＿６は、第１他モジュール分散情報“ｄ１＿１”２１１＿６から５つの部分情報（ｄ＿１＿１〜ｄ＿１＿５）を生成する（ステップＳ４５００）。このとき、各部分情報は、次式を満たすものとする。
【０２１７】
（式）  ｄ１＿１＝ｄ＿１＿１＋ｄ＿１＿２＋ｄ＿１＿３＋ｄ＿１＿４＋ｄ＿１＿５  ｍｏｄ  Ｌ
具体的には、分散情報分割部２６１＿６は、乱数生成器を用いて、（ｋ−２）個（＝４個）の乱数を生成することにより、部分情報（ｄ＿１＿１〜ｄ＿１＿４）を生成する。次に、分散情報分割部２６１＿６は、
ｄ＿１＿５  ＝  ｄ１＿１  −  （ｄ＿１＿１＋ｄ＿１＿２＋ｄ＿1＿３＋ｄ＿１＿４）
により、ｄ＿１＿５を算出する。このとき、減算結果が負の数になる事もあるが、そのまま部分情報として扱う。
【０２１８】
分散情報分割部２６１＿６は、脱退対象の装置（ここでは、更新モジュール１２１A）が保持する分散情報“ｄ＿１”及びこの情報と同一の値となるべき情報“ｄ１＿１”及び“ｄ２＿１”を除く残りの分散情報に対して、同一となるべき分散情報毎に、異なる部分情報を割り当てる。具体的には、部分情報ｄ＿１＿ｉを分散情報ｄ＿（ｉ＋１）に割り当てる。
【０２１９】
分散情報分割部２６１＿６は、配布先リストＴ１００の内容に基づいて、配布先の更新モジュール毎に、２つ若しくは３つの部分情報を配布する（ステップＳ４５５０）。なお、自装置へは２つの部分情報が配布されるが、この場合、分散情報分割部２６１＿ｊは、分散情報更新部２６０＿ｊへ出力する。
具体的には、分散情報分割部２６１＿６は、以下のように各部分情報を配布する。
【０２２０】
分散情報分割部２６１＿６は、部分情報ｄ＿１＿１、ｄ＿１＿２を更新モジュール１２２Aへ送信する（ステップＳ４６００）。分散情報分割部２６１＿６は、部分情報ｄ＿１＿１、ｄ＿１＿２、ｄ＿１＿３を更新モジュール１２３Aへ送信する（ステップＳ４６１０）。分散情報分割部２６１＿６は、部分情報ｄ＿１＿２、ｄ＿１＿３、ｄ＿１＿４を更新モジュール１２４Aへ送信する（ステップＳ４６２）。分散情報分割部２６１＿６は、部分情報ｄ＿１＿３、ｄ＿１＿４、ｄ＿１＿５を更新モジュール１２５Aへ送信する（ステップＳ４６３０）。分散情報分割部２６１＿６は、部分情報ｄ＿１＿４、ｄ＿１＿５を分散情報更新部２６０＿６へ出力し、一時的に記憶する。ｉ番目の更新モジュールは、受信した各部分情報を分散情報更新部２６０＿ｊに一時的に格納する。
（分散情報の検証処理）
ここでは、図３０のステップＳ４０５０にて示す分散情報の検証処理について、図３２にて示す流れ図を用いて説明する。
【０２２１】
分散情報２１１＿６が正当な値であることを検証するために更新モジュール１２２Aが保持する第２他モジュール分散情報２１１＿２を利用する。
部分情報検証部２６４＿２は、更新モジュール１２６Aから部分情報検証指示を、受信部２５７＿ｊを介して受け取ると、更新モジュール１２１Aを除く残りのモジュール１２３A、１２４A、１２５A及び１２６Aそれぞれから部分情報ｄ＿１＿２、ｄ＿１＿３、ｄ＿１＿４、ｄ＿１＿５を収集する（ステップＳ４７００）。
【０２２２】
具体的には、ｉ番目（ｉ＝３〜６）の更新モジュールは部分情報ｄ＿１＿（ｉ−１）を更新モジュール１２２Aへ出力する（ステップＳ４７１０〜Ｓ４７４０）。
部分情報検証部２６４＿２は、分散情報更新部２６０＿ｊにて記憶しているｄ＿１＿１と、受信した各部分情報ｄ＿１＿２、ｄ＿１＿３、ｄ＿１＿４、ｄ＿１＿５とを加算し、値ｓ’を算出し、算出した値ｓ’が正当であるか否かを検証する（ステップＳ４８００）。具体的には、部分情報検証部２６４＿２は、算出した値ｓ’と、他モジュール分散情報格納部２５２＿ｊに格納されている第２他モジュール分散情報“ｄ２＿１”とが一致するか否かを判断する。
【０２２３】
部分情報検証部２６４＿２は、検証結果を各更新モジュール１２３A〜１２６Aへ通知する（ステップＳ４８５０）。具体的には、部分情報検証部２６４＿２は、検証結果により、値ｓ’が第２他モジュール分散情報“ｄ２＿１”と同一であると判断する場合には、同一である旨の検証結果を各更新モジュール１２３A〜１２６Aへ出力する。同一でないと判断する場合には、部分情報検証部２６４＿２は、同一でない旨の検証結果を各更新モジュール１２３A〜１２６Aへ出力する。なお、当該モジュールに対しては、検証結果を分散情報更新部２６０＿ｊへ出力する。
（脱退時の第１更新処理）
ここでは、図３０のステップＳ４１０にて示す脱退時の第１更新処理について、図３３及び図３４にて示す流れ図を用いて説明する。
【０２２４】
更新モジュール１２２Aの分散情報更新部２６０＿２は、部分情報検証部２６４＿２にて行われた検証の結果により、更新モジュール１２６Aの第１他モジュール分散情報“ｄ１＿１”が正当であるか否かを判断する（ステップＳ５０００）。正当であると判断する場合には（ステップＳ５０００における「ＹＥＳ」）、分散情報更新部２６０＿２は、一時的に記憶している部分情報“ｄ＿１＿１”を用いて分散情報“ｄ＿２”を更新する（ステップＳ５０５０）。具体的には、分散情報更新部２６０＿２は、分散情報“ｄ＿２”に部分情報“ｄ＿１＿１”を加算することにより、新たな分散情報“ｄ＿２’（＝ｄ＿２＋ｄ＿１＿１）”を算出する。次に、分散情報更新部２６０＿２は、一時的に記憶している部分情報“ｄ＿１＿２”を用いて第１他モジュール分散情報“ｄ１＿３”を更新する（ステップＳ５１００）。具体的には、分散情報更新部２６０＿２は、第１他モジュール分散情報“ｄ１＿３”に部分情報“ｄ＿１＿２”を加算することにより、新たな分散情報“ｄ１＿３’（＝ｄ１＿３＋ｄ＿１＿２）”を算出する。
【０２２５】
更新モジュール１２３Aの分散情報更新部２６０＿３は、更新モジュール１２２Aから受け取った検証結果により、更新モジュール１２６Aの第１他モジュール分散情報“ｄ１＿１”が正当であるか否かを判断する（ステップＳ５２００）。正当であると判断する場合には（ステップＳ５２００における「ＹＥＳ」）、分散情報更新部２６０＿３は、一時的に記憶している部分情報“ｄ＿１＿２”を用いて分散情報“ｄ＿３”を更新する（ステップＳ５２５０）。具体的には、分散情報更新部２６０＿３は、分散情報“ｄ＿３”に部分情報“ｄ＿１＿２”を加算することにより、新たな分散情報“ｄ＿３’（＝ｄ＿３＋ｄ＿１＿２）”を算出する。次に、分散情報更新部２６０＿３は、一時的に記憶している部分情報“ｄ＿１＿３”、及び“ｄ＿１＿１”を用いて第１及び他モジュール分散情報“ｄ１＿４”、“ｄ２＿２”を更新する（ステップＳ５３００）。具体的には、分散情報更新部２６０＿３は、第１他モジュール分散情報“ｄ１＿４”に部分情報“ｄ＿１＿３”を加算することにより、新たな分散情報“ｄ１＿４’（＝ｄ１＿４＋ｄ＿１＿３）”を算出する。分散情報更新部２６０＿３は、第２他モジュール分散情報“ｄ２＿２”に部分情報“ｄ＿１＿１”を加算することにより、新たな分散情報“ｄ２＿３’（＝ｄ２＿２＋ｄ＿１＿１）”を算出する。
【０２２６】
更新モジュール１２４Aの分散情報更新部２６０＿４は、更新モジュール１２２Aから受け取った検証結果により、更新モジュール１２６Aの第１他モジュール分散情報“ｄ１＿１”が正当であるか否かを判断する（ステップＳ５４００）。正当であると判断する場合には（ステップＳ５４００における「ＹＥＳ」）、分散情報更新部２６０＿４は、一時的に記憶している部分情報“ｄ＿１＿３”を用いて分散情報“ｄ＿４”を更新する（ステップＳ５４５０）。具体的には、分散情報更新部２６０＿４は、分散情報“ｄ＿４”に部分情報“ｄ＿１＿３”を加算することにより、新たな分散情報“ｄ＿４’（＝ｄ＿４＋ｄ＿１＿３）”を算出する。次に、分散情報更新部２６０＿４は、一時的に記憶している部分情報“ｄ＿１＿４”、及び“ｄ＿１＿２”を用いて第１及び他モジュール分散情報“ｄ１＿５”、“ｄ２＿３”を更新する（ステップＳ５５００）。具体的には、分散情報更新部２６０＿４は、第１他モジュール分散情報“ｄ１＿５”に部分情報“ｄ＿１＿４”を加算することにより、新たな分散情報“ｄ１＿５’（＝ｄ１＿５＋ｄ＿１＿４）”を算出する。分散情報更新部２６０＿４は、第２他モジュール分散情報“ｄ２＿３”に部分情報“ｄ＿１＿２”を加算することにより、新たな分散情報“ｄ２＿３’（＝ｄ２＿３＋ｄ＿１＿２）”を算出する。
【０２２７】
更新モジュール１２５Aの分散情報更新部２６０＿５は、更新モジュール１２２Aから受け取った検証結果により、更新モジュール１２６Aの第１他モジュール分散情報“ｄ１＿１”が正当であるか否かを判断する（ステップＳ５６００）。正当であると判断する場合には（ステップＳ５６００における「ＹＥＳ」）、分散情報更新部２６０＿５は、一時的に記憶している部分情報“ｄ＿１＿４”を用いて分散情報“ｄ＿５”を更新する（ステップＳ５６５０）。具体的には、分散情報更新部２６０＿５は、分散情報“ｄ＿５”に部分情報“ｄ＿１＿４”を加算することにより、新たな分散情報“ｄ＿５’（＝ｄ＿５＋ｄ＿１＿４）”を算出する。次に、分散情報更新部２６０＿５は、一時的に記憶している部分情報“ｄ＿１＿５”、及び“ｄ＿１＿３”を用いて第１及び他モジュール分散情報“ｄ１＿６”、“ｄ２＿４”を更新する（ステップＳ５７００）。具体的には、分散情報更新部２６０＿５は、第１他モジュール分散情報“ｄ１＿６”に部分情報“ｄ＿１＿５”を加算することにより、新たな分散情報“ｄ１＿６’（＝ｄ１＿６＋ｄ＿１＿５）”を算出する。分散情報更新部２６０＿５は、第２他モジュール分散情報“ｄ２＿４”に部分情報“ｄ＿１＿３”を加算することにより、新たな分散情報“ｄ２＿４’（＝ｄ２＿４＋ｄ＿１＿３）”を算出する。
【０２２８】
更新モジュール１２６Aの分散情報更新部２６０＿６は、更新モジュール１２２Aから受け取った検証結果により、当該更新モジュールの第１他モジュール分散情報“ｄ１＿１”が正当であるか否かを判断する（ステップＳ５８００）。正当であると判断する場合には（ステップＳ５８００における「ＹＥＳ」）、分散情報更新部２６０＿６は、一時的に記憶している部分情報“ｄ＿１＿５”を用いて分散情報“ｄ＿６”を更新する（ステップＳ５８５０）。具体的には、分散情報更新部２６０＿６は、分散情報“ｄ＿６”に部分情報“ｄ＿１＿５”を加算することにより、新たな分散情報“ｄ＿６’（＝ｄ＿６＋ｄ＿１＿５）”を算出する。次に、分散情報更新部２６０＿６は、一時的に記憶している部分情報“ｄ＿１＿４”を用いて第２他モジュール分散情報“ｄ２＿５”を更新する（ステップＳ５９００）。具体的には、分散情報更新部２６０＿６は、第２他モジュール分散情報“ｄ２＿５”に部分情報“ｄ＿１＿４”を加算することにより、新たな分散情報“ｄ２＿５’（＝ｄ２＿５＋ｄ＿１＿４）”を算出する。
【０２２９】
各更新モジュール１２２A〜１２６Aにおいて、第１他モジュール分散情報“ｄ１＿１”が正当でないと判断する場合には（ステップＳ５０００、Ｓ５２００、Ｓ５４００、Ｓ５６００及びＳ５８００における「ＮＯ」）、検証の結果が一致しないと通知を受け取った場合には、更新モジュール１２２Aか１２６Aが不正な動作を行っているので、各更新モジュールは、脱退処理を中止する。
（脱退時の第２更新処理）
ここでは、図３０のステップＳ４１５にて示す脱退時の第２更新処理について、図３５にて示す流れ図を用いて説明する。
【０２３０】
更新モジュール１２６Aの分散情報更新部２６０＿６は、分散情報“ｄ＿６’”を更新モジュール１２２Aへ出力する（ステップＳ６０００）。
更新モジュール１２２Aの分散情報更新部２６０＿２は、分散情報“ｄ＿２’”を更新モジュール１２６Aへ出力する（ステップＳ６０５０）。
分散情報更新部２６０＿６は、分散情報“ｄ＿２’”及び“ｄ２＿２’”を収集する（ステップＳ６１００）。このとき、更新モジュール１２３Aの分散情報更新部２６０＿３は分散情報“ｄ２＿２’”を送信する（ステップＳ６１１０）。
【０２３１】
分散情報更新部２６０＿２は、分散情報“ｄ＿６’”及び“ｄ２＿６’”を収集する（ステップＳ６１５０）。このとき、更新モジュール１２３Aの分散情報更新部２６０＿３は分散情報“ｄ２＿２’”を送信する（ステップＳ６１６０）。
分散情報更新部２６０＿６は、収集した分散情報“ｄ＿２’”及び“ｄ２＿２’”が一致するか否かを判断する（ステップＳ６２００）。一致すると判断する場合には（ステップＳ６２００における「ＹＥＳ」）、分散情報更新部２６０＿６は、第１他モジュール分散情報を“ｄ＿２’”とする（ステップＳ６２５０）。
【０２３２】
分散情報更新部２６０＿２は、収集した分散情報“ｄ＿６’”及び“ｄ２＿６’”が一致するか否かを判断する（ステップＳ６３００）。一致すると判断する場合には（ステップＳ６３００における「ＹＥＳ」）、分散情報更新部２６０＿２は、第２他モジュール分散情報を“ｄ＿６’”とする（ステップＳ６３５０）。
分散情報更新部２６０＿６は、一致しないと判断する場合には（ステップＳ６２００における「ＮＯ」）、更新モジュール１２６Aは、更新モジュール１２２A〜１２５Aへその旨を通知する。更新モジュール１２６A、及び通知を受けた更新モジュール１２２A〜１２５Aは、脱退処理を中止し、自モジュールの分散情報の値を脱退処理の前に戻し、処理を終了する。
【０２３３】
分散情報更新部２６０＿２は、一致しないと判断する場合には（ステップＳ６３００における「ＮＯ」）、更新モジュール１２２Aは、更新モジュール１２３A〜１２６Aへその旨を通知する。更新モジュール１２２A、及び通知を受けた更新モジュール１２３A〜１２６Aは、脱退処理を中止し、自モジュールの分散情報の値を脱退処理の前に戻し、処理を終了する。
（具体例）
脱退処理後の更新モジュール１２２A〜１２６Aのそれぞれが保持する分散情報、第１及び第２他モジュール分散情報を、図３６にて示す。
【０２３４】
例えば、更新モジュール１２２Aは、脱退処理後において、更新後の分散情報“ｄ＿２’”２１２ｂ、第１他モジュール分散情報“ｄ１＿３’”２１３＿２ｂ及び第２他モジュール分散情報“ｄ２＿６’”２１１＿２ｂを保持している。
ここで、更新後の各分散情報“ｄ＿２’”〜“ｄ＿６’”により、秘密鍵“ｄ”が回復されることを以下に示す。
【０２３５】
ｄ＿２’＋ｄ＿３’＋ｄ＿４’＋ｄ＿５’＋ｄ＿６’
＝  （ｄ＿２＋ｄ＿１＿１）＋（ｄ＿３＋ｄ＿１＿２）＋（ｄ＿４＋ｄ＿１＿３）＋（ｄ＿５＋ｄ＿１＿４）＋（ｄ＿６＋ｄ＿１＿５）
＝  （ｄ＿１＿１＋ｄ＿１＿２＋ｄ＿１＿３＋ｄ＿１＿４＋ｄ＿１＿５）
＋（ｄ＿２＋ｄ＿３＋ｄ＿４＋ｄ＿５＋ｄ＿６）
＝  ｄ＿１＋ｄ＿２＋ｄ＿３＋ｄ＿４＋ｄ＿５＋ｄ＿６
＝  ｄ
このように、更新モジュール１２１Aが脱退後も、それぞれの更新モジュールが保持する分散情報の総和を一定とすることが可能となるため、脱退処理時において、ソフトウェア更新システムは、新しい秘密鍵“ｄ”を復元し分散情報を再生成することなく、更新モジュールを脱退させることが可能となる。
【０２３６】
追加処理の動作
ここでは、追加処理について、図３７にて示す流れ図を用いて説明する。
追加処理では、更新モジュールが不正な動作を行う可能性を考え、更新モジュール間で送信されるデータが正しいデータであるかを常に検証することで、不正な動作を行う更新モジュールが存在した場合に検知できるようにしている。さらに、追加処理では、分散情報の値を更新する場合には、更新前の分散情報の値を退避しておき、追加処理中に不正な動作を行う更新モジュールの存在を検知した場合には、追加処理を中止し、分散情報の値を追加処理前の値に戻すことで、分散情報が不正な値になることを防止する。
【０２３７】
ここでは、複数の更新モジュールから変形情報を追加する更新モジュールへ送信し、追加する更新モジュールの分散情報を生成することで、追加する更新モジュールに変形情報を送信する更新モジュールが不正な動作を行い、「新しい秘密鍵」が正しく生成できないように、不正な変形情報を送信するような行為を防止している。また、分散情報を正しく更新しなかったりするような行為を防止する。また、各更新モジュールは分散情報が正しく更新されたかを、同じ分散情報を共通に持っている更新モジュール同士で確認することで、不正な更新モジュールによる不正な更新を防止している。
【０２３８】
また、追加する更新モジュールへ変形情報を送信した更新モジュールが、追加する更新モジュールの分散情報を共通に持つ構成の場合、元々保持していた分散情報と追加する更新モジュールの分散情報と追加する更新モジュールへ送信した変形情報から、本来保持していない分散情報を計算することが可能になる。そのため、更新モジュールの追加処理の最後に、変形情報を送信した更新モジュールの所有する分散情報から上記とは異なる値の変形情報を切り出し、その変形情報を分割して各更新モジュールへ送信することで、分散情報の値を更新する処理が必要になる。より詳細な説明は後述する。
【０２３９】
なお、追加対象となる更新モジュールを更新モジュール１２７Aとし、変形情報の生成を更新モジュール１２１A、及び１２６Aが行うものとして、以下説明する。
更新モジュール１２１A、及び１２６Aが、変形情報を生成し、各更新モジュールへ配布する配布処理を行う（ステップＳ７０００）。
追加対象の更新モジュール１２７A及び、更新モジュール１２７Aと同一の分散情報を保持する更新モジュール１２１A、及び１２６Aとが分散情報を生成する分散情報の生成処理を行う（ステップＳ７０５０）。
【０２４０】
更新モジュール１２７Aが、第１及び第２他モジュール分散情報を格納する他モジュール分散情報の格納処理を行う（ステップＳ７１００）。
更新モジュール１２１A、１２２A、１２５A〜１２７Aは、更新が正常に行われたか否かを判断する（ステップＳ７１５０）。更新モジュール１２１A、１２２A、１２５A及び１２６Aは、検証結果を更新モジュール１２７Aへ通知し、更新モジュール１２７Aは、検証結果を一時的に保持する。
【０２４１】
更新対象の全ての更新モジュールにおいて正常に更新がされたと判断する場合には（ステップＳ７１５０における「ＹＥＳ」）、更新モジュール１２７Aの分散情報更新部２６０＿７は、更新モジュール１２１A及び１２６Aから証明書を収集する（ステップＳ７２００）。
分散情報更新部２６０＿７は、更新モジュール１２１A及び１２６Aから収集した証明書が正当であるか否かを判断する（ステップＳ７２５０）。具体的には、分散情報更新部２６０＿７は、収集した２つの証明書が同一であるか否かを判断する。
【０２４２】
同一であると判断する場合には（ステップＳ７２５０における「ＹＥＳ」）、分散情報更新部２６０＿７は、証明書を認証子格納部２５３＿７へ格納する（ステップＳ７３００）。分散情報更新部２６０＿７は、証明書の格納後、追加時の第１分割処理の開始を示す旨の指示を更新モジュール１２１Aへ出力する。
次に、更新モジュール１２１Aが、自身が保持する分散情報から７つの部分情報を生成し、生成した各部分情報を各更新モジュールへ配布する追加時の第１分割処理を行う（ステップＳ７３５０）。
【０２４３】
更新モジュール１２１A〜１２７Aは、配布された部分情報を用いて分散情報を更新する追加時の第１更新処理を行う（ステップＳ７４００）。
更新モジュール１２１A〜１２７Aは、更新が正常に行われたか否かを判断する（ステップＳ７４５０）。このとき、更新モジュール１２２A〜１２７Aは、判断結果を部分情報送信元である更新モジュール１２１Aへ通知する。具体的には、分散情報を共通に持っている更新モジュール同士で、分散情報検証部２６２＿ｊ及び他モジュール分散情報検証部２６３＿ｊを用いて、互いに持っている分散情報が同じ値に更新されたかを、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と各自が保持していた分散情報が同じ値かどうかを検証する。更新モジュール１２２A〜１２７Aは、検証結果を更新モジュール１２１Aへ通知し、更新モジュール１２１Aは、検証結果を一時的に保持する。
【０２４４】
全ての更新モジュールにて更新が正常に行われた場合には（ステップＳ７４５０における「ＹＥＳ」）、更新モジュール１２１Aは、更新モジュール１２６Aへ追加時の第２分割処理を行う旨の分割指示を送信する。更新モジュール１２６Aは分割指示を受け取ると、自身が保持する分散情報から７つの部分情報を生成し、生成した各部分情報を各更新モジュールへ配布する追加時の第２分割処理を行う（ステップＳ７５００）。
【０２４５】
更新モジュール１２１A〜１２７Aは、配布された部分情報を用いて分散情報を更新する追加時の第２更新処理を行う（ステップＳ７５５０）。
更新モジュール１２１A〜１２７Aは、更新が正常に行われたか否かを判断する（ステップＳ７６００）。更新モジュール１２１A〜１２５A及び１２７Aは、検証結果を更新モジュール１２６Aへ通知し、更新モジュール１２６Aは、検証結果を一時的に保持する。
【０２４６】
全ての更新モジュールにて更新が正常に行われた場合には（ステップＳ７６００における「ＹＥＳ」）、更新モジュール１２６Aは、配布先リストＴ１００を更新する。更新モジュール１２６Aは、更新後の配布先リストをリスト格納部２５４＿６へ格納するとともに、更新モジュール１２１A〜１２５A、１２７A及び保護制御モジュールへ送信する。更新モジュール１２１A〜１２５A、１２７A及び保護制御モジュールは、現在格納している配布先リストから更新後の配布先リストへと更新する（ステップＳ７６５０）。
【０２４７】
更新対象の更新モジュールにて更新が正常に行われていないと判断する場合には（ステップＳ７１５０における「ＮＯ」）、及び証明書が正当でないと判断する場合には（ステップＳ７２５０における「ＮＯ」）、更新モジュール１２７Aは、更新対象の各更新モジュール１２１A、１２２A、１２５A及び１２６Aへその旨を通知する。更新対象の各更新モジュールは、追加理を中止し、自モジュールの分散情報の値を追加処理の前に戻し、処理を終了する。
【０２４８】
全てのモジュールにて更新が正常に行われていない場合には（ステップＳ７４５０における「ＮＯ」）、更新モジュール１２１Aは、更新モジュール１２２A〜１２７Aへその旨を通知する。更新モジュール１２１A〜１２７Aは、追加処理を中止し、自モジュールの分散情報の値を追加処理の前に戻し、処理を終了する。
また、ステップＳ７６００における「ＮＯ」の場合も同様に、更新モジュール１２１A〜１２７Aは、脱退処理を中止し、自モジュールの分散情報の値を脱退処理の前に戻し、処理を終了する。
【０２４９】
なお、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と同じ値かどうかを検証するとしたが、これに限定するものではなく、ゼロ知識証明などの暗号プロトコルを使用して検証してもよい。ゼロ知識証明については、非特許文献１の１３２〜１５０ページに、暗号プロトコルについては、非特許文献１の２２４〜２２５ページに詳しく説明されている。
【０２５０】
以下、追加処理の詳細について説明する。
（配布処理）
ここでは、図３７のステップＳ７０００にて示す部分情報の生成処理について、図３８にて示す流れ図を用いて説明する。
更新モジュール１２６Aの変形情報生成部２６５＿６は、外部装置から追加時の分散情報生成指示を受け取ると、変形情報ｎを生成する（ステップＳ８０００）。
【０２５１】
更新モジュール１２１Aの変形情報生成部２６５＿１は、外部装置から追加時の分散情報生成指示を受け取ると、変形情報ｍを生成する（ステップＳ８０５０）。
変形情報生成部２６５＿６は、生成した変形情報ｎを更新モジュール１２１A、１２５及び１２７へ出力する（ステップＳ８１００）。
変形情報生成部２６５＿１は、生成した変形情報ｍを更新モジュール１２２A、１２６A、及び１２７Aへ出力する（ステップＳ８１５０）。
【０２５２】
更新モジュール１２６Aの分散情報更新部２６０＿６は、変形情報ｍを受け取ると、受け取った変形情報ｍを一時的に格納する（ステップＳ８２００）。
更新モジュール１２１Aの分散情報更新部２６０＿１は、変形情報ｎを受け取ると、受け取った変形情報ｎを一時的に格納する（ステップＳ８２５０）。
分散情報更新部２６０＿６は、生成した変形情報ｎを用いて、新たな分散情報“ｄ＿６’（＝ｄ＿６−ｎ）”を生成し、分散情報格納部２５１＿６に格納されている分散情報“ｄ＿６“を“ｄ＿６’”へと更新する（ステップＳ８３００）。
【０２５３】
分散情報更新部２６０＿１は、生成した変形情報ｍを用いて、新たな分散情報“ｄ＿１’（＝ｄ＿１−ｍ）”を生成し、分散情報格納部２５１＿１に格納されている分散情報“ｄ＿１”を“ｄ＿１’”へと更新する（ステップＳ８３５０）。
更新モジュール１２５Aの分散情報更新部２６０＿５は、変形情報ｎを受け取ると、受け取った変形情報ｎを用いて新たな第１他モジュール分散情報“ｄ１＿６’（＝ｄ１＿６−ｎ）”を生成し、他モジュール分散情報格納部２５２＿５に格納されている第１他モジュール分散情報“ｄ１＿６”を“ｄ１＿６’”へと更新する（ステップＳ８４００）。
【０２５４】
更新モジュール１２７Aの分散情報更新部２６０＿７は、変形情報ｎ及びｍを受け取ると、受け取った変形情報ｎ及びｍを一時的に格納する（ステップＳ８４５０）。
更新モジュール１２２Aの分散情報更新部２６０＿２は、変形情報ｍを受け取ると、受け取った変形情報ｍを用いて新たな第２他モジュール分散情報“ｄ２＿１’（＝ｄ２＿１−ｍ）”を生成し、他モジュール分散情報格納部２５２＿２に格納されている第２他モジュール分散情報“ｄ２＿１”を“ｄ２＿１’”へと更新する（ステップＳ８５００）。
（分散情報の生成処理）
ここでは、図３７のステップＳ７０５にて示す分散情報の生成処理について、図３９にて示す流れ図を用いて説明する。
【０２５５】
分散情報更新部２６０＿６は、変形情報ｎ及びｍを用いて他モジュール分散情報“ｄ１＿７＝（ｍ＋ｎ）”を生成する（ステップＳ８６００）。分散情報更新部２６０＿６は、他モジュール分散情報格納部２５２＿６に格納されている第１他モジュール分散情報“ｄ１＿１”を“ｄ１＿７”へと更新（置換）する（ステップＳ８６５０）。
分散情報更新部２６０＿７は、変形情報ｎ及びｍを用いて分散情報“ｄ＿７＝（ｍ＋ｎ）”を生成する（ステップＳ８７００）。分散情報更新部２６０＿７は、分散情報格納部２５１＿７に生成した分散情報“ｄ＿７”を格納する（ステップＳ８７５０）。
【０２５６】
分散情報更新部２６０＿１は、変形情報ｎ及びｍを用いて他モジュール分散情報“ｄ２＿７＝（ｍ＋ｎ）”を生成する（ステップＳ８８００）。分散情報更新部２６０＿１は、他モジュール分散情報格納部２５２＿１に格納されている第２他モジュール分散情報“ｄ２＿１”を“ｄ２＿７”へと更新（置換）する（ステップＳ８８５０）。
（他モジュール分散情報の格納処理）
ここでは、図３７のステップＳ７１００にて示す他モジュール分散情報の格納処理について、図４０にて示す流れ図を用いて説明する。
【０２５７】
更新モジュール１２７Aの分散情報更新部２６０＿７は、更新モジュール１２１Aへ分散情報要求指示を、更新モジュール１２２Aへ第２他モジュール分散情報要求指示を、それぞれ出力し、分散情報“ｄ＿１’”及び“ｄ２＿１’”を収集する（ステップＳ９０００）。このとき、分散情報要求指示を受け付けた更新モジュール１２１Aの取得部２６７＿１は、分散情報“ｄ＿１’”を取得して、更新モジュール１２７Aへ出力する（ステップＳ９０１０）。また、第２他モジュール分散情報要求指示を受け付けた更新モジュール１２２Aの取得部２６７＿２は、分散情報“ｄ２＿１’”を取得して、更新モジュール１２７Aへ出力する（ステップＳ９０２０）。
【０２５８】
分散情報更新部２６０＿７は、収集した分散情報“ｄ＿１’”と“ｄ２＿１’”とが同一の値であるか否かを判断する（ステップＳ９０５０）。
同一であると判断する場合には（ステップＳ９０５０における「ＹＥＳ」）、分散情報更新部２６０＿７は、収集した分散情報“ｄ＿１’”を第１他モジュール分散情報として他モジュール分散情報格納部２５２＿７へ格納する（ステップＳ９１００）。
【０２５９】
分散情報更新部２６０＿７は、更新モジュール１２６Aへ分散情報要求指示を、更新モジュール１２５Aへ第１他モジュール分散情報要求指示を、それぞれ出力し、分散情報“ｄ＿６’”及び“ｄ１＿６’”を収集する（ステップＳ９１５０）。このとき、分散情報要求指示を受け付けた更新モジュール１２６Aの取得部２６７＿６は、分散情報“ｄ＿６’”を取得して、更新モジュール１２７Aへ出力する（ステップＳ９１６０）。また、第１他モジュール分散情報要求指示を受け付けた更新モジュール１２５Aの取得部２６７＿５は、分散情報“ｄ１＿６’”を取得して、更新モジュール１２７Aへ出力する（ステップＳ９１７０）。
【０２６０】
分散情報更新部２６０＿７は、収集した分散情報“ｄ＿６’”と“ｄ１＿６’”とが同一の値であるか否かを判断する（ステップＳ９２００）。
同一であると判断する場合には（ステップＳ９２００における「ＹＥＳ」）、分散情報更新部２６０＿７は、収集した分散情報“ｄ＿６’”を第２他モジュール分散情報として他モジュール分散情報格納部２５２＿７へ格納する（ステップＳ９２５０）。
【０２６１】
同一でないと判断する場合には（ステップＳ９０５０若しくはステップＳ９２００における「ＮＯ」）、更新モジュール１２７Aは、更新モジュール１２１A〜１２６Aへその旨を通知する。更新モジュール１２１A〜１２７Aは、追加処理を中止し、自モジュールの分散情報の値を追加処理の前に戻し、処理を終了する。
（追加時の第１分割処理）
ここでは、図３７のステップＳ７３５０にて示す追加時の第１分割処理について、図４１にて示す流れ図を用いて説明する。
【０２６２】
更新モジュール１２１Aの分散情報分割部２６１＿１は、分散情報“ｄ＿１’”から７つの部分情報（ｄ＿１＿１〜ｄ＿１＿７）を生成する（ステップＳ９５００）。言い換えると、分散情報分割部２６１＿１は、分散情報“ｄ＿１’”を、７つの部分情報（ｄ＿１＿１〜ｄ＿１＿７）に分散（分解）する。このとき、各部分情報は、次式を満たすものとする。
【０２６３】
（式）  ｄ＿１’＝  ｄ＿１＿１＋ｄ＿１＿２＋ｄ＿１＿３＋ｄ＿１＿４＋ｄ＿１＿５＋ｄ＿１＿６＋ｄ＿１＿７  ｍｏｄ  Ｌ
具体的には、分散情報分割部２６１＿１は、乱数生成器を用いて、６個の乱数を生成することにより、部分情報（ｄ＿１＿１〜ｄ＿１＿６）を生成する。次に、分散情報分割部２６１＿１は、
ｄ＿１＿７  ＝  ｄ＿１’  −  （ｄ＿１＿１＋ｄ＿１＿２＋・・・＋ｄ＿１＿６）
により、ｄ＿１＿７を算出する。このとき、減算結果が負の数になる事もあるが、そのまま部分情報として扱う。
【０２６４】
分散情報分割部２６１＿１は、生成（分散）した３個若しくは６個の部分情報を各モジュール１２２A〜１２７Aへ配布する（ステップＳ９５５０）。
具体的には、分散情報分割部２６１＿１は、更新モジュール１２２A及び１２７に対して生成した部分情報ｄ＿１＿２〜ｄ＿１＿７を配布する（ステップＳ９５６０及びＳ９６１０）。他のモジュール１２３A〜１２６Aにおけるｉ番目のモジュールに対しては、部分情報ｄ＿１＿（ｉ−１）、ｄ＿１＿ｉ及びｄ＿１＿（ｉ＋１）を配布する（ステップＳ９５７０、Ｓ９５８０、Ｓ９５９０及びＳ９６００）。
【０２６５】
更新モジュール１２２A〜１２７Aは、受信した各部分情報を分散情報更新部２６０＿ｊに一時的に格納する。
（追加時の第１更新処理）
ここでは、図３７のステップＳ７４００にて示す追加時の第１更新処理について、図４２から図４４にて示す流れ図を用いて説明する。
【０２６６】
更新モジュール１２１Aの分散情報更新部２６０＿１は、生成した部分情報“ｄ＿１＿１”を新たな分散情報“Ｄ＿１（＝ｄ＿１＿１）”として、分散情報格納部２５１＿１に格納されている分散情報“ｄ＿１’”を新たな分散情報“Ｄ＿１”に更新する（ステップＳ９７００）。分散情報更新部２６０＿１は、生成した部分情報“ｄ＿１＿２”及び“ｄ＿１＿７”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿２（＝ｄ１＿２＋ｄ＿１＿２）”及び“Ｄ２＿７（＝ｄ２＿７＋ｄ＿１＿７）”を生成し、分散情報格納部２５１＿１に格納されている第１及び第２他モジュール分散情報“ｄ１＿２”及び“ｄ２＿７’”を新たな第１及び第２他モジュール分散情報“Ｄ１＿２”及び“Ｄ２＿７”に更新する（ステップＳ９７５０）。
【０２６７】
更新モジュール１２２Aの分散情報更新部２６０＿２は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿２”を用いて新たな分散情報“Ｄ＿２（＝ｄ＿２＋ｄ＿１＿２）”を生成し、分散情報格納部２５１＿２に格納されている分散情報“ｄ＿２”を新たな分散情報“Ｄ＿２”に更新する（ステップＳ９８００）。分散情報更新部２６０＿２は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿２”〜“ｄ＿１＿７”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿３（＝ｄ１＿３＋ｄ＿１＿３）”及び“Ｄ２＿１（＝ｄ２＿１’−（ｄ＿１＿２＋ｄ＿１＿３＋・・・＋ｄ＿１＿７））”を生成し、分散情報格納部２５１＿２に格納されている第１及び第２他モジュール分散情報“ｄ１＿３”及び“ｄ２＿１’”を新たな第１及び第２他モジュール分散情報“Ｄ１＿３”及び“Ｄ２＿１”に更新する（ステップＳ９８５０）。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。
【０２６８】
更新モジュール１２３Aの分散情報更新部２６０＿３は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿３”を用いて新たな分散情報“Ｄ＿３（＝ｄ＿３＋ｄ＿１＿３）”を生成し、分散情報格納部２５１＿３に格納されている分散情報“ｄ＿３”を新たな分散情報“Ｄ＿３”に更新する（ステップＳ９９００）。分散情報更新部２６０＿３は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿４”及び“ｄ＿１＿２”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿４（＝ｄ１＿４＋ｄ＿１＿４）”及び“Ｄ２＿２（＝ｄ２＿２＋ｄ＿１＿２）”を生成し、分散情報格納部２５１＿３に格納されている第１及び第２他モジュール分散情報“ｄ１＿４”及び“ｄ２＿２”を新たな第１及び第２他モジュール分散情報“Ｄ１＿４”及び“Ｄ２＿２”に更新する（ステップＳ９９５０）。
【０２６９】
更新モジュール１２４Aの分散情報更新部２６０＿４は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿４”を用いて新たな分散情報“Ｄ＿４（＝ｄ＿４＋ｄ＿１＿４）”を生成し、分散情報格納部２５１＿４に格納されている分散情報“ｄ＿４”を新たな分散情報“Ｄ＿４”に更新する（ステップＳ１００００）。分散情報更新部２６０＿４は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿５”及び“ｄ＿１＿３”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿５（＝ｄ１＿５＋ｄ＿１＿５）”及び“Ｄ２＿３（＝ｄ２＿３＋ｄ＿１＿３）”を生成し、分散情報格納部２５１＿４に格納されている第１及び第２他モジュール分散情報“ｄ１＿５”及び“ｄ２＿３”を新たな第１及び第２他モジュール分散情報“Ｄ１＿５”及び“Ｄ２＿３”に更新する（ステップＳ１００５０）。
【０２７０】
更新モジュール１２５Aの分散情報更新部２６０＿５は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿５”を用いて新たな分散情報“Ｄ＿５（＝ｄ＿５＋ｄ＿１＿５）”を生成し、分散情報格納部２５１＿５に格納されている分散情報“ｄ＿５”を新たな分散情報“Ｄ＿５”に更新する（ステップＳ１０１０）。分散情報更新部２６０＿５は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿６”及び“ｄ＿１＿４”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿６（＝ｄ１＿６＋ｄ＿１＿６）”及び“Ｄ２＿４（＝ｄ２＿４＋ｄ＿１＿４）”を生成し、分散情報格納部２５１＿５に格納されている第１及び第２他モジュール分散情報“ｄ１＿６”及び“ｄ２＿４”を新たな第１及び第２他モジュール分散情報“Ｄ１＿６”及び“Ｄ２＿４”に更新する（ステップＳ１０１５０）。
【０２７１】
更新モジュール１２６Aの分散情報更新部２６０＿６は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿６”を用いて新たな分散情報“Ｄ＿６（＝ｄ＿６’＋ｄ＿１＿６）”を生成し、分散情報格納部２５１＿６に格納されている分散情報“ｄ＿６’”を新たな分散情報“Ｄ＿６”に更新する（ステップＳ１０２００）。分散情報更新部２６０＿６は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿７”及び“ｄ＿１＿５”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿７（＝ｄ１＿７＋ｄ＿１＿７）”及び“Ｄ２＿５（＝ｄ２＿５＋ｄ＿１＿５）”を生成し、分散情報格納部２５１＿６に格納されている第１及び第２他モジュール分散情報“ｄ１＿７”及び“ｄ２＿５”を新たな第１及び第２他モジュール分散情報“Ｄ１＿７”及び“Ｄ２＿５”に更新する（ステップＳ１０２５０）。
【０２７２】
更新モジュール１２７Aの分散情報更新部２６０＿７は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿７”を用いて新たな分散情報“Ｄ＿７（＝ｄ＿７＋ｄ＿１＿７）”を生成し、分散情報格納部２５１＿７に格納されている分散情報“ｄ＿７”を新たな分散情報“Ｄ＿７”に更新する（ステップＳ１０３００）。分散情報更新部２６０＿７は、更新モジュール１２１Aから受け取った部分情報“ｄ＿１＿２”〜“ｄ＿１＿７”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿１（＝ｄ１＿１’−（ｄ＿１＿２＋ｄ＿１＿３＋・・・＋ｄ＿１＿７））”及び“Ｄ２＿６（＝ｄ２＿６’＋ｄ＿１＿６）”を生成し、分散情報格納部２５１＿７に格納されている第１及び第２他モジュール分散情報“ｄ１＿１’”及び“ｄ２＿６’”を新たな第１及び第２他モジュール分散情報“Ｄ１＿１”及び“Ｄ２＿６”に更新する（ステップＳ１０３５０）。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。
（追加時の第２分割処理）
ここでは、図３７のステップＳ７５０にて示す追加時の第２分割処理について、図４５にて示す流れ図を用いて説明する。
【０２７３】
更新モジュール１２６Aの分散情報分割部２６１＿６は、分散情報“Ｄ＿６”から７つの部分情報（ｄ＿６＿１〜ｄ＿６＿７）を生成する（ステップＳ１０５０）。言い換えると、分散情報分割部２６１＿６は、分散情報“Ｄ＿６”を、７つの部分情報（ｄ＿６＿１〜ｄ＿６＿７）に分散（分解）する。このとき、各部分情報は、次式を満たすものとする。
【０２７４】
（式）  Ｄ＿６＝  ｄ＿６＿１＋ｄ＿６＿２＋ｄ＿６＿３＋ｄ＿６＿４＋ｄ＿６＿５＋ｄ＿６＿６＋ｄ＿６＿７  ｍｏｄ  Ｌ
具体的には、分散情報分割部２６１＿６は、乱数生成器を用いて、６個の乱数を生成することにより、部分情報（ｄ＿６＿１〜ｄ＿６＿６）を生成する。次に、分散情報分割部２６１＿６は、
ｄ＿６＿７  ＝  Ｄ＿６  −  （ｄ＿６＿１＋ｄ＿６＿２＋・・・＋ｄ＿６＿６）
により、ｄ＿６＿７を算出する。このとき、減算結果が負の数になる事もあるが、そのまま部分情報として扱う。
【０２７５】
分散情報分割部２６１＿６は、生成（分散）した３個若しくは６個分散情報を各更新モジュール１２１A〜１２５A及び１２７Aへ配布する（ステップＳ１０５５０）。
更新モジュール１２５A及び１２７Aに対して生成した部分情報ｄ＿６＿１〜ｄ＿６＿５及びｄ＿６＿７を配布する（ステップＳ１０６００及びＳ１０６１０）。他のモジュール１２１A〜１２４Aにおけるｉ番目のモジュールに対しては、部分情報ｄ＿６＿（ｉ−１）、ｄ＿６＿ｉ及びｄ＿６＿（ｉ＋１）を配布する（ステップＳ１０５６０、Ｓ１０５７０、Ｓ１０５８０及びＳ１０５９０）。なお、ｉ−１＝０の場合には、部分情報ｄ＿６＿７を配布する。
【０２７６】
更新モジュール１２１A〜１２５A及び１２７Aは、受信した各部分情報を分散情報更新部２６０＿ｊに一時的に格納する。
（追加時の第２更新処理）
ここでは、図３７のステップＳ７５５０にて示す追加時の第２更新処理について、図４６から図４８にて示す流れ図を用いて説明する。
【０２７７】
更新モジュール１２１Aの分散情報更新部２６０＿１は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿１”を用いて、新たな分散情報“Ｄ＿１’（＝Ｄ＿１＋ｄ＿６＿１）”を生成し、分散情報格納部２５１＿１に格納されている分散情報“Ｄ＿１”を新たな分散情報“Ｄ＿１’”に更新する（ステップＳ１０７００）。分散情報更新部２６０＿１は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿２”及び“ｄ＿６＿７”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿２’（＝Ｄ１＿２＋ｄ＿６＿２）”及び“Ｄ２＿７’（＝Ｄ２＿７＋ｄ＿６＿７）”を生成し、分散情報格納部２５１＿１に格納されている第１及び第２他モジュール分散情報“Ｄ１＿２”及び“Ｄ２＿７’”を新たな第１及び第２他モジュール分散情報“Ｄ１＿２’”及び“Ｄ２＿７’”に更新する（ステップＳ１０７５０）。
【０２７８】
更新モジュール１２２Aの分散情報更新部２６０＿２は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿２”を用いて新たな分散情報“Ｄ＿２’（＝Ｄ＿２＋ｄ＿６＿２）”を生成し、分散情報格納部２５１＿２に格納されている分散情報“Ｄ＿２”を新たな分散情報“Ｄ＿２’”に更新する（ステップＳ１０８００）。分散情報更新部２６０＿２は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿３”及び“ｄ＿６＿１”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿３’（＝Ｄ１＿３＋ｄ＿６＿３）”及び“Ｄ２＿１’（＝Ｄ２＿１＋ｄ＿６＿１）”を生成し、分散情報格納部２５１＿２に格納されている第１及び第２他モジュール分散情報“Ｄ１＿３”及び“Ｄ２＿１”を新たな第１及び第２他モジュール分散情報“Ｄ１＿３’”及び“Ｄ２＿１’”に更新する（ステップＳ１０８５０）。
【０２７９】
更新モジュール１２３Aの分散情報更新部２６０＿３は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿３”を用いて新たな分散情報“Ｄ＿３’（＝Ｄ＿３＋ｄ＿６＿３）”を生成し、分散情報格納部２５１＿３に格納されている分散情報“Ｄ＿３”を新たな分散情報“Ｄ＿３’”に更新する（ステップＳ１０９０）。分散情報更新部２６０＿３は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿４”及び“ｄ＿６＿２”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿４’（＝Ｄ１＿４＋ｄ＿６＿４）”及び“Ｄ２＿２’（＝Ｄ２＿２＋ｄ＿６＿２）”を生成し、分散情報格納部２５１＿３に格納されている第１及び第２他モジュール分散情報“Ｄ１＿４”及び“Ｄ２＿２”を新たな第１及び第２他モジュール分散情報“Ｄ１＿４’”及び“Ｄ２＿２’”に更新する（ステップＳ１０９５０）。
【０２８０】
更新モジュール１２４Aの分散情報更新部２６０＿４は、更新モジュール１２１Aから受け取った部分情報“ｄ＿６＿４”を用いて新たな分散情報“Ｄ＿４’（＝Ｄ＿４＋ｄ＿６＿４）”を生成し、分散情報格納部２５１＿４に格納されている分散情報“Ｄ＿４”を新たな分散情報“Ｄ＿４’”に更新する（ステップＳ１１０００）。分散情報更新部２６０＿４は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿５”及び“ｄ＿６＿３”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿５’（＝Ｄ１＿５＋ｄ＿６＿５）”及び“Ｄ２＿３’（＝Ｄ２＿３＋ｄ＿６＿３）”を生成し、分散情報格納部２５１＿４に格納されている第１及び第２他モジュール分散情報“Ｄ１＿５”及び“Ｄ２＿３”を新たな第１及び第２他モジュール分散情報“Ｄ１＿５’”及び“Ｄ２＿３’”に更新する（ステップＳ１１０５０）。
【０２８１】
更新モジュール１２５Aの分散情報更新部２６０＿５は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿５”を用いて新たな分散情報“Ｄ＿５’（＝Ｄ＿５＋ｄ＿６＿５）”を生成し、分散情報格納部２５１＿５に格納されている分散情報“Ｄ＿５”を新たな分散情報“Ｄ＿５’”に更新する（ステップＳ１１１００）。分散情報更新部２６０＿５は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿１”〜“ｄ＿６＿５”及び“ｄ＿６＿７”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿６’（＝Ｄ１＿６−（ｄ＿６＿１＋ｄ＿６＿２＋・・・＋ｄ＿６＿５＋ｄ＿６＿７）”及び“Ｄ２＿４’（＝Ｄ２＿４＋ｄ＿６＿４）”を生成し、分散情報格納部２５１＿５に格納されている第１及び第２他モジュール分散情報“Ｄ１＿６”及び“Ｄ２＿４”を新たな第１及び第２他モジュール分散情報“Ｄ１＿６’”及び“Ｄ２＿４’”に更新する（ステップＳ１１１５０）。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。
【０２８２】
更新モジュール１２６Aの分散情報更新部２６０＿６は、生成した部分情報“ｄ＿１＿６”を新たな分散情報“Ｄ＿６’（＝ｄ＿６＿６）”として、分散情報格納部２５１＿６に格納されている分散情報“Ｄ＿６”を新たな分散情報“Ｄ＿６’”に更新する（ステップＳ１１２００）。分散情報更新部２６０＿６は、生成した部分情報“ｄ＿６＿７”及び“ｄ＿６＿５”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿７’（＝Ｄ１＿７＋ｄ＿６＿７）”及び“Ｄ２＿５’（＝Ｄ２＿５＋ｄ＿６＿５）”を生成し、分散情報格納部２５１＿６に格納されている第１及び第２他モジュール分散情報“Ｄ１＿７”及び“Ｄ２＿５”を新たな第１及び第２他モジュール分散情報“Ｄ１＿７’”及び“Ｄ２＿５’”に更新する（ステップＳ１１２５０）。
【０２８３】
更新モジュール１２７Aの分散情報更新部２６０＿７は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿７”を用いて新たな分散情報“Ｄ＿７’（＝Ｄ＿７＋ｄ＿６＿７）”を生成し、分散情報格納部２５１＿７に格納されている分散情報“Ｄ＿７”を新たな分散情報“Ｄ＿７’”に更新する（ステップＳ１１３００）。分散情報更新部２６０＿７は、更新モジュール１２６Aから受け取った部分情報“ｄ＿６＿１”〜“ｄ＿１＿５”及び“ｄ＿１＿７”を用いて新たな第１及び第２他モジュール分散情報“Ｄ１＿１’（＝Ｄ１＿１＋ｄ＿６＿１）”及び“Ｄ２＿６’（＝Ｄ２＿６−（ｄ＿６＿１＋ｄ＿６＿２＋・・・＋ｄ＿６＿５＋ｄ＿６＿７））”を生成し、分散情報格納部２５１＿７に格納されている第１及び第２他モジュール分散情報“Ｄ１＿１”及び“Ｄ２＿６”を新たな第１及び第２他モジュール分散情報“Ｄ１＿１’”及び“Ｄ２＿６’”に更新する（ステップＳ１１３５０）。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。
（具体例）
追加処理後の更新モジュール１２１A〜１２７Aのそれぞれが保持する分散情報、第１及び第２他モジュール分散情報を、図４９にて示す。
【０２８４】
例えば、更新モジュール１２１Aは、追加処理後において、更新後の分散情報“Ｄ＿１’”２１１ｃ、第１他モジュール分散情報“Ｄ１＿２’”２１２＿１ｃ及び第２他モジュール分散情報“Ｄ２＿７’”２１７＿１ｃを保持している。
ここで、更新後の各分散情報“Ｄ＿１’”〜“Ｄ＿７’”により、秘密鍵“ｄ”が回復されることを以下に示す。
【０２８５】
Ｄ＿１’＋Ｄ＿２’＋Ｄ＿３’＋Ｄ＿４’＋Ｄ＿５’＋Ｄ＿６’＋Ｄ＿７’
＝  （Ｄ＿１＋ｄ＿６＿１）＋（Ｄ＿２＋ｄ＿６＿２）＋（Ｄ＿３＋ｄ＿６＿３）＋（Ｄ＿４＋ｄ＿６＿４）＋（Ｄ＿５＋ｄ＿６＿５）＋（ｄ＿６＿６）＋（Ｄ＿７＋ｄ＿６＿７）
＝  Ｄ＿１＋Ｄ＿２＋Ｄ＿３＋Ｄ＿４＋Ｄ＿５＋Ｄ＿７＋ｄ＿６＿１＋ｄ＿６＿２＋ｄ＿６＿３＋ｄ＿６＿４＋ｄ＿６＿５＋ｄ＿６＿６＋ｄ＿６＿７
＝  Ｄ＿１＋Ｄ＿２＋Ｄ＿３＋Ｄ＿４＋Ｄ＿５＋Ｄ＿６＋Ｄ＿７
＝  （ｄ＿１＿１）＋（ｄ＿２＋ｄ＿１＿２）＋（ｄ＿３＋ｄ＿１＿３）＋（ｄ＿４＋ｄ＿１＿４）＋（ｄ＿５＋ｄ＿１＿５）＋（ｄ＿６’＋ｄ＿１＿６）＋（ｄ＿７＋ｄ＿１＿７）
＝  ｄ＿２＋ｄ＿３＋ｄ＿４＋ｄ＿５＋ｄ＿６’＋ｄ＿７＋ｄ＿１＿１＋ｄ＿１＿２＋ｄ＿１＿３＋ｄ＿１＿４＋ｄ＿１＿５＋ｄ＿１＿６＋ｄ＿１＿７
＝  ｄ＿１’＋ｄ＿２＋ｄ＿３＋ｄ＿４＋ｄ＿５＋ｄ＿６’＋ｄ＿７
＝  （ｄ＿１−ｍ）＋ｄ＿２＋ｄ＿３＋ｄ＿４＋ｄ＿５＋（ｄ＿６−ｎ）＋ｍ＋ｎ
＝  ｄ＿１＋ｄ＿２＋ｄ＿３＋ｄ＿４＋ｄ＿５＋ｄ＿６＋ｄ＿７
＝  ｄ
このように、更新モジュール１２７Aの追加後も、それぞれの更新モジュールが保持する分散情報の総和を一定とすることが可能となるため、追加処理時において、ソフトウェア更新システムは、新しい秘密鍵“ｄ”を復元し分散情報を再生成することなく、更新モジュールを追加させることが可能となる。
（追加処理時の第１及び第２更新処理の必要性）
追加時における第１及び第２更新処理は、更新モジュール１２１Aと１２６Aが分散情報を持ちすぎるために必要になる処理である。
【０２８６】
具体的には、更新モジュール１２１Aは、追加処理のステップＳ７３００の終了後には、分散情報“ｄ＿１’”と他モジュール分散情報“ｄ１＿２”及びと“ｄ２＿７”の３つの分散情報を保持することになる。この時、他モジュール分散情報“ｄ２＿７”は、更新モジュール１２１Aが生成した変形情報ｍと更新モジュール１２６Aが生成した変形情報ｎの和になっている。そのため、他モジュール分散情報“ｄ２＿７”と更新モジュール１２１Aが生成した変形情報ｍから更新モジュール１２６Aが送信した変形情報ｎを求めることが出来る。さらに、追加処理前には更新前の他モジュール分散情報“ｄ２＿６”も保持していたため、この更新前の他モジュール分散情報“ｄ２＿６”と更新モジュール１２６Aが生成した変形情報ｎとから、更新後の分散情報“ｄ２＿６’（＝ｄ＿６’）”の値を求めることが出来る。この様に更新モジュール１２１Aは、本来は３つの分散情報しか保持しないはずが４つの分散情報を保持することが可能となり、分散情報を持ちすぎることになる。同様の事が更新モジュール１２６Aにも言えるため、更新モジュールの追加処理の最後に、このような分散情報の持ちすぎを解消するために、更新モジュール１２１Aと１２６Aが所有する分散情報の更新を行う必要がある。
【０２８７】
なお、追加される更新モジュールの所有する分散情報を生成するために２つの更新モジュールが変形情報を生成、送信する構成としたが、これに限定するものではなく、例えば追加される更新モジュール以外のすべての更新モジュールが変形情報を送信する構成にしてもよい。
（４９）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【０２８８】
また、本発明に係るソフトウェア更新装置は、その範囲を逸脱することなく本発明の趣旨に沿って様々な変形または修正が可能であることは言うまでもない。
【産業上の利用可能性】
【０２８９】
本発明は、ネットワークで接続された外部サーバから更新用のソフトウェアを取得し、取得したソフトウェアで自装置内のソフトウェアを更新するソフトウェア更新装置に広く適用することができる。
【符号の説明】
【０２９０】
１０００  ソフトウェア更新システム
１００    機器
１１０    アプリケーション
１１１    アプリケーション
１２０    保護制御モジュール
１３０    更新モジュール群
１３１    更新モジュール
１３２    更新モジュール
１３３    更新モジュール
１４０    アクセス制御モジュール
２００    更新サーバ
２１０    更新用ソフトウェア配布モジュール
２２０    アクセス情報取得鍵配布モジュール
３０１    監視制御部
３０２    改ざんチェック実行部
３０３    更新制御部
３０４    復号部
３０５    認証部
３０６    署名公開鍵保持部
３０７    検証鍵保持部
３０８    認証鍵対保持部
３０９    MAC値保持部
３１０    分散情報保持部
３１１    アクセス情報取得部
３１２    無効化処理部
４０１    暗号鍵生成部
４０２    暗号処理部
４０３    暗号鍵保持部
４０４    認証部
４０５    更新判定部
４０６    不正モジュール判定部
４０７    更新モジュール選択部
４０８    証明書生成部
４０９    署名秘密鍵保持部
４１０    更新用ソフトウェア保持部
５０１    制御部
５０２    復号ロード部
５０３    改ざん検出部
５０４    解析ツール検出部
５０５    暗復号鍵保持部
５０６    暗復号鍵生成部
５０７    暗復号鍵分散部
５０８    証明書生成部
５０９    暗復号鍵復元部
６０１    通信部
６０２    アクセス情報保持部
７０１    通信部
７０２    アクセス情報取得鍵保持部
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
所定のアプリケーションと、
前記所定のアプリケーションが改ざんされていないかを検証する保護制御モジュールと、
前記保護制御モジュールを更新する更新用の保護制御モジュールを外部サーバから受信し前記保護制御モジュールを更新する更新モジュールを複数含む更新モジュール群と、を備え、
前記更新モジュール群に含まれる複数の更新モジュールの各々は、
同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証を行い、
前記複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合、前記更新モジュール群に含まれる他の更新モジュールが、前記不正動作を行う可能性があると検証された更新モジュールを無効化する
ことを特徴とするソフトウェア更新装置。
【請求項２】
前記更新モジュール群に含まれる複数の更新モジュールの各々を無効化するための所定の情報を格納し、所定の暗号鍵で暗号化されたアクセス制御モジュールをさらに備え、
前記他の更新モジュールは、前記外部サーバにアクセスして前記外部サーバから前記所定の暗号鍵に対応した復号鍵を取得し、前記取得した復号鍵を用いてアクセス制御モジュールを復号し、
前記不正動作を行う可能性があると検証された更新モジュールを無効化するための所定の情報を前記アクセス制御モジュールから取得し、前記所定の情報に基づいて前記不正動作を行う可能性があると検証された更新モジュールを無効化する
ことを特徴とする請求項１記載のソフトウェア更新装置。
【請求項３】
前記更新モジュール群に含まれる複数の更新モジュールの各々を無効化するための所定の情報を格納しているアクセス制御モジュールをさらに備え、
前記所定の情報は、更新モジュール毎に異なる暗号鍵で暗号化されており、
前記他の更新モジュールは、前記外部サーバにアクセスし、前記不正動作を行う可能性があると検証された更新モジュールに関する所定の情報を暗号化した暗号鍵に対応した復号鍵を前記外部サーバから取得し、前記不正動作を行う可能性があると検証された更新モジュールに関する所定の情報を前記取得した復号鍵を用いて復号し、
前記復号された所定の情報に基づいて前記不正動作を行う可能性があると検証された更新モジュールを無効化する
ことを特徴とする請求項１記載のソフトウェア更新装置。
【請求項４】
前記所定の情報は、前記更新モジュール群に含まれる複数の更新モジュールの各々の格納位置情報である
ことを特徴とする請求項２または３の何れかに記載のソフトウェア更新装置。
【請求項５】
前記所定の情報は、前記更新モジュール群に含まれる複数の更新モジュールの各々を無効化するための処理手順を示す情報である
ことを特徴とする請求項２または３の何れかに記載のソフトウェア更新装置。
【請求項６】
前記他の更新モジュールは、前記格納位置情報に基づいて、前記不正動作を行う可能性があると検証された更新モジュールの全体を消去することで無効化する
ことを特徴とする請求項４記載のソフトウェア更新装置。
【請求項７】
前記格納位置情報は、前記更新モジュールが無効化される際に消去される消去部分を示し、
前記他の更新モジュールは、前記格納位置情報に基づいて、前記不正動作を行う可能性があると検証された更新モジュールの消去部分を消去することで無効化する
ことを特徴とする請求項４記載のソフトウェア更新装置。
【請求項８】
前記格納位置情報は、前記更新モジュールが無効化される際に消去されるコード部分を示し、
前記他の更新モジュールは、前記格納位置情報に基づいて、前記不正動作を行う可能性があると検証された更新モジュールのコード部分を消去することで無効化する
ことを特徴とする請求項４記載のソフトウェア更新装置。
【請求項９】
前記他の更新モジュールは、前記不正動作を行う可能性があると検証された更新モジュールを無効化した場合、前記アクセス制御モジュールに格納されている、無効化した更新モジュールについての所定の情報を消去する
ことを特徴とする請求項２または３の何れかに記載のソフトウェア更新装置。
【請求項１０】
前記無効化は、前記不正動作を行う可能性があると検証された更新モジュールが、検証対象となる更新モジュールを検証する際に参照する、当該検証対象の更新モジュールにアクセスするための情報を消去することである
ことを特徴とする請求項１記載のソフトウェア更新装置。
【請求項１１】
前記無効化は、前記不正動作を行う可能性があると検証された更新モジュールが、前記保護制御モジュールにアクセスするための情報を消去することである
ことを特徴とする請求項１記載のソフトウェア更新装置。
【請求項１２】
前記複数の更新モジュールの各々による検証は、当該更新モジュールが自更新モジュールを検証する場合を含む
ことを特徴とする請求項１記載のソフトウェア更新装置。
【請求項１３】
自更新モジュールが不正動作を行う可能性があることを検証した場合には、前記自更新モジュールは前記自更新モジュールを無効化する
ことを特徴とする請求項１２記載のソフトウェア更新装置。
【請求項１４】
前記複数の更新モジュールの各々は、前記選定した更新モジュールのハッシュ値を算出し、当該更新モジュールに予め付加されているハッシュ値と、算出したハッシュ値が一致するか判断することにより、前記検証を行う
ことを特徴とする請求項１記載のソフトウェア更新装置。
【請求項１５】
ソフトウェア更新装置と当該ソフトウェア更新装置に接続されるサーバとを含むソフトウェア更新システムであって、
前記ソフトウェア更新装置は、
所定のアプリケーションと、
前記所定のアプリケーションが改ざんされていないかを検証する保護制御モジュールと、
前記保護制御モジュールを更新する更新用の保護制御モジュールを前記サーバから受信し前記保護制御モジュールを更新する更新モジュールを複数含む更新モジュール群と、を備え、
前記サーバは、
前記保護制御モジュールを更新する更新用の保護制御モジュールを格納する格納部と、
前記更新用の保護制御モジュールを前記ソフトウェア更新装置に送信する通信部と、を備え、
前記更新モジュール群に含まれる複数の更新モジュールの各々は、
同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証を行い、
前記複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合、前記更新モジュール群に含まれる他の更新モジュールが、前記不正動作を行う可能性があると検証された更新モジュールを無効化する
ことを特徴とするソフトウェア更新システム。
【請求項１６】
無効化方法であって、
所定のアプリケーションが改ざんされていないかを検証する保護制御モジュールと、前記保護制御モジュールを更新する更新用の保護制御モジュールを外部サーバから受信し前記保護制御モジュールを更新する更新モジュールを複数含む更新モジュール群とを起動する起動ステップと、
前記所定のアプリケーションを実行する実行ステップとを含み、
前記更新モジュール群に含まれる複数の更新モジュールの各々は、
同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証を行い、
前記複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合、前記更新モジュール群に含まれる他の更新モジュールが、前記不正動作を行う可能性があると検証された更新モジュールを無効化する
ことを特徴とする無効化方法。
【請求項１７】
無効化プログラムであって、
前記無効化プログラムは、
所定のアプリケーションが改ざんされていないかを検証する保護制御モジュールと、
前記保護制御モジュールを更新する更新用の保護制御モジュールを外部サーバから受信し前記保護制御モジュールを更新する更新モジュールを複数含む更新モジュール群と、を含み、
前記更新モジュール群に含まれる複数の更新モジュールの各々は、
同時に起動している全ての更新モジュールが、少なくとも他の一つの更新モジュールの検証対象となるように、検証対象を選定して不正動作を行わないか検証する検証手順と、
前記複数の更新モジュールの何れかが不正動作を行う可能性があることが検証された場合、前記更新モジュール群に含まれる他の更新モジュールが、前記不正動作を行う可能性があると検証された更新モジュールを無効化する無効化手順とを含む処理をコンピュータに行わせる
無効化プログラム。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2009118801.tif 000052
【図２】
2009118801.tif 000053
【図３】
2009118801.tif 000054
【図４】
2009118801.tif 000055
【図５】
2009118801.tif 000056
【図６】
2009118801.tif 000057
【図７】
2009118801.tif 000058
【図８】
2009118801.tif 000059
【図９】
2009118801.tif 000060
【図１０】
2009118801.tif 000061
【図１１】
2009118801.tif 000062
【図１２】
2009118801.tif 000063
【図１３】
2009118801.tif 000064
【図１４】
2009118801.tif 000065
【図１５】
2009118801.tif 000066
【図１６】
2009118801.tif 000067
【図１７】
2009118801.tif 000068
【図１８】
2009118801.tif 000069
【図１９】
2009118801.tif 000070
【図２０】
2009118801.tif 000071
【図２１】
2009118801.tif 000072
【図２２】
2009118801.tif 000073
【図２３】
2009118801.tif 000074
【図２４】
2009118801.tif 000075
【図２５】
2009118801.tif 000076
【図２６】
2009118801.tif 000077
【図２７】
2009118801.tif 000078
【図２８】
2009118801.tif 000079
【図２９】
2009118801.tif 000080
【図３０】
2009118801.tif 000081
【図３１】
2009118801.tif 000082
【図３２】
2009118801.tif 000083
【図３３】
2009118801.tif 000084
【図３４】
2009118801.tif 000085
【図３５】
2009118801.tif 000086
【図３６】
2009118801.tif 000087
【図３７】
2009118801.tif 000088
【図３８】
2009118801.tif 000089
【図３９】
2009118801.tif 000090
【図４０】
2009118801.tif 000091
【図４１】
2009118801.tif 000092
【図４２】
2009118801.tif 000093
【図４３】
2009118801.tif 000094
【図４４】
2009118801.tif 000095
【図４５】
2009118801.tif 000096
【図４６】
2009118801.tif 000097
【図４７】
2009118801.tif 000098
【図４８】
2009118801.tif 000099
【図４９】
2009118801.tif 000100
【国際調査報告】
2009118801.tif 000101
2009118801.tif 000102
2009118801.tif 000103
2009118801.tif 000104