(57)【特許請求の範囲】
【請求項１】
ソフトウェアを更新する更新データが複数に分割された各分割更新データを順に取得するデータ取得部と、
前記データ取得部が取得した分割更新データに対して検証処理を実行する検証部と、
前記検証部が実行した検証処理中に得られる中間値を記憶する中間値記憶部と、
全ての分割更新データに対して前記検証処理が済み、前記更新データの検証が成功した場合、再び前記各分割更新データを順に取得するデータ再取得部と、
前記データ再取得部が取得した分割更新データに対して前記検証処理を実行する再検証部と、
前記再検証部が実行した検証処理中に得られる中間値と、前記中間値記憶部が記憶した中間値とが一致する場合、前記データ再取得部が取得した前記分割更新データによりソフトウェアを更新する更新部と
を備えることを特徴とするソフトウェア更新装置。
【請求項２】
前記検証部は、全ての分割更新データに対して検証処理を実行して計算された値と、検証データとを比較して、一致しているか否かを判定することにより、前記更新データの検証が成功したか否かを判定し、
前記データ再取得部は、前記更新データの検証が成功したと前記検証部が判定した場合に、再び前記各分割更新データを順に取得する
ことを特徴とする請求項１に記載のソフトウェア更新装置。
【請求項３】
前記ソフトウェアは、第１記憶装置に記憶されており、
前記データ取得部及び前記データ再取得部は、取得した前記分割更新データを第２記憶装置に記憶し、
前記検証部及び前記再検証部は、前記第２記憶装置に記憶された前記分割更新データに対して前記検証処理を実行する
ことを特徴とする請求項１又は２に記載のソフトウェア更新装置。
【請求項４】
前記中間値記憶部は、前記中間値を前記第２記憶装置に記憶する
ことを特徴とする請求項３に記載のソフトウェア更新装置。
【請求項５】
ソフトウェアを更新する更新データが複数に分割された各分割更新データを順に取得するデータ取得処理と、
前記データ取得処理で取得した分割更新データに対して検証処理を実行する検証処理と、
前記検証処理で実行した検証処理中に得られる中間値を記憶する中間値記憶処理と、
前記各分割更新データに対して前記検証処理が済み、前記更新データの検証が成功した場合、再び前記各分割更新データを順に取得するデータ再取得処理と、
前記データ再取得処理で取得した分割更新データに対して前記検証処理を実行する再検証処理と、
前記再検証処理で実行した検証処理中に得られる中間値と、前記中間値記憶処理で記憶した中間値とが一致する場合、前記データ再取得処理で取得した前記分割更新データによりソフトウェアを更新する更新処理と
をコンピュータに実行させることを特徴とするソフトウェア更新プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、更新データによりファームウェア等のソフトウェアを安全に更新する技術に関する。
【背景技術】
【０００２】
組込機器の動作を規定するソフトウェアをファームウェアと呼ぶ。
ファームウェアを更新すれば、欠陥の修正や機能追加を、製品出荷後に実現できる。その際、更新がエンドユーザによって実行できれば、製品回収が不要である。そのため、一般的に、エンドユーザによるファームウェアの更新機能が組込機器に実装されている。【０００３】
エンドユーザによるファームウェアの更新の一般的な手順は以下の（１）から（３）のようになる。（１）エンドユーザが製造業者のウェブサイトから更新データを取得する。（２）更新データを有線通信や記録媒体を介して対象の組込機器へ入力する。（３）組込機器が、更新データを元にファームウェアを書き換える。【０００４】
ファームウェアの更新機能を組込機器に実装した場合、例えば、悪意あるエンドユーザが、当該組込機器の改造を目的として、改変した更新データを対象の組込機器へ入力することが考えられる。このような改造が実現してしまった場合、当該組込機器が備えるセキュリティ機能を迂回されてしまう可能性がある。その結果、当該組込機器製造業者は、違法コピーや模倣品製造といった被害を受ける可能性がある。【０００５】
そのため、ファームウェアの更新が可能な組込機器において、ファームウェアを任意に改変することを阻止する技術が必要とされている。
非特許文献１には、暗号技術を利用して、ファームウェアを任意に改変することを阻止する技術について記載されている。非特許文献１では、ディジタル署名やメッセージ認証コードによるメッセージへの改ざん検出を、ファームウェアの保護に応用している。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】ＲＦＣ４１０８  ，  “Ｕｓｉｎｇ  Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｍｅｓｓａｇｅ  Ｓｙｎｔａｘ  （ＣＭＳ）  ｔｏ  Ｐｒｏｔｅｃｔ  Ｆｉｒｍｗａｒｅ  Ｐａｃｋａｇｅｓ”，  ｈｔｔｐ：／／ｔｏｏｌｓ．ｉｅｔｆ．ｏｒｇ／ｈｔｍｌ／ｒｆｃ４１０８
【非特許文献２】Ｅ．  Ｆｌｅｉｓｃｈｍａｎｎ，  Ｃ．  Ｆｏｒｌｅｒ，  Ｓ．  Ｌｕｃｋｓ，  ａｎｄ  Ｊ．  Ｗｅｎｚｅｌ，  “ＭｃＯＥ：  Ａ  Ｆａｍｉｌｙ  ｏｆ  Ａｌｍｏｓｔ  Ｆｏｏｌｐｒｏｏｆ  Ｏｎ−Ｌｉｎｅ  Ａｕｔｈｅｎｔｉｃａｔｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｃｈｅｍｅｓ”，  Ｃｒｙｐｔｏｌｏｇｙ  ｅＰｒｉｎｔ  Ａｒｃｈｉｖｅ：  Ｒｅｐｏｒｔ  ２０１１／６４４
【非特許文献３】Ａ．  Ｊ．  Ｍｅｎｅｚｅｓ，  Ｐ．  Ｃ．  ｖａｎ  Ｏｏｒｓｃｈｏｔ，  ａｎｄ  Ｓ．  Ａ．  Ｖａｎｓｔｏｎｅ，  “Ｈａｎｄｂｏｏｋ  ｏｆ  Ａｐｐｌｉｅｄ  Ｃｒｙｐｔｏｇｒａｐｈｙ”，  ２００１．
【非特許文献４】Ｇ．  Ｂｅｒｔｏｎｉ，  Ｊ．  Ｄａｅｍｅｎ，  Ｍ．  Ｐｅｅｔｅｒｓ，  ａｎｄ  Ｇ．  Ｖａｎ  Ａｓｓｃｈｅ，  “Ｏｎ  ｔｈｅ  Ｉｎｄｉｆｆｅｒｅｎｔｉａｂｉｌｉｔｙ  ｏｆ  ｔｈｅ  Ｓｐｏｎｇｅ  Ｃｏｎｓｔｒｕｃｔｉｏｎ”，  Ｅｕｒｏｃｒｙｐｔ  ２００８．
【非特許文献５】ＮＩＳＴ，  “Ｒｅｃｏｍｍｅｎｄａｔｉｏｎ  ｆｏｒ  Ｂｌｏｃｋ  Ｃｉｐｈｅｒ  Ｍｏｄｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ：  Ｇａｌｏｉｓ／Ｃｏｕｎｔｅｒ  Ｍｏｄｅ  （ＧＣＭ）  ｆｏｒ  Ｃｏｎｆｉｄｅｎｔｉａｌｉｔｙ  ａｎｄ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ，”  Ｄｒａｆｔ  Ｓｐｅｃｉａｌ  Ｐｕｂｌｉｃａｔｉｏｎ  ８００−３８Ｄ，  Ａｐｒ．  ２００６．
【発明の概要】
【発明が解決しようとする課題】
【０００７】
非特許文献１に記載されたように、改ざん検出技術をファームウェアの保護に応用する場合、ファームウェアを更新する組込機器において、改ざん検出を行う検証処理を行う必要がある。
この検証処理を安全に実現するためには、作業領域となる揮発メモリが十分に大きい必要がある。高性能なＣＰＵを有する機器であれば、この要件は満たされていることが一般的である。しかし、比較的性能の低い組込機器では、この要件は満たされていない場合がある。特に、フラッシュＲＯＭを内蔵したＣＰＵ（ワンチップマイコン）では、不揮発メモリの容量よりも揮発メモリの容量が小さいことが一般的であり、この要件は満たされていない場合が多い。
この発明は、作業領域となる揮発メモリが十分に大きくない場合において、安全にファームウェア等のソフトウェアの更新を可能とすることを目的とする。
【課題を解決するための手段】
【０００８】
この発明に係るソフトウェア更新装置は、
ソフトウェアを更新する更新データが複数に分割された各分割更新データを順に取得するデータ取得部と、
前記データ取得部が取得した分割更新データに対して検証処理を実行する検証部と、
前記検証部が実行した検証処理中に得られる中間値を記憶する中間値記憶部と、
前記各分割更新データに対して前記検証処理が済み、前記更新データの検証が成功した場合、再び前記各分割更新データを順に取得するデータ再取得部と、
前記データ再取得部が取得した分割更新データに対して前記検証処理を実行する再検証部と、
前記再検証部が実行した検証処理中に得られる中間値と、前記中間値記憶部が記憶した中間値とが一致する場合、前記データ再取得部が取得した前記分割更新データによりソフトウェアを更新する更新部と
を備えることを特徴とする。
【発明の効果】
【０００９】
この発明に係るソフトウェア更新装置では、更新データに対して一度に検証処理を行うのではなく、更新データが複数に分割された分割更新データ毎に検証処理を行う。そのため、作業領域となる揮発メモリが小さくても、検証処理を行うことができる。
また、この発明に係るソフトウェア更新装置では、各分割更新データについて順に検証処理を行い、改ざんされていないことを確認するとともに、検証処理中に得られる中間値を記憶しておく。そして、改ざんされていないことが確認されると、再び各分割更新データについて順に検証処理を行い、得られた中間値と前に記憶した中間値とが同じであることを確認し、確認がとれた場合にソフトウェアを更新する。そのため、一旦検証処理が済んだ後に、改ざんした分割更新データによりソフトウェアを更新するといった不正も防ぐことができる。
【図面の簡単な説明】
【００１０】
【図１】組込機器１００のハードウェア構成図。
【図２】代替的な方法１の処理を示すフローチャート。
【図３】代替的な方法２の概略を示す図。
【図４】代替的な方法３の処理を示すフローチャート。
【図５】実施の形態１に係る方法の概略を示す図。
【図６】実施の形態１に係る組込機器１００の機能構成図。
【図７】実施の形態１に係る組込機器１００のファームウェア更新処理を示すフローチャート。
【図８】組込機器１００のハードウェア構成の他の例を示す図。
【図９】組込機器１００のハードウェア構成の他の例を示す図。
【図１０】組込機器１００のハードウェア構成の他の例を示す図。
【図１１】組込機器１００のハードウェア構成の他の例を示す図。
【図１２】中間値の例を示す図。
【図１３】中間値の例を示す図。
【図１４】中間値の例を示す図。
【発明を実施するための形態】
【００１１】
実施の形態１．
図１は、組込機器１００（ソフトウェア更新装置）のハードウェア構成図である。
組込機器１００は、ＣＰＵ１０１、記憶媒体１０２、揮発メモリ１０３、不揮発メモリ１０４を備える。
【００１２】
エンドユーザは、記憶媒体１０２を介して、アップデートファイル１０５（更新データ）を組込機器１００へ供給する。組込機器１００は、記憶媒体１０２に格納されたアップデートファイル１０５により、不揮発メモリ１０４内にあるファームウェア１０９を更新する。
改ざん検出技術をファームウェアの保護に応用する場合、エンドユーザは、アップデートファイル１０５とともに、アップデートファイル１０５の改ざんを検出するための検証データ１０６を組込機器１００へ供給する。
【００１３】
ファームウェア１０９の更新時にＣＰＵ１０１は次のような処理を行う。
まず、ＣＰＵ１０１は、処理Ａを実行して、記憶媒体１０２に存在するアップデートファイル１０５と検証データ１０６とを揮発メモリ１０３へコピーする。コピーしたデータを、アップデートファイル１０７、検証データ１０８と呼ぶことにする。
続いて、ＣＰＵ１０１は、処理Ｂを実行して、アップデートファイル１０７に対して検証処理を行い得られた検証用の値が、検証データ１０８と一致するものかどうか検証する。検証処理は暗号処理を用いて検証用の値を演算する処理である。
検証処理を行い得られた結果が検証データ１０８と一致しなければ、改ざんが検知されたと認識され、その時点で更新処理を中断して終了する。一方、検証結果が一致した場合は、ＣＰＵ１０１は、処理Ｃを実行して、揮発メモリ１０３にあるアップデートファイル１０７を、不揮発メモリ１０４へ書き込み、ファームウェア１０９を更新する。
【００１４】
更新時に以上の処理を行うことにより、改ざんされたアップデートファイル１０７により、不揮発メモリ１０４に記憶されたファームウェア１０９を更新することを防止できる。
【００１５】
以上の方法を実現するためには、アップデートファイル１０７と検証データ１０８とを記憶し、さらに検証処理を実行するだけの容量が揮発メモリ１０３に必要である。
【００１６】
揮発メモリ１０３に十分な容量がない場合の代替的な方法を３つ説明する。そして、３つの方法の課題を説明した上で、実施の形態１に係る方法について説明する。
【００１７】
（代替的な方法１）
代替的な方法１は、検証処理の完了を待たずに、アップデートファイル１０７で不揮発メモリ１０４に記憶されたファームウェア１０９を更新してしまい、検証処理で改ざんが発見された場合に、組込機器１００を動作不能にしてしまう方法である。組込機器１００を動作不能にした場合には、ファームウェア１０９の再更新が必要になる。
【００１８】
図２は、代替的な方法１の処理を示すフローチャートである。
代替的な方法１では、事前に、アップデートファイル１０７をセクション（分割更新データ）毎にｍ個に分割しておく。
そして、まず、ＣＰＵ１０１は、フラグを１（無効）に初期化する（Ｓ１１）。
続いて、Ｓ１２からＳ１４のループにおいて、ＣＰＵ１０１は、アップデートファイル１０７をセクション毎に揮発メモリ１０３に読み込み（Ｓ１２）、Ｓ１２で読み込んだセクションのデータに対して検証処理を行い（Ｓ１３）、Ｓ１２で読み込んだセクションのデータを不揮発メモリ１０４に転送する（Ｓ１４）。これにより、徐々にファームウェア１０９が更新される。
そして、全てのセクションについてのＳ１２からＳ１４の処理が完了して、検証用の値が計算されると、ＣＰＵ１０１は、検証データ１０８を読み込む。ＣＰＵ１０１は、検証処理で得られた検証用の値と、検証データ１０８とを比較して、検証成功か否かを判定する（Ｓ１５）。ＣＰＵ１０１は、検証成功であれば（Ｓ１５で成功）、フラグを０（成功）にした上で（Ｓ１６）、処理を終了する。一方、ＣＰＵ１０１は、検証失敗であれば（Ｓ１５で失敗）、そのまま処理を終了する。
【００１９】
組込機器１００は、起動時等に、フラグが０（成功）であるか否かを確認し、フラグが０（成功）でない場合には、起動を中止して、ファームウェア１０９の再更新を要求する等の応答を行う。
【００２０】
しかし、代替的な方法１では、検証失敗時には組込機器１００が動作不能になってしまう。そのため、一時的に組込機器１００が動作不能になっても構わない場合にしか採用できない。
また、ファームウェア１０９の実装方式によっては、起動時にフラグを確認する機能ごと上書きされ、フラグの確認が迂回されてしまう可能性がある。この場合には、ファームウェア１０９が不正に更新された状態で、組込機器１００が動作することになる。
また、検証処理の実装方式によっては、改変されたアップデートファイル１０７の暗号文に対する平文が不揮発メモリ１０４に書き込まれるため、その情報が検証処理に用いる暗号解読の足がかりにされる可能性がある（ｏｎｌｉｎｅ  ｄｅｃｒｙｐｔｉｏｎ  ｍｉｓｕｓｅ，非特許文献２参照）。
【００２１】
（代替的な方法２）
代替的な方法２は、アップデートファイル１０７のセクション毎に検証データ１０８を用意しておき、セクション毎に検証を行う方法である。
【００２２】
図３は、代替的な方法２の概略を示す図である。
図３（ａ）に示すように、アップデートファイル１０７のフォーマットを変更して、セクション毎に、そのセクションを検証するための検証データ１０８を用意する。これにより、ＣＰＵ１０１は、セクション毎に独立して検証処理を実行することができる。したがって、ＣＰＵ１０１は、セクション毎に、順に検証処理を行い、検証処理が済んだセクションから不揮発メモリ１０４へ書き込むことができる。その結果、検証処理が完了していないデータを不揮発メモリ１０４へ書き込み、ファームウェア１０９を更新してしまうことを防止できる。
【００２３】
しかし、代替的な方法２では、図３（ｂ）に示すように、ファイル内のセクションを並べ替える攻撃が成立してしまう。また、図３（ｃ）に示すように、一部のセクションを古い版に差し替える攻撃が成立してしまう。
【００２４】
（代替的な方法３）
代替的な方法３は、代替的な方法１と同様にアップデートファイル１０７をセクション毎に順に検証処理へ入力し、アップデートファイル１０７全体の検証が成功した場合に、再びアップデートファイル１０７をセクション毎に取得し直してファームウェア１０９を更新する方法である。
【００２５】
図４は、代替的な方法３の処理を示すフローチャートである。
代替的な方法３では、代替的な方法１と同様に、事前に、アップデートファイル１０７をセクション毎にｍ個に分割しておく。
そして、Ｓ２１からＳ２２のループにおいて、ＣＰＵ１０１は、アップデートファイル１０７をセクション毎に揮発メモリ１０３に読み込み（Ｓ２１）、Ｓ２１で読み込んだセクションのデータに対して検証処理を行う（Ｓ２２）。
そして、全てのセクションについてのＳ２１からＳ２２の処理が完了して、検証用の値が計算されると、ＣＰＵ１０１は、検証データ１０８を読み込む。ＣＰＵ１０１は、検証処理で得られた検証用の値と、検証データ１０８とを比較して、検証成功か否かを判定する（Ｓ２３）。ＣＰＵ１０１は、検証成功であれば（Ｓ２３で成功）、処理をＳ２４へ移す。一方、ＣＰＵ１０１は、検証失敗であれば（Ｓ２３で失敗）、ファームウェア１０９を更新せずに処理を終了する。
【００２６】
検証成功の場合、Ｓ２４からＳ２５のループにおいて、ＣＰＵ１０１は、再びアップデートファイル１０７をセクション毎に揮発メモリ１０３に読み込み（Ｓ２４）、Ｓ２４で読み込んだセクションのデータを不揮発メモリ０１４に転送する（Ｓ２５）。これにより、徐々にファームウェア１０９が更新される。
【００２７】
代替的な方法３では、アップデートファイル１０７全体の検証が済んでから、ファームウェア１０９を更新できる。
【００２８】
しかし、代替的な方法３では、Ｓ２１からＳ２２のループで１度目に読み込んだアップデートファイル１０７と、Ｓ２４からＳ２５のループで２度目に読み込んだアップデートファイル１０７とが同じ内容であることの保証がない。つまり、例えば、細工した記憶媒体１０２を用いて、２度目の読み込みのときにだけ、改変したアップデートファイル１０７を読み込ませる攻撃が可能となる。
【００２９】
（実施の形態１に係る方法）
実施の形態１に係る方法は、代替的な方法３と同様に、アップデートファイル１０７をセクション毎に順に検証処理へ入力し、アップデートファイル１０７の検証が成功した場合に、再びアップデートファイル１０７をセクション毎に記憶媒体１０２から取得してファームウェア１０９を更新する方法である。但し、実施の形態１に係る方法では、１度目に読み込んだアップデートファイル１０７に対して検証処理を行った際に得られる中間値を記憶しておく。そして、２度目に読み込んだアップデートファイル１０７に対しても検証処理を行い、得られた中間値と、記憶しておいた中間値とを比較して、１度目に読み込んだアップデートファイル１０７と２度目に読み込んだアップデートファイル１０７とが同じ内容であることを確認する。
【００３０】
図５は、実施の形態１に係る方法の概略を示す図である。
図５では、アップデートファイル１０７をセクション１〜４の４つに分割している。なお、各セクション１〜４は、揮発メモリ１０３の容量を考慮して、１つのセクションのデータを記憶しつつ、検証処理を実行できるサイズである。
まず、ＣＰＵ１０１は、セクション１を読み出し、検証処理を行う。この際、ＣＰＵ１０１は、検証処理で得られた中間値１を記憶しておく。続いて、ＣＰＵ１０１は、セクション２を読み出し、検証処理を行う。この際、ＣＰＵ１０１は、検証処理で得られた中間値２を記憶しておく。同様に、ＣＰＵ１０１は、セクション３，４と順に読み出し、検証処理を行い、検証処理で得られた中間値３，４を記憶しておく。
そして、ＣＰＵ１０１は、検証処理で得られた検証用の値と、検証データ１０８とを比較して、検証成功か否かを判定する。
【００３１】
検証成功の場合、ＣＰＵ１０１は、セクション１を再び読み出し、検証処理を行い、中間値１’を得る。ＣＰＵ１０１は、得られた中間値１’と、記憶しておいた中間値１とを比較して、一致することを確認する。そして、一致することが確認できると、ＣＰＵ１０１は、セクション１でファームウェア１０９を更新する。続いて、ＣＰＵ１０１は、セクション２を再び読み出し、検証処理を行い、中間値２’を得る。ＣＰＵ１０１は、得られた中間値２’と、記憶しておいた中間値２とを比較して、一致することを確認する。そして、一致することが確認できると、ＣＰＵ１０１は、セクション２でファームウェア１０９を更新する。同様に、ＣＰＵ１０１は、セクション３，４についても順に読み出し、中間値の比較を行い、ファームウェア１０９を更新する。
【００３２】
図６は、実施の形態１に係る組込機器１００の機能構成図である。
組込機器１００は、データ取得部１０、検証部２０、中間値記憶部３０、データ再取得部４０、再検証部５０、比較部６０、更新部７０を備える。ここで、データ取得部１０、検証部２０、中間値記憶部３０、データ再取得部４０、再検証部５０、比較部６０、更新部７０は、例えば、プログラム、ソフトウェアであり、不揮発メモリ１０４に記憶されており、ＣＰＵ１０１によって読み出され実行される。これらは、ファームウェア１０９の一部を構成する機能であってもよい。また、これらは、回路や装置等のハードウェアによって実現されていてもよい。
【００３３】
図７は、実施の形態１に係る組込機器１００のファームウェア更新処理を示すフローチャートである。
事前に、アップデートファイル１０７をセクション毎にｍ個に分割しておく。
そして、まず、Ｓ３１からＳ３３のループにおいて、アップデートファイル１０７の各セクションについて順に処理を行う。具体的には、データ取得部１０は、記憶媒体１０２に記憶されたアップデートファイル１０７の１つのセクションを揮発メモリ１０３に読み込む（Ｓ３１）。続いて、検証部２０は、Ｓ３１で揮発メモリ１０３に読み込んだセクションのデータに対して、揮発メモリ１０３において検証処理を行う（Ｓ３２）。そして、中間値記憶部３０は、Ｓ３２で行った検証処理で得られる中間値を揮発メモリ１０３に記憶する（Ｓ３３）。
そして、全てのセクションについてのＳ３１からＳ３３の処理が完了して、検証用の値が計算されると、データ取得部１０は、記憶媒体１０２に記憶された検証データ１０８を読み込む。検証部２０は、Ｓ３２で行った検証処理で得られた検証用の値と、検証データ１０８とを比較して、検証成功か否かを判定する（Ｓ３４）。検証部２０は、検証成功であれば（Ｓ３４で成功）、処理をＳ３５へ移す。一方、検証部２０は、検証失敗であれば（Ｓ３４で失敗）、ファームウェア１０９を更新せずに処理を終了する。
【００３４】
検証成功の場合、Ｓ３５からＳ３８のループにおいて、アップデートファイル１０７の各セクションについて順に処理を行う。具体的には、データ再取得部４０は、記憶媒体１０２に記憶されたアップデートファイル１０７の１つのセクションを揮発メモリ１０３に読み込む（Ｓ３５）。続いて、再検証部５０は、Ｓ３５で読み込んだセクションのデータに対して、揮発メモリ１０３において検証処理を行う（Ｓ３６）。比較部６０は、Ｓ３６で行った検証処理で得られる中間値と、Ｓ３３で揮発メモリ１０３に記憶した中間値とを比較して、一致しているか否かを判定する（Ｓ３７）。一致している場合（Ｓ３７で一致）、更新部７０は、Ｓ３５で読み込んだアップデートファイル１０７のセクションのデータにより、ファームウェア１０９を更新する（Ｓ３８）一方、一致しない場合（Ｓ３７で不一致）、ファームウェア１０９を更新せずに処理を終了する。
【００３５】
以上のように、実施の形態１に係る方法では、検証されたセクションと同じ内容であることが確認されたセクションでファームウェア１０９が更新される。したがって、代替的な方法３の場合のように、細工した記憶媒体１０２を用いて、２度目の読み込みのときにだけ、改変したアップデートファイル１０７を読み込ませる攻撃を受けることがない。
また、実施の形態１に係る方法では、中間値は、不揮発メモリ１０４に記憶されることがなく、揮発メモリ１０３外へ露出することがないため、攻撃者に読み取られることもない。そのため、中間値を利用した攻撃をされることもない。
【００３６】
もちろん、実施の形態１に係る方法では、代替的な方法１〜３と同様に、アップデートファイル１０７をセクション毎に分割して、１つのセクションずつ揮発メモリ１０３に読み込み、検証処理を行う。そのため、揮発メモリ１０３の容量が小さくても、検証処理を実行できる。
【００３７】
なお、上記説明では、組込機器１００のハードウェア構成を図１に示す構成であるとした。
しかし、図８に示すように、組込機器１００は、ＣＰＵ１０１と揮発メモリ１０３と不揮発メモリ１０４とを混載したチップ１１０を備える構成であってもよい。
【００３８】
また、図９に示すように、組込機器１００は、図１に示す構成に加えて、セキュリティチップ１１１を備える構成であってもよい。そして、セキュリティチップ１１１を用いて検証処理を行うようにしてもよい。
【００３９】
また、図１０に示すように、記憶媒体１０２に代えて、通信インタフェース１１２を備える構成であってもよい。そして、ＣＰＵ１０１は、通信インタフェース１１２を介して、外部ＰＣ１１３等からアップデートファイル１０５や検証データ１０６を取得して、揮発メモリ１０３に記憶するようにしてもよい。また、図１１に示すように、ＣＰＵ１０１は、通信インタフェース１１２を介して、インターネット等により接続された外部サーバ１１４等からアップデートファイル１０５や検証データ１０６を取得して、揮発メモリ１０３に記憶するようにしてもよい。
【００４０】
また、上記説明では、中間値を単に検証処理中に得られる値とした。
ここで、検証処理の暗号アルゴリズムとして、Ｍｅｒｋｌｅ−Ｄａｍｇａｒｄ型ハッシュ関数（非特許文献３参照）を用いることができる。図１２に示すように、Ｍｅｒｋｌｅ−Ｄａｍｇａｒｄ型ハッシュ関数では、圧縮関数を繰り返し計算する処理を含む。検証処理の暗号アルゴリズムとして、Ｍｅｒｋｌｅ−Ｄａｍｇａｒｄ型ハッシュ関数を用いる場合、例えば、適当な段数における圧縮関数の出力を中間値とすることができる。
【００４１】
また、検証処理の暗号アルゴリズムとして、スポンジ型ハッシュ関数（非特許文献４参照）を用いることができる。図１３に示すように、スポンジ型ハッシュ関数では、置換関数を繰り返し計算する処理を含む。検証処理の暗号アルゴリズムとして、スポンジ型ハッシュ関数を用いる場合、例えば、適当な段数における置換関数の出力を中間値とすることができる。
【００４２】
また、検証処理の暗号アルゴリズムとして、メッセージ認証コード（非特許文献３参照）と、メッセージ認証付き暗号利用モード（非特許文献３参照）とを用いることができる。図１４は、ガロアカウンターモード（非特許文献５参照）を示すが、図１４に示すように、メッセージ認証コードやメッセージ認証付き暗号利用モードでは、同様の演算を繰り返し計算する処理を含む。検証処理の暗号アルゴリズムとして、メッセージ認証コードやメッセージ認証付き暗号利用モードを用いる場合、例えば、適当な段数における演算の出力を中間値とすることができる。
【符号の説明】
【００４３】
１００  組込機器、１０１  ＣＰＵ、１０２  記憶媒体、１０３  揮発メモリ、１０４  不揮発メモリ、１０５，１０７  アップデートファイル、１０６，１０８  検証データ、１０９  ファームウェア、１０  データ取得部、２０  検証部、３０  中間値記憶部、４０  データ再取得部、５０  再検証部、６０  比較部、７０  更新部。
【図１】
0006053950.tif 000002
【図２】
0006053950.tif 000003
【図３】
0006053950.tif 000004
【図４】
0006053950.tif 000005
【図５】
0006053950.tif 000006
【図６】
0006053950.tif 000007
【図７】
0006053950.tif 000008
【図８】
0006053950.tif 000009
【図９】
0006053950.tif 000010
【図１０】
0006053950.tif 000011
【図１１】
0006053950.tif 000012
【図１２】
0006053950.tif 000013
【図１３】
0006053950.tif 000014
【図１４】
0006053950.tif 000015