(57)【要約】【課題】高速かつ安全にシステムを起動できること。【解決手段】組み込み機器は、システムのＯＳ起動毎に、ＯＳを複数に区分した部分プログラムのうち、ハッシュ値の検証対象となる異なる部分プログラムを選択し（ステップＳ４０１〜Ｓ４０７）、選択した部分プログラムのハッシュ値を算出する（ステップＳ４０８）。この後、算出したハッシュ値が、複数の部分プログラムそれぞれの正解のハッシュ値である正解部分ハッシュ値と一致するか否か判定する。そして、一致する場合にシステムの起動処理を継続し、一致しない場合にシステムの起動処理を中断させる（ステップＳ４０９〜ステップＳ４１１）。【選択図】図４
2015022521.tif 000002
【特許請求の範囲】
【請求項１】
コンピューターが、
システムのプログラム起動毎に、前記プログラムを複数に区分した部分プログラムのうち、ハッシュ値の検証対象となる異なる部分プログラムを選択する選択工程と、
前記選択した部分プログラムのハッシュ値を算出する算出工程と、
前記算出したハッシュ値が、複数の前記部分プログラムそれぞれの正解のハッシュ値である正解部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する検証工程と、
を実行することを特徴とするセキュアブート方法。
【請求項２】
前記選択工程は、
検証対象となる複数の前記部分プログラムの順番が設定された順序決定テーブルに基づき、検証対象となる前記部分プログラムを選択し、格納領域に格納された番号の前記部分プログラムをハッシュ値の検証対象とし、前記システムの起動毎に、前記順序決定テーブルに設定された次の順番の前記部分プログラムを選択する工程を、
含むことを特徴とする請求項１に記載のセキュアブート方法。
【請求項３】
前記プログラムは、前記システムのファームウェアと、ＯＳとを含み、
前記コンピューターは、前記システムの起動毎に、前記ファームウェアおよび前記ＯＳの選択した前記部分プログラムに対して、それぞれ前記検証工程を実行する、
ことを特徴とする請求項１または２に記載のセキュアブート方法。
【請求項４】
前記選択工程は、
前記順序決定テーブルに、前記システムの起動毎に、ハッシュ値の検証対象となる複数の前記部分プログラムの検証順序を昇順、降順、あるいはランダムに設定する設定工程を含む、
ことを特徴とする請求項２または３に記載のセキュアブート方法。
【請求項５】
前記コンピューターがさらに、
前記システムのプログラムを新たな更新プログラムに更新するプログラム更新工程と、
前記更新プログラムに対応する複数の正解部分ハッシュ値を取得する取得工程と、
前記更新プログラムが区分された複数の部分プログラムに対応する複数の部分ハッシュ値を算出する算出工程と、
前記算出した複数の部分ハッシュ値が、それぞれ前記取得した複数の前記正解部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムのアップデート処理を継続し、一致しない場合に前記システムのアップデート処理を中断する制御工程と、
を実行することを特徴とする請求項１〜４のいずれか一つに記載のセキュアブート方法。
【請求項６】
プロセッサと、
プログラムと、前記プログラムを複数に区分した場合におけるシステム起動時の複数の部分プログラムのハッシュ値の検証順序が設定された順序決定テーブルと、複数の前記部分プログラムそれぞれの正解のハッシュ値である正解部分ハッシュ値と、が記憶された記憶部と、を有し、
前記プロセッサは、
前記システムの起動毎に、前記記憶部に記憶される前記順序決定テーブルに基づき、ハッシュ値の検証対象となる異なる前記部分プログラムを選択し、
前記選択した部分プログラムのハッシュ値を算出し、
前記算出したハッシュ値が前記正解部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する、
ことを特徴とする組み込み機器。
【請求項７】
前記記憶部は、前記ハッシュ値の検証対象の前記部分プログラムの情報を格納する格納領域を有し、
前記プロセッサは、
前記記憶部に記憶される前記順序決定テーブルに基づき、検証対象となる前記部分プログラムの番号を前記格納領域に格納し、
前記格納領域に格納された番号の前記部分プログラムをハッシュ値の検証対象とし、前記システムの起動毎に、前記順序決定テーブルに設定された次の順番の前記部分プログラムの番号を前記格納領域に更新する、
ことを特徴とする請求項６に記載の組み込み機器。
【請求項８】
プロセッサと、プログラムと、前記プログラムを複数に区分した場合におけるシステム起動時の複数の部分プログラムのハッシュ値の検証順序が設定された順序決定テーブルと、複数の前記部分プログラムそれぞれの正解のハッシュ値である正解部分ハッシュ値と、が記憶された記憶部と、を有する組み込み機器に外部接続されるセキュアブート装置であって、
前記システムを起動させるブートＲＯＭと、
前記システムの起動毎に、前記記憶部に記憶される前記順序決定テーブルに基づき、ハッシュ値の検証対象となる異なる前記部分プログラムを選択し、
前記選択した部分プログラムのハッシュ値を算出し、
前記算出したハッシュ値が前記正解部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する検証手段と、
を有することを特徴とするセキュアブート装置。
【請求項９】
システムのセキュアブート処理をコンピューターに実行させる、コンピューターが読み取り可能なセキュアブートプログラムであって、
前記コンピューターに、
前記システムのプログラム起動毎に、前記プログラムを複数に区分した部分プログラムのうち、ハッシュ値の検証対象となる異なる部分プログラムを選択させ、
前記選択した部分プログラムのハッシュ値を算出させ、
前記算出したハッシュ値が、複数の前記部分プログラムそれぞれの正解のハッシュ値である正解部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断させる、
処理を実行させることを特徴とするセキュアブートプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システムをセキュアに起動させるセキュアブート方法、組み込み機器、セキュアブート装置およびセキュアブートプログラムに関する。
【背景技術】
【０００２】
人命を預かる自動車や、電子マネーを扱う組み込み端末、あるいは、コンテンツデータを扱うゲーム機等の組み込み機器において重要なデータを処理する機会が増加している。このような機器では、ＯＳやファームウェアが悪意ある第三者によって改ざんされ、予期せぬ動作が引き起こされる危険性が存在する。これに対し、開発者の意図したＯＳやファームェアのみを動作させる手法としてセキュアブートという手法が存在する。
【０００３】
また、一般的な組み込み機器の起動時、初めにブートＲＯＭが呼び出され、記述されたコードを順に実行する。その後、ファームウェアなどのブートＲＯＭより詳細な処理が呼び出され、さらにＯＳなどの複雑な処理が呼び出される。このように呼び出し順に、より複雑な処理が順次呼び出される。
【０００４】
そこで、組み込み機器のセキュアブート時には、ＲＯＭ（ブートＲＯＭ）などの書き換えられない部品を信頼の原点とし、子プロセスとして、ファームウェアが呼び出される際に、ファームウェアのハッシュ値が算出される。そして、算出されたハッシュ値と、予めＲＯＭに格納されたファームウェアの正解ハッシュ値と一致する場合に、適正なファームウェアであるとして起動される。続いて、さらに孫プロセスとして、ＯＳが呼び出される際に、ＯＳのプログラムのハッシュ値が算出される。そして、算出されたハッシュ値と、予め子プロセスに格納されるＯＳのプログラムの正解ハッシュ値と一致する場合に、適正なＯＳであるとして起動される。
【０００５】
セキュアブート工程において、このような処理が繰り返されることによって、開発者が意図したプログラムのみの実行が可能になる。ハッシュ値を使用するシステムについては、例えば、特許文献１に記載される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−２６５４２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一般的に、プログラムのサイズは、ブートＲＯＭ、ファームウェア、ＯＳのように、呼び出す順にしたがって大きくなっていく。このため、例えばＯＳのプログラムのサイズは、数百メガバイトに及ぶことがある。しかしながら、プログラムのサイズが大きい場合、一般的に組み込み機器環境におけるＣＰＵ等の処理能力が乏しいことから、プログラムのハッシュ値の算出処理が高負荷となり、ＯＳの起動に非常に時間がかかる。
【０００８】
一つの側面では、本発明は、高速かつ安全にシステムを起動させることができることを目的とする。
【課題を解決するための手段】
【０００９】
一つの案では、システムのプログラム起動毎に、前記プログラムを複数に区分した部分プログラムのうち、ハッシュ値の検証対象となる異なる部分プログラムを選択し、前記選択した部分プログラムのハッシュ値を算出し、前記算出したハッシュ値が、複数の前記部分プログラムそれぞれの正解のハッシュ値である正解部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する処理を行う。
【発明の効果】
【００１０】
一つの実施形態によれば、高速かつ安全にシステムを起動させることができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施の形態１にかかる組み込み機器の構成の一例を示す図である。
【図２】図２は、一般的なセキュアブートの流れを説明する図である。
【図３】図３は、実施の形態１におけるセキュアブート方法の起動時の工程を説明する図である。
【図４】図４は、実施の形態１におけるセキュアブート方法における起動時の工程を説明するフローチャートである。
【図５】図５は、実施の形態１におけるセキュアブート方法のアップデート工程の概要を説明する図である。
【図６】図６は、実施の形態１におけるセキュアブート方法におけるアップデート工程を説明するフローチャートである。
【図７】図７は、実施の形態２にかかる組み込み機器のセキュアブート構成の一例を示す図である。
【図８】図８は、実施の形態３におけるセキュアブート方法の起動時の工程を説明する図である。
【図９】図９は、実施の形態３におけるセキュアブート方法における起動時の工程を説明するフローチャートである。
【発明を実施するための形態】
【００１２】
（実施の形態１）
（組み込み機器の構成）
以下に添付図面を参照して、開示技術の好適な実施の形態を詳細に説明する。図１は、実施の形態１にかかる組み込み機器の構成の一例を示す図である。組み込み機器１００は、例えば、自動車や、電子マネーを扱う組み込み端末、あるいは、コンテンツデータを扱うゲーム機等予め用途が特定された機器である。
【００１３】
図１の組み込み機器１００は、例えば、プロセッサ（ＣＰＵ：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１、ブートＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２、記憶部（例えばフラッシュメモリ）１０３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０４、インタフェース１０５、外部インタフェース１０６を有するシステムである。各部は、バス１０７を介して互いに接続される。組み込み機器１００は、コンピューターの一例である。
【００１４】
ブートＲＯＭ１０２には、組み込み機器１００の電源投入時に最初に動作するＩＰＬ（Ｉｎｉｔｉａｌ  Ｐｒｏｇｒａｍ  Ｌｏａｄｅｒ）、フラッシュメモリ１０３のデバイスドライバ起動用のプログラム等が格納される。
【００１５】
また、フラッシュメモリ１０３には、オペレーション・システム（以下、ＯＳ）１１１と、ファームウェア１１２のプログラムが格納される。また、ファームウェア１１２には、セキュアブート用のＯＳ１１１を複数に分割した際の複数のパート１〜ｎに対するハッシュ計算を行う順序の要素（値）が定められた順序決定テーブル１１３が記憶される。
【００１６】
さらに、ファームウェア１１２には、セキュアブート用のＯＳ１１１を複数に分割した際の複数のパート１〜ｎのそれぞれに対応するｎ個の正解部分ハッシュ値１１４が記憶される。フラッシュメモリ１０３は、ＨＤＤ等の別の記憶媒体であってもよい。
【００１７】
また、ファームウェア１１２（またはＯＳ１１１）には、ＯＳ１１１の複数のパート１〜ｎのうちハッシュ値検証対象となる一つのパートを選択するための現在の番号格納領域１１５が記憶される。この現在の番号格納領域１１５は、順序決定テーブル１１３に格納された順序の要素（値）のうち一つが選択して格納され、この現在の番号格納領域１１５に格納された値に基づき、対応するＯＳ１１１の一つのパートを選択してハッシュ計算を行う。
【００１８】
これらＯＳ１１１の起動時に用いる順序決定テーブル１１３と、正解部分ハッシュ値１１４と、現在の番号格納領域１１５は、ファームウェア１１２内においてファームウェア１１２の更新時に外部から直接的には書き換えられない領域に格納するのが好ましい。このほか、フラッシュメモリ１０３内における特定の領域（ＯＳ１１１あるいはファームウェア１１２の更新時に外部から直接的には書き換えられない領域）に格納してもよい。
【００１９】
ＣＰＵ１０１は、組み込み機器１００の電源がＯＮ（起動）される毎に、ＯＳ１１１を読み込んでＯＳ起動させる。この際、ＣＰＵ１０１は、ファームウェア１１２をプログラム実行することにより、ＯＳ１１１をハッシュ値を用いた演算処理によりセキュアに起動させる。
【００２０】
具体的には、１回の起動毎に順序決定テーブル１１３に記憶された順序にしたがって、ＯＳ１１１のうち、現在の番号格納領域１１５に格納された一つのパートをハッシュ値検証対象としてハッシュ値を計算し、対応するパートの正解部分ハッシュ値１１４と比較する。そして、ＣＰＵ１０１は、ＯＳ１１１の選択された一つのパートについて計算したハッシュ値が正解部分ハッシュ値１１４と一致する場合にのみ、ＯＳ１１１の起動を継続させる。
【００２１】
この際、ＣＰＵ１０１は、ＯＳ１１１のうち、選択された一つのパートについて計算したハッシュ値が正解部分ハッシュ値１１４と一致しない場合には、この一致しない時点でＯＳ１１１の起動を中断させる。つまり、フラッシュメモリ１０３に記憶されたＯＳ１１１が改ざんされている場合、ＯＳ１１１の起動は中断され、ＯＳ１１１が真正である場合にのみＯＳ１１１のプログラムが最後まで実行され、組み込み機器１００の起動を正常に実行（終了）できる。
【００２２】
上記構成では、ハッシュ値の計算と、正解ハッシュ値との比較の処理をＣＰＵ１０１が実行する構成とした。これに限らず、図１の組み込み機器１００のバス１０７を介して専用のハッシュ計算回路を外部接続し、このハッシュ計算回路がハッシュ値の計算と比較を行い、ＣＰＵ１０１に通知する構成としてもよい。
【００２３】
インタフェース１０５は、外部の機器とのデータの入出力を制御する。例えば、インタフェース１０５を介して、ＯＳ１１１のプログラムのアップデートデータ等が入力される。また、外部インタフェース１０６は、入力装置１２１、および、出力装置１２２とのデータの入出力を制御する。
【００２４】
（セキュアブートの流れ）
図２は、一般的なセキュアブートの流れを説明する図である。セキュアブートでは、起動対象のファームウェア１１２やＯＳ１１１が信頼できるものであることが確認された場合に、起動処理が行われる。そこで、例えば、ブートＲＯＭ１０２に、ファームウェア１１２が真正であることを検証するためのファームウェアの正解ハッシュ値Ｈ１が書き込まれる。また、ファームウェア１１２内部に、ＯＳ１１１が改ざんされていないことを検証するためのＯＳ１１１の正解ハッシュ値Ｈ２が書き込まれる。
【００２５】
ハッシュ値は、ハッシュ関数によって、任意の長さのデータが演算されることによって出力される固定長のデータを示す。同一の入力データからは、同一のハッシュ値が算出される。入力データの長さに関わらず、同一のハッシュ関数によって算出されるハッシュ値の長さは、一定の長さである。ハッシュ関数には、例えば、ＳＨＡ−１、ＳＨＡ−２５６、ＳＨＡ−３８４、ＳＨＡ−５１２、ＳＨＡ−２２４、Ｗｉｒｌｐｏｏｌ、ＭＤ５、ＳＨＡ−３等がある。なお、ハッシュ値の長さは、ハッシュ関数によって異なるが、例えば、１２８ｂｉｔ、１６０ｂｉｔ、２２４ｂｉｔ、２５６ｂｉｔ、３８４ｂｉｔ、５１２ｂｉｔ、１０２４ｂｉｔ等である。
【００２６】
図２において、組み込み機器１００の電源がＯＮされると、ＣＰＵ１０１は、ブートＲＯＭ１０２に書き込まれたブートローダを実行する。これにより、ＩＰＬが実行されると共に、ファームウェア１１２の正解ハッシュ値Ｈ１が読み出される。ＣＰＵ１０１は、フラッシュメモリ１０３等に記憶されたファームウェア１１２に基づいてハッシュ値を算出し、正解ハッシュ値Ｈ１と比較する。そして、一致する場合はファームウェア１１２を起動し、一致しない場合はファームウェア１１２の起動を中断する。つまり、フラッシュメモリ１０３に記憶されたファームウェア１１２が改ざんされている場合、ファームウェア１１２の起動は中断される。つまり、ファームウェア１１２が真正である場合にのみ起動が行われる。
【００２７】
ファームウェア１１２が起動されると、続いて、ＯＳ１１１のプログラムが真正であるか否かが検証される。ＯＳ１１１の正解ハッシュ値Ｈ２は、例えば、ファームウェア１１２内部（フラッシュメモリ１０３）に格納される。ＣＰＵ１０１は、ＯＳ１１１のプログラムに基づいてハッシュ値を算出し、正解ハッシュ値Ｈ２と比較する。そして、一致する場合はＯＳ１１１を起動し、一致しない場合はＯＳ１１１の起動を中断する。つまり、ＯＳ１１１のプログラムが改ざんされている場合、当該ＯＳ１１１の起動は中断される。これにより、ＯＳ１１１が真正である場合にのみ起動が行われる。
【００２８】
このように、第１階層のプログラム（図２の例では、ファームウェア１１２）から、第２階層のプログラム（図２の例では、ＯＳ１１１）が呼び出されることを繰り返して、最終的にＯＳ１１１が起動される。ところで、例えば、ＯＳ１１１のプログラムのサイズは大きい。このため、ハッシュ値の算出処理に時間がかかり、システムのセキュアブートにも時間がかかる。
【００２９】
そこで、実施の形態１におけるセキュアブート方法では、システムは、プロセッサと、プログラム、プログラムが区分された複数の部分プログラムそれぞれの正解部分ハッシュ値と、プログラム起動毎にハッシュ値検証対象となる一つの部分プログラムの順序を示す順序決定テーブルが記憶された記憶部と、を有する。
【００３０】
そして、セキュアブート方法は、システムの起動時に、プロセッサが、順序決定テーブルに基づいて一つのハッシュ値検証対象となる一つの部分プログラムを選択し、この部分プログラムの部分ハッシュ値を算出する。算出したハッシュ値を対応する部分プログラムの正解部分ハッシュ値と比較する。プロセッサは、部分ハッシュ値が正解部分ハッシュ値と一致する場合にシステムの起動処理を継続し、一致しない場合にシステムの起動処理を中断する。
【００３１】
実施の形態１におけるセキュアブート方法によると、ハッシュ値の算出をプログラムの一部を用いて部分的に行う。これにより、プログラム全体に対するハッシュ値の算出を行わずに済み、ハッシュ値の算出および比較にかかる処理を高速に行うことができる。例えば、ＯＳ１１１をｎ個の部分プログラムに区分けした場合、ＯＳ１１１全体の１／ｎについてだけハッシュ値検証を行えばよく、安全にシステムが起動できるとともに、プロセッサに処理負担をかけず、システムの起動時間を短縮できるようになる。
【００３２】
続いて、実施の形態１におけるセキュアブート方法について、順に説明する。
【００３３】
（処理の概要：ＯＳのセキュアな起動）
図３は、実施の形態１におけるセキュアブート方法の起動時の工程を説明する図である。この例では、ＯＳ１１１の起動工程について例示する。ただし、実施の形態例におけるセキュアブート方法は、ＯＳ１１１の起動工程への適用に限定されるものではなく、ファームウェア１１２やアプリケーションの起動工程にも適用可能である（具体例は実施の形態３で説明する）。
【００３４】
実施の形態１では、図３に示すように、ハッシュ値の生成のために、ＯＳ１１１のプログラムが複数の部分プログラムに区分される。この例において、ＯＳ１１１のプログラムは、例えば、パート１〜パートｎまでの、ｎ個の部分プログラム１１１ａ〜１１１ｎに区分される。
【００３５】
そして、区分されたｎ個の部分プログラム１１１ａ〜１１１ｎのそれぞれの正解部分ハッシュ値１１４が、予め、ファームウェア１１２内部に格納される。この例では、ｎ個の正解部分ハッシュ値１１４ａ〜１１４ｎは、フラッシュメモリ１０３に記憶される。
【００３６】
この正解部分ハッシュ値１１４（１１４ａ〜１１４ｎ）は、暗号化してフラッシュメモリ１０３に記憶しておくこともできる。この場合、ハッシュ値検証時に必要なパートの正解部分ハッシュ値１１４ａ〜１１４ｎのみ復号化して、対応する部分ハッシュ値３１１（３１１ｄ）と比較する。
【００３７】
また、区分されたｎ個の部分プログラム１１１ａ〜１１１ｎのうち、ＯＳ１１１の起動時におけるハッシュ値検証対象となる順序の要素は、ファームウェア１１２内部の順序決定テーブル１１３に予め複数記憶される。この例では、順序決定テーブル１１３は、フラッシュメモリ１０３に記憶される。
【００３８】
図３に示す順序決定テーブル１１３は、ＯＳ１１１のｎ個の部分プログラム（パート１，２，３，…ｎ）に対応する要素として値「１，２，３，…ｎ」を昇順に一つずつ設定した例である。この場合、ＯＳ１１１の初回（１回目）の起動時には、ＯＳ１１１のパート１がハッシュ値検証対象となり、ＯＳ１１１の２回目の起動時には、ＯＳ１１１のパート２がハッシュ値検証対象となる。ＯＳ１１１のｎ回の起動時には、ＯＳ１１１のパートｎがハッシュ値検証対象となる。これにより、ＯＳ１１１をｎ回起動させたとき、ＯＳ１１１全体（パート１〜ｎ）のハッシュ値を検証できることになる。なお、ｎ＋１回目には、１回目の起動時の設定（パート１）に戻る設定としておく。
【００３９】
図３の例では、順序決定テーブル１１３は、ＯＳ１１１のプログラムをパート１，２，３，…ｎと、ハッシュ値検証対象の要素（値）を昇順に一つずつ設定したが、これに限らず、降順に設定したり、ランダム（例えば、３，７，５，４，…１）に設定してもよい。いずれにおいても、ＯＳ１１１の起動毎にＯＳ１１１の異なるパートをハッシュ値検証対象とすればよい。
【００４０】
図３の例では、ＯＳ１１１の４回目の起動時を示している。前回（ＯＳ１１１の３回目の起動時）には、ファームウェア（フラッシュメモリ１０３）には、選択したＯＳ１１１のパートの番号「３」を現在の番号格納領域１１５に格納しておく。そして、この４回目のＯＳ１１１の起動時には、現在の番号格納領域１１５からパートの番号「３」を読み出す。そして、システムは、順序決定テーブル１１３に基づき、前回のハッシュ値検証対象の要素（パート３に対応する値「３」）の次の要素「４（パート４）」を選択する。選択した値「４」は、新たに現在の番号格納領域１１５に更新し、格納する。
【００４１】
そして、システムは、ＯＳ１１１の起動中に、選択した部分プログラム（パート４）１１１ｄについてハッシュ関数を用いてハッシュ値を計算し、部分ハッシュ値４（３１１ｄ）を求める。そして、選択した部分プログラム（パート４）１１１ｄについて計算した部分ハッシュ値４（３１１ｄ）を、予め記憶してある正解部分ハッシュ値１１４のなかから対応するパート４の正解部分ハッシュ値４（１１４ｄ）と比較する。
【００４２】
この後、部分ハッシュ値４（３１１ｄ）が、予め記憶された正解部分ハッシュ値４（１１４ｄ）と同一の場合、ＯＳ１１１の起動を継続させ、同一ではない場合、ＯＳ１１１の起動を中断させる。
【００４３】
（フローチャート：ＯＳのセキュアな起動）
図４は、実施の形態１におけるセキュアブート方法における起動時の工程を説明するフローチャートである。組み込み機器１００の電源がＯＮに設定されると、ＣＰＵ１０１は、ブートＲＯＭ１０２を読み込み、ＩＰＬを実行する（ステップＳ４０１）。このとき、ＣＰＵ１０１は、ブートＲＯＭ１０２に格納されるファームウェア１１２の正解のハッシュ値を読み出す。
【００４４】
続いて、ＣＰＵ１０１は、ファームウェア１１２のハッシュ値を計算する（ステップＳ４０２）。具体的に、ＣＰＵ１０１は、ファームウェア１１２のプログラムを入力として、ハッシュ関数に基づいて、ファームウェア１１２のハッシュ値を計算する。続いて、ＣＰＵ１０１は、算出したハッシュ値と、ブートＲＯＭ１０２から読み出した正解ハッシュ値とが一致するか否かを判定する（ステップＳ４０３）。一致しない場合（ステップＳ４０３：Ｎｏ）、ＣＰＵ１０１は、システムの起動処理を中断させる（ステップＳ４１１）。一致する場合（ステップＳ４０３：Ｙｅｓ）、ＣＰＵ１０１は、フラッシュメモリ１０３からファームウェア１１２を読み込み、実行する（ステップＳ４０４）。
【００４５】
ファームウェア１１２が実行されると、続いて、ＣＰＵ１０１は、現在の番号格納領域１１５に格納されているデータを読み出す（ステップＳ４０５）。このときの値ｃは、前回のＯＳ１１１起動時に検証対象とされたＯＳ１１１のパート番号を示す。
【００４６】
そして、ＣＰＵ１０１は、順序決定テーブル１１３を参照し、値ｃの次の順番（要素）を読み出し、値ｃ’とする（ステップＳ４０６）。図３の例では、順序決定テーブル１１３は昇順に番号が格納されているため、ｃが「３」であれば、ｃ’は次の番号「４」となる。そして、ＣＰＵ１０１は、このｃ’「４」を現在の番号格納領域１１５に格納する（ステップＳ４０７）。
【００４７】
次に、ＣＰＵ１０１は、現在の番号格納領域１１５に格納されたｃ’「４」に対応するＯＳ１１１のパート４（１１１ｄ）の部分ハッシュ値４（３１１ｄ）を計算する（ステップＳ４０８）。そして、ＣＰＵ１０１は、算出した部分ハッシュ値４（３１１ｄ）と、フラッシュメモリ１０３から読み出した、ＯＳ１１１のパート４（１１１ｄ）に対応する正解部分ハッシュ値４（１１４ｄ）とが等しい（一致する）か否かを判定する（ステップＳ４０９）。
【００４８】
一致しない場合（ステップＳ４０９：Ｎｏ）、ＣＰＵ１０１は、システムの起動処理（ＯＳ１１１の読み込み）を中断させる（ステップＳ４１１）。一致する場合（ステップＳ４０９：Ｙｅｓ）、ＣＰＵ１０１は、ＯＳ１１１のプログラムの読み込みを実行（継続）する（ステップＳ４１０）。
【００４９】
なお、図４のフローチャートの例では、先に現在の番号格納領域１１５に格納された値を更新し、その後に更新した値に対応するパートの部分プログラム１１１ａ〜１１１ｎのハッシュ値を計算する手順とした。これに限らず、先に現在の番号格納領域１１５に格納された値に対応するパートの部分プログラム１１１ａ〜１１１ｎのハッシュ値を計算し、その後に現在の番号格納領域１１５に更新した値を格納する手順としてもよい。
【００５０】
このように、実施の形態１におけるセキュアブート方法によると、ＣＰＵ１０１は、ＯＳ１１１のプログラム全体に基づくハッシュ値を算出するのではなく、ＯＳ１１１の部分プログラム１１１ａ〜１１１ｎのうち順序を有して選択した一つの部分プログラムについて部分ハッシュ値を計算し、対応する正解部分ハッシュ値と比較する。そして、ＣＰＵ１０１は、比較の結果、部分ハッシュ値と、正解部分ハッシュ値とが一致すればＯＳ１１１の起動を続行する。
【００５１】
つまり、実施の形態１におけるセキュアブート方法によると、ＯＳ１１１の起動毎に、ＯＳ１１１のうち異なる一つの部分プログラム１１１ａ〜１１１ｎを選択して、選択した部分プログラム１１１ａ〜１１１ｎの部分ハッシュ値を正解部分ハッシュ値と比較して、正しいかが検証される。これにより、部分ハッシュ値が改ざんされていないことが検証される。そして、部分ハッシュ値が改ざんされていないことが検証されることにより、部分ハッシュ値に対応すると想定されるＯＳ１１１のプログラムについて、改ざんされていないとみなすことが可能になる。
【００５２】
また、実施の形態１におけるセキュアブート方法において、ＣＰＵ１０１は、ＯＳ１１１の１回の起動時に、プログラム全体のハッシュ値を算出しない。これにより、システムの起動時におけるＣＰＵ１０１のハッシュ値算出にかかる処理負荷を抑えることができる。そして、ハッシュ値の算出にかかる時間が大幅に削減でき、セキュアブートにかかる時間を短縮できる。一般的に、組み込み機器１００が搭載するＣＰＵは処理能力が高くはない。しかしながら、実施の形態１におけるセキュアブート方法によると、システム起動時のＣＰＵ１０１の負荷が抑えられることにより、組み込み機器１００であっても、高速に、安全性の高い起動が可能になる。
【００５３】
このように、実施の形態１におけるセキュアブート方法によると、起動対象のＯＳ１１１のプログラムが改ざんされていないことを、高速に、効率的に検証することが可能になる。また、実施の形態１におけるセキュアブート方法では、フラッシュメモリ１０３等の記憶部に、ｎ個の値（変数）の順序決定テーブル１１３と、ｎ個の正解部分ハッシュ値１１４と、一つの値（変数）の現在の番号格納領域１１５と、を格納するだけでよいため、ハッシュ値検証に必要な最小限のデータを用いて、簡易に、システムの高速なセキュアブートが実現可能になる。
【００５４】
（処理の概要：ＯＳのアップデート時）
ＯＳ１１１のアップデート時には、正解部分ハッシュ値１１４は、例えば、開発者等から正規ルート（安全な経路）にしたがって入手され、フラッシュメモリ１０３等の記憶部に記憶される。
【００５５】
図５は、実施の形態１におけるセキュアブート方法のアップデート工程の概要を説明する図である。図５の例では、ＯＳ１１１のアップデート工程を例示する。実施の形態１におけるセキュアブート方法は、ファームウェア１１２やアプリケーションのアップデート工程にも適用可能である。
【００５６】
図５において、実施の形態１では、ＯＳ１１１のアップデート時、正規のルートにしたがって安全な手法により、正解部分ハッシュ値１１４（１１４ａ〜１１４ｎ）が取得される。また、アップデート工程において、更新されたＯＳ１１１のプログラムの部分プログラム１１１ａ〜１１１ｎに基づいて複数の部分ハッシュ値３１１（３１１ａ〜３１１ｎ）が算出される。そして、算出した複数の部分ハッシュ値３１１（３１１ａ〜３１１ｎ）のそれぞれは、取得された複数の正解部分ハッシュ値１１４（１１４ａ〜１１４ｎ）と一致するか否か検証される。一致しない場合、アップデート処理に失敗したものと判定される。この場合、アップデート過程において、新たなＯＳ１１１のプログラム、または、正解部分ハッシュ値１１４（１１４ａ〜１１４ｎ）が改ざんされたことを示す。一致する場合、複数の正解部分ハッシュ値１１４（１１４ａ〜１１４ｎ）がファームウェア１１２内部に格納される。
【００５７】
（フローチャート：ＯＳのアップデート時）
図６は、実施の形態１におけるセキュアブート方法におけるアップデート工程を説明するフローチャートである。アップデート処理として、初めに、アップデート対象のＯＳ１１１のプログラムに対応する正解部分ハッシュ値１１４（１１４ａ〜１１４ｎ）が正規ルートで入手される（ステップＳ６０１）。続いて、ＯＳ１１１のプログラムがアップデートされる（ステップＳ６０２）。
【００５８】
次に、ＣＰＵ１０１は、新たなＯＳ１１１のプログラムが区分された新しい部分プログラム１１１ａ〜１１１ｎ毎に、部分ハッシュ値３１１（３１１ａ〜３１１ｎ）を計算する（ステップＳ６０３）。そして、ＣＰＵ１０１は、算出した複数の部分ハッシュ値３１１（３１１ａ〜３１１ｎ）と、フラッシュメモリ１０３等の記憶部に記憶された複数の正解部分ハッシュ値１１４（１１４ａ〜１１４ｎ）とが等しい（一致する）か否かを判定する（ステップＳ６０４）。一致しない場合（ステップＳ６０４：Ｎｏ）、ＣＰＵ１０１は、ＯＳ１１１のアップデート処理を中断する（ステップＳ６０７）。一方、一致する場合（ステップＳ６０４：Ｙｅｓ）、続いて、ＣＰＵ１０１は、複数の部分ハッシュ値３１１（３１１ａ〜３１１ｎ）をファームウェア１１２に格納する（ステップＳ６０５）。これにより、ＯＳ１１１のアップデート処理が完了する（ステップＳ６０６）。
【００５９】
このように、実施の形態１におけるセキュアブート方法によると、アップデートによって更新された部分ハッシュ値３１１（３１１ａ〜３１１ｎ）は、アップデート工程において検証されてもよいし、再起動後に検証されてもよい。これにより、プログラムがアップデートされた場合についても、新たなプログラムと、新たな複数の部分ハッシュ値３１１（３１１ａ〜３１１ｎ）と、正解部分ハッシュ値１１４（１１４ａ〜１１４ｎ）に基づいて、高速、かつ、安全なセキュアブートが実現可能になる。
【００６０】
（実施の形態２）
上述した実施の形態１では、組み込み機器１００のＣＰＵ１０１が、ファームウェア１１２をプログラム実行することにより、ＯＳ１１１をハッシュ値を用いた演算処理によりセキュアに起動させる構成とした。実施の形態２では、組み込み機器１００の外部にセキュアブート装置を設け、セキュアブート方法をハードウェアによって実現し、組み込み機器１００のプログラムをセキュアに起動させる。
【００６１】
図７は、実施の形態２にかかる組み込み機器のセキュアブート構成の一例を示す図である。図７において、図１と同様の構成には同一の符号を付してある。図示のように、組み込み機器１００には、インタフェース７０１を介してセキュアブート装置７００が（バス）接続される。
【００６２】
図１において、組み込み機器１００に設けられていたブートＲＯＭ１０２をセキュアブート装置７００側に設ける。ブートＲＯＭ１０２が格納する情報は、図１と同様である。セキュアブート装置７００は、インタフェース７０１と、ブートＲＯＭ１０２と、部分ハッシュ値計算装置７０３と、部分ハッシュ値検証装置７０４と、ハッシュ値計算装置７０５と、これらを接続するバス７０６と、を含む。部分ハッシュ値計算装置７０３と、部分ハッシュ値検証装置７０４と、ハッシュ値計算装置７０５は、ハッシュ値を検証する検証手段として機能する。
【００６３】
実施の形態１同様に、ブートＲＯＭ１０２には、ＩＰＬのプログラム、フラッシュメモリ１０３のデバイスドライバ起動用のプログラム等が格納される。また、フラッシュメモリ１０３には、ＯＳ１１１のプログラム、ファームウェア１１２が記憶される。ファームウェア１１２には、順序決定テーブル１１３と、正解部分ハッシュ値１１４と、現在の番号格納領域１１５が記憶される。
【００６４】
部分ハッシュ値計算装置７０３は、複数の部分プログラム１１１（１１１ａ〜１１１ｎ）から選択した一つの部分プログラムのハッシュ値、即ち、部分ハッシュ値３１１（３１１ａ〜３１１ｎ）を計算する。部分ハッシュ値検証装置７０４は、複数の部分ハッシュ値３１１（３１１ａ〜３１１ｎ）がプログラムに対応するか否かを検証する。ハッシュ値計算装置７０５は、ハッシュ値を算出する装置であって、部分ハッシュ値計算装置７０３によって制御される。
【００６５】
セキュアブート装置７００において、インタフェース７０１を介して組み込み機器１００の電源がＯＮされたことが検知されると、ブートＲＯＭ１０２のブートローダに基づいてＩＰＬが実行される。そして、ファームウェアのハッシュ値がセキュアブート装置内部で計算され、セキュアブート装置内部のフラッシュメモリに格納されている正解ハッシュ値と比較し、一致すれば起動を継続、一致しなければ起動を中止する。そして、部分ハッシュ値計算装置７０３と、部分ハッシュ値検証装置７０４にしたがって、実施の形態１において説明した起動時の処理が行われる。
【００６６】
本実施の形態２によれば、セキュアブート方法における各工程がハードウェアによって実現されるため、ＣＰＵ１０１の処理負荷を軽減できる。これにより、ＣＰＵ１０１は、システム起動時に他のプロセスを実行することが可能になるため、より高速にセキュアブートが行えるようになる。このため、組み込み機器１００は、より高速なセキュアブートが実現できると共に、部分ハッシュ値に基づいて、起動対象のプログラムが改ざんされていないかを判定することが可能になる。また、組み込み機器１００は、セキュアブート装置７００が接続されることにより、ブートＲＯＭ１０２により起動可能となり、フラッシュメモリ１０３に格納されたプログラム（ＯＳ１１１等）のプログラムをセキュアに起動させることができるようになる。
【００６７】
（実施の形態３）
（処理の概要：ファームウェアおよびＯＳのセキュアな起動）
図８は、実施の形態３におけるセキュアブート方法の起動時の工程を説明する図である。実施の形態３では、ファームウェア１１２およびＯＳ１１１の起動工程について例示する。実施の形態１では、ＯＳ１１１をセキュアに起動させるために、ＯＳ１１１のプログラムをパート１〜パートｎまでの、ｎ個の部分プログラム１１１ａ〜１１１ｎに区分した。実施の形態３では、ＯＳ１１１の区分と同様に、ファームウェア１１２についても、パート１〜パートｎまでの、ｎ個の部分プログラム１１２ａ〜１１２ｎに区分して、ファームウェアについてもセキュアに起動させる。
【００６８】
ＯＳ１１１に関しては、実施の形態１と同様に、ＯＳ１１１の起動時に用いる順序決定テーブル１１３と、正解部分ハッシュ値１１４と、現在の番号格納領域１１５と、をファームウェア１１２（フラッシュメモリ１０３）に格納する。
【００６９】
ファームウェア１１２に関しては、ファームウェア１１２の起動時に用いる順序決定テーブル８１３と、正解部分ハッシュ値８１４と、現在の番号格納領域８１５と、をファームウェア１１２内においてファームウェア１１２の更新時に外部から直接的には書き換えられない領域に格納するのが好ましい。また、ＯＳ１１１用の順序決定テーブル１１３と、正解部分ハッシュ値１１４と、現在の番号格納領域１１５の各領域と異なる領域に格納する。このほか、フラッシュメモリ１０３内における特定の領域（ＯＳ１１１あるいはファームウェア１１２の更新時に書き換えられない領域）に格納してもよい。
【００７０】
そして、図８に示すように、順序決定テーブル８１３は、ＯＳ１１１の起動と同様に、ファームウェア１１２の起動毎にファームウェア１１２の異なるパートをハッシュ値検証対象とするために、ファームウェア１１２のプログラムをパート１，２，３，…ｎと、ハッシュ値検証対象の要素（値）を所定順に一つずつ設定したものを用いる。
【００７１】
図８の例では、ファームウェア１１２の２回目の起動時を示している。前回（ファームウェア１１２の１回目の起動時）には、選択したファームウェア１１２のパートの番号「１」を現在の番号格納領域８１５に格納しておく。そして、この２回目のファームウェア１１２の起動時には、現在の番号格納領域８１５からパートの番号「１」を読み出す。そして、システムは、順序決定テーブル８１３に基づき、前回のハッシュ値検証対象の要素（パート１に対応する値「１」）の次の要素「２（パート２）」を選択する。選択した値「２」は、新たに現在の番号格納領域８１５に更新し、格納する。
【００７２】
そして、システムは、ファームウェア１１２の起動中に、選択した部分プログラム（パート２）１１２ｂについてハッシュ関数を用いてハッシュ値を計算し、部分ハッシュ値２（８１１ｂ）を求める。そして、選択した部分プログラム（パート２）１１２ｂについて計算した部分ハッシュ値２（８１１ｂ）を、予め記憶してある正解部分ハッシュ値８１４のなかから対応するパート２の正解部分ハッシュ値２（８１４ｂ）と比較する。
【００７３】
この後、部分ハッシュ値２（８１１ｂ）が、予め記憶された正解部分ハッシュ値２（８１４ｂ）と同一の場合、ファームウェア１１２の起動を継続させ、同一ではない場合、ファームウェア１１２の起動を中断させる。
【００７４】
以上のファームウェア１１２に対する部分ハッシュ値を用いたセキュアな起動後に、ＯＳ１１１についても同様に（実施の形態１に示したように）、部分ハッシュ値を用いたセキュアな起動を行う。
【００７５】
（フローチャート：ファームウェアおよびＯＳのセキュアな起動）
図９は、実施の形態３におけるセキュアブート方法における起動時の工程を説明するフローチャートである。実施の形態３のセキュアブート方法におけるファームウェア１１２の起動は、実施の形態１（図４）において説明したＯＳ１１１の起動と処理内容は基本的に同じである。
【００７６】
組み込み機器１００の電源がＯＮに設定されると、ＣＰＵ１０１は、ブートＲＯＭ１０２を読み込み、ＩＰＬを実行する（ステップＳ９０１）。このとき、ＣＰＵ１０１は、現在の番号格納領域８１５に格納されているファームウェア用のデータを読み出す（ステップＳ９０２）。このときの値ｃは、前回のファームウェア１１２の起動時に検証対象とされたファームウェア１１２のパート番号を示す。
【００７７】
そして、ＣＰＵ１０１は、ファームウェア１１２用の順序決定テーブル８１３を参照し、値ｃの次の要素を読み出し、値ｃ’とする（ステップＳ９０３）。図８の例では、順序決定テーブル８１３は昇順に番号が格納されているため、ｃが「１」であれば、ｃ’は次の番号「２」となる。そして、ＣＰＵ１０１は、このｃ’「２」を現在のファームウェア用の番号格納領域８１５に格納する（ステップＳ９０４）。
【００７８】
次に、ＣＰＵ１０１は、現在の番号格納領域８１５に格納されたｃ’「２」に対応するファームウェア１１２のパート２（１１２ｂ）の部分ハッシュ値２（８１１ｂ）を計算する（ステップＳ９０５）。そして、ＣＰＵ１０１は、算出した部分ハッシュ値２（８１１ｂ）と、ブートＲＯＭ１０２から読み出した、ファームウェア１１２のパート２（１１２ｂ）に対応する正解部分ハッシュ値２（８１４ｂ）とが等しい（一致する）か否かを判定する（ステップＳ９０６）。
【００７９】
一致しない場合（ステップＳ９０６：Ｎｏ）、ＣＰＵ１０１は、システムの起動処理（ファームウェア１１２の読み込み）を中断させる（ステップＳ９１４）。一致する場合（ステップＳ９０６：Ｙｅｓ）、ＣＰＵ１０１は、ファームウェア１１２のプログラムの読み込みを実行（継続）する（ステップＳ９０７）。
【００８０】
以下、ＯＳ１１１の起動にかかる工程（ステップＳ９０７〜ステップＳ９１４）は、実施の形態１で説明した工程（図４のステップＳ４０４〜ステップＳ４１１）と同じである。
【００８１】
なお、図９のフローチャートの例では、先にファームウェア１１２用の現在の番号格納領域８１５に格納された値を更新し、その後に更新した値に対応するパートの部分プログラム１１２ａ〜１１２ｎのハッシュ値を計算する手順とした。これに限らず、先にファームウェア１１２用の現在の番号格納領域８１５に格納された値に対応するパートの部分プログラム１１２ａ〜１１２ｎのハッシュ値を計算し、その後にファームウェア１１２用の現在の番号格納領域８１５に更新した値を格納する手順としてもよい。
【００８２】
このように、実施の形態３におけるセキュアブート方法によると、ＣＰＵ１０１は、ファームウェア１１２およびＯＳ１１１について、それぞれプログラム全体に基づくハッシュ値を算出しない。そして、ファームウェア１１２とＯＳ１１１の部分プログラムのうち順序を有して選択した一つの部分プログラムについて部分ハッシュ値を計算し、対応する正解部分ハッシュ値と比較する。そして、ＣＰＵ１０１は、比較の結果、部分ハッシュ値と、正解部分ハッシュ値とが一致すればファームウェア１１２およびＯＳ１１１の起動を続行する。
【００８３】
つまり、実施の形態３におけるセキュアブート方法によると、システムの起動毎に、ファームウェア１１２とＯＳ１１１について、異なる一つの部分プログラムを選択して、選択した部分プログラムの部分ハッシュ値を正解部分ハッシュ値と比較して、正しいかが検証される。これにより、部分ハッシュ値が改ざんされていないことが検証される。そして、部分ハッシュ値が改ざんされていないことが検証されることにより、部分ハッシュ値に対応すると想定されるファームウェア１１２およびＯＳ１１１のプログラムについて、改ざんされていないとみなすことが可能になる。
【００８４】
また、実施の形態３におけるセキュアブート方法において、ＣＰＵ１０１は、システムの１回の起動時に、ファームウェア１１２およびＯＳ１１１のプログラム全体のハッシュ値を算出しない。これにより、システムの起動時におけるＣＰＵ１０１のハッシュ値算出にかかる処理負荷を抑えることができる。そして、ハッシュ値の算出にかかる時間が大幅に削減でき、セキュアブートにかかる時間を短縮できる。一般的に、組み込み機器１００が搭載するＣＰＵは処理能力が高くはない。しかしながら、実施の形態３におけるセキュアブート方法によると、システム起動時のＣＰＵ１０１の負荷が抑えられることにより、組み込み機器１００であっても、高速に、安全性の高い起動が可能になる。
【００８５】
このように、実施の形態３におけるセキュアブート方法によると、起動対象のファームウェア１１２およびＯＳ１１１のプログラムが改ざんされていないことを、高速に、効率的に検証することが可能になる。また、実施の形態３におけるセキュアブート方法では、フラッシュメモリ１０３等の記憶部に、ファームウェア１１２およびＯＳ１１１用に、ｎ個の値（変数）の順序決定テーブルと、ｎ個の正解部分ハッシュ値と、一つの値（変数）の現在の番号格納領域と、を格納するだけでよいため、ハッシュ値検証に必要な最小限のデータを用いて、簡易に、システムの高速なセキュアブートが実現可能になる。
【００８６】
上述した各実施の形態では、システム（組み込み機器１００）の起動毎にプログラム（ファームウェア１１２、ＯＳ１１１）のうち一つの部分プログラムをハッシュ値の検証対象とした。これに限らず、順序決定テーブル１１３（８１３）に設定された順番にしたがって２つあるいは複数の部分プログラムを選択し、ハッシュ値の検証対象としてもよい。最小の一つの部分プログラムを検証対象とすれば、１回の起動毎の処理負荷を軽減でき、高速起動できる。一方、複数の部分プログラムを検証対象とすれば、１回の起動においてプログラムの改ざんが検出しやすくなる。このため、例えば、ユーザが要求に応じた数を設定したり、システムの処理負荷の変化や、プログラム更新後の経過時間等に応じてシステムが自動的に検証対象となる部分プログラムの数を変更させる構成とすることができる。
【００８７】
そして、各実施の形態によれば、更新可能なファームウェアとＯＳについて、それぞれ改ざんを順に検証し、改ざんの検出により直ちにシステムの起動を中断させることができる。これにより、開発者の意図したコードのみを実行し、高速かつ安全にシステムを起動させることができるようになる。
【００８８】
なお、上述した各実施の形態では、セキュアブート方法が組み込み機器に適用される場合について説明したが、本実施の形態例におけるセキュアブート方法は、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）を含む一般的なコンピュータ等に対しても適用可能である。
【００８９】
上述した各実施の形態に関し、さらに以下の付記を開示する。
【００９０】
（付記１）コンピューターが、
システムのプログラム起動毎に、前記プログラムを複数に区分した部分プログラムのうち、ハッシュ値の検証対象となる異なる部分プログラムを選択する選択工程と、
前記選択した部分プログラムのハッシュ値を算出する算出工程と、
前記算出したハッシュ値が、複数の前記部分プログラムそれぞれの正解のハッシュ値である正解部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する検証工程と、
を実行することを特徴とするセキュアブート方法。
【００９１】
（付記２）前記選択工程は、
検証対象となる複数の前記部分プログラムの順番が設定された順序決定テーブルに基づき、検証対象となる前記部分プログラムを選択し、格納領域に格納された番号の前記部分プログラムをハッシュ値の検証対象とし、前記システムの起動毎に、前記順序決定テーブルに設定された次の順番の前記部分プログラムを選択する工程を、
含むことを特徴とする付記１に記載のセキュアブート方法。
【００９２】
（付記３）前記プログラムは、前記システムのファームウェアと、ＯＳとを含み、
前記コンピューターは、前記システムの起動毎に、前記ファームウェアおよび前記ＯＳの選択した前記部分プログラムに対して、それぞれ前記検証工程を実行する、
ことを特徴とする付記１または２に記載のセキュアブート方法。
【００９３】
（付記４）前記選択工程は、
前記順序決定テーブルに、前記システムの起動毎に、ハッシュ値の検証対象となる複数の前記部分プログラムの検証順序を昇順、降順、あるいはランダムに設定する設定工程を含む、
ことを特徴とする付記２または３に記載のセキュアブート方法。
【００９４】
（付記５）前記選択工程は、
前記システムの起動毎に、ハッシュ値の検証対象となる複数の前記部分プログラムの数を、一つまたは複数に設定変更可能なことを特徴とする付記１〜４のいずれか一つに記載のセキュアブート方法。
【００９５】
（付記６）前記コンピューターがさらに、
前記システムのプログラムを新たな更新プログラムに更新するプログラム更新工程と、
前記更新プログラムに対応する複数の正解部分ハッシュ値を取得する取得工程と、
前記更新プログラムが区分された複数の部分プログラムに対応する複数の部分ハッシュ値を算出する算出工程と、
前記算出した複数の部分ハッシュ値が、それぞれ前記取得した複数の前記正解部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムのアップデート処理を継続し、一致しない場合に前記システムのアップデート処理を中断する制御工程と、
を実行することを特徴とする付記１〜５のいずれか一つに記載のセキュアブート方法。
【００９６】
（付記７）プロセッサと、
プログラムと、前記プログラムを複数に区分した場合におけるシステム起動時の複数の部分プログラムのハッシュ値の検証順序が設定された順序決定テーブルと、複数の前記部分プログラムそれぞれの正解のハッシュ値である正解部分ハッシュ値と、が記憶された記憶部と、を有し、
前記プロセッサは、
前記システムの起動毎に、前記記憶部に記憶される前記順序決定テーブルに基づき、ハッシュ値の検証対象となる異なる前記部分プログラムを選択し、
前記選択した部分プログラムのハッシュ値を算出し、
前記算出したハッシュ値が前記正解部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する、
ことを特徴とする組み込み機器。
【００９７】
（付記８）前記記憶部は、前記ハッシュ値の検証対象の前記部分プログラムの情報を格納する格納領域を有し、
前記プロセッサは、
前記記憶部に記憶される前記順序決定テーブルに基づき、検証対象となる前記部分プログラムの番号を前記格納領域に格納し、
前記格納領域に格納された番号の前記部分プログラムをハッシュ値の検証対象とし、前記システムの起動毎に、前記順序決定テーブルに設定された次の順番の前記部分プログラムの番号を前記格納領域に更新する、
ことを特徴とする付記７に記載の組み込み機器。
【００９８】
（付記９）プロセッサと、プログラムと、前記プログラムを複数に区分した場合におけるシステム起動時の複数の部分プログラムのハッシュ値の検証順序が設定された順序決定テーブルと、複数の前記部分プログラムそれぞれの正解のハッシュ値である正解部分ハッシュ値と、が記憶された記憶部と、を有する組み込み機器に外部接続されるセキュアブート装置であって、
前記システムを起動させるブートＲＯＭと、
前記システムの起動毎に、前記記憶部に記憶される前記順序決定テーブルに基づき、ハッシュ値の検証対象となる異なる前記部分プログラムを選択し、
前記選択した部分プログラムのハッシュ値を算出し、
前記算出したハッシュ値が前記正解部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断する検証手段と、
を有することを特徴とするセキュアブート装置。
【００９９】
（付記１０）システムのセキュアブート処理をコンピューターに実行させる、コンピューターが読み取り可能なセキュアブートプログラムであって、
前記コンピューターに、
前記システムのプログラム起動毎に、前記プログラムを複数に区分した部分プログラムのうち、ハッシュ値の検証対象となる異なる部分プログラムを選択させ、
前記選択した部分プログラムのハッシュ値を算出させ、
前記算出したハッシュ値が、複数の前記部分プログラムそれぞれの正解のハッシュ値である正解部分ハッシュ値と一致するか否か判定し、一致する場合に前記システムの起動処理を継続し、一致しない場合に前記システムの起動処理を中断させる、
処理を実行させることを特徴とするセキュアブートプログラム。
【符号の説明】
【０１００】
１００  組み込み機器
１０１  プロセッサ（ＣＰＵ）
１０２  ブートＲＯＭ
１０３  フラッシュメモリ
１０４  ＲＡＭ
１１１  ＯＳ（プログラム）
１１１ａ〜１１１ｎ  部分プログラム
１１２  ファームウェア（プログラム）
１１２ａ〜１１２ｎ  部分プログラム
１１３  順序決定テーブル
１１４（１１４ａ〜１１４ｎ）  正解部分ハッシュ値
１１５  現在の番号格納領域
１２１  入力装置
１２２  出力装置
３１１  部分ハッシュ値
７００  セキュアブート装置
７０３  部分ハッシュ値計算装置
７０４  部分ハッシュ値検証装置
７０５  ハッシュ値計算装置
８１３  順序決定テーブル
８１４  正解部分ハッシュ値
８１５  現在の番号格納領域
【図１】
2015022521.tif 000003
【図２】
2015022521.tif 000004
【図３】
2015022521.tif 000005
【図４】
2015022521.tif 000006
【図５】
2015022521.tif 000007
【図６】
2015022521.tif 000008
【図７】
2015022521.tif 000009
【図８】
2015022521.tif 000010
【図９】
2015022521.tif 000011