(57)【要約】【課題】高速にセキュアブートを行うセキュアブート方法、半導体装置、及び、セキュアブートプログラムを提供することにある。【解決手段】システムのセキュアブート方法であって、システムは、プロセッサと、プログラム、プログラムが区分された複数の部分プログラムの複数の第１の部分ハッシュ値、及び、複数の第１の部分ハッシュ値のハッシュ値である、部分ハッシュ値の正解ハッシュ値が記憶された記憶媒体と、を有し、システムの起動時に、プロセッサが、記憶媒体に記憶される複数の第１の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値を算出する第１の算出工程と、プロセッサが、部分ハッシュ値の算出ハッシュ値が部分ハッシュ値の正解ハッシュ値と一致するか否か判定し、一致する場合にシステムの起動処理を継続し、一致しない場合にシステムの起動処理を中断する第１の制御工程と、を有する。【選択図】図３
2015055898.tif 000002
【特許請求の範囲】
【請求項１】
システムのセキュアブート方法であって、
前記システムは、プロセッサと、プログラム、前記プログラムが区分された複数の部分プログラムの複数の第１の部分ハッシュ値、及び、前記複数の第１の部分ハッシュ値が前記プログラムに対応する場合における複数の第１の部分ハッシュ値のハッシュ値である、部分ハッシュ値の正解ハッシュ値が記憶された記憶媒体と、を有し、
前記システムの起動時に、前記プロセッサが、前記記憶媒体に記憶される前記複数の第１の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値を算出する第１の算出工程と、
前記プロセッサが、前記部分ハッシュ値の算出ハッシュ値が前記部分ハッシュ値の正解ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する第１の制御工程と、を有するセキュアブート方法。
【請求項２】
請求項１において、
前記システムの起動後、前記プロセッサが、起動中のシステムのプログラムが区分された複数の部分プログラムのハッシュ値である、複数の第２の部分ハッシュ値を算出する第２の算出工程と、
前記プロセッサが、前記算出した複数の第２の部分ハッシュ値が、前記記憶媒体に記憶される前記複数の第１の部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムの実行処理を継続し、一致しない場合に前記システムの実行処理を中断する第２の制御工程と、を有するセキュアブート方法。
【請求項３】
請求項２において、
前記第２の算出工程、及び、前記第２の制御工程は、前記複数の部分プログラム全てについて分割して行われるセキュアブート方法。
【請求項４】
請求項２または３において、
前記第２の算出工程、及び、前記第２の制御工程は、前記システムの起動後、前記システムが低負荷状態のときに行われるセキュアブート方法。
【請求項５】
請求項４において、
前記システムが低負荷状態のときは、前記システムがアイドル状態である時、前記システムの終了時のいずれかまたは両方であるセキュアブート方法。
【請求項６】
請求項１乃至５のいずれかにおいて、
前記プロセッサが、前記システムのプログラムを新たなプログラムに更新する第１の更新工程と、
前記プロセッサが、前記新たなプログラムに対応する複数の第１の部分ハッシュ値、及び、部分ハッシュ値の正解ハッシュ値を取得する取得工程と、
前記プロセッサが、前記新たなプログラムが区分された複数の部分プログラムの複数の第３の部分ハッシュ値、及び、前記複数の第３の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値を算出する第３の算出工程と、
前記プロセッサが、前記算出した複数の第３の部分ハッシュ値が前記取得した前記複数の第１の部分ハッシュ値と一致するか否か、及び、前記算出した部分ハッシュ値の算出ハッシュ値が前記取得した部分ハッシュ値の正解ハッシュ値と一致するか否かの２つを判定し、前記２つの判定のいずれもが一致する場合に前記システムのアップデート処理を継続し、前記２つの判定の少なくとも一方が一致しない場合に前記システムのアップデート処理を中断する第３の制御工程と、を有するセキュアブート方法。
【請求項７】
請求項１乃至５のいずれかにおいて、
前記プロセッサが、前記システムのプログラムを新たなプログラムに更新する第１の更新工程と、
前記プロセッサが、前記新たなプログラムに対応する複数の第１の部分ハッシュ値、及び、部分ハッシュ値の正解ハッシュ値を取得する取得工程と、
前記プロセッサが、前記システムの再起動を指示する再起動工程と、を有するセキュアブート方法。
【請求項８】
請求項１乃至７のいずれかにおいて、
前記複数の部分ハッシュ値の数はｎ個であって、前記ｎ個の部分ハッシュ値のうちのｍ個の部分ハッシュ値に基づいて1個の部分ハッシュ値の算出ハッシュ値が算出され、前記ｎ個の部分ハッシュ値に基づいてｎ／ｍ個の部分ハッシュ値の算出ハッシュ値が算出されるセキュアブート方法。
【請求項９】
プロセッサと、
プログラム、前記プログラムが区分された複数の部分プログラムの複数の第１の部分ハッシュ値、及び、前記複数の第１の部分ハッシュ値が前記プログラムに対応する場合における複数の第１の部分ハッシュ値のハッシュ値である、部分ハッシュ値の正解ハッシュ値が記憶される記憶媒体と有し、
前記プロセッサが、
前記システムの起動時に、前記記憶媒体に記憶される前記複数の第１の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値を算出する第１の算出処理と、
前記部分ハッシュ値の算出ハッシュ値が前記部分ハッシュ値の正解ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する第１の制御処理と
を実行する半導体装置。
【請求項１０】
システムのセキュアブート処理をコンピューターに実行させるコンピューター読み取り可能なセキュアブートプログラムであって、
前記システムは、プロセッサと、プログラム、前記プログラムが区分された複数の部分プログラムの複数の第１の部分ハッシュ値、及び、前記複数の第１の部分ハッシュ値が前記プログラムに対応する場合における複数の第１の部分ハッシュ値のハッシュ値である、部分ハッシュ値の正解ハッシュ値が記憶された記憶媒体と、を有し、
前記セキュアブート処理は、
前記システムの起動時に、前記プロセッサが、前記記憶媒体に記憶される前記複数の第１の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値を算出する第１の算出処理と、
前記プロセッサが、前記部分ハッシュ値の算出ハッシュ値が前記部分ハッシュ値の正解ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する第１の制御処理と、を有するセキュアブートプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、セキュアブート方法、半導体装置、及び、セキュアブートプログラムに関する。
【背景技術】
【０００２】
人命を預かる自動車や、電子マネーを扱う組み込み端末、あるいは、コンテンツデータを扱うゲーム機等の組み込み機器において重要なデータを処理する機会が増加している。このような機器では、ＯＳやファームウェアが悪意ある第三者によって改ざんされ、予期せぬ動作を引き起こされる危険性が存在する。これに対し、開発者の意図したＯＳやファームェアのみを動作させる手法としてセキュアブートという手法が存在する。
【０００３】
また、一般的な組み込み機器の起動時、初めブートＲＯＭが呼び出され、記述されたコードを順に実行する。その後、ファームウェアなどのブートＲＯＭより詳細な処理が呼び出され、さらにＯＳなどの複雑な処理が呼び出される。このように呼び出し順に、より複雑な処理が順次呼び出される。
【０００４】
そこで、組み込み機器のセキュアブート時には、ＲＯＭ（ブートＲＯＭ）などの書き換えられない部品を信頼の原点とし、子プロセスとして、ファームウェアが呼び出される際に、ファームウェアのハッシュ値が算出される。そして、算出されたハッシュ値と、予めＲＯＭに格納されたファームウェアの正解ハッシュ値と一致する場合に、適正なファームウェアであるとして起動される。続いて、さらに孫プロセスとして、ＯＳが呼び出される際に、ＯＳのプログラムのハッシュ値が算出される。そして、算出されたハッシュ値と、予め子プロセスに格納されるＯＳのプログラムの正解ハッシュ値と一致する場合に、適正なＯＳであるとして起動される。
【０００５】
セキュアブート工程において、このような処理が繰り返されることによって、開発者が意図したプログラムのみの実行が可能になる。ハッシュ値を使用するシステムについては、例えば、特許文献１に記載される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−２６５４２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一般的に、プログラムのサイズは、ブートＲＯＭ、ファームウェア、ＯＳのように、呼び出す順に従って大きくなっていく。このため、例えばＯＳのプログラムのサイズは、数百メガバイトに及ぶことがある。しかしながら、プログラムのサイズが大きい場合、一般的に組み込み機器環境におけるＣＰＵ等の処理能力が乏しいことから、プログラムのハッシュ値の算出処理が高負荷となり、ＯＳの起動に非常に時間がかかる。
【０００８】
そこで、本発明は、高速にセキュアブートを行うセキュアブート方法、半導体装置、及び、セキュアブートプログラムを提供する。
【課題を解決するための手段】
【０００９】
第１の側面は、システムのセキュアブート方法であって、前記システムは、プロセッサと、プログラム、前記プログラムが区分された複数の部分プログラムの複数の第１の部分ハッシュ値、及び、前記複数の第１の部分ハッシュ値が前記プログラムに対応する場合における複数の第１の部分ハッシュ値のハッシュ値である、部分ハッシュ値の正解ハッシュ値が記憶された記憶媒体と、を有し、前記システムの起動時に、前記プロセッサが、前記記憶媒体に記憶される前記複数の第１の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値を算出する第１の算出工程と、前記プロセッサが、前記部分ハッシュ値の算出ハッシュ値が前記部分ハッシュ値の正解ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する第１の制御工程と、を有する。
【発明の効果】
【００１０】
第１の側面によれば、セキュアブートが高速に行われる。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態例における半導体装置の構成の一例を示す図である。
【図２】一般的なセキュアブートの流れについて説明する図である。
【図３】本実施の形態例におけるセキュアブート方法の起動時の工程を説明する図である。
【図４】セキュアブート方法の起動時の工程を説明するフローチャート図である。
【図５】本実施の形態例におけるセキュアブート方法の起動後の工程を説明する図である。
【図６】セキュアブート方法の起動後の工程を説明するフローチャート図である。
【図７】本実施の形態例のセキュアブート方法のアップデート工程を説明する図である。
【図８】セキュアブート方法のアップデート工程を説明するフローチャート図である。
【図９】セキュアブート方法のアップデート工程を説明する第２のフローチャート図である。
【図１０】第２の実施の形態例のセキュアブート方法の起動時の工程を説明する図である。
【図１１】第２の実施の形態例における起動時の工程を説明するフローチャート図である。
【図１２】第２の実施の形態例における起動後の工程の概要を説明する図である。
【図１３】第２の実施の形態例におけるアップデート工程を説明する図である。
【図１４】第２の実施の形態例のアップデート工程を説明するフローチャート図である。
【図１５】セキュアブート方法をハードウェアによって実現した半導体装置の構成の一例である。
【発明を実施するための形態】
【００１２】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１３】
［半導体装置の構成］
図１は本実施の形態例における半導体装置１０の構成の一例を示す図である。半導体装置１０は、例えば、組み込み機器の半導体装置１０である。図１の半導体装置１０は、例えば、ＣＰＵ（Central Processing Unit）１２、ブートＲＯＭ（Read Only Memory）１４、フラッシュメモリ１５、ＲＡＭ（Random Access Memory）１６、インタフェース１１、外部インタフェース１３を有する。各部は、バス１７を介して互いに接続される。
【００１４】
ブートＲＯＭ１４には、半導体装置１０の電源投入時に最初に動作するＩＰＬ（Initial Program Loader）、フラッシュメモリ１５のデバイスドライバ起動用のプログラム等が格納される。また、フラッシュメモリ１５には、オペレーション・システム（以下、ＯＳ）９０、ファームウェア８０のプログラム、セキュアブート用のハッシュ値９１Ｈａ〜９ｎＨａ、ＨＳａ等が記憶される。フラッシュメモリ１５は、ＨＤＤ等の別の記憶媒体であってもよい。インタフェース１１は、外部の機器とのデータの入出力を制御する。例えば、インタフェース１１を介して、ＯＳのプログラム９０のアップデートデータ等が入力される。また、外部インタフェース１３は、入力装置５１、及び、出力装置５２とのデータの入出力を制御する。
【００１５】
［セキュアブートの流れ］
図２は、一般的なセキュアブートの流れについて説明する図である。セキュアブートでは、起動対象のファームウェア８０やＯＳ９０が信頼できるものであることが確認された場合に、起動処理が行われる。そこで、例えば、ブートＲＯＭ１４に、ファームウェア８０が真正であることを検証するためのファームウェアの正解ハッシュ値Ｈ１が書き込まれる。また、ファームウェア８０内部に、ＯＳ９０が改ざんされていないことを検証するためのＯＳ９０の正解ハッシュ値Ｈ２が書き込まれる。
【００１６】
ハッシュ値は、ハッシュ関数によって、任意の長さのデータが演算されることによって出力される固定長のデータを示す。同一の入力データからは、同一のハッシュ値が算出される。入力データの長さに関わらず、同一のハッシュ関数によって算出されるハッシュ値の長さは、一定の長さである。ハッシュ関数には、例えば、ＳＨＡ−１、ＳＨＡ−２５６、ＳＨＡ−３８４、ＳＨＡ−５１２、ＳＨＡ−２２４、Ｗｉｒｌｐｏｏｌ、ＭＤ５、ＳＨＡ-３等がある。なお、ハッシュ値の長さは、ハッシュ関数によって異なるが、例えば、１２８ｂｉｔ、１６０ｂｉｔ、２２４ｂｉｔ、２５６ｂｉｔ、３８４ｂｉｔ、５１２ｂｉｔ、１０２４ｂｉｔ等である。
【００１７】
図２において、組み込み機器の電源がＯＮされると、ＣＰＵ１２は、ブートＲＯＭ１４に書き込まれたブートローダを実行する。これにより、ＩＰＬが実行されると共に、ファームウェア８０の正解ハッシュ値Ｈ１が読み出される。ＣＰＵ１２は、フラッシュメモリ１５等に記憶されたファームウェア８０に基づいてハッシュ値を算出し、正解ハッシュ値Ｈ１と比較する。そして、一致する場合はファームウェア８０を起動し、一致しない場合はファームウェア８０の起動を中断する。つまり、フラッシュメモリ１５に記憶されたファームウェア８０が改ざんされている場合、ファームウェア８０の起動は中断される。つまり、ファームウェア８０が真正である場合にのみ起動が行われる。
【００１８】
ファームウェア８０が起動されると、続いて、ＯＳ９０のプログラムが真正であるか否かが検証される。ＯＳ９０の正解ハッシュ値Ｈ２は、例えば、ファームウェア８０内部（フラッシュメモリ１５）に格納される。ＣＰＵ１２は、ＯＳ９０のプログラムに基づいてハッシュ値を算出し、正解ハッシュ値Ｈ２と比較する。そして、一致する場合はＯＳ９０を起動し、一致しない場合はＯＳ９０の起動を中断する。つまり、ＯＳ９０のプログラムが改ざんされている場合、当該ＯＳ９０の起動は中断される。これにより、ＯＳ９０が真正である場合にのみ起動が行われる。
【００１９】
このように、第１階層のプログラム（図２の例では、ファームウェア８０）から、第２階層のプログラム（図２の例では、ＯＳ９０）が呼び出されることを繰り返して、最終的にＯＳ９０が起動される。ところで、例えば、ＯＳ９０のプログラムのサイズは大きい。このため、ハッシュ値の算出処理に時間がかかり、システムのセキュアブートにも時間がかかる。
【００２０】
そこで、本実施の形態例におけるセキュアブート方法では、システムは、プロセッサと、プログラム、プログラムが区分された複数の部分プログラムの複数の第１の部分ハッシュ値、及び、複数の第１の部分ハッシュ値がプログラムに対応する場合における複数の第１の部分ハッシュ値のハッシュ値である、部分ハッシュ値の正解ハッシュ値が記憶された記憶媒体と、を有する。そして、セキュアブート方法は、システムの起動時に、プロセッサが、記憶媒体に記憶される複数の第１の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値を算出する第１の算出工程と、第１の制御工程とを有する。第１の制御工程では、プロセッサが、部分ハッシュ値の算出ハッシュ値が部分ハッシュ値の正解ハッシュ値と一致するか否か判定し、一致する場合にシステムの起動処理を継続し、一致しない場合にシステムの起動処理を中断する。
【００２１】
本実施の形態例におけるセキュアブート方法によると、ハッシュ値の算出処理が高速に行われることによって、安全なシステムが起動されると共に、システムの起動時間が短縮される。続いて、本実施の形態例におけるセキュアブート方法について、順に説明する。
【００２２】
［処理の概要：起動時］
図３は、本実施の形態例におけるセキュアブート方法の起動時の工程の概要について説明する図である。この例では、ＯＳ９０の起動工程について例示する。ただし、本実施の形態例におけるセキュアブート方法は、ＯＳ９０の起動工程への適用に限定されるものではなく、ファームウェア８０やアプリケーションの起動工程にも適用可能である。
【００２３】
本実施の形態例では、図３に示すように、ハッシュ値の生成のために、ＯＳ９０のプログラムが複数の部分プログラム９１〜９ｎに区分される。この例において、ＯＳ９０のプログラムは、例えば、パート１〜パートｎまでの、ｎ個の部分プログラム９１〜９ｎに区分される。そして、区分されたｎ個の部分プログラム９１〜９ｎのそれぞれのハッシュ値（以下、部分ハッシュ値と称する）９１Ｈａ〜９ｎＨａが、予め、ファームウェア８０内部に格納される。この例では、ｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａは、フラッシュメモリ１５に記憶される。また、ファームウェア８０には、ｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａが部分プログラム９１〜９ｎに対応する場合における、ｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａのハッシュ値（以下、部分ハッシュ値の正解ハッシュ値）ＨＳａが格納される。この例において、部分ハッシュ値の正解ハッシュ値ＨＳａは１つである。
【００２４】
図３において、ＯＳ９０の起動時に、予め、フラッシュメモリ１５に記憶されたｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａが、所定の順序でハッシュ関数に入力され、１つの部分ハッシュ値のハッシュ値ＨＳが算出される。例えば、パート１の部分ハッシュ値９１Ｈａ、パート２の部分ハッシュ値９２Ｈａ、…、パートｎの部分ハッシュ値９ｎＨａのように、順に、部分ハッシュ値９１Ｈａ〜９ｎＨａがハッシュ関数に入力される。そして、算出された部分ハッシュ値のハッシュ値ＨＳと、予め、記憶される部分ハッシュ値の正解ハッシュ値ＨＳａとが比較される。同一の場合、ＯＳ９０が起動され、同一ではない場合、ＯＳ９０の起動が中断される。
【００２５】
［フローチャート：起動時］
図４は本実施の形態例におけるセキュアブート方法における起動時の工程について説明するフローチャート図である。組み込み機器の電源がＯＮに設定されると、ＣＰＵ１２は、ブートＲＯＭ１４を読み込み、ＩＰＬを実行する（Ｓ１１）。このとき、ＣＰＵ１２は、ブートＲＯＭ１４に格納されるファームウェア８０の正解のハッシュ値を読み出す。
【００２６】
続いて、ＣＰＵ１２は、ファームウェア８０のハッシュ値を算出する（Ｓ１２）。具体的に、ＣＰＵ１２は、ファームウェア８０のプログラムを入力として、ハッシュ関数に基づいて、ファームウェア８０のハッシュ値を算出する。続いて、ＣＰＵ１２は、算出したハッシュ値と、ブートＲＯＭ１４から読み出した正解ハッシュ値とが一致するか否かを判定する（Ｓ１３）。一致しない場合（Ｓ１３のＮＯ）、ＣＰＵ１２は、システムの起動処理を中断させる（Ｓ１８）。一致する場合（Ｓ１３のＹＥＳ）、ＣＰＵ１２は、フラッシュメモリ１５からファームウェア８０を読み込み、実行する（Ｓ１４）。
【００２７】
ファームウェア８０が実行されると、続いて、ＣＰＵ１２は、ＯＳ９０のプログラムの部分ハッシュ値９１Ｈａ〜９ｎＨａに基づくハッシュ値、即ち、部分ハッシュ値のハッシュ値ＨＳを算出する（Ｓ１５）。具体的に、ＣＰＵ１２は、フラッシュメモリ１５からＯＳ９０のプログラムを区分した複数の部分プログラム９１〜９ｎの各部分ハッシュ値９１Ｈａ〜９ｎＨａを読み出し、各部分ハッシュ値９１Ｈａ〜９ｎＨａを入力として、ハッシュ関数に基づいて、部分ハッシュ値のハッシュ値ＨＳを算出する。次に、ＣＰＵ１２は、算出した部分ハッシュ値のハッシュ値ＨＳと、フラッシュメモリ１５から読み出した部分ハッシュ値の正解ハッシュ値ＨＳａとが一致するか否かを判定する（Ｓ１６）。一致しない場合（Ｓ１６のＮＯ）、ＣＰＵ１２は、システムの起動処理を中断させる（Ｓ１８）。一致する場合（Ｓ１６のＹＥＳ）、ＣＰＵ１２は、ＯＳ９０のプログラムを読み込み、実行する（Ｓ１７）。
【００２８】
このように、本実施の形態例におけるセキュアブート方法によると、ＣＰＵ１２は、ＯＳ９０のプログラム全体に基づくハッシュ値を算出するのではなく、ＯＳ９０の部分プログラム９１〜９ｎに対応する複数の部分ハッシュ値９１Ｈａ〜９ｎＨａに基づいて、部分ハッシュ値のハッシュ値ＨＳを算出する。そして、ＣＰＵ１２は、ＯＳ９０の部分プログラム９１〜９ｎに対応する複数の部分ハッシュ値９１Ｈａ〜９ｎＨａに基づいた、部分ハッシュ値のハッシュ値ＨＳが正しい値である場合にＯＳ９０の起動を続行する。
【００２９】
つまり、本実施の形態例におけるセキュアブート方法によると、ＯＳ９０の部分プログラム９１〜９ｎに対応する複数の部分ハッシュ値９１Ｈａ〜９ｎＨａのハッシュ値である、部分ハッシュ値のハッシュ値ＨＳが正しいか否かが検証される。これにより、部分ハッシュ値９１Ｈａ〜９ｎＨａが改ざんされていないことが検証される。そして、部分ハッシュ値９１Ｈａ〜９ｎＨａが改ざんされていないことが検証されることにより、部分ハッシュ値に対応すると想定されるＯＳ９０のプログラムについて、改ざんされていないとみなすことが可能になる。
【００３０】
また、本実施の形態例におけるセキュアブート方法において、ＣＰＵ１２は、ＯＳ９０プログラム全体のハッシュ値を算出しない。これにより、システムの起動時におけるＣＰＵ１２の負荷が抑えられ、ハッシュ値の算出にかかる時間が大幅に削減されることにより、セキュアブートにかかる時間が短縮される。一般的に、組み込み機器が搭載するＣＰＵは処理能力が高くはない。しかしながら、本実施の形態例におけるセキュアブート方法によると、システム起動時のＣＰＵ１２の負荷が抑えられることにより、組み込み機器であっても、高速に、安全性の高い起動が可能になる。
【００３１】
このように、本実施の形態例におけるセキュアブート方法によると、起動対象のＯＳ９０のプログラムが改ざんされていないことを、高速に、効率的に検証することが可能になる。また、本実施の形態例におけるセキュアブート方法では、フラッシュメモリ等の記憶媒体に、ｎ個の部分ハッシュ値、及び、１つの部分ハッシュ値の正解ハッシュ値が記憶される（合計ｎ＋１個）。一方、一般的なセキュアブート方法によると、フラッシュメモリ等の記憶媒体に、１つのハッシュ値が記憶される。本実施の形態例におけるセキュアブートによると、さらに、ｎ個のハッシュ値を記憶媒体に格納するだけでよいため、最小限のデータを記憶媒体に格納することにより、簡易に、システムの高速なセキュアブートが実現可能になる。
【００３２】
なお、複数の部分プログラム９１〜９ｎのハッシュ値、部分ハッシュ値の正解ハッシュ値ＨＳａは、例えば、ＯＳ９０のアップデート時に、開発者等から正規のルートにしたがって取得され、フラッシュメモリ１５等の記憶媒体に記憶される。ＯＳ９０のプログラムが第３者によって改ざんされた場合、複数の部分ハッシュ値９１Ｈａ〜９ｎＨａは、ＯＳ９０のプログラムに同期しなくなる。そこで、さらに、ＯＳ９０の起動後の工程において、複数の部分ハッシュ値９１Ｈａ〜９ｎＨａが、起動対象のＯＳ９０のプログラムと同期するか否かが検証される。つまり、起動後の工程において、起動時の検証精度を補完する検証が行われる。ここで、セキュアブート方法における起動後の工程について説明する。
【００３３】
［処理の概要：起動後］
図５は、本実施の形態例におけるセキュアブート方法の起動後の工程の概要について説明する図である。図３と同様にして、本実施の形態例におけるセキュアブート方法は、ファームウェア８０やアプリケーションの起動後の工程にも適用可能である。
【００３４】
図５において、本実施の形態例では、システムの起動後、区分されたｎ個の部分プログラム９１〜９ｎのそれぞれの部分ハッシュ値９１Ｈ〜９ｎＨが算出される。例えば、ＯＳ９０がパート１〜パートｎに区分される場合、パート１の部分ハッシュ値９１Ｈ、パート２の部分ハッシュ値９２Ｈ、…、パートｎの部分ハッシュ値９ｎＨのように、各パートの部分ハッシュ値が算出される。そして、算出された各部分ハッシュ値９１Ｈ〜９ｎＨと、予め、フラッシュメモリ１５に記憶された部分ハッシュ値９１Ｈａ〜９ｎＨａとが比較され、同一の場合、ＯＳ９０の実行処理が継続され、同一ではない場合、ＯＳ９０の実行処理が中断される。
【００３５】
図５に示す部分ハッシュ値９１Ｈａ〜９ｎＨａの検証処理は、例えば、部分ハッシュ値検証アプリケーションとして実行される。部分ハッシュ値検証アプリケーションは、ＣＰＵ１２によって、システム起動後の任意のタイミングで実行される。任意のタイミングとは、例えば、システムのアイドル時や、システムの終了時などのタイミングを示す。アイドル時は、例えば、他のプロセスがＣＰＵ１２で動作していない、ＣＰＵ１２が低負荷の状態を示す。例えば、システムの終了時に部分ハッシュ値検証アプリケーションが実行される場合、システムの終了処理にかかる時間が増加する。ただし、システムの終了処理に時間がかかることは、システムの起動処理に時間がかかることに対して、影響が小さい。また、例えば、システムのアイドル時に部分ハッシュ値検証アプリケーションが実行される場合、他のプロセスに影響を与えることなく、部分ハッシュ値９１Ｈａ〜９ｎＨａの検証が可能になる。
【００３６】
［フローチャート：起動後］
図６は本実施の形態例におけるセキュアブート方法における起動後の工程について説明するフローチャート図である。システムの起動後、システムのアイドル時や、終了時等の任意のタイミングで部分ハッシュ値検証アプリケーションが起動される（Ｓ２１）。続いて、部分ハッシュ値検証アプリケーションは、ＯＳ９０のプログラムを区分した部分プログラム９１〜９ｎごとに、部分ハッシュ値９１Ｈ〜９ｎＨを計算する（Ｓ２２）。例えば、ＯＳ９０のプログラムがｎ個に区分された場合、ｎ個の部分ハッシュ値９１Ｈ〜９ｎＨが算出される。
【００３７】
次に、部分ハッシュ値検証アプリケーションは、算出した複数の部分ハッシュ値９１Ｈ〜９ｎＨと、フラッシュメモリ１５に記憶された正解の、複数の部分ハッシュ値９１Ｈａ〜９ｎＨａとが一致するか否かを判定する（Ｓ２３）。一致しない場合（Ｓ２３のＮＯ）、部分ハッシュ値検証アプリケーションは、システムの実行処理を中断させる（Ｓ２５）。一方、一致する場合（Ｓ２３のＹＥＳ）、システムの実行処理が継続される（Ｓ２４）。これにより、フラッシュメモリ１５に記憶された複数の部分ハッシュ値９１Ｈａ〜９ｎＨａが、実行中のＯＳ９０に同期することが検証可能になる。
【００３８】
このように、本実施の形態例におけるセキュアブート方法によると、システムの起動後、フラッシュメモリ１５等の記憶媒体に記憶された複数の部分ハッシュ値９１Ｈａ〜９ｎＨａが、起動中のＯＳ９０のプログラムに対応するか否かが検証される。これにより、システムの起動時には部分ハッシュ値のみを検証することによって、起動対象のＯＳ９０が改ざんされていないことが検証可能になる。即ち、システムの起動時には、部分ハッシュ値９１Ｈａ〜９ｎＨａに基づいて、効率的に、高速に検証が行われると共に、システムの起動後に部分ハッシュ値９１Ｈａ〜９ｎＨａが実行中のＯＳ９０に同期することが検証されることにより、総合的に、高速、かつ、安全なセキュアブートが実現可能になる。
【００３９】
なお、図６のフローチャート図の例では、部分ハッシュ値検証アプリケーションが、複数の部分ハッシュ値９１Ｈａ〜９ｎＨａ全てについて、一括して、起動中のＯＳ９０のプログラムと対応するか否かを検証する場合を例示した。ただし、部分ハッシュ値検証アプリケーションは、複数の部分ハッシュ値９１Ｈａ〜９ｎＨａを、分割して、起動中のＯＳ９０のプログラムと対応するか否かを検証してもよい。この場合、部分ハッシュ値検証アプリケーションは、システムがアイドル状態になったとき、例えば、複数の部分ハッシュ値９１Ｈａ〜９ｎＨａのうち一部の部分ハッシュ値を検証する。そして、再び、システムがアイドル状態になったとき、部分ハッシュ値検証アプリケーションは、別の部分ハッシュ値を順次、検証する。
【００４０】
これにより、複数の部分プログラム９１〜９ｎ全てのハッシュ値が同一時間帯に算出されないことから、部分ハッシュ値９１Ｈ〜９ｎＨの算出に係るシステムへの負荷が軽減される。つまり、部分ハッシュ値検証アプリケーションは、他のプロセスに与える影響をさらに抑えながら、部分ハッシュ値９１Ｈａ〜９ｎＨａの検証を行うことができる。
【００４１】
続いて、セキュアブート方法における、プログラムのアップデート工程について説明する。アップデート工程とは、ＯＳ９０のプログラムが更新される場合の工程を示す。
【００４２】
［処理の概要：アップデート時］
図７は、本実施の形態例におけるセキュアブート方法のアップデート工程の概要について説明する図である。図７の例では、ＯＳ９０のアップデート工程を例示する。図３と同様にして、本実施の形態例におけるセキュアブート方法は、ファームウェア８０やアプリケーションのアップデート工程にも適用可能である。
【００４３】
図７において、本実施の形態例では、ＯＳ９０のアップデート時、正規のルートにしたがって安全な手法により、正解の部分ハッシュ値９１Ｈａ〜９ｎＨａ、及び、部分ハッシュ値の正解ハッシュ値ＨＳａが取得される。また、アップデート工程において、更新されたＯＳ９０のプログラムの部分プログラム９１〜９ｎに基づいて複数の部分ハッシュ値９１Ｈ〜９ｎＨが算出され、取得された複数の部分ハッシュ値９１Ｈａ〜９ｎＨａと一致するか否か検証される。一致しない場合、アップデート処理に失敗したものと判定される。この場合、アップデート過程において、新たなＯＳ９０のプログラム、または、部分ハッシュ値９１Ｈａ〜９ｎＨａが改ざんされたことを示す。一致する場合、複数の部分ハッシュ値９１Ｈ〜９ｎＨがファームウェア８０内部に格納される。
【００４４】
また、算出された部分ハッシュ値９１Ｈ〜９ｎＨに基づいて、部分ハッシュ値のハッシュ値ＨＳが算出され、取得された部分ハッシュ値の正解ハッシュ値ＨＳａと一致するか否か検証される。一致しない場合、同様にして、アップデート過程において、新たなＯＳ９０のプログラム、及び取得された部分ハッシュ値９１Ｈａ〜９ｎＨａ、または、部分ハッシュ値の正解ハッシュ値ＨＳａが改ざんされたことを示す。一致する場合、部分ハッシュ値のハッシュ値ＨＳがファームウェア８０内部に格納される。
【００４５】
［フローチャート：アップデート時］
図８は本実施の形態例におけるセキュアブート方法におけるアップデート工程について説明するフローチャート図である。アップデート処理として、初めに、アップデート対象のＯＳ９０のプログラムに対応する正解の部分ハッシュ値９１Ｈａ〜９ｎＨａ、部分ハッシュ値の正解ハッシュ値ＨＳａが正規ルートで入手される（Ｓ３１）。続いて、ＯＳ９０のプログラムがアップデートされる（Ｓ３２）。
【００４６】
次に、新たなＯＳ９０のプログラムが区分された新しい部分プログラム９１〜９ｎごとに、部分ハッシュ値９１Ｈ〜９ｎＨが計算される（Ｓ３３）。そして、算出した複数の部分ハッシュ値９１Ｈ〜９ｎＨと、フラッシュメモリ１５等の記憶媒体に記憶された正解の、複数の部分ハッシュ値９１Ｈａ〜９ｎＨａとが一致するか否かが判定される（Ｓ３４）。一致しない場合（Ｓ３４のＮＯ）、ＯＳ９０のアップデート処理が中断される（Ｓ３９）。一方、一致する場合（Ｓ３４のＹＥＳ）、続いて、ＣＰＵ１２は、複数の部分ハッシュ値９１Ｈ〜９ｎＨのハッシュ値、即ち、部分ハッシュ値のハッシュ値ＨＳを計算する（Ｓ３５）。
【００４７】
そして、算出した部分ハッシュ値のハッシュ値ＨＳと、フラッシュメモリ１５等の記憶媒体に記憶された部分ハッシュ値の正解ハッシュ値ＨＳａとが一致するか否かが判定される（Ｓ３６）。一致しない場合（Ｓ３６のＮＯ）、ＯＳ９０のアップデート処理が中断される（Ｓ３９）。一方、一致する場合（Ｓ３６のＹＥＳ）、ＣＰＵ１２は、部分ハッシュ値９１Ｈ〜９ｎＨ、部分ハッシュ値のハッシュ値ＨＳをファームウェア８０に格納する（Ｓ３７）。これにより、ＯＳ９０のアップデート処理が完了する（Ｓ３８）。
【００４８】
なお、図８のフローチャートの例では、アップデート工程において、部分ハッシュ値９１Ｈ〜９ｎＨ、及び、部分ハッシュ値のハッシュ値ＨＳとが算出され、正規ルートで入手された正解の部分ハッシュ値９１Ｈａ〜９ｎＨａ、及び、部分ハッシュ値の正解ハッシュ値ＨＳａと一致するか否かが判定された。しかしながら、部分ハッシュ値９１Ｈ〜９ｎＨ、及び、部分ハッシュ値の正解ハッシュ値ＨＳの検証は、アップデート工程に続く再起動後の工程において行われてもよい。
【００４９】
図９は本実施の形態例におけるセキュアブート方法におけるアップデート工程について説明する第２のフローチャート図である。図８のフローチャート図と同様にして、アップデート処理として、初めに、アップデート対象のＯＳ９０のプログラムに対応する複数の部分ハッシュ値９１Ｈ〜９ｎＨ、部分ハッシュ値の正解ハッシュ値ＨＳａが正規ルートで入手される（Ｓ４１）。続いて、ＯＳ９０のプログラムがアップデートされる（Ｓ４２）。そして、入手された正解の、複数の部分ハッシュ値９１Ｈａ〜９ｎＨａと、部分ハッシュ値の正解ハッシュ値ＨＳａとが、フラッシュメモリ１５等の記憶媒体に格納される（Ｓ４３）。続いて、ＯＳ９０が再起動される（Ｓ４４）。
【００５０】
図９のフローチャート図において、部分ハッシュ値９１Ｈ〜９ｎＨ、及び、部分ハッシュ値のハッシュ値ＨＳの検証は行われない。ただし、ＯＳ９０が再起動されたときに（Ｓ４４）、ＯＳ９０に起動工程において、更新された複数の部分ハッシュ値９１Ｈａ〜９ｎＨａに基づいて部分ハッシュ値のハッシュ値ＨＳが算出され、更新された部分ハッシュ値の正解ハッシュ値ＨＳａと一致するか否か検証される。そして、ＯＳ９０の起動後の工程において、部分ハッシュ値検証アプリケーションによって、更新された複数の部分ハッシュ値９１Ｈａ〜９ｎＨａが、起動中のＯＳ９０のプログラムに対応しているか否かが検証される。
【００５１】
このように、本実施の形態例におけるセキュアブート方法によると、アップデートによって更新された部分ハッシュ値９１Ｈ〜９ｎＨ、及び、部分ハッシュ値のハッシュ値ＨＳは、アップデート工程において検証されてもよいし、再起動後に検証されてもよい。これにより、プログラムがアップデートされた場合についても、新たなプログラム、及び、新たな複数の部分ハッシュ値９１Ｈａ〜９ｎＨａ、及び、部分ハッシュ値の正解ハッシュ値ＨＳａに基づいて、高速、かつ、安全なセキュアブートが実現可能になる。
【００５２】
以上のように、本実施の形態例におけるセキュアブート方法において、システムは、プロセッサ１２と、プログラム、プログラムが区分された複数の部分プログラムの複数の第１の部分ハッシュ値９１Ｈａ〜９ｎＨａ、及び、複数の第１の部分ハッシュ値がプログラムに対応する場合における複数の第１の部分ハッシュ値のハッシュ値である、部分ハッシュ値の正解ハッシュ値ＨＳａが記憶された記憶媒体と、を有する。また、また、セキュアブート方法は、システムの起動時に、プロセッサが、記憶媒体に記憶される複数の第１の部分ハッシュ値９１Ｈａ〜９ｎＨａのハッシュ値である部分ハッシュ値の算出ハッシュ値ＨＳを算出する第１の算出工程と、第１の制御工程とを有する。第１の制御工程では、プロセッサが、部分ハッシュ値の算出ハッシュ値ＨＳが部分ハッシュ値の正解ハッシュ値ＨＳａと一致するか否か判定し、一致する場合にシステムの起動処理を継続し、一致しない場合にシステムの起動処理を中断する。
【００５３】
このように、本実施の形態例におけるセキュアブート方法によると、ＯＳ９０の部分プログラム９１〜９ｎに対応する複数の部分ハッシュ値９１Ｈａ〜９ｎＨａのハッシュ値である、部分ハッシュ値のハッシュ値ＨＳが正しいか否かが検証される。これにより、部分ハッシュ値が改ざんされていないことが検証可能になる。したがって、部分ハッシュ値に対応すると想定されるＯＳ９０のプログラムについても、改ざんされていないとみなすことが可能になる。
【００５４】
また、ＣＰＵ１２は、ＯＳ９０プログラム全体に基づいてハッシュ値を算出しないことにより、システムの起動時におけるＣＰＵ１２の負荷が抑えられる。これにより、ハッシュ値の算出にかかる時間が大幅に削減され、セキュアブートが高速に行われる。一般的に、組み込み機器が搭載するＣＰＵは処理能力が高くはないものの、システム起動時のＣＰＵ１２の負荷が抑えられることにより、組み込み機器であっても、高速に、安全性の高い起動が可能になる。
【００５５】
このように、本実施の形態例におけるセキュアブート方法によると、起動対象のＯＳ９０のプログラムが改ざんされていないことを、高速に、簡易に検証することが可能になる。これにより、ブートの安全性が、対象プログラムの正当性の検証にしたがって確保されると共に、起動時間が短縮される。
【００５６】
また、本実施の形態例におけるセキュアブート方法は、システムの起動後、プロセッサが、起動中のシステムのプログラムが区分された複数の部分プログラム９１〜９ｎのハッシュ値である、複数の第２の部分ハッシュ値９１Ｈ〜９ｎＨを算出する第２の算出工程と、第２の制御工程とを有する。第２の制御工程では、プロセッサが、算出した複数の第２の部分ハッシュ値９１Ｈ〜９ｎＨが、記憶媒体に記憶される複数の第１の部分ハッシュ値９１Ｈａ〜９ｎＨａと一致するか否か判定し、一致する場合にシステムの実行処理を継続し、一致しない場合にシステムの実行処理を中断する。
【００５７】
このように、本実施の形態例におけるセキュアブート方法によると、システムの起動後、システムに記憶された複数の部分ハッシュ値９１Ｈａ〜９ｎＨａが、起動中のプログラムに同期するか否かが検証される。これにより、本実施の形態例におけるセキュアブート方法は、システムの起動時に、記憶された部分ハッシュ値９１Ｈａ〜９ｎＨａに基づいて高速な検証を可能にしながら、起動後、部分ハッシュ値９１Ｈａ〜９ｎＨａが起動中のプログラムに対応することを検証することにより、総合的に、高速なセキュアブートを実現可能にする。
【００５８】
なお、本実施の形態例におけるセキュアブート方法において、第２の算出工程、及び、第２の制御工程は、複数の部分プログラム全てについて分割して行われる。これにより、例えば、分割して工程が行われる場合、複数の部分プログラム９１〜９ｎ全てについてハッシュ値が同一の時間帯に算出されることが回避されるため、部分ハッシュ値９１Ｈ〜９ｎＨの算出に係るシステムへの負荷が軽減される。
【００５９】
また、本実施の形態例におけるセキュアブート方法において、第２の算出工程、及び、第２の制御工程は、システムの起動後、前記システムが低負荷状態のときに行われる。また、システムが低負荷状態のときは、システムがアイドル状態である時、システムの終了時のいずれかまたは両方である。これにより、本実施の形態例におけるセキュアブート方法は、セキュアブートを高速にしながら、起動後、システムに負荷をかけることなく、部分ハッシュ値９１Ｈａ〜９ｎＨａの検証を可能にする。つまり、他のプロセスに影響を生じさせることなく、高速なセキュアブートが実現可能になる。
【００６０】
また、本実施の形態例におけるセキュアブート方法は、プロセッサが、システムのプログラムを新たなプログラムに更新する第１の更新工程と、プロセッサが、新たなプログラムに対応する複数の第１の部分ハッシュ値９１Ｈａ〜９ｎＨａ、及び、部分ハッシュ値の正解ハッシュ値ＨＳａを取得する取得工程と、第３の算出工程と、第３の制御工程と、を有する。第３の算出工程では、プロセッサが、新たなプログラムが区分された複数の部分プログラム９１〜９ｎの複数の第３の部分ハッシュ値９１Ｈ〜９ｎＨ、及び、複数の第３の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値ＨＳを算出する。第３の制御工程では、プロセッサが、算出した複数の第３の部分ハッシュ値９１Ｈ〜９ｎＨが取得した複数の第１の部分ハッシュ値９１Ｈａ〜９ｎＨａと一致するか否か、及び、算出した部分ハッシュ値の算出ハッシュ値ＨＳが取得した部分ハッシュ値の正解ハッシュ値ＨＳａと一致するか否かの２つを判定し、２つの判定のいずれもが一致する場合にシステムのアップデート処理を継続し、２つの判定の少なくとも一方が一致しない場合にシステムのアップデート処理を中断する。
【００６１】
これにより、本実施の形態例におけるセキュアブート方法によると、アップデート工程において、新たなプログラムに対応する複数の部分ハッシュ値９１Ｈａ〜９ｎＨａ、部分ハッシュ値の正解ハッシュ値ＨＳａが取得される。そして、複数の部分ハッシュ値９１Ｈａ〜９ｎＨａ、及び、ハッシュ値の正解ハッシュ値ＨＳａは、アップデート工程において、更新されたプログラムに対応するか否か検証される。これにより、プログラムがアップデートされた場合についても、新たなプログラム、及び、新たなプログラムに対応する複数の部分ハッシュ値９１Ｈａ〜９ｎＨａ、部分ハッシュ値の正解ハッシュ値ＨＳａに基づいて、高速、かつ、安全なセキュアブートが実現可能になる。
【００６２】
また、本実施の形態例におけるセキュアブート方法は、プロセッサが、システムのプログラムを新たなプログラムに更新する第１の更新工程と、プロセッサが、新たなプログラムに対応する複数の第１の部分ハッシュ値９１Ｈａ〜９ｎＨａ、及び、部分ハッシュ値の正解ハッシュ値ＨＳａを取得する取得工程と、プロセッサが、システムの再起動を指示する再起動工程と、を有する。
【００６３】
これにより、本実施の形態例におけるセキュアブート方法によると、アップデート工程において、新たなプログラムに対応する複数の部分ハッシュ値９１Ｈａ〜９ｎＨａ、及び、部分ハッシュ値の正解ハッシュ値ＨＳａが取得され、再起動時に検証される。具体的に、再起動時におけるプログラムに起動工程において、複数の部分ハッシュ値９１Ｈａ〜９ｎＨａが部分ハッシュ値の正解ハッシュ値ＨＳａに対応するか否か検証される。また、システムの起動後の工程において、複数の部分ハッシュ値９１Ｈａ〜９ｎＨａが、実行中のプログラムに対応するか否かが検証される。これにより、アップデート処理が高速に行われると共に、新たなプログラム、及び、新たなプログラムに対応する複数の部分ハッシュ値９１Ｈａ〜９ｎＨａ、部分ハッシュ値の正解ハッシュ値ＨＳａに基づいて、高速、かつ、安全なセキュアブートが実現可能になる。
【００６４】
なお、本実施の形態例において、ファームウェアに続いて起動されるＯＳについて、部分プログラムのハッシュ値に基づいて検証が行われる場合について例示した。ただし、例えば、ファームウェアについても同様にして、部分プログラムのハッシュ値に基づいて検証が行われてもよい。これにより、ＯＳ９０に加えて、ファームウェアの起動時間についても、短縮可能になることにより、システムの起動時間がさらに高速になる。
【００６５】
［第２の実施の形態例］
第１の実施の形態例では、ｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａが、１つの部分ハッシュ値の算出ハッシュ値ＨＳに対応する場合を例示した。ただし、この例に限定されなくてもよい。例えば、ｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａのうち、ｍ個の部分ハッシュ値がそれぞれ１つの部分ハッシュ値のハッシュ値に対応してもよい。即ち、この場合、ｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａに対応して、複数の、部分ハッシュ値のハッシュ値ＨＳが算出される。
【００６６】
図１０は、第２の実施の形態例におけるセキュアブート方法の起動時の工程の概要について説明する図である。図１０に示すように、第２の実施の形態例において、ファームウェア８０内部に、ｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａ、及び、ｎ／ｍ個の部分ハッシュ値の正解ハッシュ値ＨＳ１〜ＨＳｘが格納される。例えば、第２の実施の形態例では、ｍ個の部分ハッシュ値をハッシュ関数の入力として、１個の部分ハッシュ値のハッシュ値が算出される。そして、算出されるｎ／ｍ個の部分ハッシュ値のハッシュ値ＨＳ１〜ＨＳｘと、予め、記憶されたｎ／ｍ個の部分ハッシュ値の正解ハッシュ値ＨＳ１ａ〜ＨＳｘａとが比較され、一致する場合に、ＯＳ９０が起動される。
【００６７】
具体的に、例えば、ｎ＝６、ｍ＝２である場合を例示する。この場合、６つのパートに区分されたＯＳ９０のプログラムに対応して６個の正解の部分ハッシュ値が、予め、ファームウェア８０内部に格納される。そして、ＯＳ９０の起動工程において、それぞれ、２個の部分ハッシュ値に対応して１個の部分ハッシュ値のハッシュ値が算出される。これにより、６個の部分ハッシュ値に対して、３個の部分ハッシュ値のハッシュ値が算出され、ファームウェア８０内部に格納された３個の部分ハッシュ値の正解ハッシュ値と比較される。全ての部分ハッシュ値のハッシュ値が一致した場合、ＯＳ９０が起動される。
【００６８】
ただし、この例に限定されるものではない。ｎ＝６の場合、例えば、４個の部分ハッシュ値に対応して１個の部分ハッシュ値のハッシュ値が、２個の部分ハッシュ値に対応して１個の部分ハッシュ値のハッシュ値がそれぞれ算出されてもよい。これにより、６個の部分ハッシュ値に対して、２個の部分ハッシュ値のハッシュ値が算出され、ファームウェア８０内部に格納された２個の部分ハッシュ値の正解ハッシュ値と比較される。そして、全ての部分ハッシュ値のハッシュ値が一致した場合、ＯＳ９０が起動される。
【００６９】
［フローチャート：起動時］
図１１は第２の実施の形態例におけるセキュアブート方法における起動時の工程について説明するフローチャート図である。図１１のフローチャート図における工程Ｓ１１〜工程Ｓ１４の処理は、第１の実施の形態例における図４のフローチャート図と同様である。
【００７０】
図１１のフローチャート図において、部分ハッシュ値のハッシュ値ＨＳ１〜ＨＳｘの算出工程（Ｓ５５）、及び、部分ハッシュ値の正解ハッシュ値ＨＳ１ａ〜ＨＳｘａとの比較工程（Ｓ５６）は、部分ハッシュ値のハッシュ値の数分、繰り返し行われる。このため、全て（ｎ/ｍ個）の部分ハッシュ値のハッシュ値について、部分ハッシュ値の正解ハッシュ値と一致するか検証を完了したか否かが判定される（Ｓ５７）。検証が完了した場合（Ｓ５７のＹＥＳ）、ＣＰＵ１２は、ＯＳ９０のプログラムを読み込み、実行する（Ｓ５８）。一方、検証が未完了の場合（Ｓ５７のＮＯ）、ＣＰＵ１２は、未検証の部分ハッシュ値のハッシュ値を算出し（Ｓ５５）、検証を行う（Ｓ５６）。
【００７１】
続いて、第２の実施の形態例におけるセキュアブート方法における起動後の工程の概要について説明する。
【００７２】
［処理の概要：起動後］
図１２は、第２の実施の形態例におけるセキュアブート方法の起動後の工程の概要について説明する図である。第２の実施の形態例おけるシステム起動後の処理は、第１の実施の形態例と同様である。システムの起動後、区分されたｎ個の部分プログラム９１〜９ｎに基づいて、ｎ個の部分ハッシュ値９１Ｈ〜９ｎＨが算出される。そして、算出されたｎ個の部分ハッシュ値９１Ｈ〜９ｎＨと、予め、フラッシュメモリ１５に記憶されたｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａとが比較される。同一の場合、ＯＳ９０の実行処理が継続され、同一ではない場合、ＯＳ９０の実行処理が中断される。第２の実施の形態例におけるセキュアブート方法における起動後の処理を説明するフローチャート図についても、第１の実施の形態例における図６のフローチャート図と同様である。
【００７３】
続いて、第２の実施の形態例におけるセキュアブート方法におけるプログラムのアップデート工程の概要について説明する。
【００７４】
［処理の概要：アップデート時］
図１３は、第２の実施の形態例におけるセキュアブート方法のアップデート工程の概要について説明する図である。第２の実施の形態例では、ＯＳ９０のアップデート時、正規のルートにしたがって、ｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａ、及び、ｎ／ｍ個の部分ハッシュ値の正解ハッシュ値ＨＳ１ａ〜ＨＳｘａが取得される。また、例えば、アップデート工程において、更新されたＯＳ９０のプログラムの部分プログラム９１〜９ｎに基づいてｎ個の部分ハッシュ値９１Ｈ〜９ｎＨが算出され、取得されたｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａと一致するか否か検証される。そして、算出されたｎ個の部分ハッシュ値９１Ｈ〜９ｎＨに基づいてｎ／ｍ個の部分ハッシュ値のハッシュ値ＨＳ１〜ＨＳｘが算出され、取得されたｎ／ｍ個の部分ハッシュ値の正解ハッシュ値ＨＳ１ａ〜ＨＳｘａと一致するか否か検証される。
【００７５】
［フローチャート：アップデート時］
図１４は第２の実施の形態例におけるセキュアブート方法におけるアップデート工程について説明するフローチャート図である。図１４のフローチャート図における工程Ｓ３１〜工程Ｓ３４の処理は、第１の実施の形態例における図８のフローチャート図と同様である。
【００７６】
図１４のフローチャート図において、算出した複数の部分ハッシュ値９１Ｈ〜９ｎＨと、新たなプログラムに対応する複数の部分ハッシュ値９１Ｈａ〜９ｎＨａとが一致する場合（Ｓ３４のＹＥＳ）、続いて、ＣＰＵ１２は、ｉ個目の部分ハッシュ値のハッシュ値を計算する（Ｓ６５）。そして、ＣＰＵ１２は、算出したｉ個目の部分ハッシュ値のハッシュ値と、新たなプログラムに対応するｉ個目の部分ハッシュ値の正解ハッシュ値とが一致するか否かを判定する（Ｓ６６）。一致しない場合（Ｓ６６のＮＯ）、ＯＳ９０のアップデート処理が中断される（Ｓ７０）。
【００７７】
一方、一致する場合（Ｓ６６のＹＥＳ）、ＣＰＵ１２は、続いて、全ての部分ハッシュ値のハッシュ値について検証を完了したか否かを判定する（Ｓ６７）。検証が完了した場合（Ｓ６７のＹＥＳ）、ＣＰＵ１２は、ｎ個の部分ハッシュ値９１Ｈ〜９ｎＨ、ｎ／ｍ個の部分ハッシュ値のハッシュ値ＨＳ１〜ＨＳｘをファームウェア８０内部に格納する（Ｓ６８）。これにより、ＯＳ９０のアップデート処理が完了する（Ｓ６９）。一方、検証が未完了の場合（Ｓ６７のＮＯ）、ＣＰＵ１２は、未検証の部分ハッシュ値のハッシュ値を算出し（Ｓ６５）、検証を行う（Ｓ６６）。
【００７８】
また、第１の実施の形態例と同様にして、部分ハッシュ値９１Ｈ〜９ｎＨ、及び、部分ハッシュ値のハッシュ値ＨＳは、アップデート工程に続く再起動後に検証されてもよい。再起動後に検証する場合のフローチャート図は、第１の実施の形態例における図９のフローチャート図と同様である。
【００７９】
このように、ｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａに、ｎ／ｍ個の部分ハッシュ値の算出ハッシュ値ＨＳ１〜ＨＳｘが対応してもよい。第２の実施の形態例においても、第１の実施の形態例と同様にして、起動対象のＯＳ９０のプログラムが改ざんされていないことを、高速に、簡易に検証することが可能になる。これにより、ブートの安全性が、対象プログラムの正当性の検証にしたがって確保されると共に、起動時間が短縮される。
【００８０】
また、第２の実施の形態例においても、ＣＰＵは、システムの起動後、システムに記憶された複数の部分ハッシュ値９１Ｈａ〜９ｎＨａが、起動中のプログラムに正しく対応するか否かを判定する。これにより、本実施の形態例におけるセキュアブート方法は、システムの起動時に部分ハッシュ値９１Ｈａ〜９ｎＨａに基づいて高速な検証を可能にしながら、起動後、部分ハッシュ値９１Ｈａ〜９ｎＨａが起動中のプログラムに対応することを検証することにより、総合的に、高速なセキュアブートを実現可能にする。
【００８１】
また、第２の実施の形態例においても、アップデート工程において、新たなプログラムに対応するｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａ、及び、ｎ／ｍ個の部分ハッシュ値の正解ハッシュ値が取得される。そして、ｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａ、及び、ｎ／ｍ個のハッシュ値の正解ハッシュ値は、アップデート工程において、更新されたプログラムに対応するか否か検証される。または、アップデート工程に続く再起動時に、ｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａがｎ／ｍ個のハッシュ値の正解ハッシュ値に対応するか否か、及び、ｎ個の部分ハッシュ値９１Ｈａ〜９ｎＨａが実行中のプログラムに対応するか否かが検証される。これにより、プログラムがアップデートされた場合についても、新たなプログラム、及び、新たなプログラムに対応する複数の部分ハッシュ値９１Ｈａ〜９ｎＨａ、部分ハッシュ値の正解ハッシュ値ＨＳ１ａ〜ＨＳｘａに基づいて、高速、かつ、安全なセキュアブートが実現可能になる。
【００８２】
なお、本実施の形態例におけるセキュアブート方法における各工程は、ハードウェアによって実現されてもよい。
【００８３】
図１５は、本実施の形態例におけるセキュアブート方法をハードウェアによって実現した場合における半導体装置の構成の一例である。図１５の半導体装置は、例えば、２つの半導体装置２０、３０を有する。第１の半導体装置２０は、例えば、ＣＰＵ２２、ＲＡＭ２６、インタフェース２１、外部インタフェース２３、第２の半導体装置３０とのインタフェース２８を有する。各部は、バス２７を介して互いに接続される。インタフェース２１は、外部の機器とのデータの入出力を制御し、外部インタフェース２３は、入力装置５１、及び、出力装置５２とのデータの入出力を制御する。
【００８４】
また、図１５の第２の半導体装置３０は、例えば、ブートＲＯＭ３２、フラッシュメモリ３３、部分ハッシュ値計算装置３４、部分ハッシュ値のハッシュ値計算装置３６、部分ハッシュ値検証装置３５、部分ハッシュ値のハッシュ値検証装置３７、ハッシュ値計算装置３８を有する。各部は、バス３９を介して互いに接続される。図１で前述したとおり、ブートＲＯＭ３２には、ＩＰＬのプログラム、フラッシュメモリ３３のデバイスドライバ起動用のプログラム等が格納される。また、フラッシュメモリ３３には、ファームウェア８０、ＯＳ９０のプログラム、セキュアブート用のハッシュ値等が記憶される。
【００８５】
図１５の部分ハッシュ値計算装置３４は、複数の部分プログラムのハッシュ値、即ち、部分ハッシュ値を計算する。部分ハッシュ値検証装置３５は、複数の部分ハッシュ値がプログラムに対応するか否かを検証する。また、部分ハッシュ値のハッシュ値計算装置３６は、複数の部分ハッシュ値のハッシュ値を計算する。部分ハッシュ値のハッシュ値検証装置３７は、部分ハッシュ値が改ざんされていないか否かを検証する。ハッシュ値計算装置３８は、ハッシュ値を算出する装置であって、部分ハッシュ値計算装置３４、部分ハッシュ値のハッシュ値計算装置３６によって制御される。
【００８６】
第２の半導体装置３０において、インタフェース３１を介して組み込み機器の電源がＯＮされたことが検知されると、ブートＲＯＭ３２のブートローダに基づいてＩＰＬが実行されると共に、部分ハッシュ値のハッシュ値計算装置３６、及び、部分ハッシュ値のハッシュ値検証装置３７にしたがって、第１、２の実施の形態例において説明した起動時の処理が行われる。また、起動後において、部分ハッシュ値計算装置３４、及び、部分ハッシュ値検証装置３５にしたがって、第１、２の実施の形態例において説明した起動後の処理が行われる。
【００８７】
図１５のように、本実施の形態例におけるセキュアブート方法における各工程がハードウェアによって実現されることにより、ＣＰＵ１２の負荷が軽減される。これにより、ＣＰＵ１２は、システム起動時に他のプロセスを実行することが可能になるため、より高速にセキュアブートが行われる。このため、半導体装置は、より高速なセキュアブートが実現できると共に、部分ハッシュ値に基づいて、起動対象のプログラムが改ざんされていないかを簡易に判定することが可能になる。
【００８８】
なお、本実施の形態例におけるセキュアブート方法が組み込み機器に適用される場合について説明したが、本実施の形態例におけるセキュアブート方法は、一般的なＰＣ等に対しても適用可能である。
【００８９】
以上の実施の形態をまとめると、次の付記のとおりである。
【００９０】
（付記１）
システムのセキュアブート方法であって、
前記システムは、プロセッサと、プログラム、前記プログラムが区分された複数の部分プログラムの複数の第１の部分ハッシュ値、及び、前記複数の第１の部分ハッシュ値が前記プログラムに対応する場合における複数の第１の部分ハッシュ値のハッシュ値である、部分ハッシュ値の正解ハッシュ値が記憶された記憶媒体と、を有し、
前記システムの起動時に、前記プロセッサが、前記記憶媒体に記憶される前記複数の第１の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値を算出する第１の算出工程と、
前記プロセッサが、前記部分ハッシュ値の算出ハッシュ値が前記部分ハッシュ値の正解ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する第１の制御工程と、を有するセキュアブート方法。
【００９１】
（付記２）
付記１において、
前記システムの起動後、前記プロセッサが、起動中のシステムのプログラムが区分された複数の部分プログラムのハッシュ値である、複数の第２の部分ハッシュ値を算出する第２の算出工程と、
前記プロセッサが、前記算出した複数の第２の部分ハッシュ値が、前記記憶媒体に記憶される前記複数の第１の部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムの実行処理を継続し、一致しない場合に前記システムの実行処理を中断する第２の制御工程と、を有するセキュアブート方法。
【００９２】
（付記３）
付記２において、
前記第２の算出工程、及び、前記第２の制御工程は、前記複数の部分プログラム全てについて分割して行われるセキュアブート方法。
【００９３】
（付記４）
付記２または３において、
前記第２の算出工程、及び、前記第２の制御工程は、前記システムの起動後、前記システムが低負荷状態のときに行われるセキュアブート方法。
【００９４】
（付記５）
付記４において、
前記システムが低負荷状態のときは、前記システムがアイドル状態である時、前記システムの終了時のいずれかまたは両方であるセキュアブート方法。
【００９５】
（付記６）
付記１乃至５のいずれかにおいて、
前記プロセッサが、前記システムのプログラムを新たなプログラムに更新する第１の更新工程と、
前記プロセッサが、前記新たなプログラムに対応する複数の第１の部分ハッシュ値、及び、部分ハッシュ値の正解ハッシュ値を取得する取得工程と、
前記プロセッサが、前記新たなプログラムが区分された複数の部分プログラムの複数の第３の部分ハッシュ値、及び、前記複数の第３の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値を算出する第３の算出工程と、
前記プロセッサが、前記算出した複数の第３の部分ハッシュ値が前記取得した前記複数の第１の部分ハッシュ値と一致するか否か、及び、前記算出した部分ハッシュ値の算出ハッシュ値が前記取得した部分ハッシュ値の正解ハッシュ値と一致するか否かの２つを判定し、前記２つの判定のいずれもが一致する場合に前記システムのアップデート処理を継続し、前記２つの判定の少なくとも一方が一致しない場合に前記システムのアップデート処理を中断する第３の制御工程と、を有するセキュアブート方法。
【００９６】
（付記７）
付記１乃至５のいずれかにおいて、
前記プロセッサが、前記システムのプログラムを新たなプログラムに更新する第１の更新工程と、
前記プロセッサが、前記新たなプログラムに対応する複数の第１の部分ハッシュ値、及び、部分ハッシュ値の正解ハッシュ値を取得する取得工程と、
前記プロセッサが、前記システムの再起動を指示する再起動工程と、を有するセキュアブート方法。
【００９７】
（付記８）
付記１乃至７のいずれかにおいて、
前記複数の部分ハッシュ値の数はｎ個であって、前記ｎ個の部分ハッシュ値に基づいて１個の部分ハッシュ値の算出ハッシュ値が算出されるセキュアブート方法。
【００９８】
（付記９）
付記１乃至７のいずれかにおいて、
前記複数の部分ハッシュ値の数はｎ個であって、前記ｎ個の部分ハッシュ値のうちのｍ個の部分ハッシュ値に基づいて1個の部分ハッシュ値の算出ハッシュ値が算出され、前記ｎ個の部分ハッシュ値に基づいてｎ／ｍ個の部分ハッシュ値の算出ハッシュ値が算出されるセキュアブート方法。
【００９９】
（付記１０）
プロセッサと、
プログラム、前記プログラムが区分された複数の部分プログラムの複数の第１の部分ハッシュ値、及び、前記複数の第１の部分ハッシュ値が前記プログラムに対応する場合における複数の第１の部分ハッシュ値のハッシュ値である、部分ハッシュ値の正解ハッシュ値が記憶される記憶媒体とを有し、
前記プロセッサが、
前記システムの起動時に、前記記憶媒体に記憶される前記複数の第１の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値を算出する第１の算出処理と、
前記部分ハッシュ値の算出ハッシュ値が前記部分ハッシュ値の正解ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する第１の制御処理と
を実行する半導体装置。
【０１００】
（付記１１）
付記１０において、さらに、
前記プロセッサが、
前記システムの起動後、起動中のシステムのプログラムが区分された複数の部分プログラムのハッシュ値である、複数の第２の部分ハッシュ値を算出する第２の算出処理と、
前記算出した複数の第２の部分ハッシュ値が、前記記憶媒体に記憶される前記複数の第１の部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムの実行処理を継続し、一致しない場合に前記システムの実行処理を中断する第２の制御処理手段と
を実行する半導体装置。
【０１０１】
（付記１２）
付記１１において、
前記プロセッサは、前記第２の算出処理、及び、前記第２の制御処理を、前記複数の部分プログラム全てについて分割して実行する半導体装置。
【０１０２】
（付記１３）
付記１０乃至１２のいずれかにおいて、
前記プロセッサは、
前記システムのプログラムを新たなプログラムに更新する第１の更新処理と、
前記新たなプログラムに対応する複数の第１の部分ハッシュ値、及び、部分ハッシュ値の正解ハッシュ値を取得する取得処理と、
前記新たなプログラムが区分された複数の部分プログラムの複数の第３の部分ハッシュ値、及び、前記複数の第３の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値を算出する第３の算出処理と、
前記算出した複数の第３の部分ハッシュ値が前記取得した前記複数の第１の部分ハッシュ値と一致するか否か、及び、前記算出した部分ハッシュ値の算出ハッシュ値が前記取得した部分ハッシュ値の正解ハッシュ値と一致するか否かの２つを判定し、前記２つの判定のいずれもが一致する場合に前記システムのアップデート処理を継続し、前記２つの判定の少なくとも一方が一致しない場合に前記システムのアップデート処理を中断する第３の制御処理と
を実行する半導体装置。
【０１０３】
（付記１４）
付記１０乃至１２のいずれかにおいて、
前記プロセッサは、
前記システムのプログラムを新たなプログラムに更新する第１の更新処理と、
前記新たなプログラムに対応する複数の第１の部分ハッシュ値、及び、部分ハッシュ値の正解ハッシュ値を取得する取得処理と、
前記システムの再起動を指示する再起動処理と
を実行する半導体装置。
【０１０４】
（付記１５）
付記１０乃至１４のいずれかにおいて、
前記複数の部分ハッシュ値の数はｎ個であって、前記ｎ個の部分ハッシュ値に基づいて１個の部分ハッシュ値の算出ハッシュ値が算出される半導体装置。
【０１０５】
（付記１６）
付記１０乃至１４のいずれかにおいて、
前記複数の部分ハッシュ値の数はｎ個であって、前記ｎ個の部分ハッシュ値のうちのｍ個の部分ハッシュ値に基づいて1個の部分ハッシュ値の算出ハッシュ値が算出され、前記ｎ個の部分ハッシュ値に基づいてｎ／ｍ個の部分ハッシュ値の算出ハッシュ値が算出される半導体装置。
【０１０６】
（付記１７）
システムのセキュアブート処理をコンピューターに実行させるコンピューター読み取り可能なセキュアブートプログラムであって、
前記システムは、プロセッサと、プログラム、前記プログラムが区分された複数の部分プログラムの複数の第１の部分ハッシュ値、及び、前記複数の第１の部分ハッシュ値が前記プログラムに対応する場合における複数の第１の部分ハッシュ値のハッシュ値である、部分ハッシュ値の正解ハッシュ値が記憶された記憶媒体と、を有し、
前記セキュアブート処理は、
前記システムの起動時に、前記プロセッサが、前記記憶媒体に記憶される前記複数の第１の部分ハッシュ値のハッシュ値である部分ハッシュ値の算出ハッシュ値を算出する第１の算出処理と、
前記プロセッサが、前記部分ハッシュ値の算出ハッシュ値が前記部分ハッシュ値の正解ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する第１の制御処理と、を有するセキュアブートプログラム。
【符号の説明】
【０１０７】
１０：半導体装置、１１：インタフェース、１２：ＣＰＵ、１３：外部インタフェース、１４：ブートＲＯＭ、１５：フラッシュメモリ、１６：ＲＡＭ
【図１】
2015055898.tif 000003
【図２】
2015055898.tif 000004
【図３】
2015055898.tif 000005
【図４】
2015055898.tif 000006
【図５】
2015055898.tif 000007
【図６】
2015055898.tif 000008
【図７】
2015055898.tif 000009
【図８】
2015055898.tif 000010
【図９】
2015055898.tif 000011
【図１０】
2015055898.tif 000012
【図１１】
2015055898.tif 000013
【図１２】
2015055898.tif 000014
【図１３】
2015055898.tif 000015
【図１４】
2015055898.tif 000016
【図１５】
2015055898.tif 000017