(57)【要約】      （修正有）【課題】プログラムを適正に且つ高速に起動できる情報処理装置を提供する。【解決手段】セキュアブートを実行可能である情報処理装置１であって、許可部３０は、書換え許可要求を受け且つ第１のフラグが第２の値を有する場合、第１のフラグの値を第１の値に変更する。許可部３０は、第１のフラグの変更に応じて第２のフラグを第４の値に変更する。判定部４０は、起動時に第１のフラグが第１の値を有する場合、プログラムの検証が必要であると判定する。判定部４０は、起動時に第１のフラグが第２の値を有する場合、プログラムの検証が不要であると判定する。検証部５０は、検証要求を受けた場合、又は、プログラムの検証が必要である場合、第２のフラグを第３の値に変更するように許可部３０を制御し、第２のフラグの変更に応じてプログラムに対する検証を行う。検証部５０は、プログラムの検証が不要である場合、プログラムに対する検証をスキップする。【選択図】図１
2018195329.tif 000002
【特許請求の範囲】
【請求項１】
セキュアブートを実行可能である情報処理装置であって、
プログラムが格納される第１の不揮発性メモリ領域と前記プログラムが未検証であることを示す第１の値又は検証済であることを示す第２の値を有する第１のフラグが格納される第２の不揮発性メモリ領域とを含む不揮発性メモリと、
前記第１の不揮発性メモリ領域に対する書換えが禁止であることを示す第３の値又は許可であることを示す第４の値を有する第２のフラグを格納する記憶装置を含み、書換え許可要求を受け且つ前記第１のフラグが前記第２の値を有する場合、前記第１のフラグの値を前記第１の値に変更し、前記第１のフラグの変更に応じて前記第２のフラグを前記第４の値に変更する許可部と、
前記情報処理装置の起動時に前記第１のフラグが前記第１の値を有する場合、前記プログラムの検証が必要であると判定し、前記情報処理装置の起動時に前記第１のフラグが前記第２の値を有する場合、前記プログラムの検証が不要であると判定する判定部と、
検証要求を受けた場合、又は、前記プログラムの検証が必要である場合、前記第２のフラグを前記第３の値に変更するように前記許可部を制御し、前記第２のフラグの変更に応じて前記プログラムに対する検証を行い、前記プログラムの検証が不要である場合、前記プログラムに対する検証をスキップする検証部と、
を備えた情報処理装置。
【請求項２】
前記検証部による検証に成功したプログラムを実行し、実行されたプログラムに従って前記書換え許可要求及び前記検証要求をそれぞれ発行する命令実行部をさらに備えた
請求項１に記載の情報処理装置。
【請求項３】
書換え不能である第２の不揮発性メモリをさらに備え、
前記検証部は、前記第２の不揮発性メモリに検証モジュールとして予め格納されており、
前記判定部は、前記第２の不揮発性メモリに判定モジュールとして予め格納されている
請求項１又は２に記載の情報処理装置。
【請求項４】
セキュアブートを実行可能である情報処理装置の制御方法であって、
書換え許可要求に応じて、プログラムが格納される第１の不揮発性メモリ領域と前記プログラムに対して未検証であることを示す第１の値又は検証済であることを示す第２の値を有する第１のフラグが格納される第２の不揮発性メモリ領域とを含む不揮発性メモリにおける前記第１のフラグを前記第１の値に設定することと、
前記第１のフラグが前記第１の値に設定されたことに応じて、前記第１の不揮発性メモリ領域に対する書換えが禁止であることを示す第３の値又は許可であることを示す第４の値を有し記憶装置に格納される第２のフラグの値を前記第４の値に設定することと、
前記情報処理装置の起動時に前記第１のフラグが前記第１の値を有する場合、前記プログラムの検証が必要であると判定することと、
前記情報処理装置の起動時に前記第１のフラグが前記第２の値を有する場合、前記プログラムの検証が不要であると判定することと、
検証要求に応じて、又は前記プログラムの検証が必要であるとの判定結果に応じて、前記第２のフラグを前記第４の値から前記第３の値に変更し、前記第２のフラグが前記第３の値に変更されたことに応じて、前記プログラムに対する検証を行うことと、
前記プログラムの検証が不要であるとの判定結果に応じて、前記プログラムに対する検証をスキップすることと、
を備えた制御方法。
【請求項５】
前記検証に成功した場合に前記第１のフラグを前記第１の値から前記第２の値に変更することをさらに備えた
請求項４に記載の制御方法。
【請求項６】
前記検証は、
第１の検証処理に成功した場合に生成される期待値が前記不揮発性メモリにおける第３の不揮発性メモリ領域に格納されているか否かを判断することと、
前記期待値が前記第３の不揮発性メモリ領域に格納されていない場合、前記第１の検証処理を行い、前記第１の検証処理に成功した場合に前記期待値を前記第３の不揮発性メモリ領域に格納することと、
前記期待値が前記第３の不揮発性メモリ領域に格納されている場合、前記第１の検証処理をスキップすることと、
前記プログラムから抽出されたパラメータと前記期待値とが一致しているか否かが検証される第２の検証処理を行うことと、
を含む
請求項４又は５に記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、情報処理装置及び制御方法に関する。
【背景技術】
【０００２】
マイクロコントローラなどの情報処理装置は、起動されたプログラムに従って所定の動作を行う。このとき、プログラムを適正に且つ高速に起動することが望まれる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２００９／０１３８３１号
【特許文献２】特開２００３−２１６４４５号公報
【特許文献３】国際公開第２０１０／０２１２６９号
【非特許文献】
【０００４】
【非特許文献１】Ａｒｂａｕｇｈ，  Ｗ．；  Ｆａｒｂｅｒ，  Ｄ．  ＆  Ｓｍｉｔｈ，  Ｊ．，  Ａ  ｓｅｃｕｒｅ  ａｎｄ  ｒｅｌｉａｂｌｅ  ｂｏｏｔｓｔｒａｐ  ａｒｃｈｉｔｅｃｔｕｒｅ，  Ｓｅｃｕｒｉｔｙ  ａｎｄ  Ｐｒｉｖａｃｙ，  １９９７．  Ｐｒｏｃｅｅｄｉｎｇｓ．，  １９９７  ＩＥＥＥ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ，  １９９７，  ６５−７１
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一つの実施形態は、プログラムを適正に且つ高速に起動できる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
一つの実施形態によれば、セキュアブートを実行可能である情報処理装置であって、不揮発性メモリと許可部と判定部と検証部とを有する情報処理装置が提供される。不揮発性メモリは、第１の不揮発性メモリ領域と第２の不揮発性メモリ領域とを含む。第１の不揮発性メモリ領域は、プログラムが格納される。第２の不揮発性メモリ領域は、第１のフラグが格納される。第１のフラグは、第１の値又は第２の値を有する。第１の値は、プログラムが未検証であることを示す。第２の値は、プログラムが検証済であることを示す。許可部は、記憶装置を含む。記憶装置は、第２のフラグを格納する。第２のフラグは、第３の値又は第４の値を有する。第３の値は、第１の不揮発性メモリ領域に対する書換えが禁止であることを示す。第４の値は、第１の不揮発性メモリ領域に対する書換えが許可であることを示す。許可部は、書換え許可要求を受け且つ第１のフラグが前記第２の値を有する場合、第１のフラグの値を第１の値に変更する。許可部は、第１のフラグの変更に応じて第２のフラグを第４の値に変更する。判定部は、情報処理装置の起動時に第１のフラグが第１の値を有する場合、プログラムの検証が必要であると判定する。判定部は、情報処理装置の起動時に第１のフラグが第２の値を有する場合、プログラムの検証が不要であると判定する。検証部は、検証要求を受けた場合、又は、プログラムの検証が必要である場合、第２のフラグを第３の値に変更するように許可部を制御し、第２のフラグの変更に応じてプログラムに対する検証を行う。検証部は、プログラムの検証が不要である場合、プログラムに対する検証をスキップする。
【図面の簡単な説明】
【０００７】
【図１】実施形態にかかる情報処理装置の機能構成を示すブロック図。
【図２】実施形態における書換え制御フラグ及び検証状態フラグの機能を示す図。
【図３】実施形態にかかる情報処理装置のハードウェア構成を示すブロック図。
【図４】実施形態にかかる情報処理装置の書換え許可要求に応じた動作を示すフローチャート。
【図５】実施形態にかかる情報処理装置の動作を示すシーケンス図。
【図６】実施形態にかかる情報処理装置の検証要求に応じた動作を示すフローチャート。
【図７】実施形態にかかる情報処理装置の再起動処理に応じた動作を示すフローチャート。
【図８】実施形態にかかる情報処理装置の動作を示すシーケンス図。
【図９】実施形態にかかる情報処理装置の動作を示すシーケンス図。
【図１０】実施形態にかかる情報処理装置の動作を示すシーケンス図。
【図１１】実施形態にかかる情報処理装置の動作を示すシーケンス図。
【図１２】実施形態にかかる情報処理装置の動作を示すシーケンス図。
【図１３】実施形態の変形例にかかる情報処理装置のハードウェア構成を示すブロック図。
【図１４】実施形態の変形例にかかる情報処理装置の書換え許可要求に応じた動作を示すフローチャート。
【図１５】実施形態の変形例にかかる情報処理装置の検証要求に応じた動作を示すフローチャート。
【図１６】実施形態の他の変形例にかかる情報処理装置のハードウェア構成を示すブロック図。
【図１７】実施形態の他の変形例にかかる情報処理装置の再起動処理に応じた動作を示すフローチャート。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、実施形態にかかる情報処理装置を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
（実施形態）
実施形態にかかる情報処理装置について説明する。情報処理装置は、例えば、自動車の各部を電気的に制御するコントローラ（ＥＣＵ）や、観測値を無線で送信するセンサノード（スマートメータ）の各部を制御するコントローラに適用され得る。これらのコントローラは小規模化・低コスト化が要求されるため、情報処理装置は、例えば１チップで構成されたマイクロコントローラ（組込みマイコン）として実装される。この情報処理装置は、起動されたシステムプログラムに従って所定の動作を行う。このとき、起動時にシステムプログラムの不正な改ざんを検出・防止するために、情報処理装置は、セキュアブートを実行可能とすべく構成されている。
【０００９】
例えば、さまざまな機能がソフトウェアによって実現され、その範囲は社会インフラや自動車のような誤動作が重大な災害につながる機器の安全機能にまでおよびつつある。また、コンピュータシステムに対してさまざまなサイバー攻撃が行われ、手口の巧妙さが増すとともに電力システムを停止させるなど被害が広がりつつある。セキュアブートは、起動時にシステムプログラムの正当性を確認することにより、コンピュータシステムの信頼の基盤を確認する基本的なサイバー攻撃対策手段である。
【００１０】
一方で、ＥＣＵやセンサノード等に適用されることが想定された情報処理装置は、小規模化・低コスト化の要求を満たすためにその処理能力も限定されていることから、セキュアブートの実行頻度を必要最小限に抑えてシステムプログラムの起動処理を高速化する必要がある。すなわち、情報処理装置では、システムプログラムを適正に且つ高速に起動することが望まれる。
【００１１】
例えば、組込みマイコンでは不揮発性フラッシュメモリの内容をＤＲＡＭに展開することなく、そのまま実行するＸＩＰ  （ｅＸｅｃｕｔｅ  Ｉｎ  Ｐｌａｃｅ）方式が用いられる。この場合、セキュアブートがなければ起動後ただちにフラッシュメモリ上のアプリケーションの実行を始められるが、セキュアブートを行う場合にはプログラムイメージの読出しとフィンガープリント計算がそのまま遅延となる。パーソナルコンピュータに実装された大規模で高速なプロセッサと比較して、組込みマイコンでは、メモリおよびフィンガープリント計算のスループットが低く、遅延が大きいため、セキュアブートの実行頻度を必要最小限に抑えてシステムプログラムの起動処理を高速化する必要性が高い。
【００１２】
そこで、本実施形態では、以下の工夫を行いセキュアブートの実行頻度を適切に制御することで、プログラム（システムプログラム）の不正な改ざんを確実に検出・防止しつつプログラムの平均的な起動時間の短縮化を図る。
【００１３】
図１は、情報処理装置１の機能構成を示すブロック図である。情報処理装置１（マイクロコントローラ）は、セキュアブートを実行可能とすべく構成されている。情報処理装置１は、不揮発性メモリ１０、不揮発性メモリ２０、書換え許可部３０、プログラム検証要否判定部４０、プログラム検証部５０、及び命令実行部６０を有する。セキュアブートに関連した機能は、書換え許可部３０、プログラム検証要否判定部４０、プログラム検証部５０により実現可能である。
【００１４】
なお、書換え許可部３０、プログラム検証要否判定部４０、プログラム検証部５０、及び命令実行部６０の各機能は、情報処理装置１においてハードウェア的に（例えば、回路として）実装されていてよいし、ソフトウェア的に（例えば、不揮発性メモリ２０に格納され一括して又は処理の進行に応じて順次に読み出される機能モジュールとして）実装されていてよい。あるいは、一部の機能が情報処理装置１においてハードウェア的に実装され、残りの機能が情報処理装置１においてソフトウェア的に実装されていてもよい。
【００１５】
不揮発性メモリ２０は、情報を不揮発的に且つ書換え不可能に格納するメモリであり、例えば、製造工程で情報が書き込まれるマスクＲＯＭである。不揮発性メモリ２０は、情報処理装置１におけるプラットフォームとなるシステムプログラムが予め格納されている。システムプログラムは、情報処理装置１の起動時等において、不揮発性メモリ２０から命令実行部６０へ（例えばバイト単位で）読み出される。
【００１６】
不揮発性メモリ１０は、情報を不揮発的に且つ書換え可能に格納するメモリであり、例えば、フラッシュメモリである。命令実行部６０がバイト単位で不揮発性メモリ１０にアクセスする場合、不揮発性メモリ１０を例えばＮＯＲ型フラッシュメモリとすることができる。不揮発性メモリ１０は、第１の不揮発性メモリ領域１１及び第２の不揮発性メモリ領域１２を含む。
【００１７】
第１の不揮発性メモリ領域１１は、プログラムメモリブロック１１ａを含む。プログラムメモリブロック１１ａは、プログラム１１ａ１が不揮発的に格納されている。プログラム１１ａ１は、プログラム検証部５０により検証される。プログラム１１ａ１は、システムプログラムの更新部分の機能モジュールであってもよいし、更新後のシステムプログラム自体であってもよい。
【００１８】
第２の不揮発性メモリ領域１２は、検証状態フラグ（第１のフラグ）１２ａが不揮発的に格納されている。検証状態フラグ１２ａは、第１の値又は第２の値を有する。第１の値は、プログラム１１ａ１が未検証であることを示す（以下、「未検証」又は「×」で表す）。第２の値は、プログラム１１ａ１が検証済であることを示す（以下、「検証済」又は「○」で表す）。検証状態フラグ１２ａは、冗長化されていてもよく、例えば、未検証／検証済を示す制御ビットと制御ビットの誤り訂正を行うための符号ビットとを含んでいてもよい。
【００１９】
書換え許可部３０は、第１の不揮発性メモリ領域１１に対する書き込みを許可したり禁止したりする。書換え許可部３０は、記憶装置３１を含む。記憶装置３１は、書換え制御フラグ（第２のフラグ）３１ａを揮発的に格納する。書換え制御フラグ３１ａは、第３の値又は第４の値を有する。第３の値は、第１の不揮発性メモリ領域１１に対する書換えが禁止であることを示す（以下、「禁止」又は「○」で表す）。第４の値は、第１の不揮発性メモリ領域１１に対する書換えが許可であることを示す（以下、「許可」又は「×」で表す）。
【００２０】
書換え許可部３０は、書換え制御フラグ３１ａの値を「禁止」にすることで第１の不揮発性メモリ領域１１に対する書き込みを禁止でき、書換え制御フラグ３１ａの値を「許可」にすることで第１の不揮発性メモリ領域１１に対する書き込みを許可することができる。
【００２１】
例えば、書換え許可部３０は、書換え許可要求を命令実行部６０から受け且つ検証状態フラグ１２ａが「検証済」である場合、検証状態フラグ１２ａの値を「検証済」から「未検証」に変更する。書換え許可部３０は、検証状態フラグ１２ａが「未検証」に変更されたことに応じて、書換え制御フラグ３１ａを「禁止」から「許可」に変更する。これにより、命令実行部６０からの第１の不揮発性メモリ領域１１への書き込みが許可された状態になる。
【００２２】
プログラム検証要否判定部４０は、情報処理装置１の起動時（例えば、再起動処理が行われたとき）に、検証状態フラグ１２ａの値に応じてプログラム１１ａ１の検証の要否について判定する。プログラム検証要否判定部４０は、情報処理装置１の起動時に、検証状態フラグ１２ａが「未検証」である場合、プログラム１１ａ１の検証が必要であると判定する。プログラム検証要否判定部４０は、情報処理装置１の起動時に、検証状態フラグ１２ａが「検証済」である場合、プログラム１１ａ１の検証が不要であると判定し、正常起動許可通知を命令実行部６０へ供給する。
【００２３】
プログラム検証部５０は、プログラム１１ａ１に対する検証を行うことができる。
【００２４】
例えば、プログラム検証部５０は、検証要求を命令実行部６０から受けた場合、書換え制御フラグ３１ａを「許可」から「禁止」に変更するように書換え許可部３０を制御する。あるいは、プログラム検証部５０は、プログラム１１ａ１の検証が必要である場合、書換え制御フラグ３１ａを「許可」から「禁止」に変更するように書換え許可部３０を制御する。
【００２５】
この制御に応じて、書換え許可部３０は、書換え制御フラグ３１ａを「許可」から「禁止」に変更する。これにより、命令実行部６０からの第１の不揮発性メモリ領域１１への書き込みが禁止された状態になる。プログラム検証部５０は、この変更に応じて、プログラム１１ａ１に対する検証を行う。プログラム検証部５０は、検証に成功すると、検証状態フラグ１２ａを「未検証」から「検証済」に変更して、検証成功通知を命令実行部６０へ供給する。プログラム検証部５０は、検証に失敗すると、検証状態フラグ１２ａを「未検証」のまま変更せず、検証失敗通知を命令実行部６０へ供給する。
【００２６】
あるいは、プログラム検証部５０は、プログラム１１ａ１の検証が不要である場合、プログラム１１ａ１に対する検証をスキップする。このとき、検証状態フラグ１２ａは「検証済」になっている。
【００２７】
命令実行部６０は、検証に失敗したプログラム１１ａ１を実行しないが、検証に成功したプログラム１１ａ１を実行する。命令実行部６０は、プログラム１１ａ１に従って、各部を統括的に制御することができる。例えば、命令実行部６０は、外部（上位のコントローラ等）からプログラム１１ａ１の更新コマンドを受けた場合、実行中のプログラム１１ａ１に従い、更新コマンドに応じて書換え許可要求を発行して書換え許可部３０に供給する。命令実行部６０は、外部からのコマンドに応じて又は自律的な判断に応じてプログラム１１ａ１を起動すべきであると判断し且つ所定の時間内に正常起動許可通知を受けなかった場合、実行中のプログラム１１ａ１に従い、検証要求を発行してプログラム検証部５０へ供給する。そして、命令実行部６０は、検証成功通知を受けた場合、プログラムメモリブロック１１ａから読み出された更新後のプログラム１１ａ１の実行を開始する。命令実行部６０は、検証失敗通知をプログラム検証部５０から受けた場合、プログラム１１ａ１の実行を停止する（更新後のプログラム１１ａ１をプログラムメモリブロック１１ａから読み出しても実行しない）。あるいは、命令実行部６０は、外部からのコマンドに応じて又は自律的な判断に応じてプログラム１１ａ１を起動すべきであると判断し且つ所定の時間内に正常起動許可通知をプログラム検証要否判定部４０から受けた場合、検証要求を発行することなく、プログラムメモリブロック１１ａから読み出された更新後のプログラム１１ａ１の実行を開始する。
【００２８】
図２は、書換え制御フラグ３１ａ及び検証状態フラグ１２ａの機能を示す図である。情報処理装置１では、不揮発性の検証状態フラグ１２ａと揮発性の書換え制御フラグ３１ａとを操作することで、プログラム１１ａ１の検証を行わなくても安全な状態であるか否かを判断できるようにしている。すなわち、書換え許可部３０による書換え許可機能により、検証状態フラグ１２ａが「×」になっている状態で書換え制御フラグ３１ａが「○」から「×」に変更される。そして、プログラム検証部５０による検証機能により、検証状態フラグ１２ａが「×」になっている状態で書換え制御フラグ３１ａが「×」から「○」に変更される。これにより、検証状態フラグ１２ａが「○」になっているときは、書換え制御フラグ３１ａが「○」になっていることが担保される。このことは、検証状態フラグ１２ａが第２の不揮発性メモリ領域１２に不揮発的に格納されているので、情報処理装置１の再起動処理が行われたときにも担保できる。
【００２９】
これにより、検証状態フラグ１２ａが「○」であり第１の不揮発性メモリ領域１１に対する書換えが行われていない（すなわち、プログラム１１ａ１に対する書換えが行われていない）と予想できる場合に、セキュアブートの実行をスキップさせることができる。この結果、セキュアブートの実行頻度を必要最小限（検証状態フラグ１２ａが「×」になっている場合）に抑えることができ、プログラム１１ａ１の起動処理を高速化することができる。したがって、プログラム１１ａ１の不正な改ざんを確実に検出・防止できるとともに、プログラム１１ａ１の平均的な起動時間の短縮化を図ることができる。また、セキュアブートの実行頻度を必要最小限に抑えることができるので、情報処理装置１の平均的な消費電力を低減できる。
【００３０】
図３は、情報処理装置１のハードウェア構成を示すブロック図である。図３では、情報処理装置１としてマイクロコントローラチップ１０１が例示されている。
【００３１】
マイクロコントローラチップ１０１は、ＣＰＵコア１０２、ＳＲＡＭ１０３、マスクＲＯＭ１０４、バス１０５、不揮発性メモリ１１１、書換え許可回路１２１、プログラム検証回路１４１、プログラム検証要否判定回路１６１、及びリセット制御回路１０６を有する。ＣＰＵコア１０２、ＳＲＡＭ１０３、マスクＲＯＭ１０４、不揮発性メモリ１１１、書換え許可回路１２１、プログラム検証回路１４１、及びプログラム検証要否判定回路１６１は、バス１０５を介して互いに接続されている。
【００３２】
ＣＰＵコア１０２及びＳＲＡＭ１０３は、機能構成（図１参照）における命令実行部６０に対応する。マスクＲＯＭ１０４は、書換え不能な不揮発性メモリ２０に対応する。不揮発性メモリ１１１は、書換え可能な不揮発性メモリ１０に対応する。書換え許可回路１２１は、書換え許可部３０に対応する。プログラム検証回路１４１は、プログラム検証部５０に対応する。プログラム検証要否判定回路１６１は、プログラム検証要否判定部４０に対応する。
【００３３】
ＳＲＡＭ１０３は、ＣＰＵコア１０２による作業領域を含む。例えば、ＣＰＵコア１０２は、マスクＲＯＭ１０４に格納されたシステムプログラムをワード単位でＳＲＡＭ１０３に読み出して実行可能である。
【００３４】
不揮発性メモリ１１１は、複数の論理ブロックに分割されている。複数の論理ブロックは論理ブロック１１２，１１３を含む。論理ブロック１１２は、第１の不揮発性メモリ領域１１に対応する。論理ブロック１１２は、プログラムメモリブロック１１ａを含む。プログラムメモリブロック１１ａには、プログラム１１ａ１が不揮発的に格納されている。論理ブロック１１３は、第２の不揮発性メモリ領域１２に対応する。論理ブロック１１３は、検証状態フラグ１２ａが不揮発的に格納されている。
【００３５】
不揮発性メモリ１１１はバス１０５に接続されているが、複数の論理ブロックの中で、バス１０５を経由してＣＰＵコア１０２から直接アクセス可能な領域は論理ブロック１１２に限定され、ここにシステムプログラムとしてのプログラム１１ａ１が格納され得る。検証状態フラグ１２ａは、書換え許可回路１２１、プログラム検証回路１４１、プログラム検証要否判定回路１６１を経由して間接的に参照・更新され、プログラムが直接値を操作することはできない。リセット制御回路１０６がプログラム検証要否判定回路１６１に接続されている。
【００３６】
書換え許可回路１２１は、レジスタ１２２、未検証状態設定機能１２３、検証状態読出し機能１２４、書換え許可設定機能１２５、及び書込み機能１２６を有する。レジスタ１２２は、記憶装置３１に対応する。書込み機能１２６は、書換え制御フラグ３１ａが「許可」になっている状態ではＣＰＵコア１０２から制御に従い、プログラムメモリブロック１１ａに対するプログラム等の情報の書き換えを行ったり、プログラムメモリブロック１１ａに格納された情報を消去したりする。プログラム検証回路１４１は、フィンガープリント値計算機能１４２、フィンガープリント期待値検証機能１４３、フィンガープリント値照合機能１４４、及び書換え禁止設定機能１４５を有する。プログラム検証要否判定回路１６１は、検証要否判定機能１６２を有する。
【００３７】
マイクロコントローラチップ１０１で実行可能であるセキュアブートが想定する脅威は大きく２つある。ひとつは、マイクロコントローラチップ１０１の外部に接続される汎用メモリや汎用メモリをマイクロコントローラチップ１０１から外して、もしくは並列にアクセスしてシステムプログラムを不正に書換える外部攻撃（物理攻撃）である。もうひとつは、システムの実行中に外部から侵入した不正プログラムが、正規のプログラム更新のために備えられているメモリまたはストレージ書換え機能を利用して、システムプログラムを不正に書換える内部攻撃である。故障注入などのサイドチャネル攻撃はここでは対象外とする。
【００３８】
オンチップメモリ（不揮発性メモリ１１１）を持つマイクロコントローラチップ１０１では、その構成から、基本的には外部攻撃は考慮の対象外としてよいことが有利な点である。すなわち、マイクロコントローラチップ１０１がシステムオンチップで構成されている場合、マイクロコントローラチップ１０１は、不揮発性メモリ１１１へ直接的にアクセス可能な外部端子を有さない仕様とすることができる。図示は省略されているが、初期プログラム書込みのため、マイクロコントローラチップ１０１は、工場からの出荷前の段階ではＪＴＡＧ端子などの不揮発性メモリ用の書込み端子を持ってもよい。プログラムを書きこみ後に上記ＪＴＡＧ端子を工場内で無効化後、出荷する。出荷後は上記ＪＴＡＧ端子を通じたプログラム書込みはできない。その後のプログラム更新は、書きこまれた初期プログラムの動作によりネットワーク経由で取得したプログラムをＣＰＵコア１０２から不揮発メモリ１１１に書きこむことによって行われる。
【００３９】
本実施形態では、攻撃を内部攻撃に限定できる利点を活用してセキュアブートの安全性を担保しつつ、わずかなハードウェアの追加・変更で起動時間を短縮可能な構成を開示する。主な要求条件は以下の通りである。
【００４０】
（要求１）：一度システムプログラム（プログラム１１ａ１）のフィンガープリント検証を行っておけば、検証に成功した場合にマイクロコントローラチップ１０１内部の不揮発性メモリ１１１に「検証済」の検証状態フラグ１２ａを保持することにより、次項の場合を除いて、次回からの起動ではフィンガープリント検証を行わず高速に起動できる。
【００４１】
（要求２）：電源断をまたいでも検証状態は保持され高速化の効果が維持される。
（要求３）：ただし、システムプログラム（プログラム１１ａ１）が書換えられた場合には再起動時に検証が行われ、検証に成功した場合に「検証済」の検証状態フラグ１２ａが保持される。次回の起動では書換えがなければフィンガープリント検証を行わず高速に起動できる。
【００４２】
（要求４）：次回起動時のシステムプログラム（プログラム１１ａ１）の書換え検出においては、正規の手順による書換えに限定せず、悪意のプログラムを含む任意のプログラム実行によって行われるものを検出可能であること。実際に書換えが行われたかどうかは問わず、書換え途中に電源断が発生して書換えが中断されるようなケースなどの、書換えが行われた可能性がある場合を含めて広く検出可能であること。
【００４３】
（要求５）：実現にあたってのハードウェア規模が小さいこと。たとえばプログラムメモリブロック１１ａへの書込み全てのログをセキュアメモリに保存することは、保存のためのセキュアメモリのコストや消費電力の増加が大きく好ましくない。
【００４４】
（要求６）：不揮発性メモリ１１１への更新プログラムの書き込みは、更新プログラムの配布方式に依存するため、システムプログラム側が行うこと。システムプログラムはネットワーク通信と受信した更新プログラム断片の管理を含む複雑な機能を実行するため、潜在的な脆弱性を持ち、ネットワークからの攻撃を受け一時的に不正プログラムが実行され、さらにフラッシュメモリに当該もしくは別の不正プログラムが書きこまれてしまうおそれがあるが、その際でも検証と再起動を行うことにより不正プログラムの排除が可能であること。
【００４５】
要求１〜要求６を満たすため、マイクロコントローラチップ１０１には、ハードウェアエンジン（プログラム検証回路１４１）による検証の完了後に不揮発性メモリ１１１が一度も書換え可能な状態になっていないことを、電源断をまたいで担保するハードウェアロジックが実装されている。
【００４６】
図４は、情報処理装置１（マイクロコントローラチップ１０１）の書換え許可要求に応じた動作を示すフローチャートである。
【００４７】
書換え許可回路１２１は、マイクロコントローラチップ１０１が起動時等に、書換え制御フラグ３１ａにデフォルトの値として「禁止」を設定する。システムプログラム（プログラム１１ａ１）は、プログラムメモリブロック１１ａへの書き込みに先だってＣＰＵコア１０２で発行させた書換え許可要求を書換え許可回路１２１に供給させる（Ｓ１）。書換え許可回路１２１は、不揮発性メモリ１１１上の検証状態フラグ１２ａの書込み権を取得し（Ｓ２）、検証状態フラグ１２ａに「未検証」の値を書きこむ（Ｓ３）。書換え許可回路１２１は、検証状態フラグ１２ａに値が適切に書き込まれたか確認するために、検証状態フラグ１２ａを不揮発性メモリ１１１から読み出す（Ｓ４）。このとき、読み出された情報に符号ビットが含まれていれば誤り訂正を行ってもよい。書換え許可回路１２１は、読み出された検証状態フラグ１２ａが「未検証」である場合（Ｓ５で「成功」）、書換え制御フラグ３１ａに「許可」を書きこみ（Ｓ６）、検証状態フラグ１２ａの書込み権を開放する（Ｓ７）。例えば、検証状態フラグ１２ａの「未検証」と書換え制御フラグ３１ａの「許可」の値を同一値に定義しておくことで、Ｓ６の操作を、読みだした検証状態フラグ１２ａの値を書換え制御フラグ３１ａに複写する操作として単純化することもできる。なお、書換え許可回路１２１は、誤り訂正に失敗するなど検証状態フラグ１２ａの値が適正に読み出されなかった（読出しがエラーになった）場合（Ｓ５で「失敗」）、書換え許可設定（Ｓ６）を行わずに検証状態フラグ１２ａの書込み権を開放する（Ｓ７）。
【００４８】
ここまでの操作により、書換え許可要求に対応する処理は完了し（Ｓ８）、書換え制御フラグ３１ａに「許可」が設定されることで、プログラムメモリブロック１１ａへの書き込みが可能となる。書換え制御フラグ３１ａに「許可」が設定されるのは書換え許可要求に基づく上記の手順だけであるため、書換え制御フラグ３１ａが「許可」の状態では、検証状態フラグ１２ａが「未検証」となっていることが担保される。この時点でマイクロコントローラチップ１０１の再起動処理が行われても次回のリスタート時には検証処理が行われる。
【００４９】
さらに、上記の通常手順に加えてこの手順のどの時点で電源断による中断や検証状態フラグ１２ａへの書込み失敗があったとしても、書換え許可状態（書換え制御フラグ３１ａが「許可」の状態）になった場合には、未検証状態（検証状態フラグ１２ａが「未検証」の状態）が担保される。本実施形態では、プログラムメモリブロック１１ａへの書込み履歴を保存するのではなく、書換え制御フラグ３１ａを「許可」に設定する際の前処理として検証状態フラグ１２ａを「未検証」に設定する。これにより、検証状態フラグ１２ａが「検証済」の状態であれば、前回の検証完了から、プログラムメモリブロック１１ａへの書き込みが一切行われていないことが担保できる。
【００５０】
図５は、情報処理装置１（マイクロコントローラチップ１０１）の動作を示すシーケンス図であり、図４のフローチャートと対応する処理を同じ番号で示している。プログラムメモリブロック１１ａへの書き込みが許可されると、ＣＰＵコア１０２は、システムプログラム（プログラム１１ａ１としての「Ｐｒｏｇ１」）に従い、外部サーバ２０１からネットワーク２０２およびネットワークインタフェース１９９を経由して更新プログラムイメージを逐次取得し、プログラムメモリブロック１１ａに書きこむ。このとき、どのような順序で書込みが行われてもよい。ネットワーク２０２経由で更新プログラムイメージ（例えば、「Ｐｒｏｇ２」）を取得する際には、パケット順序の逆転などが発生するが、本実施形態では以下で説明する検証開始の時点で正しいプログラムイメージが書きこまれてさえいれば、それ以前にはどのような順序でプログラムメモリブロック１１ａに書込みが行われてもよい。もし受信した更新プログラムが不正なものであったとしても後述の検証処理で検出できる。さらにこの更新処理がネットワーク２０２経由で感染する不正プログラムに乗っ取られてしまい、プログラムメモリブロック１１ａに不正プログラムが書きこまれてしまったとしても、検証処理で不正プログラムの存在を検出し、次回再起動時にプログラムメモリブロック１１ａ上の不正プログラムが実行されてしまうことを防止できる。
【００５１】
ＣＰＵコア１０２は、プログラムメモリブロック１１ａ上における「Ｐｒｏｇ１」から「Ｐｒｏｇ２」への書換えを行う。プログラムメモリブロック１１ａ上において、「Ｐｒｏｇ１」が存在している状態から「Ｐｒｏｇ１」と「Ｐｒｏｇ２」とが混在している状態（Ｐｒｏｇ１／２」）を経て、「Ｐｒｏｇ２」が存在している状態に至る。ＣＰＵコア１０２は、「Ｐｒｏｇ１」から「Ｐｒｏｇ２」への書換えが完了すると、書換え後の「Ｐｒｏｇ２」の検証要求を発行する。
【００５２】
図６は、情報処理装置１の検証要求に応じた動作を示すフローチャートである。プログラム検証回路１４１は、ＣＰＵコア１０２から検証要求を受け（Ｓ１１）、プログラムメモリブロック１１ａの内容を検証する。以下、公開鍵署名に基づく検証の説明を記載するが、共通鍵に基づくＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）なども適用可能である。
【００５３】
プログラムメモリブロック１１ａ内に検証対象プログラム「Ｐｒｏｇ２」とそれに対する公開鍵署名「Ｃｅｒｔ」が置かれているものとする。署名「Ｃｅｒｔ」は、プログラムの配布元が持つ公開鍵系の秘密鍵「Ｋｓ」により検証対象プログラムのハッシュ値に署名がなされたものである。プログラム検証回路はＫｓに対応する公開鍵「Ｋｐ」を持つ。
【００５４】
検証要求を受けたプログラム検証回路１４１は、検証状態フラグ１２ａの書込み権を取得し（Ｓ１２）、書換え禁止設定機能１４５により、書換え制御フラグ３１ａを「禁止」に設定する（Ｓ１３）。
【００５５】
次に、プログラム検証回路１４１は、フィンガープリント値計算機能１４２により検証対象プログラム「Ｐｒｏｇ２」のフィンガープリント値を計算し、フィンガープリント期待値検証機能１４３によりフィンガープリント期待値を取得する（Ｓ１４）。すなわち、フィンガープリント期待値検証機能１４３は、第１の検証処理（例えば、署名検証）を行い、第１の検証処理に成功した場合にフィンガープリント期待値を取得でき、第１の検証処理に失敗した場合、フィンガープリント期待値を取得できない。第１の検証処理が成功した場合、プログラム検証回路１４１は、第２の検証処理（例えば、フィンガープリント検証）を行う。すなわち、プログラム検証回路１４１は、フィンガープリント値照合機能１４４によりフィンガープリント値とフィンガープリント期待値（検証期待値）との照合を行う。ここではプログラムのハッシュ値がフィンガープリント値に相当し、公開鍵署名から抽出したハッシュ値がフィンガープリント期待値に相当する。なお、第１の検証処理が失敗した場合、プログラム検証回路１４１は、第２の検証処理を行わない。
【００５６】
フィンガープリント値とフィンガープリント期待値とが合致しなかった場合（Ｓ１５で「失敗」）、検証は失敗となり、プログラム検証回路１４１は、検証状態フラグ１２ａの書込み権を開放し（Ｓ１７）、検証を完了させる（Ｓ１８）。
【００５７】
フィンガープリント値とフィンガープリント期待値とが合致した場合（Ｓ１５で「成功」）、検証は成功となり、フィンガープリント値照合機能１４４により、検証状態フラグ１２ａに「検証済」が設定される（Ｓ１６）。プログラム検証回路１４１は、検証状態フラグ１２ａの書込み権を開放し（Ｓ１７）、検証を完了させる（Ｓ１８）。
【００５８】
図７は、検証状態フラグ１２ａに「検証済」が設定されている状態で再起動処理が行われた場合、情報処理装置１の動作を示すフローチャートである。
【００５９】
マイクロコントローラチップ１０１の再起動処理（Ｓ２１）が行われた後に、プログラム検証要否判定回路１６１は、リセット制御回路１０６からの起動信号を受信し、起動信号をトリガーとして検証状態フラグ１２ａを不揮発性メモリ１１１から読み出す（Ｓ２２）。検証状態フラグ１２ａが「検証済」であるため（Ｓ２３で「検証済」）、プログラム検証要否判定回路１６１は、検証の実行が不要であると判定し、ＣＰＵコア１０２に正常起動許可を通知する（Ｓ２６）。これに応じて、ＣＰＵコア１０２は、格納されたプログラム１１ａ１を所定のアドレスから実行する。図８は、情報処理装置１の動作を示すシーケンス図であり、図７のフローチャートと対応する処理を同じ番号で示している。
【００６０】
本実施形態の方式は、書換え許可と検証処理とにおいて、書換え制御フラグ３１ａと検証状態フラグ１２ａとの操作を組み合わせることにより、検証が電源断などにより中断したとしても、再起動処理後に検証が行われるようにすることができる。
【００６１】
図７と図９にしたがってそのときの動作を説明する。図９は、情報処理装置１の動作を示すシーケンス図である。検証実行までは図５のシーケンスと同一である。検証計算が未完了もしくは検証計算に基づく検証状態を示す値が検証状態フラグ１２ａに書きこまれない状態で再起動処理（Ｓ２１）が発生している。
【００６２】
再起動処理において検証状態フラグ１２ａは「未検証」となっている。プログラム検証要否判定回路１６１は、検証状態フラグ１２ａが「未検証」である（Ｓ２３で「未検証」）ことに応じて、検証が必要であると判定し、プログラム検証回路１４１に検証の実行を要求する。プログラム検証回路１４１は、書換え制御フラグ３１ａを「禁止」に変更し、検証を行う（Ｓ２４）。この場合、正しい更新プログラムがプログラムメモリブロック１１ａに書きこまれているため、プログラム検証回路１４１は、検証に成功し（Ｓ２５で「成功」）、検証状態フラグ１２ａに「検証済」が設定され、検証成功がプログラム検証要否判定回路１６１に通知される。これをもってプログラム検証要否判定回路１６１は、ＣＰＵコア１０２に正常起動許可を通知して（Ｓ２６）、更新されたプログラム１１ａ１が実行される（Ｓ２７）。
【００６３】
このように、検証動作が中断された場合でも、再起動処理後に検証が行われるようにすることができる。ただし、再起動処理後に検証が行われるため、プログラム１１ａ１の起動時間は長くなる。
【００６４】
次に、不正が検出された場合の動作を説明する。図１０は、例えばシステムプログラムの脆弱性を利用するなどの方法により、ＳＲＡＭ１０３に侵入して実行されている不正プログラムが、プログラムメモリブロック１１ａに不正プログラムの書き込みを試みた場合のシーケンス図である。図１０は、不正プログラムが自発的に検証処理を発行した場合には再起動処理時に再び検証が行われて不正プログラムが起動しない例である。
【００６５】
ＳＲＡＭ１０３上の不正プログラムは、正規のプログラム書込みと同じように書換え許可要求を発行し、プログラムメモリブロック１１ａに書込みを行い、検証要求を発行する。違うのは書きこまれるのが不正プログラムである点である。この場合においても、検証処理（Ｓ１４）が実行され、検証に失敗し（Ｓ１５で「失敗」）、検証が完了しても検証状態フラグ１２ａは「未検証」のままとなる。
【００６６】
不正プログラムは再起動処理（Ｓ２１）まで動作し続けるが、再起動処理後は、検証状態フラグ１２ａが「未検証」であるため（Ｓ２３で「未検証」）、検証処理（Ｓ２４）が実行され、検証結果は失敗（Ｓ２５で「失敗」）となるため、ＣＰＵコア１０２には停止指示が発行されＣＰＵコア１０２に通知される（Ｓ２８）。したがって、不正プログラムは実行されない（Ｓ２７）。ＳＲＡＭ１０３上の不正プログラムも電源が切られれば消失する。
【００６７】
なお、ＳＲＡＭ１０３上で実行される不正プログラムと、プログラムメモリブロック１１ａに書きこまれる不正プログラムとは、同じプログラムである必要はない。
【００６８】
図１１に、プログラムメモリブロック１１ａに不正プログラムが書きまれた後に検証要求を発行しない場合のシーケンスを示す。検証要求を発行しないため、検証状態フラグ１２ａは「未検証」のままであり、図５の場合と同様に再起動での検証に失敗するため不正プログラムは実行されない。
【００６９】
図１２に、書換え許可要求に応じた処理の途中に電源断等による処理中断と再起動処理とが発生した場合のシーケンスを示す。
【００７０】
ＣＰＵコア１０２による書換え許可要求の発行後、検証状態フラグ１２ａが「未検証」に書換えられたものの、その結果が書換え制御フラグ３１ａに反映される前に電源断により処理が中断し再起動している。電源断までの間、書換え制御フラグ３１ａは「禁止」の状態を維持しているため、ＣＰＵコア１０２以外のＤＭＡＣ１０７なども含めてプログラムメモリブック１１ａに対していかなる書込みも行われることはない。
【００７１】
再起動処理（Ｓ２１）後は、検証状態フラグ１２ａが「未検証」に設定されているため、再度検証（Ｓ２４）が行われるが、プログラムメモリブロック１１ａは書換えられていないため検証に成功し（Ｓ２５で「成功」）、ＣＰＵコア１０２に正常起動許可が通知され（Ｓ２６）、プログラム１１ａ１が実行される。
【００７２】
ここで、仮に、書換え許可の操作において、ふたつの状態フラグ操作の順序を入れ替えた場合を考える。この場合、ＣＰＵコア１０２により書換え許可要求が発行されると、書換え制御フラグ３１ａが「許可」に設定された後に、検証状態フラグ１２ａが「未検証」に設定されることになる。
【００７３】
このとき、書換え制御フラグ３１ａが「許可」に設定された直後からプログラムメモリブロック１１ａへの書き込みが可能になる。そして、不揮発性の検証状態フラグ１２ａへの「未検証」の書きこみ完了前に再起動が発生した場合、プログラムメモリブロック１１ａの書換えが発生したにもかかわらず、検証状態フラグ１２ａは「検証済」であるため、再起動処理後の検証はスキップされてしまう。この書込みで不正プログラムが書きこまれている場合、不正プログラムの実行が成功してしまう。
【００７４】
それに対して、図１２の例では検証状態フラグ１２ａの変更後に電源断が発生しているため、再起動処理後に検証が行われている。検証状態フラグ１２ａの変更前に電源断が発生した場合は、検証状態フラグ１２ａは「検証済」のままであるため、再起動処理後に検証は行われない。このとき、書換え制御フラグ３１ａの設定が検証状態フラグ１２ａの後に行われるため、この場合でもプログラムメモリブロック１１ａへの書き込みは行われないことが担保されており、再起動処理後に検証を行わなくても検証済みのプログラム１１ａ１が書換えられてしまう可能性を排除できるため安全である。
【００７５】
すなわち、本実施形態では、検証状態を示す検証状態フラグ１２ａと、実行中の不揮発性メモリへの書き込みを制御する書換え制御フラグ３１ａとで、非同期の電源断を含む検証状態管理を安全に行うことができる。また、本実施形態では、既存のマイクロコントローラチップに対する回路の増加はわずかであり野外に配置されるフィールド機器やセンサ機器などセキュリティと低価格との両方が求められる機器に適している。
【００７６】
なお、本実施形態では、システムプログラムが書込み許可要求と検証要求とを個別に発行することを想定している。この理由は、組込みマイクロコントローラのメモリ構成と書換え手順を想定したものである。この手順の他に、書込み許可要求と書込み、そして検証要求を一体としてハードウェア処理する構成も論理的には考えられるが、組込みマイクロコントローラには適していない。この手順の場合、書込み先のプログラムメモリが書込み可能となる以前に、検証対象のプログラム１１ａ１がすべて別のバッファメモリに格納されている必要がある。バッファメモリとしてもっとも一般的なのはＳＲＡＭだがＳＲＡＭはフラッシュメモリよりビット単価が高いため、一般に容量はフラッシュメモリより小さい。したがってフラッシュメモリの書込みと検証を複数回に分割して行う必要が生じてしまう。これは、ハードウェア側の検証機能を複雑化することになる。
【００７７】
たとえば、更新プログラムが分割して配信される場合でも、それがメモリ上の配列にそった順序で受信されるとは限らない。プログラムを分割してピアツーピアにより配送する方式が知られているが、このような場合、分割した断片の受信順序がばらばらになるのがふつうである。
【００７８】
本実施形態では、システムプログラムが書込み許可要求と検証要求とを個別に発行することで、システムプログラムがプログラムメモリブロック１１ａに更新プログラムを任意の順序で書込み、全ての更新プログラムがそろった段階でシステムプログラムが検証要求を発行する手順とすることで、更新プログラム配信の自由度を高めると同時に検証機能のハードウェアを単純化できる。
【００７９】
以上のように、実施形態では、情報処理装置１において、書換え許可要求が発行され且つ検証状態フラグ１２ａが「検証済」である場合、「未検証」に変更され、検証状態フラグ１２ａの変更に応じて書換え制御フラグ３１ａが「禁止」から「許可」に変更される。また、検証要求が発行された場合、又は、検証状態フラグ１２ａが「未検証」でプログラム１１ａ１の検証が必要である場合、書換え制御フラグ３１ａが「禁止」に変更され、書換え制御フラグ３１ａの変更に応じてプログラム１１ａ１に対する検証が行われる。そして、検証状態フラグ１２ａは、検証に成功すれば「検証済」に設定され、検証に失敗すれば「未検証」のままに維持される。これにより、検証状態フラグ１２ａが「検証済」であり第１の不揮発性メモリ領域１１に対する書換えが行われていないと予想できる場合に、セキュアブートの実行をスキップさせることができる。この結果、セキュアブートの実行頻度を必要最小限（検証状態フラグ１２ａが「未検証」になっている場合）に抑えることができる。したがって、プログラム１１ａ１の不正な改ざんを確実に検出・防止できるとともに、プログラム１１ａ１の平均的な起動時間の短縮化を図ることができる。また、情報処理装置１の平均的な消費電力を低減できる。
【００８０】
なお、上記の実施形態では、検証状態フラグ１２ａと書換え制御フラグ３１ａとから検証の成功・失敗に関して直接的に推定することが困難である。そのため、不揮発の検証成否フラグを追加で設けて、検証成否フラグを参照することで検証に成功したのか失敗したのかを把握できるようにしてもよい。
【００８１】
上記の実施形態では、書換え禁止を書換え制御フラグ３１ａにより制御している。論理回路による実現の場合、書換え禁止の状態では、メモリに対する書込み制御信号を有効にしない回路を設けることで書換えを禁止する。これに加えて、フラッシュメモリのように、消去、書込みに論理回路とは異なる高電圧を必要とする場合は、それらの電源電圧供給を停止することで書換え禁止の担保をより厳格にできる。
【００８２】
また、上述のように検証状態フラグ１２ａ及び書換え制御フラグ３１ａは電源断などの中断に対して安全に動作するが、ノイズによるビット反転についてはこのかぎりではない。これらフラグについては、誤り訂正もしくは多数決論理を用いて冗長化してもよい。
【００８３】
上記の実施形態では、検証失敗した場合は停止するとされている。これに代わって、暗号鍵や重要入出力へのアクセスを禁止した条件で未検証のプログラム１１ａ１を実行することもできる。目的として、不正プログラム以外のメモリ故障などによる検証失敗が発生した場合に、原因を記録・通知することなどが期待できる。
【００８４】
また、書換え許可回路１２１とプログラム検証回路１４１との間で検証状態フラグ１２ａの書換え競合を防止するため、適切な書込み権取得管理を例えばＣＰＵコア１０２等が行うことができる。
【００８５】
また、図１３は、実施形態の第１の変形例として、情報処理装置１（マイクロコントローラチップ１０１）のハードウェア構成を示すブロック図である。図１３に示すように、プログラム検証回路１４１で取得されたフィンガープリント期待値は、論理ブロック（第３の不揮発性メモリ領域）１１４に不揮発に記憶されてもよい。
【００８６】
上記の実施形態との構成上の差異は、フィンガープリント期待値メモリ１１４ａが論理ブロック１１４に設けられている点である。最初のプログラム１１ａ１の検証時、もしくは別途設けられたフィンガープリント期待値設定手順において、検証された期待値がフィンガープリント期待値メモリ１１４ａに書きこまれる。
【００８７】
例えば図１４に示すように、書換え許可要求に応じた処理において、検証状態フラグ１２ａに「未検証」が設定される際にフィンガープリント期待値メモリ１１４ａがクリアされ（Ｓ４３）、確認のために検証状態フラグ１２ａの値が読み出される際にフィンガープリント期待値が適正にクリアされているか確認される（Ｓ４４）。また、図１５に示すように、検証要求に応じた処理において、書換え制御フラグ３１ａに「禁止」が設定（Ｓ１３）された後に、プログラム検証回路１４１は、フィンガープリント期待値メモリ１１４ａを参照して、フィンガープリント期待値がクリアされていれば（Ｓ５４ａで「クリア状態」）、フィンガープリント値の計算とフィンガープリント期待値の取得とをそれぞれ行った後に、両者の照合を行う（Ｓ５４ｃ）。プログラム検証回路１４１は、フィンガープリント期待値メモリ１１４ａにフィンガープリント期待値が格納されていれば（Ｓ５４ａで「設定済み」）、フィンガープリント期待値の取得をスキップして、フィンガープリント値の計算の後に両者の照合を行う（Ｓ５４ｂ）。したがって、フィンガープリント期待値が設定済みである場合に、プログラム１１ａ１の検証処理の時間を短縮できる。
【００８８】
上記の実施形態ではフィンガープリント期待値は、第３者による偽造防止のため秘密鍵に基づいて作られた署名又はＭＡＣの形で与えられている。秘密鍵に基づかないハッシュ値では第３者が偽造可能なため、上記の実施形態には適用できない。
【００８９】
第１の変形例では、フィンガープリント期待値を一般のプログラムによるアクセスから保護された不揮発性メモリ１１１に保持するため、フィンガープリント期待値をハッシュ値とすることもできる。その場合、フィンガープリント期待値検証機能１４３は、ＣＰＵコア１０２内で実行されるプログラムもしくは装置外との通信において認証された通信路を経由してハッシュ値を受信し、フィンガープリント期待値メモリ１１４ａに書きこむことができる。例えば、ＴＣＧ（Ｔｒｕｓｔｅｄ  Ｃｏｍｐｕｔｉｎｇ  Ｇｒｏｕｐ）の仕様に基づくセキュアブートでは安全なストレージに保存されたハッシュ値との比較が行われるため、第１の変形例の使用が適している。
【００９０】
また、上記の実施形態は、セキュアブートにおいて起動時の応答悪化と電力消費を増やす検証処理を省略できる点で、無線センサや無線カードなどに特に適している。無線センサは間歇的に動作することが多いが、その都度大きな電力を消費するセキュアブートを実施することは、電池駆動の端末では電池交換の頻度が増えてしまう。無線給電の無線カードなどでは、大電力を供給できないことにより起動時間はさらに長くなる。
【００９１】
これらの端末は同時に低コストが求められるが、実施形態及び第１の変形例では、ハードウェアを前提とした構成を示している。ハードウェアで実現した場合、チップ面積の増加はコスト増に直結する。特にセキュアブート機能はセンサ信号処理などと比較して使用頻度が低いため、これを汎用ＣＰＵのソフトで実現することはチップ面積の縮小に直結し利点となる。これらの機能は基本的にはソフトウェアとしても処理時間がかかることを除けば、ソフトウェアでも同様の処理を実現可能である。ただし、端末に不正プログラムが侵入することを前提として考えると、書換え許可機能、プログラム検証機能、そして起動時のプログラム検証要否判定機能は不正プログラムの干渉を受けてはならない機能である。
【００９２】
以下では、実施形態の第２の変形例として、検証機能および起動時の検証要否判定機能についてソフトウェア処理とし、不正プログラムが端末に侵入した状態でもその影響を排除して安全にこれら機能を実行する手順を説明する。
【００９３】
第２の変形例では、実施形態においてハードウェアで実現されていたプログラム検証機能及びプログラム検証要否判定機能を、書換え不能なマスクＲＯＭ１０４上の機能モジュールであるプログラム検証モジュール１４１ａ、検証要否判定モジュール１６１ａで代替する。図１６は、第２の変形例における情報処理装置１のハードウェア構成を示すブロック図である。プログラム検証モジュール１４１ａ、検証要否判定モジュール１６１ａは、予めマスクＲＯＭ１０４に格納されている。このとき、フラグをＣＰＵコア１０２上の命令発行によって直接操作する。そのためにフラグ操作機能を担うフラグ操作回路１８１が設けられている。不正プログラムによるフラグ操作機能の利用を防ぐため、命令発行によるフラグ操作が可能な期間を、ＣＰＵコア１０２の再起動処理からマスクＲＯＭ１０４上の機能モジュールの実行後、マスクＲＯＭ１０４上の機能モジュールがフラグアクセスを無効化するまでの期間に限定する。このためにフラグアクセス有効化／無効化機能を担うフラグアクセス設定回路１９１を設ける。マスクＲＯＭ１０４上のプログラムは検証なしで実行され得ることになるが、これはハードウェア的に改変不能であるため検証を省略しても差し支えない。
【００９４】
フラグ操作回路１８１は、フラグアクセス制御機能１８２、検証状態フラグ操作機能１８３、検証状態フラグ操作機能１８４、及び書換え制御フラグ操作機能１８５を有する。フラグアクセス設定回路１９１は、フラグアクセス有効化機能１９２及びフラグアクセス無効化機能１９３を有する。
【００９５】
これらの機能は、書換え制御フラグ３１ａおよび検証状態フラグ１２ａ、そしてフラグアクセス機能に対するインタフェースと許可を制御するだけであり、検証計算を実行するハードウェアと比較して非常に小規模の回路で実現可能である。
【００９６】
汎用ＣＰＵによるハッシュ値や署名などの暗号演算は専用ハードウェアと比較して一般に長い時間がかかり、消費電力効率も悪い。しかしながら、第２の変形例ではセキュアブートの検証処理はプログラムメモリブロック１１ａの書換えがない限り発生しないため、通常の運用では電力効率に与える影響はほとんどない。
【００９７】
図１７は、第２の変形例における再起動処理に応じた情報処理装置１の動作を示すフローチャートである。再起動処理（Ｓ２１）後、フラグアクセス設定回路１９１によりフラグアクセスを有効化、すなわちフラグ操作回路１８１によるフラグ操作機能が有効（Ｓ６１）になった状態でマスクＲＯＭ１０４上のプログラム検証モジュール１４１ａ及びプログラム検証要否判定モジュール１６１ａを実行する（Ｓ６２）。同機能モジュールはフラグ操作回路１８１を通じて検証状態フラグ１２ａを読出し（Ｓ２２）、「検証済」であれば（Ｓ２３で「検証済」）、フラグアクセスを無効化して（Ｓ６５）、検証済みプログラム１１ａ１を実行する（Ｓ６６）。「未検証」の場合は（Ｓ２３で「未検証」）、ソフトウェアによるプログラムメモリブロック１１ａの検証処理（Ｓ６４）を行い、検証に成功（Ｓ２５で「成功」）した場合はやはりフラグアクセスを無効化して（Ｓ６５）、検証済みプログラム１１ａ１を実行する（Ｓ６６）。検証に失敗した場合は（Ｓ２５で「失敗」）、フラグアクセスを無効化して（Ｓ６７）、プログラム１１ａ１の起動を停止する（Ｓ６８）。
【００９８】
また、あるリスクが人命や資産に損害を与える可能性を、機械や装置の働きによって低減する機能安全と呼ばれる手法が知られている。複雑なシステムの構成要素が故障した場合にリスクを軽減する機能の実現にはソフトウェアが広く用いられる。機能安全ではソフトウェアが正しいものであることが、その性質上極めて重要である。セキュアブートは、機能安全の基盤となるソフトウェアの正しさを、悪意の攻撃から保護する手段ともなりえる。セキュアブートをこのように位置付けた場合、セキュアブート機構の故障による誤動作、特にセキュアブートの要否判断が誤動作すると、改ざんされたプログラムの実行を許容してしまうことにつながってしまう。したがって、セキュアブートスキップ機構についても機能安全に置いて一般的に用いられる故障検出の手法により事前に排除しておくことが望ましい。
【００９９】
たとえば、本実施形態においては、検証状態フラグが検証済みとなっていないにも関わらず書換えが可能な状態になってしまう誤動作が上記にあたるため、書換え制御フラグの禁止状態がプログラムメモリブロックの書込み禁止に正しく反映されることを確認するためのＢＩＳＴ（Ｂｕｉｌｔ  Ｉｎ  Ｓｅｌｆ  Ｔｅｓｔ）機能により担保しておくことが挙げられる。なお、検証状態フラグを格納する不揮発性メモリのうち、フラッシュメモリは書込みを繰り返すと書込み・読出しが不安定になる劣化が発生することが知られている。本実施形態では、検証状態フラグにいったん書きこんだ値を読み出してその正しさを検証、もしくは書換え制御フラグにコピーしている。そのため、仮にフラッシュメモリの劣化により書込みに失敗したとしても、書換え制御フラグの値も書込み許可の状態とならないため、本実施形態の機構自体が機能安全に必要な機能の一部を提供することができる。
【０１００】
また、上記の実施形態において検証対象を一つのプログラムとした例を示したが、書換え制御フラグおよび検証状態フラグを備えることにより複数のプログラムを検証対象とすることも可能である。
【０１０１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０２】
１  情報処理装置、１０  不揮発性メモリ、２０  不揮発性メモリ、３０  書換え許可部、４０  プログラム検証要否判定部、５０  プログラム検証部、６０  命令実行部。
【図１】
2018195329.tif 000003
【図２】
2018195329.tif 000004
【図３】
2018195329.tif 000005
【図４】
2018195329.tif 000006
【図５】
2018195329.tif 000007
【図６】
2018195329.tif 000008
【図７】
2018195329.tif 000009
【図８】
2018195329.tif 000010
【図９】
2018195329.tif 000011
【図１０】
2018195329.tif 000012
【図１１】
2018195329.tif 000013
【図１２】
2018195329.tif 000014
【図１３】
2018195329.tif 000015
【図１４】
2018195329.tif 000016
【図１５】
2018195329.tif 000017
【図１６】
2018195329.tif 000018
【図１７】
2018195329.tif 000019
【手続補正書】
【提出日】平成30年8月13日(2018.8.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
情報処理装置であって、
不揮発性メモリと、
前記不揮発性メモリにおける第１のメモリ領域に格納されたプログラムが未検証であることを示す第１の値と前記プログラムが検証済であることを示す第２の値とに設定可能であるフラグと、
前記情報処理装置において実行されるプログラムの書換え許可要求に応じて、前記フラグに前記第１の値を設定する切換回路と、
前記第１のメモリ領域に格納されたプログラムの検証に応じて前記フラグに前記第２の値を設定し、前記情報処理装置の再起動に応じて、前記第１の値が前記フラグに設定されている場合に前記プログラムに対する検証処理を行い、前記第２の値が前記フラグに設定されている場合前記検証処理を行わずに前記プログラムを実行させる検証回路と、
を備えた情報処理装置。
【請求項２】
前記フラグは、前記不揮発性メモリにおける第２のメモリ領域に格納されている
請求項１に記載の情報処理装置。
【請求項３】
前記第１のメモリ領域に対する書換えが禁止されていることを示す第３の値と前記第１のメモリ領域に対する書換えが許可されていることを示す第４の値とに設定可能である第２のフラグをさらに備え、
前記第２のフラグの前記第３の値から前記第４の値への変更に応じて、前記第１の値が前記フラグに設定され、
前記検証処理の実行に先立って、前記第３の値が前記第２のフラグに設定される
請求項１に記載の情報処理装置。
【請求項４】
前記第２のフラグは、揮発性メモリに格納される
請求項３に記載の情報処理装置。
【請求項５】
前記第２のフラグに前記第３の値を設定するための前記検証処理に先立って、前記第１のメモリ領域が書込み禁止となり、
前記第４の値が前記第２のフラグに設定された場合、前記第１のメモリ領域が書込み許可となる
請求項１に記載の情報処理装置。
【請求項６】
前記検証処理が成功した場合に前記プログラムが実行可能となり、
前記検証処理が失敗した場合に前記プログラムが実行不可能となる
請求項１に記載の情報処理装置。
【請求項７】
前記検証処理において、前記検証回路は、前記第１のメモリ領域に格納された前記プログラムのハッシュ値を計算し、前記プログラムの公開鍵署名からハッシュ値を抽出し、前記計算されたハッシュ値と前記抽出されたハッシュ値とを比較する
請求項１に記載の情報処理装置。
【請求項８】
前記第１のメモリ領域に格納された前記プログラムの公開鍵署名から抽出されたハッシュ値は、前記不揮発性メモリにおける第３のメモリ領域に格納されている
請求項１に記載の情報処理装置。
【請求項９】
前記検証回路とは別に設けられた処理部をさらに備え、
前記検証回路は、前記処理部からの検証要求に応じて、前記検証処理を実行する
請求項１に記載の情報処理装置。
【請求項１０】
書換え不能であり、検証プログラムを格納する第２の不揮発性メモリをさらに備え、
前記検証回路は、前記検証プログラムに応じて、前記検証処理を実行する
請求項１に記載の情報処理装置。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００６
【補正方法】変更
【補正の内容】
【０００６】
一つの実施形態によれば、情報処理装置であって、不揮発性メモリとフラグと切換回路と検証回路とを有する情報処理装置が提供される。フラグは、第１の値と第２の値とに設定可能である。第１の値は、不揮発性メモリにおける第１のメモリ領域に格納されたプログラムが未検証であることを示す。第２の値は、プログラムが検証済であることを示す。切換回路は、情報処理装置において実行されるプログラムの書換え許可要求に応じて、フラグに第１の値を設定する。検証回路は、第１のメモリ領域に格納されたプログラムの検証に応じてフラグに第２の値を設定する。検証回路は、情報処理装置の再起動に応じて、第１の値がフラグに設定されている場合にプログラムに対する検証処理を行い、第２の値がフラグに設定されている場合検証処理を行わずにプログラムを実行させる。