以下、実施形態の情報処理装置およびプログラムについて説明する。実施形態の情報処理装置およびプログラムは、ファームウェアの分割検証を行うものであり、特に、ローエンド情報機器であっても、機器単体で適切な分割検証を実現可能とするものである。
ファームウェアの分割検証に関わる従来技術としては、例えば、ネットワークブート環境においてブート用プログラム(ブートイメージ)の分割検証を実現する技術がある。この従来技術では、予めブート用プログラム(ブートイメージ)を断片化して、断片化した各ブートイメージに電子署名と優先度を付与しておく。そして、その優先度に従って集中管理サーバから各計算機リソースに断片化したブートイメージをロードして署名検証することで、ブートイメージの分割検証を可能とする。しかし、この従来技術は、集中管理サーバから計算機リソースに断片化したブートイメージをロードする構成であり、例えばストレージドライブや家電などのローエンド情報機器では集中管理サーバの実現が困難であることから、この従来技術を適用してもローエンド情報機器単体での分割検証を実現することができない。また、この従来技術では、断片化されたブートイメージのロード順序は固定となるため、処理内容によって計算機リソースが柔軟にロード順序の変更を行うことが容易ではない。
また、仮想化環境においてページング技術を利用した分割検証を実現する技術がある。この従来技術は、ブートイメージが展開されているメモリをページング技術によってページ単位に分割し、データの実行時に強制的にページフォルトを発生させることで、ブートイメージの分割検証を可能とする。しかし、この従来技術は、仮想化環境とページング技術を前提としていることから、ページングの実現に必要なMMU(Memory Management Unit)を持たないローエンド情報機器では、この技術をそのまま適用することはできない。MMUはページング方式によるメモリ保護機構であり、ページ単位でのメモリ保護と仮想メモリ機構を提供する。
一方、ローエンド情報機器ではメモリ保護機構としてMPU(Memory Protection Unit)を持つ。MPUは、ページング方式のMMUとは根本的に異なり、セグメント方式によるメモリ保護機構である。実施形態の情報処理装置およびプログラムは、例えば、このMPUの技術を利用して任意のタイミングで未検証領域を検出できるようにすることで、ローエンド情報機器単体での適切な分割検証を実現可能とする。また、実施形態の情報処理装置およびプログラムによれば、セグメントの上限数に依存せず、検証順序も柔軟に変更可能となる。
以下では、実施形態の情報処理装置およびプログラムの具体的な適用例について、図面を参照しながら詳しく説明する。なお、以下で示す各実施形態では、SSD(Solid State Drive)などのストレージドライブとして構成された情報処理装置への適用例を想定するが、適用可能な情報処理装置はこれに限らない。実施形態の情報処理装置およびプログラムは、例えば家電などの様々なローエンド情報機器に対して広く適用できる。
[第1実施形態]
まず、第1実施形態について説明する。以下の説明において「データ」との表記は、プログラムが参照するデータのほか、プログラム自体を構成するデータも含むものとする。本実施形態に係る情報処理装置は、データの利用時に任意サイズのブロック単位で改ざん検証を行うことで、意図しないデータの利用を防止する機構を持つ。
図1は、本実施形態に係る情報処理装置100Aの概略構成を例示するブロック図である。情報処理装置100Aは、図1に示すように、プロセッサコア101と、メモリ102と、鍵管理ユニット110とを備える。プロセッサコア101には、アクセス権管理装置120とメモリアクセス装置130が設けられている。メモリ102には、ファームウェア(以下、FWと表記する)が格納されている。FWは、通常処理プログラム、異常処理プログラム、FW管理プログラム、セキュアプログラムを含む。図1に示す情報処理装置100Aの各種構成要素は、ハードウェア、ソフトウェア、または、ハードウェアとソフトウェアとの組み合わせで構成される。
情報処理装置100Aは、インターフェース103を介してホスト200に接続され、ホスト200との間で通信を行う。ここで、インターフェース103には、例えば、パラレルATA、シリアルATA、SCSI(Small Computer System Interface)、SAS(Serial Attached SCSI)などのストレージドライブ向けインターフェースを用いることができる。また、インターフェース103として、Ethernet(登録商標)やUSB(Universal Serial Bus)など、他のインターフェースを用いてもよい。また、ホスト200とは、情報処理装置100Aを操作する機器であり、例えば、パーソナルコンピュータ、サーバ、テレビ、スマートフォンなど、情報処理装置100Aを利用する各種の機器を想定する。また、ホスト200は、RAID(Redundant Arrays of Inexpensive Disks)コントローラなどの情報処理装置100Aを束ねて運用、管理を行う装置やその他の装置であってもよい。
情報処理装置100Aのプロセッサコア101、メモリ102、鍵管理ユニット110、インターフェース103は、それぞれ外部バス104に接続されている。
図2は、本実施形態に係る情報処理装置100Aの機能的な構成例を示すブロック図である。情報処理装置100Aは、図2に示すように、メモリアクセス装置130と、アクセス権管理装置120と、鍵管理ユニット110とに加え、通常処理部140と、異常処理部150と、FW管理部160と、セキュア処理部170とを機能的な構成要素として備える。
メモリアクセス装置130は、メモリ102へのアクセスを行うメモリアクセス部131を備える。
アクセス権管理装置120は、メモリ102のアクセス権管理を行うアクセス権管理部121と、アクセス権に違反するアクセスが発生した場合にシグナルを生成するシグナル生成部122とを備える。また、アクセス権管理装置120は、メモリ102に設定された領域ごとのアクセス権に関する情報であるアクセス権情報123を保持する。なお、アクセス権の設定については、図7を用いて詳細を後述する。
鍵管理ユニット110は、鍵情報を保存する鍵保存部111を備える。
通常処理部140は、FWの通常の処理を行う機能モジュールである。
異常処理部150は、FWが異常終了した場合に実行される機能モジュールである。
FW管理部160は、FWの管理を行う機能モジュールであり、シグナルを解析するシグナル解析部161と、プログラムの切り替えを行うプログラム切替部162とを備える。
セキュア処理部170は、セキュリティ処理を行う機能モジュールであり、セキュリティ処理の管理などを行うセキュリティ処理管理部171と、メモリ102上のデータに対して改ざん検証を行う改ざん検証部172と、メモリ102のメモリ空間に対するアクセス権の更新を行うアクセス権更新部173とを備える。また、セキュア処理部170は、セキュリティ処理に必要な情報であるセキュリティ処理情報174を保持する。
ここで、本実施形態では、通常処理部140、異常処理部150、FW管理部160、セキュア処理部170が、それぞれFWに含まれるプログラムにより実現される例を用いて説明する。すなわち、通常処理部140を通常処理プログラム、異常処理部150を異常処理プログラム、FW管理部160をFW管理プログラム、セキュア処理部170をセキュアプログラムとする1つのFWとして実現した例を用いて説明を行う。ただし、これらの各構成要素はFWから独立したハードウェアとして実現されてもよい。また、FWを構成するプログラムは、それぞれ個別の実行ファイルとして実現してもよく、複数のプログラムを含む実行ファイルの一部として実現してもよい。
以下、上述の各部の詳細な機能について説明する。
メモリアクセス部131は、メモリ102に対してアクセス(Read、Write、命令実行)を行う。ここでメモリ102とは、MaskROM(Mask Read Only Memory)、PROM(Programmable Read Only Memory)、EPROM(Erasable Programmable Read Only Memory)、EEPROM(Electrically Erasable Programmable Read Only Memory)、NAND型フラッシュメモリ、NOR型フラッシュメモリ、MRAM(Magnetoresistive Random Access Memory:磁気抵抗メモリ)、PRAM(Phase change Random Access Memory:相変化メモリ)、ReRAM(Resistive Random Access Memory:抵抗変化型メモリ)、FeRAM(Ferroelectric Random Access Memory:強誘電体メモリ)、SRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)を含み、またその他の半導体メモリでもよい。
アクセス権情報123は、任意サイズのメモリ空間に対するアクセス権を示す情報である。アクセス権が設定されたメモリ空間は「領域」と呼ばれる。つまり、メモリ102のメモリ空間に対する領域設定とアクセス権の設定は同等の意味を持つ。アクセス権情報123は、領域単位で保存される。
図3は、アクセス権情報123の一例を示す図である。アクセス権情報123は、例えば図3に示すように、領域を識別する領域番号、領域の開始アドレス、領域のサイズ、領域に対して設定されたアクセス権の種類を表すフラグ(Read権の有無、Write権の有無、実行禁止の有無など)を含む。アクセス権情報123は、この他に領域の有効フラグやモード権(特権モード/ユーザモード)などの情報を含んでいてもよい。また、図3に例示するアクセス権情報123は、領域の範囲を開始アドレスとサイズにより表しているが、サイズの代わりとして領域の終了アドレスを用い、開始アドレスと終了アドレスにより領域の範囲を表してもよい。
アクセス権管理部121は、アクセス権情報123の管理とメモリアクセス部131のメモリアクセス違反の検出を行う。アクセス権管理部121が行うアクセス権情報123の管理とは、アクセス権情報123に対して、参照、登録、追加、削除などを行うことである。アクセス権管理部121は、その他の操作、例えばアクセス権情報123へのアクセス管理なども行ってもよい。アクセス権管理部121は、メモリアクセス部131のメモリアクセスを監視し、アクセス権情報123によって示されるアクセス権に違反するアクセスが発生した場合に、シグナル生成部122に対してシグナル生成を依頼する。
シグナル生成部122は、アクセス権管理部121からのシグナル生成依頼を受けてシグナルを生成する。ここではシグナルを割り込み(または例外、fault)として説明を行うが、他の方法でもよい。
シグナル解析部161は、シグナル生成部122が生成したシグナルを受け取り、その原因を解析する。割り込みの場合、同一の割り込みでも原因が異なるものが存在するため、プロセッサコア101に搭載されている割り込み原因解析レジスタなどを用いて割り込み原因を解析してもよい。同一の割り込みでも原因が異なるものとは、例えばアライメントフォルトとパーミッションフォルトであり、双方ともプロセッサコア101はメモリフォルトとして割り込みを受け取るが、アライメントフォルトの原因はメモリアライメント違反であり、パーミッションフォルトの原因はアクセス権違反であることから、同一の割り込みでも割り込み原因は異なる。シグナル解析部161によるシグナル解析の結果は、プログラム切替部162に通知される。
プログラム切替部162は、通知された内容を受けてプロセッサコア101で実行するプログラムの切り替えを行う。プログラム切替部162は、シグナル解析部161からシグナル解析の結果が通知された場合は、シグナル解析の結果に応じて、プロセッサコア101で実行するプログラムを切り替える。一方、セキュアプログラムの実行中にセキュリティ処理管理部171から遷移先を通知された場合は、プログラム切替部162は、プロセッサコア101で実行するプログラムを、セキュアプログラムから、通知された遷移先のプログラムに切り替える。
セキュリティ処理情報174は、セキュア処理部170によるセキュリティ処理に必要な情報であり、特に、検証対象領域に関する各種情報を含む。検証対象領域は、分割検証の対象として予め定めたメモリ空間であり、アクセス権が設定されたメモリ空間(領域)だけでなく、アクセス権が設定されていないメモリ空間も含む。改ざん検証部172による改ざん検証が行われた検証対象領域を検証済み領域と呼び、改ざん検証部172による改ざん検証が行われていない検証対象領域を未検証領域と呼ぶ。
図4は、セキュリティ処理情報174の一例を示す図である。セキュリティ処理情報174は、例えば図4に示すように、検証対象領域の開始アドレス、検証対象領域のサイズ、改ざん検証に用いる検証用データ、改ざん検証に成功した場合に検証対象領域に対して付与するアクセス権、検証対象領域が検証済み領域であるか未検証領域であるかを示す検証状態を含む。
本実施形態では、便宜上、FWの通常処理プログラムがブロックA,B,Cの3つのFWブロックを含み、これら3つのFWブロックに対応するメモリ空間がそれぞれ検証対象領域として定められているものとして説明する。この場合、セキュリティ処理情報174は、図4に例示するように、それぞれの検証対象領域に対応するFWブロックを識別するブロック番号や、検証対象領域に対して付与するアクセス権で示されるアクセス権を設定したときの当該領域を識別する領域番号を含んでもよい。また、図4に例示するセキュリティ処理情報174は、検証対象領域の範囲を開始アドレスとサイズにより表しているが、サイズの代わりとして検証対象領域の終了アドレスを用い、開始アドレスと終了アドレスにより検証対象領域の範囲を表してもよい。
検証用データとしては、例えば、データの改ざん対策であるハッシュやメッセージ認証コード(MAC:Message Authentication Code)などのような検証技術で生成されるハッシュ値またはMAC値を用いてもよく、電子署名、チェックサム、CRC(Cyclic Redundancy Check)、特定アドレスのデータ比較など、データ破損の有無を確認する方法やその他の方法を用いてもよい。代表的なものとして、ハッシュではMD5(Message Digest Algorithm5)、SHA(Secure Hash Algorithm)などがあり、MACではHMAC(Hash-based MAC)やCMAC(Cipher-based MAC)などがある。この他にも電子署名ではRSA署名など多数のアルゴリズムがあり、本実施形態ではいずれのアルゴリズムを用いてもよい。
なお、改ざん検証に成功した検証対象領域に設定するアクセス権は、セキュリティ処理情報174の付与するアクセス権により示される権限のうち、アクセス権違反を発生させたアクセスと同一のものを設定してもよい。例えば、未検証領域に対してReadアクセス時に改ざん検証を行った場合、セキュリティ処理情報174の付与するアクセス権がRead権とWrite権とを含んでいたとしても、Read権のみを付与するようにしてもよい。この場合、この検証対象領域に対してWriteアクセスが発生した場合にもう一度シグナルが発生するが、このシグナルに応じて改ざん検証を再度行ってもよく、一度検証済みであるため改ざん検証をスキップしてもよい。このようなアクセス権付与を行うことで、本当にWriteアクセスが必要な領域にのみWrite権を付与することができることから、領域に付与するアクセス権を最小化することができ、セキュリティが向上する。
セキュリティ処理管理部171は、アクセス権違反が発生したメモリ空間に対するセキュリティ処理の管理、セキュリティ処理情報174の管理、起動処理を行う。セキュリティ処理管理部171は、セキュリティ処理情報174とアクセス権違反が発生したアドレスと違反情報を照合し、アクセス権違反が検証要求であると判断した場合に、改ざん検証部172に対して検証を依頼する。また、セキュリティ処理管理部171は、改ざん検証部172から検証成功の通知があった場合に、検証に成功したメモリ空間に対するアクセス権の更新をアクセス権更新部173に依頼し、このメモリ空間が検証済みであることをセキュリティ処理情報174に記録する。
ここで、セキュリティ処理管理部171が検証要求を判断するために使用する違反情報とは、アクセス権違反が発生した際に取得可能な情報であり、例えば、アクセス権違反は命令実行とデータアクセスのどちらで発生したのかという情報を用いてもよく、アクセス権違反を発生させたアクセスの情報(Readアクセス実行時にアクセス権違反を発生させたなど)を用いてもよい。さらに、セキュリティ処理管理部171は、後述する起動時の処理を行う。
改ざん検証部172は、セキュリティ処理管理部171から指定されたメモリ空間に対する改ざん検証を行い、改ざんの有無を検出する。改ざん検証部172は、セキュリティ処理情報174に含まれる検証用データをセキュリティ処理管理部171から受け取り、鍵保存部111に保存された鍵情報を鍵管理ユニット110から受け取って、所定のアルゴリズムに従って改ざん検証を行い、結果をセキュリティ処理管理部171に通知する。ここで、改ざん検証部172は、メモリ102のアクセス権に関係なくメモリ102へのアクセスが可能であるとする。これは、例えば、改ざん検証部172からのアクセス時はアクセス権管理装置120の一部または全部の機能を無効化することで実現してもよく、また、改ざん検証部172のメモリアクセスはアクセス権管理装置120が関与するメモリアクセスとは異なる別の手段、例えば専用メモリバスなどを用いることで実現してもよい。
アクセス権更新部173は、セキュリティ処理管理部171から指定されたメモリ空間に対するアクセス権の更新を、アクセス権管理部121に依頼する。この依頼を受けて、アクセス権管理部121がアクセス権情報123の登録、追加、削除などを行うことで、指定されたメモリ空間に対するアクセス権が更新される。
通常処理部140は、FWの通常処理プログラムにより実現される。通常処理プログラムは、1つ以上のFWブロックから構成されるプログラムであり、メモリアクセス部131を経由してメモリ102の読み書き(Read、Write)とメモリ102上のプログラムの実行を行う。FWブロックは通常処理プログラムを所定の方法により分割したものとし、個々のFWブロックは同一サイズである必要はない。本実施形態では、上述のように、通常処理プログラムがブロックA,B,Cの3つのFWブロックから構成され、これらのFWブロックに対応するメモリ空間が検証対象領域に定められているものとする。
異常処理部150は、FWの異常処理プログラムにより実現される。異常処理プログラムは、FWの実行中に異常状態に陥った場合に実行されるプログラムである。なお、異常処理プログラムは、通常処理プログラムに含まれるFWブロックとして実現してもよく、FW管理プログラムの一部、あるいはセキュアプログラムの一部として実現してもよい。
図5は、本実施形態に係る情報処理装置100Aのハードウェア構成例を示すブロック図である。情報処理装置100Aは、例えば図5に示すように、プロセッサコア(CPU0)101と、鍵管理ユニット(KSU)110と、ROM(Read Only Memory)102aと、RAM(Random Access Memory)102bと、外部バス104とを備える。ROM102aおよびRAM102bは、図1および図2に示したメモリ102に相当する。プロセッサコア(CPU0)101、ROM102a、RAM102bは、外部バス104を介して、データ、信号、命令を互いに送受信可能とする。鍵管理ユニット(KSU)110は、アクセスが許可されたデバイスとのみデータ、信号、命令を互いに送受信可能とする。
プロセッサコア(CPU0)101は、命令を実行する命令実行ユニット(EXU)101aと、メモリ102を保護するメモリ保護ユニット(MPU)101bと、メモリ102へのアクセスを行うメモリコントローラ101cと、内部バス101dとを備える。命令実行ユニット(EXU)101a、メモリ保護ユニット(MPU)101b、メモリコントローラ101cは、内部バス101dを介して、データ、信号、命令を互いに送受信可能とする。本実施形態では、メモリコントローラ101cを図1および図2に示したメモリアクセス装置130として用い、メモリ保護ユニット(MPU)101bを図1および図2に示したアクセス権管理装置120として用いるものとする。
プロセッサコア(CPU0)101は、メモリコントローラ101cを用いてデータアクセスを行う。このとき、メモリ保護ユニット(MPU)101bは、命令実行ユニット(EXU)101aがアクセスするデータのアクセス権を確認し、予め設定されたアクセス権に違反するアクセスの場合、命令実行ユニット(EXU)101aに対して割り込みを生成する。アクセス権に違反しない場合は、メモリコントローラ101cがデータアクセスを行う。
鍵管理ユニット(KSU)110は、セキュリティ処理に使用される鍵情報を記憶する。鍵管理ユニット(KSU)110にはアクセス制限を設けることができ、特定のデバイスからのみアクセス可能とすることもできる。例えば、外部バス104上に別のプロセッサコア(CPUx)が存在する場合、鍵管理ユニット(KSU)110はプロセッサコア(CPU0)101からはアクセス可能だが、別のプロセッサコア(CPUx)からはアクセス不可能とすることもできる。本実施形態では、鍵管理ユニット(KSU)110にアクセスできるのはプロセッサコア(CPU0)101のみとする。また、ハードウェアを用いて暗号化、改ざん検証を行う場合、鍵管理ユニット(KSU)110は暗号化ハードウェア、改ざん検証ハードウェアを含んでもよい。さらに、鍵管理ユニット(KSU)110はプロセッサコア(CPU0)101内部に実現されていてもよい。その場合は、命令実行ユニット(EXU)101a、メモリ保護ユニット(MPU)101b、メモリコントローラ101c、鍵管理ユニット(KSU)110は、内部バス101dを介して、データ、信号、命令を互いに送受信可能とする。
次に、本実施形態で想定するメモリマップについて説明する。図6は、本実施形態におけるメモリマップの一例を示す図である。本実施形態では、ROM102aおよびRAM102bは全て同一メモリ空間にマップされており、プロセッサコア101からのバイトアクセスが可能である例を用いて説明を行う。また、本実施形態では、全てのデータはROM102aに格納されているものとして説明を行うが、RAM102bに格納されていてもよく、またROM102aとRAM102bに分散して格納されていてもよい。ここで、ROM102aとは、MaskROM、PROM、EPROM、EEPROMだけでなく、NAND型フラッシュメモリ、NOR型フラッシュメモリも含み、その他の不揮発性メモリを用いてもよい。一方、RAM102bとは、SRAM、DRAMを含み、その他の揮発性メモリを用いてもよい。さらに、MRAM、PRAM、ReRAM、FeRAMは不揮発性RAMであり、本実施形態ではRAM102bに含めて説明を行うが、ROM102aとして扱ってもよい。
ROM102a上には、通常処理プログラム、異常処理プログラム、FW管理プログラム、セキュアプログラムから構成されるFWと、そのMACが格納されている。通常処理プログラムは、1つ以上のFWブロックから構成される。各FWブロックのサイズは同一である必要はなく、オブジェクト単位やサイズ単位など、所定の方法に従って分割される。ここでは、通常処理プログラムは3つのFWブロック(ブロックA、ブロックB、ブロックC)に分割されており、各ブロックサイズは均一ではないものとして説明を行う。セキュアプログラムは、セキュア処理を行うセキュリティ処理プログラムとセキュリティ処理情報174とから構成される。MACは、通常処理プログラムMAC、異常処理プログラムMAC、FW管理プログラムMAC、セキュアプログラムMACから構成され、通常処理プログラムMACはさらに、FWブロックごとのMAC(ブロックA MAC、ブロックB MAC、ブロックC MAC)から構成される。ここで、ROM102a上のMACはMAC値が格納されている必要はなく、MAC値へのポインタが保存されていてもよい。この場合、MAC値はROM102aやRAM102b上の所定のメモリ空間やその他のメモリ、例えばMAC値の保存専用メモリなどに保存される。
ここで、任意のメモリ空間に対するアクセス権の設定方法について説明する。図7は、アクセス権の設定方法の概要を説明する図であり、あるメモリ102に対して3つの領域を設定した例を示している。
図7において、領域kはメモリ102上の任意サイズの領域であり、領域k+1は領域k内の領域、領域k+2は領域kの一部と隣接するメモリを含む領域である。さらに、各領域は任意の数の補助領域に分割できる。1つの領域における補助領域サイズは同一であり、補助領域への分割数もシステムを通して固定とする。つまり、8Byteの領域を8つの補助領域に分割するシステムの場合、1つの補助領域は1Byteとなり、別の16Byteの領域が存在する場合は8つの補助領域にしか分割できず、1つの補助領域は2Byteとなる。領域k〜k+2はオーバーラップが可能であり、オーバーラップした場合は所定の規則に従って設定の優先度が決定する。ここでは、上位番号(昇順)の領域設定を優先する場合を用いて説明するが、下位番号(降順)の領域設定に従う、または優先領域を設定するなど、他の方法を用いてもよい。
各領域に対してはRead権、Write権、実行権を設定することができ、各補助領域は有効フラグを設定することができる。以下では、Read権ありWrite権ありの設定を「RW」、Read権ありWrite権なしの設定を「RO」、Read権なしWrite権ありの設定を「WO」、Read権なしWrite権なしの設定を「NA」(Non-Access)、実行権なしの設定を「XN」(execution never)と表記し、有効フラグが設定された補助領域を「sub=1」、有効フラグが設定されていない無効の補助領域を「sub=0」と表記して説明する。
図7に示す例の場合、領域のオーバーラップが発生していない領域kの一部と領域k+2は、それぞれの設定が使用される(ア)。また、領域k+2にオーバーラップされている領域kの一部は、領域k+2の設定が使用される(イ)。また、領域k+1にオーバーラップされている領域kの一部は、領域k+1の設定が使用されるが(ウ)、領域k+1の補助領域が無効化されている場合は、領域kの設定が使用される(エ)。
本実施形態では、アクセス権を設定した領域とFWを分割したブロック(FWブロック)を一致させることで、未検証のFWブロックを検出し、検証処理を行う。以下では、領域の設定と未検証FWブロックの検出について説明する。
図8は、本実施形態におけるFWの領域設定の一例を示す図である。図8に示す例は、FWの通常処理プログラムがブロックA,B,Cの3つのFWブロックから構成される例である。アクセス権を設定可能な領域の数には上限がある。ここでは、アクセス権を設定可能な領域の数の上限をNとする。すなわち、アクセス権管理装置120は、N個の領域にアクセス権を設定可能であるものとする。
まず、ROM102aのメモリ空間は、Writeできず実行可能なプログラムが配置されるため、領域1でROに設定される。そして、分割検証の対象である通常処理プログラムが配置されているメモリ空間は、領域2でNA, XNに設定される。この状態でFWを実行すると、未検証であるブロックA,B,Cのいずれかに属するデータに対してアクセスが発生した場合に、領域2の設定によるアクセス権違反が発生する。このアクセス権違反を受けて、セキュアプログラム(セキュア処理部170)はアクセス権違反を発生させたFWブロックを検証し、検証が成功した場合に検証したFWブロックのメモリ空間に対して新しい領域(領域3,4,5)を追加し、アクセスを可能とする。
ここで、異常処理プログラム、FW管理プログラム、セキュアプログラムは、領域1で実行が可能となるため、追加の領域を設ける必要はない。しかし、本実施形態は実行中に領域を追加していくことから、バグなどにより、意図せず異常処理プログラム、FW管理プログラム、セキュアプログラムのメモリ空間に対して意図しないアクセス権の新規領域を追加してしまう可能性がある。そのため、最も優先度が高い領域Nにセキュアプログラムを割り当て、領域N−1に異常処理プログラムとFW管理プログラムを割り当てることで、この問題を回避することができる。
また、図8ではセキュアプログラムを個別の領域に配置し、異常処理プログラムとFW管理プログラムを同一の領域に配置しているが、それぞれ別の領域に配置してもよいし、全てを同じ領域に配置してもよい。さらに、図8では未検証状態の領域2にNA,XNを設定しているが、RO,XNと設定してもよく、当該メモリ空間に対するアクセス時にアクセス権違反が発生すればどんな設定を用いてもよい。
さらに、検証により追加する領域番号は事前に決定されていてもよく、また動的に決定してもよい。例えば、ブロックC、ブロックA、ブロックBの順でアクセスが発生した場合、事前に領域番号がブロックAは領域3、ブロックBは領域4、ブロックCは領域5と決定している場合は領域5、領域3、領域4の順で領域が追加される。一方、動的に決定する場合は、アクセスが発生した順序に応じて、ブロックCに対して領域3、ブロックAに対して領域4、ブロックBに対して領域5の順で領域が追加される。
次に、本実施形態に係る情報処理装置100Aの処理フローを説明する。本実施形態では、全ての改ざん検証処理をソフトウェアHMAC(Hash-based Message Authentication Code)を使って行うものとするが、その他のアルゴリズムを用いてもよく、ハードウェアを用いてもよい。HMAC鍵は鍵管理ユニット110が保持しているものとし、全ての改ざん検証において同じ鍵を使用するものとして説明を行うが、それぞれ個別の鍵を用いてもよく、異なるアルゴリズムを用いてもよい。また、FWはセキュアプログラムから起動し、通常処理プログラムのうち最初に実行されるFWブロックをブロックAとして説明を行うが、FWはFW管理プログラムや他のプログラムから起動されてもよい。ここでは、セキュリティ処理情報174は図4、FWのメモリマップは図6、FWの領域設定は図8と同様とし、RAM102bについても適切に領域設定が行われているものとする。
図9は、本実施形態に係る情報処理装置100Aの起動時の処理フローを示すフローチャートである。電源が投入されると、情報処理装置100Aは、プロセッサコア(CPU0)101でFWのセキュアプログラムの実行を開始する。
セキュアプログラム(セキュア処理部170)は、まず自身の改ざん検証を行うため、鍵管理ユニット110から鍵情報を取得し、ROM102aからセキュアプログラムMACを取得して、改ざん検証部172で自己検証を行う(ステップS101)。ここで、自己検証に失敗した場合(ステップS102:No)、セキュアプログラムは、検証失敗に伴う事後処理を行い(ステップS103)、異常終了する。
一方、自己検証に成功した場合(ステップS102:Yes)、セキュアプログラムは、ペリフェラルなどの初期化処理を行い(ステップS104)、アクセス権の初期設定を行う(ステップS105)。本実施形態におけるアクセス権の初期設定は、ROM102aの全メモリ空間を領域1(RO)、検証対象である通常処理プログラム(ブロックA,B,C)のメモリ空間を領域2(NA,XN)、検証を行ったセキュアプログラムのメモリ空間を領域N(RO)に設定することである。セキュアプログラムは、この初期設定をアクセス権更新部173に依頼する。アクセス権更新部173は、アクセス権管理部121にアクセス権の更新を依頼し、アクセス権管理部121は、依頼を受けたアクセス権を設定し、設定したアクセス権をアクセス権情報123に登録する。
次に、セキュアプログラムは、改ざん検証部172でROM102a上のFW管理プログラム、異常処理プログラム、最初に実行するFWブロック(ブロックA)の改ざん検証を行う(ステップS106)。そして、これらの検証のいずれかに失敗した場合(ステップS107:No)、セキュアプログラムは、FWの検証失敗に伴う事後処理を行い(ステップS108)、異常終了する。
一方、検証に成功した場合(ステップS107:Yes)、セキュアプログラムは、検証状態に基づき、メモリ空間に対するアクセス権の設定を行う(ステップS109)。すなわち、セキュアプログラムは、検証状態に基づくアクセス権の設定をアクセス権更新部173に依頼する。アクセス権更新部173は、アクセス権管理部121にアクセス権の更新を依頼し、アクセス権管理部121は依頼を受けたアクセス権を更新して、更新したアクセス権をアクセス権情報123に登録する。本実施形態の場合、検証を行ったFW管理プログラムと異常処理プログラムのメモリ空間を領域N−1(RO)に設定し、最初に実行するFWブロック(ブロックA)のメモリ空間を領域3(RO)に設定する。
そして、セキュアプログラムは、遷移先を検証したFWブロック(ブロックA)に設定する(ステップS110)。これにより、プロセッサコア(CPU0)101が実行するFWのプログラムがセキュアプログラムから通常処理プログラムのFWブロック(ブロックA)に遷移し(ステップS111)、起動処理が終了する。
ここで、異常処理プログラムと最初に実行されるFWブロックは、必ずしも起動時に検証される必要はなく、後述するデータアクセス時の処理フローにより、当該プログラムへのアクセス時に検証を行ってもよい。この場合、FW管理プログラムは、検証していないFWブロックを遷移先に指定し、このFWブロックに遷移すると同時にこのFWブロックに対するデータアクセス時の処理フローが発生する。また、それに伴い領域の設定は、ROM102aの全メモリ空間を領域1(RO)、検証対象である通常処理プログラム(ブロックA,B,C)のメモリ空間を領域2(NA,XN)としている状態で、検証を行ったセキュアプログラムのメモリ空間を領域N(RO)、FW管理プログラムのメモリ空間を領域N−1(RO)に変更し、異常処理プログラムが検証された場合はそのメモリ空間を領域N−2(RO)に設定し、FWブロック(ブロックA)が検証された場合はそのメモリ空間を領域3(RO)に設定する。
また、アクセス権の初期設定は必ずしもFW管理プログラムや異常処理プログラムの検証前に行う必要はなく、検証したFW管理プログラムや異常処理プログラムのアクセス権設定時に行ってもよく、セキュアプログラムからFWブロックへの遷移前ならば任意のタイミングで行うことができる。
なお、各プログラムの検証失敗に伴う事後処理とは、一般的な機器の停止だけではなく、例えばホストに対して自身の状態を示すエラーコードやエラーステータスを送信してもよく、また、異常発生原因の除去と異常状態からの回復を行ってもよい。その他にも、外部インターフェース(インターフェース103)からの遮断や、情報処理装置100A内の特定データの削除、全データの削除などを行ってもよい。
図10は、本実施形態に係る情報処理装置100Aのデータアクセス時の処理フローを示すフローチャートである。ここでは、プロセッサコア(CPU0)101で動作する通常処理プログラムのブロックAからブロックBに対してデータアクセスが発生した場合を想定して説明を行う。
メモリ102に対するデータアクセスが発生すると、メモリアクセス部131は、メモリ102上のデータにアクセスを行う。アクセス権管理部121は、メモリアクセス部131のデータアクセスを検出すると、アクセス権情報123を参照して、メモリアクセス部131のデータアクセスがアクセス権に違反するアクセスか確認する(ステップS201)。ここで、アクセス権に違反するアクセスではなかった場合(ステップS202:No)、メモリアクセス部131は、メモリ102上のブロックBに対してデータアクセスを行う(ステップS203)。
一方、アクセス権に違反するアクセスだった場合(ステップS202:Yes)、シグナル生成部122が、アクセス権違反のシグナルを生成する(ステップS204)。シグナルが生成されると、プロセッサコア(CPU0)101では、通常処理プログラムの実行が中断される。そして、シグナル解析部161が、シグナルの発生原因を解析する(ステップS205)。この場合、シグナルの発生原因はアクセス権違反であるため、次のステップに進む。
次に、プログラム切替部162は、プロセッサコア(CPU0)101が実行するプログラムをセキュアプログラムに切り替え、セキュアプログラムで後述するセキュリティ処理を行う(ステップS206)。ここで、セキュアプログラムによるセキュリティ処理が成功しなかった場合(ステップS207:No)、プログラム切替部162は、プロセッサコア(CPU0)101で実行するプログラムを異常処理プログラムに切り替える(ステップS208)。これにより、プロセッサコア(CPU0)101により異常処理プログラムが実行される。
一方、セキュアプログラムによるセキュリティ処理が成功した場合(ステップS207:Yes)、プログラム切替部162は、プロセッサコア(CPU0)101で実行するプログラムを中断していた通常処理プログラムに切り替え、メモリアクセス部131は、ブロックBに対してデータアクセスを行う(ステップS203)。
ここで、異常処理プログラムは、異常発生時に所定の処理を行う。所定の処理とは、一般的な情報処理装置100Aの停止だけではなく、例えば、ホスト200に対して自身の状態を示すエラーコードやエラーステータスなどを送信してもよく、異常発生原因の除去と異常状態からの回復を行ってもよい。その他にも、インターフェース103からの遮断や、情報処理装置100A内の特定データの削除、全データの削除などを行ってもよい。
図11は、本実施形態に係る情報処理装置100Aのシグナル発生時の処理フローを示すフローチャートである。図10では、シグナルの発生原因はアクセス権違反であるものとして説明したが、シグナル解析部161は、情報処理装置100Aで発生するその他のシグナルの解析機能を持つ。
まず、シグナルが検出されると(ステップS301)、プロセッサコア(CPU0)101では、通常処理プログラムの実行が中断され、シグナル解析部161が、シグナルの発生原因を解析する(ステップS302)。ここで、シグナルの発生原因がアクセス権違反でない場合(ステップS303:No)、シグナル解析部161は、シグナルに基づく所定の処理を行う(ステップS304)。一方、シグナルの発生原因がアクセス権違反である場合(ステップS303:Yes)、プログラム切替部162は、プロセッサコア(CPU0)101で実行するプログラムをセキュアプログラムに切り替え、セキュアプログラムでセキュリティ処理を行う(ステップS305)。
図12は、本実施形態におけるセキュリティ処理の処理フローを示すフローチャートである。セキュアプログラムによるセキュリティ処理が開始されると、セキュリティ処理管理部171は、シグナルを発生させたアドレスが未検証領域か確認する(ステップS401)。例えばセキュリティ処理管理部171は、セキュリティ処理情報174に登録されている検証対象領域の開始アドレスとサイズを参照し、シグナルを発生させたアドレスが検証対象領域か確認する。そして、シグナルを発生させたアドレスが検証対象領域であれば、さらにその検証対象領域の検証状態を参照し、その検証対象領域が未検証領域であるかを確認する。
ここで、シグナルを発生させたアドレスが検証対象領域でない、または検証対象領域だが検証済み領域である場合(ステップS402:No)、セキュリティ処理は失敗として(ステップS403)、処理を終了する。一方、シグナルを発生させたアドレスが未検証領域の場合(ステップS402:Yes)、セキュリティ処理管理部171は、シグナルを発生させた未検証領域に対する検証を改ざん検証部172に依頼する。改ざん検証部172は、セキュリティ処理管理部171がセキュリティ処理情報174から取得した未検証領域の開始アドレス、サイズ、MAC値を受け取り、鍵管理ユニット110から鍵情報を取得して、未検証領域に対する改ざん検証を行う(ステップS404)。
ここで、改ざん検証部172が検証に失敗した場合(ステップS405:No)、セキュリティ処理は失敗として(ステップS403)、処理を終了する。一方、改ざん検証部172が検証に成功した場合(ステップS405:Yes)、検証を行った検証対象領域に対するアクセス権の更新が行われる(ステップS406)。すなわち、アクセス権更新部173は、セキュリティ処理管理部171がセキュリティ処理情報174から取得した検証対象領域の開始アドレス、サイズ、付与するアクセス権、領域番号を受け取り、アクセス権管理部121にアクセス権の変更を依頼する。この依頼を受けたアクセス権管理部121は、検証対象領域に対して付与するアクセス権で示されるアクセス権を設定し、設定したアクセス権に応じてアクセス権情報123を更新することにより、検証対象領域に対するアクセス権の更新を行う。
検証対象領域に対するアクセス権の更新が完了すると、セキュリティ処理管理部171は、検証を行った検証対象領域に対応するセキュリティ処理情報174の検証状態を検証済みに更新し(ステップS407)、セキュリティ処理は成功として(ステップS408)、処理を終了する。
図13は、本実施形態に係る情報処理装置100Aのホスト要求発生時の処理フローを示すフローチャートである。ここでは、ホスト200からの要求に対してインターフェース103を介して情報処理装置100Aが応答する場合を想定して説明を行う。
ホスト200からの要求が発生すると、インターフェース103は、ホスト200からの要求をホスト要求として受け取る(ステップS501)。そして、情報処理装置100Aは、インターフェース103からホスト要求を受け取り(ステップS502)、このホスト要求を実行する(ステップS503)。
ここで、ホスト要求実行時にデータアクセスが発生し、アクセスが発生した領域が未検証領域であった場合に、情報処理装置100Aは、上述のセキュリティ処理を行う。そして、情報処理装置100Aがホスト要求を正常に終了した場合(ステップS504:Yes)、情報処理装置100Aは、インターフェース103にホスト要求への応答を通知する(ステップS505)。さらに、インターフェース103は、ホスト200に要求への応答を通知して(ステップS506)、処理を終了する。
一方、情報処理装置100Aがホスト要求を正常に終了しなかった場合(ステップS504:No)、情報処理装置100Aとインターフェース103は、所定の処理を実行する(ステップS507)。
ここで、ホスト要求の正常終了とは、情報処理装置100Aがホスト要求に対して異常終了または異常処理プログラムによる応答を行わなかった場合とする。また、異常処理プログラムによる応答を行った場合でも、異常処理プログラム内で異常状態からの回復が行われた場合は正常終了したものとする。
また、ホスト要求が正常に終了しなかった場合の情報処理装置100Aとインターフェース103の所定の処理とは、情報処理装置100Aのみで動作してもよく、情報処理装置100Aとインターフェース103が連携して動作してもよい。情報処理装置100Aのみで動作する場合は、例えば、情報処理装置100Aがインターフェース103からの送受信を一切受け付けない状態になってもよく、情報処理装置100Aが攻撃を受けたものとして重要データを削除したり、縮退運転を行ったりしてもよい。一方、情報処理装置100Aとインターフェース103が連携して動作する場合は、先に述べた情報処理装置100Aのみで動作する場合に加えて、例えば、情報処理装置100Aがエラーコードを生成してインターフェース103に通知し、インターフェース103はエラーコードに伴う応答をホスト200に返答してもよい。また、インターフェース103は、情報処理装置100Aからエラーコードの通知を一度受けると、それ以降のホスト要求に対して情報処理装置100Aに通知せずに、インターフェース103が独自に応答してもよい。
以上説明したように、本実施形態では、アクセス権を設定した領域と分割検証の対象となるFWブロック(検証対象領域)を一致させることで、未検証のFWブロックである未検証領域を検出して改ざん検証を行うようにしている。したがって本実施形態によれば、FWの分割検証に高性能なハードウェア資源は要求されず、ローエンド情報機器であっても適切なFWの分割検証を実現できる。また、本実施形態によれば、動的に検証順序が変更可能なFWの分割検証を実現することができる。
(第1実施形態の変形例)
本変形例は、補助領域を利用してFWの分割検証を行う例である。上述の第1実施形態では、検証済みの検証対象領域に対して新たにアクセス権を付与した領域を設定していたが、本変形例では、分割検証の対象となる検証対象領域に対して事前に領域を割り当てておき、その領域内の補助領域の有効、無効を切り替えることでFWの分割検証を実現する。ここで、本変形例では、検証対象の通常処理プログラムがブロックA,B,Cの3つのFWブロックから構成され、1つの領域は3つの補助領域に分割できるものとして説明を行うが、1つの領域はいくつの補助領域に分割できてもよい。
図14は、本変形例におけるアクセス権情報123の一例を示す図である。本変形例におけるアクセス権情報123は、図3に示したアクセス権情報123と比較して、補助領域の有効または無効の情報を持つ。
図15は、本変形例におけるセキュリティ処理情報174の一例を示す図である。本変形例におけるセキュリティ処理情報174は、図4に示したセキュリティ処理情報174と比較して、補助領域番号が追加され、検証成功時に付与するアクセス権は保持する必要はないため削除されている。また、本変形例では3つのFWブロックを3つの補助領域で分割する例を用いているため、1つの補助領域サイズは固定値となり、サイズ情報を保持する必要はない。ただし、例えば2つのFWブロックを3つの補助領域で検証する場合では、1つのFWブロックに複数の補助領域を割り当てることも可能であるため、サイズ情報は保持していてもよい。2つのFWブロックを3つの補助領域で検証する場合とは、例えば、ブロックAが2KByteでブロックBが1KByteのとき、ブロックAは補助領域1と補助領域2で検証され、ブロックBは補助領域3で検証されるといった場合を指す。また、本変形例のように1つの領域の補助領域のみを用いて検証を行う場合、領域番号を保持する必要はないが、複数の領域の補助領域を用いて検証を行う場合、例えば、領域3の3つの補助領域と領域4の3つの補助領域との合計6つの補助領域を用いる場合などにおいては、領域番号は必要となる。
図16は、本変形例におけるFWの領域設定の一例を示す図である。図16に示す例は、FWの通常処理プログラムが3つのFWブロック(ブロックA,B,C)から構成される例である。アクセス権管理装置120は、N個の領域にアクセス権を設定可能であり、1つの領域は3つの補助領域に分割できるものとする。また、通常処理プログラムのブロックA,B,Cが分割検証の対象であり、異常処理プログラム、FW管理プログラム、セキュアプログラムはすでに検証されているものとする。なお、本変形例では、分割検証の対象であるブロックA,B,Cは補助領域を利用した改ざん検証を行い、異常処理プログラム、FW管理プログラム、セキュアプログラムは第1実施形態と同様に領域を利用した改ざん検証を行うものとして説明するが、異常処理プログラム、FW管理プログラム、セキュアプログラムについても、補助領域を利用した改ざん検証を行う構成としてもよい。
図16に示す本変形例におけるFWの領域設定では、図8に示した例と比較して、ブロックA,B,Cのメモリ空間に対し、領域2(NA,XN)に加えて、検証後に付与されるアクセス権(RO)を持つ領域3が設定される。ただし、ブロックA,B,Cの各々に対応する領域3の3つの補助領域(sub1,sub2,sub3)はいずれも無効(sub=0)とされており、領域2の設定が使用されることになる。そのため、未検証であるブロックA,B,Cのいずれかに属するデータに対してアクセスが発生した場合に、アクセス権違反が発生する。このアクセス権違反を受けて、セキュアプログラムは、アクセス権違反を発生させたFWブロックを検証し、検証が成功したFWブロックのメモリ空間の補助領域(sub1,sub2,sub3)をそれぞれ有効(sub=1)にして、アクセスを可能とする。
本変形例の処理フローは、上述した第1実施形態の処理フローと同様であるが、アクセス権更新部173によって更新されるアクセス権が領域の追加ではなく、補助領域の有効化となる。
以上説明したように、本変形例によれば、検証後に付与するアクセス権を持つ領域内の補助領域を無効化しておくことで、未検証のFWブロックをアクセス権違反により検出、検証し、動的に検証順序が変更可能なFW改ざん検証機構を実現することができる。特に本変形例では、補助領域を利用することで、第1実施形態よりも少ない領域数での分割検証が可能となる。また、補助領域は領域が均等サイズに分割されたものであるため、通常処理プログラムと同じサイズの領域を設定するだけで、自動的に均等サイズに分割された補助領域による分割検証を実現することができ、通常処理プログラムを複数のFWブロックに分割する必要がなくなることから、開発コストを削減できる。
[第2実施形態]
上述の第1実施形態では、情報処理装置100Aの起動時に最初に実行されるセキュアプログラムは自己検証による改ざん検出を行っており、セキュアプログラムが改ざんされることにより各プログラムの改ざん検証が回避されることは想定していなかった。しかし、FWが格納されるROM102aには、例えばMaskROMなどのように出荷時から更新不可能なROMと、例えばNOR型フラッシュメモリなどのように所定の手順により更新可能なROMがあり、セキュアプログラムの改ざんを防止しつつ第1実施形態によるFWの分割検証を実現するには、FWは出荷時から更新不可能なROMに配置する必要があった。
本実施形態では、出荷時から更新不可能なMaskROMからのトラストチェーンを実現することで、所定の手順により更新可能なROM上にFWを配置しつつ、回避不可能なFWの分割検証を実現する。
図17は、本実施形態に係る情報処理装置100Bの概略構成を例示するブロック図である。情報処理装置100Bは、図1に示した第1実施形態に係る情報処理装置100Aと同様の概略構成であるが、プロセッサコア101内にシグナル検出装置190がさらに設けられ、メモリ102には、FWに加えてIPL(Initial Program Loader)が保持されている。IPLは、情報処理装置100Bの電源投入後に最初に実行されるプログラムである。図17に示す情報処理装置100Bの各種構成要素は、ハードウェア、ソフトウェア、または、ハードウェアとソフトウェアとの組み合わせで構成される。
図18は、本実施形態に係る情報処理装置100Bの機能的な構成例を示すブロック図である。本実施形態に係る情報処理装置100Bは、図2に示した第1実施形態に係る情報処理装置100Aの機能的な構成に対し、シグナル検出装置190と、初期実行部180とが追加されている。
シグナル検出装置190は、シグナル検出部191と、FW管理部呼出部192とを備える。
シグナル検出部191は、シグナル生成部122が生成したシグナルを検出し、シグナルがFW管理部160の呼び出しを必要とする場合に、FW管理部呼出部192に通知を送る。この通知はシグナルの情報を含み、シグナルが割り込みの場合は、例えば割り込み原因などの情報を含む。
FW管理部呼出部192は、シグナル検出部191からの通知を受けて、この通知に含まれるシグナルの情報に基づいてFW管理部160を呼び出す。例えば、異なるシグナルA,Bそれぞれに対応するFW管理部A,Bが存在する場合、シグナル検出部191でシグナルAが検出されて通知を受けると、FW管理部呼出部192はシグナルAに対応するFW管理部Aを呼び出し、シグナル検出部191でシグナルBが検出されて通知を受けると、FW管理部呼出部192はシグナルBに対応するFW管理部Bを呼び出す。また、FW管理部呼出部192は、シグナル検出部191でシグナルAとシグナルBのいずれが検出された場合でも、シグナルAに対応するFW管理部Aを呼び出すようにしてもよい。
初期実行部180は、自己検証部181と、初期化部182と、FW検証部183と、初期異常処理部184と、アクセス権設定部185と、FW起動部186とを備える。
自己検証部181は、初期実行部180の自己検証を行う。初期化部182は、情報処理装置100Bの初期化処理を行う。
FW検証部183は、指定されたFWの一部または全部の検証を行う。初期異常処理部184は、FWの検証に失敗した場合の異常処理を行う。初期異常処理部184は異常処理部150と同様の機能を有し、初期異常処理部184と異常処理部150は同じ異常処理を行ってもよく、それぞれ異なる処理を行ってもよい。
アクセス権設定部185は、アクセス権管理部121に対してアクセス権の設定を要求する。FW起動部186は、FWの起動を行う。本実施形態では、初期実行部180をIPLにより実現した例を用いて説明を行うが、初期実行部180はハードウェアとして実現されてもよい。
本実施形態におけるセキュリティ処理管理部171は、アクセス権違反が発生したメモリ空間に対するセキュリティ処理の管理とセキュリティ処理情報174の管理を行い、起動処理は行わない。
図19は、本実施形態に係る情報処理装置100Bのハードウェア構成例を示すブロック図である。本実施形態に係る情報処理装置100Bは、図5に示した第1実施形態に係る情報処理装置100Aのハードウェア構成に対し、MaskROM102cが追加されているとともに、プロセッサコア(CPU0)101内に割り込みコントローラ(GIC)101eが設けられている。本実施形態では、ROM102aおよびRAM102bに加えてMaskROM102cが、図17および図18に示したメモリ102に相当する。
プロセッサコア(CPU0)101、ROM102a、RAM102b、MaskROM102cは、外部バス104を介して、データ、信号、命令を互いに送受信可能とする。鍵管理ユニット(KSU)110は、アクセスが許可されたデバイスとのみデータ、信号、命令を互いに送受信可能とする。また、プロセッサコア(CPU0)101内の命令実行ユニット(EXU)101a、メモリ保護ユニット(MPU)101b、メモリコントローラ101c、割り込みコントローラ(GIC)101eは、内部バス101dを介して、データ、信号、命令を互いに送受信可能とする。本実施形態では、割り込みコントローラ(GIC)101eを、図17および図18に示したシグナル検出装置190として用いるものとする。また、IPLはMaskROM102c上のプログラムとし、プロセッサコア(CPU0)101が最初に実行するプログラムとする。
次に、本実施形態で想定するメモリマップについて説明する。図20は、本実施形態におけるメモリマップの一例を示す図である。本実施形態では、図6に示したメモリマップと比較して、メモリ空間上にMaskROM102cが存在する。MaskROM102cには、IPLとIPL MACが格納されている。IPL MACはIPLのMACであり、IPLの起動時の自己検証で使用する。本実施形態では、MaskROM102cは図20に示すようにメモリマップされているものとして説明を行う。
次に、本実施形態に係る情報処理装置100Bの処理フローを説明する。本実施形態では、上述の第1実施形態と比較して、データアクセス時の処理フローにシグナル検出装置190による処理が追加され、起動時の処理フローがセキュア処理部170(セキュリティ処理プログラム)による処理から初期実行部180(IPL)による処理に変更される。ここでは、セキュリティ処理情報174は図4、FWのメモリマップは図20、FWの領域設定は図8と同様とし、RAM102bについても適切に領域設定が行われているものとして、上述の第1実施形態との差分を説明する。
図21は、本実施形態に係る情報処理装置100Bの起動時の処理フローを示すフローチャートである。電源が投入されると、情報処理装置100Bは、プロセッサコア(CPU0)101でIPLの実行を開始する。
IPLは、まず自身の改ざん検証を行うため、鍵管理ユニット110から鍵情報を取得し、MaskROM102cからIPL MACを取得して、自己検証部181で自己検証を行う(ステップS601)。ここで、自己検証に失敗した場合(ステップS602:No)、IPLは検証失敗に伴う事後処理を行い(ステップS603)、異常終了する。
一方、自己検証に成功した場合(ステップS602:Yes)、IPLは初期化部182でペリフェラルなどの初期化処理を行い(ステップS604)、アクセス権の初期設定を行う(ステップS605)。本実施形態におけるアクセス権の初期設定は、ROM102aの全メモリ空間を領域1(RO)、検証対象である通常処理プログラム(ブロックA,B,C)のメモリ空間を領域2(NA,XN)に設定することであり、IPLはこの初期設定をアクセス権設定部185に依頼する。アクセス権設定部185は、アクセス権管理部121にアクセス権の設定を依頼し、アクセス権管理部121は依頼を受けたアクセス権を設定し、設定したアクセス権をアクセス権情報123に登録する。
次に、IPLは、FW検証部183でROM102a上のセキュアプログラム、FW管理プログラム、異常処理プログラム、最初に実行するFWブロック(ブロックA)の改ざん検証を行う(ステップS606)。そして、これらの検証のいずれかに失敗した場合(ステップS607:No)、IPLは初期異常処理部184でFWの検証失敗に伴う事後処理を行い(ステップS608)、異常終了する。
一方、検証に成功した場合(ステップS607:Yes)、IPLはアクセス権設定部185で、検証状態に基づき、メモリ空間に対するアクセス権の設定を行う(ステップS609)。すなわち、アクセス権設定部185は、検証状態に基づくアクセス権の設定をアクセス権管理部121に依頼し、アクセス権管理部121は依頼を受けたアクセス権を設定して、設定したアクセス権をアクセス権情報123に登録する。本実施形態の場合、検証を行ったセキュアプログラムのメモリ空間を領域N(RO)、FW管理プログラムと異常処理プログラムのメモリ空間を領域N−1(RO)、最初に実行するFWブロック(ブロックA)のメモリ空間を領域3(RO)にそれぞれ設定する。
そして、IPLは遷移先を検証したFWブロック(ブロックA)に設定し(ステップS610)、FW起動部186でFWを起動する。これにより、プロセッサコア(CPU0)101が実行するプログラムがIPLからFWブロック(ブロックA)に遷移し(ステップS611)、起動処理が終了する。
ここで、アクセス権の初期設定は、必ずしもFW検証部183の検証前に行う必要はなく、検証したFW管理プログラムや異常処理プログラムのアクセス権設定時に行ってもよく、IPLからFWブロックへの遷移前ならば任意のタイミングで行うことができる。
図22は、本実施形態に係る情報処理装置100Bのデータアクセス時の処理フローを示すフローチャートである。ここでは、プロセッサコア(CPU0)101で動作する通常処理プログラムのブロックAからブロックBに対してデータアクセスが発生した場合を想定して説明を行う。
メモリ102に対するデータアクセスが発生すると、メモリアクセス部131はメモリ102上のデータにアクセスを行う。アクセス権管理部121は、メモリアクセス部131のデータアクセスを検出すると、アクセス権情報123を参照して、メモリアクセス部131のデータアクセスがアクセス権に違反するアクセスか確認する(ステップS701)。ここで、アクセス権に違反するアクセスではなかった場合(ステップS702:No)、メモリアクセス部131はメモリ102上のブロックBに対してデータアクセスを行う(ステップS703)。
一方、アクセス権に違反するアクセスだった場合(ステップS702:Yes)、シグナル生成部122がアクセス権違反のシグナルを生成する(ステップS704)。シグナル検出装置190は、シグナル検出部191でこのシグナルを検出して、プロセッサコア(CPU0)101で実行中の通常処理プログラムのブロックAの実行を中断し、FW管理部呼出部192でFW管理プログラムを呼び出す(ステップS705)。これにより、プロセッサコア(CPU0)101でFW管理プログラムが実行される。FW管理プログラムは、シグナル解析部161でシグナルの発生原因を解析する(ステップS706)。以降の処理フローは図10に示した処理フローと同様であるため、説明を省略する。
以上説明したように、本実施形態によれば、出荷時から更新不可能なMaskROM102c上のIPLを起点としたトラストチェーンにより、セキュリティ処理に関わるFW管理プログラム、セキュアプログラムの完全性を担保することができ、改ざん検証の回避を有効に防止することができる。
(第2実施形態の変形例1)
本変形例は、ROM102aに格納されたFWの一部のデータをRAM102bにロードしてから検証する例である。上述の第2実施形態では、ROM102aに格納されているデータをそのまま検証し、検証した場所のデータにアクセスしていたが、本変形例では、ROM102a上のデータをRAM102b上にロードしてから検証し、アクセスを行う。ここで、不揮発性主記憶メモリを用いる場合は、不揮発性主記憶メモリをROM102aとみなして、FWはRAM102b上の別のメモリ空間にロードされて検証されてもよく、不揮発性主記憶メモリの特定のメモリ空間をRAM102bとみなしてロードされ検証されてもよい。また、本変形例では、ROM102a上のデータはRAM102bにロードして使用するものと、ROM102a上のデータをそのまま使用するものが存在するものとして説明を行う。ROM102a上のデータをそのまま使用する場合、RAM102bへのロードは発生せず、ロード無しとなる。
図23は、本変形例に係る情報処理装置100B−1の機能的な構成例を示すブロック図である。情報処理装置100B−1は、図18に示した第2実施形態に係る情報処理装置100Bの機能的な構成に対し、セキュア処理部170内にロード部175が追加されている。ロード部175は、ROM102a上のデータをRAM102b上にロードするための機能モジュールである。
本変形例では、プロセッサコア101がアクセスするアドレスを参照アドレス、ロードが必要なデータが保持されているアドレスをロード元アドレスとし、セキュリティ処理管理部171は、セキュリティ処理情報174に含まれるロード元アドレスと参照アドレスを使用するものとして説明を行う。ROM102aからRAM102bへロードする場合は、RAM102bのメモリ空間のアドレスが参照アドレス、ROM102aのメモリ空間のアドレスがロード元アドレスとなり、ROM102aからRAM102bへのロードがない場合(ROM102a上のデータをそのまま参照する場合)は、ROM102aのメモリ空間のアドレスが参照アドレスとなる。ここで、ロード元アドレスと参照アドレスはFW管理部160が管理し、セキュリティ処理管理部171はFW管理部160から取得してもよく、他の手段により取得してもよい。
図24は、本変形例におけるセキュリティ処理情報174の一例を示す図である。本変形例におけるセキュリティ処理情報174は、図4に示したセキュリティ処理情報174と比較して、ロード元アドレスとロードの有無が追加され、開始アドレスが参照アドレスに変更されている。ここで、開始アドレスと参照アドレスは基本的に同じ情報であり、検証要求が発生する領域アドレスを指す。ロードの有無は、ロード部175がロードを行うか否かを示す情報であり、ロード有りの場合はロード部175がロードを行い、ロード無しの場合はロードを行わない。
本変形例におけるセキュリティ処理管理部171は、アクセス権違反が発生したメモリ空間に対するデータの改ざん検証処理の管理とセキュリティ処理情報174の管理に加えて、アクセス権違反が発生したメモリ空間に対するデータロードの管理を行う。セキュリティ処理管理部171は、セキュリティ処理情報174の参照アドレスと、アクセス権違反が発生したアドレスおよびサイズ、検証状態から、発生したアクセス権違反が検証要求であると判断した場合に、ロードの有無を確認し、ロードが必要だった場合にロード部175に対してロードを依頼する。また、セキュリティ処理管理部171は、改ざん検証部172に対して検証要求のあった検証対象領域に対する改ざん検証を依頼する。そして、セキュリティ処理管理部171は、改ざん検証部172から検証成功の通知があった場合に、検証に成功したメモリ空間に対するアクセス権の更新をアクセス権更新部173に依頼し、このメモリ空間が検証済みであることをセキュリティ処理情報174に記録する。
ロード部175は、セキュリティ処理管理部171から指定されたサイズのデータをロード元アドレスから参照アドレスにロードする。ロードはソフトウェアで行ってもよく、DMAC(Direct Memory Access Controller)などを用いてハードウェアで行ってもよい。
改ざん検証部172は、セキュリティ処理管理部171から指定されたメモリ空間に対する改ざん検証を行い、改ざんの有無を検出する。改ざん検証部172は、セキュリティ処理情報174の検証用データをセキュリティ処理管理部171から受け取り、所定のアルゴリズムに従って改ざん検証を行い、結果をセキュリティ処理管理部171に通知する。本変形例の場合、セキュリティ処理管理部171は参照アドレスとサイズを改ざん検証部172に指定し、改ざん検証部172は参照アドレスとサイズで示される範囲のメモリ空間(検証対象領域に相当)に対して改ざん検証を行う。
アクセス権更新部173は、セキュリティ処理管理部171から指定されたメモリ空間に対するアクセス権の更新をアクセス権管理部121に通知する。本変形例の場合、セキュリティ処理管理部171は参照アドレスとサイズをアクセス権更新部173に指定し、アクセス権更新部173は参照アドレスとサイズで示される範囲のメモリ空間(検証対象領域に相当)に対してアクセス権の更新を行う。
次に、本変形例で想定するメモリマップについて説明する。図25は、本変形例におけるメモリマップの一例を示す図である。本変形例では、FWとMACはROM102aに格納されおり、FWはROM102aを参照するものとROM102aからRAM102bにロードされるものが存在し、MACはROM102aを参照するものとして説明を行う。ただし、MACはRAM102bにロードされてもよく、またFWも全てROM102aからRAM102bにロードされる構成をとってもよい。ここでは、FWのうち、異常処理プログラム、FW管理プログラム、セキュアプログラムはROM102aを参照し、通常処理プログラムのうちブロックAはROM102aから実行され、それ以外のブロックはROM102aからRAM102bにロードされるものとする。
図25に示す本変形例のメモリマップは、図20に示したメモリマップと比較して、RAM102b上にFWロード空間が存在する。FWロード空間は通常処理プログラムロード空間を持ち、さらに通常処理プログラムロード空間は1つ以上のFWブロックのロード空間(ブロックBロード空間、ブロックCロード空間)を持つ。ここで、ロードする必要のないブロックAについては特にRAM102b上にロード空間を設ける必要はないが、通常処理プログラムのロード空間として一律に確保されていてもよい。
図26は、本変形例におけるFWの領域設定の一例を示す図である。図26に示す本変形例におけるFWの領域設定では、図8に示した例と比較して、ROM102aのメモリ空間は実行するプログラムが配置されるため領域1でROに設定し、分割検証の対象である通常処理プログラムが配置されているメモリ空間を、領域3でNA,XNに設定する。一方、RAM102bのメモリ空間は読み書き可能であり、プログラム以外のデータも配置される可能性があることから領域2でRW,XNに設定する。そして、分割検証の対象である通常処理プログラムがロードされるメモリ空間を、領域4でNA,XNに設定する。この状態でFWを実行すると、未検証であるブロックA,B,Cのいずれかに属するプログラムが呼び出された場合に、領域3または領域4によるアクセス権違反が発生する。このアクセス権違反を受けて、セキュアプログラムはアクセス権違反を発生させたFWブロックに対してロードが必要な場合はロードを行い、検証し、検証したFWブロックのメモリ空間に対して新しい領域(領域5,6,7)を追加し、アクセスを可能とする。
次に、本変形例の処理フローを説明する。本変形例では、上述の第2実施形態と比較して、セキュリティ処理の処理フローに通常処理プログラムのロードが追加される。ここでは、セキュリティ処理情報174は図24、FWのメモリマップは図25、FWの領域設定は図26と同様とし、RAM102bについても適切に領域設定が行われているものとして、上述の第2実施形態との差分を説明する。
図27は、本変形例におけるセキュリティ処理の処理フローを示すフローチャートである。セキュアプログラムによるセキュリティ処理が開始されると、セキュリティ処理管理部171は、シグナルを発生させたアドレスが未検証領域か確認する(ステップS801)。そして、シグナルを発生させたアドレスが未検証領域の場合(ステップS802:Yes)、セキュリティ処理管理部171は、セキュリティ処理情報174を参照して、シグナルを発生させた未検証領域のロードの有無を確認する(ステップS804)。
ここで、シグナルを発生させた未検証領域のロードが必要な場合(ステップS805:Yes)、セキュリティ処理管理部171は、未検証領域のロードと改ざん検証をロード部175と改ざん検証部172に依頼する。ロード部175は、セキュリティ処理管理部171からロード元アドレスと参照アドレスとサイズを取得し、ロード元アドレスから参照アドレスに対して指定サイズ分のデータをロードする(ステップS806)。そして、ロード部175によるロード終了後、改ざん検証部172は、ロードしたデータ(未検証領域)に対して改ざん検証を行う(ステップS807)。一方、シグナルを発生させた未検証領域のロードが不要な場合(ステップS805:No)、未検証領域のロードは行われずに、改ざん検証が行われる(ステップS807)。
その他の処理フローは図12に示した処理フローと同様であるため、説明を省略する。なお、ロードした未検証領域の改ざん検証に失敗した場合、セキュリティ処理管理部171は、ロードしたデータを削除してもよく、そのままにしてもよい。
以上説明したように、本変形例によれば、データ移動と検証を同時に行うことができるため、メモリマップされていないメモリ102上のデータに対しても分割検証を行うことができ、図19に例示した第2実施形態の情報処理装置100Bのハードウェア構成に限らず、より多くの環境に適用することができる。ここで、メモリマップされていないメモリ102とは、例えば、SPI(Serial Peripheral Interface)接続されたNOR型フラッシュメモリやNAND型フラッシュメモリなどがある。
なお、本変形例では、IPLはロードを行わないものとして説明したが、IPLがロードを行ってもよい。その場合は、図21に示した処理フローにおいて、改ざん検証前にIPLが検証対象のプログラムのロードの有無を確認し、ロードが必要な場合はロードを行う。
(第2実施形態の変形例2)
本変形例は、アクセス権違反で検出した領域に対して暗号処理を行う例である。上述の第2実施形態の変形例1では、ROM102a上のデータをRAM102b上にロードしてから検証しアクセスを行っていたが、本変形例では、ROM102a上のデータをRAM102b上にロードしてから暗号処理してアクセスを行う。本変形例における暗号処理とは、データの秘匿を目的とした処理であり、AES(Advanced Encryption Standard)やDES(Data Encryption Standard)などの暗号アルゴリズムを用いてもよく、データのマスク処理やデータ配置の変更によるデータスクランブルなどの暗号アルゴリズムに基づかない処理を用いてもよい。
図28は、本変形例に係る情報処理装置100B−2の機能的な構成例を示すブロック図である。情報処理装置100B−2は、図23に示した第2実施形態の変形例1に係る情報処理装置100B−1と比較して、改ざん検証部172が暗号処理部176に置き換えられている。暗号処理部176は、アクセス権違反で検出した領域に対して暗号処理を行う機能モジュールである。
本変形例では、暗号処理部176による暗号処理が、暗号化されたデータの復号であるものとして説明を行う。本変形例において、FWが配置されているROM102a上のデータの一部は暗号化されていることを前提とし、暗号化されているROM102a上のデータはRAM102b上にロードし、復号してからアクセスを行う。ロードは暗号処理の有無に依存せず、例えば暗号化されていないROM102a上のデータをRAM102b上にロードしてそのままアクセスしてもよい。ここで、不揮発性主記憶メモリを用いる場合は、不揮発性主記憶メモリをROM102aとみなして、FWはRAM102b上の別のメモリ空間にロードされ復号されてもよく、不揮発性主記憶メモリの特定のメモリ空間をRAM102bとみなしてロードされ復号されてもよい。
図29は、本変形例におけるセキュリティ処理情報174の一例を示す図である。本変形例におけるセキュリティ処理情報174は、図24に示したセキュリティ処理情報174と比較して、暗号処理の有無が追加され、検証用データが削除され、検証状態はアクセス状態に変更されている。なお、本変形例では改ざん検証ではなく暗号処理を行うため、セキュリティ処理情報174は検証対象領域に関する情報はなく、セキュリティ処理の対象となるメモリ空間(以下、対象領域と呼ぶ)に関する情報となる。
暗号処理の有無は、暗号処理部176が暗号処理を行うか否かを示す情報であり、暗号処理有りの場合は暗号処理部176が暗号処理を行い、暗号処理無しの場合は暗号処理を行わない。暗号処理有りの領域のデータは暗号化されており、暗号処理部176が暗号処理を行うことで、その領域のデータが復号される。アクセス状態は、その領域に対してアクセスが発生したか否かを示す情報である。
なお、ロードの有無と暗号処理の有無は必ずしも一致させる必要はなく、ロード有りで暗号処理無しの組み合わせが存在してもよい。また、FWが不揮発性主記憶メモリとして動作するRAM102b上に配置されている場合は、ロード無しで暗号処理有りの組み合わせが存在してもよい。ただし、FWがNOR型フラッシュメモリやNAND型フラッシュメモリなどの所定の手順でのみ更新が可能なROM102aに配置されている場合は、暗号処理有りの場合は必ずロード有りとなる。
本変形例におけるセキュリティ処理管理部171は、アクセス権違反が発生したメモリ空間に対するデータロードの管理とセキュリティ処理情報174の管理に加えて、アクセス権違反が発生したメモリ空間に対する暗号処理の管理を行う。セキュリティ処理管理部171は、セキュリティ処理情報174の参照アドレスとアクセス権違反が発生したアドレスおよびサイズ、アクセス状態から、発生したアクセス権違反が対象領域のロードまたは暗号処理要求であると判断した場合に、対象領域のロードの有無を確認し、ロードが必要だった場合にロード部175に対してロードを依頼する。また、セキュリティ処理管理部171は、対象領域の暗号処理の有無を確認し、暗号処理有りの場合に、暗号処理部176に対して対象領域の暗号処理を依頼する。そして、セキュリティ処理管理部171は、暗号処理部176から暗号処理成功の通知があった場合または暗号処理を行わなかった場合に、対象領域に対するアクセス権の更新をアクセス権更新部173に依頼し、この対象領域がアクセス済みであることをセキュリティ処理情報174に記録する。
暗号処理部176は、セキュリティ処理管理部171から指定されたメモリ空間(対象領域)に対する暗号処理を行う。暗号処理部176が暗号アルゴリズムによる暗号処理を行う場合、暗号鍵は鍵管理ユニット110に保存してもよく、セキュリティ処理情報174に含まれる情報として保存してもよい。また、暗号処理は領域ごとに異なる暗号鍵を用いてもよく、領域ごとに異なるアルゴリズムを用いてもよい。本変形例では、暗号処理部176はソフトウェアで実現されているものとして説明を行うが、ハードウェアで実現されてもよく、暗号処理部176がハードウェアで実現された場合は、暗号鍵を暗号処理部176が保持してもよい。
次に、本変形例の処理フローを説明する。本変形例では、上述の第2実施形態の変形例1と比較して、セキュリティ処理の処理フローの改ざん検証が暗号処理に変更される。ここでは、セキュリティ処理情報174は図29、FWのメモリマップは図25、FWの領域設定は図26と同様とし、RAM102bについても適切に領域設定が行われているものとして、上述の第2実施形態の変形例1との差分を説明する。
図30は、本変形例におけるセキュリティ処理の処理フローを示すフローチャートである。セキュアプログラムによるセキュリティ処理が開始されると、セキュリティ処理管理部171は、シグナルを発生させたアドレスが対象領域か確認する(ステップS901)。ここで、シグナルを発生させたアドレスが対象領域でない、または対象領域だがアクセス済みの場合(ステップS902:No)、セキュリティ処理は失敗として(ステップS903)、処理を終了する。一方、シグナルを発生させたアドレスが対象領域かつ未アクセスの場合(ステップS902:Yes)、セキュリティ処理管理部171は、セキュリティ処理情報174を参照して、シグナルを発生させた対象領域のロードの有無を確認する(ステップS904)。
ここで、シグナルを発生させた対象領域のロードが必要な場合(ステップS905:Yes)、セキュリティ処理管理部171は、対象領域のロードをロード部175に依頼する。ロード部175は、セキュリティ処理管理部171からロード元アドレスと参照アドレスとサイズを取得し、ロード元アドレスから参照アドレスに対して指定サイズ分のデータをロードする(ステップS906)。一方、シグナルを発生させた対象領域のロードが不要な場合(ステップS905:No)、対象領域のロードは行われない。
次に、セキュリティ処理管理部171は、セキュリティ処理情報174を参照して、シグナルを発生させた対象領域の暗号処理の有無を確認する。そして、暗号処理が必要な場合(ステップS908:Yes)、セキュリティ処理管理部171は、対象領域の暗号処理を暗号処理部176に依頼する。暗号処理部176は、セキュリティ処理管理部171から参照アドレスとサイズを取得し、鍵管理ユニット119から暗号鍵を取得して、参照アドレスから指定サイズ分のデータを暗号処理する(ステップS909)。
ここで、暗号処理部176が暗号処理に失敗した場合(ステップS910:No)、セキュリティ処理は失敗として(ステップS903)、処理を終了する。一方、暗号処理部176が暗号処理に成功した場合は(ステップS910:Yes)、その後、暗号処理を行った対象領域に対するアクセス権の更新が行われ(ステップS911)、セキュリティ処理情報174のアクセス状態がアクセス済みに更新され(ステップS912)、セキュリティ処理は成功として(ステップS913)、処理を終了する。また、シグナルを発生させた対象領域の暗号処理が不要な場合は(ステップS908:No)、対象領域の暗号処理は行われず、アクセス権の更新(ステップS911)およびセキュリティ処理情報174のアクセス状態の更新(ステップS912)が行われ、セキュリティ処理は成功として(ステップS913)、処理を終了する。
以上説明したように、本変形例によれば、データの利用時に任意サイズのブロック単位でFWに対して暗号処理を行うことができるので、メモリ102上のデータを秘匿することができ、FWに対して改ざん検証を行う場合と同様に、意図しないデータの利用を有効に防止することができる。また、本変形例によれば、データ移動と暗号処理を同時に行うことができるため、メモリマップされていないメモリ102上のデータに対しても分割検証を行うことができ、図19に例示した第2実施形態の情報処理装置100Bのハードウェア構成に限らず、より多くの環境に適用することができる。
なお、本変形例では、IPLはロードと暗号処理を行わないものとして説明したが、IPLがロードと暗号処理を行ってもよい。その場合は、図21に示した処理フローにおいて、改ざん検証が暗号処理となり、IPLが検証対象のプログラムのロードの有無を確認してロードが必要な場合はロードを行い、暗号処理の有無を確認して暗号処理有りの場合は暗号処理を行う。
(第2実施形態の変形例3)
本変形例は、上述の第2実施形態の変形例1と変形例2とを組み合わせ、セキュア処理部170がロード部175と改ざん検証部172と暗号処理部176とを同時に持つ構成としたものである。この場合、セキュリティ処理情報174は、図24に示したセキュリティ処理情報174と、図29に示したセキュリティ処理情報174とをマージした構成となる。すなわち、本変形例におけるセキュリティ処理情報174は、参照アドレス、サイズ、検証用データ、付与するアクセス権、アクセス状態、ロード元アドレス、ロードの有無、改ざん検証の有無、暗号処理の有無、領域番号を持つ。また、セキュリティ処理管理部171は、セキュリティ処理情報174に基づいて、アクセス権違反が発生したメモリ空間に対してロード、改ざん検証、暗号処理の要否を判断して、これらの処理の実行を管理する。
また、ロード部175、改ざん検証部172、暗号処理部176以外にも、その他の処理部が組み合わされてもよい。その他の処理部とは、例えばデータの削除を行うデータ削除部など、どのような処理であってもよい。さらに、組み合わせた全ての処理が同時に実行される必要はなく、例えば、改ざん検証部172と暗号処理部176のみ動作する場合や、ロード部175のみが動作する場合があってもよい。この場合、情報処理装置100Bとして不要と判断された場合は、必要のない処理部を削除してもよい。
なお、上述の第2実施形態およびその変形例では、上述の第1実施形態と同様に、検証済みの検証対象領域または暗号処理を行った対象領域に対して新たにアクセス権を付与した領域を設定することを想定して説明したが、上述の第1実施形態の変形例と同様に、事前に割り当てられた領域内の補助領域を用いる構成としてもよい。
[第3実施形態]
上述の第1実施形態および第2実施形態ではシングルコアでの動作を想定しており、マルチコアでの動作を想定していなかった。本実施形態では、マルチコアでの動作を前提として、通常処理部140とセキュア処理部170を異なるプロセッサで実行することで、データ分離によるセキュリティ向上を実現するとともに、検証と実行を同時に実現し、検証発生による通常処理の中断を緩和する。ここで、本実施形態では2つのプロセッサコアによるマルチコア構成例を用いて説明を行うが、いくつのプロセッサコアを用いてもよい。また、マルチコア構成はホモジニアスなプロセッサコアを用いてもよく、ヘテロジニアスなプロセッサコアを用いてもよい。
図31は、本実施形態に係る情報処理装置100Cの機能的な構成例を示すブロック図である。情報処理装置100Cは、図2に示した第1実施形態に係る情報処理装置100Aの機能的な構成に対し、FW管理部160内にコア通知部163が追加されているとともに、セキュア処理部170内に予約検証部177が追加されている。
コア通知部163は、プロセッサコア101間の通知を管理する。プロセッサコア101間の通知とは、例えばプロセッサコアAとプロセッサコアBの2つのプロセッサコア101でプログラムを実行しているとき、プロセッサコアAのプログラムからプロセッサコアBのプログラムに対して行う通知を指す。コア通知部163は、別のコアで動作する指定されたプログラムに対して、プログラム切り替えの通知を行う。プログラム切り替えの通知には、プログラム切替部162から受け取った通知内容を含めることができる。なお、本実施形態では、コア通知部163はFW管理部160の一部として説明しているが、FWから独立したソフトウェアまたはハードウェアとして実現してもよい。
本実施形態におけるプログラム切替部162は、コア通知部163からプログラムの切り替え先を通知された場合は、その通知に応じて通常処理プログラムの所定のFWブロック、または異常処理プログラムに切り替える。また、切り替え先のプログラムが現在のプロセッサコア101が実行するプログラムではない場合、プログラム切替部162は、コア通知部163にプログラム切り替えを通知する。プログラム切替部162がコア通知部163と送受信する通知には、切り替え先のプログラムで必要な情報を含むことができる。切り替え先のプログラムで必要な情報とは、例えば、シグナルを発生させたアドレスやシグナルの発生原因、処理の成功、失敗などが挙げられる。
予約検証部177は、セキュリティ処理管理部171に対してアクセス権違反が発生していない検証対象領域に対する改ざん検証(以下、これを予約検証と呼ぶ)の管理を行う。予約検証部177は、セキュリティ処理管理部171がアクセス権違反によるセキュリティ処理を行っていないとき、セキュリティ処理管理部171に対して予約検証を依頼する。セキュリティ処理管理部171は、予約検証部177から指定された領域に対する改ざん検証を改ざん検証部172に依頼し、改ざん検証部172を用いて予約検証を行う。予約検証を行う領域は、所定の方法によって決定される。所定の方法とは、どのような方法を用いてもよい。例えば、予約検証部177が検証順序の記載されたリストを保持していてもよく、アクセス権違反による検証が発生した領域の前後の領域を検証するアルゴリズムを用いてもよい。
本実施形態におけるセキュリティ処理管理部171は、アクセス権違反が発生したメモリ空間に対するセキュリティ処理の管理とセキュリティ処理情報174の管理に加えて、予約検証部177からの依頼を受けて予約検証を行う。
図32は、本実施形態に係る情報処理装置100Cのハードウェア構成例を示すブロック図である。本実施形態に係る情報処理装置100Cは、図5に示した第1実施形態に係る情報処理装置100Aのハードウェア構成と比較して、プロセッサコア(CPU0)101−1とプロセッサコア(CPU1)101−2の2つのプロセッサコア101を備える。プロセッサコア(CPU0)101−1とプロセッサコア(CPU1)101−2は、それぞれ、命令実行ユニット(EXU)101−1a,101−2a、メモリ保護ユニット(MPU)101−1b,101−2b、メモリコントローラ101−1c,101−2cに加え、内部RAM(IRAM)101−1f,101−2fを持つ。
プロセッサコア(CPU0)101−1、プロセッサコア(CPU1)101−2、ROM102a、RAM102bは、外部バス104を介して、データ、信号、命令を互いに送受信可能とする。鍵管理ユニット(KSU)110は、アクセスが許可されたデバイスとのみデータ、信号、命令を互いに送受信可能とする。また、プロセッサコア(CPU0)101−1内の命令実行ユニット(EXU)101−1a、メモリ保護ユニット(MPU)101−1b、メモリコントローラ101−1c、内部RAM(IRAM)101−1fは、内部バス101−1dを介して、データ、信号、命令を互いに送受信可能とする。また、プロセッサコア(CPU1)101−2内の命令実行ユニット(EXU)101−2a、メモリ保護ユニット(MPU)101−2b、メモリコントローラ101−2c、内部RAM(IRAM)101−2fは、内部バス101−2dを介して、データ、信号、命令を互いに送受信可能とする。ここで、本実施形態では内部RAM(IRAM)101−1f,101−2fを用いた説明を行うが、必ずしも内部RAM(IRAM)101−1f,101−2fを用いる必要はない。
次に、本実施形態で想定するメモリマップについて説明する。図33は、本実施形態におけるメモリマップの一例を示す図である。本実施形態では、図6に示したメモリマップと比較して、メモリ空間上にCPU0 IRAMとCPU1 IRAMが存在する。CPU0 IRAMはプロセッサコア(CPU0)101−1の内部RAM(IRAM)101−1fであり、CPU1 IRAMはプロセッサコア(CPU1)101−2の内部RAM(IRAM)101−2fである。プロセッサコア(CPU0)101−1からはCPU1 IRAMにアクセスできず、プロセッサコア(CPU1)101−2からはCPU0 IRAMにアクセスできないため、プロセッサコア(CPU0)101−1で動作するプログラムはCPU0 IRAMにデータを配置すれば、プロセッサコア(CPU1)で動作するプログラムからはこのデータにアクセスすることができず、データ分離を実現することができる。また、RAM102bとROM102aは、プロセッサコア(CPU0)101−1とプロセッサコア(CPU1)101−2の双方からアクセスが可能である。本実施形態では、各プロセッサコア101−1,101−2の内部RAM(IRAM)101−1f,101−2fは、各プロセッサコア101−1,101−2で動作するプログラムのデータの保存に使用する。
本実施形態の予約検証は、セキュアプログラムがアクセス違反によるセキュリティ処理を行っていない場合にセキュアプログラムが行う。予約検証は、所定の方法により自動的に実行される。所定の方法とは、例えば、情報処理装置100Cの起動後に一度もアクセス権違反による検証が発生していない状態で実行してもよく、アクセス権違反による検証後に続けて実行してもよい。セキュアプログラムによる予約検証中にアクセス権違反によるセキュリティ処理が発生した場合、セキュアプログラムは予約検証を中止、中断してアクセス権違反によるセキュリティ処理を行ってもよく、予約検証を終了してからアクセス権違反によるセキュリティ処理を行ってもよい。実行中の予約検証が中止された場合、その予約検証は実行されなかったものとして扱う。一方、実行中の予約検証が中断された場合、予約検証部177は中断時の情報を保存しておき、アクセス権違反によるセキュリティ処理終了後に中断していた予約検証を再開する。
次に、本実施形態に係る情報処理装置100Cの処理フローを説明する。本実施形態では、上述の第1実施形態と比較して、起動時の処理フローとデータアクセス時の処理フローが異なり、予約検証時の処理フローが加わる。本実施形態では、情報処理装置100Cはプロセッサコア(CPU0)101−1から起動し、プロセッサコア(CPU0)101−1でセキュアプログラムを動作させ、プロセッサコア(CPU1)101−2で通常処理プログラム、FW管理プログラム、異常処理プログラムを動作させるものとして説明を行うが、各プログラムの動作するプロセッサコア101は入れ替わってもよい。また、プロセッサコア(CPU0)101−1でセキュアプログラムと異常処理プログラムが動作し、プロセッサコア(CPU1)101−2で通常処理プログラムとFW管理プログラムが動作するなど、各プロセッサコア101で動作するプログラムが変わってもよい。ここでは、セキュリティ処理情報174は図4、FWのメモリマップは図33、FWの領域設定は図8と同様とし、RAM102bについても適切に領域設定が行われているものとして、上述の第1実施形態との差分を説明する。
図34は、本実施形態に係る情報処理装置100Cの起動時の処理フローを示すフローチャートである。電源が投入されると、情報処理装置100Cは、プロセッサコア(CPU0)101−1でFWのセキュアプログラムの実行を開始する。
セキュアプログラムは、まず自己検証を行い(ステップS1001)、自己検証に成功した場合(ステップS1002:Yes)、プロセッサコア(CPU0)101−1とプロセッサコア(CPU1)101−2の初期化処理を行う(ステップS1004)。プロセッサコア(CPU0)101−1とプロセッサコア(CPU1)101−2の初期化処理では、例えば、ペリフェラルなどの初期化やプロセッサコア(CPU1)101−2へのクロックの供給など、所定の初期化処理が行われる。
次に、セキュアプログラムは、アクセス権の初期設定を行う(ステップS1005)。そして、セキュアプログラムは改ざん検証部172でROM102a上のFW管理プログラム、異常処理プログラム、最初に実行するFWブロック(ブロックA)の改ざん検証を行う(ステップS1006)。そして、これらの検証に成功した場合(ステップS1007:Yes)、セキュアプログラムは検証状態に基づき、メモリ空間に対するアクセス権の設定を行う(ステップS1009)。ここで、アクセス権の初期設定および検証状態に基づくアクセス権の設定は、プロセッサコア(CPU0)101−1とプロセッサコア(CPU1)101−2で共に行う必要がある。プロセッサコア(CPU0)101−1とプロセッサコア(CPU1)101−2のうちの一方の設定が他方に反映される場合は、プロセッサコア(CPU0)101−1とプロセッサコア(CPU1)101−2のうちの一方にのみ、アクセス権の初期設定および検証状態に基づくアクセス権の設定を行うようにしてもよい。
その後、セキュアプログラムは、プロセッサコア(CPU1)101−2が実行するプログラムを検証したFWブロック(ブロックA)に設定する(ステップS1010)。これにより、プロセッサコア(CPU1)101−2が、通常処理プログラムのFWブロック(ブロックA)の実行を開始し(ステップS1011)、起動処理が終了する。その他の処理フローは図9に示した処理フローと同様であるため、説明を省略する。
図35は、本実施形態に係る情報処理装置100Cのデータアクセス時の処理フローを示すフローチャートである。ここでは、プロセッサコア(CPU1)101−2で動作する通常処理プログラムのブロックAからブロックBに対してデータアクセスが発生した場合を想定して説明を行う。なお、以下では図10に示した処理フローと共通の処理については説明を省略し、図10に示した処理フローとは異なる部分のみを説明する。
メモリアクセスに対してアクセス権違反のシグナルが生成されると(ステップS1104)、プロセッサコア(CPU1)101−2では通常処理プログラムの実行が中断され、FW管理プログラムのシグナル解析部161がシグナルの発生原因を解析する(S1105)。そして、シグナルの発生原因がアクセス権違反である場合、プログラム切替部162はセキュアプログラムへの切り替えを行うため、コア通知部163にセキュリティ処理依頼を通知し、コア通知部163はセキュリティ処理依頼をセキュアプログラムに通知する(ステップS1106)。
次に、セキュアプログラムは予約検証中か確認し(ステップS1107)、予約検証中の場合(ステップS1108:Yes)、現在実行中の予約検証を中止する(ステップS1109)。予約検証の中止後、または予約検証中でない場合(ステップS1108:No)、セキュアプログラムはアクセス権違反によるセキュリティ処理を行う(ステップS1110)。そして、セキュリティ処理終了後、セキュリティ処理管理部171はコア通知部163に対してセキュリティ処理の成功または失敗を通知する。セキュリティ処理管理部171から通知を受けたコア通知部163は、プログラム切替部162にセキュリティ処理管理部171からの通知を伝える。その他の処理フローは図10に示した処理フローと同様であるため、説明を省略する。
図36は、本実施形態に係る情報処理装置100Cの予約検証時の処理フローを示すフローチャートである。本実施形態では、予約検証はセキュリティ処理が実行されていない状態で発生するものとし、予約検証中にセキュリティ処理が発生した場合は予約検証を中止してセキュリティ処理を行うものとして説明する。
予約検証の実行が開始されると、まず予約検証部177は、予約検証を行う領域を選定する(ステップS1201)。ここで、予約検証を行う領域がない場合(ステップS1202:No)、予約検証部177は予約検証成功として(ステップS1203)、処理を終了する。このとき、予約検証部177は次の予約検証を設定しないため、これ以降の予約検証は発生しない。
一方、予約検証を行う領域がある場合(ステップS1202:Yes)、予約検証部177は予約検証をセキュリティ処理管理部171に依頼する(ステップS1204)。予約検証はセキュリティ処理と同様の処理であり、セキュリティ処理管理部171はセキュリティ処理依頼として予約検証依頼を受け取る。そして、セキュリティ処理管理部171は予約検証を実行し、予約検証に失敗した場合(ステップS1205:No)、予約検証部177は予約検証の失敗に伴う事後処理を行い(ステップS1206)、処理を終了する。一方、予約検証に成功した場合(ステップS1205:Yes)、予約検証部177は次の予約検証を行うため、予約検証を行う領域の選定(ステップS1201)に戻る。
ここで、予約検証失敗に伴う事後処理では、セキュリティ処理における検証失敗処理と同様の操作を行ってもよく、また、フェールソフトを実現する操作を行ってもよい。フェールソフトを実現する操作とは、例えば、予約検証に失敗した領域を通常処理部140に通知することで、通常処理部140が予約検証に失敗した領域のデータへのアクセスを避けることを可能とする操作でもよい。この場合、情報処理装置100Cの機能としては制限を受けるが、情報処理装置100C自体は停止することなく、動作を継続することが可能となる。
また、セキュリティ処理管理部171は、検証に失敗した領域に対してアクセス禁止や実行禁止の領域設定を追加してもよい。この場合、予約検証失敗に伴う事後処理において、アクセス権更新部173が所定のアクセス権を設定する。
以上説明したように、本実施形態によれば、セキュリティ処理を専門に行うコアを設けることで通常処理とセキュリティ処理のデータ分離を実現し、予約検証により投機的に検証対象領域の検証を行うことで未検証領域の検証による通常処理の中断を緩和することができる。さらに、改ざんされている領域を使用前に検出できることから、情報処理装置100Cの機能としては制限を受けるが、情報処理装置100C自体は停止することなく動作を継続するフェールソフトを実現することができる。
なお、本実施形態では、上述の第1実施形態と同様にセキュアプログラムから起動する例を用いて説明を行ったが、上述の第2実施形態のようにIPLから起動する構成としてもよい。また、検証対象領域のアクセス権を更新する方法として、上述の第1実施形態の変形例と同様に補助領域を用いてもよく、また、上述の第2実施形態の変形例1、変形例2、変形例3のように、セキュリティ処理はロード、改ざん検証、暗号処理、その他の処理を組み合わせて用いる構成であってもよい。
[第4実施形態]
上述の第1実施形態および第2実施形態では、検証対象領域に対するデータアクセスが発生しない限り検証対象領域は検証されないことから、情報処理装置100A,100Bを長期間動作させたとしても検証対象領域の全てにアクセスが発生するとは限らないため、検証対象領域の全てが必ず検証されることを保証できなかった。また、上述の第3実施形態は、マルチコアによって予約検証部177によりデータアクセスが発生しなくても検証対象領域の検証が可能であるが、シングルコアは想定していなかった。本実施形態では、シングルコアであっても予約検証開始のシグナルを受けて予約検証を行うことで、検証対象領域の全てが必ず検証されることを保証できる構成とする。
図37は、本実施形態に係る情報処理装置100Dの機能的な構成例を示すブロック図である。情報処理装置100Dは、図2に示した第1実施形態に係る情報処理装置100Aの機能的な構成に対し、予約検証シグナル生成部301を持つ予約検証シグナル生成装置300が追加されているとともに、セキュア処理部170内に予約検証部177が追加されている。
予約検証シグナル生成部301は、セキュアプログラムで予約検証を開始するための予約検証シグナルを生成する。予約検証シグナルの生成は、所定の予約検証生成ルールに従う。本実施形態では、予約検証生成ルールを予約検証部177が設定するものとして説明を行うが、セキュリティ処理管理部171が設定してもよく、またその他の方法によって設定されてもよい。加えて、予約検証シグナル生成部301はソフトウェアで実現されてもよく、ハードウェアで実現されてもよい。さらに予約検証シグナル生成部301がソフトウェアで実現されている場合、FWの一部として実現されてもよく、FWとは独立した別のプログラムとして実現されていてもよい。
予約検証部177は、上述の第3実施形態における予約検証部177と同様の機能を持つ。
本実施形態におけるシグナル解析部161は、アクセス権管理装置120のシグナル生成部122が生成したシグナルに加えて、予約検証シグナル生成装置300の予約検証シグナル生成部301が生成したシグナルを受け取り、その原因を解析する。シグナル解析の結果は、プログラム切替部162に通知される。
図38は、本実施形態に係る情報処理装置100Dのハードウェア構成例を示すブロック図である。本実施形態に係る情報処理装置100Dは、図5に示した第1実施形態に係る情報処理装置100Aのハードウェア構成と比較して、タイマ105が追加されている。プロセッサコア(CPU0)101、ROM102a、RAM102b、タイマ105は、外部バス104を介して、データ、信号、命令を互いに送受信可能とする。鍵管理ユニット(KSU)110は、アクセスが許可されたデバイスとのみデータ、信号、命令を互いに送受信可能とする。本実施形態では、タイマ105を図37に示した予約検証シグナル生成装置300として用いるものとする。そのため、予約検証シグナルはタイマ割り込みによって発生する。
次に、本実施形態に係る情報処理装置100Dの処理フローを説明する。本実施形態では、上述の第1実施形態と比較して、起動時の処理フローとデータアクセス時の処理フローとシグナル発生時の処理フローが異なり、予約検証シグナル発生時の処理フローと予約検証時の処理フローが加わる。なお、予約検証時の処理フローは上述の第3実施形態(図36)と同様であるため、説明を省略する。ここでは、セキュリティ処理情報174は図4、FWのメモリマップは図6、FWの領域設定は図8と同様とし、RAM102bについても適切に領域設定が行われているものとして、第1実施形態との差分を説明する。
図39は、本実施形態に係る情報処理装置100Dの起動時の処理フローを示すフローチャートである。なお、以下では図9に示した処理フローと共通の処理については説明を省略し、図9に示した処理フローとは異なる部分のみを説明する。
ROM102a上のFW管理プログラム、異常処理プログラム、最初に実行するFWブロック(ブロックA)の改ざん検証に成功し(ステップS1307:Yes)、検証状態に基づくアクセス権の設定後(ステップS1309)、セキュアプログラムの予約検証部177は、予約検証シグナル生成部301に予約検証生成ルールを設定する(ステップS1310)。本実施形態の場合、予約検証シグナル生成装置300はタイマ105であることから、所定の時間後に予約検証を開始するタイマ割り込みを発生させるようタイマ105を設定する。ここで、予約検証生成ルールの設定は、検証状態に基づくアクセス権情報の設定前でもよく、また遷移先を検証したFWブロック(ブロックA)に設定した後でもよい。その他の処理フローは図9に示した処理フローと同様であるため、説明を省略する。
図40は、本実施形態に係る情報処理装置100Dのデータアクセス時の処理フローを示すフローチャートである。なお、以下では図10に示した処理フローと共通の処理については説明を省略し、図10に示した処理フローとは異なる部分のみを説明する。
シグナルの発生原因がアクセス権違反である場合、プログラム切替部162は、プロセッサコア(CPU0)101が実行するプログラムをセキュアプログラムに切り替える(ステップS1406)。そして、セキュアプログラムのセキュリティ処理管理部171は、セキュアプログラムが予約検証中か確認する(ステップS1407)。ここで、セキュアプログラムが予約検証中であった場合(ステップS1408:Yes)、セキュリティ処理管理部171は実行中の予約検証を中止し(ステップS1409)、予約検証部177に対して実行中の予約検証の中止を通知する。
予約検証部177は、予約検証の中止の通知を受けると、予約検証シグナル生成部301に対して予約検証生成ルールを再設定する(ステップS1410)。そして、予約検証生成ルールの再設定後、またはセキュアプログラムが予約検証中でなかった場合(ステップS1408:No)、セキュアプログラムはセキュリティ処理を実行する(ステップS1411)。その他の処理フローは図10に示した処理フローと同様であるため、説明を省略する。
図41は、本実施形態に係る情報処理装置100Dの予約検証シグナル発生時の処理フローを示すフローチャートである。まず、予約検証シグナル生成部301は、所定の方法に従って予約検証シグナルを生成する(ステップS1501)。所定の方法とは、例えば予約検証シグナル生成装置300がタイマ105であった場合、タイムアウトによるタイマ割り込みであり、その他の方法を用いてもよい。
予約検証シグナルが生成されると、プロセッサコア(CPU0)101では、通常処理プログラムの実行が中断され、FW管理プログラムのシグナル解析部161がシグナルの発生原因を解析する(ステップS1502)。そして、シグナルの発生原因が予約検証である場合、プログラム切替部162は、プロセッサコア(CPU0)101が実行するプログラムをセキュアプログラムに切り替えて、予約検証開始をセキュアプログラムへ通知する(ステップS1503)。
セキュアプログラムのセキュリティ処理管理部171は、セキュアプログラムがアクセス権違反によるセキュリティ処理中か確認する(ステップS1504)。そして、セキュアプログラムがアクセス権違反によるセキュリティ処理中であった場合(ステップS1505:Yes)、セキュリティ処理管理部171は予約検証を中止して(ステップS1506)、予約検証部177に対して予約検証の中止を通知する。そして、予約検証部177は、予約検証シグナル生成部301に対して予約検証生成ルールを再設定する(ステップS1507)。
一方、セキュアプログラムがアクセス権違反によるセキュリティ処理中でなかった場合(ステップS1505:No)、セキュアプログラムは予約検証を実行する(ステップS1508)。そして、セキュアプログラムによる予約検証が成功しなかった場合(ステップS1509:No)、プログラム切替部162はプロセッサコア(CPU0)101で実行するプログラムを異常処理プログラムに切り替え(ステップS1510)、異常処理プログラムを実行する。一方、セキュアプログラムによる予約検証が成功した場合(ステップS1509:Yes)、プログラム切替部162はプロセッサコア(CPU0)101で実行するプログラムを中断していた通常処理プログラムに切り替え、処理を終了する。
なお、予約検証が成功しなかった場合に実行される異常処理プログラムは、第1実施形態、第2実施形態、第3実施形態に示すものと同様とし、第3実施形態に例示したようにフェールソフトを実現するようなプログラムであってもよい。フェールソフトを実現するプログラムを用いる場合、セキュアプログラムは通常処理プログラムに対して予約検証に失敗した領域を通知し、プログラム切替部162はプロセッサコア(CPU0)101で実行するプログラムを中断していた通常処理プログラムに切り替える。
図42は、本実施形態に係る情報処理装置100Dのシグナル発生時の処理フローを示すフローチャートである。図40および図41では、シグナルの発生原因は予約検証であるものとして説明したが、シグナル解析部161は情報処理装置100Dで発生するその他のシグナルの解析機能を持つ。
まず、シグナルが検出されると(ステップS1601)、プロセッサコア(CPU0)101では通常処理プログラムの実行が中断され、FW管理プログラムのシグナル解析部161がシグナルの発生原因を解析する(ステップS1602)。ここで、シグナルの発生原因がアクセス権違反である場合(ステップS1603:Yes)、プログラム切替部162はプロセッサコア(CPU0)101で実行するプログラムをセキュアプログラムに切り替え、セキュアプログラムでセキュリティ処理を行う(ステップS1604)。
一方、シグナルの発生原因がアクセス権違反でない場合(ステップS1603:No)、さらにシグナルの発生原因が予約検証か確認し、シグナルの発生原因が予約検証である場合(ステップS1605:Yes)、プログラム切替部162が予約検証開始をセキュアプログラムへ通知し(ステップS1606)、セキュアプログラムで予約検証を行う。一方、シグナルの発生原因が予約検証でない場合(ステップS1605:No)、シグナル解析部161はシグナルに基づく所定の処理を行う(ステップS1607)。
以上説明したように、本実施形態によれば、任意のタイミングでアクセスの発生していない領域に対する検証を発生させることで、シングルコアにおいても全ての検証対象領域に対する検証を保証することができる。さらに、上述の第3実施形態と同様に、改ざんされている領域を使用前に検出できることから、情報処理装置100Dの機能としては制限を受けるが、情報処理装置100D自体は停止することなく動作を継続するフェールソフトを実現することができる。
なお、本実施形態では、上述の第1実施形態と同様にセキュアプログラムから起動する例を用いて説明を行ったが、上述の第2実施形態のようにIPLから起動する構成としてもよい。また、検証対象領域のアクセス権を更新する方法として、上述の第1実施形態の変形例と同様に補助領域を用いてもよく、また、上述の第2実施形態の変形例1、変形例2、変形例3のように、セキュリティ処理はロード、改ざん検証、暗号処理、その他の処理を組み合わせて用いる構成であってもよい。
[第5実施形態]
上述の各実施形態では、情報処理装置に設定可能な領域の上限を考慮していなかった。そのため、FWの分割数は、設定可能な領域数に制限を受けてしまう。本実施形態では、領域追加時にアクセス権が設定可能な空き領域が存在しなかった場合に、領域の再設定を行うことで空き領域を確保する構成とする。
図43は、本実施形態に係る情報処理装置100Eの機能的な構成例を示すブロック図である。情報処理装置100Eは、図2に示した第1実施形態に係る情報処理装置100Aの機能的な構成に対し、領域再設定部178が追加されている。領域再設定部178は、領域設定の見直しと再設定を行う機能モジュールである。
本実施形態におけるセキュリティ処理管理部171は、アクセス権違反が発生したメモリ空間に対するセキュリティ処理の管理とセキュリティ処理情報174の管理に加えて、領域再設定部178に空き領域の確保を依頼する。本実施形態では、アクセス権が設定可能な空き領域が存在しなかった場合に空き領域の確保依頼を行う例を用いて説明するが、いつ依頼を行ってもよく、例えば、空き領域が指定された個数以下になった場合に行ってもよい。また、上述の第3実施形態や第4実施形態のように予約検証を行う構成であれば、予約検証時に空き領域の確保依頼を行ってもよい。
領域再設定部178は、領域設定の見直しと再設定を行い、アクセス権が設定可能な領域を確保する。領域再設定部178は、セキュリティ処理管理部171から空き領域の確保依頼を受けると、セキュリティ処理情報174を取得して、所定の方法により領域の再設定を行い、アクセス権管理部121に新しい領域設定を通知する。
ここで、図44を参照してアクセス権が設定可能な領域を確保するための領域の再設定方法について例示する。図44は、領域の再設定方法を説明する図であり、(a)は領域設定の例、(b)は見直し前の領域設定に対応するセキュリティ処理情報の例を示している。ここでは、通常処理プログラムはブロックA,B,C,Dの4つのFWブロックに分割されており、ブロックA,B,Dはすでに検証されているものとする。ブロックA,B,Dの領域は動的に割り当てられ(領域3、領域4、領域5)、未検証のブロックCには領域が割り当てられていない。
アクセス権が設定可能な領域を確保するには、現在設定されている領域をまとめる方法と、現在設定されている領域を全て無効にする方法とが考えられる。
現在設定されている領域をまとめる方法としては、付与するアクセス権が同じ連続する検証済み領域を1つの領域にまとめる方法と、未検証領域を強制的に検証することで付与するアクセス権が同じ連続する領域を作り出す方法がある。付与するアクセス権が同じ連続する検証済み領域を1つの領域にまとめる方法とは、図44(a)の見直し後の領域設定1に示すように、領域3と領域4をまとめて領域3とすることである。一方、未検証領域を強制的に検証することで付与するアクセス権が同じ連続する領域を作り出す方法とは、図44(a)の見直し後の領域設定2に示すように、未検証であるブロックCを検証することで、付与するアクセス権が同じ連続する領域ブロックA,B,C,Dを作り出し、これらのメモリ空間を領域3とすることである。見直し後の領域設定1では領域4がアクセス権の設定が可能な領域となり、見直し後の設定2では領域4と領域5がアクセス権の設定が可能な領域となる。
現在設定されている領域を全て無効にする方法としては、任意のタイミングでセキュリティ処理情報174の検証状態をリセットし、領域の再割り当てを行う方法がある。図44の例では、検証状態のリセットが発生すると、図44(b)に示すセキュリティ処理情報174のブロックA,B,Dの検証状態が未に更新される。ここで、例えばブロックBに対するアクセスが発生するとブロックBは再検証され、図44(a)の見直し後の領域設定3のように、ブロックBに対して領域3が割り当てられる。このとき、見直し後の領域設定3では領域4と領域5がアクセス権の設定が可能な領域となる。
ここで、現在設定されている領域をまとめる方法は、一度検証したブロックに対する再検証が発生しないので、領域の再設定による性能ペナルティは低い。しかし、付与するアクセス権が同じ連続する領域が必ず存在するとは限らないため、アクセス権が設定可能な領域が確保できない可能性がある。一方、現在設定されている領域を全て無効にする方法は、一度検証したブロックに対する再検証が発生するため、領域の再設定による性能ペナルティが大きい。しかし、アクセス権が設定可能な領域が必ず確保できる。現在設定されている領域を全て無効にする方法の性能ペナルティ削減方法としては、検証状態はリセットせず領域番号のみをリセットし、検証済みだが再検証が発生したブロックに対しては検証を省略して領域を割り当てる方法がある。
また、領域の再設定方法は複数の方法を用いてもよく、例えば、現在設定されている領域をまとめる方法を行い、アクセス権が設定可能な領域が確保できなかった場合に、現在設定されている領域を全て無効にする方法を用いてもよい。この他にも、例えば、アクセス頻度の低い領域を無効化する方法や、予め領域に優先度を設定しておき、優先度の低い領域を優先的に無効化する方法などがあり、領域の再設定方法は例示する方法と異なるどのような方法を用いてもよい。
次に、本実施形態に係る情報処理装置100Eの処理フローを説明する。本実施形態では、上述の第1実施形態と比較して、セキュリティ処理の処理フローが異なり、領域の再設定の処理フローが追加される。ここでは、セキュリティ処理情報174は図4、FWのメモリマップは図6、FWの領域設定は図8と同様とし、RAM102bについても適切に領域設定が行われているものとして、第1実施形態との差分を説明する。また、アクセス権を設定する領域は動的に決定されるものとして説明を行う。
図45は、本実施形態におけるセキュリティ処理の処理フローを示すフローチャートである。なお、以下では図12に示した処理フローと共通の処理については説明を省略し、図12に示した処理フローとは異なる部分のみを説明する。
改ざん検証部172が改ざん検証に成功した場合(ステップS1705:Yes)、セキュリティ処理管理部171は、アクセス権が設定可能な領域の有無を確認する(ステップS1706)。ここで、アクセス権が設定可能な領域がない場合(ステップS1707:No)、セキュリティ処理管理部171は領域再設定部178に対して、空き領域を確保するための領域の再設定を依頼する。領域再設定部178は、セキュリティ処理管理部171からの依頼を受けて、所定のアルゴリズムに基づく領域の再設定を行う(ステップS1708)。
ここで、領域再設定部178による領域の再設定に失敗した場合(ステップS1709:No)、セキュリティ処理は失敗として(ステップS1703)、処理を終了する。一方、領域の再設定に成功(ステップS1709:Yes)またはアクセス権が設定可能な領域がある場合(ステップS1707:Yes)、セキュリティ処理管理部171は、検証対象領域に対するアクセス権の更新を行う(ステップS1710)。その他の処理フローは図12に示した処理フローと同様であるため、説明を省略する。なお、本実施形態で追加された空き領域の確保に関する一連の処理は、改ざん検証部172による未検証領域に対する改ざん検証の前に行ってもよい。
図46は、本実施形態における領域の再設定の処理フローを示すフローチャートである。領域再設定部178は、セキュリティ処理管理部171から領域の再設定の依頼を受けて、領域の再設定を開始する。
領域再設定部178は、まず、所定の再設定方法に従って領域の再設定を実行し(ステップS1801)、アクセス権が設定可能な領域の有無を確認する(ステップS1802)。そして、アクセス権が設定可能な領域がない場合(ステップS1802:No)、再設定は失敗として(ステップS1804)、処理を終了する。
一方、アクセス権が設定可能な領域がある場合(ステップS1802:Yes)、領域再設定部178は、再設定結果に基づきアクセス権管理部121に対して各領域のアクセス権の設定を依頼する。アクセス権管理部121は、依頼されたアクセス権を設定する(ステップS1805)。そして、領域再設定部178は、セキュリティ処理情報174に再設定結果を反映させ(ステップS1806)、再設定は成功として(ステップS1807)、処理を終了する。
以上説明したように、本実施形態によれば、アクセス権が設定可能な空き領域が存在しない場合でも、領域の再設定を行うことで空き領域を確保することができる。さらに、情報処理装置100Eに設定可能な領域数以上にFWを分割した場合でも、動的に領域設定が変更可能であるため、柔軟な分割検証を実現することができる。
なお、本実施形態では、上述の第1実施形態と同様にセキュアプログラムから起動する例を用いて説明を行ったが、上述の第2実施形態のようにIPLから起動する構成としてもよい。また、検証対象領域のアクセス権を更新する方法として、上述の第1実施形態の変形例と同様に補助領域を用いてもよく、また、上述の第2実施形態の変形例1、変形例2、変形例3のように、セキュリティ処理はロード、改ざん検証、暗号処理、その他の処理を組み合わせて用いる構成であってもよい。
さらに、本実施形態を上述の第3実施形態や第4実施形態の予約検証と組み合わせ、アクセス権が設定可能な空き領域がなくなる前に領域の再設定を行うことで、アクセス権違反による検証発生時の性能ペナルティを削減することができる。
以上述べた少なくとも一つの実施形態によれば、ローエンド情報機器であっても適切な分割検証を実現できる。
以上、本発明の実施形態を説明したが、ここで説明した実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。ここで説明した新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。ここで説明した実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。