以下、図面に基づき本発明の実施の形態を説明する。
(実施の形態1)
1.ソフトウェア更新システム1000の構成
図1は、本発明の実施の形態1において、本発明に係るソフトウェア更新装置が適用されたソフトウェア更新システム1000の全体構成図である。ソフトウェア更新システム1000は、図1に示すように、機器100と更新サーバ200とから構成され、機器100は、ネットワークを介して更新サーバ200と接続されている。
1.1.機器100の構成
機器100は、ネットワークを介して、例えば、コンテンツ配信サーバから音楽や映像等のコンテンツを購入し再生したり、金融機関のシステムにアクセスし、ネットバンキング(預金の残高照会や口座振り込み等)を行ったりするなど、ユーザに対してネットワークを利用した様々な機能を提供するデータ処理装置である。
機器100は、アプリケーションソフト(以下、「アプリ」という)110、111と、保護制御モジュール120と、更新モジュール群130と、アクセス制御モジュール140とを含んで構成される。
アプリ110、111は、機器100を使用するユーザに対して、ネットワークを利用した機能を提供するソフトウェアであり、例えば、ネットワーク上のコンテンツ配信サーバ(不図示)から音楽や映像等のコンテンツを購入し、購入したコンテンツを再生するソフトウェアや、ネットワークを介して金融機関のシステム(不図示)にアクセスし、預金の残高照会や口座振り込み等のネットバンキングを行うソフトウェア等である。
アプリ110、111は、コンテンツ配信サーバや金融機関のシステムと認証を行うための認証鍵等の秘匿データを有している。この秘匿データは、悪意のある第三者(以下、「攻撃者」という)によりアプリから抜き取られ、不正に利用されないよう、保護される必要がある。
保護制御モジュール120は、攻撃者によりアプリ110、111が解析され、認証鍵等の秘匿データが抜き取られないようにアプリ110、111を保護するための機能を有するモジュールである。アプリを保護するための機能としては、例えば、アプリを利用しない時には暗号化して保存しておき、アプリを利用する時にのみ復号してメモリへロードする復号ロード機能や、アプリが改ざんされていないかをチェックする改ざん検出機能、デバッガなどの解析ツールが動作していないかをチェックする解析ツール検出機能などがある。保護制御モジュール120は、これらの機能の動作を制御し、アプリ110、111を保護する。
保護制御モジュール120は、改ざん検出機能や解析ツール検出機能により、攻撃者による攻撃を検出した場合には、アプリ110、111の動作を停止し、アプリ110、111が利用していたメモリ領域、特に秘匿データが記憶されたメモリ領域のクリア処理等を行い、秘匿データの漏洩を防止する。
更新モジュール群130は、複数の更新モジュール(ここでは3つ)から構成される。更新モジュール131、132、133は、機器100内部のソフトウェア(ここでは保護制御モジュール120)が改ざんされていないかを検出し、改ざんされている場合には、機器100外部の更新サーバ200から更新用のソフトウェア(保護制御モジュール121)をダウンロードし保護制御モジュールを更新する機能を持つ。
また、更新モジュール131、132、133は、攻撃者によって更新モジュール自体が改ざんされ、改ざんされた更新モジュールが不正に利用されることを防止するために、更新モジュール間で改ざん検出を実施する。更新モジュールの改ざんが検出された場合には、他の正常な更新モジュールは、後述するアクセス制御モジュール140から暗号化アクセス情報を、後述するアクセス情報取得鍵配布モジュールからアクセス情報取得鍵をそれぞれ取得し、取得した暗号化アクセス情報とアクセス情報取得鍵とに基づいて、改ざんされた更新モジュールを無効化する。これにより、更新モジュール群に含まれる一部の更新モジュールが攻撃され、改ざんされた場合であっても、それを検出し、攻撃に対処することが可能となる。
アクセス制御モジュール140は、更新モジュール131、132、133が他の更新モジュールを消去するために必要な情報(アクセス情報)を保持するモジュールである。アクセス情報は、消去対象となる更新モジュールを消去するために必要な情報(例えば、更新モジュールを消去するための専用ドライバや更新モジュールが配置されているアドレス、消去に必要な手順が書かれた手順書等)であり、更新モジュール毎にそれぞれ個別のアクセス情報取得鍵で暗号化されている。
1.2.更新サーバ200の構成
更新サーバ200は、機器100内部のソフトウェア(ここでは保護制御モジュール120)を更新するために必要な更新用のソフトウェア(保護制御モジュール121)を機器100に配布するソフトウェア配布装置である。
更新サーバ200は、更新用ソフトウェア配布モジュール210とアクセス情報取得鍵配布モジュール220とを含んで構成される。
更新用ソフトウェア配布モジュール210は、機器100内部のソフトウェア(保護制御モジュール120)が更新される際に、更新モジュール131、132、133と連携して動作し、更新用のソフトウェア(保護制御モジュール121)を機器100へ安全に送信するためのモジュールである。
アクセス情報取得鍵配布モジュール220は、機器100内部の更新モジュール131、132、133からのアクセス情報取得鍵取得要求に応じて、アクセス情報取得鍵を更新モジュールへ配布するモジュールである。
機器100内部のソフトウェア(保護制御モジュール120、更新モジュール131、132、133)が攻撃され改ざんされた場合には、改ざんされていない更新モジュールとアクセス制御モジュール140とアクセス情報取得鍵配布モジュール220とが連係して動作し、改ざんされたソフトウェアを消去または更新する。
なお、機器100と更新サーバ200との間のネットワークを介した通信には、通信データが暗号化されるなど、セキュリティの確保された通信路を用いてもよい。
続いて、各モジュールの詳細を順に説明する。
2.更新モジュールの詳細な構成
図2は、更新モジュールの機能ブロック図である。実際には、この構成は更新モジュールの数だけ存在するが、ここでは、代表的に更新モジュール131のものだけ示す。他の更新モジュールの構成も基本的に同一構成である。同図に示すように、更新モジュール131は、監視制御部301、改ざんチェック実行部302、更新制御部303、復号部304、認証部305、署名公開鍵保持部306、検証鍵保持部307、認証鍵対保持部308、MAC値保持部309、分散情報保持部310、アクセス情報取得部311、及び無効化処理部312を含んで構成される。
監視制御部301は、予め設定されている、改ざん検出対象となる更新モジュール(ここでは更新モジュール132)の識別子を保持しており、更新用ソフトウェア配布モジュール210から更新処理開始指示を受け付けると、識別子に対応する更新モジュールの改ざんチェックを、予め設定されているタイミングで、改ざんチェック実行部302に指示する。改ざん検出のタイミングについての詳細は、後述する。
改ざんチェック実行部302は、監視制御部301から改ざんチェック指示を受け付けると、識別子に対応する更新モジュールの改ざんチェックを実施し、改ざんチェック結果を更新用ソフトウェア配布モジュール210に送信する。
また、定期的あるいは不定期に、保護制御モジュール120の改ざんチェックを実施し、改ざんを検出した場合には、更新ソフトウェア配布モジュール210及び他の更新モジュールに改ざん検出通知を送信する。その一方で、他の更新モジュールから保護制御モジュール120の改ざん検出通知を受け付けた場合には、保護制御モジュール120の改ざんチェックを実施し、チェック結果を更新用ソフトウェア配布モジュール210に送信する。
また、機器100の全体の制御を司る制御部(不図示)から、初期化指示を受信すると、署名公開鍵保持部306から署名公開鍵を取得し、取得した署名公開鍵を用いて、改ざん検出対象となる更新モジュール及び保護制御モジュール120の改ざんチェックを行う。改ざんチェック結果に応じて、検証鍵保持部307から検証鍵を取得し、取得した検証鍵を用いて改ざん検出対象となる更新モジュール及び保護更新モジュール120のMAC値を生成し、各々のモジュールの識別子と対応付けて、MAC値保持部309に送信する。
さらに、更新用ソフトウェア配布モジュール210から更新処理終了通知を受け付けると、検証鍵保持部307から検証鍵を取得し、取得した検証鍵を用いて保護制御モジュール121のMAC値を生成し、MAC値保持部309に送信する。
更新制御部303は、機器100内部のソフトウェア(保護制御モジュール120)の更新を制御する。具体的には、他の更新モジュールまたは更新用ソフトウェア配布モジュール210から、暗号化されている更新用の保護制御モジュール121を受け取り、更新用ソフトウェア配布モジュール210から、更新用の保護制御モジュール121の証明書(例えば、更新用の保護制御モジュール121のハッシュ値が記述されている)、及び更新用の保護制御モジュール121を復号するための復号鍵を受け取ると、当該更新用の保護制御モジュール121を復号部304に復号させ、復号された更新用の保護制御モジュール121を他の更新モジュールへ送信し、あるいは機器100内部の保護制御モジュール120を復号された更新用の保護制御モジュール121に更新する。
また、更新用の保護制御モジュール121に更新した後、または他の更新モジュールから更新終了通知を受け付けると、更新用ソフトウェア配布モジュール210から受け取った証明書を用いて保護制御モジュールが正しく更新されたかの検証を行い、検証結果を更新用ソフトウェア配布モジュール210に送信する。
復号部304は、暗号化された更新用の保護制御モジュール121の復号を更新制御部303から依頼されると、更新制御部303から入力される復号鍵を用いて、暗号化された更新用の保護制御モジュール121を復号する。更新用ソフトウェア配布モジュール210から入力される復号鍵は、復号部304が保持する、更新モジュール131固有の鍵を用いて暗号化された状態あるため、復号部304は、復号鍵を使用する前に、更新モジュール131固有の鍵を用いて当該復号鍵を復号する。
認証部305は、更新用ソフトウェア配布モジュール210から認証処理開始指示を受け付けると、更新用ソフトウェア配布モジュール210と相互認証の処理を行い、互いに正しい権利を持ったソフトウェアであることを確認する。具体的には、認証鍵対保持部308から認証鍵を取得し、取得した認証鍵を用いて更新サーバ200を認証する。
署名公開鍵保持部306は、署名公開鍵を保持する。署名公開鍵は、更新モジュール131が機器100内のソフトウェア(保護制御モジュール120)の改ざんチェックを、改ざん検出用証明書を用いて行う場合に使用される。署名公開鍵と更新用ソフトウェア配布モジュール210が保持する署名秘密鍵とは、公開鍵暗号方式における鍵対になる。
検証鍵保持部307は、検証鍵を保持する。検証鍵は、更新モジュール131が機器100内のソフトウェア(保護制御モジュール120)の改ざんチェックを、メッセージ認証コード(MAC)値を用いて行う場合に使用される。
認証鍵対保持部308は、認証鍵対を保持する。認証鍵対は、更新モジュール131と更新用ソフトウェア配布モジュール210とが相互認証処理を行うときに用いられる。認証鍵対は、公開鍵暗号方式における公開鍵(認証公開鍵)と秘密鍵(認証秘密鍵)との鍵対で構成される。認証公開鍵には、更新用ソフトウェア配布モジュール210が保持する署名秘密鍵を用いて生成された証明書(認証鍵証明書)が付加されている。
MAC値保持部309は、改ざんチェック実行部302から入力される、改ざん検出対象となる更新モジュール及び保護更新モジュール120のMAC値と、各々のモジュールの識別子との対を保持する。
分散情報保持部310は、保護制御モジュール120から入力される、分散情報(share)と暗復号鍵証明書とを保持する。
アクセス情報取得部311は、更新用ソフトウェア配布モジュール210から、改ざんされた更新モジュールの無効化指示を受け付けると、アクセス情報取得鍵配布モジュール220に対しアクセス情報取得鍵の送付を依頼し、アクセス情報取得鍵を取得する。さらに、アクセス制御モジュール140から暗号化アクセス情報を取得し、アクセス情報取得鍵を用いて暗号化アクセス情報を復号し、復号されたアクセス情報を取得し、無効化処理部312に送信する。
無効化処理部312は、アクセス情報取得部313から入力されるアクセス情報に基づいて、改ざんされた更新モジュールを無効化する。無効化する方法としては、無効化対象の更新モジュールを全て消去する方法の他、改ざんされた部分や秘匿すべきデータなど無効化対象となる更新モジュールの一部を消去する方法や、機器100内部のプログラムやデータを読み込むための機能を消去する方法等がある。なお、無効化処理部312は、アクセス情報を取得するまで、ソフトウェアを無効化することはできない。
署名方式に関しては非特許文献1に、証明書に関しては非特許文献2に詳しく説明されているので、ここでの説明は省略する。
3.更新用ソフトウェア配布モジュール210の詳細な構成
図3は、本発明の実施の形態1における更新用ソフトウェア配布モジュール210の機能ブロック図である。同図に示すように、更新用ソフトウェア配布モジュール210は、暗号鍵生成部401、暗号処理部402、暗号鍵保持部403、認証部404、更新判定部405、不正モジュール判定部406、更新モジュール選択部407、証明書生成部408、署名秘密鍵保持部409、及び更新用ソフトウェア保持部410から構成される。
暗号鍵生成部401は、更新判定部405から保護制御モジュール120を更新する旨の通知を受け付けると、更新用の保護制御モジュール121を暗号化するための暗号鍵を複数生成し、生成した複数の暗号鍵を暗号鍵保持部403及び暗号処理部402に送信する。
暗号処理部402は、更新用ソフトウェア保持部410から更新用の保護制御モジュール121を取得し、暗号鍵生成部401から入力される複数の暗号鍵を用いて、取得した更新用の保護制御モジュール121を多重に暗号化する。そして、暗号化された更新用の保護制御モジュール121及び複数の暗号鍵を更新モジュール選択部407に送信する。
暗号鍵保持部403は、暗号鍵生成部401が生成した複数の暗号鍵や、更新モジュール選択部407により暗号化された複数の暗号鍵を保持する。
認証部404は、更新モジュール131、132、133と相互認証の処理を行う。具体的には、更新モジュールから送信される認証鍵(公開鍵)を用いて更新モジュール131、132、133を認証し、認証結果を更新判定部405に送信する。
更新判定部405は、更新モジュール131、132、133から保護制御モジュール120の改ざん検出通知を受け付けると、改ざん検出通知に基づいて、保護制御モジュールが改ざんされているか否かを最終判断する。保護制御モジュールが改ざんされていると判断した場合には、各更新モジュールに改ざん情報の収集を依頼する。その後、各更新モジュールから入力される改ざん情報に基づいて、保護制御モジュールを更新すべきか否かを判定し、更新すべきと判定した場合には、各更新モジュールに認証処理の開始を指示する。
また、認証処理開始の指示後、認証部404から入力される認証結果に応じて、更新処理開始指示を更新モジュール131、132、133に送信するとともに、不正モジュール判定部46、暗号鍵生成部401、及び証明書生成部408に保護制御モジュール120を更新する旨を通知する。
さらに、更新モジュール131、132、133から入力される検証結果通知に基づいて、保護制御モジュールが正しく更新されたか判定し、判定結果に応じて、保護制御モジュール120の更新終了通知を更新モジュール131、132、133に送信する。
不正モジュール判定部406は、更新判定部405から保護制御モジュール120を更新する旨の通知を受け付けると、更新モジュール131、132、133から入力される各更新モジュールの改ざんチェック結果に基づいて、各更新モジュールが改ざんされているかどうかの判定、及び更新モジュールが改ざんされていると判定した場合、どの更新モジュールが改ざんされたかを判定する。判定後、判定結果を更新モジュール選択部407に送信する。
更新モジュール選択部407は、不正モジュール判定部406から入力される判定結果に基づいて、保護制御モジュール120を更新する際に使用する更新モジュールを複数選択する。そして、暗号処理部402から入力される、更新用の保護制御モジュール121の暗号化に使用した複数の暗号鍵を、更新モジュール選択部407が選択した各更新モジュール固有の鍵を用いて暗号化する。暗号化した鍵を、暗号処理部402から入力される、暗号化された保護制御モジュールとともに、選択した更新モジュールへ送付する。暗号化された保護制御モジュールの証明書は、各更新モジュールに送付される。
なお、暗号化された保護制御モジュール121及び暗号鍵は、選択された更新モジュールへ一度に送信されるのではなく、更新処理の中で、それぞれのデータが必要になったタイミングで、各更新モジュールへ送信される。更新処理におけるタイミングに関しては後述する。
また、正常な更新モジュールに対し、改ざんされた更新モジュールを無効化するよう指示するとともに、アクセス情報取得鍵配布モジュール220に無効化に関する情報を通知する。
証明書生成部408は、更新判定部405から保護制御モジュール120を更新する旨の通知を受け付けると、署名秘密鍵保持部409から署名秘密鍵を、更新用ソフトウェア保持部410から更新用の保護制御モジュール121をそれぞれ取得し、取得した更新用の保護制御モジュール121に対して、正しく更新されたかを検証するための更新検証証明書を、取得した署名秘密鍵を用いて生成し、更新モジュール選択部407に送信する。
また、署名秘密鍵を用いて、更新モジュール131、132、133の認証公開鍵に対して認証証明書を生成する。
署名秘密鍵保持部409は、証明書生成部408による証明書の生成に用いられる署名秘密鍵を保持する。
更新用ソフトウェア保持部410は、保護制御モジュール120が改ざんされた場合に用いられ、当該保護制御モジュールを更新するための更新用の保護制御モジュール121を保持する。ここで、更新用の保護制御モジュール121は、正常なものであることが保障されているものとし、必ずしも最新版の保護制御モジュールである必要はない。
4.保護制御モジュールの詳細な構成
図4は、本発明の実施の形態1における保護制御モジュール120の機能ブロック図である。同図に示すように、保護制御モジュール120は、制御部501、復号ロード部502、改ざん検出部503、解析ツール検出部504、暗復号鍵保持部505、暗復号鍵生成部506、暗復号鍵分散部507、証明書生成部508、及び暗復号鍵復元部509を含んで構成される。
制御部501は、復号ロード部502、改ざん検出部503、及び解析ツール検出部504を制御し、アプリ110、111が攻撃者により攻撃されている場合には、それを検出する。
復号ロード部502は、暗号化されて機器100内部に保持されているアプリ110、111が実行される際に、暗復号鍵保持部505に保持されている暗復号鍵を用いてアプリを復号し、メモリ上にロードする処理を行う。
また、アプリ110、111実行中に、他のアプリへのコンテキストスイッチが発生した場合には、暗復号鍵を用いてメモリ上のデータを暗号化し、再びアプリ110、111へコンテキストスイッチしたときに、暗号化したデータを復号する。
さらに、後述する再暗号化処理において、暗復号鍵復元部509から入力される復元された旧暗復号鍵を用いてアプリ110、111を復号し、暗復号鍵保持部505に保持されている新たな暗復号鍵でアプリ110、111を暗号化する。
改ざん検出部503は、アプリ110、111が改ざんされているか検出する改ざん検出処理を実行する。改ざん検出処理には、アプリ110、111に付加されている改ざん検出用の証明書を用いて改ざん検出を行う方法と、MAC値を用いて改ざん検出を行う方法とがある。
解析ツール検出部504は、攻撃者がアプリ110、111を攻撃しようとして、デバッガ等の解析ツールをインストールし動作させたときに、解析ツールの動作を検出する。検出方法としては、例えば、ファイル名を検索する方法や、デバッガが使用する特殊なレジスタが使われているかを調べる方法、デバッガが設定する割り込みを検出する方法などがある。
暗復号鍵保持部505は、後述する初期化処理時に埋め込まれ、アプリ110、111を暗復号するための暗復号鍵を保持している。また、暗復号鍵生成部506にて新たに暗復号鍵が生成されると、暗復号鍵生成部506から入力される暗復号鍵を保持する。
暗復号鍵生成部506は、暗復号鍵復元部509から暗復号鍵を復元した旨の通知を受け付けると、アプリ110、111を暗復号するための新たな暗復号鍵を生成する。生成した暗復号鍵を暗復号鍵保持部505、証明書生成部508、及び暗復号鍵分散部507に送信する。
暗復号鍵分散部507は、後述する初期設計時や次ラウンド準備時に、暗復号鍵生成部507から入力される暗復号鍵に基づいて、秘密分散法を用いて分散情報を生成し、生成した分散情報を更新モジュール131、132、133に送信する。
証明書生成部508は、暗復号鍵生成部506から入力される暗復号鍵に基づいて証明書を生成し、生成した証明書を更新モジュール131、132、133に送信する。証明書は、暗復号鍵から生成される分散情報を復元する際に、正しく復元できたかの検証に使用される。
暗復号鍵復元部509は、更新モジュール131、132、133から分散情報及び暗復号鍵証明書を取得し、取得した分散情報及び暗復号鍵証明書に基づいて、旧暗復号鍵を復元する。復元した旧暗復号鍵を復号ロード部502に送信する。また、暗復号鍵生成部506に暗復号鍵を復元した旨を通知する。
5.アクセス制御モジュール
図5は、本発明の実施の形態1におけるアクセス制御モジュール140の機能ブロック図である。同図に示すように、アクセス制御モジュール140は、通信部601と、アクセス情報保持部602とから構成される。
通信部601は、更新モジュール131、132、133からアクセス情報の取得依頼を受信する。アクセス情報取得依頼に基づいて、不正に改ざんされた更新モジュールに対応するアクセス情報をアクセス情報保持部602から取得し、取得したアクセス情報取得を依頼してきた更新モジュールへ送信する。
アクセス情報保持部602は、更新モジュール毎に当該更新モジュールを消去するためのアクセス情報を保持する。アクセス情報は、更新モジュール毎にそれぞれ個別のアクセス情報取得鍵で暗号化され、識別子(更新モジュール識別子)等により、各更新モジュールと対応付けられる。
6.アクセス情報取得鍵配布モジュール
図6は、本発明の実施の形態1におけるアクセス情報取得鍵配布モジュール220の機能ブロック図である。同図に示すように、アクセス情報取得鍵配布モジュール220は、通信部701と、アクセス情報取得鍵保持部702とから構成される。
通信部701は、更新モジュール131、132、133からアクセス情報取得鍵の取得依頼を、更新モジュール選択部407から無効化に関する情報の通知をそれぞれ受信する。アクセス情報取得鍵の取得依頼及び無効化に関する情報に基づいて、当該取得依頼が正しいか否かを判断し、判断結果に応じて、消去対象となる更新モジュールに対応するアクセス情報取得鍵をアクセス情報取得鍵保持部702から取得し、依頼してきた更新モジュールへ送信する。
アクセス情報取得鍵保持部702は、アクセス制御モジュール140が保持している、暗号化された各アクセス情報を復号するためのアクセス情報取得鍵を保持する。アクセス情報取得鍵は、識別子(更新モジュール識別子)等により、各更新モジュールと対応付けられる。
7.機器100のハードウェア構成
続いて、機器100のハードウェア構成について説明する。図7は、機器100のハードウェア構成を示す図である。同図に示すように、機器100は、CPU(Central Processing Unit)11、不揮発メモリ(例えば、EEPROM(Electrically Erasable and Programmable Read Only Memory))12、RAM(Random Access Memory)13、及びNIC(Network Interface Card)14等を含んで構成され、これらはバスを介して相互に通信可能に接続されている。
EEPROM12には、保護制御モジュール120、更新モジュール131、132、133、及びアプリ110、111等が格納されている。
EEPROM12に格納されている制御用の各種モジュールをCPU11が実行することにより、各種モジュールの各機能部の制御は実現される。各機能部は、具体的には、コンピュータプログラムによって記述され実現される。
RAM13は、CPU11のワークエリアとして用いられる。RAM13には更新モジュール131、132、133及びアプリ110、111がロードされる。改ざんチェック及び無効化の対象となる更新モジュールは、RAM13上で動作している更新モジュールである。
NICは、ネットワークに接続するための拡張カードである。
8.ソフトウェア階層
続いて、機器100におけるソフトウェア階層について説明する。図8は、機器100のソフトウェア階層を示す図である。同図に示すように、アクセス制御モジュール140及び更新モジュール群130は、OS150の中に組み込まれている。アプリ110、111はOS150上で動作し、保護制御モジュール120はブートローダ160等とともにOSの管理外にある。機器100の起動の際には、まず保護制御モジュール120及び更新モジュール群130が起動された上でアプリケーションが実行される。
9.ソフトウェア更新システム1000の動作
9.1.ソフトウェア更新システム1000の動作概略
続いて、ソフトウェア更新システム1000の動作を説明する。初めに、ソフトウェア更新システム1000の大まかな処理を説明する。大まかな処理として、以下の7つの処理がある。
1つ目の処理は、ソフトウェア(保護制御モジュール120)を更新するために必要となる各種鍵データや、ソフトウェア更新後に必要となるデータ(秘密分散法を用いて分散した分散情報)などを更新モジュール131、132、133のそれぞれに埋め込む処理(初期設計処理)である。
2つ目の処理は、機器100内部のソフトウェア(保護制御モジュール120)が改ざんされていないかを検知する処理(検知処理)である。
3つ目の処理は、改ざんが検出された時に、改ざんされたソフトウェアを解析し、改ざんされたモジュールを含むソフトウェアを更新するかどうかを判断し、更新する場合は更に、更新モジュール131、132、133へ更新処理の実施を通知する処理(解析・判断処理)である。
4つ目の処理は、更新モジュール131、132、133と更新用ソフトウェア配布モジュール210とが互いに正しいソフトウェアであるかどうかを確認するために、相互に行う認証処理(相互認証処理)である。
5つ目の処理は、更新モジュール間で改ざんチェックを行うとともに更新用のソフトウェアを機器100へインストールし、更新モジュール131、132、133へ埋め込まれた分散情報からデータを復元する処理(回復処理)である。
6つ目の処理は、次のソフトウェア更新のための鍵データや分散情報を生成し、各更新モジュールに埋め込む処理(次ラウンド準備処理)である。
7つ目の処理は、相互認証処理や回復処理において、更新モジュール131、132、133が不正に改ざんされたことを検出したときに、不正に改ざんされた更新モジュールを消去する処理(無効化処理)である。
上記7つの処理のうち、無効化処理以外の6つの処理の関係は、図9に示す関係になる。無効化処理は、それぞれの処理の中で必要に応じて呼び出される。図9は、ソフトウェア更新システム1000の全体的な動作の流れを示すフローチャートである。
ソフトウェア更新システム1000では、機器100が工場で製造される際に初期設計処理が行われ、各更新モジュール131、132、133へ分散情報が埋め込まれる(ステップS100)。その後、機器100が工場から出荷され、ユーザの利用に供される。
ユーザにより機器100が利用される際には、機器100内部では、保護制御モジュール120がアプリ110、111を攻撃者による攻撃から保護する。これと同時に、更新モジュール131、132、133が保護制御モジュール120の改ざん検出を実施し、保護制御モジュール120が攻撃されていないかをチェックする検知処理を行う(ステップS200)。
検知処理を行った結果、保護制御モジュール120が改ざんされたと判明した場合には、解析・判断処理(ステップS300)、相互認証処理(ステップS400)、回復処理(ステップS500)、次ラウンド準備処理(ステップS600)を行い、再び検知処理(ステップS200)へ戻る。
なお、上記すべての処理が必要ではなく、少なくとも外部から更新のトリガを与えられて、更新を行う処理(回復処理)があればよい。
続いて、上記7つの処理について、その詳細を順に説明する。
9.2.初期設計時の動作
まず、初期化処理について説明する。図11は、初期設計時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール131、132、133の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
機器100が工場で製造される際に、機器100の不揮発メモリへアプリ110、111、保護制御モジュール120、更新モジュール131、132、133、及びアクセス制御モジュールがインストール(書き込み)される(ステップS101)。これらのソフトウェアには、ソフトウェアが改ざんされているかどうかを検証するための証明書(改ざん検出用証明書)が付加されている。この改ざん検出用証明書は、更新用ソフトウェア配布モジュール210が保持する署名秘密鍵により署名されている。上記ソフトウェア以外にも、機器100の動作に必要なソフトウェアがインストールされる。ここで、初期化処理の際に機器100に埋め込まれる鍵について説明する。図10は、機器100に埋め込まれる鍵を模式的に示す図である。更新モジュールについては、代表的に更新モジュール131のものだけ示す。本図に示すように、保護制御モジュール120には暗復号鍵が、更新モジュール131、132、133には署名公開鍵、検証鍵、及び認証鍵対がそれぞれ埋め込まれる。また、更新モジュール131、132、133には、それぞれの更新モジュールを識別するための更新モジュール識別子も埋め込まれる。
暗復号鍵は、アプリ110、111を暗復号するための鍵であり、アプリ110、111は、暗復号鍵を用いて暗号化された状態で不揮発メモリへ記憶され、実行時には保護制御モジュール120により暗復号鍵を用いて復号された後、実行される。コンテキストを切替えながら複数のアプリを実行する場合には、コンテキスト切替えのタイミングで、暗復号鍵を用いて、アプリ110、111の暗復号を実施し、デバッガなどの解析ツールにより、アプリ110、111実行時のデータが抜き取られることを防止する。
更新モジュール131、132、133に埋め込まれる鍵のうち、署名公開鍵は、全ての更新モジュールで共通とし、検証鍵と認証鍵対とは、更新モジュール毎に異なるものとする。また、分散情報ペアは、更新モジュール毎に異なるものとする。
図11に戻って、各ソフトウェアのインストール後、機器100の初期設定を行うソフトウェアや、正常に動作するかをテストするためのソフトウェアなどを実行し、初期化処理を行い(ステップS102)、保護制御モジュール120及び更新モジュール131、132、133に初期化指示を送信する(ステップS103)。初期化指示を受信する保護制御モジュール120及び更新モジュール131、132、133でもそれぞれ初期化処理が行われる。
保護制御モジュール120は、初期化指示を受信すると(ステップS104a)、秘密分散法を用いて暗復号鍵から分散情報を生成する(ステップS105)。さらに、暗復号鍵の復元時に、正しく復元できたかを確認するための証明書(暗復号鍵証明書)を、署名秘密鍵を用いて生成する(ステップS106)。生成した分散情報と暗復号鍵証明書とをそれぞれ、更新モジュール131、132、133へ送信する(ステップS107)。ここで、分散情報は、更新モジュールと同数だけ生成され、それぞれの更新モジュール131、132、133には、異なる分散情報のペアが送信される。また、各分散情報にはどの分散情報かを識別するための識別子が付加される。暗復号鍵証明書については、それぞれの更新モジュール131、132、133へ同じものが送信される。
更新モジュール群は、初期化指示を受信し(ステップS104b)、分散情報と暗復号鍵証明書とを受信すると(ステップS108)、更新モジュール初期化処理を行う(ステップS109)。
図12は、更新モジュール初期化処理を示すフローチャートである。本図では、代表的に更新モジュール131のものだけ示す。他の更新モジュールの動作も基本的に同一である。
まず、更新モジュール131は、保護制御モジュール120から受信した分散情報のペアと暗復号鍵証明書とを分散情報保持部310に保持する(ステップS111)。
改ざん検出対象となる他の更新モジュール及び保護制御モジュール120の改ざん検出用証明書の検証を実施する(ステップS112)。この検証は、各モジュールからハッシュ値を生成し、生成したハッシュ値とそれぞれの改ざん検出用証明書に記述されているハッシュ値とを比較することにより行われる。
生成した各ハッシュ値がそれぞれの改ざん検出用証明書に記述されているハッシュ値と一致するか否かを判定し(ステップS113)、各ハッシュ値がそれぞれの改ざん検出用証明書に記述されているハッシュ値と一致すれば(ステップ113でYes)、改ざん検出対象となる他の更新モジュール及び保護制御モジュール120それぞれに対してMAC値を生成し、MAC値テーブルとしてMAC値保持部309に保持する(ステップS114)。
少なくとも何れか一方のハッシュ値が改ざん検出用証明書に記述されているハッシュ値と一致しなければ(ステップS113でNo)、エラーを出力して処理を停止する(ステップS115)。
9.3.検知時の動作
続いて、検知処理について説明する。機器100は、初期化処理を終えると工場から出荷され、ユーザの元へ送られる。ユーザが機器100を使用し、アプリ110、111を利用しているときには、機器100内部では、保護制御モジュール120が復号ロード機能や改ざん検出機能、解析ツール検出機能などの機能を制御し、アプリ110、111を攻撃者による攻撃から保護する。
図13は、検知時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。検知処理においては、まず、更新モジュール131、132、133が、保護制御モジュール120の改ざん検出を実施する(ステップS201)。改ざん検出は、保護制御モジュール120のMAC値を、検証鍵を使用して計算し、MAC値テーブルに保持されている、初期設計時に算出した保護制御モジュール120のMAC値と比較することで、行われる。なお、本図では記載を簡略化し、更新モジュール131のみが保護制御モジュールが改ざんされているかをチェックしているが、当然、更新モジュール132、133でも同様の処理が行われる。その後の処理についても、更新モジュール131が保護制御モジュールの改ざんを検出した場合を中心に記載しているが、更新モジュール132、133が保護制御モジュールの改ざんを検出した場合も基本的には同様の処理が行われる。
保護制御モジュール120が改ざんされているか否か、言い換えるとMAC値が一致するか否かを判定し(ステップS202)、保護制御モジュール120が改ざんされていると判定した場合には(ステップS202でYes)、更新用ソフトウェア配布モジュール210と他の更新モジュールとに改ざん検出通知を送信する(ステップS203)。
保護制御モジュール120が改ざんされていないと判定した場合には(ステップS202でNo)、更新用ソフトウェア配布モジュール210や他の更新モジュールへの通知を行わず、改ざん検出処理(S201)へ戻る。
更新モジュール132、133は、更新モジュール131から改ざん検出通知を受信すると(ステップS204b)、検証鍵及びMAC値を利用して、保護制御モジュール120の改ざんチェックを実施し(ステップS205)、改ざんチェック結果を更新用ソフトウェア配布モジュール210へ送信する(ステップS206)。
更新用ソフトウェア配布モジュール210は、更新モジュール131から改ざん検出通知を(ステップS204a)、更新モジュール132、133から改ざんチェック結果をそれぞれ受信する(ステップS207)。
9.4.解析・判断時の動作
続いて、解析判断処理について説明する。図14、15は、解析・判断時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール131、132、133の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
検知処理において、更新用ソフトウェア配布モジュール210が更新モジュール131、132、133から改ざん検出通知及び改ざんチェック結果を受信した場合には(ステップS204a及びS207)、受信した改ざん検出通知及び改ざんチェック結果に基づいて、保護制御モジュール120が改ざんされているか否かを判定する(ステップS301)。判定方法としては、例えば、一定数の更新モジュール(例えば、過半数等)が改ざんされていると判定している場合には、保護制御モジュール120は改ざんされていると判定し、逆に、過半数の更新モジュールが改ざんされていないと判定している場合には、保護制御モジュール120は改ざんされていないと判定する。
保護制御モジュール120が改ざんされていないと判定した場合には(ステップS301でNo)、検知処理に戻る(ステップS302)。
保護制御モジュール120が改ざんされていると判定した場合には(ステップS301でYes)、更新用ソフトウェア配布モジュール210は、更新モジュール131、132、133に対して保護制御モジュール120のどの部分が改ざんされたかを示す改ざん情報を通知するよう依頼する(ステップS303)。
更新モジュール群は、改ざん情報の通知依頼を受け付けると(ステップS304)、改ざん情報を収集する(ステップS305)。改ざん情報の収集は、例えば、保護制御モジュール120が複数の部分に分けられており、予め部分毎に証明書(ハッシュ値が記述されている)が発行されていることを前提とすれば、部分毎にハッシュ値を算出し、算出された各ハッシュ値が各証明書に記述されたハッシュ値と一致するか否かにより、行うことができる。
更新モジュール群は、改ざん情報を収集すると、改ざん情報を更新用ソフトウェア配布モジュール210に送信する(ステップS306)。
更新用ソフトウェア配布モジュール210は、更新モジュール群から改ざん情報を受信すると(ステップS307)、受信した改ざん情報を解析し(ステップS308)、解析結果に基づいて、保護制御モジュール120を無効化するか否かを判断する(ステップS309)。
保護制御モジュール120を無効化すると判断した場合には(ステップS309でYes)、アプリ110、111を介して、当該アプリ110、111にサービスを提供しているサーバ(不図示)に機器100を無効化するよう依頼する(ステップS310、311)。
保護制御モジュール120を無効化しないと判断した場合には(ステップS309でNo)、保護制御モジュール120を更新するか否かを判断する(ステップS312)。
保護制御モジュール120を更新すると判断した場合には(ステップS312でYes)、更新モジュール群に認証処理開始指示を送信し(ステップS313)、更新モジュール群は、認証処理開始指示を受信する(ステップS314)。
保護制御モジュール120を更新しないと判断した場合には(ステップS312でNo)、検知処理に戻る(ステップS302)。
保護制御モジュール120の無効化及び更新は、例えば、保護制御モジュール120の重要な部分が改ざんされているか、一定部分以上改ざんされているか等を判断することにより行われる。
9.5.相互認証時の動作
続いて、相互認証処理について説明する。解析・判断処理において、保護制御モジュール120を更新する必要があると判断され、更新モジュール131、132、133へ認証処理の開始を指示した後、更新用ソフトウェア配布モジュール210と各更新モジュール131、132、133との間で、それぞれ1対1の相互認証処理が行われる。これにより、機器100が不正な更新サーバへ接続されることや、更新サーバ200が不正な機器へ接続されることを防止することができる。相互認証には、更新サーバ200は署名秘密鍵と署名公開鍵を使用し、各更新モジュール131、132、133は認証鍵対(認証秘密鍵、認証公開鍵)を使用する。
相互認証時の動作としては、まず、更新モジュール131、132、133が、更新用ソフトウェア配布モジュール210を認証する。図16は、更新モジュール131が更新用ソフトウェア配布モジュール210を認証する時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。本図では、代表的に更新モジュール131のものだけ示す。他の更新モジュールの動作も基本的に同一である。
更新モジュール131は、乱数生成器を用いて乱数を生成し(ステップS401)、生成した乱数をチャレンジデータとして更新用ソフトウェア配布モジュール210へ送信する(ステップS402)。この時、更新モジュール131を識別するための更新モジュール識別子もチャレンジデータと一緒に送信する。
更新用ソフトウェア配布モジュール210は、各更新モジュールからチャレンジデータを受信すると(ステップS403)、受信したチャレンジデータに対し、署名秘密鍵を用いて署名生成を行い(ステップS404)、生成した署名をレスポンスデータとして、送信してきた更新モジュールへ返信する(ステップS405)。
更新モジュール131は、更新用ソフトウェア配布モジュール210からレスポンスデータを受信すると(ステップS406)、受信したレスポンスデータが送信したチャレンジデータに対する署名になっているかを、署名公開鍵を用いて署名検証する(ステップS407)。
検証した結果、レスポンスデータが送信したチャレンジデータに対する署名になっている、すなわち、更新用ソフトウェア配布モジュール210が正当なモジュールである場合には(ステップS408でYes)、処理を継続する。
レスポンスデータが送信したチャレンジデータに対する署名になっていない、すなわち、更新用ソフトウェア配布モジュール210が正当なモジュールでない場合には(ステップS408でNo)、エラーを出力して、処理を停止する(ステップS409)。
次に、更新用ソフトウェア配布モジュール210がそれぞれの更新モジュール131、132、133を認証する。図17は、更新用ソフトウェア配布モジュール210がそれぞれの更新モジュール131、132、133を認証する時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール131、132、133の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
更新用ソフトウェア配布モジュール210は、乱数生成器を用いて、上記処理においてチャレンジデータを送信してきた更新モジュールの数だけ乱数を生成し(ステップS411)、生成した各乱数をチャレンジデータとして、更新モジュールと一対一に対応する形態で、送信する(ステップS412)。
更新モジュール群は、更新用ソフトウェア配布モジュール210からチャレンジデータを受信すると(ステップS413)、受信したチャレンジデータに対し、認証秘密鍵を用いて署名生成を行い(ステップS414)、生成した署名をレスポンスデータとして更新用ソフトウェア配布モジュール210へ返信する(ステップS415)。その際、認証公開鍵と認証鍵証明書とを併せて更新用ソフトウェア配布モジュール210へ返信する(ステップS415)。
更新用ソフトウェア配布モジュール210は、更新モジュール群からレスポンスデータ、認証公開鍵、及び認証鍵証明書を受信すると(ステップS416)、認証鍵証明書が、更新用ソフトウェア配布モジュール210により発行された証明書であるかを検証した後、認証鍵証明書を使用して認証公開鍵の検証を行う(ステップS417)。
検証した結果、認証鍵証明書あるいは認証公開鍵に問題があれば(ステップS418でNo)、処理を停止する(ステップS419)。
検証した結果、認証鍵証明書及び認証公開鍵ともに問題がなければ(ステップS418でYes)、受信したレスポンスデータが、更新用ソフトウェア配布モジュール210が送信したチャレンジデータの署名になっているかを、認証公開鍵を用いて署名検証する(ステップS420)。そして、検証結果に基づいて、回復処理を行うか否かを判定する。この判定は、例えば、署名検証により、正当なモジュールであると検証できた更新モジュールの数が予め設定されている回復処理に必要な数以上あるかを判断することにより、行われる(ステップS421)。
正当なモジュールであると検証できた更新モジュールが、回復処理に必要な数に満たないと判定した場合には(ステップS421でNo)、処理を停止する(ステップS419)。
正当なモジュールであると検証できた更新モジュールが、回復処理に必要な数を満たすと判定した場合には(ステップS421でYes)、正当なモジュールであると検証できた更新モジュールに更新処理開始指示を送信し(ステップS422)、正当なモジュールであると検証された更新モジュールは、更新処理開始指示を受信する(ステップS423)。以上で相互認証処理を終了する。
なお、更新用ソフトウェア配布モジュール210は、相互認証処理において、認証できた全ての更新モジュールの更新モジュール識別子からなる認証リストを作成し、以降の回復処理では、この認証リストに記載されている更新モジュールのみを利用して処理を実施する。
9.6.回復時の動作
続いて、回復処理について図18〜24を用いて説明する。相互認証処理において、相互認証が成功した場合には、改ざんされた保護制御モジュール120を更新用の保護制御モジュール(更新用保護制御モジュール)121へ更新する回復処理を実施する。図18は、回復処理時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。回復処理は、大きく3つの処理からなる。
1つ目の処理は、更新モジュール131、132、133が他の更新モジュールに対して改ざん検出処理を実施する監視処理(ステップS501)である。
2つ目の処理は、更新用保護制御モジュール121を用いて保護制御モジュール120を更新する更新処理(ステップS502)である。
3つ目の処理は、暗号化されたアプリ110、111を再暗号化する再暗号化処理(ステップS503)である。
なお、上記3つの処理がすべて必要ではなく、他の更新モジュールに対して改ざん検出処理を実施する監視処理(ステップS501)、及び外部から更新のトリガを与えられて、更新用保護制御モジュール121を用いて保護制御モジュール120を更新する更新処理(ステップS502)があればよい。
上記3つの処理について、その詳細を順に説明する。
9.6.1.監視処理
監視処理では、更新モジュール群130内の更新モジュール131、132、133が、更新モジュール群130内の他の更新モジュールに対して改ざん検出の処理を実施する。これにより、回復処理中に一部の更新モジュールが攻撃者により改ざんされた場合にも、改ざん検出が可能となる。さらに、監視処理を定期的に実施することで、更新用保護制御モジュール121が完全に漏洩する前に改ざんを検出し、漏洩を防止することが可能となる。
以下、監視処理の一例を、フローチャートを用いて詳細に説明する。図19は、監視処理を示すフローチャートである。
まず、更新モジュール131は、更新モジュール132に対し改ざん検出処理を実施し(ステップS511a)、更新モジュール132は、更新モジュール133に対し改ざん検出処理を実施し(ステップS511b)、更新モジュール133は、更新モジュール131に対し改ざん検出処理を実施する(ステップS511c)。改ざん検出は、更新モジュール131、132、133のMAC値を、検証鍵を使用して計算し、MAC値テーブルに保持されている、初期設計時に計算したMAC値と比較することにより、行われる。また、更新モジュール131、132、133のハッシュ値を算出し、算出したハッシュ値と、各更新モジュールに予め付加されている証明書に記述されているハッシュ値とを比較することにより行われるとしてもよい。
各更新モジュールは、改ざん検出結果を更新用ソフトウェア配布モジュール210へ通知する(ステップS512)。
更新用ソフトウェア配布モジュール210は、各更新モジュールから改ざん検出結果を受信し(ステップS513)、改ざんされた更新モジュールがあるか否かを判定する(ステップS514)。
改ざんされた更新モジュールがあると判定した場合には(ステップS514でYes)、更新用ソフトウェア配布モジュール210は、直ちに回復処理を停止する(ステップS515)。
改ざんされた更新モジュールがないと判定した場合には(ステップS514でNo)、処理を継続する。
9.6.2.更新処理
続いて更新処理について説明する。更新処理では、更新用ソフトウェア配布モジュール210が更新用保護制御モジュール121を複数の鍵を用いて多重に暗号化し、更新モジュール群130に含まれる更新モジュールを送信先として送信する。更新モジュール群130に含まれる複数の更新モジュールは、保護制御モジュール120を更新用保護制御モジュール121に更新する。この時、多重に暗号化された更新用保護制御モジュール121を復号するための複数の鍵を、更新モジュール群130に含まれる各更新モジュールへ送信するタイミングを更新用ソフトウェア配布モジュール210が制御することで、攻撃者が暗号化されていない更新用保護制御モジュール121を入手することを不可能にする。
以下、更新処理の一例を、フローチャートを用いて詳細に説明する。図20〜22は、更新処理を示すフローチャートである。
まず、更新用ソフトウェア配布モジュール210は、更新用保護制御モジュール121が機器100に正しくインストールされたかを更新モジュール131、132、133が検証できるように、更新用保護制御モジュール121の証明書(更新検証証明書)を、証明書生成部408を用いて生成し(ステップS521)、生成した更新検証証明書を各更新モジュール131、132、133へ送信する(ステップS522)。更新検証証明書の生成には、署名秘密鍵を利用する。各更新モジュールは、更新検証証明書を受信する(ステップS523)。
次に、更新用ソフトウェア配布モジュール210は、更新用保護制御モジュール121を多重に暗号化するための暗号鍵を、暗号鍵生成部403を用いて複数(ここでは第1の鍵及び第2の鍵の2つ)生成する(ステップS524)。そして、暗号処理部402を利用して、第2の鍵を用いて更新用保護制御モジュール121を暗号化し、暗号化更新用保護制御モジュールを生成する(ステップS525)。暗号化更新用保護制御モジュール121に対して、第1の鍵を用いてさらに暗号化し、多重暗号化更新用保護制御モジュール121を生成する(ステップS526)。
更新用ソフトウェア配布モジュール210は、更新モジュール群130に含まれる複数の更新モジュールから一の更新モジュール(ここでは、更新モジュール131)を選択し(ステップS527)、多重暗号化更新用保護制御モジュール121及び第1の鍵を、選択した更新モジュール131に送信する(ステップS528)。
更新モジュール131は、多重暗号化更新用保護制御モジュール121及び第1の鍵を受信すると(ステップS529)、第1の鍵を用いて、多重暗号化更新用保護制御モジュール121を復号し、暗号化更新用保護制御モジュール121を取得する(ステップS530)。復号が終了すると、復号終了通知を更新用ソフトウェア配布モジュール210に送信する(ステップS531)。
更新用ソフトウェア配布モジュール210は、復号終了通知を受信すると(ステップS532)、更新モジュール群130に含まれる複数の更新モジュールから、上記選択した更新モジュール131とは異なる更新モジュール(ここでは、更新モジュール132)を1つ選択し(ステップS533)、選択した更新モジュール132に第2の鍵を送信するとともに(ステップS534)、更新モジュール131に対して、暗号化更新用保護制御モジュール121を更新モジュール132へ送信するよう依頼する(ステップS536)。
更新モジュール131は、更新用ソフトウェア配布モジュール210からの依頼を受けて(ステップS537)、暗号化更新用保護制御モジュール131を更新モジュール132へ送信する(ステップS538)。
更新モジュール132は、更新用ソフトウェア配布モジュール210から第2の鍵を受信し(ステップS535)、更新モジュール131から暗号化更新用保護制御モジュール121を受信すると(ステップS539)、第2の鍵を用いて、暗号化更新用保護制御モジュール121を復号し、更新用保護制御モジュール121を取得する(ステップS540)。
更新モジュール132は、取得した更新用保護制御モジュール121を保護制御モジュール120に上書きし、新たな保護制御モジュール121に更新する(ステップS541)。更新が終了すると、更新の終了を他の更新モジュール131、133へ通知する(ステップS542)。更新モジュール131、133は、更新終了通知を受信する(ステップS543a、543b)。
更新モジュール131、132、133はそれぞれ、事前に受信した更新検証証明書を用いて、保護制御モジュール121が正しく更新されたかを検証し(ステップS544)、検証結果を更新用ソフトウェア配布モジュール210へ通知する(ステップS545)。
更新用ソフトウェア配布モジュール210は、各更新モジュールから送信された検証結果を受信すると(ステップS546)、受信した検証結果から保護制御モジュール121が正しく更新されたかを判定し(ステップS547)、正しく更新されていないと判定した場合には(ステップS547でNo)、機器100を停止する(ステップS548)。
正しく更新されていると判定した場合には(ステップS547でYes)、更新処理の終了を各更新モジュールへ通知する(ステップS549)。
更新モジュール131、132、133はそれぞれ、更新処理の終了の通知を受けると(ステップS550)、保護制御モジュール121のMAC値を生成し、MAC値テーブルに保護制御モジュール121の識別子とMAC値との組を保存する(ステップS551)。
9.6.3.監視処理と更新処理との関係
続いて、監視処理と更新処理との関係について説明する。上述した監視処理と更新処理とは、互いに連携しながら実行される。
監視処理は、更新用ソフトウェア配布モジュール210から、更新モジュール群130に含まれる更新モジュールを送信先として、複数の鍵が送られる時と、暗号化された更新用保護制御モジュールの更新モジュール群130に含まれる更新モジュールでの復号処理中に定期的に実施される。定期的に実施する際の時間間隔は、例えば、更新用保護制御モジュール121が通信路を通して完全に外部に出力されるまでの時間より短い間隔である。完全に外部に出力されるまでに1秒かかるのであれば、例えば、それより短い500ミリ秒間隔のタイミングで監視処理を実行する。
監視処理と更新処理との連携動作を、図23を用いて説明する。図23は、監視処理と更新処理との連携動作の流れを模式的に示す図である。本図において、監視処理及び更新処理に関しては、ポイントとなる処理のみ説明する。
まず、回復処理の開始後、更新サーバ200から機器100へ多重暗号化更新用保護制御モジュール121が送付される前に、機器100内部で監視処理(監視1)を実施する。更新処理を開始するにあたって、不正な更新モジュールが機器100内部に存在しないことを検証するためである。
その後、更新サーバ200から機器100へ第1の鍵が送信され、更新モジュール131が第1の鍵を受信する前に、監視処理(監視2)を実施する。機器100が鍵を受信する時に、不正な更新モジュールが機器100内部に存在しないことを検証するためである。
さらに、更新モジュール131が第1の鍵を受信し、第1の鍵を用いて多重暗号化更新用保護制御モジュール121を復号する間、定期的に更新モジュール131による復号処理を中断し、監視処理(監視3−1、3−2)を実施する。これにより、復号処理中に、更新モジュール131、132、133の何れかが攻撃されたとしても、暗号化更新用保護制御モジュール121が全て漏洩する前に攻撃者による攻撃を検出することができ、暗号化更新用保護制御モジュール121の漏洩を防止することが可能となる。
これ以降の処理は、上記と同様に、更新サーバ200から機器100へ送信される第2の鍵を更新モジュール132が受信する前に、監視処理(監視4)を実施し、機器100が鍵を受信する時に、不正な更新モジュールが機器100内部に存在しないことを検証する。
さらに、更新モジュール132が第2の鍵を受信した後、第2の鍵を用いて暗号化更新用保護制御モジュール121を復号する間、定期的に更新モジュール132による復号処理を中断し、監視処理(監視5−1、5−2)を実施する。これにより、更新用保護制御モジュール121が全て漏洩する前に攻撃者による攻撃を検出することができ、更新用保護制御モジュール121の漏洩を防止することが可能となる。
また、上記の各監視処理において、各更新モジュールは改ざん検出結果を更新用ソフトウェア配布モジュール210へ通知する。更新用ソフトウェア配布モジュール210は、改ざん検出結果に基づいて、何れかの更新モジュールが改ざんされていると判定した場合には、回復処理を停止する。これにより、第1の鍵あるいは第2の鍵の送信前に、攻撃者による攻撃が検出されれば、攻撃者は多重暗号化更新用保護制御モジュール121を復号するための鍵を入手することが不可能になる。
9.6.4.再暗号化処理
続いて、再暗号化処理について説明する。再暗号化処理では、更新用保護制御モジュール121が、各更新モジュールが保持している分散情報を取得し、取得した分散情報から、更新前の保護制御モジュール120が保持していた暗復号鍵(旧暗復号鍵)を復元する。さらに、新たに暗復号鍵(新暗復号鍵)を生成し、復元した旧暗復号鍵を用いて、暗号化されたアプリ110、111を復号した後、新暗復号鍵を用いて、アプリ110、111を再暗号化する。
以下、再暗号化処理の一例を、フローチャートを用いて詳細に説明する。図24は、再暗号化処理を示すフローチャートである。本フローチャートにおいて、更新モジュール131、132、133の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
まず、更新された保護制御モジュール121が、各更新モジュール131、132、133に対して、それぞれが保持している分散情報と暗復号鍵証明書とを送信するよう依頼する(ステップS561)。
更新モジュール群は、保護制御モジュール121からの依頼を受信すると(ステップS562)、保護制御モジュール121に分散情報と暗復号鍵証明書とを送信する(ステップS563)。
保護制御モジュール121は、更新モジュール群から分散情報と暗復号鍵証明書とを受信すると(ステップS564)、受信した分散情報から更新前の保護制御モジュール120が使用していた暗復号鍵(旧暗復号鍵)を復元する(ステップS565)。そして、旧暗復号鍵が正しく復元されたか否かを、暗復号鍵証明書を用いて検証する(ステップS566)。
旧暗復号鍵が正しく復元されなかった場合には(ステップS566でNo)、どの更新モジュールが不正な分散情報を送信したかを特定する(炙り出し)(ステップS567)。特定した不正な更新モジュールは、更新サーバ200へ通知される。
ここで、不正な更新モジュールを特定するための方法としては、以下の方法がある。まず、保護制御モジュール121は、各更新モジュールから分散情報のペアを取得し、取得した各分散情報に、どの更新モジュールから取得したかを識別するための識別情報をつける。次に、同じ識別子が付された、同一の値となるべき分散情報同士をグループ化し、各グループ中の分散情報同士の値を比較し、同じ値になる分散情報同士をさらにグループ化(サブグループ)する。そして、全てのグループからサブグループを1つずつ選び出す組み合わせの全てに対して、それぞれ旧暗復号鍵を生成し、正しい旧暗復号鍵が生成できたかを検証する。検証した結果、正しい旧暗復号鍵が生成できた場合は、当該組み合わせで選択されているサブグループに検証を通ったことを表す検証通過識別情報を付す。全ての組み合わせで旧暗復号鍵の生成及び検証を行った後、検証通過識別情報が付されているサブグループに含まれる分散情報を取り除く。ここで取り除かれずに残った分散情報が不正な値になっている分散情報である。そして、この分散情報の識別情報から当該分散情報を保持していた更新モジュールを特定する。これにより、識別情報に対応する更新モジュールが不正な分散情報を保持していた不正な更新モジュールであると特定することができる。
図24に戻って、旧暗復号鍵が正しく復元された場合には(ステップS566でYes)、保護制御モジュール121が暗復号鍵生成部506を用いて、新しい暗復号鍵(新暗復号鍵)を生成し(ステップS568)、旧暗復号鍵を用いて暗号化されたアプリ110、111を復号した後(ステップS569)、新暗復号鍵を用いてアプリ110、111を再暗号化する(ステップS570)。
9.7.次ラウンド準備時の動作
続いて、次ラウンド準備処理について説明する。回復処理の終了後、次の回復処理のための準備を行う次ラウンド準備処理を実施する。次ラウンド準備処理では、初期設計時の初期化処理と同様に、分散情報の生成と埋め込みを行う。
図25は、次ラウンド準備時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール131、132、133の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
まず、保護制御モジュール121が、暗復号鍵(新暗復号鍵)から秘密分散法を用いて分散情報を生成し(ステップS601)、更に、署名秘密鍵を用いて暗復号鍵証明書を生成する(ステップS602)。生成した分散情報と暗復号鍵証明書とをそれぞれ、更新モジュール群へ送信する(ステップS603)。ここで、分散情報は、初期化処理時と同様に、更新モジュールと同数だけ生成され、それぞれの更新モジュール131、132、133には、異なる分散情報のペアが送信される。暗復号鍵証明書については、それぞれの更新モジュール131、132、133へ同じものが送信される。
更新モジュール群は、保護制御モジュール121から分散情報と暗復号鍵証明書とを受信すると(ステップS604)、受信した分散情報と暗復号鍵証明書とを分散情報保持部310に保持する(ステップS605)。
なお、この時、相互認証時において認証に失敗した不正な更新モジュールや、回復処理内の監視処理において検出した不正な更新モジュール、回復処理内の再暗号化処理において炙り出した不正な更新モジュールに対しては、分散情報を送信しない。
9.8.無効化時の動作
続いて、無効化処理について説明する。無効化処理は、相互認証時において認証に失敗した更新モジュールが存在した場合や、回復処理内の監視処理において改ざんされた更新モジュールを検出した場合、回復処理内の再暗号化処理において不正な更新モジュールを炙り出した場合等に、機器100内部に存在する不正な更新モジュールを無効化する処理である。
上述のように改ざんされた更新モジュールを検出した場合には、不正な動作を防止するためにも、その更新モジュールの機能を停止させる必要があるのは言うまでもないが、その際、当該更新モジュールの機能を停止させる構成として、複数の更新モジュールの各々に予め更新モジュールの無効化機能を持たせておくことが考えられる。しかしながら、複数の更新モジュールの各々に予め更新モジュールの無効化機能を持たせておくと、更新モジュール群に含まれる一の更新モジュールが改ざんされた場合に、当該更新モジュールが正常な更新モジュールを無効化することが可能になる。本実施の形態によれば、更新サーバ200に選択された更新モジュールのみが改ざんされた更新モジュールを無効化することができるので、改ざんされた更新モジュールによる正常な更新モジュールの無効化を防止することができる。
以下に、回復処理内の監視処理において更新モジュール133の改ざんのみが検出され、更新モジュール131、132の改ざんは検出されなかった場合の処理を例に挙げ、無効化時の動作の詳細を説明する。図26は、更新モジュール133無効化時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。
まず、更新用ソフトウェア配布モジュール210は、監視処理において更新モジュール131、132、133から受信した改ざん検出結果に基づいて、どの更新モジュールが改ざんされたかを判定する(ステップS701)。この例では、更新モジュール133が改ざんされていると判定し、それ以外の更新モジュールは改ざんされていないと判定する。
更新用ソフトウェア配布モジュール210は、改ざんされていないと判定した更新モジュールの何れか(ここでは更新モジュール131)へ、改ざんされた更新モジュール133の無効化を依頼する(ステップS702)。さらに、アクセス情報取得鍵配布モジュール220へ、無効化に関する情報を通知する(ステップS703)。無効化に関する情報は、改ざんされた更新モジュール133の情報(更新モジュール識別子)及び無効化を依頼した更新モジュール131の情報(更新モジュール識別子)である。
更新モジュール131は、更新用ソフトウェア配布モジュール210から更新モジュール133の無効化依頼を受信すると(ステップS704)、アクセス情報取得鍵配布モジュール220に対し更新モジュール133を無効化するためのアクセス情報取得鍵を送付するよう依頼する(ステップS705)。さらに、アクセス制御モジュール140に対し更新モジュール133を無効化するためのアクセス情報を送信するよう依頼する(ステップS706)。
アクセス情報取得鍵配布モジュール220は、無効化に関する情報を更新用ソフトウェア配布モジュール210から受信し(ステップS707)、アクセス情報取得鍵の送付依頼を更新モジュール131から受信すると(ステップS708)、無効化に関する情報に基づいて、送付依頼が正しい依頼であるか否かを判断する(ステップS709)。この判断は、更新用ソフトウェア配布モジュール210から通知された無効化に関する情報に基づいて、送付依頼をした更新モジュール131が更新用ソフトウェア配布モジュール210により無効化依頼をされた更新モジュールかどうか、及び送付依頼の対象であるアクセス情報取得鍵が改ざんされた更新モジュール133に対応するアクセス情報取得鍵かどうかを判断することにより行われる。
正しい依頼でないと判断した場合(ステップS709でNo)、すなわち、改ざんされた更新モジュール133からの依頼であったり、あるいは改ざんされていない更新モジュール131、132に対応するアクセス情報取得鍵の取得依頼であったりする場合には、無効化処理を終了する。
正しい依頼であると判断した場合には(ステップS709でYes)、依頼元の更新モジュール131へ、更新モジュール133を無効化するためのアクセス情報取得鍵を送付する(ステップS710)。
アクセス制御モジュール140は、更新モジュール131から更新モジュール133を無効化するためのアクセス情報取得依頼を受信すると(ステップS711)、更新モジュール133に対応する暗号化アクセス情報を送信する(ステップS712)。
更新モジュール131は、アクセス制御モジュール140から暗号化アクセス情報を受信し(ステップS713)、アクセス情報取得鍵配布モジュール220からアクセス情報取得鍵を受信すると(ステップS714)、受信したアクセス情報取得鍵を用いて暗号化アクセス情報を復号し、アクセス情報を取得する(ステップS715)。取得したアクセス情報は、更新モジュール133を消去するための専用ドライバである。更新モジュール131は、そのドライバを利用して、RAM13上に展開されている、改ざんされた不正な更新モジュール133を無効化する(ステップS716)。
無効化処理が終了すると、更新モジュール131は、アクセス情報取得鍵配布モジュール220から取得したアクセス情報取得鍵や、アクセス制御モジュール140から取得した暗号化されたアクセス情報、復号後のアクセス情報等を消去する。
以上のように本実施の形態によれば、回復処理において、更新モジュール群内の複数の更新モジュールが監視処理を行うので、改ざんされた更新モジュールを検出することが可能となり、ソフトウェア更新システムの信頼性を高めることができる。
また、改ざんされた更新モジュールを無効化するので、改ざんされた更新モジュールによる不正動作を防止することができる。
(実施の形態2)
実施の形態2では、保護制御モジュール120が、復号ロード機能や改ざん検出機能、解析ツール検出機能等の機能を制御し、アプリ110、111を攻撃者による攻撃から保護するだけではなく、更新モジュール131、132、133を攻撃者による攻撃から保護する。これにより、更新モジュール131、132、133が一方的に保護制御モジュール120の改ざんを検出するだけでなく、更新モジュール131、132、133と保護制御モジュール120とが相互に監視し合う構成とすることができる。
実施の形態2における検知時の動作としては、保護制御モジュール120がそれぞれの更新モジュールが改ざんされていないかどうかを、改ざん検出用証明書を用いて検証する。更新モジュール131、132、133のうち何れかの更新モジュールの改ざんを検出した場合には、その旨を更新用ソフトウェア配布モジュール210へ通知する。
改ざんを検出しなかった場合には、更新用ソフトウェア配布モジュール210への通知は行わない。
保護制御モジュール120から更新用ソフトウェア配布モジュール210へ、更新モジュール131、132、133の改ざんを検出した旨の通知があった場合には、更新用ソフトウェア配布モジュール210は、保護制御モジュール120が改ざんされていないかを確認するために、更新モジュール131、132、133へ保護制御モジュール120の改ざん検出を依頼する。
更新用ソフトウェア配布モジュール210から依頼を受けた更新モジュール131、132、133は、保護制御モジュール120の改ざん検出を実施し、改ざん検出結果を更新用ソフトウェア配布モジュール210へ通知する。この時、保護制御モジュール120が改ざんされていた場合でも、他の更新モジュールへは通知しない。
以降の処理は、本発明の実施の形態1における検知処理において、更新モジュール131、132、133から更新用ソフトウェア配布モジュール210へ、保護制御モジュール120の改ざんを検出した旨の通知があった場合の処理と同様であるので、ここでは省略する。
以上のように本実施の形態によれば、検知処理において、更新モジュール131、132、133と保護制御モジュール120とが相互に監視し合い、更新モジュールが改ざんされている場合には、保護制御モジュール120もそれを検出することが可能となるので、ソフトウェア更新システムの信頼性を高めることができる。
(実施の形態3)
実施の形態3では、各更新モジュールに保護制御モジュール120を更新するための機能を予め持たせるのではなく、保護制御モジュール120の改ざんを検出し、保護制御モジュール120を更新する必要が生じた時に、保護制御モジュール120を更新するためのアクセス情報を取得することにより、保護制御モジュール120を更新する機能を更新モジュールに付加する。
そこで、本実施の形態におけるアクセス情報取得鍵配布モジュール220は、各更新モジュールのアクセス情報取得鍵に加え、保護制御モジュール120を更新するためのアクセス情報取得鍵を保持している。
また、本実施の形態におけるアクセス情報モジュール140は、各更新モジュールのアクセス情報に加え、保護制御モジュール120を更新するための暗号化アクセス情報を保持している。
図20〜22を用いて、保護制御モジュール120を更新する機能を更新モジュールに付加する処理を説明する。以降の説明において、実施の形態1と同じ処理については同じ符号を用いる。
更新処理(ステップS502)において、更新用ソフトウェア配布モジュール210が更新用保護制御モジュール121を複数の鍵を用いて多重に暗号化し、多重暗号化更新用保護制御モジュールと第1の鍵とを、更新モジュール群に含まれる更新モジュール131を送信先として送信する(ステップS521からS528)。
更新モジュール群に含まれる更新モジュールは、更新用ソフトウェア配布モジュール210から第2の鍵を受信し、多重暗号化された更新用保護制御モジュールを復号し、更新用保護制御モジュールを取得する(ステップS529からS540)。
更新用保護制御モジュールを取得後、更新モジュール132は、保護制御モジュール120を更新用保護制御モジュール121へ更新するために、アクセス情報取得鍵配布モジュール220に対し保護制御モジュール120を更新するためのアクセス情報取得鍵を送付するよう依頼する。さらに、アクセス制御モジュール140に対し保護制御モジュール120を更新するためのアクセス情報を送信するよう依頼する。
アクセス情報取得鍵配布モジュール220は、アクセス情報取得鍵の送付依頼を受けると、依頼元の更新モジュールが保護制御モジュール120を更新する更新モジュールであるかどうかを、更新用ソフトウェア配布モジュール210に問い合わせ、保護制御モジュール120を更新する更新モジュールであった場合には、依頼元の更新モジュール132へ、保護制御モジュール120を更新するためのアクセス情報取得鍵を送付する。
アクセス情報モジュール140は、更新モジュール132からアクセス情報の送信依頼を受け付けると、保護制御モジュール120に対応する暗号化アクセス情報を更新モジュール132に送信する。
更新モジュール132は、アクセス情報取得鍵配布モジュール220からアクセス情報取得鍵を受信し、アクセス制御モジュール140から暗号化アクセス情報を受信すると、受信したアクセス情報取得鍵を用いて、暗号化アクセス情報を復号し、アクセス情報を取得する。取得したアクセス情報は、保護制御モジュール120を更新するための専用ドライバである。更新モジュール132は、そのドライバを利用して、保護制御モジュール120を更新用保護制御モジュール121へ更新する(ステップS541)。そして、更新の終了を他の更新モジュールへ通知する(ステップS542)。
更新モジュール群130に含まれる各更新モジュールは、保護制御モジュール120が更新用保護制御モジュール121へ正しく更新されたか検証し、正しく更新されている場合には、保護制御モジュール121のMAC値を生成する(ステップS543からS551)。
(その他の変形例)
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)上記実施の形態では、保護制御モジュール120を更新するとしたが、これに限定するものではなく、更新モジュールやアプリ等、保護制御モジュール120以外のモジュールを更新するとしてもよい。以下に、更新モジュール133を更新する場合を例に挙げ、更新モジュールの更新処理を説明する。更新モジュールの更新処理では、保護制御モジュールを更新する場合と同様に、更新用ソフトウェア配布モジュール210が更新用更新モジュール133を複数の鍵を用いて多重に暗号化し、更新モジュール群130に含まれる更新モジュール(更新モジュール133を除く)を送信先として送信する。更新モジュール群130に含まれる更新モジュールは、更新モジュール133を更新用更新モジュール133に更新する。この時、多重に暗号化された更新用更新モジュール133を復号するための複数の鍵を、更新モジュール群130に含まれる更新モジュールへ送信するタイミングを更新用ソフトウェア配布モジュール210が制御することで、攻撃者が暗号化されていない更新用更新モジュール133を入手することを不可能にする。
図28〜30は、更新モジュールの更新処理の一例を示すフローチャートである。ここでは、上述したように更新モジュール133を更新するものとする。
図28〜30は、基本的には、図20〜22と同様である。異なる点は、更新対象となる更新モジュール133には、更新検証証明書や、復号終了通知、更新終了通知が送信されないことである。
また、更新モジュールを無効化するとしたが、これに限定するものではなく、保護制御モジュール120やアプリ等、更新モジュール以外のモジュールを無効化するとしてもよい。アプリ100、110は、上述した機能以外の機能を提供するソフトウェアであってもよい。
また、一つでも更新モジュールが改ざんされている場合には、改ざんされていない更新モジュールが全ての更新モジュール及び保護制御モジュールを更新あるいは無効化するとしてもよい。
(2)上記実施の形態では、更新モジュール131、132、133は、監視制御部301、改ざんチェック実行部302、更新制御部303、復号部304、認証部305、署名公開鍵保持部306、検証鍵保持部307、認証鍵対保持部308、MAC値保持部309、分散情報保持部310、アクセス情報取得部311、及び無効化処理部312を含んで構成されるとしたが、これに限定するものではなく、監視処理に必要な構成要素(監視制御部301、改ざんチェック実行部302、署名公開鍵保持部306)のみで構成されるとしてもよいし、更新処理に必要な構成要素(更新制御部303、復号部304、認証部305、署名公開鍵保持部306、認証鍵対保持部308)のみで構成されるとしてもよいし、無効化処理に必要な構成要素(アクセス情報取得部311、無効化処理部312)のみで構成されるとしてもよいし、さらに、上記の組み合わせから構成されるとしてもよい。この時、更新モジュール群130に含まれる更新モジュール全体として、監視処理と更新処理に必要な構成要素を含むよう構成されていればよい。
(3)上記実施の形態では、更新モジュール131、132、133において監視制御部303が他の更新モジュールを改ざん検出するタイミング、及び改ざん検出対象となる更新モジュールの選択処理を制御するとした。すなわち、各更新モジュールの監視制御部303が独立に監視に関する制御を行うとしたが、これに限定するものではなく、1つの更新モジュールの監視制御部303が監視処理全体を制御するとしてもよいし、監視制御部303が更新サーバ200からの指示に基づいて、改ざん検出タイミングや改ざん検出対象となる更新モジュールの選択を制御するとしてもよい。
(4)上記実施の形態では、更新モジュール131、132、133において改ざんチェック実行部302により他の更新モジュールや保護制御モジュール120の改ざんチェックを実行するとしたが、改ざんチェック対象はモジュール全体に限定するものではなく、モジュール内の一部、例えば、特定の機能や関数、鍵等のデータであってもよい。また、一度に改ざん対象全てを改ざんチェックするのではなく、改ざん対象の一部を改ざんチェックするだけでもよい。この時、改ざん対象を一定のサイズに分割した部分毎に改ざんチェックしてもよいし、機能や関数単位で分割した部分毎に改ざんチェックしてもよい。さらに、改ざん対象の一部を、改ざんチェックの度に順番に改ざんチェックするとしてもよいし、改ざんチェックする部分を改ざんチェックの度にランダムに決定してもよし、どの部分を改ざんチェックするかが他のモジュールや機器100外部などから与えられるとしてもよい。
(5)上記実施の形態では、更新モジュール131、132、133や保護制御モジュール120は、耐タンパ化された領域等、攻撃者による攻撃から保護されている領域で動作するとしてもよい。監視処理に必要な構成要素のみで構成される更新モジュールが、攻撃者による攻撃から保護されている領域で動作する場合、他の更新モジュールや更新用ソフトウェア配布モジュール210、アクセス情報取得鍵配布モジュール220は、その保護された領域にある更新モジュールから、他の更新モジュールや保護制御モジュール120が攻撃されたことを検知した旨の通知を受けたときに、その通知を無条件に受け入れ、更新処理や無効化処理を実施してもよいし、その通知を他のモジュールからの通知よりも重要な通知として扱い、更新処理や無効化処理の判断を行ってもよい。
また、保護制御モジュールが保護モード(耐タンパ化された領域等)で、更新モジュールが通常モード(耐タンパ化されていない領域等)で動作するとしてもよい。これにより、保護モードで動作する保護制御モジュールが信頼できなくなったときにもそれを検知し、更新できる。
(6)上記実施の形態では、アクセス情報取得鍵配布モジュール220は、更新サーバ200にあり、アクセス制御モジュール140は、機器100にあるとしたが、これに限定するものではなく、アクセス情報取得鍵配布モジュール220とアクセス制御モジュール140とはそれぞれ、機器100にあってもよいし、更新サーバ200にあってもよいし、各更新モジュール内にあってもよい。また、アクセス情報取得鍵配布モジュール220とアクセス制御モジュール140とは、別々のモジュールではなく1つのモジュールであってもよい。アクセス情報取得鍵配布モジュール220とアクセス制御モジュール140とが1つのモジュールである場合には、更新モジュールへアクセス情報取得鍵と暗号化アクセス情報とを送信するのではなく、アクセス情報を直接送信してもよい。さらに、アクセス情報取得鍵配布モジュール220やアクセス制御モジュール140が機器100内にあるときには、耐タンパ化などにより攻撃から保護される領域にあるとしてもよい。
(7)上記実施の形態では、更新サーバ200は、更新用ソフトウェア配布モジュール210とアクセス情報取得鍵配布モジュール220とから構成されるとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール210とアクセス情報取得鍵配布モジュール220とは、1つのモジュールであってもよいし、どちらか1つのモジュールのみで構成されてもよい。
(8)上記実施の形態では、ソフトウェア更新システム1000は、機器100の工場製造時に初期設計処理を行うとしたが、これに限定するものではなく、販売後など工場出荷後のどこかで初期化処理を実施してもよい。また、初期化処理は1度だけでなく、2度以上実施してもよい。
(9)上記実施の形態では、初期設計時の動作として、改ざん検出用証明書及び認証鍵証明書は、更新用ソフトウェア配布モジュール210が保持する署名秘密鍵を用いて生成された証明書であるとしたが、これに限定するものではなく、それぞれ別の鍵を用いて生成されてもよいし、更新用ソフトウェア配布モジュール210以外の証明書発行装置により発行された証明書でもよい。
(10)上記実施の形態では、初期設計時や次ラウンド準備時の動作として、暗復号鍵から生成する分散情報を更新モジュール131、132、133へ送信し、更新モジュール131、132、133が分散情報を保持するとしたが、これに限定するものではなく、更新モジュールの代わりにアプリが保持するとしてもよいし、更新モジュール131、132、133とアプリとが保持するとしてもよい。
(11)上記実施の形態では、検知時の動作として、更新モジュール131、132、133が保護制御モジュール120の改ざん検出を行うときに、検証鍵を使用して計算したMAC値を用いて改ざん検出処理を行うとしたが、これに限定するものではなく、保護制御モジュール120の改ざん検出用証明書を用いて検証するとしてもよい。また、MAC値や証明書のようにハッシュ値を利用した改ざん検証を行うのではなく、ログをチェックすることで改ざん検証を行うとしてもよい。
(12)上記実施の形態では、検知時の動作として、更新モジュール131、132、133が保護制御モジュール120の改ざんを検出した場合、更新用ソフトウェア配布モジュール210と他の更新モジュールへ通知するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール210と他の更新モジュールのうち、どれか1つ以上のモジュールに通知するとしてもよい。また、保護制御モジュール120の改ざんを検出した場合、更新モジュールを停止するとしてもよいし、機器100や保護制御モジュール120を停止するとしてもよい。更に、改ざんされた保護制御モジュールを消去するとしてもよい。さらに、更新モジュール131、132、133が保護制御モジュール120の改ざんを検出しなかった場合、更新用ソフトウェア配布モジュール210へ通知を行わないとしたが、これに限定するものではなく、改ざん検出処理を実施した結果として、改ざんを検出しなかった旨を通知するとしてもよい。
(13)上記実施の形態では、検知時の動作として、更新モジュール131、132、133は、他の更新モジュールに保護制御モジュールの改ざん検出結果を送信しないとしたが、それぞれの更新モジュールで検出結果を共有するとしてもよい。また、検出結果を共有しない更新モジュールがあった場合に、当該更新モジュールを不正な更新モジュールと判断して、無効化するとしてもよい。
(14)上記実施の形態では、解析・判断時の動作として、改ざん情報に基づいて保護制御モジュール120を更新するかどうか判定するとしたが、これに限定するものではなく、改ざんされていると通知してきた更新モジュールの数によって更新するかどうかを判定してもよい。また、解析・判断時の動作として、保護制御モジュール120を更新するか否か、及び保護制御モジュール120を無効化するか否かを判断したが、これに限定するものではなく、機器100を停止するか否かを判断するとしてもよい。
(15)上記実施の形態では、相互認証時の動作として、更新モジュール131、132、133が、更新用ソフトウェア配布モジュール210を認証し、その後、更新用ソフトウェア配布モジュール210がそれぞれの更新モジュール131、132、133を認証するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール210がそれぞれの更新モジュール131、132、133を認証し、その後、更新モジュール131、132、133が、更新用ソフトウェア配布モジュール210を認証してもよいし、それぞれの更新モジュール131、132、133と更新用ソフトウェア配布モジュール210とが個別に認証処理を行ってもよい。
(16)上記実施の形態では、相互認証時の動作として、更新用ソフトウェア配布モジュール210がそれぞれの更新モジュール131、132、133を認証する処理において、チャレンジデータをそれぞれの更新モジュールで異なる値にするとしたが、これに限定するものではなく、チャレンジデータとして全ての更新モジュールで同じ値としてもよいし、更新モジュール131、132、133を複数のグルーブに分け、それぞれのグループで異なる値にしてもよい。
(17)上記実施の形態では、相互認証時の動作として、それぞれの更新モジュール131、132、133が、更新用ソフトウェア配布モジュール210を認証する処理において、それぞれの更新モジュール131、132、133が個別に更新用ソフトウェア配布モジュール210を認証するとしたが、これに限定するものではなく、署名検証した結果を他の更新モジュールへ通知し、更新モジュール間で検証結果を共有し、自更新モジュールの認証結果と他の更新モジュールから受信した認証結果とから、更新用ソフトウェア配布モジュール210が正当なモジュールかどうかをそれぞれ判定してもよい。判定方法としては、例えば、一定数(例えば、過半数等)の更新モジュールが認証に成功した場合には正当なモジュールであると判定し、そうでない場合には、正当なモジュールではないと判定する方法がある。
(18)上記実施の形態では、相互認証時の動作として、更新サーバ200は署名秘密鍵と署名公開鍵とを使用して相互認証処理を実施するとしたが、これに限定するものではなく、署名秘密鍵と署名公開鍵とは別に、相互認証に使用する認証鍵対を用いるとしてもよい。この時、更新サーバ200の認証鍵対のうちの認証公開鍵は、予め更新モジュール131、132、133で保持するとしてもよいし、相互認証処理時に更新サーバ200から更新モジュール131、132、133へ送信するとしてもよい。
(19)上記実施の形態では、相互認証時の動作として、正当なモジュールであると検証できた更新モジュールが、回復処理に必要な数以上あるかどうかで、その後の回復処理を実施するかどうか判定したが、これに限定するものではなく、不正な更新モジュールの数が、予め設定されている許容数未満かどうかで回復処理を実施するかどうか判定してもよい。また、相互認証処理において、回復処理に必要な数に満たないと判定した場合には、機器を停止するとしたが、更新モジュールを無効化してもよい。
(20)本発明の実施の形態1では、相互認証時の動作として、更新用ソフトウェア配布モジュール210がそれぞれの更新モジュール131、132、133を認証する時に、更新モジュール131、132、133は、レスポンスデータと一緒に認証公開鍵と認証鍵証明書とを更新用ソフトウェア配布モジュール210へ送信するとしたが、これに限定するものではなく、それぞれ別のタイミングで送信してもよい。また、認証公開鍵や認証鍵証明書は、更新用ソフトウェア配布モジュール210から要求があったときにのみそれぞれ送信するとしてもよい。この時、更新用ソフトウェア配布モジュール210は、全ての更新モジュールの認証公開鍵や認証鍵証明書を受信してもよいし、予め設定されている、回復処理に必要な数以上、或いは予め設定されている、不正な更新モジュールの許容数未満の更新モジュールの認証公開鍵と認証鍵証明書とを受信してもよい。
(21)本発明の実施の形態1では、回復時の動作として、監視処理時を、1回の復号中(監視3−1、3−2、5−1、5−2)に2回実施するとしたが、これに限定するものではなく、復号処理の時間にあわせて何回監視処理を行ってもよいし、復号処理以外であっても、鍵や更新用保護制御モジュールの受信処理時や検知処理時、相互認証時に監視処理を行ってもよい。また、監視処理を一定時間間隔で定期的に実施するとしたが、これに限定するものではなく、更新処理を複数のブロックに分割し、その処理ブロックの処理が終わるごとに実施してもよいし、ランダムな時間間隔で実施してもよいし、更新サーバ200から指定された時間間隔で実施してもよい。
また、各更新モジュールは、監視処理を実行するタイミングを示す同期情報を外部のサーバから取得し、取得した同期情報にしたがって監視処理を実行するとしてもよい。これにより、各更新モジュールは、他の更新モジュールと同じタイミングで監視処理を実行することができるので、不正な更新モジュールの検出精度を向上させることができる。
さらに、通常時と回復処理時とにおける検知頻度を変更するとしてもよい。例えば、通常時より回復処理時の検知頻度を高くすることにより、回復処理中の保護制御モジュールの保護に万全を期すことができる。検知頻度の変更は、回復処理中であってもよい。
(22)本発明の実施の形態1では、回復時の動作として、監視処理のパターンは、更新モジュール131が更新モジュール132の改ざん検出を行い、更新モジュール132が更新モジュール133の改ざん検出を行い、更新モジュール133が更新モジュール131の改ざん検出を行うものであったが、これに限定するものではなく、例えば、更新モジュール131が更新モジュール133の改ざん検出を行い、更新モジュール132が更新モジュール131の改ざん検出を行い、更新モジュール133が更新モジュール132の改ざん検出を行うなど、予め決められたパターンで改ざん検出するとしてもよいし、どの更新モジュールの改ざん検出を行うかをランダムに決定してもよいし、他のモジュールや機器100外部から与えられるとしてもよい。また、各更新モジュールは、当該更新モジュール(自更新モジュール)が改ざんされていないかを検証するとしてもよい。さらに、自更新モジュールの改ざんを検出すると、自更新モジュール自身を無効化するとしてもよい。更に、全ての更新モジュールが他の更新モジュールから監視される必要はなく、他の更新モジュールから監視されない更新モジュールがあってもよいし、複数の更新モジュールから監視されてもよい。また、監視処理のパターンを変更する場合は、改ざん検出の処理毎など、一定の間隔で変更するとしてもよいし、ランダムなタイミングで変更するとしてもよいし、他のモジュールや機器100外部から与えられたタイミングで変更するとしてもよい。また、複数の更新モジュールは、改ざん検出の結果を、更新サーバにより指定される順序で、更新サーバに送信してもよい。
(23)本発明の実施の形態1では、回復時の動作として、監視処理時に、更新モジュール131が更新モジュール132の改ざん検出を行い、更新モジュール132が更新モジュール133の改ざん検出を行い、更新モジュール133が更新モジュール131の改ざん検出を行うというように、全ての更新モジュールが監視処理を行うとしたが、これに限定するものではなく、一つの更新モジュールが更新処理を実施し、他の更新モジュールが監視処理を実施してもよい。この時の監視パターンとしては、更新処理を行っている更新モジュールを、1つの更新モジュールが監視してもよいし、複数または全ての更新モジュールが監視してもよい。例えば、更新モジュール131が更新モジュール132の改ざん検出を行い、更新モジュール132が更新モジュール133の改ざん検出を行い、更新モジュール133が更新処理を行う。これにより、更新処理を中断することなく監視処理も実施できる。
また、上記実施の形態では、更新モジュール131が更新モジュール132の改ざん検出を行い、更新モジュール132が更新モジュール133の改ざん検出を行い、更新モジュール133が更新モジュール131の改ざん検出を行うというように、監視構成としてループ方式を用いたが、複数の更新モジュールの各々が相互に監視し合う構成としてもよいし、それらを組み合わせてもよい。複数の更新モジュールの各々が相互に監視し合う構成とすることにより、改ざん検証精度をさらに高めることができる。
(24)本発明の実施の形態1では、回復時の動作として、更新モジュール132は、取得した更新用保護制御モジュール121を保護制御モジュール120に上書きし、保護制御モジュール120を更新するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール210から保護制御モジュール120と更新用保護制御モジュール121との差分を取得し、差分のみを更新するとしてもよいし、更新用保護制御モジュール121を保護制御モジュール120とは別の領域へ書き込み、保護制御モジュール120に代わって、更新用保護制御モジュール121が実行されるようにしてもよい。
(25)本発明の実施の形態1では、回復時の動作として、監視処理により、更新モジュール131、132、133の改ざんが検出された場合、改ざん検出の通知を受けた更新用ソフトウェア配布モジュール210は、直ちに回復処理を停止するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール210から更新モジュールへ、鍵などのデータを次に送信するタイミングで回復処理を停止するとしてもよい。また、回復処理を停止するのではなく、改ざんされた更新モジュールを使用せずに、正常な更新モジュールを用いて回復処理を行うとしてもよいし、改ざんされた更新モジュールを無効化あるいは更新するとしてもよい。この時、無効化や更新などの処理を行うタイミングとしては、直ちに処理してもよいし、次に鍵が送付されるタイミングで処理してもよいし、改ざんされた更新モジュールを使用せずに回復処理を再開するときに処理してもよい。改ざんされた更新モジュールを無効化あるいは更新する処理を担う更新モジュールを更新サーバが指定するとしてもよい。また、監視処理により改ざんが検出された場合だけでなく、検知処理時に保護制御モジュール120によって改ざんが検出された更新モジュールや、相互認証処理時に認証に失敗した更新モジュールについても同様に、当該更新モジュールを使用せずに回復処理を行うとしてもよいし、改ざんされた更新モジュールを無効化するとしてもよいし、更新するとしてもよい。さらに、改ざんされた更新モジュールが存在する場合には、保護制御モジュールの更新を行わないとしてもよい。
(26)本発明の実施の形態1では、回復時の動作として、更新処理において復号に使用する更新モジュールを、更新用ソフトウェア配布モジュール210が更新モジュール群130から一つ選択するとしたが、その選択方法は、予め決められた更新モジュールを選択するとしてもよいし、ランダムに決定するとしてもよいし、機器100から通知された情報を元に決定するとしてもよいし、相互認証時に認証した順番に応じて選択するとしてもよい。
(27)本発明の実施の形態1では、回復時の動作として、更新処理において更新用ソフトウェア配布モジュール210が更新用保護制御モジュール121を複数の鍵を用いて多重に暗号化するとしたが、これに限定するものではなく、更新用保護制御モジュール121を複数の部分に分割した分割モジュールを生成し、分割モジュールそれぞれを個別に暗号化し、更新モジュールと一対一に対応する形態で、更新モジュールへ送信するとしてもよい。この場合、更新処理としては、暗号化した分割モジュールと暗号に使用した鍵を送信するときに、それらを1度に全て送信するのではなく、1つの暗号化した分割モジュールの復号処理が終了するまで、他の暗号化した分割モジュールと鍵を送信しないように、更新モジュールへの送信を制御する。別の方法として、暗号化した分割モジュールは1度に更新モジュールへ送信し、それらを復号するための鍵の送信のタイミングのみを制御するとしてもよいし、鍵は1度に更新モジュールへ送信し、暗号化した分割モジュールの送信のタイミングのみを制御するとしてもよいし、全ての鍵と暗号化した分割モジュールを1度に送信するとしてもよい。また、分割モジュールは、1つの鍵で暗号化されるのではなく、複数の鍵を用いて多重に暗号化されてもよい。この場合、鍵や多重暗号化した分割モジュールの送信制御は、更新用保護制御モジュール121を複数の鍵を用いて多重に暗号化した時と同様である。更に、暗号化した分割モジュールとそれを復号する鍵は、1つの更新モジュールへ送信してもよいし、それぞれ別の更新モジュールへ送信し、機器100内部で更新モジュール同士が協調動作するとしてもよい。その際、分割モジュールを受信する前後で監視処理を実施してもよい。また、監視処理により、改ざんされた不正な更新モジュールが検出された場合、次の分割モジュールを送信するタイミングで更新処理を停止してもよい。さらに、複数の更新モジュールは、改ざんされた更新モジュールが存在する場合には、それを更新サーバに通知し、更新サーバは、改ざんされた更新モジュールには復号鍵を送信しないとしてもよい。分割モジュールはそれぞれ異なる暗号鍵で暗号化されていてもよい。
(28)本発明の実施の形態1では、回復時の動作として、暗復号鍵(旧暗復号鍵)で暗号化されたアプリ110、111を新しい暗復号鍵(新暗復号鍵)を用いて再暗号化するとしたが、これに限定するものではなく、再暗号化処理を行わなくてもよい。この時、新暗復号鍵を生成せずに旧暗復号鍵を使い続けるとしてもよいし、旧暗復号鍵と新暗復号鍵を保持しておき、アプリによって使用する鍵を変える構成にしてもよいし、旧暗復号鍵が必要になったときには分散情報から再び生成するとしてもよい。旧暗復号鍵を使用し続ける場合は、保護制御モジュール120が更新される度に旧暗復号鍵が増えることになる。また、各更新モジュールで新暗復号鍵と旧暗復号鍵の分散情報を保持しておく必要がある。
(29)本発明の実施の形態1において、保護制御モジュール121が正しく更新されなかった場合に機器100を停止するとしたが、これに限定するものではなく、再度、相互認証処理及び回復処理を実施するとしても良い。
(30)本発明の実施の形態1において、無効化時の動作として、アクセス情報は、更新モジュールを消去するための専用ドライバであるとしたが、これに限定するものではなく、更新モジュールを消去するための専用プログラムであってもよいし、更新モジュールを消去するための手順が記された手順書であってもよいし、消去する更新モジュールのアドレスであってもよいし、更新モジュールを消去するプログラムのアドレスであってもよいし、更新モジュールを消去するための機能を動作させるためのレジスタやメモリのアドレスやレジスタやメモリに設定する値であってもよい。また、アクセス情報は、コード部分を消去する旨が記述された情報であってもよい。この場合、コード位置はヘッダに格納されており、ヘッダを参照して消去すべきコード部分を判断するとしてもよい。さらに、アクセス制御モジュール自体が暗号鍵で暗号化されているとしてもよい。その場合には、改ざんされていない更新モジュールは、更新サーバから、アクセス制御モジュールを暗号化した暗号鍵に対応する復号鍵を取得し、取得した復号鍵を用いてアクセス制御モジュールを復号し、改ざんされた更新モジュールに対応するアクセス情報をアクセス制御モジュールから取得し、取得したアクセス情報に基づいて、改ざんされた更新モジュールを無効化するとしてもよい。
(31)本発明の実施の形態1において、無効化時の動作として、改ざんされた更新モジュール全体を消去するとしたが、これに限定するものではなく、改ざんされた不正な更新モジュールの一部、例えば、他のモジュールを読み込むための読み込み機能など特定の機能や関数、鍵や他のモジュールをアクセスするための情報(チケット、トークン、ソケット)などのデータを消去するとしてもよいし、他のプログラムからアクセスできなくしてもよいし、不活性化してもよいし、更新してもよい。また、改ざんされた更新モジュールを無効化した後、無効化処理を行った更新モジュールは、アクセス制御モジュールに格納されている、無効化した更新モジュールに対応するアクセス情報を消去するとしてもよい。
(32)本発明の実施の形態1において、改ざんされた不正な更新モジュールを無効化するとしたが、これに限定するものではなく、改ざんされた不正な更新モジュールを無効化しないとしてもよい。この時、どのくらいの部分が改ざんされているか、どの部分が改ざんされたか等によって、無効化するかどうかを判断してもよいし、改ざんされた不正な更新モジュールの数によって無効化する更新モジュール数を決めてもよい。
(33)本発明の実施の形態2では、保護制御モジュール120が更新モジュール131、132、133の改ざん検出を行うときに、各更新モジュールの改ざん検出用証明書を検証するとしたが、これに限定するものではなく、更新モジュール131、132、133と同様に、検証鍵を使用して計算したMAC値を用いる改ざん検出を行うとしてもよい。この場合、保護制御モジュール120には、検証鍵が埋め込まれ、初期設計時に、改ざん検出用証明書の検証が実施される。問題なかった場合には、保護制御モジュール120が、それぞれの更新モジュールに対して検証鍵を使用してMAC値を生成し、MAC値テーブルとして保持する処理を追加する必要がある。
(34)本発明の実施の形態2では、保護制御モジュール120が、更新モジュール131、132、133の改ざんを検出しなかった場合には、更新用ソフトウェア配布モジュール210へ通知を行わないとしたが、これに限定するものではなく、改ざんを検出しなかった旨を更新用ソフトウェア配布モジュール210へ通知してもよい。
(35)本発明の実施の形態2では、保護制御モジュール120から更新用ソフトウェア配布モジュール210へ、更新モジュール131、132、133の改ざんを検出した旨の通知があった場合、更新用ソフトウェア配布モジュール210は、保護制御モジュール120が改ざんされていないかを確認するために、更新モジュール131、132、133へ保護制御モジュール120の改ざん検出を依頼するとしたが、これに限定するものではなく、保護制御モジュール120から更新用ソフトウェア配布モジュール210へ、更新モジュール131、132、133の改ざんを検出した旨の通知があった場合、検出された更新モジュールが改ざんされていると判断し、当該更新モジュールを相互認証処理や回復処理に使用しないとしてもよいし、保護制御モジュール120が無効化処理を実施するとしてもよい。この時、保護制御モジュール120は、耐タンパー化された領域で動作するなど、攻撃から保護されていることが望ましい。
(36)本発明の実施の形態3では、アクセス情報取得鍵の送付依頼をした更新モジュールが、保護制御モジュール120を更新する更新モジュールであるかどうかを、更新用ソフトウェア配布モジュール210に問い合わせたが、これに限定するものではなく、更新サーバ200が保護制御モジュール120を更新する更新モジュールであるかどうかを確認してもよい。
(37)上記の各モジュールは、具体的には、それぞれ個別のコンピュータプログラムであってもよいし、オペレーティングシステムに組み込まれるモジュールであってもよいし、オペレーティングシステムから呼ばれるドライバであってもよいし、アプリケーションプログラムであってもよい。
(38)上記の各装置を構成する構成要素の一部または全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムLSIは、その機能を達成する。
また、上記の各装置を構成する構成要素の各部は、個別に1チップ化されていても良いし、一部又は全てを含むように1チップ化されてもよい。
また、ここでは、システムLSIとしたが、集積度の違いにより、IC、LSI、スーパーLSI、ウルトラLSIと呼称されることもある。また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
(39)上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なICカードまたは単体のモジュールから構成されているとしてもよい。前記ICカードまたは前記モジュールは、マイクロプロセッサ、ROM、RAMなどから構成されるコンピュータシステムである。前記ICカードまたは前記モジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ICカードまたは前記モジュールは、その機能を達成する。このICカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
(40)本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、前記コンピュータプログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記コンピュータプログラムまたは前記デジタル信号を、前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
(41)上記実施の形態では、更新モジュールの数を3として説明したが、これに限定されるものでなく、更新モジュールは、複数あればよい。
(42)上記実施の形態では、アクセス制御モジュール140及び更新モジュール群130は、OS150の中に組み込まれているとしたが、更新モジュールがOSを更新する機能を備えている場合等には、更新モジュールは、OSの管理外にプログラムとして格納されているとしてもよい。また、保護制御モジュールがOSに組み込まれているとしてもよい。
(43)上記実施の形態では、RAM上で動作しているモジュールが改ざん検出及び無効化の対象であったが、EEPROMに記憶されているモジュールの改ざんチェックを行ってもよし、改ざんされている場合には無効化してもよい。また、一つでも改ざんされている更新モジュールがあれば、全ての更新モジュールを無効化あるいは更新してもよい。RAM及びEEPROMの両方のモジュールを無効化するとしてもよい。また、更新の対象となるのは、EEPROMに記憶されているモジュールでもよいし、RAM上で動作しているモジュールでもよい。
(44)機器100は具体的には、携帯電話等の携帯端末やデジタルテレビ等、双方向のデータ通信が可能な機器であればよい。
(45)上記実施の形態では、アクセス情報は、更新モジュール毎にそれぞれ個別のアクセス情報取得鍵で暗号化されているとしたが、同一のアクセス情報取得鍵で暗号化されているとしてもよい。その場合には、正常な更新モジュールが更新サーバにアクセスして、アクセス情報取得鍵に対応した復号鍵を取得し、取得した復号鍵を用いてアクセス制御モジュールを復号し、アクセス制御モジュールから、改ざんされた更新モジュールに対応するアクセス情報を取得し、取得したアクセス情報に基づいて、改ざんされた更新モジュールを無効化するとしてもよい。
(46)上記実施の形態では、保護制御モジュールが改ざんされている場合に、当該保護制御モジュールを更新し、その際、更新モジュール群に含まれる複数の更新モジュールの各々が、他の更新モジュールの改ざん検証を行うとしたが、改ざんの有無に関わらず、例えば、保護制御モジュールのバージョンをアップさせる場合等において、改ざん検証を行うとしてもよい。
(47)上記実施の形態では、更新用の保護制御モジュールは、複数の暗号鍵で暗号化されていたが、一つの暗号鍵で暗号化されているとしてもよい。その場合、当該暗号鍵に対応する復号鍵が複数に分割され、分割された復号鍵の全てが、改ざんされていない更新モジュールを送信先として送信され、分割された全ての復号鍵を用いて、改ざんされていない更新モジュールは、更新用の保護制御モジュールを復号するとしてもよい。
(48)分散情報を保持している更新モジュールが無効化されたときに、他の更新モジュールで保持している分散情報を更新する処理(脱退処理)を行ってもよいし、更新モジュールを新たに追加するときに分散情報を更新する処理(追加処理)を行ってもよい。
以下に、脱退処理及び追加処理の詳細を説明する。ここでは、機器100Aは6つの更新モジュール121A〜126Aを備えるものとして説明する。
更新モジュール121A〜126Aは、制御部250_j、分散情報格納部251_j、他モジュール分散情報格納部252_j、認証子格納部253_j、リスト格納部254_j、ID格納部255_j、送信部256_j及び受信部257_jから構成されている。制御部250_jは、分散情報更新部260_j、分散情報分割部261_j、分散情報検証部262_j、他モジュール分散情報検証部263_j、部分情報検証部264_j、変形情報生成部265_j、リスト更新部266_j及び取得部267_jを有している。なお、符号25x(x=1、2、・・・、7)に付与されている添え字jは、1、2、・・・、6の値であり、j番目の更新モジュールに対応する。
また、他モジュール分散情報XXX_Yは、分散情報XXXと同じと識別される分散情報で、更新モジュール12Yが保持していることを表す。この様に、複数の更新モジュールで共通の分散情報を持つことで分散情報に対して冗長性を持たせた構成としている。また、以降の説明において、第1及び第2他モジュール分散情報を特に区別する必要がない場合には、単に、他モジュール分散情報と言い、各他モジュール分散情報と分散情報とを特に区別する必要がない場合には、単に、分散情報と言う。
脱退処理の動作
脱退処理について、図30にて示す流れ図を用いて説明する。
この処理では、更新モジュールが不正な動作を行う可能性を考え、更新モジュール間で送信されるデータが正しいデータであるかを常に検証することで、不正な動作を行う更新モジュールが存在した場合に検知できるようにしている。さらに、各処理において、分散情報の値を更新する場合には、更新前の分散情報の値を退避しておき、脱退処理中に不正な動作を行う更新モジュールの存在を検知した場合には、脱退処理を中止し、分散情報の値を脱退処理前の値に戻すことで、分散情報が不正な値になることを防止する。
また、当該処理では、脱退する更新モジュールが所有する分散情報と同じ分散情報を持つ更新モジュールが分散情報の生成及び配布を行うものとする。この様な処理にすることで、脱退する更新モジュールが脱退処理を行わなくても分散情報を更新することが可能となり、不正な動作を行う更新モジュールを無効化する処理などにも利用できる。
なお、脱退対象となるモジュールを更新モジュール121Aとし、部分情報の生成を更新モジュール126Aが行うものとして、以下説明する。
更新モジュール126Aは、外部の装置(図示せず)から、脱退対象の更新モジュール121Aが有する分散情報“d_1”と同一の他モジュール分散情報から部分情報を生成する旨の脱退時の部分情報生成指示を受け取る。
更新モジュール126Aは、第1他モジュール分散情報“d1_1”から5つの分散情報を生成し、配布する処理を行う(ステップS4000)。言い換えると、更新モジュール126Aは、第1他モジュール分散情報“d1_1”を、5つの分散情報に分散(分解)する。
更新モジュール126Aが有する第1他モジュール分散情報“d1_1”と同一の情報を持つべきモジュールである更新モジュール122Aは、部分情報に用いられた第1他モジュール分散情報“d1_1”の検証を行う(ステップS4050)。
更新モジュール122A〜126Aは、脱退時における第1及び第2更新処理を行い、それぞれが保持する分散情報、第1及び第2他モジュール分散情報を更新する(ステップS4100、S4150)。
更新モジュール122A〜126Aは、更新が正常に行われたか否かを判断する(ステップS4200)。このとき、更新モジュール122A〜125Aは、判断結果を部分情報送信元である更新モジュール126Aへ通知する。具体的には、分散情報を共通に持っている更新モジュール同士で、分散情報検証部262_j及び他モジュール分散情報検証部263_jを用いて、互いに持っている分散情報が同じ値に更新されたかを、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と各自が保持していた分散情報が同じ値かどうかを検証する。更新モジュール122A〜125Aは、検証結果を更新モジュール126Aへ通知し、更新モジュール126Aは、検証結果を一時的に保持する。
全ての装置にて更新が正常に行われた場合には(ステップS4200における「YES」)、更新モジュール126Aは、配布先リストT100を更新する。更新モジュール126Aは、更新後の配布先リストをリスト格納部254_6へ格納するとともに、更新モジュール122A〜125A及び保護制御モジュール装置へ送信する。更新モジュール122A〜125A及び保護制御モジュール装置は、現在格納している配布先リストから更新後の配布先リストへと更新する(ステップS4250)。
全ての装置にて更新が正常に行われていない場合には(ステップS4200における「NO」)、更新モジュール126Aは、更新モジュール122A〜125Aへその旨を通知する。更新モジュール126A、及び通知を受けた更新モジュール122A〜125Aは、脱退処理を中止し、自装置の分散情報の値を脱退処理の前に戻し、処理を終了する。
なお、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と同じ値かどうかを検証するとしたが、これに限定するものではなく、ゼロ知識証明などの暗号プロトコルを使用して検証してもよい。ゼロ知識証明については、非特許文献1の132〜150ページに、暗号プロトコルについては、非特許文献1の224〜225ページに詳しく説明されている。
以下、ステップS400からS415にて行われる各処理について説明する。
(部分情報の生成処理)
ここでは、図30のステップS4000にて示す部分情報の生成処理について、図31にて示す流れ図を用いて説明する。
更新モジュール126Aの分散情報分割部261_6は、第1他モジュール分散情報“d1_1”211_6から5つの部分情報(d_1_1〜d_1_5)を生成する(ステップS4500)。このとき、各部分情報は、次式を満たすものとする。
(式) d1_1=d_1_1+d_1_2+d_1_3+d_1_4+d_1_5 mod L
具体的には、分散情報分割部261_6は、乱数生成器を用いて、(k−2)個(=4個)の乱数を生成することにより、部分情報(d_1_1〜d_1_4)を生成する。次に、分散情報分割部261_6は、
d_1_5 = d1_1 − (d_1_1+d_1_2+d_1_3+d_1_4)
により、d_1_5を算出する。このとき、減算結果が負の数になる事もあるが、そのまま部分情報として扱う。
分散情報分割部261_6は、脱退対象の装置(ここでは、更新モジュール121A)が保持する分散情報“d_1”及びこの情報と同一の値となるべき情報“d1_1”及び“d2_1”を除く残りの分散情報に対して、同一となるべき分散情報毎に、異なる部分情報を割り当てる。具体的には、部分情報d_1_iを分散情報d_(i+1)に割り当てる。
分散情報分割部261_6は、配布先リストT100の内容に基づいて、配布先の更新モジュール毎に、2つ若しくは3つの部分情報を配布する(ステップS4550)。なお、自装置へは2つの部分情報が配布されるが、この場合、分散情報分割部261_jは、分散情報更新部260_jへ出力する。
具体的には、分散情報分割部261_6は、以下のように各部分情報を配布する。
分散情報分割部261_6は、部分情報d_1_1、d_1_2を更新モジュール122Aへ送信する(ステップS4600)。分散情報分割部261_6は、部分情報d_1_1、d_1_2、d_1_3を更新モジュール123Aへ送信する(ステップS4610)。分散情報分割部261_6は、部分情報d_1_2、d_1_3、d_1_4を更新モジュール124Aへ送信する(ステップS462)。分散情報分割部261_6は、部分情報d_1_3、d_1_4、d_1_5を更新モジュール125Aへ送信する(ステップS4630)。分散情報分割部261_6は、部分情報d_1_4、d_1_5を分散情報更新部260_6へ出力し、一時的に記憶する。i番目の更新モジュールは、受信した各部分情報を分散情報更新部260_jに一時的に格納する。
(分散情報の検証処理)
ここでは、図30のステップS4050にて示す分散情報の検証処理について、図32にて示す流れ図を用いて説明する。
分散情報211_6が正当な値であることを検証するために更新モジュール122Aが保持する第2他モジュール分散情報211_2を利用する。
部分情報検証部264_2は、更新モジュール126Aから部分情報検証指示を、受信部257_jを介して受け取ると、更新モジュール121Aを除く残りのモジュール123A、124A、125A及び126Aそれぞれから部分情報d_1_2、d_1_3、d_1_4、d_1_5を収集する(ステップS4700)。
具体的には、i番目(i=3〜6)の更新モジュールは部分情報d_1_(i−1)を更新モジュール122Aへ出力する(ステップS4710〜S4740)。
部分情報検証部264_2は、分散情報更新部260_jにて記憶しているd_1_1と、受信した各部分情報d_1_2、d_1_3、d_1_4、d_1_5とを加算し、値s’を算出し、算出した値s’が正当であるか否かを検証する(ステップS4800)。具体的には、部分情報検証部264_2は、算出した値s’と、他モジュール分散情報格納部252_jに格納されている第2他モジュール分散情報“d2_1”とが一致するか否かを判断する。
部分情報検証部264_2は、検証結果を各更新モジュール123A〜126Aへ通知する(ステップS4850)。具体的には、部分情報検証部264_2は、検証結果により、値s’が第2他モジュール分散情報“d2_1”と同一であると判断する場合には、同一である旨の検証結果を各更新モジュール123A〜126Aへ出力する。同一でないと判断する場合には、部分情報検証部264_2は、同一でない旨の検証結果を各更新モジュール123A〜126Aへ出力する。なお、当該モジュールに対しては、検証結果を分散情報更新部260_jへ出力する。
(脱退時の第1更新処理)
ここでは、図30のステップS410にて示す脱退時の第1更新処理について、図33及び図34にて示す流れ図を用いて説明する。
更新モジュール122Aの分散情報更新部260_2は、部分情報検証部264_2にて行われた検証の結果により、更新モジュール126Aの第1他モジュール分散情報“d1_1”が正当であるか否かを判断する(ステップS5000)。正当であると判断する場合には(ステップS5000における「YES」)、分散情報更新部260_2は、一時的に記憶している部分情報“d_1_1”を用いて分散情報“d_2”を更新する(ステップS5050)。具体的には、分散情報更新部260_2は、分散情報“d_2”に部分情報“d_1_1”を加算することにより、新たな分散情報“d_2’(=d_2+d_1_1)”を算出する。次に、分散情報更新部260_2は、一時的に記憶している部分情報“d_1_2”を用いて第1他モジュール分散情報“d1_3”を更新する(ステップS5100)。具体的には、分散情報更新部260_2は、第1他モジュール分散情報“d1_3”に部分情報“d_1_2”を加算することにより、新たな分散情報“d1_3’(=d1_3+d_1_2)”を算出する。
更新モジュール123Aの分散情報更新部260_3は、更新モジュール122Aから受け取った検証結果により、更新モジュール126Aの第1他モジュール分散情報“d1_1”が正当であるか否かを判断する(ステップS5200)。正当であると判断する場合には(ステップS5200における「YES」)、分散情報更新部260_3は、一時的に記憶している部分情報“d_1_2”を用いて分散情報“d_3”を更新する(ステップS5250)。具体的には、分散情報更新部260_3は、分散情報“d_3”に部分情報“d_1_2”を加算することにより、新たな分散情報“d_3’(=d_3+d_1_2)”を算出する。次に、分散情報更新部260_3は、一時的に記憶している部分情報“d_1_3”、及び“d_1_1”を用いて第1及び他モジュール分散情報“d1_4”、“d2_2”を更新する(ステップS5300)。具体的には、分散情報更新部260_3は、第1他モジュール分散情報“d1_4”に部分情報“d_1_3”を加算することにより、新たな分散情報“d1_4’(=d1_4+d_1_3)”を算出する。分散情報更新部260_3は、第2他モジュール分散情報“d2_2”に部分情報“d_1_1”を加算することにより、新たな分散情報“d2_3’(=d2_2+d_1_1)”を算出する。
更新モジュール124Aの分散情報更新部260_4は、更新モジュール122Aから受け取った検証結果により、更新モジュール126Aの第1他モジュール分散情報“d1_1”が正当であるか否かを判断する(ステップS5400)。正当であると判断する場合には(ステップS5400における「YES」)、分散情報更新部260_4は、一時的に記憶している部分情報“d_1_3”を用いて分散情報“d_4”を更新する(ステップS5450)。具体的には、分散情報更新部260_4は、分散情報“d_4”に部分情報“d_1_3”を加算することにより、新たな分散情報“d_4’(=d_4+d_1_3)”を算出する。次に、分散情報更新部260_4は、一時的に記憶している部分情報“d_1_4”、及び“d_1_2”を用いて第1及び他モジュール分散情報“d1_5”、“d2_3”を更新する(ステップS5500)。具体的には、分散情報更新部260_4は、第1他モジュール分散情報“d1_5”に部分情報“d_1_4”を加算することにより、新たな分散情報“d1_5’(=d1_5+d_1_4)”を算出する。分散情報更新部260_4は、第2他モジュール分散情報“d2_3”に部分情報“d_1_2”を加算することにより、新たな分散情報“d2_3’(=d2_3+d_1_2)”を算出する。
更新モジュール125Aの分散情報更新部260_5は、更新モジュール122Aから受け取った検証結果により、更新モジュール126Aの第1他モジュール分散情報“d1_1”が正当であるか否かを判断する(ステップS5600)。正当であると判断する場合には(ステップS5600における「YES」)、分散情報更新部260_5は、一時的に記憶している部分情報“d_1_4”を用いて分散情報“d_5”を更新する(ステップS5650)。具体的には、分散情報更新部260_5は、分散情報“d_5”に部分情報“d_1_4”を加算することにより、新たな分散情報“d_5’(=d_5+d_1_4)”を算出する。次に、分散情報更新部260_5は、一時的に記憶している部分情報“d_1_5”、及び“d_1_3”を用いて第1及び他モジュール分散情報“d1_6”、“d2_4”を更新する(ステップS5700)。具体的には、分散情報更新部260_5は、第1他モジュール分散情報“d1_6”に部分情報“d_1_5”を加算することにより、新たな分散情報“d1_6’(=d1_6+d_1_5)”を算出する。分散情報更新部260_5は、第2他モジュール分散情報“d2_4”に部分情報“d_1_3”を加算することにより、新たな分散情報“d2_4’(=d2_4+d_1_3)”を算出する。
更新モジュール126Aの分散情報更新部260_6は、更新モジュール122Aから受け取った検証結果により、当該更新モジュールの第1他モジュール分散情報“d1_1”が正当であるか否かを判断する(ステップS5800)。正当であると判断する場合には(ステップS5800における「YES」)、分散情報更新部260_6は、一時的に記憶している部分情報“d_1_5”を用いて分散情報“d_6”を更新する(ステップS5850)。具体的には、分散情報更新部260_6は、分散情報“d_6”に部分情報“d_1_5”を加算することにより、新たな分散情報“d_6’(=d_6+d_1_5)”を算出する。次に、分散情報更新部260_6は、一時的に記憶している部分情報“d_1_4”を用いて第2他モジュール分散情報“d2_5”を更新する(ステップS5900)。具体的には、分散情報更新部260_6は、第2他モジュール分散情報“d2_5”に部分情報“d_1_4”を加算することにより、新たな分散情報“d2_5’(=d2_5+d_1_4)”を算出する。
各更新モジュール122A〜126Aにおいて、第1他モジュール分散情報“d1_1”が正当でないと判断する場合には(ステップS5000、S5200、S5400、S5600及びS5800における「NO」)、検証の結果が一致しないと通知を受け取った場合には、更新モジュール122Aか126Aが不正な動作を行っているので、各更新モジュールは、脱退処理を中止する。
(脱退時の第2更新処理)
ここでは、図30のステップS415にて示す脱退時の第2更新処理について、図35にて示す流れ図を用いて説明する。
更新モジュール126Aの分散情報更新部260_6は、分散情報“d_6’”を更新モジュール122Aへ出力する(ステップS6000)。
更新モジュール122Aの分散情報更新部260_2は、分散情報“d_2’”を更新モジュール126Aへ出力する(ステップS6050)。
分散情報更新部260_6は、分散情報“d_2’”及び“d2_2’”を収集する(ステップS6100)。このとき、更新モジュール123Aの分散情報更新部260_3は分散情報“d2_2’”を送信する(ステップS6110)。
分散情報更新部260_2は、分散情報“d_6’”及び“d2_6’”を収集する(ステップS6150)。このとき、更新モジュール123Aの分散情報更新部260_3は分散情報“d2_2’”を送信する(ステップS6160)。
分散情報更新部260_6は、収集した分散情報“d_2’”及び“d2_2’”が一致するか否かを判断する(ステップS6200)。一致すると判断する場合には(ステップS6200における「YES」)、分散情報更新部260_6は、第1他モジュール分散情報を“d_2’”とする(ステップS6250)。
分散情報更新部260_2は、収集した分散情報“d_6’”及び“d2_6’”が一致するか否かを判断する(ステップS6300)。一致すると判断する場合には(ステップS6300における「YES」)、分散情報更新部260_2は、第2他モジュール分散情報を“d_6’”とする(ステップS6350)。
分散情報更新部260_6は、一致しないと判断する場合には(ステップS6200における「NO」)、更新モジュール126Aは、更新モジュール122A〜125Aへその旨を通知する。更新モジュール126A、及び通知を受けた更新モジュール122A〜125Aは、脱退処理を中止し、自モジュールの分散情報の値を脱退処理の前に戻し、処理を終了する。
分散情報更新部260_2は、一致しないと判断する場合には(ステップS6300における「NO」)、更新モジュール122Aは、更新モジュール123A〜126Aへその旨を通知する。更新モジュール122A、及び通知を受けた更新モジュール123A〜126Aは、脱退処理を中止し、自モジュールの分散情報の値を脱退処理の前に戻し、処理を終了する。
(具体例)
脱退処理後の更新モジュール122A〜126Aのそれぞれが保持する分散情報、第1及び第2他モジュール分散情報を、図36にて示す。
例えば、更新モジュール122Aは、脱退処理後において、更新後の分散情報“d_2’”212b、第1他モジュール分散情報“d1_3’”213_2b及び第2他モジュール分散情報“d2_6’”211_2bを保持している。
ここで、更新後の各分散情報“d_2’”〜“d_6’”により、秘密鍵“d”が回復されることを以下に示す。
d_2’+d_3’+d_4’+d_5’+d_6’
= (d_2+d_1_1)+(d_3+d_1_2)+(d_4+d_1_3)
+(d_5+d_1_4)+(d_6+d_1_5)
= (d_1_1+d_1_2+d_1_3+d_1_4+d_1_5)
+(d_2+d_3+d_4+d_5+d_6)
= d_1+d_2+d_3+d_4+d_5+d_6
= d
このように、更新モジュール121Aが脱退後も、それぞれの更新モジュールが保持する分散情報の総和を一定とすることが可能となるため、脱退処理時において、ソフトウェア更新システムは、新しい秘密鍵“d”を復元し分散情報を再生成することなく、更新モジュールを脱退させることが可能となる。
追加処理の動作
ここでは、追加処理について、図37にて示す流れ図を用いて説明する。
追加処理では、更新モジュールが不正な動作を行う可能性を考え、更新モジュール間で送信されるデータが正しいデータであるかを常に検証することで、不正な動作を行う更新モジュールが存在した場合に検知できるようにしている。さらに、追加処理では、分散情報の値を更新する場合には、更新前の分散情報の値を退避しておき、追加処理中に不正な動作を行う更新モジュールの存在を検知した場合には、追加処理を中止し、分散情報の値を追加処理前の値に戻すことで、分散情報が不正な値になることを防止する。
ここでは、複数の更新モジュールから変形情報を追加する更新モジュールへ送信し、追加する更新モジュールの分散情報を生成することで、追加する更新モジュールに変形情報を送信する更新モジュールが不正な動作を行い、「新しい秘密鍵」が正しく生成できないように、不正な変形情報を送信するような行為を防止している。また、分散情報を正しく更新しなかったりするような行為を防止する。また、各更新モジュールは分散情報が正しく更新されたかを、同じ分散情報を共通に持っている更新モジュール同士で確認することで、不正な更新モジュールによる不正な更新を防止している。
また、追加する更新モジュールへ変形情報を送信した更新モジュールが、追加する更新モジュールの分散情報を共通に持つ構成の場合、元々保持していた分散情報と追加する更新モジュールの分散情報と追加する更新モジュールへ送信した変形情報から、本来保持していない分散情報を計算することが可能になる。そのため、更新モジュールの追加処理の最後に、変形情報を送信した更新モジュールの所有する分散情報から上記とは異なる値の変形情報を切り出し、その変形情報を分割して各更新モジュールへ送信することで、分散情報の値を更新する処理が必要になる。より詳細な説明は後述する。
なお、追加対象となる更新モジュールを更新モジュール127Aとし、変形情報の生成を更新モジュール121A、及び126Aが行うものとして、以下説明する。
更新モジュール121A、及び126Aが、変形情報を生成し、各更新モジュールへ配布する配布処理を行う(ステップS7000)。
追加対象の更新モジュール127A及び、更新モジュール127Aと同一の分散情報を保持する更新モジュール121A、及び126Aとが分散情報を生成する分散情報の生成処理を行う(ステップS7050)。
更新モジュール127Aが、第1及び第2他モジュール分散情報を格納する他モジュール分散情報の格納処理を行う(ステップS7100)。
更新モジュール121A、122A、125A〜127Aは、更新が正常に行われたか否かを判断する(ステップS7150)。更新モジュール121A、122A、125A及び126Aは、検証結果を更新モジュール127Aへ通知し、更新モジュール127Aは、検証結果を一時的に保持する。
更新対象の全ての更新モジュールにおいて正常に更新がされたと判断する場合には(ステップS7150における「YES」)、更新モジュール127Aの分散情報更新部260_7は、更新モジュール121A及び126Aから証明書を収集する(ステップS7200)。
分散情報更新部260_7は、更新モジュール121A及び126Aから収集した証明書が正当であるか否かを判断する(ステップS7250)。具体的には、分散情報更新部260_7は、収集した2つの証明書が同一であるか否かを判断する。
同一であると判断する場合には(ステップS7250における「YES」)、分散情報更新部260_7は、証明書を認証子格納部253_7へ格納する(ステップS7300)。分散情報更新部260_7は、証明書の格納後、追加時の第1分割処理の開始を示す旨の指示を更新モジュール121Aへ出力する。
次に、更新モジュール121Aが、自身が保持する分散情報から7つの部分情報を生成し、生成した各部分情報を各更新モジュールへ配布する追加時の第1分割処理を行う(ステップS7350)。
更新モジュール121A〜127Aは、配布された部分情報を用いて分散情報を更新する追加時の第1更新処理を行う(ステップS7400)。
更新モジュール121A〜127Aは、更新が正常に行われたか否かを判断する(ステップS7450)。このとき、更新モジュール122A〜127Aは、判断結果を部分情報送信元である更新モジュール121Aへ通知する。具体的には、分散情報を共通に持っている更新モジュール同士で、分散情報検証部262_j及び他モジュール分散情報検証部263_jを用いて、互いに持っている分散情報が同じ値に更新されたかを、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と各自が保持していた分散情報が同じ値かどうかを検証する。更新モジュール122A〜127Aは、検証結果を更新モジュール121Aへ通知し、更新モジュール121Aは、検証結果を一時的に保持する。
全ての更新モジュールにて更新が正常に行われた場合には(ステップS7450における「YES」)、更新モジュール121Aは、更新モジュール126Aへ追加時の第2分割処理を行う旨の分割指示を送信する。更新モジュール126Aは分割指示を受け取ると、自身が保持する分散情報から7つの部分情報を生成し、生成した各部分情報を各更新モジュールへ配布する追加時の第2分割処理を行う(ステップS7500)。
更新モジュール121A〜127Aは、配布された部分情報を用いて分散情報を更新する追加時の第2更新処理を行う(ステップS7550)。
更新モジュール121A〜127Aは、更新が正常に行われたか否かを判断する(ステップS7600)。更新モジュール121A〜125A及び127Aは、検証結果を更新モジュール126Aへ通知し、更新モジュール126Aは、検証結果を一時的に保持する。
全ての更新モジュールにて更新が正常に行われた場合には(ステップS7600における「YES」)、更新モジュール126Aは、配布先リストT100を更新する。更新モジュール126Aは、更新後の配布先リストをリスト格納部254_6へ格納するとともに、更新モジュール121A〜125A、127A及び保護制御モジュールへ送信する。更新モジュール121A〜125A、127A及び保護制御モジュールは、現在格納している配布先リストから更新後の配布先リストへと更新する(ステップS7650)。
更新対象の更新モジュールにて更新が正常に行われていないと判断する場合には(ステップS7150における「NO」)、及び証明書が正当でないと判断する場合には(ステップS7250における「NO」)、更新モジュール127Aは、更新対象の各更新モジュール121A、122A、125A及び126Aへその旨を通知する。更新対象の各更新モジュールは、追加理を中止し、自モジュールの分散情報の値を追加処理の前に戻し、処理を終了する。
全てのモジュールにて更新が正常に行われていない場合には(ステップS7450における「NO」)、更新モジュール121Aは、更新モジュール122A〜127Aへその旨を通知する。更新モジュール121A〜127Aは、追加処理を中止し、自モジュールの分散情報の値を追加処理の前に戻し、処理を終了する。
また、ステップS7600における「NO」の場合も同様に、更新モジュール121A〜127Aは、脱退処理を中止し、自モジュールの分散情報の値を脱退処理の前に戻し、処理を終了する。
なお、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と同じ値かどうかを検証するとしたが、これに限定するものではなく、ゼロ知識証明などの暗号プロトコルを使用して検証してもよい。ゼロ知識証明については、非特許文献1の132〜150ページに、暗号プロトコルについては、非特許文献1の224〜225ページに詳しく説明されている。
以下、追加処理の詳細について説明する。
(配布処理)
ここでは、図37のステップS7000にて示す部分情報の生成処理について、図38にて示す流れ図を用いて説明する。
更新モジュール126Aの変形情報生成部265_6は、外部装置から追加時の分散情報生成指示を受け取ると、変形情報nを生成する(ステップS8000)。
更新モジュール121Aの変形情報生成部265_1は、外部装置から追加時の分散情報生成指示を受け取ると、変形情報mを生成する(ステップS8050)。
変形情報生成部265_6は、生成した変形情報nを更新モジュール121A、125及び127へ出力する(ステップS8100)。
変形情報生成部265_1は、生成した変形情報mを更新モジュール122A、126A、及び127Aへ出力する(ステップS8150)。
更新モジュール126Aの分散情報更新部260_6は、変形情報mを受け取ると、受け取った変形情報mを一時的に格納する(ステップS8200)。
更新モジュール121Aの分散情報更新部260_1は、変形情報nを受け取ると、受け取った変形情報nを一時的に格納する(ステップS8250)。
分散情報更新部260_6は、生成した変形情報nを用いて、新たな分散情報“d_6’(=d_6−n)”を生成し、分散情報格納部251_6に格納されている分散情報“d_6“を“d_6’”へと更新する(ステップS8300)。
分散情報更新部260_1は、生成した変形情報mを用いて、新たな分散情報“d_1’(=d_1−m)”を生成し、分散情報格納部251_1に格納されている分散情報“d_1”を“d_1’”へと更新する(ステップS8350)。
更新モジュール125Aの分散情報更新部260_5は、変形情報nを受け取ると、受け取った変形情報nを用いて新たな第1他モジュール分散情報“d1_6’(=d1_6−n)”を生成し、他モジュール分散情報格納部252_5に格納されている第1他モジュール分散情報“d1_6”を“d1_6’”へと更新する(ステップS8400)。
更新モジュール127Aの分散情報更新部260_7は、変形情報n及びmを受け取ると、受け取った変形情報n及びmを一時的に格納する(ステップS8450)。
更新モジュール122Aの分散情報更新部260_2は、変形情報mを受け取ると、受け取った変形情報mを用いて新たな第2他モジュール分散情報“d2_1’(=d2_1−m)”を生成し、他モジュール分散情報格納部252_2に格納されている第2他モジュール分散情報“d2_1”を“d2_1’”へと更新する(ステップS8500)。
(分散情報の生成処理)
ここでは、図37のステップS705にて示す分散情報の生成処理について、図39にて示す流れ図を用いて説明する。
分散情報更新部260_6は、変形情報n及びmを用いて他モジュール分散情報“d1_7=(m+n)”を生成する(ステップS8600)。分散情報更新部260_6は、他モジュール分散情報格納部252_6に格納されている第1他モジュール分散情報“d1_1”を“d1_7”へと更新(置換)する(ステップS8650)。
分散情報更新部260_7は、変形情報n及びmを用いて分散情報“d_7=(m+n)”を生成する(ステップS8700)。分散情報更新部260_7は、分散情報格納部251_7に生成した分散情報“d_7”を格納する(ステップS8750)。
分散情報更新部260_1は、変形情報n及びmを用いて他モジュール分散情報“d2_7=(m+n)”を生成する(ステップS8800)。分散情報更新部260_1は、他モジュール分散情報格納部252_1に格納されている第2他モジュール分散情報“d2_1”を“d2_7”へと更新(置換)する(ステップS8850)。
(他モジュール分散情報の格納処理)
ここでは、図37のステップS7100にて示す他モジュール分散情報の格納処理について、図40にて示す流れ図を用いて説明する。
更新モジュール127Aの分散情報更新部260_7は、更新モジュール121Aへ分散情報要求指示を、更新モジュール122Aへ第2他モジュール分散情報要求指示を、それぞれ出力し、分散情報“d_1’”及び“d2_1’”を収集する(ステップS9000)。このとき、分散情報要求指示を受け付けた更新モジュール121Aの取得部267_1は、分散情報“d_1’”を取得して、更新モジュール127Aへ出力する(ステップS9010)。また、第2他モジュール分散情報要求指示を受け付けた更新モジュール122Aの取得部267_2は、分散情報“d2_1’”を取得して、更新モジュール127Aへ出力する(ステップS9020)。
分散情報更新部260_7は、収集した分散情報“d_1’”と“d2_1’”とが同一の値であるか否かを判断する(ステップS9050)。
同一であると判断する場合には(ステップS9050における「YES」)、分散情報更新部260_7は、収集した分散情報“d_1’”を第1他モジュール分散情報として他モジュール分散情報格納部252_7へ格納する(ステップS9100)。
分散情報更新部260_7は、更新モジュール126Aへ分散情報要求指示を、更新モジュール125Aへ第1他モジュール分散情報要求指示を、それぞれ出力し、分散情報“d_6’”及び“d1_6’”を収集する(ステップS9150)。このとき、分散情報要求指示を受け付けた更新モジュール126Aの取得部267_6は、分散情報“d_6’”を取得して、更新モジュール127Aへ出力する(ステップS9160)。また、第1他モジュール分散情報要求指示を受け付けた更新モジュール125Aの取得部267_5は、分散情報“d1_6’”を取得して、更新モジュール127Aへ出力する(ステップS9170)。
分散情報更新部260_7は、収集した分散情報“d_6’”と“d1_6’”とが同一の値であるか否かを判断する(ステップS9200)。
同一であると判断する場合には(ステップS9200における「YES」)、分散情報更新部260_7は、収集した分散情報“d_6’”を第2他モジュール分散情報として他モジュール分散情報格納部252_7へ格納する(ステップS9250)。
同一でないと判断する場合には(ステップS9050若しくはステップS9200における「NO」)、更新モジュール127Aは、更新モジュール121A〜126Aへその旨を通知する。更新モジュール121A〜127Aは、追加処理を中止し、自モジュールの分散情報の値を追加処理の前に戻し、処理を終了する。
(追加時の第1分割処理)
ここでは、図37のステップS7350にて示す追加時の第1分割処理について、図41にて示す流れ図を用いて説明する。
更新モジュール121Aの分散情報分割部261_1は、分散情報“d_1’”から7つの部分情報(d_1_1〜d_1_7)を生成する(ステップS9500)。言い換えると、分散情報分割部261_1は、分散情報“d_1’”を、7つの部分情報(d_1_1〜d_1_7)に分散(分解)する。このとき、各部分情報は、次式を満たすものとする。
(式) d_1’= d_1_1+d_1_2+d_1_3+d_1_4+d_1_5
+d_1_6+d_1_7 mod L
具体的には、分散情報分割部261_1は、乱数生成器を用いて、6個の乱数を生成することにより、部分情報(d_1_1〜d_1_6)を生成する。次に、分散情報分割部261_1は、
d_1_7 = d_1’ − (d_1_1+d_1_2+・・・+d_1_6)
により、d_1_7を算出する。このとき、減算結果が負の数になる事もあるが、そのまま部分情報として扱う。
分散情報分割部261_1は、生成(分散)した3個若しくは6個の部分情報を各モジュール122A〜127Aへ配布する(ステップS9550)。
具体的には、分散情報分割部261_1は、更新モジュール122A及び127に対して生成した部分情報d_1_2〜d_1_7を配布する(ステップS9560及びS9610)。他のモジュール123A〜126Aにおけるi番目のモジュールに対しては、部分情報d_1_(i−1)、d_1_i及びd_1_(i+1)を配布する(ステップS9570、S9580、S9590及びS9600)。
更新モジュール122A〜127Aは、受信した各部分情報を分散情報更新部260_jに一時的に格納する。
(追加時の第1更新処理)
ここでは、図37のステップS7400にて示す追加時の第1更新処理について、図42から図44にて示す流れ図を用いて説明する。
更新モジュール121Aの分散情報更新部260_1は、生成した部分情報“d_1_1”を新たな分散情報“D_1(=d_1_1)”として、分散情報格納部251_1に格納されている分散情報“d_1’”を新たな分散情報“D_1”に更新する(ステップS9700)。分散情報更新部260_1は、生成した部分情報“d_1_2”及び“d_1_7”を用いて新たな第1及び第2他モジュール分散情報“D1_2(=d1_2+d_1_2)”及び“D2_7(=d2_7+d_1_7)”を生成し、分散情報格納部251_1に格納されている第1及び第2他モジュール分散情報“d1_2”及び“d2_7’”を新たな第1及び第2他モジュール分散情報“D1_2”及び“D2_7”に更新する(ステップS9750)。
更新モジュール122Aの分散情報更新部260_2は、更新モジュール121Aから受け取った部分情報“d_1_2”を用いて新たな分散情報“D_2(=d_2+d_1_2)”を生成し、分散情報格納部251_2に格納されている分散情報“d_2”を新たな分散情報“D_2”に更新する(ステップS9800)。分散情報更新部260_2は、更新モジュール121Aから受け取った部分情報“d_1_2”〜“d_1_7”を用いて新たな第1及び第2他モジュール分散情報“D1_3(=d1_3+d_1_3)”及び“D2_1(=d2_1’−(d_1_2+d_1_3+・・・+d_1_7))”を生成し、分散情報格納部251_2に格納されている第1及び第2他モジュール分散情報“d1_3”及び“d2_1’”を新たな第1及び第2他モジュール分散情報“D1_3”及び“D2_1”に更新する(ステップS9850)。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。
更新モジュール123Aの分散情報更新部260_3は、更新モジュール121Aから受け取った部分情報“d_1_3”を用いて新たな分散情報“D_3(=d_3+d_1_3)”を生成し、分散情報格納部251_3に格納されている分散情報“d_3”を新たな分散情報“D_3”に更新する(ステップS9900)。分散情報更新部260_3は、更新モジュール121Aから受け取った部分情報“d_1_4”及び“d_1_2”を用いて新たな第1及び第2他モジュール分散情報“D1_4(=d1_4+d_1_4)”及び“D2_2(=d2_2+d_1_2)”を生成し、分散情報格納部251_3に格納されている第1及び第2他モジュール分散情報“d1_4”及び“d2_2”を新たな第1及び第2他モジュール分散情報“D1_4”及び“D2_2”に更新する(ステップS9950)。
更新モジュール124Aの分散情報更新部260_4は、更新モジュール121Aから受け取った部分情報“d_1_4”を用いて新たな分散情報“D_4(=d_4+d_1_4)”を生成し、分散情報格納部251_4に格納されている分散情報“d_4”を新たな分散情報“D_4”に更新する(ステップS10000)。分散情報更新部260_4は、更新モジュール121Aから受け取った部分情報“d_1_5”及び“d_1_3”を用いて新たな第1及び第2他モジュール分散情報“D1_5(=d1_5+d_1_5)”及び“D2_3(=d2_3+d_1_3)”を生成し、分散情報格納部251_4に格納されている第1及び第2他モジュール分散情報“d1_5”及び“d2_3”を新たな第1及び第2他モジュール分散情報“D1_5”及び“D2_3”に更新する(ステップS10050)。
更新モジュール125Aの分散情報更新部260_5は、更新モジュール121Aから受け取った部分情報“d_1_5”を用いて新たな分散情報“D_5(=d_5+d_1_5)”を生成し、分散情報格納部251_5に格納されている分散情報“d_5”を新たな分散情報“D_5”に更新する(ステップS1010)。分散情報更新部260_5は、更新モジュール121Aから受け取った部分情報“d_1_6”及び“d_1_4”を用いて新たな第1及び第2他モジュール分散情報“D1_6(=d1_6+d_1_6)”及び“D2_4(=d2_4+d_1_4)”を生成し、分散情報格納部251_5に格納されている第1及び第2他モジュール分散情報“d1_6”及び“d2_4”を新たな第1及び第2他モジュール分散情報“D1_6”及び“D2_4”に更新する(ステップS10150)。
更新モジュール126Aの分散情報更新部260_6は、更新モジュール121Aから受け取った部分情報“d_1_6”を用いて新たな分散情報“D_6(=d_6’+d_1_6)”を生成し、分散情報格納部251_6に格納されている分散情報“d_6’”を新たな分散情報“D_6”に更新する(ステップS10200)。分散情報更新部260_6は、更新モジュール121Aから受け取った部分情報“d_1_7”及び“d_1_5”を用いて新たな第1及び第2他モジュール分散情報“D1_7(=d1_7+d_1_7)”及び“D2_5(=d2_5+d_1_5)”を生成し、分散情報格納部251_6に格納されている第1及び第2他モジュール分散情報“d1_7”及び“d2_5”を新たな第1及び第2他モジュール分散情報“D1_7”及び“D2_5”に更新する(ステップS10250)。
更新モジュール127Aの分散情報更新部260_7は、更新モジュール121Aから受け取った部分情報“d_1_7”を用いて新たな分散情報“D_7(=d_7+d_1_7)”を生成し、分散情報格納部251_7に格納されている分散情報“d_7”を新たな分散情報“D_7”に更新する(ステップS10300)。分散情報更新部260_7は、更新モジュール121Aから受け取った部分情報“d_1_2”〜“d_1_7”を用いて新たな第1及び第2他モジュール分散情報“D1_1(=d1_1’−(d_1_2+d_1_3+・・・+d_1_7))”及び“D2_6(=d2_6’+d_1_6)”を生成し、分散情報格納部251_7に格納されている第1及び第2他モジュール分散情報“d1_1’”及び“d2_6’”を新たな第1及び第2他モジュール分散情報“D1_1”及び“D2_6”に更新する(ステップS10350)。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。
(追加時の第2分割処理)
ここでは、図37のステップS750にて示す追加時の第2分割処理について、図45にて示す流れ図を用いて説明する。
更新モジュール126Aの分散情報分割部261_6は、分散情報“D_6”から7つの部分情報(d_6_1〜d_6_7)を生成する(ステップS1050)。言い換えると、分散情報分割部261_6は、分散情報“D_6”を、7つの部分情報(d_6_1〜d_6_7)に分散(分解)する。このとき、各部分情報は、次式を満たすものとする。
(式) D_6= d_6_1+d_6_2+d_6_3+d_6_4+d_6_5
+d_6_6+d_6_7 mod L
具体的には、分散情報分割部261_6は、乱数生成器を用いて、6個の乱数を生成することにより、部分情報(d_6_1〜d_6_6)を生成する。次に、分散情報分割部261_6は、
d_6_7 = D_6 − (d_6_1+d_6_2+・・・+d_6_6)
により、d_6_7を算出する。このとき、減算結果が負の数になる事もあるが、そのまま部分情報として扱う。
分散情報分割部261_6は、生成(分散)した3個若しくは6個分散情報を各更新モジュール121A〜125A及び127Aへ配布する(ステップS10550)。
更新モジュール125A及び127Aに対して生成した部分情報d_6_1〜d_6_5及びd_6_7を配布する(ステップS10600及びS10610)。他のモジュール121A〜124Aにおけるi番目のモジュールに対しては、部分情報d_6_(i−1)、d_6_i及びd_6_(i+1)を配布する(ステップS10560、S10570、S10580及びS10590)。なお、i−1=0の場合には、部分情報d_6_7を配布する。
更新モジュール121A〜125A及び127Aは、受信した各部分情報を分散情報更新部260_jに一時的に格納する。
(追加時の第2更新処理)
ここでは、図37のステップS7550にて示す追加時の第2更新処理について、図46から図48にて示す流れ図を用いて説明する。
更新モジュール121Aの分散情報更新部260_1は、更新モジュール126Aから受け取った部分情報“d_6_1”を用いて、新たな分散情報“D_1’(=D_1+d_6_1)”を生成し、分散情報格納部251_1に格納されている分散情報“D_1”を新たな分散情報“D_1’”に更新する(ステップS10700)。分散情報更新部260_1は、更新モジュール126Aから受け取った部分情報“d_6_2”及び“d_6_7”を用いて新たな第1及び第2他モジュール分散情報“D1_2’(=D1_2+d_6_2)”及び“D2_7’(=D2_7+d_6_7)”を生成し、分散情報格納部251_1に格納されている第1及び第2他モジュール分散情報“D1_2”及び“D2_7’”を新たな第1及び第2他モジュール分散情報“D1_2’”及び“D2_7’”に更新する(ステップS10750)。
更新モジュール122Aの分散情報更新部260_2は、更新モジュール126Aから受け取った部分情報“d_6_2”を用いて新たな分散情報“D_2’(=D_2+d_6_2)”を生成し、分散情報格納部251_2に格納されている分散情報“D_2”を新たな分散情報“D_2’”に更新する(ステップS10800)。分散情報更新部260_2は、更新モジュール126Aから受け取った部分情報“d_6_3”及び“d_6_1”を用いて新たな第1及び第2他モジュール分散情報“D1_3’(=D1_3+d_6_3)”及び“D2_1’(=D2_1+d_6_1)”を生成し、分散情報格納部251_2に格納されている第1及び第2他モジュール分散情報“D1_3”及び“D2_1”を新たな第1及び第2他モジュール分散情報“D1_3’”及び“D2_1’”に更新する(ステップS10850)。
更新モジュール123Aの分散情報更新部260_3は、更新モジュール126Aから受け取った部分情報“d_6_3”を用いて新たな分散情報“D_3’(=D_3+d_6_3)”を生成し、分散情報格納部251_3に格納されている分散情報“D_3”を新たな分散情報“D_3’”に更新する(ステップS1090)。分散情報更新部260_3は、更新モジュール126Aから受け取った部分情報“d_6_4”及び“d_6_2”を用いて新たな第1及び第2他モジュール分散情報“D1_4’(=D1_4+d_6_4)”及び“D2_2’(=D2_2+d_6_2)”を生成し、分散情報格納部251_3に格納されている第1及び第2他モジュール分散情報“D1_4”及び“D2_2”を新たな第1及び第2他モジュール分散情報“D1_4’”及び“D2_2’”に更新する(ステップS10950)。
更新モジュール124Aの分散情報更新部260_4は、更新モジュール121Aから受け取った部分情報“d_6_4”を用いて新たな分散情報“D_4’(=D_4+d_6_4)”を生成し、分散情報格納部251_4に格納されている分散情報“D_4”を新たな分散情報“D_4’”に更新する(ステップS11000)。分散情報更新部260_4は、更新モジュール126Aから受け取った部分情報“d_6_5”及び“d_6_3”を用いて新たな第1及び第2他モジュール分散情報“D1_5’(=D1_5+d_6_5)”及び“D2_3’(=D2_3+d_6_3)”を生成し、分散情報格納部251_4に格納されている第1及び第2他モジュール分散情報“D1_5”及び“D2_3”を新たな第1及び第2他モジュール分散情報“D1_5’”及び“D2_3’”に更新する(ステップS11050)。
更新モジュール125Aの分散情報更新部260_5は、更新モジュール126Aから受け取った部分情報“d_6_5”を用いて新たな分散情報“D_5’(=D_5+d_6_5)”を生成し、分散情報格納部251_5に格納されている分散情報“D_5”を新たな分散情報“D_5’”に更新する(ステップS11100)。分散情報更新部260_5は、更新モジュール126Aから受け取った部分情報“d_6_1”〜“d_6_5”及び“d_6_7”を用いて新たな第1及び第2他モジュール分散情報“D1_6’(=D1_6−(d_6_1+d_6_2+・・・+d_6_5+d_6_7)”及び“D2_4’(=D2_4+d_6_4)”を生成し、分散情報格納部251_5に格納されている第1及び第2他モジュール分散情報“D1_6”及び“D2_4”を新たな第1及び第2他モジュール分散情報“D1_6’”及び“D2_4’”に更新する(ステップS11150)。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。
更新モジュール126Aの分散情報更新部260_6は、生成した部分情報“d_1_6”を新たな分散情報“D_6’(=d_6_6)”として、分散情報格納部251_6に格納されている分散情報“D_6”を新たな分散情報“D_6’”に更新する(ステップS11200)。分散情報更新部260_6は、生成した部分情報“d_6_7”及び“d_6_5”を用いて新たな第1及び第2他モジュール分散情報“D1_7’(=D1_7+d_6_7)”及び“D2_5’(=D2_5+d_6_5)”を生成し、分散情報格納部251_6に格納されている第1及び第2他モジュール分散情報“D1_7”及び“D2_5”を新たな第1及び第2他モジュール分散情報“D1_7’”及び“D2_5’”に更新する(ステップS11250)。
更新モジュール127Aの分散情報更新部260_7は、更新モジュール126Aから受け取った部分情報“d_6_7”を用いて新たな分散情報“D_7’(=D_7+d_6_7)”を生成し、分散情報格納部251_7に格納されている分散情報“D_7”を新たな分散情報“D_7’”に更新する(ステップS11300)。分散情報更新部260_7は、更新モジュール126Aから受け取った部分情報“d_6_1”〜“d_1_5”及び“d_1_7”を用いて新たな第1及び第2他モジュール分散情報“D1_1’(=D1_1+d_6_1)”及び“D2_6’(=D2_6−(d_6_1+d_6_2+・・・+d_6_5+d_6_7))”を生成し、分散情報格納部251_7に格納されている第1及び第2他モジュール分散情報“D1_1”及び“D2_6”を新たな第1及び第2他モジュール分散情報“D1_1’”及び“D2_6’”に更新する(ステップS11350)。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。
(具体例)
追加処理後の更新モジュール121A〜127Aのそれぞれが保持する分散情報、第1及び第2他モジュール分散情報を、図49にて示す。
例えば、更新モジュール121Aは、追加処理後において、更新後の分散情報“D_1’”211c、第1他モジュール分散情報“D1_2’”212_1c及び第2他モジュール分散情報“D2_7’”217_1cを保持している。
ここで、更新後の各分散情報“D_1’”〜“D_7’”により、秘密鍵“d”が回復されることを以下に示す。
D_1’+D_2’+D_3’+D_4’+D_5’+D_6’+D_7’
= (D_1+d_6_1)+(D_2+d_6_2)+(D_3+d_6_3)
+(D_4+d_6_4)+(D_5+d_6_5)+(d_6_6)+(D_7+d_6_7)
= D_1+D_2+D_3+D_4+D_5+D_7
+d_6_1+d_6_2+d_6_3+d_6_4+d_6_5+d_6_6+d_6_7
= D_1+D_2+D_3+D_4+D_5+D_6+D_7
= (d_1_1)+(d_2+d_1_2)+(d_3+d_1_3)+(d_4+d_1_4)
+(d_5+d_1_5)+(d_6’+d_1_6)+(d_7+d_1_7)
= d_2+d_3+d_4+d_5+d_6’+d_7
+d_1_1+d_1_2+d_1_3+d_1_4+d_1_5+d_1_6+d_1_7
= d_1’+d_2+d_3+d_4+d_5+d_6’+d_7
= (d_1−m)+d_2+d_3+d_4+d_5+(d_6−n)+m+n
= d_1+d_2+d_3+d_4+d_5+d_6+d_7
= d
このように、更新モジュール127Aの追加後も、それぞれの更新モジュールが保持する分散情報の総和を一定とすることが可能となるため、追加処理時において、ソフトウェア更新システムは、新しい秘密鍵“d”を復元し分散情報を再生成することなく、更新モジュールを追加させることが可能となる。
(追加処理時の第1及び第2更新処理の必要性)
追加時における第1及び第2更新処理は、更新モジュール121Aと126Aが分散情報を持ちすぎるために必要になる処理である。
具体的には、更新モジュール121Aは、追加処理のステップS7300の終了後には、分散情報“d_1’”と他モジュール分散情報“d1_2”及びと“d2_7”の3つの分散情報を保持することになる。この時、他モジュール分散情報“d2_7”は、更新モジュール121Aが生成した変形情報mと更新モジュール126Aが生成した変形情報nの和になっている。そのため、他モジュール分散情報“d2_7”と更新モジュール121Aが生成した変形情報mから更新モジュール126Aが送信した変形情報nを求めることが出来る。さらに、追加処理前には更新前の他モジュール分散情報“d2_6”も保持していたため、この更新前の他モジュール分散情報“d2_6”と更新モジュール126Aが生成した変形情報nとから、更新後の分散情報“d2_6’(=d_6’)”の値を求めることが出来る。この様に更新モジュール121Aは、本来は3つの分散情報しか保持しないはずが4つの分散情報を保持することが可能となり、分散情報を持ちすぎることになる。同様の事が更新モジュール126Aにも言えるため、更新モジュールの追加処理の最後に、このような分散情報の持ちすぎを解消するために、更新モジュール121Aと126Aが所有する分散情報の更新を行う必要がある。
なお、追加される更新モジュールの所有する分散情報を生成するために2つの更新モジュールが変形情報を生成、送信する構成としたが、これに限定するものではなく、例えば追加される更新モジュール以外のすべての更新モジュールが変形情報を送信する構成にしてもよい。
(49)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
また、本発明に係るソフトウェア更新装置は、その範囲を逸脱することなく本発明の趣旨に沿って様々な変形または修正が可能であることは言うまでもない。
以下、図面に基づき本発明の実施の形態を説明する。
(実施の形態1)
1.ソフトウェア更新システム1000の構成
図1は、本発明の実施の形態1において、本発明に係るソフトウェア更新装置が適用されたソフトウェア更新システム1000の全体構成図である。ソフトウェア更新システム1000は、図1に示すように、機器100と更新サーバ200とから構成され、機器100は、ネットワークを介して更新サーバ200と接続されている。
1.1.機器100の構成
機器100は、ネットワークを介して、例えば、コンテンツ配信サーバから音楽や映像等のコンテンツを購入し再生したり、金融機関のシステムにアクセスし、ネットバンキング(預金の残高照会や口座振り込み等)を行ったりするなど、ユーザに対してネットワークを利用した様々な機能を提供するデータ処理装置である。
機器100は、アプリケーションソフト(以下、「アプリ」という)110、111と、保護制御モジュール120と、更新モジュール群130と、アクセス制御モジュール140とを含んで構成される。
アプリ110、111は、機器100を使用するユーザに対して、ネットワークを利用した機能を提供するソフトウェアであり、例えば、ネットワーク上のコンテンツ配信サーバ(不図示)から音楽や映像等のコンテンツを購入し、購入したコンテンツを再生するソフトウェアや、ネットワークを介して金融機関のシステム(不図示)にアクセスし、預金の残高照会や口座振り込み等のネットバンキングを行うソフトウェア等である。
アプリ110、111は、コンテンツ配信サーバや金融機関のシステムと認証を行うための認証鍵等の秘匿データを有している。この秘匿データは、悪意のある第三者(以下、「攻撃者」という)によりアプリから抜き取られ、不正に利用されないよう、保護される必要がある。
保護制御モジュール120は、攻撃者によりアプリ110、111が解析され、認証鍵等の秘匿データが抜き取られないようにアプリ110、111を保護するための機能を有するモジュールである。アプリを保護するための機能としては、例えば、アプリを利用しない時には暗号化して保存しておき、アプリを利用する時にのみ復号してメモリへロードする復号ロード機能や、アプリが改ざんされていないかをチェックする改ざん検出機能、デバッガなどの解析ツールが動作していないかをチェックする解析ツール検出機能などがある。保護制御モジュール120は、これらの機能の動作を制御し、アプリ110、111を保護する。
保護制御モジュール120は、改ざん検出機能や解析ツール検出機能により、攻撃者による攻撃を検出した場合には、アプリ110、111の動作を停止し、アプリ110、111が利用していたメモリ領域、特に秘匿データが記憶されたメモリ領域のクリア処理等を行い、秘匿データの漏洩を防止する。
更新モジュール群130は、複数の更新モジュール(ここでは3つ)から構成される。更新モジュール131、132、133は、機器100内部のソフトウェア(ここでは保護制御モジュール120)が改ざんされていないかを検出し、改ざんされている場合には、機器100外部の更新サーバ200から更新用のソフトウェア(保護制御モジュール121)をダウンロードし保護制御モジュールを更新する機能を持つ。
また、更新モジュール131、132、133は、攻撃者によって更新モジュール自体が改ざんされ、改ざんされた更新モジュールが不正に利用されることを防止するために、更新モジュール間で改ざん検出を実施する。更新モジュールの改ざんが検出された場合には、他の正常な更新モジュールは、後述するアクセス制御モジュール140から暗号化アクセス情報を、後述するアクセス情報取得鍵配布モジュールからアクセス情報取得鍵をそれぞれ取得し、取得した暗号化アクセス情報とアクセス情報取得鍵とに基づいて、改ざんされた更新モジュールを無効化する。これにより、更新モジュール群に含まれる一部の更新モジュールが攻撃され、改ざんされた場合であっても、それを検出し、攻撃に対処することが可能となる。
アクセス制御モジュール140は、更新モジュール131、132、133が他の更新モジュールを消去するために必要な情報(アクセス情報)を保持するモジュールである。アクセス情報は、消去対象となる更新モジュールを消去するために必要な情報(例えば、更新モジュールを消去するための専用ドライバや更新モジュールが配置されているアドレス、消去に必要な手順が書かれた手順書等)であり、更新モジュール毎にそれぞれ個別のアクセス情報取得鍵で暗号化されている。
1.2.更新サーバ200の構成
更新サーバ200は、機器100内部のソフトウェア(ここでは保護制御モジュール120)を更新するために必要な更新用のソフトウェア(保護制御モジュール121)を機器100に配布するソフトウェア配布装置である。
更新サーバ200は、更新用ソフトウェア配布モジュール210とアクセス情報取得鍵配布モジュール220とを含んで構成される。
更新用ソフトウェア配布モジュール210は、機器100内部のソフトウェア(保護制御モジュール120)が更新される際に、更新モジュール131、132、133と連携して動作し、更新用のソフトウェア(保護制御モジュール121)を機器100へ安全に送信するためのモジュールである。
アクセス情報取得鍵配布モジュール220は、機器100内部の更新モジュール131、132、133からのアクセス情報取得鍵取得要求に応じて、アクセス情報取得鍵を更新モジュールへ配布するモジュールである。
機器100内部のソフトウェア(保護制御モジュール120、更新モジュール131、132、133)が攻撃され改ざんされた場合には、改ざんされていない更新モジュールとアクセス制御モジュール140とアクセス情報取得鍵配布モジュール220とが連係して動作し、改ざんされたソフトウェアを消去または更新する。
なお、機器100と更新サーバ200との間のネットワークを介した通信には、通信データが暗号化されるなど、セキュリティの確保された通信路を用いてもよい。
続いて、各モジュールの詳細を順に説明する。
2.更新モジュールの詳細な構成
図2は、更新モジュールの機能ブロック図である。実際には、この構成は更新モジュールの数だけ存在するが、ここでは、代表的に更新モジュール131のものだけ示す。他の更新モジュールの構成も基本的に同一構成である。同図に示すように、更新モジュール131は、監視制御部301、改ざんチェック実行部302、更新制御部303、復号部304、認証部305、署名公開鍵保持部306、検証鍵保持部307、認証鍵対保持部308、MAC値保持部309、分散情報保持部310、アクセス情報取得部311、及び無効化処理部312を含んで構成される。
監視制御部301は、予め設定されている、改ざん検出対象となる更新モジュール(ここでは更新モジュール132)の識別子を保持しており、更新用ソフトウェア配布モジュール210から更新処理開始指示を受け付けると、識別子に対応する更新モジュールの改ざんチェックを、予め設定されているタイミングで、改ざんチェック実行部302に指示する。改ざん検出のタイミングについての詳細は、後述する。
改ざんチェック実行部302は、監視制御部301から改ざんチェック指示を受け付けると、識別子に対応する更新モジュールの改ざんチェックを実施し、改ざんチェック結果を更新用ソフトウェア配布モジュール210に送信する。
また、定期的あるいは不定期に、保護制御モジュール120の改ざんチェックを実施し、改ざんを検出した場合には、更新ソフトウェア配布モジュール210及び他の更新モジュールに改ざん検出通知を送信する。その一方で、他の更新モジュールから保護制御モジュール120の改ざん検出通知を受け付けた場合には、保護制御モジュール120の改ざんチェックを実施し、チェック結果を更新用ソフトウェア配布モジュール210に送信する。
また、機器100の全体の制御を司る制御部(不図示)から、初期化指示を受信すると、署名公開鍵保持部306から署名公開鍵を取得し、取得した署名公開鍵を用いて、改ざん検出対象となる更新モジュール及び保護制御モジュール120の改ざんチェックを行う。改ざんチェック結果に応じて、検証鍵保持部307から検証鍵を取得し、取得した検証鍵を用いて改ざん検出対象となる更新モジュール及び保護更新モジュール120のMAC値を生成し、各々のモジュールの識別子と対応付けて、MAC値保持部309に送信する。
さらに、更新用ソフトウェア配布モジュール210から更新処理終了通知を受け付けると、検証鍵保持部307から検証鍵を取得し、取得した検証鍵を用いて保護制御モジュール121のMAC値を生成し、MAC値保持部309に送信する。
更新制御部303は、機器100内部のソフトウェア(保護制御モジュール120)の更新を制御する。具体的には、他の更新モジュールまたは更新用ソフトウェア配布モジュール210から、暗号化されている更新用の保護制御モジュール121を受け取り、更新用ソフトウェア配布モジュール210から、更新用の保護制御モジュール121の証明書(例えば、更新用の保護制御モジュール121のハッシュ値が記述されている)、及び更新用の保護制御モジュール121を復号するための復号鍵を受け取ると、当該更新用の保護制御モジュール121を復号部304に復号させ、復号された更新用の保護制御モジュール121を他の更新モジュールへ送信し、あるいは機器100内部の保護制御モジュール120を復号された更新用の保護制御モジュール121に更新する。
また、更新用の保護制御モジュール121に更新した後、または他の更新モジュールから更新終了通知を受け付けると、更新用ソフトウェア配布モジュール210から受け取った証明書を用いて保護制御モジュールが正しく更新されたかの検証を行い、検証結果を更新用ソフトウェア配布モジュール210に送信する。
復号部304は、暗号化された更新用の保護制御モジュール121の復号を更新制御部303から依頼されると、更新制御部303から入力される復号鍵を用いて、暗号化された更新用の保護制御モジュール121を復号する。更新用ソフトウェア配布モジュール210から入力される復号鍵は、復号部304が保持する、更新モジュール131固有の鍵を用いて暗号化された状態あるため、復号部304は、復号鍵を使用する前に、更新モジュール131固有の鍵を用いて当該復号鍵を復号する。
認証部305は、更新用ソフトウェア配布モジュール210から認証処理開始指示を受け付けると、更新用ソフトウェア配布モジュール210と相互認証の処理を行い、互いに正しい権利を持ったソフトウェアであることを確認する。具体的には、認証鍵対保持部308から認証鍵を取得し、取得した認証鍵を用いて更新サーバ200を認証する。
署名公開鍵保持部306は、署名公開鍵を保持する。署名公開鍵は、更新モジュール131が機器100内のソフトウェア(保護制御モジュール120)の改ざんチェックを、改ざん検出用証明書を用いて行う場合に使用される。署名公開鍵と更新用ソフトウェア配布モジュール210が保持する署名秘密鍵とは、公開鍵暗号方式における鍵対になる。
検証鍵保持部307は、検証鍵を保持する。検証鍵は、更新モジュール131が機器100内のソフトウェア(保護制御モジュール120)の改ざんチェックを、メッセージ認証コード(MAC)値を用いて行う場合に使用される。
認証鍵対保持部308は、認証鍵対を保持する。認証鍵対は、更新モジュール131と更新用ソフトウェア配布モジュール210とが相互認証処理を行うときに用いられる。認証鍵対は、公開鍵暗号方式における公開鍵(認証公開鍵)と秘密鍵(認証秘密鍵)との鍵対で構成される。認証公開鍵には、更新用ソフトウェア配布モジュール210が保持する署名秘密鍵を用いて生成された証明書(認証鍵証明書)が付加されている。
MAC値保持部309は、改ざんチェック実行部302から入力される、改ざん検出対象となる更新モジュール及び保護更新モジュール120のMAC値と、各々のモジュールの識別子との対を保持する。
分散情報保持部310は、保護制御モジュール120から入力される、分散情報(share)と暗復号鍵証明書とを保持する。
アクセス情報取得部311は、更新用ソフトウェア配布モジュール210から、改ざんされた更新モジュールの無効化指示を受け付けると、アクセス情報取得鍵配布モジュール220に対しアクセス情報取得鍵の送付を依頼し、アクセス情報取得鍵を取得する。さらに、アクセス制御モジュール140から暗号化アクセス情報を取得し、アクセス情報取得鍵を用いて暗号化アクセス情報を復号し、復号されたアクセス情報を取得し、無効化処理部312に送信する。
無効化処理部312は、アクセス情報取得部313から入力されるアクセス情報に基づいて、改ざんされた更新モジュールを無効化する。無効化する方法としては、無効化対象の更新モジュールを全て消去する方法の他、改ざんされた部分や秘匿すべきデータなど無効化対象となる更新モジュールの一部を消去する方法や、機器100内部のプログラムやデータを読み込むための機能を消去する方法等がある。なお、無効化処理部312は、アクセス情報を取得するまで、ソフトウェアを無効化することはできない。
署名方式に関しては非特許文献1に、証明書に関しては非特許文献2に詳しく説明されているので、ここでの説明は省略する。
3.更新用ソフトウェア配布モジュール210の詳細な構成
図3は、本発明の実施の形態1における更新用ソフトウェア配布モジュール210の機能ブロック図である。同図に示すように、更新用ソフトウェア配布モジュール210は、暗号鍵生成部401、暗号処理部402、暗号鍵保持部403、認証部404、更新判定部405、不正モジュール判定部406、更新モジュール選択部407、証明書生成部408、署名秘密鍵保持部409、及び更新用ソフトウェア保持部410から構成される。
暗号鍵生成部401は、更新判定部405から保護制御モジュール120を更新する旨の通知を受け付けると、更新用の保護制御モジュール121を暗号化するための暗号鍵を複数生成し、生成した複数の暗号鍵を暗号鍵保持部403及び暗号処理部402に送信する。
暗号処理部402は、更新用ソフトウェア保持部410から更新用の保護制御モジュール121を取得し、暗号鍵生成部401から入力される複数の暗号鍵を用いて、取得した更新用の保護制御モジュール121を多重に暗号化する。そして、暗号化された更新用の保護制御モジュール121及び複数の暗号鍵を更新モジュール選択部407に送信する。
暗号鍵保持部403は、暗号鍵生成部401が生成した複数の暗号鍵や、更新モジュール選択部407により暗号化された複数の暗号鍵を保持する。
認証部404は、更新モジュール131、132、133と相互認証の処理を行う。具体的には、更新モジュールから送信される認証鍵(公開鍵)を用いて更新モジュール131、132、133を認証し、認証結果を更新判定部405に送信する。
更新判定部405は、更新モジュール131、132、133から保護制御モジュール120の改ざん検出通知を受け付けると、改ざん検出通知に基づいて、保護制御モジュールが改ざんされているか否かを最終判断する。保護制御モジュールが改ざんされていると判断した場合には、各更新モジュールに改ざん情報の収集を依頼する。その後、各更新モジュールから入力される改ざん情報に基づいて、保護制御モジュールを更新すべきか否かを判定し、更新すべきと判定した場合には、各更新モジュールに認証処理の開始を指示する。
また、認証処理開始の指示後、認証部404から入力される認証結果に応じて、更新処理開始指示を更新モジュール131、132、133に送信するとともに、不正モジュール判定部46、暗号鍵生成部401、及び証明書生成部408に保護制御モジュール120を更新する旨を通知する。
さらに、更新モジュール131、132、133から入力される検証結果通知に基づいて、保護制御モジュールが正しく更新されたか判定し、判定結果に応じて、保護制御モジュール120の更新終了通知を更新モジュール131、132、133に送信する。
不正モジュール判定部406は、更新判定部405から保護制御モジュール120を更新する旨の通知を受け付けると、更新モジュール131、132、133から入力される各更新モジュールの改ざんチェック結果に基づいて、各更新モジュールが改ざんされているかどうかの判定、及び更新モジュールが改ざんされていると判定した場合、どの更新モジュールが改ざんされたかを判定する。判定後、判定結果を更新モジュール選択部407に送信する。
更新モジュール選択部407は、不正モジュール判定部406から入力される判定結果に基づいて、保護制御モジュール120を更新する際に使用する更新モジュールを複数選択する。そして、暗号処理部402から入力される、更新用の保護制御モジュール121の暗号化に使用した複数の暗号鍵を、更新モジュール選択部407が選択した各更新モジュール固有の鍵を用いて暗号化する。暗号化した鍵を、暗号処理部402から入力される、暗号化された保護制御モジュールとともに、選択した更新モジュールへ送付する。暗号化された保護制御モジュールの証明書は、各更新モジュールに送付される。
なお、暗号化された保護制御モジュール121及び暗号鍵は、選択された更新モジュールへ一度に送信されるのではなく、更新処理の中で、それぞれのデータが必要になったタイミングで、各更新モジュールへ送信される。更新処理におけるタイミングに関しては後述する。
また、正常な更新モジュールに対し、改ざんされた更新モジュールを無効化するよう指示するとともに、アクセス情報取得鍵配布モジュール220に無効化に関する情報を通知する。
証明書生成部408は、更新判定部405から保護制御モジュール120を更新する旨の通知を受け付けると、署名秘密鍵保持部409から署名秘密鍵を、更新用ソフトウェア保持部410から更新用の保護制御モジュール121をそれぞれ取得し、取得した更新用の保護制御モジュール121に対して、正しく更新されたかを検証するための更新検証証明書を、取得した署名秘密鍵を用いて生成し、更新モジュール選択部407に送信する。
また、署名秘密鍵を用いて、更新モジュール131、132、133の認証公開鍵に対して認証証明書を生成する。
署名秘密鍵保持部409は、証明書生成部408による証明書の生成に用いられる署名秘密鍵を保持する。
更新用ソフトウェア保持部410は、保護制御モジュール120が改ざんされた場合に用いられ、当該保護制御モジュールを更新するための更新用の保護制御モジュール121を保持する。ここで、更新用の保護制御モジュール121は、正常なものであることが保障されているものとし、必ずしも最新版の保護制御モジュールである必要はない。
4.保護制御モジュールの詳細な構成
図4は、本発明の実施の形態1における保護制御モジュール120の機能ブロック図である。同図に示すように、保護制御モジュール120は、制御部501、復号ロード部502、改ざん検出部503、解析ツール検出部504、暗復号鍵保持部505、暗復号鍵生成部506、暗復号鍵分散部507、証明書生成部508、及び暗復号鍵復元部509を含んで構成される。
制御部501は、復号ロード部502、改ざん検出部503、及び解析ツール検出部504を制御し、アプリ110、111が攻撃者により攻撃されている場合には、それを検出する。
復号ロード部502は、暗号化されて機器100内部に保持されているアプリ110、111が実行される際に、暗復号鍵保持部505に保持されている暗復号鍵を用いてアプリを復号し、メモリ上にロードする処理を行う。
また、アプリ110、111実行中に、他のアプリへのコンテキストスイッチが発生した場合には、暗復号鍵を用いてメモリ上のデータを暗号化し、再びアプリ110、111へコンテキストスイッチしたときに、暗号化したデータを復号する。
さらに、後述する再暗号化処理において、暗復号鍵復元部509から入力される復元された旧暗復号鍵を用いてアプリ110、111を復号し、暗復号鍵保持部505に保持されている新たな暗復号鍵でアプリ110、111を暗号化する。
改ざん検出部503は、アプリ110、111が改ざんされているか検出する改ざん検出処理を実行する。改ざん検出処理には、アプリ110、111に付加されている改ざん検出用の証明書を用いて改ざん検出を行う方法と、MAC値を用いて改ざん検出を行う方法とがある。
解析ツール検出部504は、攻撃者がアプリ110、111を攻撃しようとして、デバッガ等の解析ツールをインストールし動作させたときに、解析ツールの動作を検出する。検出方法としては、例えば、ファイル名を検索する方法や、デバッガが使用する特殊なレジスタが使われているかを調べる方法、デバッガが設定する割り込みを検出する方法などがある。
暗復号鍵保持部505は、後述する初期化処理時に埋め込まれ、アプリ110、111を暗復号するための暗復号鍵を保持している。また、暗復号鍵生成部506にて新たに暗復号鍵が生成されると、暗復号鍵生成部506から入力される暗復号鍵を保持する。
暗復号鍵生成部506は、暗復号鍵復元部509から暗復号鍵を復元した旨の通知を受け付けると、アプリ110、111を暗復号するための新たな暗復号鍵を生成する。生成した暗復号鍵を暗復号鍵保持部505、証明書生成部508、及び暗復号鍵分散部507に送信する。
暗復号鍵分散部507は、後述する初期設計時や次ラウンド準備時に、暗復号鍵生成部507から入力される暗復号鍵に基づいて、秘密分散法を用いて分散情報を生成し、生成した分散情報を更新モジュール131、132、133に送信する。
証明書生成部508は、暗復号鍵生成部506から入力される暗復号鍵に基づいて証明書を生成し、生成した証明書を更新モジュール131、132、133に送信する。証明書は、暗復号鍵から生成される分散情報を復元する際に、正しく復元できたかの検証に使用される。
暗復号鍵復元部509は、更新モジュール131、132、133から分散情報及び暗復号鍵証明書を取得し、取得した分散情報及び暗復号鍵証明書に基づいて、旧暗復号鍵を復元する。復元した旧暗復号鍵を復号ロード部502に送信する。また、暗復号鍵生成部506に暗復号鍵を復元した旨を通知する。
5.アクセス制御モジュール
図5は、本発明の実施の形態1におけるアクセス制御モジュール140の機能ブロック図である。同図に示すように、アクセス制御モジュール140は、通信部601と、アクセス情報保持部602とから構成される。
通信部601は、更新モジュール131、132、133からアクセス情報の取得依頼を受信する。アクセス情報取得依頼に基づいて、不正に改ざんされた更新モジュールに対応するアクセス情報をアクセス情報保持部602から取得し、取得したアクセス情報取得を依頼してきた更新モジュールへ送信する。
アクセス情報保持部602は、更新モジュール毎に当該更新モジュールを消去するためのアクセス情報を保持する。アクセス情報は、更新モジュール毎にそれぞれ個別のアクセス情報取得鍵で暗号化され、識別子(更新モジュール識別子)等により、各更新モジュールと対応付けられる。
6.アクセス情報取得鍵配布モジュール
図6は、本発明の実施の形態1におけるアクセス情報取得鍵配布モジュール220の機能ブロック図である。同図に示すように、アクセス情報取得鍵配布モジュール220は、通信部701と、アクセス情報取得鍵保持部702とから構成される。
通信部701は、更新モジュール131、132、133からアクセス情報取得鍵の取得依頼を、更新モジュール選択部407から無効化に関する情報の通知をそれぞれ受信する。アクセス情報取得鍵の取得依頼及び無効化に関する情報に基づいて、当該取得依頼が正しいか否かを判断し、判断結果に応じて、消去対象となる更新モジュールに対応するアクセス情報取得鍵をアクセス情報取得鍵保持部702から取得し、依頼してきた更新モジュールへ送信する。
アクセス情報取得鍵保持部702は、アクセス制御モジュール140が保持している、暗号化された各アクセス情報を復号するためのアクセス情報取得鍵を保持する。アクセス情報取得鍵は、識別子(更新モジュール識別子)等により、各更新モジュールと対応付けられる。
7.機器100のハードウェア構成
続いて、機器100のハードウェア構成について説明する。図7は、機器100のハードウェア構成を示す図である。同図に示すように、機器100は、CPU(Central Processing Unit)11、不揮発メモリ(例えば、EEPROM(ElectricallyErasable and Programmable Read Only Memory))12、RAM(Random Access Memory)13、及びNIC(NetworkInterface Card)14等を含んで構成され、これらはバスを介して相互に通信可能に接続されている。
EEPROM12には、保護制御モジュール120、更新モジュール131、132、133、及びアプリ110、111等が格納されている。
EEPROM12に格納されている制御用の各種モジュールをCPU11が実行することにより、各種モジュールの各機能部の制御は実現される。各機能部は、具体的には、コンピュータプログラムによって記述され実現される。
RAM13は、CPU11のワークエリアとして用いられる。RAM13には更新モジュール131、132、133及びアプリ110、111がロードされる。改ざんチェック及び無効化の対象となる更新モジュールは、RAM13上で動作している更新モジュールである。
NICは、ネットワークに接続するための拡張カードである。
8.ソフトウェア階層
続いて、機器100におけるソフトウェア階層について説明する。図8は、機器100のソフトウェア階層を示す図である。同図に示すように、アクセス制御モジュール140及び更新モジュール群130は、OS150の中に組み込まれている。アプリ110、111はOS150上で動作し、保護制御モジュール120はブートローダ160等とともにOSの管理外にある。機器100の起動の際には、まず保護制御モジュール120及び更新モジュール群130が起動された上でアプリケーションが実行される。
9.ソフトウェア更新システム1000の動作
9.1.ソフトウェア更新システム1000の動作概略
続いて、ソフトウェア更新システム1000の動作を説明する。初めに、ソフトウェア更新システム1000の大まかな処理を説明する。大まかな処理として、以下の7つの処理がある。
1つ目の処理は、ソフトウェア(保護制御モジュール120)を更新するために必要となる各種鍵データや、ソフトウェア更新後に必要となるデータ(秘密分散法を用いて分散した分散情報)などを更新モジュール131、132、133のそれぞれに埋め込む処理(初期設計処理)である。
2つ目の処理は、機器100内部のソフトウェア(保護制御モジュール120)が改ざんされていないかを検知する処理(検知処理)である。
3つ目の処理は、改ざんが検出された時に、改ざんされたソフトウェアを解析し、改ざんされたモジュールを含むソフトウェアを更新するかどうかを判断し、更新する場合は更に、更新モジュール131、132、133へ更新処理の実施を通知する処理(解析・判断処理)である。
4つ目の処理は、更新モジュール131、132、133と更新用ソフトウェア配布モジュール210とが互いに正しいソフトウェアであるかどうかを確認するために、相互に行う認証処理(相互認証処理)である。
5つ目の処理は、更新モジュール間で改ざんチェックを行うとともに更新用のソフトウェアを機器100へインストールし、更新モジュール131、132、133へ埋め込まれた分散情報からデータを復元する処理(回復処理)である。
6つ目の処理は、次のソフトウェア更新のための鍵データや分散情報を生成し、各更新モジュールに埋め込む処理(次ラウンド準備処理)である。
7つ目の処理は、相互認証処理や回復処理において、更新モジュール131、132、133が不正に改ざんされたことを検出したときに、不正に改ざんされた更新モジュールを消去する処理(無効化処理)である。
上記7つの処理のうち、無効化処理以外の6つの処理の関係は、図9に示す関係になる。無効化処理は、それぞれの処理の中で必要に応じて呼び出される。図9は、ソフトウェア更新システム1000の全体的な動作の流れを示すフローチャートである。
ソフトウェア更新システム1000では、機器100が工場で製造される際に初期設計処理が行われ、各更新モジュール131、132、133へ分散情報が埋め込まれる(ステップS100)。その後、機器100が工場から出荷され、ユーザの利用に供される。
ユーザにより機器100が利用される際には、機器100内部では、保護制御モジュール120がアプリ110、111を攻撃者による攻撃から保護する。これと同時に、更新モジュール131、132、133が保護制御モジュール120の改ざん検出を実施し、保護制御モジュール120が攻撃されていないかをチェックする検知処理を行う(ステップS200)。
検知処理を行った結果、保護制御モジュール120が改ざんされたと判明した場合には、解析・判断処理(ステップS300)、相互認証処理(ステップS400)、回復処理(ステップS500)、次ラウンド準備処理(ステップS600)を行い、再び検知処理(ステップS200)へ戻る。
なお、上記すべての処理が必要ではなく、少なくとも外部から更新のトリガを与えられて、更新を行う処理(回復処理)があればよい。
続いて、上記7つの処理について、その詳細を順に説明する。
9.2.初期設計時の動作
まず、初期化処理について説明する。図11は、初期設計時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール131、132、133の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
機器100が工場で製造される際に、機器100の不揮発メモリへアプリ110、111、保護制御モジュール120、更新モジュール131、132、133、及びアクセス制御モジュールがインストール(書き込み)される(ステップS101)。これらのソフトウェアには、ソフトウェアが改ざんされているかどうかを検証するための証明書(改ざん検出用証明書)が付加されている。この改ざん検出用証明書は、更新用ソフトウェア配布モジュール210が保持する署名秘密鍵により署名されている。上記ソフトウェア以外にも、機器100の動作に必要なソフトウェアがインストールされる。ここで、初期化処理の際に機器100に埋め込まれる鍵について説明する。図10は、機器100に埋め込まれる鍵を模式的に示す図である。更新モジュールについては、代表的に更新モジュール131のものだけ示す。本図に示すように、保護制御モジュール120には暗復号鍵が、更新モジュール131、132、133には署名公開鍵、検証鍵、及び認証鍵対がそれぞれ埋め込まれる。また、更新モジュール131、132、133には、それぞれの更新モジュールを識別するための更新モジュール識別子も埋め込まれる。
暗復号鍵は、アプリ110、111を暗復号するための鍵であり、アプリ110、111は、暗復号鍵を用いて暗号化された状態で不揮発メモリへ記憶され、実行時には保護制御モジュール120により暗復号鍵を用いて復号された後、実行される。コンテキストを切替えながら複数のアプリを実行する場合には、コンテキスト切替えのタイミングで、暗復号鍵を用いて、アプリ110、111の暗復号を実施し、デバッガなどの解析ツールにより、アプリ110、111実行時のデータが抜き取られることを防止する。
更新モジュール131、132、133に埋め込まれる鍵のうち、署名公開鍵は、全ての更新モジュールで共通とし、検証鍵と認証鍵対とは、更新モジュール毎に異なるものとする。また、分散情報ペアは、更新モジュール毎に異なるものとする。
図11に戻って、各ソフトウェアのインストール後、機器100の初期設定を行うソフトウェアや、正常に動作するかをテストするためのソフトウェアなどを実行し、初期化処理を行い(ステップS102)、保護制御モジュール120及び更新モジュール131、132、133に初期化指示を送信する(ステップS103)。初期化指示を受信する保護制御モジュール120及び更新モジュール131、132、133でもそれぞれ初期化処理が行われる。
保護制御モジュール120は、初期化指示を受信すると(ステップS104a)、秘密分散法を用いて暗復号鍵から分散情報を生成する(ステップS105)。さらに、暗復号鍵の復元時に、正しく復元できたかを確認するための証明書(暗復号鍵証明書)を、署名秘密鍵を用いて生成する(ステップS106)。生成した分散情報と暗復号鍵証明書とをそれぞれ、更新モジュール131、132、133へ送信する(ステップS107)。ここで、分散情報は、更新モジュールと同数だけ生成され、それぞれの更新モジュール131、132、133には、異なる分散情報のペアが送信される。また、各分散情報にはどの分散情報かを識別するための識別子が付加される。暗復号鍵証明書については、それぞれの更新モジュール131、132、133へ同じものが送信される。
更新モジュール群は、初期化指示を受信し(ステップS104b)、分散情報と暗復号鍵証明書とを受信すると(ステップS108)、更新モジュール初期化処理を行う(ステップS109)。
図12は、更新モジュール初期化処理を示すフローチャートである。本図では、代表的に更新モジュール131のものだけ示す。他の更新モジュールの動作も基本的に同一である。
まず、更新モジュール131は、保護制御モジュール120から受信した分散情報のペアと暗復号鍵証明書とを分散情報保持部310に保持する(ステップS111)。
改ざん検出対象となる他の更新モジュール及び保護制御モジュール120の改ざん検出用証明書の検証を実施する(ステップS112)。この検証は、各モジュールからハッシュ値を生成し、生成したハッシュ値とそれぞれの改ざん検出用証明書に記述されているハッシュ値とを比較することにより行われる。
生成した各ハッシュ値がそれぞれの改ざん検出用証明書に記述されているハッシュ値と一致するか否かを判定し(ステップS113)、各ハッシュ値がそれぞれの改ざん検出用証明書に記述されているハッシュ値と一致すれば(ステップ113でYes)、改ざん検出対象となる他の更新モジュール及び保護制御モジュール120それぞれに対してMAC値を生成し、MAC値テーブルとしてMAC値保持部309に保持する(ステップS114)。
少なくとも何れか一方のハッシュ値が改ざん検出用証明書に記述されているハッシュ値と一致しなければ(ステップS113でNo)、エラーを出力して処理を停止する(ステップS115)。
9.3.検知時の動作
続いて、検知処理について説明する。機器100は、初期化処理を終えると工場から出荷され、ユーザの元へ送られる。ユーザが機器100を使用し、アプリ110、111を利用しているときには、機器100内部では、保護制御モジュール120が復号ロード機能や改ざん検出機能、解析ツール検出機能などの機能を制御し、アプリ110、111を攻撃者による攻撃から保護する。
図13は、検知時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。検知処理においては、まず、更新モジュール131、132、133が、保護制御モジュール120の改ざん検出を実施する(ステップS201)。改ざん検出は、保護制御モジュール120のMAC値を、検証鍵を使用して計算し、MAC値テーブルに保持されている、初期設計時に算出した保護制御モジュール120のMAC値と比較することで、行われる。なお、本図では記載を簡略化し、更新モジュール131のみが保護制御モジュールが改ざんされているかをチェックしているが、当然、更新モジュール132、133でも同様の処理が行われる。その後の処理についても、更新モジュール131が保護制御モジュールの改ざんを検出した場合を中心に記載しているが、更新モジュール132、133が保護制御モジュールの改ざんを検出した場合も基本的には同様の処理が行われる。
保護制御モジュール120が改ざんされているか否か、言い換えるとMAC値が一致するか否かを判定し(ステップS202)、保護制御モジュール120が改ざんされていると判定した場合には(ステップS202でYes)、更新用ソフトウェア配布モジュール210と他の更新モジュールとに改ざん検出通知を送信する(ステップS203)。
保護制御モジュール120が改ざんされていないと判定した場合には(ステップS202でNo)、更新用ソフトウェア配布モジュール210や他の更新モジュールへの通知を行わず、改ざん検出処理(S201)へ戻る。
更新モジュール132、133は、更新モジュール131から改ざん検出通知を受信すると(ステップS204b)、検証鍵及びMAC値を利用して、保護制御モジュール120の改ざんチェックを実施し(ステップS205)、改ざんチェック結果を更新用ソフトウェア配布モジュール210へ送信する(ステップS206)。
更新用ソフトウェア配布モジュール210は、更新モジュール131から改ざん検出通知を(ステップS204a)、更新モジュール132、133から改ざんチェック結果をそれぞれ受信する(ステップS207)。
9.4.解析・判断時の動作
続いて、解析判断処理について説明する。図14、15は、解析・判断時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール131、132、133の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
検知処理において、更新用ソフトウェア配布モジュール210が更新モジュール131、132、133から改ざん検出通知及び改ざんチェック結果を受信した場合には(ステップS204a及びS207)、受信した改ざん検出通知及び改ざんチェック結果に基づいて、保護制御モジュール120が改ざんされているか否かを判定する(ステップS301)。判定方法としては、例えば、一定数の更新モジュール(例えば、過半数等)が改ざんされていると判定している場合には、保護制御モジュール120は改ざんされていると判定し、逆に、過半数の更新モジュールが改ざんされていないと判定している場合には、保護制御モジュール120は改ざんされていないと判定する。
保護制御モジュール120が改ざんされていないと判定した場合には(ステップS301でNo)、検知処理に戻る(ステップS302)。
保護制御モジュール120が改ざんされていると判定した場合には(ステップS301でYes)、更新用ソフトウェア配布モジュール210は、更新モジュール131、132、133に対して保護制御モジュール120のどの部分が改ざんされたかを示す改ざん情報を通知するよう依頼する(ステップS303)。
更新モジュール群は、改ざん情報の通知依頼を受け付けると(ステップS304)、改ざん情報を収集する(ステップS305)。改ざん情報の収集は、例えば、保護制御モジュール120が複数の部分に分けられており、予め部分毎に証明書(ハッシュ値が記述されている)が発行されていることを前提とすれば、部分毎にハッシュ値を算出し、算出された各ハッシュ値が各証明書に記述されたハッシュ値と一致するか否かにより、行うことができる。
更新モジュール群は、改ざん情報を収集すると、改ざん情報を更新用ソフトウェア配布モジュール210に送信する(ステップS306)。
更新用ソフトウェア配布モジュール210は、更新モジュール群から改ざん情報を受信すると(ステップS307)、受信した改ざん情報を解析し(ステップS308)、解析結果に基づいて、保護制御モジュール120を無効化するか否かを判断する(ステップS309)。
保護制御モジュール120を無効化すると判断した場合には(ステップS309でYes)、アプリ110、111を介して、当該アプリ110、111にサービスを提供しているサーバ(不図示)に機器100を無効化するよう依頼する(ステップS310、311)。
保護制御モジュール120を無効化しないと判断した場合には(ステップS309でNo)、保護制御モジュール120を更新するか否かを判断する(ステップS312)。
保護制御モジュール120を更新すると判断した場合には(ステップS312でYes)、更新モジュール群に認証処理開始指示を送信し(ステップS313)、更新モジュール群は、認証処理開始指示を受信する(ステップS314)。
保護制御モジュール120を更新しないと判断した場合には(ステップS312でNo)、検知処理に戻る(ステップS302)。
保護制御モジュール120の無効化及び更新は、例えば、保護制御モジュール120の重要な部分が改ざんされているか、一定部分以上改ざんされているか等を判断することにより行われる。
9.5.相互認証時の動作
続いて、相互認証処理について説明する。解析・判断処理において、保護制御モジュール120を更新する必要があると判断され、更新モジュール131、132、133へ認証処理の開始を指示した後、更新用ソフトウェア配布モジュール210と各更新モジュール131、132、133との間で、それぞれ1対1の相互認証処理が行われる。これにより、機器100が不正な更新サーバへ接続されることや、更新サーバ200が不正な機器へ接続されることを防止することができる。相互認証には、更新サーバ200は署名秘密鍵と署名公開鍵を使用し、各更新モジュール131、132、133は認証鍵対(認証秘密鍵、認証公開鍵)を使用する。
相互認証時の動作としては、まず、更新モジュール131、132、133が、更新用ソフトウェア配布モジュール210を認証する。図16は、更新モジュール131が更新用ソフトウェア配布モジュール210を認証する時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。本図では、代表的に更新モジュール131のものだけ示す。他の更新モジュールの動作も基本的に同一である。
更新モジュール131は、乱数生成器を用いて乱数を生成し(ステップS401)、生成した乱数をチャレンジデータとして更新用ソフトウェア配布モジュール210へ送信する(ステップS402)。この時、更新モジュール131を識別するための更新モジュール識別子もチャレンジデータと一緒に送信する。
更新用ソフトウェア配布モジュール210は、各更新モジュールからチャレンジデータを受信すると(ステップS403)、受信したチャレンジデータに対し、署名秘密鍵を用いて署名生成を行い(ステップS404)、生成した署名をレスポンスデータとして、送信してきた更新モジュールへ返信する(ステップS405)。
更新モジュール131は、更新用ソフトウェア配布モジュール210からレスポンスデータを受信すると(ステップS406)、受信したレスポンスデータが送信したチャレンジデータに対する署名になっているかを、署名公開鍵を用いて署名検証する(ステップS407)。
検証した結果、レスポンスデータが送信したチャレンジデータに対する署名になっている、すなわち、更新用ソフトウェア配布モジュール210が正当なモジュールである場合には(ステップS408でYes)、処理を継続する。
レスポンスデータが送信したチャレンジデータに対する署名になっていない、すなわち、更新用ソフトウェア配布モジュール210が正当なモジュールでない場合には(ステップS408でNo)、エラーを出力して、処理を停止する(ステップS409)。
次に、更新用ソフトウェア配布モジュール210がそれぞれの更新モジュール131、132、133を認証する。図17は、更新用ソフトウェア配布モジュール210がそれぞれの更新モジュール131、132、133を認証する時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール131、132、133の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
更新用ソフトウェア配布モジュール210は、乱数生成器を用いて、上記処理においてチャレンジデータを送信してきた更新モジュールの数だけ乱数を生成し(ステップS411)、生成した各乱数をチャレンジデータとして、更新モジュールと一対一に対応する形態で、送信する(ステップS412)。
更新モジュール群は、更新用ソフトウェア配布モジュール210からチャレンジデータを受信すると(ステップS413)、受信したチャレンジデータに対し、認証秘密鍵を用いて署名生成を行い(ステップS414)、生成した署名をレスポンスデータとして更新用ソフトウェア配布モジュール210へ返信する(ステップS415)。その際、認証公開鍵と認証鍵証明書とを併せて更新用ソフトウェア配布モジュール210へ返信する(ステップS415)。
更新用ソフトウェア配布モジュール210は、更新モジュール群からレスポンスデータ、認証公開鍵、及び認証鍵証明書を受信すると(ステップS416)、認証鍵証明書が、更新用ソフトウェア配布モジュール210により発行された証明書であるかを検証した後、認証鍵証明書を使用して認証公開鍵の検証を行う(ステップS417)。
検証した結果、認証鍵証明書あるいは認証公開鍵に問題があれば(ステップS418でNo)、処理を停止する(ステップS419)。
検証した結果、認証鍵証明書及び認証公開鍵ともに問題がなければ(ステップS418でYes)、受信したレスポンスデータが、更新用ソフトウェア配布モジュール210が送信したチャレンジデータの署名になっているかを、認証公開鍵を用いて署名検証する(ステップS420)。そして、検証結果に基づいて、回復処理を行うか否かを判定する。この判定は、例えば、署名検証により、正当なモジュールであると検証できた更新モジュールの数が予め設定されている回復処理に必要な数以上あるかを判断することにより、行われる(ステップS421)。
正当なモジュールであると検証できた更新モジュールが、回復処理に必要な数に満たないと判定した場合には(ステップS421でNo)、処理を停止する(ステップS419)。
正当なモジュールであると検証できた更新モジュールが、回復処理に必要な数を満たすと判定した場合には(ステップS421でYes)、正当なモジュールであると検証できた更新モジュールに更新処理開始指示を送信し(ステップS422)、正当なモジュールであると検証された更新モジュールは、更新処理開始指示を受信する(ステップS423)。以上で相互認証処理を終了する。
なお、更新用ソフトウェア配布モジュール210は、相互認証処理において、認証できた全ての更新モジュールの更新モジュール識別子からなる認証リストを作成し、以降の回復処理では、この認証リストに記載されている更新モジュールのみを利用して処理を実施する。
9.6.回復時の動作
続いて、回復処理について図18〜24を用いて説明する。相互認証処理において、相互認証が成功した場合には、改ざんされた保護制御モジュール120を更新用の保護制御モジュール(更新用保護制御モジュール)121へ更新する回復処理を実施する。図18は、回復処理時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。回復処理は、大きく3つの処理からなる。
1つ目の処理は、更新モジュール131、132、133が他の更新モジュールに対して改ざん検出処理を実施する監視処理(ステップS501)である。
2つ目の処理は、更新用保護制御モジュール121を用いて保護制御モジュール120を更新する更新処理(ステップS502)である。
3つ目の処理は、暗号化されたアプリ110、111を再暗号化する再暗号化処理(ステップS503)である。
なお、上記3つの処理がすべて必要ではなく、他の更新モジュールに対して改ざん検出処理を実施する監視処理(ステップS501)、及び外部から更新のトリガを与えられて、更新用保護制御モジュール121を用いて保護制御モジュール120を更新する更新処理(ステップS502)があればよい。
上記3つの処理について、その詳細を順に説明する。
9.6.1.監視処理
監視処理では、更新モジュール群130内の更新モジュール131、132、133が、更新モジュール群130内の他の更新モジュールに対して改ざん検出の処理を実施する。これにより、回復処理中に一部の更新モジュールが攻撃者により改ざんされた場合にも、改ざん検出が可能となる。さらに、監視処理を定期的に実施することで、更新用保護制御モジュール121が完全に漏洩する前に改ざんを検出し、漏洩を防止することが可能となる。
以下、監視処理の一例を、フローチャートを用いて詳細に説明する。図19は、監視処理を示すフローチャートである。
まず、更新モジュール131は、更新モジュール132に対し改ざん検出処理を実施し(ステップS511a)、更新モジュール132は、更新モジュール133に対し改ざん検出処理を実施し(ステップS511b)、更新モジュール133は、更新モジュール131に対し改ざん検出処理を実施する(ステップS511c)。改ざん検出は、更新モジュール131、132、133のMAC値を、検証鍵を使用して計算し、MAC値テーブルに保持されている、初期設計時に計算したMAC値と比較することにより、行われる。また、更新モジュール131、132、133のハッシュ値を算出し、算出したハッシュ値と、各更新モジュールに予め付加されている証明書に記述されているハッシュ値とを比較することにより行われるとしてもよい。
各更新モジュールは、改ざん検出結果を更新用ソフトウェア配布モジュール210へ通知する(ステップS512)。
更新用ソフトウェア配布モジュール210は、各更新モジュールから改ざん検出結果を受信し(ステップS513)、改ざんされた更新モジュールがあるか否かを判定する(ステップS514)。
改ざんされた更新モジュールがあると判定した場合には(ステップS514でYes)、更新用ソフトウェア配布モジュール210は、直ちに回復処理を停止する(ステップS515)。
改ざんされた更新モジュールがないと判定した場合には(ステップS514でNo)、処理を継続する。
9.6.2.更新処理
続いて更新処理について説明する。更新処理では、更新用ソフトウェア配布モジュール210が更新用保護制御モジュール121を複数の鍵を用いて多重に暗号化し、更新モジュール群130に含まれる更新モジュールを送信先として送信する。更新モジュール群130に含まれる複数の更新モジュールは、保護制御モジュール120を更新用保護制御モジュール121に更新する。この時、多重に暗号化された更新用保護制御モジュール121を復号するための複数の鍵を、更新モジュール群130に含まれる各更新モジュールへ送信するタイミングを更新用ソフトウェア配布モジュール210が制御することで、攻撃者が暗号化されていない更新用保護制御モジュール121を入手することを不可能にする。
以下、更新処理の一例を、フローチャートを用いて詳細に説明する。図20〜22は、更新処理を示すフローチャートである。
まず、更新用ソフトウェア配布モジュール210は、更新用保護制御モジュール121が機器100に正しくインストールされたかを更新モジュール131、132、133が検証できるように、更新用保護制御モジュール121の証明書(更新検証証明書)を、証明書生成部408を用いて生成し(ステップS521)、生成した更新検証証明書を各更新モジュール131、132、133へ送信する(ステップS522)。更新検証証明書の生成には、署名秘密鍵を利用する。各更新モジュールは、更新検証証明書を受信する(ステップS523)。
次に、更新用ソフトウェア配布モジュール210は、更新用保護制御モジュール121を多重に暗号化するための暗号鍵を、暗号鍵生成部403を用いて複数(ここでは第1の鍵及び第2の鍵の2つ)生成する(ステップS524)。そして、暗号処理部402を利用して、第2の鍵を用いて更新用保護制御モジュール121を暗号化し、暗号化更新用保護制御モジュールを生成する(ステップS525)。暗号化更新用保護制御モジュール121に対して、第1の鍵を用いてさらに暗号化し、多重暗号化更新用保護制御モジュール121を生成する(ステップS526)。
更新用ソフトウェア配布モジュール210は、更新モジュール群130に含まれる複数の更新モジュールから一の更新モジュール(ここでは、更新モジュール131)を選択し(ステップS527)、多重暗号化更新用保護制御モジュール121及び第1の鍵を、選択した更新モジュール131に送信する(ステップS528)。
更新モジュール131は、多重暗号化更新用保護制御モジュール121及び第1の鍵を受信すると(ステップS529)、第1の鍵を用いて、多重暗号化更新用保護制御モジュール121を復号し、暗号化更新用保護制御モジュール121を取得する(ステップS530)。復号が終了すると、復号終了通知を更新用ソフトウェア配布モジュール210に送信する(ステップS531)。
更新用ソフトウェア配布モジュール210は、復号終了通知を受信すると(ステップS532)、更新モジュール群130に含まれる複数の更新モジュールから、上記選択した更新モジュール131とは異なる更新モジュール(ここでは、更新モジュール132)を1つ選択し(ステップS533)、選択した更新モジュール132に第2の鍵を送信するとともに(ステップS534)、更新モジュール131に対して、暗号化更新用保護制御モジュール121を更新モジュール132へ送信するよう依頼する(ステップS536)。
更新モジュール131は、更新用ソフトウェア配布モジュール210からの依頼を受けて(ステップS537)、暗号化更新用保護制御モジュール131を更新モジュール132へ送信する(ステップS538)。
更新モジュール132は、更新用ソフトウェア配布モジュール210から第2の鍵を受信し(ステップS535)、更新モジュール131から暗号化更新用保護制御モジュール121を受信すると(ステップS539)、第2の鍵を用いて、暗号化更新用保護制御モジュール121を復号し、更新用保護制御モジュール121を取得する(ステップS540)。
更新モジュール132は、取得した更新用保護制御モジュール121を保護制御モジュール120に上書きし、新たな保護制御モジュール121に更新する(ステップS541)。更新が終了すると、更新の終了を他の更新モジュール131、133へ通知する(ステップS542)。更新モジュール131、133は、更新終了通知を受信する(ステップS543a、543b)。
更新モジュール131、132、133はそれぞれ、事前に受信した更新検証証明書を用いて、保護制御モジュール121が正しく更新されたかを検証し(ステップS544)、検証結果を更新用ソフトウェア配布モジュール210へ通知する(ステップS545)。
更新用ソフトウェア配布モジュール210は、各更新モジュールから送信された検証結果を受信すると(ステップS546)、受信した検証結果から保護制御モジュール121が正しく更新されたかを判定し(ステップS547)、正しく更新されていないと判定した場合には(ステップS547でNo)、機器100を停止する(ステップS548)。
正しく更新されていると判定した場合には(ステップS547でYes)、更新処理の終了を各更新モジュールへ通知する(ステップS549)。
更新モジュール131、132、133はそれぞれ、更新処理の終了の通知を受けると(ステップS550)、保護制御モジュール121のMAC値を生成し、MAC値テーブルに保護制御モジュール121の識別子とMAC値との組を保存する(ステップS551)。
9.6.3.監視処理と更新処理との関係
続いて、監視処理と更新処理との関係について説明する。上述した監視処理と更新処理とは、互いに連携しながら実行される。
監視処理は、更新用ソフトウェア配布モジュール210から、更新モジュール群130に含まれる更新モジュールを送信先として、複数の鍵が送られる時と、暗号化された更新用保護制御モジュールの更新モジュール群130に含まれる更新モジュールでの復号処理中に定期的に実施される。定期的に実施する際の時間間隔は、例えば、更新用保護制御モジュール121が通信路を通して完全に外部に出力されるまでの時間より短い間隔である。完全に外部に出力されるまでに1秒かかるのであれば、例えば、それより短い500ミリ秒間隔のタイミングで監視処理を実行する。
監視処理と更新処理との連携動作を、図23を用いて説明する。図23は、監視処理と更新処理との連携動作の流れを模式的に示す図である。本図において、監視処理及び更新処理に関しては、ポイントとなる処理のみ説明する。
まず、回復処理の開始後、更新サーバ200から機器100へ多重暗号化更新用保護制御モジュール121が送付される前に、機器100内部で監視処理(監視1)を実施する。更新処理を開始するにあたって、不正な更新モジュールが機器100内部に存在しないことを検証するためである。
その後、更新サーバ200から機器100へ第1の鍵が送信され、更新モジュール131が第1の鍵を受信する前に、監視処理(監視2)を実施する。機器100が鍵を受信する時に、不正な更新モジュールが機器100内部に存在しないことを検証するためである。
さらに、更新モジュール131が第1の鍵を受信し、第1の鍵を用いて多重暗号化更新用保護制御モジュール121を復号する間、定期的に更新モジュール131による復号処理を中断し、監視処理(監視3−1、3−2)を実施する。これにより、復号処理中に、更新モジュール131、132、133の何れかが攻撃されたとしても、暗号化更新用保護制御モジュール121が全て漏洩する前に攻撃者による攻撃を検出することができ、暗号化更新用保護制御モジュール121の漏洩を防止することが可能となる。
これ以降の処理は、上記と同様に、更新サーバ200から機器100へ送信される第2の鍵を更新モジュール132が受信する前に、監視処理(監視4)を実施し、機器100が鍵を受信する時に、不正な更新モジュールが機器100内部に存在しないことを検証する。
さらに、更新モジュール132が第2の鍵を受信した後、第2の鍵を用いて暗号化更新用保護制御モジュール121を復号する間、定期的に更新モジュール132による復号処理を中断し、監視処理(監視5−1、5−2)を実施する。これにより、更新用保護制御モジュール121が全て漏洩する前に攻撃者による攻撃を検出することができ、更新用保護制御モジュール121の漏洩を防止することが可能となる。
また、上記の各監視処理において、各更新モジュールは改ざん検出結果を更新用ソフトウェア配布モジュール210へ通知する。更新用ソフトウェア配布モジュール210は、改ざん検出結果に基づいて、何れかの更新モジュールが改ざんされていると判定した場合には、回復処理を停止する。これにより、第1の鍵あるいは第2の鍵の送信前に、攻撃者による攻撃が検出されれば、攻撃者は多重暗号化更新用保護制御モジュール121を復号するための鍵を入手することが不可能になる。
9.6.4.再暗号化処理
続いて、再暗号化処理について説明する。再暗号化処理では、更新用保護制御モジュール121が、各更新モジュールが保持している分散情報を取得し、取得した分散情報から、更新前の保護制御モジュール120が保持していた暗復号鍵(旧暗復号鍵)を復元する。さらに、新たに暗復号鍵(新暗復号鍵)を生成し、復元した旧暗復号鍵を用いて、暗号化されたアプリ110、111を復号した後、新暗復号鍵を用いて、アプリ110、111を再暗号化する。
以下、再暗号化処理の一例を、フローチャートを用いて詳細に説明する。図24は、再暗号化処理を示すフローチャートである。本フローチャートにおいて、更新モジュール131、132、133の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
まず、更新された保護制御モジュール121が、各更新モジュール131、132、133に対して、それぞれが保持している分散情報と暗復号鍵証明書とを送信するよう依頼する(ステップS561)。
更新モジュール群は、保護制御モジュール121からの依頼を受信すると(ステップS562)、保護制御モジュール121に分散情報と暗復号鍵証明書とを送信する(ステップS563)。
保護制御モジュール121は、更新モジュール群から分散情報と暗復号鍵証明書とを受信すると(ステップS564)、受信した分散情報から更新前の保護制御モジュール120が使用していた暗復号鍵(旧暗復号鍵)を復元する(ステップS565)。そして、旧暗復号鍵が正しく復元されたか否かを、暗復号鍵証明書を用いて検証する(ステップS566)。
旧暗復号鍵が正しく復元されなかった場合には(ステップS566でNo)、どの更新モジュールが不正な分散情報を送信したかを特定する(炙り出し)(ステップS567)。特定した不正な更新モジュールは、更新サーバ200へ通知される。
ここで、不正な更新モジュールを特定するための方法としては、以下の方法がある。まず、保護制御モジュール121は、各更新モジュールから分散情報のペアを取得し、取得した各分散情報に、どの更新モジュールから取得したかを識別するための識別情報をつける。次に、同じ識別子が付された、同一の値となるべき分散情報同士をグループ化し、各グループ中の分散情報同士の値を比較し、同じ値になる分散情報同士をさらにグループ化(サブグループ)する。そして、全てのグループからサブグループを1つずつ選び出す組み合わせの全てに対して、それぞれ旧暗復号鍵を生成し、正しい旧暗復号鍵が生成できたかを検証する。検証した結果、正しい旧暗復号鍵が生成できた場合は、当該組み合わせで選択されているサブグループに検証を通ったことを表す検証通過識別情報を付す。全ての組み合わせで旧暗復号鍵の生成及び検証を行った後、検証通過識別情報が付されているサブグループに含まれる分散情報を取り除く。ここで取り除かれずに残った分散情報が不正な値になっている分散情報である。そして、この分散情報の識別情報から当該分散情報を保持していた更新モジュールを特定する。これにより、識別情報に対応する更新モジュールが不正な分散情報を保持していた不正な更新モジュールであると特定することができる。
図24に戻って、旧暗復号鍵が正しく復元された場合には(ステップS566でYes)、保護制御モジュール121が暗復号鍵生成部506を用いて、新しい暗復号鍵(新暗復号鍵)を生成し(ステップS568)、旧暗復号鍵を用いて暗号化されたアプリ110、111を復号した後(ステップS569)、新暗復号鍵を用いてアプリ110、111を再暗号化する(ステップS570)。
9.7.次ラウンド準備時の動作
続いて、次ラウンド準備処理について説明する。回復処理の終了後、次の回復処理のための準備を行う次ラウンド準備処理を実施する。次ラウンド準備処理では、初期設計時の初期化処理と同様に、分散情報の生成と埋め込みを行う。
図25は、次ラウンド準備時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。本フローチャートにおいて、更新モジュール131、132、133の各々が個別に行う処理を、更新モジュール群としてまとめて記載している。
まず、保護制御モジュール121が、暗復号鍵(新暗復号鍵)から秘密分散法を用いて分散情報を生成し(ステップS601)、更に、署名秘密鍵を用いて暗復号鍵証明書を生成する(ステップS602)。生成した分散情報と暗復号鍵証明書とをそれぞれ、更新モジュール群へ送信する(ステップS603)。ここで、分散情報は、初期化処理時と同様に、更新モジュールと同数だけ生成され、それぞれの更新モジュール131、132、133には、異なる分散情報のペアが送信される。暗復号鍵証明書については、それぞれの更新モジュール131、132、133へ同じものが送信される。
更新モジュール群は、保護制御モジュール121から分散情報と暗復号鍵証明書とを受信すると(ステップS604)、受信した分散情報と暗復号鍵証明書とを分散情報保持部310に保持する(ステップS605)。
なお、この時、相互認証時において認証に失敗した不正な更新モジュールや、回復処理内の監視処理において検出した不正な更新モジュール、回復処理内の再暗号化処理において炙り出した不正な更新モジュールに対しては、分散情報を送信しない。
9.8.無効化時の動作
続いて、無効化処理について説明する。無効化処理は、相互認証時において認証に失敗した更新モジュールが存在した場合や、回復処理内の監視処理において改ざんされた更新モジュールを検出した場合、回復処理内の再暗号化処理において不正な更新モジュールを炙り出した場合等に、機器100内部に存在する不正な更新モジュールを無効化する処理である。
上述のように改ざんされた更新モジュールを検出した場合には、不正な動作を防止するためにも、その更新モジュールの機能を停止させる必要があるのは言うまでもないが、その際、当該更新モジュールの機能を停止させる構成として、複数の更新モジュールの各々に予め更新モジュールの無効化機能を持たせておくことが考えられる。しかしながら、複数の更新モジュールの各々に予め更新モジュールの無効化機能を持たせておくと、更新モジュール群に含まれる一の更新モジュールが改ざんされた場合に、当該更新モジュールが正常な更新モジュールを無効化することが可能になる。本実施の形態によれば、更新サーバ200に選択された更新モジュールのみが改ざんされた更新モジュールを無効化することができるので、改ざんされた更新モジュールによる正常な更新モジュールの無効化を防止することができる。
以下に、回復処理内の監視処理において更新モジュール133の改ざんのみが検出され、更新モジュール131、132の改ざんは検出されなかった場合の処理を例に挙げ、無効化時の動作の詳細を説明する。図26は、更新モジュール133無効化時のソフトウェア更新システム1000の動作の流れを示すフローチャートである。
まず、更新用ソフトウェア配布モジュール210は、監視処理において更新モジュール131、132、133から受信した改ざん検出結果に基づいて、どの更新モジュールが改ざんされたかを判定する(ステップS701)。この例では、更新モジュール133が改ざんされていると判定し、それ以外の更新モジュールは改ざんされていないと判定する。
更新用ソフトウェア配布モジュール210は、改ざんされていないと判定した更新モジュールの何れか(ここでは更新モジュール131)へ、改ざんされた更新モジュール133の無効化を依頼する(ステップS702)。さらに、アクセス情報取得鍵配布モジュール220へ、無効化に関する情報を通知する(ステップS703)。無効化に関する情報は、改ざんされた更新モジュール133の情報(更新モジュール識別子)及び無効化を依頼した更新モジュール131の情報(更新モジュール識別子)である。
更新モジュール131は、更新用ソフトウェア配布モジュール210から更新モジュール133の無効化依頼を受信すると(ステップS704)、アクセス情報取得鍵配布モジュール220に対し更新モジュール133を無効化するためのアクセス情報取得鍵を送付するよう依頼する(ステップS705)。さらに、アクセス制御モジュール140に対し更新モジュール133を無効化するためのアクセス情報を送信するよう依頼する(ステップS706)。
アクセス情報取得鍵配布モジュール220は、無効化に関する情報を更新用ソフトウェア配布モジュール210から受信し(ステップS707)、アクセス情報取得鍵の送付依頼を更新モジュール131から受信すると(ステップS708)、無効化に関する情報に基づいて、送付依頼が正しい依頼であるか否かを判断する(ステップS709)。この判断は、更新用ソフトウェア配布モジュール210から通知された無効化に関する情報に基づいて、送付依頼をした更新モジュール131が更新用ソフトウェア配布モジュール210により無効化依頼をされた更新モジュールかどうか、及び送付依頼の対象であるアクセス情報取得鍵が改ざんされた更新モジュール133に対応するアクセス情報取得鍵かどうかを判断することにより行われる。
正しい依頼でないと判断した場合(ステップS709でNo)、すなわち、改ざんされた更新モジュール133からの依頼であったり、あるいは改ざんされていない更新モジュール131、132に対応するアクセス情報取得鍵の取得依頼であったりする場合には、無効化処理を終了する。
正しい依頼であると判断した場合には(ステップS709でYes)、依頼元の更新モジュール131へ、更新モジュール133を無効化するためのアクセス情報取得鍵を送付する(ステップS710)。
アクセス制御モジュール140は、更新モジュール131から更新モジュール133を無効化するためのアクセス情報取得依頼を受信すると(ステップS711)、更新モジュール133に対応する暗号化アクセス情報を送信する(ステップS712)。
更新モジュール131は、アクセス制御モジュール140から暗号化アクセス情報を受信し(ステップS713)、アクセス情報取得鍵配布モジュール220からアクセス情報取得鍵を受信すると(ステップS714)、受信したアクセス情報取得鍵を用いて暗号化アクセス情報を復号し、アクセス情報を取得する(ステップS715)。取得したアクセス情報は、更新モジュール133を消去するための専用ドライバである。更新モジュール131は、そのドライバを利用して、RAM13上に展開されている、改ざんされた不正な更新モジュール133を無効化する(ステップS716)。
無効化処理が終了すると、更新モジュール131は、アクセス情報取得鍵配布モジュール220から取得したアクセス情報取得鍵や、アクセス制御モジュール140から取得した暗号化されたアクセス情報、復号後のアクセス情報等を消去する。
以上のように本実施の形態によれば、回復処理において、更新モジュール群内の複数の更新モジュールが監視処理を行うので、改ざんされた更新モジュールを検出することが可能となり、ソフトウェア更新システムの信頼性を高めることができる。
また、改ざんされた更新モジュールを無効化するので、改ざんされた更新モジュールによる不正動作を防止することができる。
(実施の形態2)
実施の形態2では、保護制御モジュール120が、復号ロード機能や改ざん検出機能、解析ツール検出機能等の機能を制御し、アプリ110、111を攻撃者による攻撃から保護するだけではなく、更新モジュール131、132、133を攻撃者による攻撃から保護する。これにより、更新モジュール131、132、133が一方的に保護制御モジュール120の改ざんを検出するだけでなく、更新モジュール131、132、133と保護制御モジュール120とが相互に監視し合う構成とすることができる。
実施の形態2における検知時の動作としては、保護制御モジュール120がそれぞれの更新モジュールが改ざんされていないかどうかを、改ざん検出用証明書を用いて検証する。更新モジュール131、132、133のうち何れかの更新モジュールの改ざんを検出した場合には、その旨を更新用ソフトウェア配布モジュール210へ通知する。
改ざんを検出しなかった場合には、更新用ソフトウェア配布モジュール210への通知は行わない。
保護制御モジュール120から更新用ソフトウェア配布モジュール210へ、更新モジュール131、132、133の改ざんを検出した旨の通知があった場合には、更新用ソフトウェア配布モジュール210は、保護制御モジュール120が改ざんされていないかを確認するために、更新モジュール131、132、133へ保護制御モジュール120の改ざん検出を依頼する。
更新用ソフトウェア配布モジュール210から依頼を受けた更新モジュール131、132、133は、保護制御モジュール120の改ざん検出を実施し、改ざん検出結果を更新用ソフトウェア配布モジュール210へ通知する。この時、保護制御モジュール120が改ざんされていた場合でも、他の更新モジュールへは通知しない。
以降の処理は、本発明の実施の形態1における検知処理において、更新モジュール131、132、133から更新用ソフトウェア配布モジュール210へ、保護制御モジュール120の改ざんを検出した旨の通知があった場合の処理と同様であるので、ここでは省略する。
以上のように本実施の形態によれば、検知処理において、更新モジュール131、132、133と保護制御モジュール120とが相互に監視し合い、更新モジュールが改ざんされている場合には、保護制御モジュール120もそれを検出することが可能となるので、ソフトウェア更新システムの信頼性を高めることができる。
(実施の形態3)
実施の形態3では、各更新モジュールに保護制御モジュール120を更新するための機能を予め持たせるのではなく、保護制御モジュール120の改ざんを検出し、保護制御モジュール120を更新する必要が生じた時に、保護制御モジュール120を更新するためのアクセス情報を取得することにより、保護制御モジュール120を更新する機能を更新モジュールに付加する。
そこで、本実施の形態におけるアクセス情報取得鍵配布モジュール220は、各更新モジュールのアクセス情報取得鍵に加え、保護制御モジュール120を更新するためのアクセス情報取得鍵を保持している。
また、本実施の形態におけるアクセス情報モジュール140は、各更新モジュールのアクセス情報に加え、保護制御モジュール120を更新するための暗号化アクセス情報を保持している。
図20〜22を用いて、保護制御モジュール120を更新する機能を更新モジュールに付加する処理を説明する。以降の説明において、実施の形態1と同じ処理については同じ符号を用いる。
更新処理(ステップS502)において、更新用ソフトウェア配布モジュール210が更新用保護制御モジュール121を複数の鍵を用いて多重に暗号化し、多重暗号化更新用保護制御モジュールと第1の鍵とを、更新モジュール群に含まれる更新モジュール131を送信先として送信する(ステップS521からS528)。
更新モジュール群に含まれる更新モジュールは、更新用ソフトウェア配布モジュール210から第2の鍵を受信し、多重暗号化された更新用保護制御モジュールを復号し、更新用保護制御モジュールを取得する(ステップS529からS540)。
更新用保護制御モジュールを取得後、更新モジュール132は、保護制御モジュール120を更新用保護制御モジュール121へ更新するために、アクセス情報取得鍵配布モジュール220に対し保護制御モジュール120を更新するためのアクセス情報取得鍵を送付するよう依頼する。さらに、アクセス制御モジュール140に対し保護制御モジュール120を更新するためのアクセス情報を送信するよう依頼する。
アクセス情報取得鍵配布モジュール220は、アクセス情報取得鍵の送付依頼を受けると、依頼元の更新モジュールが保護制御モジュール120を更新する更新モジュールであるかどうかを、更新用ソフトウェア配布モジュール210に問い合わせ、保護制御モジュール120を更新する更新モジュールであった場合には、依頼元の更新モジュール132へ、保護制御モジュール120を更新するためのアクセス情報取得鍵を送付する。
アクセス情報モジュール140は、更新モジュール132からアクセス情報の送信依頼を受け付けると、保護制御モジュール120に対応する暗号化アクセス情報を更新モジュール132に送信する。
更新モジュール132は、アクセス情報取得鍵配布モジュール220からアクセス情報取得鍵を受信し、アクセス制御モジュール140から暗号化アクセス情報を受信すると、受信したアクセス情報取得鍵を用いて、暗号化アクセス情報を復号し、アクセス情報を取得する。取得したアクセス情報は、保護制御モジュール120を更新するための専用ドライバである。更新モジュール132は、そのドライバを利用して、保護制御モジュール120を更新用保護制御モジュール121へ更新する(ステップS541)。そして、更新の終了を他の更新モジュールへ通知する(ステップS542)。
更新モジュール群130に含まれる各更新モジュールは、保護制御モジュール120が更新用保護制御モジュール121へ正しく更新されたか検証し、正しく更新されている場合には、保護制御モジュール121のMAC値を生成する(ステップS543からS551)。
(その他の変形例)
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)上記実施の形態では、保護制御モジュール120を更新するとしたが、これに限定するものではなく、更新モジュールやアプリ等、保護制御モジュール120以外のモジュールを更新するとしてもよい。以下に、更新モジュール133を更新する場合を例に挙げ、更新モジュールの更新処理を説明する。
更新モジュールの更新処理では、保護制御モジュールを更新する場合と同様に、更新用ソフトウェア配布モジュール210が更新用更新モジュール133を複数の鍵を用いて多重に暗号化し、更新モジュール群130に含まれる更新モジュール(更新モジュール133を除く)を送信先として送信する。更新モジュール群130に含まれる更新モジュールは、更新モジュール133を更新用更新モジュール133に更新する。この時、多重に暗号化された更新用更新モジュール133を復号するための複数の鍵を、更新モジュール群130に含まれる更新モジュールへ送信するタイミングを更新用ソフトウェア配布モジュール210が制御することで、攻撃者が暗号化されていない更新用更新モジュール133を入手することを不可能にする。
図28〜30は、更新モジュールの更新処理の一例を示すフローチャートである。ここでは、上述したように更新モジュール133を更新するものとする。
図28〜30は、基本的には、図20〜22と同様である。異なる点は、更新対象となる更新モジュール133には、更新検証証明書や、復号終了通知、更新終了通知が送信されないことである。
また、更新モジュールを無効化するとしたが、これに限定するものではなく、保護制御モジュール120やアプリ等、更新モジュール以外のモジュールを無効化するとしてもよい。アプリ100、110は、上述した機能以外の機能を提供するソフトウェアであってもよい。
また、一つでも更新モジュールが改ざんされている場合には、改ざんされていない更新モジュールが全ての更新モジュール及び保護制御モジュールを更新あるいは無効化するとしてもよい。
(2)上記実施の形態では、更新モジュール131、132、133は、監視制御部301、改ざんチェック実行部302、更新制御部303、復号部304、認証部305、署名公開鍵保持部306、検証鍵保持部307、認証鍵対保持部308、MAC値保持部309、分散情報保持部310、アクセス情報取得部311、及び無効化処理部312を含んで構成されるとしたが、これに限定するものではなく、監視処理に必要な構成要素(監視制御部301、改ざんチェック実行部302、署名公開鍵保持部306)のみで構成されるとしてもよいし、更新処理に必要な構成要素(更新制御部303、復号部304、認証部305、署名公開鍵保持部306、認証鍵対保持部308)のみで構成されるとしてもよいし、無効化処理に必要な構成要素(アクセス情報取得部311、無効化処理部312)のみで構成されるとしてもよいし、さらに、上記の組み合わせから構成されるとしてもよい。この時、更新モジュール群130に含まれる更新モジュール全体として、監視処理と更新処理に必要な構成要素を含むよう構成されていればよい。
(3)上記実施の形態では、更新モジュール131、132、133において監視制御部303が他の更新モジュールを改ざん検出するタイミング、及び改ざん検出対象となる更新モジュールの選択処理を制御するとした。すなわち、各更新モジュールの監視制御部303が独立に監視に関する制御を行うとしたが、これに限定するものではなく、1つの更新モジュールの監視制御部303が監視処理全体を制御するとしてもよいし、監視制御部303が更新サーバ200からの指示に基づいて、改ざん検出タイミングや改ざん検出対象となる更新モジュールの選択を制御するとしてもよい。
(4)上記実施の形態では、更新モジュール131、132、133において改ざんチェック実行部302により他の更新モジュールや保護制御モジュール120の改ざんチェックを実行するとしたが、改ざんチェック対象はモジュール全体に限定するものではなく、モジュール内の一部、例えば、特定の機能や関数、鍵等のデータであってもよい。
また、一度に改ざん対象全てを改ざんチェックするのではなく、改ざん対象の一部を改ざんチェックするだけでもよい。この時、改ざん対象を一定のサイズに分割した部分毎に改ざんチェックしてもよいし、機能や関数単位で分割した部分毎に改ざんチェックしてもよい。さらに、改ざん対象の一部を、改ざんチェックの度に順番に改ざんチェックするとしてもよいし、改ざんチェックする部分を改ざんチェックの度にランダムに決定してもよし、どの部分を改ざんチェックするかが他のモジュールや機器100外部などから与えられるとしてもよい。
(5)上記実施の形態では、更新モジュール131、132、133や保護制御モジュール120は、耐タンパ化された領域等、攻撃者による攻撃から保護されている領域で動作するとしてもよい。監視処理に必要な構成要素のみで構成される更新モジュールが、攻撃者による攻撃から保護されている領域で動作する場合、他の更新モジュールや更新用ソフトウェア配布モジュール210、アクセス情報取得鍵配布モジュール220は、その保護された領域にある更新モジュールから、他の更新モジュールや保護制御モジュール120が攻撃されたことを検知した旨の通知を受けたときに、その通知を無条件に受け入れ、更新処理や無効化処理を実施してもよいし、その通知を他のモジュールからの通知よりも重要な通知として扱い、更新処理や無効化処理の判断を行ってもよい。
また、保護制御モジュールが保護モード(耐タンパ化された領域等)で、更新モジュールが通常モード(耐タンパ化されていない領域等)で動作するとしてもよい。これにより、保護モードで動作する保護制御モジュールが信頼できなくなったときにもそれを検知し、更新できる。
(6)上記実施の形態では、アクセス情報取得鍵配布モジュール220は、更新サーバ200にあり、アクセス制御モジュール140は、機器100にあるとしたが、これに限定するものではなく、アクセス情報取得鍵配布モジュール220とアクセス制御モジュール140とはそれぞれ、機器100にあってもよいし、更新サーバ200にあってもよいし、各更新モジュール内にあってもよい。
また、アクセス情報取得鍵配布モジュール220とアクセス制御モジュール140とは、別々のモジュールではなく1つのモジュールであってもよい。アクセス情報取得鍵配布モジュール220とアクセス制御モジュール140とが1つのモジュールである場合には、更新モジュールへアクセス情報取得鍵と暗号化アクセス情報とを送信するのではなく、アクセス情報を直接送信してもよい。
さらに、アクセス情報取得鍵配布モジュール220やアクセス制御モジュール140が機器100内にあるときには、耐タンパ化などにより攻撃から保護される領域にあるとしてもよい。
(7)上記実施の形態では、更新サーバ200は、更新用ソフトウェア配布モジュール210とアクセス情報取得鍵配布モジュール220とから構成されるとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール210とアクセス情報取得鍵配布モジュール220とは、1つのモジュールであってもよいし、どちらか1つのモジュールのみで構成されてもよい。
(8)上記実施の形態では、ソフトウェア更新システム1000は、機器100の工場製造時に初期設計処理を行うとしたが、これに限定するものではなく、販売後など工場出荷後のどこかで初期化処理を実施してもよい。また、初期化処理は1度だけでなく、2度以上実施してもよい。
(9)上記実施の形態では、初期設計時の動作として、改ざん検出用証明書及び認証鍵証明書は、更新用ソフトウェア配布モジュール210が保持する署名秘密鍵を用いて生成された証明書であるとしたが、これに限定するものではなく、それぞれ別の鍵を用いて生成されてもよいし、更新用ソフトウェア配布モジュール210以外の証明書発行装置により発行された証明書でもよい。
(10)上記実施の形態では、初期設計時や次ラウンド準備時の動作として、暗復号鍵から生成する分散情報を更新モジュール131、132、133へ送信し、更新モジュール131、132、133が分散情報を保持するとしたが、これに限定するものではなく、更新モジュールの代わりにアプリが保持するとしてもよいし、更新モジュール131、132、133とアプリとが保持するとしてもよい。
(11)上記実施の形態では、検知時の動作として、更新モジュール131、132、133が保護制御モジュール120の改ざん検出を行うときに、検証鍵を使用して計算したMAC値を用いて改ざん検出処理を行うとしたが、これに限定するものではなく、保護制御モジュール120の改ざん検出用証明書を用いて検証するとしてもよい。また、MAC値や証明書のようにハッシュ値を利用した改ざん検証を行うのではなく、ログをチェックすることで改ざん検証を行うとしてもよい。
(12)上記実施の形態では、検知時の動作として、更新モジュール131、132、133が保護制御モジュール120の改ざんを検出した場合、更新用ソフトウェア配布モジュール210と他の更新モジュールへ通知するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール210と他の更新モジュールのうち、どれか1つ以上のモジュールに通知するとしてもよい。
また、保護制御モジュール120の改ざんを検出した場合、更新モジュールを停止するとしてもよいし、機器100や保護制御モジュール120を停止するとしてもよい。更に、改ざんされた保護制御モジュールを消去するとしてもよい。さらに、更新モジュール131、132、133が保護制御モジュール120の改ざんを検出しなかった場合、更新用ソフトウェア配布モジュール210へ通知を行わないとしたが、これに限定するものではなく、改ざん検出処理を実施した結果として、改ざんを検出しなかった旨を通知するとしてもよい。
(13)上記実施の形態では、検知時の動作として、更新モジュール131、132、133は、他の更新モジュールに保護制御モジュールの改ざん検出結果を送信しないとしたが、それぞれの更新モジュールで検出結果を共有するとしてもよい。また、検出結果を共有しない更新モジュールがあった場合に、当該更新モジュールを不正な更新モジュールと判断して、無効化するとしてもよい。
(14)上記実施の形態では、解析・判断時の動作として、改ざん情報に基づいて保護制御モジュール120を更新するかどうか判定するとしたが、これに限定するものではなく、改ざんされていると通知してきた更新モジュールの数によって更新するかどうかを判定してもよい。また、解析・判断時の動作として、保護制御モジュール120を更新するか否か、及び保護制御モジュール120を無効化するか否かを判断したが、これに限定するものではなく、機器100を停止するか否かを判断するとしてもよい。
(15)上記実施の形態では、相互認証時の動作として、更新モジュール131、132、133が、更新用ソフトウェア配布モジュール210を認証し、その後、更新用ソフトウェア配布モジュール210がそれぞれの更新モジュール131、132、133を認証するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール210がそれぞれの更新モジュール131、132、133を認証し、その後、更新モジュール131、132、133が、更新用ソフトウェア配布モジュール210を認証してもよいし、それぞれの更新モジュール131、132、133と更新用ソフトウェア配布モジュール210とが個別に認証処理を行ってもよい。
(16)上記実施の形態では、相互認証時の動作として、更新用ソフトウェア配布モジュール210がそれぞれの更新モジュール131、132、133を認証する処理において、チャレンジデータをそれぞれの更新モジュールで異なる値にするとしたが、これに限定するものではなく、チャレンジデータとして全ての更新モジュールで同じ値としてもよいし、更新モジュール131、132、133を複数のグルーブに分け、それぞれのグループで異なる値にしてもよい。
(17)上記実施の形態では、相互認証時の動作として、それぞれの更新モジュール131、132、133が、更新用ソフトウェア配布モジュール210を認証する処理において、それぞれの更新モジュール131、132、133が個別に更新用ソフトウェア配布モジュール210を認証するとしたが、これに限定するものではなく、署名検証した結果を他の更新モジュールへ通知し、更新モジュール間で検証結果を共有し、自更新モジュールの認証結果と他の更新モジュールから受信した認証結果とから、更新用ソフトウェア配布モジュール210が正当なモジュールかどうかをそれぞれ判定してもよい。
判定方法としては、例えば、一定数(例えば、過半数等)の更新モジュールが認証に成功した場合には正当なモジュールであると判定し、そうでない場合には、正当なモジュールではないと判定する方法がある。
(18)上記実施の形態では、相互認証時の動作として、更新サーバ200は署名秘密鍵と署名公開鍵とを使用して相互認証処理を実施するとしたが、これに限定するものではなく、署名秘密鍵と署名公開鍵とは別に、相互認証に使用する認証鍵対を用いるとしてもよい。この時、更新サーバ200の認証鍵対のうちの認証公開鍵は、予め更新モジュール131、132、133で保持するとしてもよいし、相互認証処理時に更新サーバ200から更新モジュール131、132、133へ送信するとしてもよい。
(19)上記実施の形態では、相互認証時の動作として、正当なモジュールであると検証できた更新モジュールが、回復処理に必要な数以上あるかどうかで、その後の回復処理を実施するかどうか判定したが、これに限定するものではなく、不正な更新モジュールの数が、予め設定されている許容数未満かどうかで回復処理を実施するかどうか判定してもよい。また、相互認証処理において、回復処理に必要な数に満たないと判定した場合には、機器を停止するとしたが、更新モジュールを無効化してもよい。
(20)本発明の実施の形態1では、相互認証時の動作として、更新用ソフトウェア配布モジュール210がそれぞれの更新モジュール131、132、133を認証する時に、更新モジュール131、132、133は、レスポンスデータと一緒に認証公開鍵と認証鍵証明書とを更新用ソフトウェア配布モジュール210へ送信するとしたが、これに限定するものではなく、それぞれ別のタイミングで送信してもよい。
また、認証公開鍵や認証鍵証明書は、更新用ソフトウェア配布モジュール210から要求があったときにのみそれぞれ送信するとしてもよい。この時、更新用ソフトウェア配布モジュール210は、全ての更新モジュールの認証公開鍵や認証鍵証明書を受信してもよいし、予め設定されている、回復処理に必要な数以上、或いは予め設定されている、不正な更新モジュールの許容数未満の更新モジュールの認証公開鍵と認証鍵証明書とを受信してもよい。
(21)本発明の実施の形態1では、回復時の動作として、監視処理時を、1回の復号中(監視3−1、3−2、5−1、5−2)に2回実施するとしたが、これに限定するものではなく、復号処理の時間にあわせて何回監視処理を行ってもよいし、復号処理以外であっても、鍵や更新用保護制御モジュールの受信処理時や検知処理時、相互認証時に監視処理を行ってもよい。また、監視処理を一定時間間隔で定期的に実施するとしたが、これに限定するものではなく、更新処理を複数のブロックに分割し、その処理ブロックの処理が終わるごとに実施してもよいし、ランダムな時間間隔で実施してもよいし、更新サーバ200から指定された時間間隔で実施してもよい。
また、各更新モジュールは、監視処理を実行するタイミングを示す同期情報を外部のサーバから取得し、取得した同期情報にしたがって監視処理を実行するとしてもよい。これにより、各更新モジュールは、他の更新モジュールと同じタイミングで監視処理を実行することができるので、不正な更新モジュールの検出精度を向上させることができる。
さらに、通常時と回復処理時とにおける検知頻度を変更するとしてもよい。例えば、通常時より回復処理時の検知頻度を高くすることにより、回復処理中の保護制御モジュールの保護に万全を期すことができる。検知頻度の変更は、回復処理中であってもよい。
(22)本発明の実施の形態1では、回復時の動作として、監視処理のパターンは、更新モジュール131が更新モジュール132の改ざん検出を行い、更新モジュール132が更新モジュール133の改ざん検出を行い、更新モジュール133が更新モジュール131の改ざん検出を行うものであったが、これに限定するものではなく、例えば、更新モジュール131が更新モジュール133の改ざん検出を行い、更新モジュール132が更新モジュール131の改ざん検出を行い、更新モジュール133が更新モジュール132の改ざん検出を行うなど、予め決められたパターンで改ざん検出するとしてもよいし、どの更新モジュールの改ざん検出を行うかをランダムに決定してもよいし、他のモジュールや機器100外部から与えられるとしてもよい。
また、各更新モジュールは、当該更新モジュール(自更新モジュール)が改ざんされていないかを検証するとしてもよい。さらに、自更新モジュールの改ざんを検出すると、自更新モジュール自身を無効化するとしてもよい。更に、全ての更新モジュールが他の更新モジュールから監視される必要はなく、他の更新モジュールから監視されない更新モジュールがあってもよいし、複数の更新モジュールから監視されてもよい。
また、監視処理のパターンを変更する場合は、改ざん検出の処理毎など、一定の間隔で変更するとしてもよいし、ランダムなタイミングで変更するとしてもよいし、他のモジュールや機器100外部から与えられたタイミングで変更するとしてもよい。また、複数の更新モジュールは、改ざん検出の結果を、更新サーバにより指定される順序で、更新サーバに送信してもよい。
(23)本発明の実施の形態1では、回復時の動作として、監視処理時に、更新モジュール131が更新モジュール132の改ざん検出を行い、更新モジュール132が更新モジュール133の改ざん検出を行い、更新モジュール133が更新モジュール131の改ざん検出を行うというように、全ての更新モジュールが監視処理を行うとしたが、これに限定するものではなく、一つの更新モジュールが更新処理を実施し、他の更新モジュールが監視処理を実施してもよい。
この時の監視パターンとしては、更新処理を行っている更新モジュールを、1つの更新モジュールが監視してもよいし、複数または全ての更新モジュールが監視してもよい。例えば、更新モジュール131が更新モジュール132の改ざん検出を行い、更新モジュール132が更新モジュール133の改ざん検出を行い、更新モジュール133が更新処理を行う。これにより、更新処理を中断することなく監視処理も実施できる。
また、上記実施の形態では、更新モジュール131が更新モジュール132の改ざん検出を行い、更新モジュール132が更新モジュール133の改ざん検出を行い、更新モジュール133が更新モジュール131の改ざん検出を行うというように、監視構成としてループ方式を用いたが、複数の更新モジュールの各々が相互に監視し合う構成としてもよいし、それらを組み合わせてもよい。複数の更新モジュールの各々が相互に監視し合う構成とすることにより、改ざん検証精度をさらに高めることができる。
(24)本発明の実施の形態1では、回復時の動作として、更新モジュール132は、取得した更新用保護制御モジュール121を保護制御モジュール120に上書きし、保護制御モジュール120を更新するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール210から保護制御モジュール120と更新用保護制御モジュール121との差分を取得し、差分のみを更新するとしてもよいし、更新用保護制御モジュール121を保護制御モジュール120とは別の領域へ書き込み、保護制御モジュール120に代わって、更新用保護制御モジュール121が実行されるようにしてもよい。
(25)本発明の実施の形態1では、回復時の動作として、監視処理により、更新モジュール131、132、133の改ざんが検出された場合、改ざん検出の通知を受けた更新用ソフトウェア配布モジュール210は、直ちに回復処理を停止するとしたが、これに限定するものではなく、更新用ソフトウェア配布モジュール210から更新モジュールへ、鍵などのデータを次に送信するタイミングで回復処理を停止するとしてもよい。
また、回復処理を停止するのではなく、改ざんされた更新モジュールを使用せずに、正常な更新モジュールを用いて回復処理を行うとしてもよいし、改ざんされた更新モジュールを無効化あるいは更新するとしてもよい。この時、無効化や更新などの処理を行うタイミングとしては、直ちに処理してもよいし、次に鍵が送付されるタイミングで処理してもよいし、改ざんされた更新モジュールを使用せずに回復処理を再開するときに処理してもよい。改ざんされた更新モジュールを無効化あるいは更新する処理を担う更新モジュールを更新サーバが指定するとしてもよい。
また、監視処理により改ざんが検出された場合だけでなく、検知処理時に保護制御モジュール120によって改ざんが検出された更新モジュールや、相互認証処理時に認証に失敗した更新モジュールについても同様に、当該更新モジュールを使用せずに回復処理を行うとしてもよいし、改ざんされた更新モジュールを無効化するとしてもよいし、更新するとしてもよい。さらに、改ざんされた更新モジュールが存在する場合には、保護制御モジュールの更新を行わないとしてもよい。
(26)本発明の実施の形態1では、回復時の動作として、更新処理において復号に使用する更新モジュールを、更新用ソフトウェア配布モジュール210が更新モジュール群130から一つ選択するとしたが、その選択方法は、予め決められた更新モジュールを選択するとしてもよいし、ランダムに決定するとしてもよいし、機器100から通知された情報を元に決定するとしてもよいし、相互認証時に認証した順番に応じて選択するとしてもよい。
(27)本発明の実施の形態1では、回復時の動作として、更新処理において更新用ソフトウェア配布モジュール210が更新用保護制御モジュール121を複数の鍵を用いて多重に暗号化するとしたが、これに限定するものではなく、更新用保護制御モジュール121を複数の部分に分割した分割モジュールを生成し、分割モジュールそれぞれを個別に暗号化し、更新モジュールと一対一に対応する形態で、更新モジュールへ送信するとしてもよい。
この場合、更新処理としては、暗号化した分割モジュールと暗号に使用した鍵を送信するときに、それらを1度に全て送信するのではなく、1つの暗号化した分割モジュールの復号処理が終了するまで、他の暗号化した分割モジュールと鍵を送信しないように、更新モジュールへの送信を制御する。
別の方法として、暗号化した分割モジュールは1度に更新モジュールへ送信し、それらを復号するための鍵の送信のタイミングのみを制御するとしてもよいし、鍵は1度に更新モジュールへ送信し、暗号化した分割モジュールの送信のタイミングのみを制御するとしてもよいし、全ての鍵と暗号化した分割モジュールを1度に送信するとしてもよい。また、分割モジュールは、1つの鍵で暗号化されるのではなく、複数の鍵を用いて多重に暗号化されてもよい。
この場合、鍵や多重暗号化した分割モジュールの送信制御は、更新用保護制御モジュール121を複数の鍵を用いて多重に暗号化した時と同様である。更に、暗号化した分割モジュールとそれを復号する鍵は、1つの更新モジュールへ送信してもよいし、それぞれ別の更新モジュールへ送信し、機器100内部で更新モジュール同士が協調動作するとしてもよい。その際、分割モジュールを受信する前後で監視処理を実施してもよい。
また、監視処理により、改ざんされた不正な更新モジュールが検出された場合、次の分割モジュールを送信するタイミングで更新処理を停止してもよい。さらに、複数の更新モジュールは、改ざんされた更新モジュールが存在する場合には、それを更新サーバに通知し、更新サーバは、改ざんされた更新モジュールには復号鍵を送信しないとしてもよい。分割モジュールはそれぞれ異なる暗号鍵で暗号化されていてもよい。
(28)本発明の実施の形態1では、回復時の動作として、暗復号鍵(旧暗復号鍵)で暗号化されたアプリ110、111を新しい暗復号鍵(新暗復号鍵)を用いて再暗号化するとしたが、これに限定するものではなく、再暗号化処理を行わなくてもよい。この時、新暗復号鍵を生成せずに旧暗復号鍵を使い続けるとしてもよいし、旧暗復号鍵と新暗復号鍵を保持しておき、アプリによって使用する鍵を変える構成にしてもよいし、旧暗復号鍵が必要になったときには分散情報から再び生成するとしてもよい。旧暗復号鍵を使用し続ける場合は、保護制御モジュール120が更新される度に旧暗復号鍵が増えることになる。また、各更新モジュールで新暗復号鍵と旧暗復号鍵の分散情報を保持しておく必要がある。
(29)本発明の実施の形態1において、保護制御モジュール121が正しく更新されなかった場合に機器100を停止するとしたが、これに限定するものではなく、再度、相互認証処理及び回復処理を実施するとしても良い。
(30)本発明の実施の形態1において、無効化時の動作として、アクセス情報は、更新モジュールを消去するための専用ドライバであるとしたが、これに限定するものではなく、更新モジュールを消去するための専用プログラムであってもよいし、更新モジュールを消去するための手順が記された手順書であってもよいし、消去する更新モジュールのアドレスであってもよいし、更新モジュールを消去するプログラムのアドレスであってもよいし、更新モジュールを消去するための機能を動作させるためのレジスタやメモリのアドレスやレジスタやメモリに設定する値であってもよい。
また、アクセス情報は、コード部分を消去する旨が記述された情報であってもよい。この場合、コード位置はヘッダに格納されており、ヘッダを参照して消去すべきコード部分を判断するとしてもよい。さらに、アクセス制御モジュール自体が暗号鍵で暗号化されているとしてもよい。その場合には、改ざんされていない更新モジュールは、更新サーバから、アクセス制御モジュールを暗号化した暗号鍵に対応する復号鍵を取得し、取得した復号鍵を用いてアクセス制御モジュールを復号し、改ざんされた更新モジュールに対応するアクセス情報をアクセス制御モジュールから取得し、取得したアクセス情報に基づいて、改ざんされた更新モジュールを無効化するとしてもよい。
(31)本発明の実施の形態1において、無効化時の動作として、改ざんされた更新モジュール全体を消去するとしたが、これに限定するものではなく、改ざんされた不正な更新モジュールの一部、例えば、他のモジュールを読み込むための読み込み機能など特定の機能や関数、鍵や他のモジュールをアクセスするための情報(チケット、トークン、ソケット)などのデータを消去するとしてもよいし、他のプログラムからアクセスできなくしてもよいし、不活性化してもよいし、更新してもよい。
また、改ざんされた更新モジュールを無効化した後、無効化処理を行った更新モジュールは、アクセス制御モジュールに格納されている、無効化した更新モジュールに対応するアクセス情報を消去するとしてもよい。
(32)本発明の実施の形態1において、改ざんされた不正な更新モジュールを無効化するとしたが、これに限定するものではなく、改ざんされた不正な更新モジュールを無効化しないとしてもよい。この時、どのくらいの部分が改ざんされているか、どの部分が改ざんされたか等によって、無効化するかどうかを判断してもよいし、改ざんされた不正な更新モジュールの数によって無効化する更新モジュール数を決めてもよい。
(33)本発明の実施の形態2では、保護制御モジュール120が更新モジュール131、132、133の改ざん検出を行うときに、各更新モジュールの改ざん検出用証明書を検証するとしたが、これに限定するものではなく、更新モジュール131、132、133と同様に、検証鍵を使用して計算したMAC値を用いる改ざん検出を行うとしてもよい。
この場合、保護制御モジュール120には、検証鍵が埋め込まれ、初期設計時に、改ざん検出用証明書の検証が実施される。問題なかった場合には、保護制御モジュール120が、それぞれの更新モジュールに対して検証鍵を使用してMAC値を生成し、MAC値テーブルとして保持する処理を追加する必要がある。
(34)本発明の実施の形態2では、保護制御モジュール120が、更新モジュール131、132、133の改ざんを検出しなかった場合には、更新用ソフトウェア配布モジュール210へ通知を行わないとしたが、これに限定するものではなく、改ざんを検出しなかった旨を更新用ソフトウェア配布モジュール210へ通知してもよい。
(35)本発明の実施の形態2では、保護制御モジュール120から更新用ソフトウェア配布モジュール210へ、更新モジュール131、132、133の改ざんを検出した旨の通知があった場合、更新用ソフトウェア配布モジュール210は、保護制御モジュール120が改ざんされていないかを確認するために、更新モジュール131、132、133へ保護制御モジュール120の改ざん検出を依頼するとしたが、これに限定するものではなく、保護制御モジュール120から更新用ソフトウェア配布モジュール210へ、更新モジュール131、132、133の改ざんを検出した旨の通知があった場合、検出された更新モジュールが改ざんされていると判断し、当該更新モジュールを相互認証処理や回復処理に使用しないとしてもよいし、保護制御モジュール120が無効化処理を実施するとしてもよい。この時、保護制御モジュール120は、耐タンパー化された領域で動作するなど、攻撃から保護されていることが望ましい。
(36)本発明の実施の形態3では、アクセス情報取得鍵の送付依頼をした更新モジュールが、保護制御モジュール120を更新する更新モジュールであるかどうかを、更新用ソフトウェア配布モジュール210に問い合わせたが、これに限定するものではなく、更新サーバ200が保護制御モジュール120を更新する更新モジュールであるかどうかを確認してもよい。
(37)上記の各モジュールは、具体的には、それぞれ個別のコンピュータプログラムであってもよいし、オペレーティングシステムに組み込まれるモジュールであってもよいし、オペレーティングシステムから呼ばれるドライバであってもよいし、アプリケーションプログラムであってもよい。
(38)上記の各装置を構成する構成要素の一部または全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムLSIは、その機能を達成する。
また、上記の各装置を構成する構成要素の各部は、個別に1チップ化されていても良いし、一部又は全てを含むように1チップ化されてもよい。
また、ここでは、システムLSIとしたが、集積度の違いにより、IC、LSI、スーパーLSI、ウルトラLSIと呼称されることもある。また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
(39)上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なICカードまたは単体のモジュールから構成されているとしてもよい。前記ICカードまたは前記モジュールは、マイクロプロセッサ、ROM、RAMなどから構成されるコンピュータシステムである。前記ICカードまたは前記モジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ICカードまたは前記モジュールは、その機能を達成する。このICカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
(40)本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、前記コンピュータプログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記コンピュータプログラムまたは前記デジタル信号を、前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
(41)上記実施の形態では、更新モジュールの数を3として説明したが、これに限定されるものでなく、更新モジュールは、複数あればよい。
(42)上記実施の形態では、アクセス制御モジュール140及び更新モジュール群130は、OS150の中に組み込まれているとしたが、更新モジュールがOSを更新する機能を備えている場合等には、更新モジュールは、OSの管理外にプログラムとして格納されているとしてもよい。また、保護制御モジュールがOSに組み込まれているとしてもよい。
(43)上記実施の形態では、RAM上で動作しているモジュールが改ざん検出及び無効化の対象であったが、EEPROMに記憶されているモジュールの改ざんチェックを行ってもよし、改ざんされている場合には無効化してもよい。また、一つでも改ざんされている更新モジュールがあれば、全ての更新モジュールを無効化あるいは更新してもよい。RAM及びEEPROMの両方のモジュールを無効化するとしてもよい。また、更新の対象となるのは、EEPROMに記憶されているモジュールでもよいし、RAM上で動作しているモジュールでもよい。
(44)機器100は具体的には、携帯電話等の携帯端末やデジタルテレビ等、双方向のデータ通信が可能な機器であればよい。
(45)上記実施の形態では、アクセス情報は、更新モジュール毎にそれぞれ個別のアクセス情報取得鍵で暗号化されているとしたが、同一のアクセス情報取得鍵で暗号化されているとしてもよい。その場合には、正常な更新モジュールが更新サーバにアクセスして、アクセス情報取得鍵に対応した復号鍵を取得し、取得した復号鍵を用いてアクセス制御モジュールを復号し、アクセス制御モジュールから、改ざんされた更新モジュールに対応するアクセス情報を取得し、取得したアクセス情報に基づいて、改ざんされた更新モジュールを無効化するとしてもよい。
(46)上記実施の形態では、保護制御モジュールが改ざんされている場合に、当該保護制御モジュールを更新し、その際、更新モジュール群に含まれる複数の更新モジュールの各々が、他の更新モジュールの改ざん検証を行うとしたが、改ざんの有無に関わらず、例えば、保護制御モジュールのバージョンをアップさせる場合等において、改ざん検証を行うとしてもよい。
(47)上記実施の形態では、更新用の保護制御モジュールは、複数の暗号鍵で暗号化されていたが、一つの暗号鍵で暗号化されているとしてもよい。その場合、当該暗号鍵に対応する復号鍵が複数に分割され、分割された復号鍵の全てが、改ざんされていない更新モジュールを送信先として送信され、分割された全ての復号鍵を用いて、改ざんされていない更新モジュールは、更新用の保護制御モジュールを復号するとしてもよい。
(48)分散情報を保持している更新モジュールが無効化されたときに、他の更新モジュールで保持している分散情報を更新する処理(脱退処理)を行ってもよいし、更新モジュールを新たに追加するときに分散情報を更新する処理(追加処理)を行ってもよい。
以下に、脱退処理及び追加処理の詳細を説明する。ここでは、機器100Aは6つの更新モジュール121A〜126Aを備えるものとして説明する。
更新モジュール121A〜126Aは、制御部250_j、分散情報格納部251_j、他モジュール分散情報格納部252_j、認証子格納部253_j、リスト格納部254_j、ID格納部255_j、送信部256_j及び受信部257_jから構成されている。制御部250_jは、分散情報更新部260_j、分散情報分割部261_j、分散情報検証部262_j、他モジュール分散情報検証部263_j、部分情報検証部264_j、変形情報生成部265_j、リスト更新部266_j及び取得部267_jを有している。なお、符号25x(x=1、2、・・・、7)に付与されている添え字jは、1、2、・・・、6の値であり、j番目の更新モジュールに対応する。
また、他モジュール分散情報XXX_Yは、分散情報XXXと同じと識別される分散情報で、更新モジュール12Yが保持していることを表す。この様に、複数の更新モジュールで共通の分散情報を持つことで分散情報に対して冗長性を持たせた構成としている。また、以降の説明において、第1及び第2他モジュール分散情報を特に区別する必要がない場合には、単に、他モジュール分散情報と言い、各他モジュール分散情報と分散情報とを特に区別する必要がない場合には、単に、分散情報と言う。
脱退処理の動作
脱退処理について、図30にて示す流れ図を用いて説明する。
この処理では、更新モジュールが不正な動作を行う可能性を考え、更新モジュール間で送信されるデータが正しいデータであるかを常に検証することで、不正な動作を行う更新モジュールが存在した場合に検知できるようにしている。さらに、各処理において、分散情報の値を更新する場合には、更新前の分散情報の値を退避しておき、脱退処理中に不正な動作を行う更新モジュールの存在を検知した場合には、脱退処理を中止し、分散情報の値を脱退処理前の値に戻すことで、分散情報が不正な値になることを防止する。
また、当該処理では、脱退する更新モジュールが所有する分散情報と同じ分散情報を持つ更新モジュールが分散情報の生成及び配布を行うものとする。この様な処理にすることで、脱退する更新モジュールが脱退処理を行わなくても分散情報を更新することが可能となり、不正な動作を行う更新モジュールを無効化する処理などにも利用できる。
なお、脱退対象となるモジュールを更新モジュール121Aとし、部分情報の生成を更新モジュール126Aが行うものとして、以下説明する。
更新モジュール126Aは、外部の装置(図示せず)から、脱退対象の更新モジュール121Aが有する分散情報“d_1”と同一の他モジュール分散情報から部分情報を生成する旨の脱退時の部分情報生成指示を受け取る。
更新モジュール126Aは、第1他モジュール分散情報“d1_1”から5つの分散情報を生成し、配布する処理を行う(ステップS4000)。言い換えると、更新モジュール126Aは、第1他モジュール分散情報“d1_1”を、5つの分散情報に分散(分解)する。
更新モジュール126Aが有する第1他モジュール分散情報“d1_1”と同一の情報を持つべきモジュールである更新モジュール122Aは、部分情報に用いられた第1他モジュール分散情報“d1_1”の検証を行う(ステップS4050)。
更新モジュール122A〜126Aは、脱退時における第1及び第2更新処理を行い、それぞれが保持する分散情報、第1及び第2他モジュール分散情報を更新する(ステップS4100、S4150)。
更新モジュール122A〜126Aは、更新が正常に行われたか否かを判断する(ステップS4200)。このとき、更新モジュール122A〜125Aは、判断結果を部分情報送信元である更新モジュール126Aへ通知する。具体的には、分散情報を共通に持っている更新モジュール同士で、分散情報検証部262_j及び他モジュール分散情報検証部263_jを用いて、互いに持っている分散情報が同じ値に更新されたかを、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と各自が保持していた分散情報が同じ値かどうかを検証する。更新モジュール122A〜125Aは、検証結果を更新モジュール126Aへ通知し、更新モジュール126Aは、検証結果を一時的に保持する。
全ての装置にて更新が正常に行われた場合には(ステップS4200における「YES」)、更新モジュール126Aは、配布先リストT100を更新する。更新モジュール126Aは、更新後の配布先リストをリスト格納部254_6へ格納するとともに、更新モジュール122A〜125A及び保護制御モジュール装置へ送信する。更新モジュール122A〜125A及び保護制御モジュール装置は、現在格納している配布先リストから更新後の配布先リストへと更新する(ステップS4250)。
全ての装置にて更新が正常に行われていない場合には(ステップS4200における「NO」)、更新モジュール126Aは、更新モジュール122A〜125Aへその旨を通知する。更新モジュール126A、及び通知を受けた更新モジュール122A〜125Aは、脱退処理を中止し、自装置の分散情報の値を脱退処理の前に戻し、処理を終了する。
なお、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と同じ値かどうかを検証するとしたが、これに限定するものではなく、ゼロ知識証明などの暗号プロトコルを使用して検証してもよい。ゼロ知識証明については、非特許文献1の132〜150ページに、暗号プロトコルについては、非特許文献1の224〜225ページに詳しく説明されている。
以下、ステップS400からS415にて行われる各処理について説明する。
(部分情報の生成処理)
ここでは、図30のステップS4000にて示す部分情報の生成処理について、図31にて示す流れ図を用いて説明する。
更新モジュール126Aの分散情報分割部261_6は、第1他モジュール分散情報“d1_1”211_6から5つの部分情報(d_1_1〜d_1_5)を生成する(ステップS4500)。このとき、各部分情報は、次式を満たすものとする。
(式) d1_1=d_1_1+d_1_2+d_1_3+d_1_4+d_1_5 mod L
具体的には、分散情報分割部261_6は、乱数生成器を用いて、(k−2)個(=4個)の乱数を生成することにより、部分情報(d_1_1〜d_1_4)を生成する。次に、分散情報分割部261_6は、
d_1_5 = d1_1 − (d_1_1+d_1_2+d_1_3+d_1_4)
により、d_1_5を算出する。このとき、減算結果が負の数になる事もあるが、そのまま部分情報として扱う。
分散情報分割部261_6は、脱退対象の装置(ここでは、更新モジュール121A)が保持する分散情報“d_1”及びこの情報と同一の値となるべき情報“d1_1”及び“d2_1”を除く残りの分散情報に対して、同一となるべき分散情報毎に、異なる部分情報を割り当てる。具体的には、部分情報d_1_iを分散情報d_(i+1)に割り当てる。
分散情報分割部261_6は、配布先リストT100の内容に基づいて、配布先の更新モジュール毎に、2つ若しくは3つの部分情報を配布する(ステップS4550)。なお、自装置へは2つの部分情報が配布されるが、この場合、分散情報分割部261_jは、分散情報更新部260_jへ出力する。
具体的には、分散情報分割部261_6は、以下のように各部分情報を配布する。
分散情報分割部261_6は、部分情報d_1_1、d_1_2を更新モジュール122Aへ送信する(ステップS4600)。分散情報分割部261_6は、部分情報d_1_1、d_1_2、d_1_3を更新モジュール123Aへ送信する(ステップS4610)。分散情報分割部261_6は、部分情報d_1_2、d_1_3、d_1_4を更新モジュール124Aへ送信する(ステップS462)。分散情報分割部261_6は、部分情報d_1_3、d_1_4、d_1_5を更新モジュール125Aへ送信する(ステップS4630)。分散情報分割部261_6は、部分情報d_1_4、d_1_5を分散情報更新部260_6へ出力し、一時的に記憶する。i番目の更新モジュールは、受信した各部分情報を分散情報更新部260_jに一時的に格納する。
(分散情報の検証処理)
ここでは、図30のステップS4050にて示す分散情報の検証処理について、図32にて示す流れ図を用いて説明する。
分散情報211_6が正当な値であることを検証するために更新モジュール122Aが保持する第2他モジュール分散情報211_2を利用する。
部分情報検証部264_2は、更新モジュール126Aから部分情報検証指示を、受信部257_jを介して受け取ると、更新モジュール121Aを除く残りのモジュール123A、124A、125A及び126Aそれぞれから部分情報d_1_2、d_1_3、d_1_4、d_1_5を収集する(ステップS4700)。
具体的には、i番目(i=3〜6)の更新モジュールは部分情報d_1_(i−1)を更新モジュール122Aへ出力する(ステップS4710〜S4740)。
部分情報検証部264_2は、分散情報更新部260_jにて記憶しているd_1_1と、受信した各部分情報d_1_2、d_1_3、d_1_4、d_1_5とを加算し、値s’を算出し、算出した値s’が正当であるか否かを検証する(ステップS4800)。具体的には、部分情報検証部264_2は、算出した値s’と、他モジュール分散情報格納部252_jに格納されている第2他モジュール分散情報“d2_1”とが一致するか否かを判断する。
部分情報検証部264_2は、検証結果を各更新モジュール123A〜126Aへ通知する(ステップS4850)。具体的には、部分情報検証部264_2は、検証結果により、値s’が第2他モジュール分散情報“d2_1”と同一であると判断する場合には、同一である旨の検証結果を各更新モジュール123A〜126Aへ出力する。同一でないと判断する場合には、部分情報検証部264_2は、同一でない旨の検証結果を各更新モジュール123A〜126Aへ出力する。なお、当該モジュールに対しては、検証結果を分散情報更新部260_jへ出力する。
(脱退時の第1更新処理)
ここでは、図30のステップS410にて示す脱退時の第1更新処理について、図33及び図34にて示す流れ図を用いて説明する。
更新モジュール122Aの分散情報更新部260_2は、部分情報検証部264_2にて行われた検証の結果により、更新モジュール126Aの第1他モジュール分散情報“d1_1”が正当であるか否かを判断する(ステップS5000)。正当であると判断する場合には(ステップS5000における「YES」)、分散情報更新部260_2は、一時的に記憶している部分情報“d_1_1”を用いて分散情報“d_2”を更新する(ステップS5050)。具体的には、分散情報更新部260_2は、分散情報“d_2”に部分情報“d_1_1”を加算することにより、新たな分散情報“d_2’(=d_2+d_1_1)”を算出する。次に、分散情報更新部260_2は、一時的に記憶している部分情報“d_1_2”を用いて第1他モジュール分散情報“d1_3”を更新する(ステップS5100)。具体的には、分散情報更新部260_2は、第1他モジュール分散情報“d1_3”に部分情報“d_1_2”を加算することにより、新たな分散情報“d1_3’(=d1_3+d_1_2)”を算出する。
更新モジュール123Aの分散情報更新部260_3は、更新モジュール122Aから受け取った検証結果により、更新モジュール126Aの第1他モジュール分散情報“d1_1”が正当であるか否かを判断する(ステップS5200)。正当であると判断する場合には(ステップS5200における「YES」)、分散情報更新部260_3は、一時的に記憶している部分情報“d_1_2”を用いて分散情報“d_3”を更新する(ステップS5250)。具体的には、分散情報更新部260_3は、分散情報“d_3”に部分情報“d_1_2”を加算することにより、新たな分散情報“d_3’(=d_3+d_1_2)”を算出する。次に、分散情報更新部260_3は、一時的に記憶している部分情報“d_1_3”、及び“d_1_1”を用いて第1及び他モジュール分散情報“d1_4”、“d2_2”を更新する(ステップS5300)。具体的には、分散情報更新部260_3は、第1他モジュール分散情報“d1_4”に部分情報“d_1_3”を加算することにより、新たな分散情報“d1_4’(=d1_4+d_1_3)”を算出する。分散情報更新部260_3は、第2他モジュール分散情報“d2_2”に部分情報“d_1_1”を加算することにより、新たな分散情報“d2_3’(=d2_2+d_1_1)”を算出する。
更新モジュール124Aの分散情報更新部260_4は、更新モジュール122Aから受け取った検証結果により、更新モジュール126Aの第1他モジュール分散情報“d1_1”が正当であるか否かを判断する(ステップS5400)。正当であると判断する場合には(ステップS5400における「YES」)、分散情報更新部260_4は、一時的に記憶している部分情報“d_1_3”を用いて分散情報“d_4”を更新する(ステップS5450)。具体的には、分散情報更新部260_4は、分散情報“d_4”に部分情報“d_1_3”を加算することにより、新たな分散情報“d_4’(=d_4+d_1_3)”を算出する。次に、分散情報更新部260_4は、一時的に記憶している部分情報“d_1_4”、及び“d_1_2”を用いて第1及び他モジュール分散情報“d1_5”、“d2_3”を更新する(ステップS5500)。具体的には、分散情報更新部260_4は、第1他モジュール分散情報“d1_5”に部分情報“d_1_4”を加算することにより、新たな分散情報“d1_5’(=d1_5+d_1_4)”を算出する。分散情報更新部260_4は、第2他モジュール分散情報“d2_3”に部分情報“d_1_2”を加算することにより、新たな分散情報“d2_3’(=d2_3+d_1_2)”を算出する。
更新モジュール125Aの分散情報更新部260_5は、更新モジュール122Aから受け取った検証結果により、更新モジュール126Aの第1他モジュール分散情報“d1_1”が正当であるか否かを判断する(ステップS5600)。正当であると判断する場合には(ステップS5600における「YES」)、分散情報更新部260_5は、一時的に記憶している部分情報“d_1_4”を用いて分散情報“d_5”を更新する(ステップS5650)。具体的には、分散情報更新部260_5は、分散情報“d_5”に部分情報“d_1_4”を加算することにより、新たな分散情報“d_5’(=d_5+d_1_4)”を算出する。次に、分散情報更新部260_5は、一時的に記憶している部分情報“d_1_5”、及び“d_1_3”を用いて第1及び他モジュール分散情報“d1_6”、“d2_4”を更新する(ステップS5700)。具体的には、分散情報更新部260_5は、第1他モジュール分散情報“d1_6”に部分情報“d_1_5”を加算することにより、新たな分散情報“d1_6’(=d1_6+d_1_5)”を算出する。分散情報更新部260_5は、第2他モジュール分散情報“d2_4”に部分情報“d_1_3”を加算することにより、新たな分散情報“d2_4’(=d2_4+d_1_3)”を算出する。
更新モジュール126Aの分散情報更新部260_6は、更新モジュール122Aから受け取った検証結果により、当該更新モジュールの第1他モジュール分散情報“d1_1”が正当であるか否かを判断する(ステップS5800)。正当であると判断する場合には(ステップS5800における「YES」)、分散情報更新部260_6は、一時的に記憶している部分情報“d_1_5”を用いて分散情報“d_6”を更新する(ステップS5850)。具体的には、分散情報更新部260_6は、分散情報“d_6”に部分情報“d_1_5”を加算することにより、新たな分散情報“d_6’(=d_6+d_1_5)”を算出する。次に、分散情報更新部260_6は、一時的に記憶している部分情報“d_1_4”を用いて第2他モジュール分散情報“d2_5”を更新する(ステップS5900)。具体的には、分散情報更新部260_6は、第2他モジュール分散情報“d2_5”に部分情報“d_1_4”を加算することにより、新たな分散情報“d2_5’(=d2_5+d_1_4)”を算出する。
各更新モジュール122A〜126Aにおいて、第1他モジュール分散情報“d1_1”が正当でないと判断する場合には(ステップS5000、S5200、S5400、S5600及びS5800における「NO」)、検証の結果が一致しないと通知を受け取った場合には、更新モジュール122Aか126Aが不正な動作を行っているので、各更新モジュールは、脱退処理を中止する。
(脱退時の第2更新処理)
ここでは、図30のステップS415にて示す脱退時の第2更新処理について、図35にて示す流れ図を用いて説明する。
更新モジュール126Aの分散情報更新部260_6は、分散情報“d_6’”を更新モジュール122Aへ出力する(ステップS6000)。
更新モジュール122Aの分散情報更新部260_2は、分散情報“d_2’”を更新モジュール126Aへ出力する(ステップS6050)。
分散情報更新部260_6は、分散情報“d_2’”及び“d2_2’”を収集する(ステップS6100)。このとき、更新モジュール123Aの分散情報更新部260_3は分散情報“d2_2’”を送信する(ステップS6110)。
分散情報更新部260_2は、分散情報“d_6’”及び“d2_6’”を収集する(ステップS6150)。このとき、更新モジュール123Aの分散情報更新部260_3は分散情報“d2_2’”を送信する(ステップS6160)。
分散情報更新部260_6は、収集した分散情報“d_2’”及び“d2_2’”が一致するか否かを判断する(ステップS6200)。一致すると判断する場合には(ステップS6200における「YES」)、分散情報更新部260_6は、第1他モジュール分散情報を“d_2’”とする(ステップS6250)。
分散情報更新部260_2は、収集した分散情報“d_6’”及び“d2_6’”が一致するか否かを判断する(ステップS6300)。一致すると判断する場合には(ステップS6300における「YES」)、分散情報更新部260_2は、第2他モジュール分散情報を“d_6’”とする(ステップS6350)。
分散情報更新部260_6は、一致しないと判断する場合には(ステップS6200における「NO」)、更新モジュール126Aは、更新モジュール122A〜125Aへその旨を通知する。更新モジュール126A、及び通知を受けた更新モジュール122A〜125Aは、脱退処理を中止し、自モジュールの分散情報の値を脱退処理の前に戻し、処理を終了する。
分散情報更新部260_2は、一致しないと判断する場合には(ステップS6300における「NO」)、更新モジュール122Aは、更新モジュール123A〜126Aへその旨を通知する。更新モジュール122A、及び通知を受けた更新モジュール123A〜126Aは、脱退処理を中止し、自モジュールの分散情報の値を脱退処理の前に戻し、処理を終了する。
(具体例)
脱退処理後の更新モジュール122A〜126Aのそれぞれが保持する分散情報、第1及び第2他モジュール分散情報を、図36にて示す。
例えば、更新モジュール122Aは、脱退処理後において、更新後の分散情報“d_2’”212b、第1他モジュール分散情報“d1_3’”213_2b及び第2他モジュール分散情報“d2_6’”211_2bを保持している。
ここで、更新後の各分散情報“d_2’”〜“d_6’”により、秘密鍵“d”が回復されることを以下に示す。
d_2’+d_3’+d_4’+d_5’+d_6’
= (d_2+d_1_1)+(d_3+d_1_2)+(d_4+d_1_3)+(d_5+d_1_4)+(d_6+d_1_5)
= (d_1_1+d_1_2+d_1_3+d_1_4+d_1_5)
+(d_2+d_3+d_4+d_5+d_6)
= d_1+d_2+d_3+d_4+d_5+d_6
= d
このように、更新モジュール121Aが脱退後も、それぞれの更新モジュールが保持する分散情報の総和を一定とすることが可能となるため、脱退処理時において、ソフトウェア更新システムは、新しい秘密鍵“d”を復元し分散情報を再生成することなく、更新モジュールを脱退させることが可能となる。
追加処理の動作
ここでは、追加処理について、図37にて示す流れ図を用いて説明する。
追加処理では、更新モジュールが不正な動作を行う可能性を考え、更新モジュール間で送信されるデータが正しいデータであるかを常に検証することで、不正な動作を行う更新モジュールが存在した場合に検知できるようにしている。さらに、追加処理では、分散情報の値を更新する場合には、更新前の分散情報の値を退避しておき、追加処理中に不正な動作を行う更新モジュールの存在を検知した場合には、追加処理を中止し、分散情報の値を追加処理前の値に戻すことで、分散情報が不正な値になることを防止する。
ここでは、複数の更新モジュールから変形情報を追加する更新モジュールへ送信し、追加する更新モジュールの分散情報を生成することで、追加する更新モジュールに変形情報を送信する更新モジュールが不正な動作を行い、「新しい秘密鍵」が正しく生成できないように、不正な変形情報を送信するような行為を防止している。また、分散情報を正しく更新しなかったりするような行為を防止する。また、各更新モジュールは分散情報が正しく更新されたかを、同じ分散情報を共通に持っている更新モジュール同士で確認することで、不正な更新モジュールによる不正な更新を防止している。
また、追加する更新モジュールへ変形情報を送信した更新モジュールが、追加する更新モジュールの分散情報を共通に持つ構成の場合、元々保持していた分散情報と追加する更新モジュールの分散情報と追加する更新モジュールへ送信した変形情報から、本来保持していない分散情報を計算することが可能になる。そのため、更新モジュールの追加処理の最後に、変形情報を送信した更新モジュールの所有する分散情報から上記とは異なる値の変形情報を切り出し、その変形情報を分割して各更新モジュールへ送信することで、分散情報の値を更新する処理が必要になる。より詳細な説明は後述する。
なお、追加対象となる更新モジュールを更新モジュール127Aとし、変形情報の生成を更新モジュール121A、及び126Aが行うものとして、以下説明する。
更新モジュール121A、及び126Aが、変形情報を生成し、各更新モジュールへ配布する配布処理を行う(ステップS7000)。
追加対象の更新モジュール127A及び、更新モジュール127Aと同一の分散情報を保持する更新モジュール121A、及び126Aとが分散情報を生成する分散情報の生成処理を行う(ステップS7050)。
更新モジュール127Aが、第1及び第2他モジュール分散情報を格納する他モジュール分散情報の格納処理を行う(ステップS7100)。
更新モジュール121A、122A、125A〜127Aは、更新が正常に行われたか否かを判断する(ステップS7150)。更新モジュール121A、122A、125A及び126Aは、検証結果を更新モジュール127Aへ通知し、更新モジュール127Aは、検証結果を一時的に保持する。
更新対象の全ての更新モジュールにおいて正常に更新がされたと判断する場合には(ステップS7150における「YES」)、更新モジュール127Aの分散情報更新部260_7は、更新モジュール121A及び126Aから証明書を収集する(ステップS7200)。
分散情報更新部260_7は、更新モジュール121A及び126Aから収集した証明書が正当であるか否かを判断する(ステップS7250)。具体的には、分散情報更新部260_7は、収集した2つの証明書が同一であるか否かを判断する。
同一であると判断する場合には(ステップS7250における「YES」)、分散情報更新部260_7は、証明書を認証子格納部253_7へ格納する(ステップS7300)。分散情報更新部260_7は、証明書の格納後、追加時の第1分割処理の開始を示す旨の指示を更新モジュール121Aへ出力する。
次に、更新モジュール121Aが、自身が保持する分散情報から7つの部分情報を生成し、生成した各部分情報を各更新モジュールへ配布する追加時の第1分割処理を行う(ステップS7350)。
更新モジュール121A〜127Aは、配布された部分情報を用いて分散情報を更新する追加時の第1更新処理を行う(ステップS7400)。
更新モジュール121A〜127Aは、更新が正常に行われたか否かを判断する(ステップS7450)。このとき、更新モジュール122A〜127Aは、判断結果を部分情報送信元である更新モジュール121Aへ通知する。具体的には、分散情報を共通に持っている更新モジュール同士で、分散情報検証部262_j及び他モジュール分散情報検証部263_jを用いて、互いに持っている分散情報が同じ値に更新されたかを、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と各自が保持していた分散情報が同じ値かどうかを検証する。更新モジュール122A〜127Aは、検証結果を更新モジュール121Aへ通知し、更新モジュール121Aは、検証結果を一時的に保持する。
全ての更新モジュールにて更新が正常に行われた場合には(ステップS7450における「YES」)、更新モジュール121Aは、更新モジュール126Aへ追加時の第2分割処理を行う旨の分割指示を送信する。更新モジュール126Aは分割指示を受け取ると、自身が保持する分散情報から7つの部分情報を生成し、生成した各部分情報を各更新モジュールへ配布する追加時の第2分割処理を行う(ステップS7500)。
更新モジュール121A〜127Aは、配布された部分情報を用いて分散情報を更新する追加時の第2更新処理を行う(ステップS7550)。
更新モジュール121A〜127Aは、更新が正常に行われたか否かを判断する(ステップS7600)。更新モジュール121A〜125A及び127Aは、検証結果を更新モジュール126Aへ通知し、更新モジュール126Aは、検証結果を一時的に保持する。
全ての更新モジュールにて更新が正常に行われた場合には(ステップS7600における「YES」)、更新モジュール126Aは、配布先リストT100を更新する。更新モジュール126Aは、更新後の配布先リストをリスト格納部254_6へ格納するとともに、更新モジュール121A〜125A、127A及び保護制御モジュールへ送信する。更新モジュール121A〜125A、127A及び保護制御モジュールは、現在格納している配布先リストから更新後の配布先リストへと更新する(ステップS7650)。
更新対象の更新モジュールにて更新が正常に行われていないと判断する場合には(ステップS7150における「NO」)、及び証明書が正当でないと判断する場合には(ステップS7250における「NO」)、更新モジュール127Aは、更新対象の各更新モジュール121A、122A、125A及び126Aへその旨を通知する。更新対象の各更新モジュールは、追加理を中止し、自モジュールの分散情報の値を追加処理の前に戻し、処理を終了する。
全てのモジュールにて更新が正常に行われていない場合には(ステップS7450における「NO」)、更新モジュール121Aは、更新モジュール122A〜127Aへその旨を通知する。更新モジュール121A〜127Aは、追加処理を中止し、自モジュールの分散情報の値を追加処理の前に戻し、処理を終了する。
また、ステップS7600における「NO」の場合も同様に、更新モジュール121A〜127Aは、脱退処理を中止し、自モジュールの分散情報の値を脱退処理の前に戻し、処理を終了する。
なお、セキュリティの確保された通信路で分散情報を送りあい、受信した分散情報と同じ値かどうかを検証するとしたが、これに限定するものではなく、ゼロ知識証明などの暗号プロトコルを使用して検証してもよい。ゼロ知識証明については、非特許文献1の132〜150ページに、暗号プロトコルについては、非特許文献1の224〜225ページに詳しく説明されている。
以下、追加処理の詳細について説明する。
(配布処理)
ここでは、図37のステップS7000にて示す部分情報の生成処理について、図38にて示す流れ図を用いて説明する。
更新モジュール126Aの変形情報生成部265_6は、外部装置から追加時の分散情報生成指示を受け取ると、変形情報nを生成する(ステップS8000)。
更新モジュール121Aの変形情報生成部265_1は、外部装置から追加時の分散情報生成指示を受け取ると、変形情報mを生成する(ステップS8050)。
変形情報生成部265_6は、生成した変形情報nを更新モジュール121A、125及び127へ出力する(ステップS8100)。
変形情報生成部265_1は、生成した変形情報mを更新モジュール122A、126A、及び127Aへ出力する(ステップS8150)。
更新モジュール126Aの分散情報更新部260_6は、変形情報mを受け取ると、受け取った変形情報mを一時的に格納する(ステップS8200)。
更新モジュール121Aの分散情報更新部260_1は、変形情報nを受け取ると、受け取った変形情報nを一時的に格納する(ステップS8250)。
分散情報更新部260_6は、生成した変形情報nを用いて、新たな分散情報“d_6’(=d_6−n)”を生成し、分散情報格納部251_6に格納されている分散情報“d_6“を“d_6’”へと更新する(ステップS8300)。
分散情報更新部260_1は、生成した変形情報mを用いて、新たな分散情報“d_1’(=d_1−m)”を生成し、分散情報格納部251_1に格納されている分散情報“d_1”を“d_1’”へと更新する(ステップS8350)。
更新モジュール125Aの分散情報更新部260_5は、変形情報nを受け取ると、受け取った変形情報nを用いて新たな第1他モジュール分散情報“d1_6’(=d1_6−n)”を生成し、他モジュール分散情報格納部252_5に格納されている第1他モジュール分散情報“d1_6”を“d1_6’”へと更新する(ステップS8400)。
更新モジュール127Aの分散情報更新部260_7は、変形情報n及びmを受け取ると、受け取った変形情報n及びmを一時的に格納する(ステップS8450)。
更新モジュール122Aの分散情報更新部260_2は、変形情報mを受け取ると、受け取った変形情報mを用いて新たな第2他モジュール分散情報“d2_1’(=d2_1−m)”を生成し、他モジュール分散情報格納部252_2に格納されている第2他モジュール分散情報“d2_1”を“d2_1’”へと更新する(ステップS8500)。
(分散情報の生成処理)
ここでは、図37のステップS705にて示す分散情報の生成処理について、図39にて示す流れ図を用いて説明する。
分散情報更新部260_6は、変形情報n及びmを用いて他モジュール分散情報“d1_7=(m+n)”を生成する(ステップS8600)。分散情報更新部260_6は、他モジュール分散情報格納部252_6に格納されている第1他モジュール分散情報“d1_1”を“d1_7”へと更新(置換)する(ステップS8650)。
分散情報更新部260_7は、変形情報n及びmを用いて分散情報“d_7=(m+n)”を生成する(ステップS8700)。分散情報更新部260_7は、分散情報格納部251_7に生成した分散情報“d_7”を格納する(ステップS8750)。
分散情報更新部260_1は、変形情報n及びmを用いて他モジュール分散情報“d2_7=(m+n)”を生成する(ステップS8800)。分散情報更新部260_1は、他モジュール分散情報格納部252_1に格納されている第2他モジュール分散情報“d2_1”を“d2_7”へと更新(置換)する(ステップS8850)。
(他モジュール分散情報の格納処理)
ここでは、図37のステップS7100にて示す他モジュール分散情報の格納処理について、図40にて示す流れ図を用いて説明する。
更新モジュール127Aの分散情報更新部260_7は、更新モジュール121Aへ分散情報要求指示を、更新モジュール122Aへ第2他モジュール分散情報要求指示を、それぞれ出力し、分散情報“d_1’”及び“d2_1’”を収集する(ステップS9000)。このとき、分散情報要求指示を受け付けた更新モジュール121Aの取得部267_1は、分散情報“d_1’”を取得して、更新モジュール127Aへ出力する(ステップS9010)。また、第2他モジュール分散情報要求指示を受け付けた更新モジュール122Aの取得部267_2は、分散情報“d2_1’”を取得して、更新モジュール127Aへ出力する(ステップS9020)。
分散情報更新部260_7は、収集した分散情報“d_1’”と“d2_1’”とが同一の値であるか否かを判断する(ステップS9050)。
同一であると判断する場合には(ステップS9050における「YES」)、分散情報更新部260_7は、収集した分散情報“d_1’”を第1他モジュール分散情報として他モジュール分散情報格納部252_7へ格納する(ステップS9100)。
分散情報更新部260_7は、更新モジュール126Aへ分散情報要求指示を、更新モジュール125Aへ第1他モジュール分散情報要求指示を、それぞれ出力し、分散情報“d_6’”及び“d1_6’”を収集する(ステップS9150)。このとき、分散情報要求指示を受け付けた更新モジュール126Aの取得部267_6は、分散情報“d_6’”を取得して、更新モジュール127Aへ出力する(ステップS9160)。また、第1他モジュール分散情報要求指示を受け付けた更新モジュール125Aの取得部267_5は、分散情報“d1_6’”を取得して、更新モジュール127Aへ出力する(ステップS9170)。
分散情報更新部260_7は、収集した分散情報“d_6’”と“d1_6’”とが同一の値であるか否かを判断する(ステップS9200)。
同一であると判断する場合には(ステップS9200における「YES」)、分散情報更新部260_7は、収集した分散情報“d_6’”を第2他モジュール分散情報として他モジュール分散情報格納部252_7へ格納する(ステップS9250)。
同一でないと判断する場合には(ステップS9050若しくはステップS9200における「NO」)、更新モジュール127Aは、更新モジュール121A〜126Aへその旨を通知する。更新モジュール121A〜127Aは、追加処理を中止し、自モジュールの分散情報の値を追加処理の前に戻し、処理を終了する。
(追加時の第1分割処理)
ここでは、図37のステップS7350にて示す追加時の第1分割処理について、図41にて示す流れ図を用いて説明する。
更新モジュール121Aの分散情報分割部261_1は、分散情報“d_1’”から7つの部分情報(d_1_1〜d_1_7)を生成する(ステップS9500)。言い換えると、分散情報分割部261_1は、分散情報“d_1’”を、7つの部分情報(d_1_1〜d_1_7)に分散(分解)する。このとき、各部分情報は、次式を満たすものとする。
(式) d_1’= d_1_1+d_1_2+d_1_3+d_1_4+d_1_5+d_1_6+d_1_7 mod L
具体的には、分散情報分割部261_1は、乱数生成器を用いて、6個の乱数を生成することにより、部分情報(d_1_1〜d_1_6)を生成する。次に、分散情報分割部261_1は、
d_1_7 = d_1’ − (d_1_1+d_1_2+・・・+d_1_6)
により、d_1_7を算出する。このとき、減算結果が負の数になる事もあるが、そのまま部分情報として扱う。
分散情報分割部261_1は、生成(分散)した3個若しくは6個の部分情報を各モジュール122A〜127Aへ配布する(ステップS9550)。
具体的には、分散情報分割部261_1は、更新モジュール122A及び127に対して生成した部分情報d_1_2〜d_1_7を配布する(ステップS9560及びS9610)。他のモジュール123A〜126Aにおけるi番目のモジュールに対しては、部分情報d_1_(i−1)、d_1_i及びd_1_(i+1)を配布する(ステップS9570、S9580、S9590及びS9600)。
更新モジュール122A〜127Aは、受信した各部分情報を分散情報更新部260_jに一時的に格納する。
(追加時の第1更新処理)
ここでは、図37のステップS7400にて示す追加時の第1更新処理について、図42から図44にて示す流れ図を用いて説明する。
更新モジュール121Aの分散情報更新部260_1は、生成した部分情報“d_1_1”を新たな分散情報“D_1(=d_1_1)”として、分散情報格納部251_1に格納されている分散情報“d_1’”を新たな分散情報“D_1”に更新する(ステップS9700)。分散情報更新部260_1は、生成した部分情報“d_1_2”及び“d_1_7”を用いて新たな第1及び第2他モジュール分散情報“D1_2(=d1_2+d_1_2)”及び“D2_7(=d2_7+d_1_7)”を生成し、分散情報格納部251_1に格納されている第1及び第2他モジュール分散情報“d1_2”及び“d2_7’”を新たな第1及び第2他モジュール分散情報“D1_2”及び“D2_7”に更新する(ステップS9750)。
更新モジュール122Aの分散情報更新部260_2は、更新モジュール121Aから受け取った部分情報“d_1_2”を用いて新たな分散情報“D_2(=d_2+d_1_2)”を生成し、分散情報格納部251_2に格納されている分散情報“d_2”を新たな分散情報“D_2”に更新する(ステップS9800)。分散情報更新部260_2は、更新モジュール121Aから受け取った部分情報“d_1_2”〜“d_1_7”を用いて新たな第1及び第2他モジュール分散情報“D1_3(=d1_3+d_1_3)”及び“D2_1(=d2_1’−(d_1_2+d_1_3+・・・+d_1_7))”を生成し、分散情報格納部251_2に格納されている第1及び第2他モジュール分散情報“d1_3”及び“d2_1’”を新たな第1及び第2他モジュール分散情報“D1_3”及び“D2_1”に更新する(ステップS9850)。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。
更新モジュール123Aの分散情報更新部260_3は、更新モジュール121Aから受け取った部分情報“d_1_3”を用いて新たな分散情報“D_3(=d_3+d_1_3)”を生成し、分散情報格納部251_3に格納されている分散情報“d_3”を新たな分散情報“D_3”に更新する(ステップS9900)。分散情報更新部260_3は、更新モジュール121Aから受け取った部分情報“d_1_4”及び“d_1_2”を用いて新たな第1及び第2他モジュール分散情報“D1_4(=d1_4+d_1_4)”及び“D2_2(=d2_2+d_1_2)”を生成し、分散情報格納部251_3に格納されている第1及び第2他モジュール分散情報“d1_4”及び“d2_2”を新たな第1及び第2他モジュール分散情報“D1_4”及び“D2_2”に更新する(ステップS9950)。
更新モジュール124Aの分散情報更新部260_4は、更新モジュール121Aから受け取った部分情報“d_1_4”を用いて新たな分散情報“D_4(=d_4+d_1_4)”を生成し、分散情報格納部251_4に格納されている分散情報“d_4”を新たな分散情報“D_4”に更新する(ステップS10000)。分散情報更新部260_4は、更新モジュール121Aから受け取った部分情報“d_1_5”及び“d_1_3”を用いて新たな第1及び第2他モジュール分散情報“D1_5(=d1_5+d_1_5)”及び“D2_3(=d2_3+d_1_3)”を生成し、分散情報格納部251_4に格納されている第1及び第2他モジュール分散情報“d1_5”及び“d2_3”を新たな第1及び第2他モジュール分散情報“D1_5”及び“D2_3”に更新する(ステップS10050)。
更新モジュール125Aの分散情報更新部260_5は、更新モジュール121Aから受け取った部分情報“d_1_5”を用いて新たな分散情報“D_5(=d_5+d_1_5)”を生成し、分散情報格納部251_5に格納されている分散情報“d_5”を新たな分散情報“D_5”に更新する(ステップS1010)。分散情報更新部260_5は、更新モジュール121Aから受け取った部分情報“d_1_6”及び“d_1_4”を用いて新たな第1及び第2他モジュール分散情報“D1_6(=d1_6+d_1_6)”及び“D2_4(=d2_4+d_1_4)”を生成し、分散情報格納部251_5に格納されている第1及び第2他モジュール分散情報“d1_6”及び“d2_4”を新たな第1及び第2他モジュール分散情報“D1_6”及び“D2_4”に更新する(ステップS10150)。
更新モジュール126Aの分散情報更新部260_6は、更新モジュール121Aから受け取った部分情報“d_1_6”を用いて新たな分散情報“D_6(=d_6’+d_1_6)”を生成し、分散情報格納部251_6に格納されている分散情報“d_6’”を新たな分散情報“D_6”に更新する(ステップS10200)。分散情報更新部260_6は、更新モジュール121Aから受け取った部分情報“d_1_7”及び“d_1_5”を用いて新たな第1及び第2他モジュール分散情報“D1_7(=d1_7+d_1_7)”及び“D2_5(=d2_5+d_1_5)”を生成し、分散情報格納部251_6に格納されている第1及び第2他モジュール分散情報“d1_7”及び“d2_5”を新たな第1及び第2他モジュール分散情報“D1_7”及び“D2_5”に更新する(ステップS10250)。
更新モジュール127Aの分散情報更新部260_7は、更新モジュール121Aから受け取った部分情報“d_1_7”を用いて新たな分散情報“D_7(=d_7+d_1_7)”を生成し、分散情報格納部251_7に格納されている分散情報“d_7”を新たな分散情報“D_7”に更新する(ステップS10300)。分散情報更新部260_7は、更新モジュール121Aから受け取った部分情報“d_1_2”〜“d_1_7”を用いて新たな第1及び第2他モジュール分散情報“D1_1(=d1_1’−(d_1_2+d_1_3+・・・+d_1_7))”及び“D2_6(=d2_6’+d_1_6)”を生成し、分散情報格納部251_7に格納されている第1及び第2他モジュール分散情報“d1_1’”及び“d2_6’”を新たな第1及び第2他モジュール分散情報“D1_1”及び“D2_6”に更新する(ステップS10350)。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。
(追加時の第2分割処理)
ここでは、図37のステップS750にて示す追加時の第2分割処理について、図45にて示す流れ図を用いて説明する。
更新モジュール126Aの分散情報分割部261_6は、分散情報“D_6”から7つの部分情報(d_6_1〜d_6_7)を生成する(ステップS1050)。言い換えると、分散情報分割部261_6は、分散情報“D_6”を、7つの部分情報(d_6_1〜d_6_7)に分散(分解)する。このとき、各部分情報は、次式を満たすものとする。
(式) D_6= d_6_1+d_6_2+d_6_3+d_6_4+d_6_5+d_6_6+d_6_7 mod L
具体的には、分散情報分割部261_6は、乱数生成器を用いて、6個の乱数を生成することにより、部分情報(d_6_1〜d_6_6)を生成する。次に、分散情報分割部261_6は、
d_6_7 = D_6 − (d_6_1+d_6_2+・・・+d_6_6)
により、d_6_7を算出する。このとき、減算結果が負の数になる事もあるが、そのまま部分情報として扱う。
分散情報分割部261_6は、生成(分散)した3個若しくは6個分散情報を各更新モジュール121A〜125A及び127Aへ配布する(ステップS10550)。
更新モジュール125A及び127Aに対して生成した部分情報d_6_1〜d_6_5及びd_6_7を配布する(ステップS10600及びS10610)。他のモジュール121A〜124Aにおけるi番目のモジュールに対しては、部分情報d_6_(i−1)、d_6_i及びd_6_(i+1)を配布する(ステップS10560、S10570、S10580及びS10590)。なお、i−1=0の場合には、部分情報d_6_7を配布する。
更新モジュール121A〜125A及び127Aは、受信した各部分情報を分散情報更新部260_jに一時的に格納する。
(追加時の第2更新処理)
ここでは、図37のステップS7550にて示す追加時の第2更新処理について、図46から図48にて示す流れ図を用いて説明する。
更新モジュール121Aの分散情報更新部260_1は、更新モジュール126Aから受け取った部分情報“d_6_1”を用いて、新たな分散情報“D_1’(=D_1+d_6_1)”を生成し、分散情報格納部251_1に格納されている分散情報“D_1”を新たな分散情報“D_1’”に更新する(ステップS10700)。分散情報更新部260_1は、更新モジュール126Aから受け取った部分情報“d_6_2”及び“d_6_7”を用いて新たな第1及び第2他モジュール分散情報“D1_2’(=D1_2+d_6_2)”及び“D2_7’(=D2_7+d_6_7)”を生成し、分散情報格納部251_1に格納されている第1及び第2他モジュール分散情報“D1_2”及び“D2_7’”を新たな第1及び第2他モジュール分散情報“D1_2’”及び“D2_7’”に更新する(ステップS10750)。
更新モジュール122Aの分散情報更新部260_2は、更新モジュール126Aから受け取った部分情報“d_6_2”を用いて新たな分散情報“D_2’(=D_2+d_6_2)”を生成し、分散情報格納部251_2に格納されている分散情報“D_2”を新たな分散情報“D_2’”に更新する(ステップS10800)。分散情報更新部260_2は、更新モジュール126Aから受け取った部分情報“d_6_3”及び“d_6_1”を用いて新たな第1及び第2他モジュール分散情報“D1_3’(=D1_3+d_6_3)”及び“D2_1’(=D2_1+d_6_1)”を生成し、分散情報格納部251_2に格納されている第1及び第2他モジュール分散情報“D1_3”及び“D2_1”を新たな第1及び第2他モジュール分散情報“D1_3’”及び“D2_1’”に更新する(ステップS10850)。
更新モジュール123Aの分散情報更新部260_3は、更新モジュール126Aから受け取った部分情報“d_6_3”を用いて新たな分散情報“D_3’(=D_3+d_6_3)”を生成し、分散情報格納部251_3に格納されている分散情報“D_3”を新たな分散情報“D_3’”に更新する(ステップS1090)。分散情報更新部260_3は、更新モジュール126Aから受け取った部分情報“d_6_4”及び“d_6_2”を用いて新たな第1及び第2他モジュール分散情報“D1_4’(=D1_4+d_6_4)”及び“D2_2’(=D2_2+d_6_2)”を生成し、分散情報格納部251_3に格納されている第1及び第2他モジュール分散情報“D1_4”及び“D2_2”を新たな第1及び第2他モジュール分散情報“D1_4’”及び“D2_2’”に更新する(ステップS10950)。
更新モジュール124Aの分散情報更新部260_4は、更新モジュール121Aから受け取った部分情報“d_6_4”を用いて新たな分散情報“D_4’(=D_4+d_6_4)”を生成し、分散情報格納部251_4に格納されている分散情報“D_4”を新たな分散情報“D_4’”に更新する(ステップS11000)。分散情報更新部260_4は、更新モジュール126Aから受け取った部分情報“d_6_5”及び“d_6_3”を用いて新たな第1及び第2他モジュール分散情報“D1_5’(=D1_5+d_6_5)”及び“D2_3’(=D2_3+d_6_3)”を生成し、分散情報格納部251_4に格納されている第1及び第2他モジュール分散情報“D1_5”及び“D2_3”を新たな第1及び第2他モジュール分散情報“D1_5’”及び“D2_3’”に更新する(ステップS11050)。
更新モジュール125Aの分散情報更新部260_5は、更新モジュール126Aから受け取った部分情報“d_6_5”を用いて新たな分散情報“D_5’(=D_5+d_6_5)”を生成し、分散情報格納部251_5に格納されている分散情報“D_5”を新たな分散情報“D_5’”に更新する(ステップS11100)。分散情報更新部260_5は、更新モジュール126Aから受け取った部分情報“d_6_1”〜“d_6_5”及び“d_6_7”を用いて新たな第1及び第2他モジュール分散情報“D1_6’(=D1_6−(d_6_1+d_6_2+・・・+d_6_5+d_6_7)”及び“D2_4’(=D2_4+d_6_4)”を生成し、分散情報格納部251_5に格納されている第1及び第2他モジュール分散情報“D1_6”及び“D2_4”を新たな第1及び第2他モジュール分散情報“D1_6’”及び“D2_4’”に更新する(ステップS11150)。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。
更新モジュール126Aの分散情報更新部260_6は、生成した部分情報“d_1_6”を新たな分散情報“D_6’(=d_6_6)”として、分散情報格納部251_6に格納されている分散情報“D_6”を新たな分散情報“D_6’”に更新する(ステップS11200)。分散情報更新部260_6は、生成した部分情報“d_6_7”及び“d_6_5”を用いて新たな第1及び第2他モジュール分散情報“D1_7’(=D1_7+d_6_7)”及び“D2_5’(=D2_5+d_6_5)”を生成し、分散情報格納部251_6に格納されている第1及び第2他モジュール分散情報“D1_7”及び“D2_5”を新たな第1及び第2他モジュール分散情報“D1_7’”及び“D2_5’”に更新する(ステップS11250)。
更新モジュール127Aの分散情報更新部260_7は、更新モジュール126Aから受け取った部分情報“d_6_7”を用いて新たな分散情報“D_7’(=D_7+d_6_7)”を生成し、分散情報格納部251_7に格納されている分散情報“D_7”を新たな分散情報“D_7’”に更新する(ステップS11300)。分散情報更新部260_7は、更新モジュール126Aから受け取った部分情報“d_6_1”〜“d_1_5”及び“d_1_7”を用いて新たな第1及び第2他モジュール分散情報“D1_1’(=D1_1+d_6_1)”及び“D2_6’(=D2_6−(d_6_1+d_6_2+・・・+d_6_5+d_6_7))”を生成し、分散情報格納部251_7に格納されている第1及び第2他モジュール分散情報“D1_1”及び“D2_6”を新たな第1及び第2他モジュール分散情報“D1_1’”及び“D2_6’”に更新する(ステップS11350)。このとき、減算結果が負の数になる事もあるが、そのまま新たな分散情報として扱う。
(具体例)
追加処理後の更新モジュール121A〜127Aのそれぞれが保持する分散情報、第1及び第2他モジュール分散情報を、図49にて示す。
例えば、更新モジュール121Aは、追加処理後において、更新後の分散情報“D_1’”211c、第1他モジュール分散情報“D1_2’”212_1c及び第2他モジュール分散情報“D2_7’”217_1cを保持している。
ここで、更新後の各分散情報“D_1’”〜“D_7’”により、秘密鍵“d”が回復されることを以下に示す。
D_1’+D_2’+D_3’+D_4’+D_5’+D_6’+D_7’
= (D_1+d_6_1)+(D_2+d_6_2)+(D_3+d_6_3)+(D_4+d_6_4)+(D_5+d_6_5)+(d_6_6)+(D_7+d_6_7)
= D_1+D_2+D_3+D_4+D_5+D_7+d_6_1+d_6_2+d_6_3+d_6_4+d_6_5+d_6_6+d_6_7
= D_1+D_2+D_3+D_4+D_5+D_6+D_7
= (d_1_1)+(d_2+d_1_2)+(d_3+d_1_3)+(d_4+d_1_4)+(d_5+d_1_5)+(d_6’+d_1_6)+(d_7+d_1_7)
= d_2+d_3+d_4+d_5+d_6’+d_7+d_1_1+d_1_2+d_1_3+d_1_4+d_1_5+d_1_6+d_1_7
= d_1’+d_2+d_3+d_4+d_5+d_6’+d_7
= (d_1−m)+d_2+d_3+d_4+d_5+(d_6−n)+m+n
= d_1+d_2+d_3+d_4+d_5+d_6+d_7
= d
このように、更新モジュール127Aの追加後も、それぞれの更新モジュールが保持する分散情報の総和を一定とすることが可能となるため、追加処理時において、ソフトウェア更新システムは、新しい秘密鍵“d”を復元し分散情報を再生成することなく、更新モジュールを追加させることが可能となる。
(追加処理時の第1及び第2更新処理の必要性)
追加時における第1及び第2更新処理は、更新モジュール121Aと126Aが分散情報を持ちすぎるために必要になる処理である。
具体的には、更新モジュール121Aは、追加処理のステップS7300の終了後には、分散情報“d_1’”と他モジュール分散情報“d1_2”及びと“d2_7”の3つの分散情報を保持することになる。この時、他モジュール分散情報“d2_7”は、更新モジュール121Aが生成した変形情報mと更新モジュール126Aが生成した変形情報nの和になっている。そのため、他モジュール分散情報“d2_7”と更新モジュール121Aが生成した変形情報mから更新モジュール126Aが送信した変形情報nを求めることが出来る。さらに、追加処理前には更新前の他モジュール分散情報“d2_6”も保持していたため、この更新前の他モジュール分散情報“d2_6”と更新モジュール126Aが生成した変形情報nとから、更新後の分散情報“d2_6’(=d_6’)”の値を求めることが出来る。この様に更新モジュール121Aは、本来は3つの分散情報しか保持しないはずが4つの分散情報を保持することが可能となり、分散情報を持ちすぎることになる。同様の事が更新モジュール126Aにも言えるため、更新モジュールの追加処理の最後に、このような分散情報の持ちすぎを解消するために、更新モジュール121Aと126Aが所有する分散情報の更新を行う必要がある。
なお、追加される更新モジュールの所有する分散情報を生成するために2つの更新モジュールが変形情報を生成、送信する構成としたが、これに限定するものではなく、例えば追加される更新モジュール以外のすべての更新モジュールが変形情報を送信する構成にしてもよい。
(49)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
また、本発明に係るソフトウェア更新装置は、その範囲を逸脱することなく本発明の趣旨に沿って様々な変形または修正が可能であることは言うまでもない。