(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024079911
(43)【公開日】2024-06-13
(54)【発明の名称】電子装置及び改竄検知方法
(51)【国際特許分類】
G06F 21/64 20130101AFI20240606BHJP
【FI】
G06F21/64
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2022192598
(22)【出願日】2022-12-01
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110004185
【氏名又は名称】インフォート弁理士法人
(74)【代理人】
【識別番号】100121083
【弁理士】
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【弁理士】
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100074099
【弁理士】
【氏名又は名称】大菅 義之
(72)【発明者】
【氏名】亀山 英司
(57)【要約】
【課題】記憶データに対する改竄の検知に要する時間を短縮する。
【解決手段】記憶部10はデータを記憶する。生成部20は、記憶部10にデータが書き込まれると、記憶部10から当該データを読み出して当該データについての検証情報を生成して記憶部10に書き込む。検知部30は、電子装置1の起動時に、記憶部10で保存されている検証情報と記憶部10への書き込み前のデータから予め生成しておいた当該データについての正解検証情報との比較によって、記憶部10で保存されているデータの改竄を検知する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
電子装置であって、
データを記憶する記憶部と、
前記記憶部に前記データが書き込まれると、前記記憶部から前記データを読み出して前記データについての検証情報を生成し、前記検証情報を前記記憶部に書き込む生成部と、
前記電子装置の起動時に、前記記憶部で保存されている前記検証情報と前記記憶部への書き込み前の前記データから予め生成しておいた前記データについての正解検証情報との比較によって、前記記憶部で保存されている前記データの改竄を検知する検知部と、
を備えることを特徴とする電子装置。
【請求項2】
前記記憶部における前記データの保存領域には、データ書き込みを許可する許可モードとデータ書き込みを禁止する禁止モードとのどちらかの設定がなされ、
前記生成部は、前記データの前記記憶部への書き込みの完了後になされる指示であって前記設定を前記許可モードから前記禁止モードへ変更する前記指示に応じて、前記検証情報を生成して前記記憶部に書き込む、
ことを特徴とする請求項1に記載の電子装置。
【請求項3】
前記生成部は、前記検証情報の前記記憶部への書き込みの完了後に前記設定を前記許可モードから前記禁止モードへ変更することを特徴とする請求項2に記載の電子装置。
【請求項4】
前記記憶部は、第1の鍵情報を用いた電子署名がされている前記正解検証情報を記憶し、
前記電子装置は、前記第1の鍵情報と対となる第2の鍵情報を用いて前記電子署名の検証を行う検証部を更に備え、
前記検知部は、前記検証に成功した前記電子署名がされている前記正解検証情報を用いて、前記改竄の検知を行う、
ことを特徴とする請求項1に記載の電子装置。
【請求項5】
前記電子装置は記憶デバイスを備え、
前記記憶デバイスが前記記憶部と前記生成部とを備える、
ことを特徴とする請求項1から4のうちのいずれか一項に記載の電子装置。
【請求項6】
電子装置が備える記憶部にデータが書き込まれると、前記記憶部から前記データを読み出して前記データについての検証情報を生成し、
前記検証情報を前記記憶部に書き込み、
前記電子装置の起動時に、前記記憶部で保存されている前記検証情報と前記記憶部への書き込み前の前記データから予め生成しておいた前記データについての正解検証情報との比較によって、前記記憶部で保存されている前記データの改竄を検知する、
ことを特徴とする改竄検知方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、電子装置及び改竄検知方法に関する。
【背景技術】
【0002】
記憶媒体に記憶させたデータの改竄の検知に関して幾つかの技術が知られている(例えば、特許文献1~特許文献3参照)。
【0003】
例えば、装置の終了時に、記憶領域に記憶されている電子情報に基づいて検証値を生成し、装置の起動時に、当該検証値と期待値との比較に基づいて当該電子情報の改ざんの有無を検証するという技術が知られている。
【0004】
また、例えば、複数の処理オブジェクトを実行する都度、パリティデータを順次生成して記録媒体に記録し、実行完了時に、当該記録媒体のパリティデータに基づいて途中の処理オブジェクトに関する情報が改竄されたか否かを検知するという技術が知られている。
【0005】
また、例えば、各記憶領域のデータから生成した各期待値と、第1の状態情報と新たな第2の状態情報との比較に基づいて選択した記憶領域のデータから生成した検証値との比較に基づき、選択した記憶領域のデータの完全性を検証するという技術が知られている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2020-57309号公報
【特許文献2】特開2005-352600号公報
【特許文献3】特開2020-187504号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
高機能なオペレーティング・システム(以下、「OS」と称することとする)上で動作する電子装置では、大きな記憶容量を有する記憶部を備えた記憶デバイスが必要となる。その一方で、セキュリティ要件の高い電子装置では、記憶デバイスで保存されているデータの改竄の有無の検知を装置の起動時に常に行うことが要求される。改竄の検知は検知対象のプログラムやデータが使用される前に行うことが望ましく、改竄を検出した場合には当該プログラムの起動の抑止や当該テータの使用の中止といった措置がとられる。
【0008】
しかしながら、例えば車載向けの組込み機器などの電子装置では、上述した要求と共に短い起動時間も要求される。従って、記憶デバイスで保存されているデータの改竄の検知も短時間で行うことが必要となる。
【0009】
1つの側面において、本発明は、記憶データに対する改竄の検知に要する時間を短縮することを目的とする。
【課題を解決するための手段】
【0010】
1つの案では、電子装置は、記憶部と生成部と検知部とを備える。記憶部はデータを記憶する。生成部は、前記記憶部に前記データが書き込まれると、前記記憶部から前記データを読み出して前記データについての検証情報を生成し、前記検証情報を前記記憶部に書き込む。検知部は、前記電子装置の起動時に、前記記憶部で保存されている前記検証情報と前記記憶部への書き込み前の前記データから予め生成しておいた前記データについての正解検証情報との比較によって、前記記憶部で保存されている前記データの改竄を検知する。
【発明の効果】
【0011】
1つの側面によれば、記憶データに対する改竄の検知に要する時間を短縮できる。
【図面の簡単な説明】
【0012】
【
図1】改竄検知処理の手順の第1の例の処理手順を示したフローチャートである。
【
図2】電子装置の機能的構成の一例を示す図である。
【
図4】書き込み処理の一例の概要を示したフローチャートである。
【
図5】改竄検知の対象のデータを記憶領域に書き込む手順の一例を説明する図である。
【
図6】改竄検知処理の一例の概要を示したフローチャートである。
【
図7】コントローラによる検証情報の読み出しの手順の一例を説明する図である。
【
図8】セキュアAPIの実行によって行われるテータ改竄の検知の手順の一例を説明する図である。
【発明を実施するための形態】
【0013】
以下、図面を参照しながら、実施形態を詳細に説明する。
【0014】
Linux(登録商標)などの高機能なOS上で動作する電子装置では、比較的容量の大きな記憶デバイスが必要となる。その一方で、車載器である組込み機器などといったセキュリティ要件の高い電子装置では、記憶デバイスで保存されているデータの改竄の有無の検知を装置の起動時に常に行うことが要求される。改竄の検知は検知対象のプログラムやデータが使用される前に行うことが望ましく、改竄を検出した場合には当該プログラムの起動の抑止や当該テータの使用の中止といった措置がとられる。
【0015】
記憶デバイスで保存されているデータに対する改竄の検知の手法の一例について説明する。
【0016】
この手法では、まず、検知対象のデータを記憶デバイスから読み出し、当該データについての、ハッシュ値やCRC(Cyclic Redundancy Check、巡回冗長検査)値などといった検証情報を、当該データから算出して生成する。次に、生成した検証情報を、記憶デバイスに書き込む前の当該データ、すなわち、改竄されていないことが保証されている当該データから算出して生成した検証情報(以下、この検証情報を「正解検証情報」と称することとする)と比較する。この比較の結果、両者が一致する場合には当該データは改竄されていないとの検知結果を得る一方、両者が不一致の場合には当該データが改竄されているとの検知結果を得る。
【0017】
ここで
図1について説明する。
図1は、改竄検知処理の手順の第1の例の処理手順を示したフローチャートである。この処理は、ハッシュ関数のひとつとして広く知られているSHA-256(Secure Hash Algorithm 256-bit)により得られるハッシュ値を検証情報として利用してテータの改竄の検知を行うものである。
【0018】
ここでは、記憶デバイスにおけるプログラムの保存領域を検知対象の領域とし、この領域で保存されているプログラムのデータを改竄検知の対象とする。なお、このデータは複数のブロックに分割されて当該保存領域で保存されており、データの読み出しはブロック単位で行われるものとする。
【0019】
図1の処理が開始されると、まず、S101において、sha256init関数の実行により初期のハッシュ値を求める処理が行われる。
【0020】
次に、S102において、記憶デバイスにおけるプログラムの保存領域の全てのデータのブロックをロードしたか否かを判定する処理が行われる。この判定処理において、全てのテータのブロックが読み出されたと判定されたとき(判定結果がYESのとき)にはS105に処理を進める。一方、この判定処理において、ロードしていないデータのブロックがプログラム保存領域に残っていると判定されたとき(判定結果がNOのとき)にはS103に処理を進める。
【0021】
S103では、ロードしていないブロックのデータを当該保存領域から読み出してメモリの所定の領域にロードする処理が行われる。
【0022】
次に、S104では、この処理の直近に求められていたハッシュ値に対する、S103の処理によりロードされたデータに基づくsha256update関数の実行によって、ハッシュ値を更新する処理が行われる。その後はS102へ処理を戻して上述した処理が繰り返される。
【0023】
S101の処理の直後にS104の処理が実行される場合には、S101の処理により求められたハッシュ値を更新する処理がS104の処理において行われる。一方、S104の処理の直後にS104の処理が繰り返される場合には、S104の処理により更新されたハッシュ値を更に更新する処理が繰り返しのS104の処理において行われる。
【0024】
S105では、sha256final関数の実行によって、S104の処理の繰り返しにより得られたハッシュ値をメモリの所定領域にロードする処理が行われる。この処理によりロードされるハッシュ値が、改竄検知の対象であるデータについての検証情報となる。
【0025】
S106では、改竄検知の対象であるデータについて予め生成しておいた正解検証情報であるハッシュ値をメモリの所定領域にロードする処理が行われる。
【0026】
S107では、セキュアAPI(Application Programming Interface)が実行されて、S105の処理によりロードされた検証情報であるハッシュ値をチェックする処理が行われる。この処理では、当該ハッシュ値と、S106の処理によりロードされた正解検証情報であるハッシュ値との比較が行われる。そして、続くS108において、両者が一致するか否かを判定することによって、データの改竄を検知したか否かを判定する処理が行われる。
【0027】
S108の判定処理において、両者が一致すると判定されたときは、データの改竄を検知しなかったと判定されて判定結果はNOとなり、S109に処理を進めて改竄検知の対象であるプログラムの起動が許可され、その後は
図1の処理が終了する。一方、S108の判定処理において、両者は不一致であると判定されたときは、データの改竄を検知したと判定されて判定結果はYESとなり、S110に処理を進めて改竄検知の対象であるプログラムの起動が抑止され、その後は
図1の処理が終了する。
【0028】
図1の改竄検知処理は以上のようにしてテータの改竄の検知が行われる。従って、この処理では、検知対象の領域で保存されているデータについての検証情報であるハッシュ値を求めるために、S102からS104にかけての処理によってデータのロードとハッシュ値の更新が繰り返される。このため、検知対象の領域が大きくなると、検知処理全体の処理時間は増大することになる。
【0029】
しかしながら、例えば車載向けの組込み機器などの電子装置では、前述したような、記憶デバイスで保存されているデータの改竄の有無の検知を装置の起動時に常に行う要求と共に、例えば5秒以内での起動の完了などといったように、短い起動時間も要求される。
【0030】
このような要求に応えるための手法の1つとして、全ての記憶領域を対象として改竄検知を行うのではなく、予め定めておいた一部の記憶領域のみを改竄検知の対象とするという手法が考えられる。
【0031】
すなわち、記憶デバイスに保存するデータを、権限が高いものと権限が低いものとに予め分けておき、記憶デバイスの別々の領域に格納しておくようにする。OSやプラットフォームアプリケーションなどといったシステム全体に影響を与えるデータは、権限が高いデータの例であり、プラットフォーム上で動作するアプリケーションやそれらが使用するデータなどは、権限が低いデータの例である。そして、システムの起動時には、権限が高いデータのみを対象として改竄検知を行うようにして、起動時に改竄検知を行う領域を少なくすることにより、改竄検知処理の実行に要する時間を短縮するという手法である。
【0032】
但し、昨今の、Linux(登録商標)などの高機能なOSや、Android(登録商標)などの高機能な組込みプラットフォームでは、OSやプラットフォームアプリケーション自体のデータサイズが大きい。このため、上記の手法でも、改竄検知処理の実行に要する時間の短縮の効果が不足することもある。
【0033】
また、前述した要求に応えるための手法の別の1つとして、システムの起動後にデータの改竄検知を行うという手法も考えられる。
【0034】
すなわち、システムの起動時には、OSのカーネルイメージや改竄検知プログラムなどといった必要最低限のプログラムやデータのみを対象として改竄の検知を行い、残りのデータを対象とする改竄の検知はシステムの起動が完了してから行うという手法である。
【0035】
この手法は、改竄を検知したときには検知対象のプログラムの実行が既に開始していることがあり、この場合には、例えば、改竄されたプログラムが改竄検知プログラム自体を無効にしてしまい、残りのデータを対象とする改竄の検知が不十分となる可能性がある。
【0036】
前述したように、
図1の改竄検知処理において処理時間を要する処理は、検知対象のデータについての検証情報を求める処理である。従って、この検証情報を求める処理を起動時以外のタイミングで行うようにすれば、システムの起動時間の短縮の要求を充たすことが可能になる。
【0037】
そこで、これより説明する実施形態では、改竄検知の対象のデータについての検証情報を当該データの記憶デバイスへの書き込みの際に求めるようにする。そして、システムの起動時には、検証情報と正解検証情報との比較による改竄検知のみを行うようにして、改竄検知を短時間で行えるようにする。
【0038】
図2について説明する。
図2は、実施形態の電子装置の機能的構成例を示している。
【0039】
図2の構成例では、電子装置1は、記憶部10、生成部20、検知部30、及び検証部40を備えている。なお、この電子装置1は記憶デバイス2を備えており、記憶部10及び生成部20は記憶デバイス2に備えられている。
【0040】
記憶部10は、書き込まれたデータを保存する。
【0041】
生成部20は、記憶部10にデータが書き込まれると、記憶部10から当該データを読み出して当該データについての検証情報を生成し、生成した検証情報を記憶部10に書き込む。
【0042】
例えば、記憶部10におけるデータの保存領域には、データ書き込みを許可する許可モードとデータ書き込みを禁止する禁止モードとのどちらかの設定がなされるように記憶部10が構成されていてもよい。このように記憶部10が構成されている場合に、生成部20は、データの記憶部10への書き込みの完了後になされる指示であって当該設定を許可モードから禁止モードへ変更する当該指示に応じて、検証情報を生成して記憶部10に書き込むものであってもよい。また、生成部20は、検証情報の記憶部10への書き込みの完了後に当該設定を許可モードから禁止モードへ変更するようにしてもよい。
【0043】
検知部30は、電子装置1の起動時に、記憶部10で保存されている検証情報と、記憶部10への書き込み前のデータから予め生成しておいた、当該データについての正解検証情報との比較によって、記憶部10で保存されている当該データの改竄を検知する。
【0044】
電子装置1は、このような構成を備えることによって、電子装置1の起動時には検証情報の生成を行わずにデータの改竄の検知を行うことを可能にする。従って、電子装置1の起動時におけるデータの改竄の検知に要する時間が短縮される。
【0045】
また、電子装置1は、このような構成を備えることによって、記憶部10へのデータの書き込みの際に生成部20が生成した検証情報が記憶部10で保持される。このため、例えば、悪意のある第三者が電子装置1から記憶デバイス2を取り外し、記憶デバイス2で保存されているデータに対してデータライタなどを使用して改竄を行うと、データの書き込みを行った際に生成部20によって検証情報が自動で更新される。従って、取り外した記憶デバイス2を元に戻して電子装置1を起動すると、検証情報と正解検証情報と不一致がとなり、検知部30によってデータの改竄が検出される。
【0046】
なお、記憶デバイス2に記憶部10と共に生成部20を備えるようにすると、生成部20が検証情報を書き込む記憶部10の記憶領域には記憶デバイス2の外部からのデータの書き込みを行えない構成の構築が容易である。従って、このようにすることで、記憶デバイス2に対するデータライタ等による書き込みによる検証情報自体の改竄が防止される。
【0047】
また、悪意のあるアプリケーションでは、システム管理権限を取得するためにセキュリティホールなどを利用することが多い。システム管理権限が取得されてしまうと、システム上では読み出し専用(書き込み禁止)で運用しているOSやアプリケーションフレームワーク領域に対しても、アクセス権を変更することによってデータの書き込みを行うことが可能になってしまう。ところが、電子装置1は前述した構成を備えているので、悪意のあるアプリケーションが改竄を行った場合には、記憶デバイス2自身によって検証情報が自動で更新される。従って、その後の電子装置1の再起動時には、検証情報と正解検証情報と不一致がとなり、検知部30によってデータの改竄が検出される。
【0048】
また、前述したように、記憶デバイス2に記憶部10と共に生成部20を備えるようにすると、生成部20が検証情報を保持する記憶部10の記憶領域には記憶デバイス2の外部からのデータの書き込みを行えない構成の構築が容易である。従って、このようにすることで、悪意のあるアプリケーションによる検証情報自体の改竄が防止される。
【0049】
なお、記憶部10は、第1の鍵情報を用いた電子署名がされている正解検証情報を記憶していてもよい。検証部40は、第1の鍵情報と対となる第2の鍵情報を用いて電子署名の検証を行う。第1の鍵情報及び第2の鍵情報は、それぞれ、例えば、公開鍵暗号方式において用いられる秘密鍵及び公開鍵である。検知部30は、検証部40による電子署名の検証に成功した電子署名がされている正解検証情報を用いて、上述した改竄の検知を行うようにしてもよい。このようにすることで、正解検証情報が改竄されていないことを確認した上で、テータの改竄の検知を行うことが可能になる。
【0050】
次に、電子装置1の具体的なハードウェア構成例について説明する。
【0051】
図3は組込み機器の構成例を示している。この組込み機器100は、例えば車両に搭載される機器であって、
図2に示した電子装置1の一例であり、記憶デバイス200とSoC300とメモリ400とを備えている。なお、「SoC」はSystem-on-a-chipの略称である。
【0052】
なお、
図2には、ホストPC500及び記憶デバイス用ライタ600も示されている。ホストPC500及び記憶デバイス用ライタ600は、記憶デバイス200に対するデータの書き込みに使用される。なお、「PC」とはPersonal Computerの略称である。
【0053】
組込み機器100が備えている各構成要素の詳細について説明する。
【0054】
記憶デバイス200は、
図2における記憶デバイス2の一例であり、eMMCやUFSなどといった、組込み機器100向けの記憶装置である。なお、「eMMC」はembedded Multi Media Cardの略称であり、「UFS」はUniversal Flash Storageの略称である。
【0055】
記憶デバイス200は、コントローラ210と記憶媒体220とを備えている。
【0056】
コントローラ210は、記憶デバイス200の制御を行う。コントローラ210は、例えば、ハードウェアロジックで構成してもよく、また、マイクロプロセッサとファームウェアとの組合せで構成してもよい。
【0057】
コントローラ210は、ホストI/F部211、モード管理部212、ブロック管理部213、エラー管理部214、改竄検証情報計算部215、及び、記憶媒体I/F部216の各機能を提供する。なお、「I/F」はInterfaceの略称である。
【0058】
ホストI/F部211は、記憶デバイス用ライタ600を介してホストPC500と接続されて、ホストPC500と記憶デバイス200との間での各種のデータの授受を管理する。
【0059】
モード管理部212は、記憶媒体220に対するデータの読み書きのモードの管理を行う。記憶媒体220は記憶領域が複数のパーティション221に分割される。モード管理部212によるモード管理は、パーティション221毎に「無効」と「有効」とのどちらかの設定が可能である。テータの読み書きのモードとしてRO(Read Only)モードとRW(Read and Write)モードとが定義されており、どちらかのモードが、モード管理の設定が「有効」であるパーティション221に対して設定される。ROモードが設定されたパーティション221については、データの読み出しのみが許可され、データの書き込みが禁止される。また、RWモードが設定されたパーティション221については、データの読み出しと書き込みとの両方が許可される。モード管理部212は、各パーティション221についてのモード設定を切り替えることが可能である。一方、モード管理の設定が「無効」であるパーティション221については、モード管理部212がモードの設定を行うことはできない。
【0060】
ブロック管理部213は記憶媒体220のパーティション構成の管理を行う。
【0061】
エラー管理部214は、記憶媒体220に対するエラーチェックや、エラー検出時の動作の管理を行う。
【0062】
改竄検証情報計算部215は、記憶媒体220における改竄検出対象のパーティション221にデータが書き込まれると、当該パーティション221から当該データを読み出して当該データについての検証情報を算出して記憶媒体220に書き込む。改竄検証情報計算部215は、
図2の電子装置1における生成部20の一例である。
【0063】
記憶媒体I/F部216は、記憶媒体220とコントローラ210との間での各種のデータの授受を管理する。
【0064】
記憶媒体220は、NAND型フラッシュメモリなどの不揮発性メモリであり、
図2の電子装置1における記憶部10の一例である。前述したように、記憶媒体220は記憶領域が複数のパーティション221に分割される。
図3では、複数のパーティション221のそれぞれを、それぞれ、Bootパーティション221-0、第1パーティション221-1、第2パーティション221-2、…と表現している。
【0065】
Bootパーティション221-0には、Bootローダや正解検証情報などといった、OSの起動までに使用されるモジュールやデータが格納される。組込み機器100の通常動作中は、Bootパーティション221-0はROモードで運用される。
【0066】
第1パーティション221-1には、OSやプラットフォームアプリケーション群が格納される。組込み機器100の通常動作中は、第1パーティション221-1は、ROモードで運用される。
【0067】
第2パーティション221-2以降の残りのパーティション221には、一般権限で動作するアプリケーション群やデータが格納される。これらのパーティション221は、モード管理部212によるモード管理は「無効」に設定され、組込み機器100の通常動作中でもデータの読み書きが可能な記憶領域として運用される。
【0068】
記憶媒体220の記憶領域は、パーティション221として割り当てられる領域の他に、改竄検証情報格納領域222を有する。改竄検証情報格納領域222には、改竄検証情報計算部215により算出される、記憶媒体220における改竄検出対象のパーティション221に格納されたデータについての検証情報が格納される。改竄検証情報格納領域222に格納されたデータは、SoC300からのみ読み出しを行えるものとする。
【0069】
なお、本実施形態では、第1パーティション221-1を改竄検知の対象とし、第1パーティション221-1に格納されたデータについての改竄の検知を行うものとする。
【0070】
SoC300は、CPU310、セキュアストレージ320、セキュアエンジン330、BootROM340、及び内部メモリ350を備えている。なお、「CPU」はCentral Processing Unitの略称であり、「ROM」はRead Only Memoryの略称である。
【0071】
CPU310は、記憶デバイス200に格納されている、Bootローダ、OS、プラットフォームアプリケーション等の各種のプログラムを実行する。
【0072】
セキュアストレージ320は、格納されているデータに対するアクセスが、SoC300内のCPU310のみから行えるように構成されているストレージである。また、セキュアエンジン330は、特定の演算処理の実行に特化したプロセッサであって、SoC300内のCPU310のみから利用できるように構成されているプロセッサである。
【0073】
本実施形態において、セキュアエンジン330は、
図2の電子装置1における検証部40の一例であり、正解検証情報に対する電子署名の検証の処理を行うように構成されておる。また、セキュアストレージ320には、当該電子署名の検証に用いられる公開鍵の情報が予め格納されている。正解検証情報に対する電子署名の詳細については後述する。
【0074】
BootROM340には、組込み機器100の起動時において電力の供給が開始されたときに、CPU310によって最初に実行されるBootプログラムが予め格納されている。また、BootROM340には、記憶デバイス200の記憶媒体220における各パーティション221で保存されているデータの改竄を検知する処理をCPU310に実行させるセキュアAPIも予め格納されている。CPU310は、このセキュアAPIを実行することによって、
図2の電子装置1における検知部30の機能を提供する。
【0075】
内部メモリ350は、記憶デバイス200の記憶媒体220におけるBootパーティション221-0に格納されているBootローダをCPU310が実行する際に利用する作業用の記憶領域を提供する。
【0076】
BootROM340及び内部メモリ350に対するアクセスはCPU310のみが可能であり、SoC300の外部からはアクセスすることができない。
【0077】
メモリ400は、記憶デバイス200のコントローラ210やSoC300のCPU310が各種の処理を実行する際に必要に応じて使用する作業用の記憶領域を提供する。
【0078】
組込み機器100は以上の構成要素を備えている。
【0079】
次に、ホストPC500と記憶デバイス用ライタ600とについて説明する。
【0080】
ホストPC500は組込み機器100のシステムビルド用のコンピュータである。ホストPC500は記憶装置510を備えている。
【0081】
記憶装置510には、ホストPC500において作成された各種のイメージデータが格納されている。より詳細には、記憶装置510には、組込み機器100の記憶デバイス200における記憶媒体220に格納するOSや各種のアプリケーション群についてのシステムイメージが予め格納されている。この記憶装置510には、記憶媒体220における改竄検出対象のパーティション221(本実施形態では第1パーティション221-1)に格納するデータについて算出した正解検証情報についてのバイナリイメージが格納される。また、記憶装置510には、正解検証情報に対する電子署名を行う際に用いる秘密鍵の情報と、当該秘密鍵と対となる公開鍵である、当該電子署名の検証を行う際に用いる当該公開鍵の情報とについてのバイナリイメージが予め格納されている。なお、この公開鍵の情報は、組込み機器100のSoC300におけるセキュアストレージ320に予め格納されているものと同一の情報である。
【0082】
記憶デバイス用ライタ600は、ホストPC500の記憶装置510で保存されている各種のイメージデータについての、組込み機器100の記憶デバイス200における記憶媒体220への書き込みを行う。
【0083】
次に、
図4の組込み機器100において行われる、記憶デバイス200の記憶媒体220における改竄検出対象のパーティション221に格納されたデータに対する改竄を検知する手法について説明する。
【0084】
なお、以下の説明では、
図1に手順を示した改竄検知処理の場合と同様に、SHA-256により得られるハッシュ値を検証情報として利用してテータの改竄の検知を行うものとする。
【0085】
まず、改竄検知の対象のイメージデータを、組込み機器100の記憶デバイス200における記憶媒体220の検知対象のパーティション221へ書き込む処理について説明する。
【0086】
図4は、書き込み処理の処理手順の概要の一例を示したフローチャートである。
【0087】
図4において、まず、S201では、改竄検知の対象のイメージデータについての正解検証情報を作成する処理がホストPC500により行われる。例えば、
図1に示した改竄検知処理におけるS101からS105までの処理を、改竄検知の対象のイメージデータに対してホストPC500が実行することによって、当該イメージデータについてのハッシュ値が、正解検証情報として作成される。
【0088】
次に、S202において、S201の処理によって作成された正解検証情報を、組込み機器100の記憶デバイス200における所定の記憶領域に書き込む処理が行われる。
【0089】
次に、S203において、組込み機器100の記憶デバイス200に対して、改竄検知の対象のイメージデータの書き込みを依頼する処理がホストPC500により行われる。記憶デバイス200では、コントローラ210が、この依頼に応じて、当該イメージデータを、記憶デバイス200における改竄検知の対象である記憶領域に書き込む処理を行う。
【0090】
次に、S203の処理によって記憶デバイス200における改竄検知の対象である記憶領域に書き込まれたイメージデータに対して、S204からS208までの各処理が、組込み機器100の記憶デバイス200におけるコントローラ210により行われる。コントローラ210は、このS204からS208までの各処理を実行することによって、当該イメージデータについてのハッシュ値を検証情報として生成する。
【0091】
なお、このS204からS208までの各処理は、
図1に示した改竄検知処理におけるS101からS105までの各処理とそれぞれ同一である。従って、このときにコントローラ210により生成される検証情報は、前述したS201の処理によってホストPC500により作成される正解検証情報と一致する。
【0092】
S208に続くS209では、S208までの処理の実行により生成された検証情報を、記憶デバイス200において予め定められている検証情報の格納領域に書き込んで保存する処理がコントローラ210により行われ、その後は、この書き込み処理が終了する。
【0093】
次に、改竄検知の対象のイメージデータを組込み機器100の記憶デバイス200における記憶媒体220に書き込む手順の一例の詳細について、具体例を用いて更に説明する。ここでは、ホストPC500において作成されたOS及びプラットフォームアプリケーション群についてのシステムイメージデータを、記憶媒体220における第1パーティション221-1に書き込む場合について説明する。
【0094】
この具体例においては、第1パーティション221-1が改竄検知の対象の記憶領域であり、第1パーティション221-1に書き込むシステムイメージデータが改竄検知の対象のデータである。なお、ホストPC500において作成されたシステムイメージデータは記憶装置510に予め格納されているものとする。
【0095】
初めに、書き込みの処理の前処理として、記憶媒体220の記憶領域に改竄検証情報格納領域222を確保すると共に、残余の記憶領域を所定サイズの複数のパーティション221に分割する処理がコントローラ210のブロック管理部213により行われる。
【0096】
続いて、ホストPC500において、上述したシステムイメージデータが記憶装置510から読み出されて、当該システムイメージデータについての正解検証情報を算出する処理(
図4のS201の処理)が行われる。算出された正解検証情報は記憶装置510に格納される。
【0097】
なお、正解検証情報を算出するためにホストPC500が使用する算出アルゴリズムは、記憶デバイス200のコントローラ210における改竄検証情報計算部215が検証情報の算出に使用する算出アルゴリズムと同一のものを使用する。従って、例えば、改竄検証情報計算部215がSHA-256を用いてハッシュ値を検証情報として算出する場合には、ホストPC500もSHA-256を用いてハッシュ値を正解検証情報として算出する処理を行うようにする。
【0098】
次に、ホストPC500において、記憶装置510に予め格納されている秘密鍵の情報を用いて、算出した正解検証情報に対する電子署名を行う処理が行われる。そして、署名された正解検証情報を、記憶デバイス200の記憶媒体220におけるBootパーティション221-0に書き込む処理(
図4のS202の処理)が、記憶デバイス用ライタ600を介してホストPC500により行われる。なお、Bootパーティション221-0は、この書き込みの処理においてはデータの書き込みを許可するモードに設定される。
【0099】
次に、ホストPC500において、改竄検知の対象であるシステムイメージデータを記憶装置510から読み出して記憶デバイス用ライタ600に送付し、第1パーティション221-1への書き込みを依頼する処理(
図4のS203の処理)が行われる。
【0100】
この依頼に応じて行われる、改竄検知の対象のデータを記憶領域に書き込む手順の一例について、
図5を適宜参照しながら説明する。
【0101】
まず、システムイメージデータの書き込み依頼を受け付けた記憶デバイス用ライタ600は、記憶デバイス200のコントローラ210に対して、第1パーティション221-1のモード設定をRWモードへ遷移させる依頼を行う。コントローラ210は、ホストI/F部211でこの遷移の依頼を受け取ると、モード管理部212が第1パーティション221-1のモード設定をRWモードへ遷移させる。記憶デバイス用ライタ600は、この遷移の依頼を行った後に、ホストPC500から受け取ったシステムイメージデータを第1パーティション221-1に書き込む処理を行う。なお、この遷移の依頼を行うことなくデータの書き込みを行った場合には、データの格納は行われず、処理エラーとなる。
【0102】
システムイメージデータの書き込みが完了すると、記憶デバイス用ライタ600は、コントローラ210に対して、第1パーティション221-1のモード設定をROモードへ遷移させる依頼を行う。コントローラ210では、モード管理部212が、この遷移の依頼をホストI/F部211を介して受け取る(
図5におけるS11の矢印)。
【0103】
モード管理部212は、この遷移の依頼をホストI/F部211から受け取ると、改竄検証情報計算部215に対して、第1パーティション221-1で保存されているデータについての検証情報の算出を依頼する(
図5におけるS12の矢印)。
【0104】
検証情報算出の依頼を受けた改竄検証情報計算部215は、この処理時点で記憶媒体220の第1パーティション221-1で保存されている上述したシステムイメージデータを読み出し、記憶媒体I/F部216を介して受け取る(
図5におけるS13の矢印)。そして、システムイメージデータについての検証情報を算出する処理(
図4のS204からS208までの処理)を行う。改竄検証情報計算部215は、算出した検証情報を、記憶媒体220の改竄検証情報格納領域222における第1パーティション221-1用の領域に書き込む処理(
図4のS209の処理)を、記憶媒体I/F部216を介して行う(
図5におけるS14の矢印)。
【0105】
改竄検証情報計算部215は、検証情報の記憶媒体220への書き込みが完了すると、検証情報の算出を依頼したモード管理部212に対して、処理の完了を通知する(
図5におけるS15の矢印)。
【0106】
この完了の通知を受け取ったモード管理部212は、第1パーティション221-1のモード設定をROモードへ遷移させる処理を行い、その後、モード設定の遷移の完了を、ホストI/F部211に返答する(
図5におけるS16の矢印)。
【0107】
ホストI/F部211は、この返答を受け取ると、第1パーティション221-1のモード設定のROモードへの遷移の完了を記憶デバイス用ライタ600ら返答する(
図5におけるS17の矢印)。
【0108】
記憶デバイス用ライタ600は、この返答を受け取ると、ホストPC500に対して、システムイメージデータの第1パーティション221-1への書き込みの完了が通知される。
【0109】
組込み機器100の記憶デバイス200における記憶媒体220に対する改竄検知の対象のイメージデータの書き込みは、以上のようにして行われる。
【0110】
次に、組込み機器100を通常動作させための起動時に行われる、組込み機器100の記憶デバイス200における記憶媒体220の検知対象のパーティション221で現在保存されている、検知対象のデータに対する改竄の検知の手法について説明する。
【0111】
図6は、改竄検知処理の処理手順の概要の一例を示したフローチャートである。この改竄検知処理は、SoC300が備えているCPU310によって行われる。
【0112】
図6において、まず、S301では、記憶デバイス200の記憶媒体220における改竄検証情報格納領域222で保存されている、改竄検知の対象であるパーティション221についての検証情報を読み出してメモリ400にロードする処理が行われる。
【0113】
次に、S302において、記憶媒体220におけるBootパーティション221-0で保存されている、改竄検知の対象であるパーティション221についての正解検証情報を読み出してメモリ400にロードする処理が行われる。
【0114】
次に、S303において、SoC300のBootROM340に格納されているセキュアAPIを読み出して実行することによって、メモリ400にロードした検証情報をチェックする処理が行われる。この処理では、当該検証情報を、メモリ400にロードした正解検証情報と比較する処理が行われる。
【0115】
次に、S304において、記憶媒体220における改竄検知の対象であるパーティション221で現在保存されているイメージデータの改竄が検知されたか否かを判定する処理が行われる。この判定は、S303の比較処理の結果に基づいて行われる。
【0116】
S303の比較処理において、検証情報が正解検証情報と一致しなかった場合には、S304の判定結果はYESとなり、イメージデータの改竄が検知されたとの判定が下される。この場合には、S305に処理を進め、組込み機器100の起動を抑止する処理が行われる。
【0117】
一方、S303の比較処理において、検証情報が正解検証情報と一致した場合には、S304の判定結果はNOとなり、イメージデータの改竄は検知されなかったとの判定が下される。この場合には、S306に処理を進め、組込み機器100を起動させるための処理が続行される。
【0118】
S305若しくはS306の処理を終えると、改竄検知処理が終了する。
【0119】
次に、組込み機器100を通常動作させための起動時の処理の手順の一例について説明する。この処理手順には、記憶デバイス200の記憶媒体220の検知対象のパーティション221で保存されているデータに対する改竄の検知の手順が含まれている。ここでは、記憶媒体220における第1パーティション221-1で保存されている、OS及びプラットフォームアプリケーション群についてのシステムイメージデータに対する改竄の検知を行う場合について説明する。
【0120】
この具体例においては、第1パーティション221-1で現在保存されているシステムイメージデータについての検証情報が、記憶デバイス200の記憶媒体220における改竄検証情報格納領域222で保存されているものとする。また、ホストPC500において作成して第1パーティション221-1に保存したシステムイメージデータについての正解検証情報が、記憶媒体220におけるBootパーティション221-0に格納されているものとする。なお、この正解検証情報は、前述したようにしてホストPC500によって電子署名がされているものとする。
【0121】
組込み機器100に対して電源が投入されて電力の供給が開始されると、SoC300のCPU310は、BootROM340に格納されているBootプログラムを実行する。すると、CPU310は、Bootプログラムの命令に従い、記憶デバイス200の記憶媒体220におけるBootパーティション221-0に格納されているBootローダを読み出し、SoC300の内部メモリ350にロードして実行する。
【0122】
Bootローダが実行されると、CPU310は、Bootローダの命令に従い、記憶デバイス200のコントローラ210に対して、記憶媒体220の第1パーティション221-1に保存されているデータについての検証情報の読み出しを依頼する。この依頼を受け取ったコントローラ210は、依頼された検証情報の読み出しを行う(
図6のS301の処理)。
【0123】
ここで、コントローラ210による検証情報の読み出しの手順の一例について、
図7を適宜参照しながら説明する。
【0124】
上述した検証情報の読み出しの依頼は、ホストI/F部211が受け取る(
図7におけるS21の矢印)。ホストI/F部211は、受け取った依頼をモード管理部212に転送する(
図7におけるS22の矢印)。
【0125】
第1パーティション221-1に保存されているデータについての検証情報の読み出しの依頼を受け取ったモード管理部212は、第1パーティション221-1に対するデータの読み書きのモードがROモードに設定されていることを確認する。このとき、当該モードが、ROモードではなく、RWモードに設定されていた場合には、モードの設定の異常を示す情報を、ホストI/F部211を介してCPU310に返信する。
【0126】
ROモードの設定が確認された場合には、記憶媒体I/F部216を介して(
図7におけるS23の矢印)、記憶媒体220の改竄検証情報格納領域222にアクセスする(
図7におけるS24の双方向の矢印)。そして、モード管理部212は、改竄検証情報格納領域222から第1パーティション221-1についての検証情報を読み出してメモリ400にロードする(
図7におけるS25の矢印)。
【0127】
その後、モード管理部212は、記憶媒体220から送られてくる検証情報のロードの完了の通知(
図7におけるS24の双方向の矢印)を、記憶媒体I/F部216介して受け取る(
図7におけるS26の矢印)。すると、モード管理部212は、検証情報の読み出しの正常終了を示す情報をホストI/F部211に返す(
図7におけるS27の矢印)。この情報を受け取ったホストI/F部211は、依頼された検証情報の読み出しの完了を、Bootローダを実行中のCPU310に通知する。
【0128】
コントローラ210による検証情報の読み出しは以上のような手順で行われる。
【0129】
検証情報の読み出しの完了の通知を受け取ったCPU310は、Bootローダの命令に従い、記憶媒体220のBootパーティション221-0にアクセスする。そして、CPU310は、第1パーティション221-1についての正解検証情報を読み出してメモリ400にロードする(
図6のS302の処理)。
【0130】
次に、CPU310は、Bootローダの命令に従い、BootROM340に格納されているセキュアAPIを実行する(
図6のS303の処理)。このセキュアAPIの実行によって行われるデータ改竄の検知の手順の一例について、
図8を適宜参照しながら説明する。
【0131】
CPU310によるセキュアAPIの実行(
図8におけるS31の矢印)では、メモリ400にロードした第1パーティション221-1についての検証情報と正解検証情報とが指定される。
【0132】
CPU310は、まず、セキュアAPIの命令に従い、正解検証情報に対して行われている電子署名についての検証処理をセキュアエンジン330に行わせる(
図8におけるS32の矢印)。このとき、セキュアエンジン330には、指定された正解検証情報と、セキュアストレージ320に格納されている公開鍵の情報とが渡される(
図8におけるS33及びS34の矢印)。
【0133】
セキュアエンジン330は、渡された公開鍵の情報を用いて、渡された正解検証情報に対して行われている電子署名についての検証処理を行う。セキュアエンジン330は、検証後の正解検証情報をCPU310に渡す(
図8におけるS35の矢印)。
【0134】
検証後の正解検証情報を受け取ったCPU310は、セキュアAPIの命令に従い、メモリ400にロードした第1パーティション221-1についての検証情報を読み出す(
図8におけるS36の矢印)。そして、CPU310は、読み出した検証情報を、セキュアエンジン330から渡された正解検証情報と比較する(
図6のS304の処理)。
【0135】
この比較の結果、両者が不一致であった場合には、検証情報が異常であること(データの改竄が検知されたこと)を示す情報が検知の結果とされる。一方、この比較の結果、両者が一致した場合には、検証情報は正常であること(データの改竄は検知されなかったこと)を示す情報が検知の結果とされる。この検知の結果はBootローダに返される(
図8におけるS37の矢印)。
【0136】
セキュアAPIの実行によって行われるデータ改竄の検知は以上のようにして行われる。
【0137】
CPU310は、Bootローダの命令に従い、第1パーティション221-1に保存されているOS及びプラットフォームアプリケーション群を起動させるか否かが、セキュアAPIから返された検知の結果に基づいて判定される(
図6のS304の処理)。この判定において、検知の結果が、検証情報が異常であることを示す情報であった場合は、CPU310は、OS及びプラットフォームアプリケーション群の起動を抑止する(
図6のS305の処理)。一方、この判定において、検知の結果が、検証情報が正常であることを示す情報であった場合は、CPU310は、第1パーティション221-1からデータを読み出して実行し、OS及びプラットフォームアプリケーション群を起動する(
図6のS305の処理)。
【0138】
本実施形態では、組込み機器100の起動時における検知対象のデータに対する改竄の検知を以上のようにして行うので、この起動時には検証情報の生成を行わない。従って、組込み機器100を短い時間で起動させることが可能になる。
【0139】
以上のように、開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【0140】
例えば、上述した実施形態では、ハッシュ関数としてSHA-256を用いてハッシュ値の算出を行うことによって検証情報及び正解検証情報の生成が行われる。この代わりに、例えばSHA-512やSHA3-256などといった他のハッシュ関数を用いてハッシュ値の算出を行うことによって検証情報及び正解検証情報を生成するようにしてもよい。
【符号の説明】
【0141】
1 電子装置
2、200 記憶デバイス
10 記憶部
20 生成部
30 検知部
40 検証部
100 組込み機器
210 コントローラ
211 ホストI/F部
212 モード管理部
213 ブロック管理部
214 エラー管理部
215 改竄検証情報計算部
216 記憶媒体I/F部
220 記憶媒体
221 パーティション
221-0 Bootパーティション
221-1 第1パーティション
221-2 第2パーティション
222 改竄検証情報格納領域
300 SoC
310 CPU
320 セキュアストレージ
330 セキュアエンジン
340 BootROM
350 内部メモリ
400 メモリ
500 ホストPC
510 記憶装置
600 記憶デバイス用ライタ