(57)【特許請求の範囲】
【請求項１】
起動対象である起動ソフトウェアを起動するソフトウェア検証装置において、
記憶部を備え、前記起動ソフトウェアのハッシュ値の期待値であるハッシュ期待値が前記記憶部に記憶されていれば、前記起動ソフトウェアのハッシュ値と前記ハッシュ期待値とを比較するセキュリティ演算部と、
前記ハッシュ値と前記ハッシュ期待値とが一致すると前記起動ソフトウェアを起動し、一致しなければ処理を停止する主演算部と
を備え、
前記主演算部は、
前記ハッシュ期待値が前記記憶部に記憶されていなければ前記起動ソフトウェアの署名検証を行い、署名検証に成功すれば前記起動ソフトウェアのハッシュ値を前記ハッシュ期待値として前記記憶部に記憶するとともに前記起動ソフトウェアを起動し、署名検証に成功しなければ処理を停止するソフトウェア検証装置。
【請求項２】
Ｎ個（Ｎは２以上の整数）の起動ソフトウェアを順に起動するソフトウェア検証装置であって、前記Ｎ個の起動ソフトウェアからハッシュチェーンを生成するハッシュチェーンモードと、前記Ｎ個の起動ソフトウェアの各々について署名検証を行う署名検証モードとのいずれかの起動モードで起動するソフトウェア検証装置において、
前記ハッシュチェーンモードで起動されると、前記Ｎ個の起動ソフトウェアのうち１番目に起動される先起動ソフトウェアのハッシュ値を取得するとともにランダムなデータ列を生成し、前記先起動ソフトウェアのハッシュ値と前記データ列とのハッシュ値を第１ハッシュチェーンとして生成するセキュリティ演算部と、
前記第１ハッシュチェーンが生成されると、前記先起動ソフトウェアを起動する主演算部と
を備え、
前記主演算部は、
前記Ｎ個の起動ソフトウェアのうちｋ番目（ｋは２以上Ｎ以下の整数）に起動される次起動ソフトウェアのハッシュ値を取得し、第（ｋ−１）ハッシュチェーンと前記次起動ソフトウェアのハッシュ値とのハッシュ値を第ｋハッシュチェーンとして生成するとともに前記次起動ソフトウェアを起動し、前記次起動ソフトウェアが前記Ｎ個の起動ソフトウェアのうち最後であるＮ番目に起動される起動ソフトウェアであれば、前記第ｋハッシュチェーンである第Ｎハッシュチェーンを前記セキュリティ演算部に出力し、
前記セキュリティ演算部は、
記憶部を備え、前記Ｎ個の起動ソフトウェアの各々のハッシュ値が前記記憶部に記憶されていれば、前記Ｎ個の起動ソフトウェアの各々のハッシュ値と前記データ列とを用いて、前記第Ｎハッシュチェーンの期待値をハッシュチェーン期待値として計算し、前記第Ｎハッシュチェーンを前記ハッシュチェーン期待値と比較し、
前記主演算部は、
前記第Ｎハッシュチェーンと前記ハッシュチェーン期待値とが一致すれば正常終了し、一致しなければ処理を停止し、前記Ｎ個の起動ソフトウェアの各々のハッシュ値が前記記憶部に記憶されていなければ前記起動モードを前記署名検証モードに設定して再起動するソフトウェア検証装置。
【請求項３】
前記主演算部は、
前記署名検証モードで起動されると、前記Ｎ個の起動ソフトウェアの各起動ソフトウェアについて署名検証を行い、署名検証に成功すれば各起動ソフトウェアのハッシュ値を前記記憶部に記憶するとともに各起動ソフトウェアを起動し、前記Ｎ個の起動ソフトウェアの全ての署名検証に成功すると、前記起動モードを前記ハッシュチェーンモードに設定し、署名検証に失敗すると処理を停止する請求項２に記載のソフトウェア検証装置。
【請求項４】
不揮発性のストレージに記憶された起動ソフトウェアのＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）の有無を判定し、ＭＡＣが存在すれば、前記起動ソフトウェアのハッシュ値と前記起動ソフトウェアのＭＡＣを出力する主演算部と、
記憶部を備え、前記記憶部に記憶されている構成検証鍵と前記起動ソフトウェアのハッシュ値からＭＡＣの期待値であるＭＡＣ期待値を計算し、前記主演算部から出力されたＭＡＣと前記ＭＡＣ期待値とを比較するセキュリティ演算部と
を備え、
前記主演算部は、
前記主演算部から出力されたＭＡＣと前記ＭＡＣ期待値とが一致すると、前記起動ソフトウェアを起動し、前記主演算部から出力されたＭＡＣと前記ＭＡＣ期待値とが一致しなければ処理を停止するソフトウェア検証装置。
【請求項５】
前記主演算部は、
前記起動ソフトウェアのＭＡＣが存在しなければ、前記起動ソフトウェアの署名検証を行い、署名検証に成功すれば、前記起動ソフトウェアのハッシュ値を前記セキュリティ演算部に出力し、署名検証に成功しなければ処理を停止し、
前記セキュリティ演算部は、
前記主演算部から前記起動ソフトウェアのハッシュ値を取得すると、前記構成検証鍵の有無を判定し、前記構成検証鍵が存在すれば処理を停止し、前記構成検証鍵が存在しなければ、前記起動ソフトウェアのハッシュ値を前記記憶部に一時記憶し、
前記ソフトウェア検証装置は、複数の起動ソフトウェアを前記起動ソフトウェアとして起動し、
前記セキュリティ演算部は、
全ての起動ソフトウェアの起動が完了すると、前記構成検証鍵を生成し、前記構成検証鍵と前記記憶部に一時保存したハッシュ値とから、前記複数の起動ソフトウェアの各起動ソフトウェアのＭＡＣを算出し、
前記主演算部は、
前記複数の起動ソフトウェアの各起動ソフトウェアのＭＡＣを前記ストレージに記憶する請求項４に記載のソフトウェア検証装置。
【請求項６】
前記主演算部は、
更新ソフトウェアと前記更新ソフトウェアの署名を取得し、前記更新ソフトウェアの署名検証とバージョンチェックが成功すると、更新前の起動ソフトウェアのハッシュ値を計算し、前記更新前の起動ソフトウェアのハッシュ値と前記ストレージに記憶された前記更新前の起動ソフトウェアのＭＡＣとを前記セキュリティ演算部に出力し、
前記セキュリティ演算部は、
前記主演算部から出力されたハッシュ値と前記構成検証鍵とから前記更新前の起動ソフトウェアのＭＡＣを計算し、計算したＭＡＣと前記主演算部から出力されたＭＡＣとを比較し、
前記主演算部は、
前記計算したＭＡＣと前記主演算部から出力されたＭＡＣが全て一致すれば、前記更新ソフトウェアと署名を書き込み、前記更新ソフトウェアのハッシュ値を計算し、前記セキュリティ演算部に出力し、
前記セキュリティ演算部は、
前記構成検証鍵を再生成し、再生成した構成検証鍵と前記更新ソフトウェアのハッシュ値とを用いて、前記更新ソフトウェアのＭＡＣを計算し、
前記主演算部は、
前記更新ソフトウェアのＭＡＣを前記ストレージに記憶する請求項５に記載のソフトウェア検証装置。
【請求項７】
複数の起動ソフトウェアを順に起動するソフトウェア検証装置において、
記憶部を備え、前記複数の起動ソフトウェアのうち起動対象の起動ソフトウェアの署名検証を行い、署名検証に成功すれば前記起動ソフトウェアのハッシュ値を計算し、前記記憶部に一時記憶するセキュリティ演算部と、
前記起動ソフトウェアの署名検証に成功しなければ処理を停止し、前記起動ソフトウェアの署名検証が成功すると前記起動ソフトウェアを起動する主演算部と
を備え、
前記主演算部は、
前記複数の起動ソフトウェアの最後の起動ソフトウェアを起動すると、一時記憶された全てのハッシュ値を加算し、加算結果を出力し、
前記セキュリティ演算部は、
前記記憶部に加算結果の期待値である加算結果期待値が記憶されているかを判定し、前記加算結果期待値が無ければ、前記加算結果を前記加算結果期待値として前記記憶部に記憶し、前記加算結果期待値が存在すれば、前記主演算部から出力された前記加算結果と前記加算結果期待値とを比較し、
前記主演算部は、
前記加算結果と前記加算結果期待値とが一致しなければ処理を停止し、前記加算結果と前記加算結果期待値とが一致すれば正常終了するソフトウェア検証装置。
【請求項８】
前記セキュリティ演算部は、
複数の更新ソフトウェアの各々と前記複数の更新ソフトウェアの各々の署名を取得し、更新前の各起動ソフトウェアのハッシュ値を加算した加算結果を算出し、算出した前記加算結果と前記加算結果期待値とを比較し、
前記主演算部は、
前記加算結果と前記加算結果期待値とが一致しなければ、処理を停止し、前記加算結果と前記加算結果期待値とが一致すれば、前記複数の更新ソフトウェアの各々と前記複数の更新ソフトウェアの各々の署名を書き込み、
前記セキュリティ演算部は、
更新後の各更新ソフトウェアのハッシュ値を計算し、各更新ソフトウェアのハッシュ値を加算した加算結果を、前記加算結果期待値として前記記憶部に記憶するとともに、前記複数の更新ソフトウェアの各々のハッシュ値を前記記憶部に記憶する請求項７に記載のソフトウェア検証装置。
【請求項９】
複数の起動ソフトウェアを順に起動するソフトウェア検証装置において、
記憶部を備えたセキュリティ演算部と、
前記複数の起動ソフトウェアのうち起動対象の起動ソフトウェアの署名検証を行い、署名検証に成功すれば、前記起動ソフトウェアのハッシュ値を計算し、前記記憶部に一時記憶するとともに前記起動ソフトウェアを起動し、署名検証に成功しなければ処理を停止する主演算部と
を備え、
前記主演算部は、
前記複数の起動ソフトウェアの最後の起動ソフトウェアを起動すると、一時記憶された全てのハッシュ値を加算し、加算結果を出力し、不揮発性のストレージに記憶されたＭＡＣの有無を判定し、前記ストレージに記憶されたＭＡＣが存在すれば、前記加算結果と前記ストレージに記憶されたＭＡＣを出力し、
前記セキュリティ演算部は、
前記記憶部に記憶されている構成検証鍵と前記加算結果から、ＭＡＣの期待値であるＭＡＣ期待値を計算し、前記ＭＡＣ期待値と前記主演算部から出力されたＭＡＣとを比較し、
前記主演算部は、
前記ＭＡＣ期待値と前記出力されたＭＡＣとが一致しなければ処理を停止し、前記ＭＡＣ期待値と前記出力されたＭＡＣとが一致すれば、正常終了し、
前記セキュリティ演算部は、
前記ストレージに記憶されたＭＡＣが存在しなければ、前記記憶部に構成検証鍵が存在するかを判定し、前記構成検証鍵が記憶されていなければ、前記構成検証鍵を生成し、前記構成検証鍵と前記加算結果から前記加算結果のＭＡＣを生成し、
前記主演算部は、
前記構成検証鍵が記憶されていれば処理を停止し、前記加算結果のＭＡＣが生成されると前記加算結果のＭＡＣを前記ストレージに記憶するソフトウェア検証装置。
【請求項１０】
前記主演算部は、
複数の更新ソフトウェアの各々と前記複数の更新ソフトウェアの各々の署名を取得し、更新前の各起動ソフトウェアのハッシュ値を加算した加算結果と前記加算結果のＭＡＣを算出し、前記加算結果と前記加算結果のＭＡＣを出力し、
前記セキュリティ演算部は、
前記構成検証鍵と前記加算結果からＭＡＣを計算し、前記加算結果のＭＡＣと、前記計算されたＭＡＣとを比較し、
前記主演算部は、
前記加算結果のＭＡＣと前記計算されたＭＡＣが一致しなければ、処理を停止し、前記加算結果のＭＡＣと前記計算されたＭＡＣが一致すれば、前記複数の更新ソフトウェアの各々と前記複数の更新ソフトウェアの各々の署名を書き込み、
前記主演算部は、
更新後の各起動ソフトウェアのハッシュ値を計算し、更新前の各起動ソフトウェアのハッシュ値と、前記加算結果と、更新後の各起動ソフトウェアのハッシュ値を第１加算結果として加算し、前記第１加算結果を出力し、
前記セキュリティ演算部は、
構成検証鍵を再生成し、前記構成検証鍵と前記第１加算結果とから前記第１加算結果のＭＡＣを計算し、
主演算部は、前記第１加算結果のＭＡＣを前記ストレージに記憶する請求項９に記載のソフトウェア検証装置。
【請求項１１】
起動対象である起動ソフトウェアを起動するソフトウェア検証装置のソフトウェア検証方法において、
セキュリティ演算部が、前記起動ソフトウェアのハッシュ値の期待値であるハッシュ期待値が記憶部に記憶されていれば、前記起動ソフトウェアのハッシュ値と前記ハッシュ期待値とを比較し、
主演算部は、前記ハッシュ値と前記ハッシュ期待値とが一致すると前記起動ソフトウェアを起動し、一致しなければ処理を停止し、
主演算部は、前記ハッシュ期待値が前記記憶部に記憶されていなければ前記起動ソフトウェアの署名検証を行い、署名検証に成功すれば前記起動ソフトウェアのハッシュ値を前記ハッシュ期待値として前記記憶部に記憶するとともに前記起動ソフトウェアを起動し、署名検証に成功しなければ処理を停止するソフトウェア検証方法。
【請求項１２】
起動対象である起動ソフトウェアを起動するソフトウェア検証装置のソフトウェア検証プログラムにおいて、
前記起動ソフトウェアのハッシュ値の期待値であるハッシュ期待値が記憶部に記憶されていれば、前記起動ソフトウェアのハッシュ値と前記ハッシュ期待値とを比較するセキュリティ演算処理と、
前記ハッシュ値と前記ハッシュ期待値とが一致すると前記起動ソフトウェアを起動し、一致しなければ処理を停止する主演算処理と
をコンピュータである前記ソフトウェア検証装置に実行させるソフトウェア検証プログラムであって、
前記主演算処理は、
前記ハッシュ期待値が前記記憶部に記憶されていなければ前記起動ソフトウェアの署名検証を行い、署名検証に成功すれば前記起動ソフトウェアのハッシュ値を前記ハッシュ期待値として前記記憶部に記憶するとともに前記起動ソフトウェアを起動し、署名検証に成功しなければ処理を停止するソフトウェア検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア検証装置、ソフトウェア検証方法およびソフトウェア検証プログラムに関する。特に、セキュアブートを行うソフトウェア検証装置、ソフトウェア検証方法およびソフトウェア検証プログラムに関する。
【背景技術】
【０００２】
近年、組み込み制御機器においても、不正プログラムを実行させないために、セキュアブートの採用が増えている。セキュアブートとは、機器の起動時にソフトウェアに改ざんが無いことをデジタル署名といった手法により確認してから実行することである。具体的には、セキュアブートとは、ルートキットといった不正なプログラムの実行を防止するものである。従来のセキュアブートは、ＵＥＦＩ（Ｕｎｉｆｉｅｄ  Ｅｘｔｅｎｓｉｂｌｅ  Ｆｉｒｍｗａｒｅ  Ｉｎｔｅｒｆａｃｅ）とＴＰＭ（Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅ）を用いて実現されている。【０００３】
非特許文献１では、プログラムの署名検証を行いながら、そのハッシュをＴＰＭに格納していき、最後にＴＰＭでハッシュに署名を施し、外部サーバに問い合わせることで、ソフトウェアの完全性を検証する。
また、特許文献１では、開発時にソフトウェアのハッシュリストを署名つきで生成し、ブート時にそれらを検証する方法が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１１／１４２０９５号
【非特許文献】
【０００５】
【非特許文献１】Ｍｉｃｒｏｓｏｆｔ、「Ｗｉｎｄｏｗｓ１０のブートプロセスのセキュリティ保護」ｈｔｔｐｓ：／／ｄｏｃｓ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ／ｊａ−ｊｐ／ｗｉｎｄｏｗｓ／ｓｅｃｕｒｉｔｙ／ｈａｒｄｗａｒｅ−ｐｒｏｔｅｃｔｉｏｎ／ｓｅｃｕｒｅ−ｔｈｅ−ｗｉｎｄｏｗｓ−１０−ｂｏｏｔ−ｐｒｏｃｅｓｓ
【発明の概要】
【発明が解決しようとする課題】
【０００６】
非特許文献１の技術では、個々のソフトウェアについて署名検証を行うため起動が遅い。また、ソフトウェア本体とその署名を丸ごと古いバージョンに戻すダウングレード攻撃は検知できない。さらに、外部サーバとの通信ができないとソフトウェア構成の完全性を判定できない。
特許文献１の技術では、ハッシュリストごと古いバージョンに戻すダウングレード攻撃を検知できない。【０００７】
本発明は、複数のソフトウェアの完全性検証の高速化および装置単体でのソフトウェア構成の完全性検証を目的とする。
【課題を解決するための手段】
【０００８】
本発明に係るソフトウェア検証装置は、起動対象である起動ソフトウェアを起動するソフトウェア検証装置において、
記憶部を備え、前記起動ソフトウェアのハッシュ値の期待値であるハッシュ期待値が前記記憶部に記憶されていれば、前記起動ソフトウェアのハッシュ値と前記ハッシュ期待値とを比較するセキュリティ演算部と、
前記ハッシュ値と前記ハッシュ期待値とが一致すると前記起動ソフトウェアを起動し、一致しなければ処理を停止する主演算部と
を備え、
前記主演算部は、
前記ハッシュ期待値が前記記憶部に記憶されていなければ前記起動ソフトウェアの署名検証を行い、署名検証に成功すれば前記起動ソフトウェアのハッシュ値を前記ハッシュ期待値として前記記憶部に記憶するとともに前記起動ソフトウェアを起動し、署名検証に成功しなければ処理を停止する。
【発明の効果】
【０００９】
本発明に係るソフトウェア検証装置では、セキュリティ演算部が、起動されたソフトウェアのハッシュ値をハッシュ期待値として記憶部に記憶しておく。そして、セキュリティ演算部が、今回起動する起動ソフトウェアのハッシュ値とハッシュ期待値とを比較することにより起動ソフトウェアの正当性を判定する。よって、本発明に係るソフトウェア検証装置によれば、署名検証の処理を少なくし、起動を高速化することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１に係るソフトウェア検証装置の構成図。
【図２】実施の形態１に係るソフトウェア検証装置のブートの動作のフロー図。
【図３】実施の形態１に係るソフトウェア検証装置のブートの動作のフロー図。
【図４】実施の形態１に係るソフトウェア検証装置のソフトウェア更新の動作のフロー図。
【図５】実施の形態１の変形例に係るソフトウェア検証装置の構成図。
【図６】実施の形態２に係るハッシュチェーンモードのブートの動作のフロー図。
【図７】実施の形態２に係る署名検証モードのブートの動作のフロー図。
【図８】実施の形態３に係るソフトウェア検証装置のブートの動作のフロー図。
【図９】実施の形態３に係るソフトウェア検証装置のブートの動作のフロー図。
【図１０】実施の形態３に係るソフトウェア検証装置のブートの動作のフロー図。
【図１１】実施の形態３に係るソフトウェア検証装置のソフトウェア更新の動作のフロー図。
【図１２】実施の形態４に係るソフトウェア検証装置のブートの動作のフロー図。
【図１３】実施の形態４に係るソフトウェア検証装置のソフトウェア更新の動作のフロー図。
【図１４】実施の形態５に係るソフトウェア検証装置のブートの動作のフロー図。
【図１５】実施の形態５に係るソフトウェア検証装置のブートの動作のフロー図。
【図１６】実施の形態５に係るソフトウェア検証装置のソフトウェア更新の動作のフロー図。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一または相当する部分には、同一符号を付している。実施の形態の説明において、同一または相当する部分については、説明を適宜省略または簡略化する。
【００１２】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１を用いて、本実施の形態に係るソフトウェア検証装置１００の構成を説明する。
ソフトウェア検証装置１００は、コンピュータである。ソフトウェア検証装置１００は、プロセッサ１０２を備えるとともに、ストレージ１０３、メモリ１０４、通信デバイス１０５、入力デバイス１０６、表示デバイス１０７、およびブートＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０８といった他のハードウェアを備える。プロセッサ１０２は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
【００１３】
プロセッサ１０２は、ブート時に起動対象である起動ソフトウェアの署名を検証するといった処理を行うＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。プロセッサ１０２は、主演算部１０９とセキュリティ演算部１１０を機能要素として備える。主演算部１０９は、ブート処理あるいはアプリケーション処理といった処理を行う。セキュリティ演算部１１０は、秘匿性の高い鍵といった情報を安全に記憶する、あるいは、ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）といった暗号処理を行う。なお、本実施の形態では、署名検証は、秘匿性の高い情報を使わないため、主演算部１０９で行う。また、ハッシュ値の比較、あるいは、ＭＡＣの生成および検証は、秘匿性の高い情報を使うため、セキュリティ演算部１１０で行う。
また、プロセッサ１０２は、不揮発メモリを備えている。図１では同一プロセッサ内に主演算部１０９とセキュリティ演算部１１０が搭載されているが、両者のデータ伝送を安全に行えるのであれば別構成でもよい。
【００１４】
ストレージ１０３は、検証対象となるソフトウェアおよびその署名を格納する不揮発性の記憶素子である。メモリ１０４は、プロセッサ１０２が演算結果を一時的に展開する揮発性の記憶素子である。
ブートＲＯＭ１０８は、電源投入時に最初に実行されるブートプログラムが入っている。ブートＲＯＭ１０８は、読み出ししかできず、書き込みはできない。
【００１５】
各ハードウェアについて、より詳しく説明する。
ソフトウェア検証装置１００は、機能要素として、主演算部１０９とセキュリティ演算部１１０とを備える。セキュリティ演算部１１０は記憶部１１１を備える。主演算部１０９とセキュリティ演算部１１０の機能は、ソフトウェアにより実現される。記憶部１１１は、プロセッサ１０２に備えられた不揮発メモリに備えられる。
【００１６】
プロセッサ１０２は、ソフトウェア検証プログラムを実行する装置である。ソフトウェア検証プログラムは、主演算部１０９とセキュリティ演算部１１０の機能を実現するプログラムである。
プロセッサ１０２は、演算処理を行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ１０２の具体例は、ＣＰＵの他に、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であってもよい。
【００１７】
メモリ１０４は、データを一時的に記憶する記憶装置である。メモリ１０４の具体例は、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、あるいはＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
ストレージ１０３は、データを保管する記憶装置である。ストレージ１０３の具体例は、ＨＤＤである。また、ストレージ１０３は、ＳＤ（登録商標）メモリカード、ＣＦ、ＮＡＮＤフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤといった可搬の記憶媒体であってもよい。なお、ＨＤＤは、Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅの略語である。ＳＤ（登録商標）は、Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌの略語である。ＣＦは、ＣｏｍｐａｃｔＦｌａｓｈ（登録商標）の略語である。ＤＶＤは、Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋの略語である。
【００１８】
入力デバイス１０６は、マウス、キーボード、あるいはタッチパネルといった入力装置である。なお、入力デバイス１０６は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）と接続されるポートであってもよい。
表示デバイス１０７は、ディスプレイといった出力機器である。表示デバイス１０７は、具体的には、ＵＳＢ端子またはＨＤＭＩ（登録商標）（Ｈｉｇｈ  Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）端子といったインタフェースに接続される。ディスプレイは、具体的には、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）である。
通信デバイス１０５は、レシーバとトランスミッタを有する。通信デバイス１０５は、ＬＡＮ、インターネット、あるいは電話回線といった通信網に接続している。通信デバイス１０５は、具体的には、通信チップまたはＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。
なお、本実施の形態では、通信デバイス１０５、入力デバイス１０６、あるいは表示デバイス１０７は必須ではない。
【００１９】
ソフトウェア検証プログラムは、プロセッサ１０２に読み込まれ、プロセッサ１０２によって実行される。メモリ１０４には、ソフトウェア検証プログラムだけでなく、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）も記憶されている。プロセッサ１０２は、ＯＳを実行しながら、ソフトウェア検証プログラムを実行する。ソフトウェア検証プログラムおよびＯＳは、ストレージ１０３に記憶されていてもよい。ストレージ１０３に記憶されているソフトウェア検証プログラムおよびＯＳは、メモリ１０４にロードされ、プロセッサ１０２によって実行される。なお、ソフトウェア検証プログラムの一部または全部がＯＳに組み込まれていてもよい。
【００２０】
ソフトウェア検証装置１００は、プロセッサ１０２を代替する複数のプロセッサを備えていてもよい。これら複数のプロセッサは、ソフトウェア検証プログラムの実行を分担する。それぞれのプロセッサは、プロセッサ１０２と同じように、ソフトウェア検証プログラムを実行する装置である。
【００２１】
ソフトウェア検証プログラムにより利用、処理または出力されるデータ、情報、信号値および変数値は、メモリ１０４、ストレージ１０３、または、プロセッサ１０２内の不揮発メモリ、レジスタ、あるいはキャッシュメモリに記憶される。
【００２２】
主演算部１０９とセキュリティ演算部１１０の各部の「部」を「処理」、「手順」あるいは「工程」に読み替えてもよい。また主演算処理とセキュリティ演算処理の「処理」を「プログラム」、「プログラムプロダクト」または「プログラムを記録したコンピュータ読取可能な記憶媒体」に読み替えてもよい。
ソフトウェア検証プログラムは、上記の各部の「部」を「処理」、「手順」あるいは「工程」に読み替えた各処理、各手順あるいは各工程を、コンピュータに実行させる。また、ソフトウェア検証方法は、ソフトウェア検証装置１００がソフトウェア検証プログラムを実行することにより行われる方法である。
ソフトウェア検証プログラムは、コンピュータ読取可能な記録媒体に格納されて提供されてもよい。また、ソフトウェア検証プログラムは、プログラムプロダクトとして提供されてもよい。
【００２３】
＊＊＊動作の説明＊＊＊
次に、図２から図４を用いて、本実施の形態に係るソフトウェア検証装置１００の動作について説明する。ソフトウェア検証装置１００は、起動対象である起動ソフトウェアを起動する。特に、ソフトウェア検証装置１００は、複数の起動ソフトウェアを順に起動する。以下に説明する実施の形態１から５において、ソフトウェア検証装置１００は、ブートプログラム、ブートローダ、ＯＳ、およびアプリケーションの順に起動する。ブートローダ、ＯＳ、およびアプリケーションは、複数の起動ソフトウェアの例である。
【００２４】
まず、図２および図３を用いて、本実施の形態に係るソフトウェア検証装置１００のブートの動作について説明する。
【００２５】
ステップＳ２０１において、電源が投入されると、主演算部１０９は、ブートＲＯＭ１０８に記憶されているブートプログラムを実行する。
ステップＳ２０２において、ブートプログラムは、ブートローダのソフトウェアのハッシュ値を生成し、セキュリティ演算部１１０に出力する。
ステップＳ２０３において、セキュリティ演算部１１０は、ブートプログラムから出力されたハッシュ値と、記憶部１１１に記憶されているブートローダのハッシュ期待値とを比較する。両者が一致しなければ、主演算部１０９は、処理を停止する。記憶部１１１にハッシュ期待値が未設定であれば、ステップＳ２０４に進む。また、両者が一致すれば、ステップＳ２０６において、主演算部１０９は、起動ソフトウェアを起動する。すなわち、主演算部１０９は、ブートローダを起動する。
【００２６】
このように、セキュリティ演算部１１０は、起動ソフトウェアのハッシュ値の期待値であるハッシュ期待値が記憶部１１１に記憶されていれば、起動ソフトウェアのハッシュ値とハッシュ期待値とを比較する。
また、ハッシュ期待値が記憶部１１１に記憶されていなければ、主演算部１０９は、起動ソフトウェアの署名検証を行う。そして、主演算部１０９は、署名検証に成功すれば起動ソフトウェアのハッシュ値をハッシュ期待値として記憶部１１１に記憶するとともに起動ソフトウェアを起動する。具体的には、以下の通りである。
【００２７】
ステップＳ２０４において、主演算部１０９は、ブートローダのソフトウェアの署名検証を行う。署名検証に成功すれば、ステップＳ２０５において、主演算部１０９は、ブートローダのソフトウェアのハッシュ値をハッシュ期待値として記憶部１１１に記憶する。具体的には、主演算部１０９は、署名検証の成功をセキュリティ演算部１１０に出力する。セキュリティ演算部１１０は、主演算部１０９から署名検証の成功を取得すると、ブートローダのソフトウェアのハッシュ値をハッシュ期待値として記憶部１１１に記憶する。以下において、主演算部１０９が、セキュリティ演算部１１０内の記憶部１１１にハッシュ期待値を記憶することを、セキュリティ演算部１１０内にハッシュ期待値を記憶するという場合がある。
署名検証に成功しなければ、主演算部１０９は、処理を停止する。
【００２８】
ステップＳ２０６において、主演算部１０９は、ブートローダを起動する。つまり、主演算部１０９は、ハッシュ値とハッシュ期待値とが一致すると起動ソフトウェアを起動する。また、主演算部１０９は、署名検証が成功すると、起動ソフトウェアを起動する。
【００２９】
ステップＳ２０７において、ブートローダは、ＯＳのソフトウェアのハッシュ値を生成し、セキュリティ演算部１１０に出力する。
ステップＳ２０８において、セキュリティ演算部１１０は、ブートローダから出力されたハッシュ値と、セキュリティ演算部１１０内、すなわち記憶部１１１に記憶されているＯＳのハッシュ期待値とを比較する。両者が一致しなければ、主演算部１０９は、処理を停止する。記憶部１１１にハッシュ値が未設定であれば、ステップＳ２０９に進む。両者が一致すれば、ステップＳ２１１において、主演算部１０９は、ＯＳを起動する。
【００３０】
ステップＳ２０９において、主演算部１０９は、ＯＳのソフトウェアの署名検証を行う。署名検証に成功すれば、ステップＳ２１０において、主演算部１０９は、ＯＳのソフトウェアのハッシュ値をハッシュ期待値として、セキュリティ演算部１１０内、すなわち記憶部１１１に記憶する。署名検証に成功しなければ、主演算部１０９は、処理を停止する。
ステップＳ２１１において、主演算部１０９は、ＯＳを起動する。
【００３１】
ステップＳ２１２において、ＯＳは、アプリケーションのソフトウェアのハッシュ値を生成し、セキュリティ演算部１１０に出力する。
ステップＳ２１３において、セキュリティ演算部１１０は、ＯＳから出力されたハッシュ値と、セキュリティ演算部１１０内、すなわち記憶部１１１に記憶されているアプリケーションのハッシュ期待値とを比較する。両者が一致しなければ、主演算部１０９は、処理を停止する。記憶部１１１にハッシュ値が未設定であれば、ステップＳ２１４に進む。両者が一致すれば、ステップＳ２１６において、主演算部１０９は、アプリケーションを起動する。
【００３２】
ステップＳ２１４において、主演算部１０９は、アプリケーションのソフトウェアの署名検証を行う。署名検証に成功すれば、ステップＳ２１５において、主演算部１０９は、アプリケーションのソフトウェアのハッシュ値をハッシュ期待値として、セキュリティ演算部１１０内、すなわち記憶部１１１に記憶する。署名検証に成功しなければ、主演算部１０９は、処理を停止する。
ステップＳ２１６において、主演算部１０９は、アプリケーションを起動する。
【００３３】
図４を用いて、本実施の形態に係るソフトウェア検証装置１００のソフトウェア更新の動作について説明する。
ステップＳ３０１において、更新対象の更新ソフトウェアとその署名とがダウンロードされる。
ステップＳ３０２において、主演算部１０９は、更新ソフトウェアの署名とバージョンとを検証する。バージョン検証は、具体的には、リストによる照合といった手法を用いる。検証に失敗したら、主演算部１０９は、異常終了として処理を中止する。検証に成功したら、ステップＳ３０３に進む。
【００３４】
ステップＳ３０３において、主演算部１０９は、更新ソフトウェアと署名をストレージ１０３またはメモリ１０４に書き込む。
ステップＳ３０４において、主演算部１０９は、更新ソフトウェアのハッシュ値を生成する。主演算部１０９は、更新ソフトウェアのハッシュ値を更新ソフトウェアのハッシュ期待値として、セキュリティ演算部１１０内の記憶部１１１に上書き保存する。
【００３５】
＊＊＊他の構成＊＊＊
＜変形例１＞
本実施の形態では、主演算部１０９とセキュリティ演算部１１０の機能がソフトウェアで実現される。変形例として、主演算部１０９とセキュリティ演算部１１０の機能がハードウェアで実現されてもよい。
【００３６】
図５は、本実施の形態の変形例に係るソフトウェア検証装置１００の構成を示す図である。
ソフトウェア検証装置１００は、プロセッサ１０２に替えて、電子回路１１２を備える。
【００３７】
電子回路１１２は、主演算部１０９とセキュリティ演算部１１０の機能を実現する専用の電子回路である。
電子回路１１２は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＡＳＩＣ、または、ＦＰＧＡである。ＧＡは、Ｇａｔｅ  Ａｒｒａｙの略語である。ＡＳＩＣは、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略語である。ＦＰＧＡは、Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略語である。
主演算部１０９とセキュリティ演算部１１０の機能は、１つの電子回路で実現されてもよいし、複数の電子回路に分散して実現されてもよい。
別の変形例として、主演算部１０９とセキュリティ演算部１１０の一部の機能が電子回路で実現され、残りの機能がソフトウェアで実現されてもよい。また、主演算部１０９とセキュリティ演算部１１０の少なくとも一部の機能がファームウェアで実現されてもよい。
【００３８】
プロセッサと電子回路の各々は、プロセッシングサーキットリとも呼ばれる。つまり、ソフトウェア検証装置１００において、主演算部１０９とセキュリティ演算部１１０の一部の機能の機能は、プロセッシングサーキットリにより実現される。
【００３９】
＊＊＊本実施の形態の効果の説明＊＊＊
本実施の形態に係るソフトウェア検証装置１００によれば、複数のソフトウェアの完全性検証を高速化できる。また、本実施の形態に係るソフトウェア検証装置１００によれば、装置単体でのソフトウェアの完全性検証を実現できる。
本実施の形態に係るソフトウェア検証装置１００によれば、起動ソフトウェアのハッシュ値を、前回に起動したときのソフトウェアのハッシュ値と比較する。よって、起動のたびに、負荷のかかる署名検証を行う必要がなく、起動を高速化できる。さらに、前回に起動したときの起動ソフトウェアのハッシュ値を残しておくことで、ブート後にダウングレードされても、次回のブート時に検証可能となる。また、本実施の形態に係るソフトウェア検証装置１００によれば、起動ソフトウェアの検証が機器内部で閉じている。よって、装置単体での完全性検証が可能となる。
【００４０】
実施の形態２．
本実施の形態では、主に、実施の形態１と異なる点について説明する。なお、実施の形態１と同様の構成には同一の符号を付し、その説明を省略する場合がある。
【００４１】
＊＊＊構成の説明＊＊＊
実施の形態１では、ソフトウェア検証装置１００は、複数の起動ソフトウェアの各起動ソフトウェアのハッシュ値をセキュリティ演算部１１０の記憶部１１１に記憶し、ブート時に１つずつ検証する。本実施の形態では、複数の起動ソフトウェアの完全性をまとめて検証する方式を示す。ソフトウェア検証装置１００の構成は図１と同じである。また、本実施の形態におけるソフトウェア更新の動作は実施の形態１と同じである。
【００４２】
本実施の形態に係るソフトウェア検証装置１００は、複数の起動ソフトウェアを順に起動する。本実施の形態に係るソフトウェア検証装置１００は、複数の起動ソフトウェアからハッシュチェーンを生成するハッシュチェーンモードと、複数の起動ソフトウェアの各々について署名検証を行う署名検証モードとのいずれかの起動モードで起動する。
【００４３】
＊＊＊動作の説明＊＊＊
図６および図７を用いて、本実施の形態に係るソフトウェア検証装置１００のブートの動作について説明する。図６は、ハッシュチェーンモードの場合のブートの動作である。
【００４４】
本実施の形態において、ソフトウェア検証装置１００は、Ｎ個（Ｎは２以上の整数）の起動ソフトウェアを順に起動するものとする。ソフトウェア検証装置１００は、Ｎ個の起動ソフトウェアからハッシュチェーンを生成するハッシュチェーンモードと、Ｎ個の起動ソフトウェアの各々について署名検証を行う署名検証モードとのいずれかの起動モードで起動する。
ハッシュチェーンモードで起動されると、セキュリティ演算部１１０は、Ｎ個の起動ソフトウェアのうち１番目に起動される先起動ソフトウェアのハッシュ値を取得するとともにランダムなデータ列Ｎｏｎｃｅを生成する。セキュリティ演算部１１０は、先起動ソフトウェアのハッシュ値とＮｏｎｃｅとのハッシュ値を第１ハッシュチェーンとして生成する。
主演算部１０９は、第１ハッシュチェーンが生成されると、先起動ソフトウェアを起動する。
以下に具体例を用いて説明する。ここでは、Ｎ個の起動ソフトウェアとして、３個の起動ソフトウェアであるブートローダ、ＯＳ，およびアプリケーションを起動するものとする。
【００４５】
ステップＳ４０１において、電源が投入されると、セキュリティ演算部１１０は、ウォッチドッグを起動する。ウォッチドッグは、システムが正常に動作しているかどうかを監視する。
ステップＳ４０２において、セキュリティ演算部１１０は、Ｎｏｎｃｅを生成する。Ｎｏｎｃｅは再現性の無いランダムなデータ列である。
ステップＳ４０３において、主演算部１０９は、ブートＲＯＭ１０８に格納されているブートプログラムを実行する。主演算部１０９は、ブートプログラムにより、起動モードを確認する。起動モードがハッシュチェーンモードであれば、ステップＳ４０４に進む。起動モードが署名検証モードであれば、ステップＳ４１５に進む。
【００４６】
ステップＳ４０４において、主演算部１０９は、ブートローダのソフトウェアのハッシュ値を生成し、セキュリティ演算部１１０に出力する。ブートローダは、１番目に起動される先起動ソフトウェアの例である。
ステップＳ４０５において、セキュリティ演算部１１０は、主演算部１０９から取得したハッシュ値とＮｏｎｃｅとのハッシュ値を第１ハッシュチェーンとして生成する。セキュリティ演算部１１０は、第１ハッシュチェーンを主演算部１０９に出力する。
ステップＳ４０６において、主演算部１０９は、第１ハッシュチェーンが生成されると、先起動ソフトウェアであるブートローダを起動する。
【００４７】
主演算部１０９は、Ｎ個の起動ソフトウェアのうちｋ番目（ｋは２以上Ｎ以下の整数）に起動される次起動ソフトウェアのハッシュ値を取得する。セキュリティ演算部１１０は、第（ｋ−１）ハッシュチェーンと次起動ソフトウェアのハッシュ値とのハッシュ値を第ｋハッシュチェーンとして生成するするとともに次起動ソフトウェアを起動する。
ここでは、ｋ番目として２番目に起動される次起動ソフトウェアを、ＯＳとする。
【００４８】
ステップＳ４０７において、ブートローダは、ＯＳのソフトウェアのハッシュ値を生成する。そして、ブートローダは、第１ハッシュチェーンと、ＯＳのソフトウェアのハッシュ値とのハッシュ値を第２ハッシュチェーンとして生成する。
ステップＳ４０８において、主演算部１０９は、次起動ソフトウェアであるＯＳを起動する。
【００４９】
次に、ｋ番目として３番目に起動される次起動ソフトウェアを、アプリケーションとする。
ステップＳ４０９において、ＯＳは、アプリケーションのソフトウェアのハッシュ値を生成する。そして、ＯＳは、第２ハッシュチェーンと、アプリケーションのソフトウェアのハッシュ値とのハッシュ値を第３ハッシュチェーンとして生成する。
ステップＳ４１０において、主演算部１０９は、次起動ソフトウェアであるアプリケーションを起動する。
【００５０】
主演算部１０９は、次起動ソフトウェアがＮ個の起動ソフトウェアのうち最後に起動される起動ソフトウェアであれば、第ｋハッシュチェーンをセキュリティ演算部１１０に出力する。
セキュリティ演算部１１０は、Ｎ個の起動ソフトウェアの各々のハッシュ値が、セキュリティ演算部１１０内、すなわち記憶部１１１に記憶されていれば、第ｋハッシュチェーンの期待値をハッシュチェーン期待値として計算する。セキュリティ演算部１１０は、Ｎ個の起動ソフトウェアの各々のハッシュ値とＮｏｎｃｅとを用いて、ハッシュチェーン期待値を計算する。そして、セキュリティ演算部１１０は、第ｋハッシュチェーンをハッシュチェーン期待値と比較する。
主演算部１０９は、第ｋハッシュチェーンとハッシュチェーン期待値とが一致すれば正常終了し、一致しなければ処理を停止する。また、主演算部１０９は、Ｎ個の起動ソフトウェアの各々のハッシュ値が記憶部１１１に記憶されていなければ、起動モードを署名検証モードに設定して再起動する。
具体的には、以下の通りである。
【００５１】
ステップＳ４１１において、主演算部１０９は、セキュリティ演算部１１０に第３ハッシュチェーンを出力する。
【００５２】
ステップＳ４１２において、セキュリティ演算部１１０内のウォッチドッグは、所定のイベント発生前にハッシュ値を取得したかを検証する。所定のイベントとは例えば、起動からの経過時間であってもよいし、通信デバイスの使用といったイベントであってもよい。取得が検証されると、ステップＳ４１３に進む。取得が検証されなければ、主演算部１０９は、処理を停止する。
【００５３】
ステップＳ４１３において、セキュリティ演算部１１０は、内部で生成したＮｏｎｃｅと、記憶部１１１に記憶されたハッシュ値から、第３ハッシュチェーンの期待値をハッシュチェーン期待値として計算する。セキュリティ演算部１１０は、ハッシュチェーン期待値と、取得した第３ハッシュチェーンとを比較する。両者が一致すれば正常に終了する。一致しなければ、主演算部１０９は、処理を停止する。セキュリティ演算部１１０内の記憶部１１１にハッシュ値が未設定であれば、ステップＳ４１４において、主演算部１０９は、起動モードを署名検証モードに設定して再起動する。
【００５４】
図７は、署名検証モードの場合のブートの動作である。
主演算部１０９は、署名検証モードで起動されると、Ｎ個の起動ソフトウェアの各起動ソフトウェアについて署名検証を行う。そして、署名検証に成功すれば、主演算部１０９は、各起動ソフトウェアのハッシュ値をセキュリティ演算部１１０内の記憶部１１１に記憶するとともに各起動ソフトウェアを起動する。主演算部１０９は、署名検証に失敗すると処理を停止する。また、主演算部１０９は、Ｎ個の起動ソフトウェアの全ての署名検証に成功すると、起動モードをハッシュチェーンモードに設定する。
以下に具体例を用いて説明する。
【００５５】
ステップＳ４１５において、主演算部１０９は、ブートローダのソフトウェアの署名検証を行う。
署名検証に成功すれば、ステップＳ４１６において、主演算部１０９は、ブートローダのソフトウェアのハッシュ値を、セキュリティ演算部１１０内の記憶部１１１に記憶する。
ステップＳ４１７において、主演算部１０９は、ブートローダを起動する。署名検証に失敗すれば、主演算部１０９は、処理を停止する。
【００５６】
ステップＳ４１８において、ブートローダは、ＯＳのソフトウェアの署名検証を行う。
署名検証に成功すれば、ステップＳ４１９において、ブートローダは、ＯＳのソフトウェアのハッシュ値をセキュリティ演算部１１０内の記憶部１１１に記憶する。
ステップＳ４２０において、主演算部１０９は、ＯＳを起動する。署名検証に失敗すれば、主演算部１０９は、処理を停止する。
【００５７】
ステップＳ４２１において、ＯＳは、アプリケーションのソフトウェアの署名検証を行う。署名検証に成功すれば、ステップＳ４２２に進む。署名検証に失敗すれば、主演算部１０９は、処理を停止する。
ステップＳ４２２において、主演算部１０９は、アプリケーションのソフトウェアのハッシュ値をセキュリティ演算部１１０内の記憶部１１１に記憶する。
ステップＳ４２３において、主演算部１０９は、アプリケーションを起動する。
ステップＳ４２４において、ＯＳは、起動モードをハッシュチェーンに設定する。
ステップＳ４２５において、セキュリティ演算部１１０内のウォッチドッグは、所定のイベント発生前にハッシュ値を取得したかを検証する。所定のイベントとは例えば、起動からの経過時間であってもよいし、通信デバイスの使用といったイベントであってもよい。ハッシュ値を取得しなければ処理を停止する。
【００５８】
＊＊＊本実施の形態の効果の説明＊＊＊
本実施の形態に係るソフトウェア検証装置１００によれば、実施の形態１と同様の起動高速化、装置単体での完全性検証、およびダウングレードの検知が可能である。また、本実施の形態に係るソフトウェア検証装置１００によれば、ソフトウェアの完全性検証は最後に行われるので、通常アクセスにオーバーヘッドのかかるセキュリティ演算部へのアクセス回数を削減することができる。
【００５９】
実施の形態３．
本実施の形態では、主に、実施の形態１および２と異なる点について説明する。なお、実施の形態１および２と同様の構成には同一の符号を付し、その説明を省略する場合がある。
【００６０】
＊＊＊構成の説明＊＊＊
実施の形態１および実施の形態２では、前回起動時のソフトウェアのハッシュ値をセキュリティ演算部１１０内の不揮発メモリである記憶部１１１に記憶した。本実施の形態では、前回起動時のソフトウェアのハッシュ値を、安全性を保ちながら外部のストレージ１０３に格納できるようにする方式を示す。ハードウェア構成は図１と同じである。
【００６１】
＊＊＊動作の説明＊＊＊
次に、図８から図１１を用いて、本実施の形態に係るソフトウェア検証装置１００の動作について説明する。
図８から図１０は、本実施の形態におけるブートの動作を示す。以下に本実施の形態におけるブートの動作の概要について説明する。
主演算部１０９は、起動ソフトウェアのＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）の有無を判定し、ＭＡＣが存在すれば、起動ソフトウェアのハッシュ値と起動ソフトウェアのＭＡＣを出力する。
セキュリティ演算部１１０は、記憶部１１１に記憶されている構成検証鍵と起動ソフトウェアのハッシュ値からＭＡＣの期待値であるＭＡＣ期待値を計算し、主演算部１０９から出力されたＭＡＣとＭＡＣ期待値とを比較する。構成検証鍵とは、ＭＡＣを計算するための秘密鍵である。
主演算部１０９は、起動ソフトウェアのＭＡＣとＭＡＣ期待値とが一致すると、起動ソフトウェアを起動する。主演算部１０９は、起動ソフトウェアのＭＡＣとＭＡＣ期待値とが一致しなければ処理を停止する。
具体的には、以下の通りである。
【００６２】
ステップＳ５０１において、電源が投入されると、主演算部１０９は、ブートＲＯＭ１０８に格納されているブートプログラムを実行する。
ステップＳ５０２において、ブートプログラムは、ブートローダのＭＡＣの有無を判定する。ＭＡＣがあれば、ステップＳ５０３に進む。ＭＡＣがなければ、ステップＳ５０５に進む。
【００６３】
ステップＳ５０３において、ブートプログラムは、ブートローダのソフトウェアのハッシュ値とＭＡＣをセキュリティ演算部１１０に出力する。
ステップＳ５０４において、セキュリティ演算部１１０は、構成検証鍵とハッシュ値とからＭＡＣの期待値であるＭＡＣ期待値を計算する。セキュリティ演算部１１０は、ＭＡＣ期待値と、ブートプログラムから出力されたＭＡＣとを比較する。一致しなければ処理を停止する。一致すればステップＳ５０８に進む。
【００６４】
次に、主演算部１０９は、起動ソフトウェアにＭＡＣが存在しなければ、起動ソフトウェアの署名検証を行う。主演算部１０９は、署名検証に成功すれば、起動ソフトウェアのハッシュ値をセキュリティ演算部１１０に出力する。主演算部１０９は、署名検証に成功しなければ処理を停止する。
セキュリティ演算部１１０は、主演算部１０９から起動ソフトウェアのハッシュ値を取得すると、構成検証鍵の有無を判定する。構成検証鍵が存在すれば処理を停止する。構成検証鍵が存在しなければ、セキュリティ演算部１１０は、起動ソフトウェアのハッシュ値を記憶部１１１に一時記憶する。
具体的には、以下の通りである。
【００６５】
ステップＳ５０５において、ブートプログラムは、ブートローダのソフトウェアの署名を検証する。検証に失敗したら処理を停止する。検証に成功したら、ステップＳ５０６において、ブートプログラムは、ブートローダのソフトウェアのハッシュ値をセキュリティ演算部１１０に出力する。セキュリティ演算部１１０は、構成検証鍵の有無を判定し、構成検証鍵があれば処理を停止する。構成検証鍵が無ければ、ステップＳ５０７において、セキュリティ演算部１１０は、ハッシュ値を記憶部１１１に一時記憶する。
そして、ステップＳ５０８において、主演算部１０９は、ブートローダを起動する。
【００６６】
次に、ＯＳについてもブートローダと同様に起動される。
ステップＳ５０９において、ブートローダは、ＯＳのＭＡＣの有無を判定する。ＭＡＣがあれば、ステップＳ５１０に進む。ＭＡＣがなければ、ステップＳ５１２に進む。
ステップＳ５１０において、ブートローダは、ＯＳのソフトウェアのハッシュ値とＭＡＣをセキュリティ演算部１１０に出力する。
ステップＳ５１１において、セキュリティ演算部１１０内で構成検証鍵とハッシュからＭＡＣを計算し、ブートローダから出力されたＭＡＣと比較する。一致しなければ処理を停止する。一致すれば、ステップＳ５１５において、主演算部１０９は、ＯＳを起動する。
【００６７】
ステップＳ５０９においてＯＳにＭＡＣがなければ、ステップＳ５１２において、ブートローダは、ＯＳのソフトウェアの署名を検証する。署名検証に失敗したら処理を停止する。署名検証に成功したら、ステップＳ５１３に進む。
ステップＳ５１３において、ブートローダは、ＯＳのソフトウェアのハッシュ値をセキュリティ演算部１１０に出力する。セキュリティ演算部１１０は、構成検証鍵の有無を判定し、構成検証鍵があれば処理を停止する。構成検証鍵が無ければ、ステップＳ５１４において、セキュリティ演算部１１０は、ＯＳのハッシュ値を記憶部１１１に一時記憶する。
そして、ステップＳ５１５において、主演算部１０９は、ＯＳを起動する。
【００６８】
次に、アプリケーションについてもブートローダおよびＯＳと同様に起動される。
ステップＳ５１６において、ＯＳは、アプリケーションのＭＡＣの有無を判定する。ＭＡＣがあれば、ステップＳ５１７に進む。ＭＡＣがなければ、ステップＳ５１９に進む。
【００６９】
ステップＳ５１７において、ＯＳは、アプリケーションのソフトウェアのハッシュ値とＭＡＣをセキュリティ演算部１１０に出力する。
ステップＳ５１８において、セキュリティ演算部１１０内で構成検証鍵とハッシュ値からＭＡＣを計算し、ＯＳから出力されたＭＡＣと比較する。一致しなければ処理を停止する。一致すれば、ステップＳ５２２において、主演算部１０９でアプリケーションを起動する。
【００７０】
ステップＳ５１６においてアプリケーションにＭＡＣがなければ、ステップＳ５１９において、アプリケーションのソフトウェアの署名を検証する。署名検証に失敗したら処理を停止する。署名検証に成功したら、ステップＳ５２０において、ＯＳは、アプリケーションのソフトウェアのハッシュ値をセキュリティ演算部１１０に出力する。セキュリティ演算部１１０は、構成検証鍵の有無を判定し、構成検証鍵があれば処理を停止する。構成検証鍵が無ければ、ステップＳ５２１において、セキュリティ演算部１１０は、アプリケーションのハッシュ値を記憶部１１１に一時記憶する。
そして、ステップＳ５２２において、主演算部１０９でアプリケーションを起動する。
【００７１】
次に、セキュリティ演算部１１０は、全ての起動ソフトウェアの起動が完了すると、構成検証鍵を生成する。構成検証鍵を生成するとは、乱数を生成し、その乱数を構成検証鍵とすることである。そして、セキュリティ演算部１１０は、構成検証鍵と記憶部１１１に一時保存したハッシュ値とから、複数の起動ソフトウェアの各起動ソフトウェアのＭＡＣを算出する。
主演算部１０９は、複数の起動ソフトウェアの各起動ソフトウェアのＭＡＣを不揮発性のストレージ１０３に記憶する。
具体的には、以下の通りである。
【００７２】
ステップＳ５２３において、主演算部１０９は、起動すべき全ての起動ソフトウェアを起動したら、起動終了をセキュリティ演算部１１０に伝達する。
ステップＳ５２４において、セキュリティ演算部１１０は、記憶部１１１に一時記憶したハッシュ値の有無を判定し、無ければ正常終了する。記憶部１１１に一時記憶したハッシュ値があれば、ステップＳ５２５において、セキュリティ演算部１１０は構成検証鍵を生成する。
ステップＳ５２６において、セキュリティ演算部１１０は、構成検証鍵と、記憶部１１１に一時記憶した各起動ソフトウェアのハッシュ値から、各起動ソフトウェアのＭＡＣを計算し、主演算部１０９に出力する。
ステップＳ５２７において、主演算部１０９は、セキュリティ演算部１１０から取得した各起動ソフトウェアのＭＡＣをストレージ１０３に記憶する。
【００７３】
図１１は、本実施の形態におけるソフトウェア更新の動作を示す。以下に本実施の形態におけるソフトウェア更新の概要について説明する。
主演算部１０９は、更新ソフトウェアと更新ソフトウェアの署名を取得し、更新ソフトウェアの署名検証とバージョンチェックを行う。主演算部１０９は、更新ソフトウェアの署名検証とバージョンチェックが成功すると、更新前の起動ソフトウェアのハッシュ値を計算し、更新前の起動ソフトウェアのハッシュ値とストレージ１０３に記憶された更新前の起動ソフトウェアのＭＡＣとをセキュリティ演算部１１０に出力する。
セキュリティ演算部１１０は、主演算部１０９から出力されたハッシュ値と記憶部１１１に記憶されている更新検証鍵とから更新前の起動ソフトウェアのＭＡＣを計算する。セキュリティ演算部１１０は、計算したＭＡＣと、主演算部１０９から出力されたＭＡＣとを比較する。
セキュリティ演算部１１０により計算されたＭＡＣと、主演算部１０９から出力されたＭＡＣが全て一致すれば、主演算部１０９は、更新ソフトウェアと署名を書き込み、更新ソフトウェアのハッシュ値を計算する。主演算部１０９は、更新ソフトウェアのハッシュ値をセキュリティ演算部１１０に出力する。
セキュリティ演算部１１０は、検証構成鍵を再生成し、再生成した検証構成鍵と更新ソフトウェアのハッシュ値とを用いて、更新ソフトウェアのＭＡＣを計算する。検証構成鍵を再生成するとは、乱数を生成し、その乱数を構成検証鍵とすることである。
主演算部１０９は、更新ソフトウェアのＭＡＣをストレージ１０３に記憶する。
具体的には、以下の通りである。
【００７４】
ステップＳ６０１において、更新対象の更新ソフトウェアとその署名とがダウンロードされる。
ステップＳ６０２において、主演算部１０９は、更新ソフトウェアの署名とバージョンとを検証する。バージョン検証は、具体的には、リストによる照合といった手法を用いる。検証に失敗したら、主演算部１０９は、異常終了として処理を中止する。検証に成功したら、ステップＳ６０３に進む。
【００７５】
ステップＳ６０３において、主演算部１０９は、更新前の各起動ソフトウェアのハッシュ値を計算し、各起動ソフトウェアのハッシュ値と各起動ソフトウェアのＭＡＣをセキュリティ演算部１１０に出力する。更新前の各起動ソフトウェアのＭＡＣはストレージ１０３に記憶されている。
ステップＳ６０４において、セキュリティ演算部１１０は、構成検証鍵とハッシュ値からＭＡＣを計算する。セキュリティ演算部１１０は、計算したＭＡＣと、主演算部１０９から出力されたＭＡＣとを比較し、比較結果を主演算部１０９に返す。主演算部１０９は、１つでも結果が一致しないものがあれば処理を終了する。全て一致すれば、ステップＳ６０５において、主演算部１０９は、更新ソフトウェアと署名をストレージ１０３またはメモリ１０４に書き込む。
ステップＳ６０６において、主演算部１０９は書き込み後の各更新ソフトウェアのハッシュ値をセキュリティ演算部１１０に出力する。
ステップＳ６０７において、セキュリティ演算部１１０は、構成検証鍵を再生成する。
ステップＳ６０８において、セキュリティ演算部１１０は、再生成した構成検証鍵と、主演算部１０９から出力されたハッシュ値とから各更新ソフトウェアのＭＡＣを計算し、主演算部１０９に出力する。
ステップＳ６０９において、主演算部１０９は、セキュリティ演算部１１０から取得した各更新ソフトウェアのＭＡＣをストレージ１０３に記憶する。
【００７６】
＊＊＊本実施の形態の効果の説明＊＊＊
本実施の形態に係るソフトウェア検証装置１００によれば、実施の形態１と同様の起動高速化、装置単体での完全性検証、ダウングレードの検知が可能である。また、本実施の形態に係るソフトウェア検証装置１００によれば、期待値を非セキュアな領域、すなわちストレージに記憶しても、改ざんあるいは消去、および、ダウングレードといった攻撃を検知可能である。また、ＭＡＣをストレージに外だしできるため、セキュリティ演算部の格納領域に制限がある場合にも有効である。
本実施の形態に係るソフトウェア検証装置１００によれば、万が一、不正にＭＡＣが改ざんされたり、消去されたりしても、構成検証鍵によるＭＡＣ検証あるいは構成検証鍵の有無を判定することで、ＭＡＣの不正な改ざんあるいは消去による不正プログラムの起動およびダウングレードを検証可能となる。
【００７７】
実施の形態４．
本実施の形態では、主に、実施の形態１から３と異なる点について説明する。なお、実施の形態１から３と同様の構成には同一の符号を付し、その説明を省略する場合がある。
【００７８】
＊＊＊構成の説明＊＊＊
実施の形態１から３では、公開鍵演算の削減、すなわち署名検証の削減により、処理の高速化という効果を得られた。本実施の形態では、公開鍵演算を高速に演算できるプロセッサにおいて、ダウングレードを防止する方式を示す。ハードウェア構成は図１と同じである。
【００７９】
＊＊＊動作の説明＊＊＊
次に、図１２から図１３を用いて、本実施の形態に係るソフトウェア検証装置１００の動作について説明する。
図１２は、本実施の形態におけるブートの動作を示す。以下に本実施の形態におけるブートの動作の概要について説明する。
セキュリティ演算部１１０は、複数の起動ソフトウェアのうち起動対象の起動ソフトウェアの署名検証を行い、署名検証に成功すれば起動ソフトウェアのハッシュ値を計算し、記憶部１１１に一時記憶する。
主演算部１０９は、署名検証に成功しなければ処理を停止する。一方、署名検証に成功すると、主演算部１０９は、起動ソフトウェアを起動する。
主演算部１０９は、複数の起動ソフトウェアの最後の起動ソフトウェアを起動すると、一時記憶された全てのハッシュ値を加算し、加算結果を出力する。
セキュリティ演算部１１０は、記憶部１１１に加算結果の期待値である加算結果期待値が記憶されているかを判定し、加算結果期待値が無ければ、加算結果を加算結果期待値として記憶部１１１に記憶する。一方、加算結果期待値が存在すれば、セキュリティ演算部１１０は、主演算部１０９から出力された加算結果と加算結果期待値とを比較する。
主演算部１０９は、加算結果と加算結果期待値とが一致しなければ処理を停止する。加算結果と加算結果期待値とが一致すれば正常終了する。
具体的には、以下の通りである。
【００８０】
ステップＳ７０１において、電源が投入されると、主演算部１０９はブートＲＯＭに格納されているブートプログラムを実行する。
ステップＳ７０２において、ブートプログラムは、ブートローダのソフトウェアの署名を検証する。署名検証が成功すれば、ステップＳ７０３において、ブートプログラムは、ブートローダのソフトウェアのハッシュ値を生成する。そして、ステップＳ７０４において、主演算部１０９は、ブートローダを起動する。署名検証が成功しなければ、主演算部１０９は、処理を停止する。
【００８１】
ステップＳ７０５において、ブートローダは、ＯＳのソフトウェアの署名を検証する。署名検証が成功すれば、ステップＳ７０６において、ブートローダは、ＯＳのソフトウェアのハッシュ値を生成する。そして、ステップＳ７０７において、主演算部１０９は、ＯＳを起動する。署名検証が成功しなければ、主演算部１０９は、処理を停止する。
ステップＳ７０８において、ＯＳは、アプリケーションのソフトウェアの署名を検証する。署名検証に成功すれば、ステップＳ７０９において、ＯＳは、アプリケーションのソフトウェアのハッシュ値を生成する。そして、ステップＳ７１０において、主演算部１０９は、アプリケーションを起動する。署名検証が成功しなければ、主演算部１０９は、処理を停止する。
【００８２】
ここで、アプリケーションは、複数の起動プログラムのうち最後に起動されるプログラムである。
ステップＳ７１１において、アプリケーションは、これまでに生成したハッシュ値を加算し、加算結果をセキュリティ演算部１１０に出力する。加算には排他的論理和を用いる。ステップＳ７１２において、セキュリティ演算部１１０は、記憶部１１１に加算結果の期待値である加算結果期待値が記憶されているか否かを判定する。記憶部１１１に加算結果期待値がなければ、ステップＳ７１３において、アプリケーションから出力された加算結果を加算結果期待値として記憶部１１１に記憶して終了する。ステップＳ７１４において、記憶部１１１に加算結果期待値があれば、セキュリティ演算部１１０は、加算結果期待値と主演算部１０９から出力された加算結果とを比較する。両者が一致すれば正常終了する。両者が一致しなければ処理を停止する。
【００８３】
図１３は本実施の形態におけるソフトウェア更新の動作を示す。以下に本実施の形態におけるソフトウェア更新の概要について説明する。
セキュリティ演算部１１０は、複数の更新ソフトウェアの各々と、複数の更新ソフトウェアの各々の署名を取得し、更新前の各起動ソフトウェアのハッシュ値を加算した加算結果を算出する。そして、セキュリティ演算部１１０は、算出した加算結果と加算結果期待値とを比較する。
主演算部１０９は、加算結果と加算結果期待値とが一致しなければ、異常終了として処理を停止する。一方、主演算部１０９は、加算結果と加算結果期待値とが一致すれば、複数の更新ソフトウェアの各々と複数の更新ソフトウェアの各々の署名をストレージ１０３またはメモリ１０４に書き込む。
セキュリティ演算部１１０は、更新後の各更新ソフトウェアのハッシュ値を計算する。セキュリティ演算部１１０は、各更新ソフトウェアのハッシュ値を加算した加算結果を加算結果期待値として記憶部１１１に記憶するとともに、複数の起動ソフトウェアの各々のハッシュ値を記憶部１１１に記憶する。
具体的には、以下の通りである。
【００８４】
ステップＳ８０１において、更新対象の更新ソフトウェアと署名がダウンロードされる。ステップＳ８０２において、主演算部１０９は、更新ソフトウェアの署名とバージョンを検証する。バージョン検証はリストによる照合といった手法でよい。検証に失敗したら、主演算部１０９は、異常終了として処理を停止する。検証に成功したら、ステップＳ８０３において、主演算部１０９は、更新前の各起動ソフトウェアのハッシュ値を計算する。ステップＳ８０４において、主演算部１０９は、計算したハッシュを加算してセキュリティ演算部１１０に出力する。加算には排他的論理和を用いる。ステップＳ８０５において、セキュリティ演算部１１０は、出力された加算結果と、記憶部１１１に記憶された加算結果期待値を比較し、結果を主演算部１０９に返す。
主演算部１０９は、結果が一致しなければ処理を異常終了する。結果が一致すれば、ステップＳ８０６において、主演算部１０９は、更新ソフトウェアと署名をストレージ１０３またはメモリ１０４に書き込む。ステップＳ８０７において、主演算部１０９は、更新後の更新ソフトウェアのハッシュ値を計算する。ステップＳ８０８において、ステップＳ８０３で計算した更新前の起動ソフトウェアのハッシュ値と、ステップＳ８０４で計算した加算結果と、ステップＳ８０７で計算した更新後の更新ソフトウェアのハッシュ値を加算する。ステップＳ８０９において、主演算部１０９は、ステップＳ８０８で算出された加算結果をセキュリティ演算部１１０に出力する。ステップＳ８１０において、セキュリティ演算部１１０は、ステップＳ８０８で算出された加算結果を記憶部１１１に記憶する。
【００８５】
本実施の形態では、加算に排他的論理和を用いる例を示した。しかし、例えば算術加算といった任意の算法を用いてよい。また、更新後の更新ソフトウェアにおける第１加算結果の算出方法も使用する算法に合わせる必要がある。
【００８６】
＊＊＊本実施の形態の効果の説明＊＊＊
本実施の形態に係るソフトウェア検証装置１００によれば、前回実行時の各ソフトウェアの加算結果を残しておくことで、ブート後にダウングレードされても、次回のブート時に検証可能となる。また、本実施の形態に係るソフトウェア検証装置１００によれば、各ソフトウェアのハッシュ値をセキュリティ演算部に記憶する方式に比べ、セキュリティ演算部へのアクセス回数を減らすことで、処理の高速化が期待できる。さらに、本実施の形態に係るソフトウェア検証装置１００によれば、検証が機器内部に閉じるため、装置単体での完全性検証が可能となる。さらに、ハッシュ値の加算に排他的論理和を用いることで、ソフトウェア更新時の更新後の加算結果の計算を容易にできる。
【００８７】
実施の形態５．
本実施の形態では、主に、実施の形態１から４と異なる点について説明する。なお、実施の形態１から４と同様の構成には同一の符号を付し、その説明を省略する場合がある。
【００８８】
＊＊＊構成の説明＊＊＊
実施の形態４では、公開鍵演算を高速に演算できるプロセッサにおいて、ダウングレードを防止する方式を示した。本実施の形態では、さらにハッシュを、安全性を保ちながら外部のストレージ１０３に記憶できるようにする方式を示す。ハードウェア構成は図１と同じである。
【００８９】
＊＊＊動作の説明＊＊＊
次に、図１４から図１６を用いて、本実施の形態に係るソフトウェア検証装置１００の動作について説明する。
図１４から図１５は、本実施の形態におけるブートの動作を示す。以下に本実施の形態におけるブートの動作の概要について説明する。
主演算部１０９は、複数の起動ソフトウェアのうち起動対象の起動ソフトウェアの署名検証を行う。署名検証に成功すれば、主演算部１０９は、起動ソフトウェアのハッシュ値を計算し、セキュリティ演算部１１０内の記憶部１１１に一時記憶するとともに、起動ソフトウェアを起動する。
主演算部１０９は、署名検証に成功しなければ処理を停止する。
主演算部１０９は、複数の起動ソフトウェアの最後の起動ソフトウェアを起動すると、記憶部１１１に一時記憶された全てのハッシュ値を加算し、加算結果を出力する。また、主演算部１０９は、加算結果のＭＡＣの有無を判定し、加算結果にＭＡＣが存在すれば、加算結果と加算結果のＭＡＣを出力する。
セキュリティ演算部１１０は、記憶部１１１に予め記憶されている構成検証鍵と、主演算部１０９から出力された加算結果からＭＡＣの期待値であるＭＡＣ期待値を計算する。そして、セキュリティ演算部１１０は、ＭＡＣ期待値と、主演算部１０９から出力されたＭＡＣとを比較する。
主演算部１０９は、ＭＡＣ期待値と主演算部１０９から出力されたＭＡＣとが一致しなければ処理を停止し、ＭＡＣ期待値と主演算部１０９から出力されたＭＡＣとが一致すれば、正常終了する。
セキュリティ演算部１１０は、加算結果にＭＡＣが存在しなければ、記憶部１１１に構成検証鍵が存在するかを判定する。構成検証鍵が記憶されていなければ、セキュリティ演算部１１０は、構成検証鍵を生成する。そして、セキュリティ演算部１１０は、構成検証鍵と加算結果から加算結果のＭＡＣを生成する。
構成検証鍵が記憶されていると、主演算部１０９は、処理を停止する。一方、加算結果のＭＡＣが生成されると、主演算部１０９は、加算結果のＭＡＣをストレージ１０３に記憶する。
具体的には、以下の通りである。
【００９０】
ステップＳ９０１において、電源が投入されると、主演算部１０９は、ブートＲＯＭに格納されているブートプログラムを実行する。
ステップＳ９０２において、ブートプログラムは、ブートローダのソフトウェアの署名を検証する。署名検証に成功すれば、ブートプログラムは、ブートローダのソフトウェアのハッシュ値を生成し（ステップＳ９０３）、ブートローダを起動する（ステップＳ９０４）。署名検証に失敗すれば、ブートプログラムは、処理を停止する。
ステップＳ９０５において、ブートローダは、ＯＳのソフトウェアの署名を検証する。署名検証に成功すれば、ブートローダは、ＯＳのソフトウェアのハッシュ値を生成し（ステップＳ９０６）、ＯＳを起動する（ステップＳ９０７）。署名検証に失敗すれば、ブートローダは、処理を停止する。
ステップＳ９０８において、ＯＳは、アプリケーションのソフトウェアの署名を検証する。署名検証に成功すれば、ＯＳは、アプリケーションのソフトウェアのハッシュ値を生成し（ステップＳ９０９）、アプリケーションを起動する（ステップＳ９１０）。署名検証に失敗すれば、ＯＳは、処理を停止する。
【００９１】
ステップＳ９１１において、アプリケーションはこれまでに生成したハッシュを加算する。加算には排他的論理和を用いる。ステップＳ９１２において、アプリケーションは、記憶されたＭＡＣの有無を判定する。記憶されたＭＡＣがあれば、ステップＳ９１３において、アプリケーションは、加算結果とＭＡＣをセキュリティ演算部１１０に出力する。記憶されたＭＡＣが無ければ、ステップＳ９１５において、アプリケーションは、加算結果をセキュリティ演算部１１０に出力する。
【００９２】
ステップＳ９１４において、加算結果とＭＡＣを受け取ったセキュリティ演算部１１０は、構成検証鍵と加算結果からＭＡＣをＭＡＣ期待値として計算し、アプリケーションから出力されたＭＡＣと比較する。両者が一致すれば正常終了し、両者が一致しなければ処理を停止する。
【００９３】
一方、加算結果を受け取ったセキュリティ演算部１１０は、構成検証鍵の有無を確認し、構成検証鍵があれば処理を停止する。構成検証鍵が無ければ、ステップＳ９１６において、セキュリティ演算部１１０は、構成検証鍵を生成する。ステップＳ９１７において、セキュリティ演算部１１０は、構成検証鍵と加算結果からＭＡＣを計算し、主演算部１０９に出力する。ステップＳ９１８において、主演算部１０９はＭＡＣを不揮発性のストレージ１０３に記憶し、正常終了する。不正な削除からＭＡＣを保護するため、ＭＡＣは、ストレージ１０３ではなく、セキュリティ演算部１１０の記憶部１１１に記憶してもよい。
【００９４】
図１６は本実施の形態におけるソフトウェア更新の動作を示す。以下に本実施の形態におけるソフトウェア更新の概要について説明する。
主演算部１０９は、複数の更新ソフトウェアの各々と複数の更新ソフトウェアの各々の署名を取得する。そして、主演算部１０９は、更新前の各起動ソフトウェアのハッシュ値を加算した加算結果とその加算結果のＭＡＣを算出する。主演算部１０９は、更新前の各起動ソフトウェアのハッシュ値を加算した加算結果とその加算結果のＭＡＣを出力する。
セキュリティ演算部１１０は、構成検証鍵と加算結果からＭＡＣをＭＡＣ期待値として計算し、加算結果のＭＡＣとＭＡＣ期待値とを比較する。
主演算部１０９は、加算結果のＭＡＣとＭＡＣ期待値が一致しなければ、処理を停止する。一方、加算結果のＭＡＣとＭＡＣ期待値が一致すれば、主演算部１０９は、複数の更新ソフトウェアの各々と複数の更新ソフトウェアの各々の署名をストレージ１０３またはメモリ１０４に書き込む。
主演算部１０９は、更新後の各更新ソフトウェアのハッシュ値を計算し、更新前の各起動ソフトウェアのハッシュ値と、更新前の各起動ソフトウェアのハッシュ値を加算した加算結果と、更新後の各更新ソフトウェアのハッシュ値を第１加算結果として加算する。主演算部１０９は、第１加算結果をセキュリティ演算部１１０に出力する。
セキュリティ演算部１１０は、構成検証鍵を再生成し、構成検証鍵と第１加算結果とから第１加算結果のＭＡＣを計算する。
主演算部１０９は、第１加算結果のＭＡＣをストレージ１０３に記憶する。
具体的には、以下の通りである。
【００９５】
ステップＳ１００１からステップＳ１００３の処理は、ステップＳ８０１からステップＳ８０３の処理と同様である。
ステップＳ１００４において、主演算部１０９は、更新前の各起動ソフトウェアのハッシュ値を加算し、ＭＡＣとともにセキュリティ演算部１１０に出力する。加算には排他的論理和を用いる。ステップＳ１００５において、セキュリティ演算部１１０は、主演算部１０９から出力された加算結果と構成検証鍵からＭＡＣを計算し、主演算部１０９から出力されたＭＡＣと比較する。セキュリティ演算部１１０は、比較結果を主演算部１０９に返す。
主演算部１０９は、比較結果が一致でなければ処理を終了する。比較結果が一致であれば、ステップＳ１００６において、主演算部１０９は、更新ソフトウェアと署名をストレージ１０３またはメモリ１０４に書き込む。ステップＳ１００７において、主演算部１０９は、更新後の各更新ソフトウェアのハッシュ値を計算する。ステップＳ１００８において、ステップＳ１００３で計算した更新前の各起動ソフトウェアのハッシュ値と、ステップＳ１００４で計算した加算結果と、ステップＳ１００７で計算した更新後の各更新ソフトウェアのハッシュ値を第１加算結果として加算する。ステップＳ１００９において、主演算部１０９は、第１加算結果をセキュリティ演算部１１０に出力する。ステップＳ１０１０において、セキュリティ演算部１１０は、構成検証鍵を再生成する。ステップＳ１０１１において、セキュリティ演算部１１０は、構成検証鍵と第１加算結果からＭＡＣを計算し、主演算部１０９に出力する。ステップＳ１０１２において、主演算部１０９は、第１加算結果のＭＡＣをストレージ１０３に記憶する。不正な削除からＭＡＣを保護するため、ＭＡＣをストレージ１０３ではなく、セキュリティ演算部１１０の記憶部１１１に格納してもよい。
【００９６】
本実施の形態では加算に排他的論理和を用いる例を示した。しかし、例えば算術加算といった任意の算法を用いてよい。また、ソフトウェア更新後の更新ソフトウェアにおける加算結果の算出方法も使用する算法に合わせる必要がある。
【００９７】
＊＊＊本実施の形態の効果の説明＊＊＊
本実施の形態に係るソフトウェア検証装置１００によれば、実施の形態４の効果に加え、ＭＡＣをストレージに外だしできるため、セキュリティ演算部の格納領域に制限がある場合にも有効である。
本実施の形態に係るソフトウェア検証装置１００によれば、構成検証鍵によるＭＡＣ検証、あるいは、構成検証鍵の有無の判定を行っている。よって、本実施の形態に係るソフトウェア検証装置１００によれば、万が一、不正にＭＡＣが改ざんされたり、消去されたりしても、ＭＡＣの不正な改ざん、あるいは消去による不正プログラムの起動あるいはダウングレードが検証可能となる。
【００９８】
以上の実施の形態１から５では、ソフトウェア検証装置の各部を独立した機能ブロックとして説明した。しかし、ソフトウェア検証装置の構成は、上述した実施の形態のような構成でなくてもよい。ソフトウェア検証装置の機能ブロックは、上述した実施の形態で説明した機能を実現することができれば、どのような構成でもよい。また、ソフトウェア検証装置は、１つの装置でなく、複数の装置から構成されたシステムでもよい。
また、実施の形態１から５のうち、複数の部分を組み合わせて実施しても構わない。あるいは、これらの実施の形態のうち、１つの部分を実施しても構わない。その他、これら実施の形態を、全体としてあるいは部分的に、どのように組み合わせて実施しても構わない。
すなわち、実施の形態１から５では、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
【００９９】
なお、上述した実施の形態は、本質的に好ましい例示であって、本発明の範囲、本発明の適用物の範囲、および本発明の用途の範囲を制限することを意図するものではない。上述した実施の形態は、必要に応じて種々の変更が可能である。
【符号の説明】
【０１００】
１００  ソフトウェア検証装置、１０２  プロセッサ、１０３  ストレージ、１０４  メモリ、１０４  メモリ、１０５  通信デバイス、１０６  入力デバイス、１０７  表示デバイス、１０８  ブートＲＯＭ、１０９  主演算部、１１０  セキュリティ演算部、１１１  記憶部、１１２  電子回路。
【図１】
0006925542.tif 000002
【図２】
0006925542.tif 000003
【図３】
0006925542.tif 000004
【図４】
0006925542.tif 000005
【図５】
0006925542.tif 000006
【図６】
0006925542.tif 000007
【図７】
0006925542.tif 000008
【図８】
0006925542.tif 000009
【図９】
0006925542.tif 000010
【図１０】
0006925542.tif 000011
【図１１】
0006925542.tif 000012
【図１２】
0006925542.tif 000013
【図１３】
0006925542.tif 000014
【図１４】
0006925542.tif 000015
【図１５】
0006925542.tif 000016
【図１６】
0006925542.tif 000017