(57)【要約】【課題】本発明は、改竄検証の確実性を維持しつつも、改竄検証処理に要する時間、特にブート処理時に行われる改竄検証処理に要する時間、の短縮化を図ることができる情報処理装置を提供することを目的とする。【解決手段】本発明の情報処理装置は、不揮発メモリ１３と、前記不揮発メモリ１３から読み出したプログラムを形成するデータのうちの一部のデータに基づいて、第１の検証値を算出し、前記プログラムを形成するデータのうちの残りのデータと前記第１の検証値とに基づいて、第２の検証値を算出し、前記第２の検証値と、改竄されていない前記プログラムを形成するデータに基づいて予め算出された第３の検証値と、を比較するＣＰＵ１１と、を備えるものである。【選択図】図１
2008305128.tif 000002
【特許請求の範囲】
【請求項１】
各種プログラムを記憶するプログラム記憶部と、
前記プログラム記憶部から読み出したプログラムを形成するデータのうちの一部のデータに基づいて、第１の検証値を算出し、前記プログラムを形成するデータのうちの残りのデータと前記第１の検証値とに基づいて、第２の検証値を算出する演算手段と、
前記第２の検証値と、前記プログラムを形成するデータに基づいて予め算出された第３の検証値と、を比較する比較手段と、
を備える情報処理装置。
【請求項２】
検証値を算出する算出パターンと、前記算出パターンにより算出された検証値と、を前記プログラムに割り当てた検証対象テーブルを記憶するテーブル記憶部を備え、
前記演算手段は、
前記プログラムに割り当てられた前記算出パターンに基づいて、前記第１の検証値を算出し、
前記プログラムに割り当てられる前記検証値として前記第１の検証値を前記テーブル記憶部に記憶させ、
前記プログラムを形成するデータのうちの残りのデータと、前記プログラムに割り当てられた前記第１の検証値とに基づいて、前記第２の検証値を算出する、
請求項１記載の情報処理装置。
【請求項３】
請求項２記載の情報処理装置であって、
前記演算手段は、第１の時点において前記第１の検証値を算出し、前記第１の時点後の第２の時点において前記第２の検証値を算出する、
情報処理装置。
【請求項４】
請求項３記載の情報処理装置であって、
前記第２の時点は、前記プログラムを起動する時点である、
情報処理装置。
【請求項５】
請求項３または４記載の情報処理装置であって、
前記第１の時点は、前記プログラムの実行を終了する時点である、
情報処理装置。
【請求項６】
プログラムを形成するデータのうちの一部のデータに基づいて、第１の検証値を算出し、
前記プログラムを形成するデータのうちの残りのデータと前記第１の検証値とに基づいて、第２の検証値を算出し、
前記第２の検証値と、前記プログラムを形成するデータに基づいて予め算出された第３の検証値と、を比較する、
改竄検証方法。
【請求項７】
請求項６記載の改竄検証方法であって、
検証値を算出する算出パターンと、前記算出パターンにより算出された検証値と、を前記プログラムに割り当てた検証対象テーブルを参照し、
前記プログラムに割り当てられた前記算出パターンに基づいて、前記第１の検証値を算出し、
前記プログラムに割り当てられる前記検証値として前前記第１の検証値を記憶し、
前記プログラムを形成するデータのうちの残りのデータと、前記プログラムに割り当てられた前記第１の検証値と、に基づいて、第２の検証値を算出する、
改竄検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、セキュアブート（プログラムの改竄の有無を検証する処理）を実施する情報処理装置、および当該情報処理装置による改竄検証方法に関する。
【背景技術】
【０００２】
電源が投入された情報処理装置は、まず、ＣＰＵを起動する。ＣＰＵは、ブートＲＯＭに記憶されたＩＰＬ（Initial Program Loader）プログラムを参照して、不揮発メモリから最初に読み出して起動すべき各種プログラムの先頭アドレスを読み出す。ＣＰＵは、ＩＰＬプログラムを参照して読み出した先頭アドレスを基に、不揮発メモリにおける改竄検証されるべき各種プログラムを特定し、ブートＲＯＭに記憶された改竄検証プログラムを参照して改竄検証処理を実施する。改竄されていないことが検証されれば、それらの各種プログラムを実行することによってＯＳを起動する。
【０００３】
改竄検証処理は、そのプログラムに対して予め用意しておいたハッシュ値やＭＡＣ値と（このハッシュ値やＭＡＣ値は、改竄される前のプログラムを形成する一連のデータを基に算出されている。以降、ハッシュ値やＭＡＣ値、及びそれらの数値に類する値を総称して検証値と称する）、不揮発メモリから読み出したプログラムを形成する一連のデータを基に算出した検証値と、を比較し、その値が一致していれば不揮発メモリから読み出したプログラムに改竄無しと判定し、一致していなければ改竄有りと判定するものである。
【０００４】
改竄検証処理に要する時間を短縮するために、次のような方法が考案されている。特許文献１には、複数のプログラムから構成される一つのディレクトリ単位で検証値を算出し、そのディレクトリに対して予め用意しておいた検証値と比較することによって、従来複数のプログラムの個数分だけ行う必要のあった検証値の比較を一度の検証値の比較で済ませることができる方法が開示されている。また、特許文献２には、プログラムを形成する一連のデータすべてを、検証値を算出するための対象データとするのではなく、プログラムの命令列を分割したページ単位を上記対象データとすることによって、検証値を算出するために要する時間を短縮する方法について開示されている。
【特許文献１】特開２００２−０７４８３２号公報
【特許文献２】特開２００６−０５３７８７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
検証値を算出するために要する時間を短縮するためには、特許文献２に開示されているように、検証値を算出するための対象データのデータサイズを小さくすることが効果的であるが、その反面、対象データ以外のデータが改竄された場合にその改竄を検出することが困難である。このため、一般に、改竄検証処理に要する時間の短縮化と改竄検証の確実性とはトレードオフの関係にあるといえる。
【０００６】
本発明は、上記事情に鑑みてなされたもので、改竄検証の確実性を維持しつつも、改竄検証処理に要する時間、特にブート処理時に行われる改竄検証処理に要する時間、の短縮化を図ることができる情報処理装置及び改竄検証方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の情報処理装置は、各種プログラムを記憶するプログラム記憶部と、前記プログラム記憶部から読み出したプログラムを形成するデータのうちの一部のデータに基づいて、第１の検証値を算出し、前記プログラムを形成するデータのうちの残りのデータと前記第１の検証値とに基づいて、第２の検証値を算出する演算手段と、前記第２の検証値と、改竄されていない前記プログラムを形成するデータに基づいて予め算出された第３の検証値と、を比較する比較手段と、を備えるものである。
【０００８】
また、本発明の情報処理装置は、前記演算手段が、第１の時点において前記第１の検証値を算出し、前記第１の時点後の第２の時点において前記第２の検証値を算出する、ものを含む。
【０００９】
また、本発明の情報処理装置は、前記第２の時点は、前記プログラムを起動する時点である、ものを含む。
【００１０】
また、本発明の情報処理装置は、前記第１の時点は、前記プログラムの実行を終了する時点である、ものを含む。
【００１１】
本発明の改竄検証方法は、プログラムを形成するデータのうちの一部のデータに基づいて、第１の検証値を算出し、前記プログラムを形成するデータのうちの残りのデータと前記第１の検証値とに基づいて、第２の検証値を算出し、前記第２の検証値と、改竄されていない前記プログラムを形成するデータに基づいて予め算出された第３の検証値と、を比較する、ものを含む。
【００１２】
この構成により、前回電源が投入されていた期間中に、改竄検証が行われるべきプログラムを形成するデータの一部を用いて中間値を算出しておき、今回電源が投入された時点で、当該プログラムを形成するデータのうちの、中間値の算出に用いられなかった残りのデータを用いて検証値を算出して、正しい検証値と比較することによって、電源が投入された時点で検証値を算出するために要する時間を、事前に中間値を算出しておいた分、短縮することができる。
【００１３】
また、本発明の情報処理装置は、検証値を算出する算出パターンと、前記算出パターンにより算出された検証値と、を前記プログラムに割り当てた検証対象テーブルを記憶するテーブル記憶部を備え、前記演算手段が、前記プログラムに割り当てられた前記算出パターンに基づいて、前記第１の検証値を算出し、前記プログラムに割り当てられる前記検証値として前記第１の検証値を前記テーブル記憶部に記憶させ、前記プログラムを形成するデータのうちの残りのデータと、前記プログラムに割り当てられた前記第１の検証値とに基づいて、前記第２の検証値を算出する、ものを含む。
【００１４】
また、本発明の改竄検証方法は、検証値を算出する算出パターンと、前記算出パターンにより算出された検証値と、を前記プログラムに割り当てた検証対象テーブルを参照し、前記プログラムに割り当てられた前記算出パターンに基づいて、前記第１の検証値を算出し、前記プログラムに割り当てられる前記検証値として前前記第１の検証値を記憶し、前記プログラムを形成するデータのうちの残りのデータと、前記プログラムに割り当てられた前記第１の検証値と、に基づいて、第２の検証値を算出する、ものを含む。
【００１５】
この構成により、異なる算出パターンによって中間値を算出することによって、当該プログラムのデータのどの箇所が中間値を算出するために用いられたかを特定することが困難であるために、第三者による改竄の意図を挫き、仮に、当該箇所を特定できないまま改竄したとしても残りのデータを用いて検証値を算出すれば、当該プログラムが改竄されたことを検出することができる。
【発明の効果】
【００１６】
本発明の情報処理装置及び改竄検証方法によれば、改竄検証の確実性を維持しつつも、改竄検証処理に要する時間、特にブート処理時に行われる改竄検証処理に要する時間、の短縮化を図ることができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施の形態の情報処理装置について、詳細に説明する。まず、本発明の実施の形態の情報処理装置におけるハードウェアの構成を、図１に示す本発明の実施の形態の情報処理装置におけるハードウェアの構成図を参照して説明する。本発明の実施の形態の情報処理装置は、ＣＰＵ１１、ブートＲＯＭ１２、不揮発メモリ１３、保護メモリ１４を含んで構成される。ブートＲＯＭ１２は、読み出し専用記憶装置であり、情報処理装置に電源が投入されたときに最初に実行されるべき事前演算プログラム１２ａ（事前演算対象判定機能、事前演算機能をＣＰＵ１１に実行させる。各機能については後述する。）や、プログラムの改竄の有無を検証するための改竄検証プログラム１２ｂ（検証対象判定機能、改竄検証機能、プログラム起動機能をＣＰＵ１１に実行させる。各機能については後述する）を記憶している。不揮発メモリ１３は、本発明の実施の形態の情報処理装置が実施する処理を管理するプログラム（図１では、ＰＧ１、ＰＧ２、ＰＧ３。アプリケーションと称されることもある）を記憶している。保護メモリ１４は、ハードウェア的に保護されたメモリ、またはデータを暗号化して記憶するメモリであり、後述する検証対象テーブル１４ａを記憶している。ＣＰＵ１１は、ブートＲＯＭ１２に記憶されたプログラムを読み出し、また、保護メモリ１４から読み出した検証対象テーブル１４ａを参照して不揮発メモリ１３に記憶されたプログラムを読み出し、それらの読み出したプログラムを実行する。以下、本発明の実施の形態の情報処理装置による処理について説明する。
【００１８】
まず、本発明の実施の形態の情報処理装置は、前回電源が投入されていた期間中に、ブートＲＯＭ１１に記憶された事前演算プログラム１２ａを参照して、不揮発メモリ１３に記憶されたプログラムＰＧ１、ＰＧ２、ＰＧ３を形成するデータのうちの一部のデータを用いて、検証値を算出する。プログラムＰＧ１、ＰＧ２、ＰＧ３を形成するデータのうちの一部のデータを用いて検証値の算出する処理のことを、事前演算処理と称する。ＣＰＵ１１は、事前演算処理を実施するにあたって、保護メモリ１４に記憶された検証対象テーブル１４ａとブートＲＯＭ１２に記憶された事前演算プログラム１２ａとを参照して、次に説明する事前演算対象判定処理、及び事前演算処理を実施する。ここでは、プログラムＰＧ１に対して事前演算対象判定処理、及び事前演算処理を実施する場合について説明するが、プログラムＰＧ２、ＰＧ３に対しても同様の処理を実施する。
【００１９】
［１．事前演算対象判定処理］
ＣＰＵ１１は、不揮発メモリ１３に記憶されたプログラム（ＰＧ１、ＰＧ２、ＰＧ３）毎に「事前フラグ」、「検証値」、「アドレス」、「中間値」、「オフセット」、「データサイズ」などの情報が記憶された検証対象テーブル１４ａを保護メモリ１４から読み出す。
【００２０】
ＣＰＵ１１は、まず、検証対象テーブル１４ａのなかの事前フラグの数値（０〜３）を設定する。ある関数（例えば、ハッシュ関数）にデータ（ビット列）を入力し、その関数から出力される値が検証値であるが、この関数に入力するビット列の順序を異なるものにすると、その関数から出力される検証値は異なるものになる。例えば、ビット列の先頭から最後尾へ向かう順に、そのビット列を逐次関数に入力した場合と、ビット列の途中から最後尾へ向かった後さらに先頭からその途中へ向かう順に、そのビット列を逐次関数に入力した場合と、では、検証値は異なるものになる。事前フラグは、関数に入力するビット列の順序を表す算出パターンを指定する情報である。事前フラグの数値「０」〜「３」はそれぞれ、異なる算出パターンを指定する情報である。本発明の実施の形態では、事前フラグ「０」及び「１」は、ビット列の先頭から順にそのビット列を入力する算出パターンであり、事前フラグ「２」及び「３」は、ビット列の途中から順にそのビット列を入力する算出パターンであるものとする。
【００２１】
また、アドレスｎ（ｎ＝１、２、３）は、プログラムＰＧ１を形成するデータのうちの一部のデータを指定する、不揮発メモリ１３上のアドレスである。アドレス１、２、３はそれぞれ、上記事前フラグの数値「ｎ」に対応しており、アドレス１は、プログラムＰＧ１を形成するデータの先頭のアドレスを、アドレス２は、プログラムＰＧ１を形成するデータの任意のアドレスを、アドレス３は、プログラムＰＧ１を形成するデータの任意のアドレス（ただし、アドレス２とは異なる）を、指定している。
【００２２】
また、データサイズは、不揮発メモリ１３に記憶されたプログラムのデータサイズである。ＣＰＵ１１は、プログラムＰＧ１における事前フラグの数値「ｎ」を任意に設定し、その数値「ｎ」に対応するアドレスｎを読み出しておき、さらに、プログラムＰＧ１のデータサイズを読み出しておく。
【００２３】
［２．事前演算処理］
ＣＰＵ１１は、［１．事前演算対象判定処理］にて読み出したアドレスｎを起点とする、所定のデータサイズ分のデータを不揮発メモリ１３から読み出す。なお、ＣＰＵ１１は、所定のデータサイズ分のデータを不揮発メモリ１３から読み出す前にプログラムＰＧ１を形成するデータの最後尾に到達した場合、［１．事前演算対象判定処理］にて読み出しておいたＰＧ１のデータサイズを基に、プログラムＰＧ１を形成するデータの先頭に戻り、残りのデータサイズ分のデータを読み出す。
【００２４】
所定のデータサイズ分のデータを読み出したＣＰＵ１１は、事前フラグの数値「ｎ」から特定される算出パターンに従って関数に逐次ビット列を入力し、検証値を算出する。そして、ＣＰＵ１１は、設定した事前フラグの数値「ｎ」を検証対象テーブル１４ａの事前フラグに記憶し、算出した検証値を検証テーブル１４ａの中間値として記憶し、不揮発メモリ１３から読み出したデータの終点のアドレスをオフセットに記憶する。
【００２５】
以上のように、本発明の実施の形態の情報処理装置は、前回電源が投入されていた期間中に、ブートＲＯＭ１１に記憶された事前演算プログラム１２ａを参照して、不揮発メモリ１３に記憶されたプログラムＰＧ１、ＰＧ２、ＰＧ３を形成するデータのうちの一部のデータを用いて検証値を算出しておく。本発明の実施の形態の情報処理装置は、当該情報処理装置への電力を遮断する一連の処理の一環、または当該情報処理装置が省電力モードに遷移する際の処理の一環、または、定期的に、事前演算処理を繰り返し実施することが望ましい。
【００２６】
本発明の実施の形態の情報処理装置は、一旦電源が遮断された後、再度電源が投入されると、ＣＰＵ１１を起動する。ＣＰＵ１１は、ブートＲＯＭ１２に記憶されたＩＰＬ（Initial Program Loader）プログラムを参照して、不揮発メモリ１３から最初に読み出して起動すべき改竄検証プログラム１２ｂの先頭アドレスを読み出す。ＣＰＵ１１は、ＩＰＬプログラムを参照して読み出した先頭アドレスを基に、不揮発メモリ１３における改竄検証されるべきプログラムＰＧ１、ＰＧ２、ＰＧ３を特定し、ブートＲＯＭ１１に記憶された改竄検証プログラム１２ｂを参照して改竄検証処理を実施する。
【００２７】
ＣＰＵ１１は、改竄検証処理を実施するにあたって、保護メモリ１４に記憶された検証対象テーブル１４ａとブートＲＯＭ１２に記憶された改竄検証プログラム１２ｂを参照して、次に説明する検証対象判定処理、改竄検証処理、及びプログラム起動処理を実施する。
【００２８】
［３．検証対象判定処理］
ＣＰＵ１１は、不揮発メモリ１３に記憶された検証対象テーブル１４ａを保護メモリ１４から読み出し、その検証対象テーブル１４ａの情報を参照して不揮発メモリ１３に記憶された各プログラム（ＰＧ１、ＰＧ２、ＰＧ３）を形成する一連のデータのうちの、検証値を算出すべき残りのデータを特定する。残りのデータを特定する検証対象判定処理の詳細を、プログラムＰＧ１に対して改竄検証処理を実施する場合を例に挙げて説明するが、プログラムＰＧ２、ＰＧ３に対しても同様の処理を実施する。
【００２９】
ＣＰＵ１１は、検証対象テーブル１４ａのなかの、プログラムＰＧ１に割り当てられた事前フラグの数値（０〜３）を参照する。ＣＰＵ１１は、その数値が「０」なら検証値１とアドレス１を、その数値が「ｎ」（ｎ＝１、２、３）なら検証値ｎとアドレスｎと中間値ｎとオフセットを保護メモリ１４から読み出す。検証値ｎ（ｎ＝１、２、３）は、改竄されていないプログラムＰＧ１を形成するビット列のすべてを、事前フラグの数値ｎで指定される算出パターンに従って関数に入力した場合に出力される値である。
【００３０】
［４．改竄検証処理］
ＣＰＵ１１は、読み出した事前フラグの数値が「０」であれば、事前フラグの数値が「０」の場合、ＣＰＵ１１起動時に、プログラムＰＧ１を形成するすべてのデータを対象とした、検証値の算出を行う。すなわち、ＣＰＵ１１は、アドレス１により指定されるアドレス（すなわち、プログラムＰＧ１の先頭のアドレス）を起点として、プログラムＰＧ１を形成するデータのすべてを逐次関数に入力する。ＣＰＵ１１は、関数から出力された値と検証値１とを比較し、その値が一致すれば、プログラムＰＧ１に改竄無しと判定し、一致していなければプログラムＰＧ２に改竄有りと判定する。
【００３１】
一方、ＣＰＵ１１は、読み出した事前フラグの数値が「ｎ」（ｎ＝１、２、３）であれば、ＣＰＵ１１起動時に、プログラムＰＧ１を形成するデータのうちの、事前演算処理の対象とならなかった残りのデータを用いて、検証値の算出を行う。すなわち、ＣＰＵ１１は、中間値と、プログラムＰＧ１を形成するデータのうちの、オフセットにより指定されるアドレスの次のアドレスからアドレスｎにより指定されるアドレスの前のアドレスまでのデータと、を逐次関数に入力する。ＣＰＵ１１は、関数から出力された値と検証値ｎとを比較し、その値が一致すれば、プログラムＰＧ１に改竄無しと判定し、一致していなければプログラムＰＧ１に改竄有りと判定する。
【００３２】
［５．プログラム起動処理］
ＣＰＵ１１は、不揮発メモリ１３に記憶されたプログラム（ＰＧ１、ＰＧ２、ＰＧ３）のうち、［４．改竄検証処理］にて改竄無しと判定されたプログラムを、各プログラムが格納されている先頭アドレスを示す「アドレス１」を参照して不揮発メモリ１３から読み出し、実行する。
【００３３】
以上、本発明の実施の形態の情報処理装置によれば、前回電源が投入されていた期間中に、改竄検証が行われるべきプログラムを形成するデータの一部を用いて中間値を算出しておき、今回電源が投入された時点で、当該プログラムを形成するデータのうちの、中間値の算出に用いられなかった残りのデータを用いて検証値を算出して、正しい検証値と比較することによって、電源が投入された時点で検証値を算出するために要する時間を、事前に中間値を算出しておいた分、短縮することができる。装置利用者は、装置への電源投入時に改竄検証を行う結果、ＯＳを起動させるために要する時間がかかることは気になるものの、他方、電源が投入されている期間中における処理時間の増加、特に、電源を遮断するために要する処理時間の増加、は気になり難い。このため、本発明の情報処理装置によって、装置利用者は、改竄検証に要する時間が減少したように感じることができる。
【００３４】
また、本発明の実施の形態の情報処理装置によれば、プログラムを形成するデータの一部を用いて中間値を算出する際に、異なる算出パターンによって中間値を算出することによって、当該プログラムのデータのどの箇所が中間値を算出するために用いられたかを特定することが困難であるために、第三者による改竄の意図を挫き、仮に、当該箇所を特定できないまま改竄したとしても残りのデータを用いて検証値を算出すれば、当該プログラムが改竄されたことを検出することができる。さらに、上記中間値の算出を、特権モード（高い堅牢性を実現するためのＣＰＵのプロセッサモードの一つ。）にあるＣＰＵ１１が行うことによって、第３者による中間値の読み取りすら、困難なものにすることができる。
【産業上の利用可能性】
【００３５】
本発明の情報処理装置及び改竄検証方法によれば、改竄検証の確実性を維持しつつも、改竄検証処理に要する時間、特にブート処理時に行われる改竄検証処理に要する時間、の短縮化を図ることができるという効果を奏し、セキュアブートを実施する情報処理装置の分野において有用である。
【図面の簡単な説明】
【００３６】
【図１】本発明の実施の形態の情報処理装置におけるハードウェアの構成図
【符号の説明】
【００３７】
１１  ＣＰＵ
１２  ブートＲＯＭ
１３  不揮発メモリ
１４  保護メモリ
【図１】
2008305128.tif 000003