【解決手段】プライマリOSのメモリ・イメージがアクティブ状態でセカンダリOSのメモリ・イメージがノンアクティブ状態である。プライマリOSからセカンダリOSに切り換える際に、ランタイム・イメージ164を作成してダイジェストPを計算し暗号化する(C)。つぎにセカンダリOSからプライマリOSに切り換える際に、それまで停止していたランタイム・イメージのダイジェストを計算し、復号したダイジェストPと計算したダイジェストを比較して一致するときだけプライマリOSに切り換える。
前記暗号化するステップと前記退避するステップと前記復号するステップと前記比較するステップを、システム・ファームウェアが前記コンピュータに実現させる請求項1に記載の方法。
前記暗号化するステップと前記復号するステップを、前記システム・ファームウェアだけがアクセスできる不揮発性メモリに格納した共通鍵を利用するステップを含む請求項3に記載の方法。
前記第2の動作環境から前記第1の動作環境への切換操作に応じて前記第2の動作環境を構成する第2のメモリ・イメージの少なくとも一部の同一性の検証が可能な代表ファイルを暗号化するステップと、
前記第2のメモリ・イメージを所定の場所に退避するステップと、
前記第1の動作環境から前記第2の動作環境への切換操作に応じて前記暗号化した代表ファイルを復号するステップと、
前記退避した第2のメモリ・イメージから抽出した代表ファイルと前記復号した代表ファイルを比較するステップと
を有する請求項1に記載の方法。
前記システム・ファームウェアが前記復号した代表ファイルとノンアクティブ状態で維持していた前記メモリ・イメージから抽出した代表ファイルを比較する機能を前記コンピュータに実現させるステップを有する請求項12に記載の方法。
前記システム・ファームウェアからの要求でPCR[0]とPCR[4]が記憶するPCR値を使って前記代表ファイルを暗号化するキーの暗号化および復号をするセキュリティ・チップ(TPM)を有する請求項18に記載のコンピュータ。
【背景技術】
【0002】
コンピュータは、搭載するソフトウェアの改変やマルウェアの埋め込みなどのさまざまな攻撃に晒されるため、攻撃を受けたときにはそれを検出して、適切な対応をとる必要がある。コンピュータの電源が起動したときに、BIOS、ブート・ローダ、オペレーティング・システム(OS)、およびアプリケーションといった順番でブート・プログラムがロードされる。これらのブート・プログラムがすべて製造当初から改変されておらず、かつ、ロードの順番も変更されていなければ、少なくともブートが完了した時点での動作環境は安全であるといえる。
【0003】
ブート・プログラムの改変およびブートの順序を検証する方法に、TCG(Trusted Computing Group)が使用を策定したTPM(Trusted Platform Module)と呼ばれるセキュリティ・チップを信頼の基礎とした、Trust Bootという技術が知られている。Trust Bootでは、物理的に書き換えの保護がされているCRTM(Core Root of Trust Measurement)というコードを起点として、順番につぎにブートするコードについて計算したハッシュ値をTPMが搭載するPCR(Platform Configuration Register)に記録していく。
【0004】
PCRはコンピュータの電源を再起動するまでリセットすることはできない。プログラムは、PCRが記録するPCR値を任意の値に書き替えることはできないが、必要なときに読み出すことができる。あるプログラムについて任意のタイミングで実行する際に計算したPCR値が、PCRが記録しているPCR値に一致すれば、当該プログラムはPCRにPCR値が書き込まれた時点から変更がないことを確認することができる。
【0005】
また、UEFI(Unified Extensible Firmware Interface)フォーラムは、BIOSに代わってまたはBIOSに加えて使用する新しいシステム・ファームウェア(UEFIファームウェア)の仕様を策定した。UEFIファームウェアは、Secure BootというOSの改変を検出したときにブートを停止する安全対策をサポートする。Secure Bootでは起動時にUEFIファームウェアが、起動ディスクが格納するOSをロードするためのブート・ローダにハンドオフして制御を渡す。
【0006】
ブート・ローダは、OSのブート・イメージのシステム・メモリへのロードをUEFIファームウェアに依頼する。UEFIファームウェアは、ブート・ローダに付されたディジタル証明を製造者の公開鍵で復号し、ブート・ローダから計算したその時点のハッシュ値と比較して一致しない場合はブートを停止する。OSを起動ディスクに最初に格納したときのブート・ローダとそれ以降のブート時におけるブート・ローダの同一性が完全に保持されていれば、ブート先を誘導するマルウェアの埋め込みがなく正規のOSをロードしているといえる。
【0007】
特許文献1は、OSがハイバネーション・ファイルを暗号化して、レジュームのときに復号することで、ハイバネーション・ファイルを安全に維持する発明を開示する。特許文献2は、複数のOSを搭載したコンピュータにおいて動作するOSを切り換える発明を開示する。同文献には、起動時に複数のOSのブート・ローダに順次アクセスして、システムに共存するすべてのOSを、割り当てられたメイン・メモリの論理メモリ・ブロックにロードすることが記載されている。また動作するOSを切り換える際にサスペンドすることが記載されている。
【発明の概要】
【発明が解決しようとする課題】
【0009】
搭載する複数のOSのいずれかに切り換えて動作するマルチOSの動作環境を実現する1つの方法では、選択したいずれかのOSをブートして実行し、切り換えるときは当該OSをパワー・オフ状態にしてから別のOSをブートすることができる。しかし、この方法は動作環境の切り換えに時間を費やす。これに対して特許文献2のように分割した論理メモリ・ブロックに同時に複数のOSをロードしておき、停止するOSのメモリ・イメージを論理メモリ・ブロックに残しておけば短時間で切り換えができるため便利である。
【0010】
あるいは、システム・メモリを論理メモリ・ブロックに分けないで、動作を停止するOSのメモリ・イメージをハイバネーション・ファイルのように不揮発性メモリに退避して、一方のOSから他方のOSへレジュームと退避を繰り返して切り換えることでもパワー・オフ状態を経由して切り換えるよりも切り換え時間を短縮することができる。さらに、同一のハードウェア環境の上に仮想環境を構築して複数のOSを動作させて短時間で切り換えることもできる。以後、パワー・オフ状態を経由しない動作環境の切り換えを高速切換ということにする。
【0011】
高速切換を行うと、システム・メモリまたはディスク・ドライブのような不揮発性記憶装置には、一方のOSが動作している間、動作を停止したレジューム可能なOSのメモリ・イメージ(退避ファイル)が残っている。先のTrust BootやSecure Bootでは、ブートが完了した時点でのソフトウェアの一貫性は保証できる。しかしそれ以後は、動作しているOSは自らのメモリ空間に存在するメモリ・イメージを、自身でまたはウィルス検知プログラムなどで管理して保護することができるが、動作を停止したシステム・メモリまたはディスク・ドライブなどの異なるメモリ空間に存在する退避ファイルを同様の方法で保護することはできない。
【0012】
マルチOSの動作環境では動作環境を切り換えるたびに、システム・メモリやディスク・ドライブに退避ファイルが残るため退避ファイルの一貫性を検証することが必要になってきた。しかし、マルチOSの動作環境で退避ファイルの一貫性を検証する場合でも高速切換を阻害しないようにする必要がある。また、一貫性の検証は高い信頼性が確保された環境下で行う必要がある。さらに動作環境を構成するOSに変更を加えないで一貫性の検証ができれば、任意のOSに適用できるため有益である。
【0013】
そこで本発明の目的は、マルチOSの動作環境で動作するコンピュータのセキュリティ機能を強化する方法を提供することにある。さらに本発明の目的は、退避ファイルの一貫性を信頼性の高い環境下で実現する方法を提供することにある。さらに本発明の目的は、短時間での動作環境の切り換えを可能にしながら退避ファイルの一貫性を検証する方法を提供することにある。さらに本発明の目的は、OSに変更を加えないようにしながら退避ファイルの一貫性を検証する方法を提供することにある。さらに本発明の目的は、そのような方法を実現するコンピュータ・プログラム、およびコンピュータを提供することにある。
【課題を解決するための手段】
【0014】
本発明は、複数の動作環境のいずれかで動作することが可能なコンピュータにおいて、退避ファイルの一貫性を検証する方法を提供する。第1の動作環境から第2の動作環境への切換操作に応じて第1の動作環境を構成する第1のメモリ・イメージの少なくとも一部の同一性の検証が可能な代表ファイルを暗号化する。つぎに、第1のメモリ・イメージを所定の場所に退避する。つぎに第2の動作環境から第1の動作環境への切換操作に応じて暗号化した代表ファイルを復号する。つづいて退避した第1のメモリ・イメージから抽出した代表ファイルと復号した代表ファイルを比較する。
【0015】
上記構成により、第2の動作環境から第1の動作環境への切換操作のときにそれまで退避していた第1のメモリ・イメージの少なくとも一部について、代表ファイルを通じて一貫性を検証することができる。代表ファイルは、第1のメモリ・イメージの少なくとも一部の同一性の検証が可能なファイルであればよく、第1のメモリ・イメージの全体、カーネル部分、またはランタイム・イメージとすることができる。また代表ファイルは、第1のメモリ・イメージの全体または一部からハッシュ計算したダイジェストでもよい。暗号化した代表ファイルは、第1のメモリ・イメージと同じ場所に退避してもよいし、異なる場所に退避してもよい。暗号化と、退避と、復号と、比較をシステム・ファームウェアが行えば、OSの動作環境よりも安全に一貫性を検証しながら動作環境を切り換えることができる。また、OSに変更を加える必要もなくなる。
【0016】
このとき暗号化は、システム・ファームウェアのSMIハンドラしかアクセスできないSMRAM領域に記憶した暗号鍵を利用しておこなえば、暗号鍵の安全を確保することができる。このとき、システム・ファームウェアを格納する揮発性メモリに公開鍵と暗号鍵を記憶し、復号した秘密鍵をSMRAM領域に記憶し、公開鍵で代表ファイルを復号することができる。したがって暗号鍵は暗号化しているため、セキュリティ対策をした不揮発性メモリを用意しなくても安全に保管することができて便利である。
【0017】
秘密鍵の暗号化と復号は、セキュリティ・チップ(TPM)がシステム・ファームウェアの一貫性を検証するPCR[0]とPCR[4]のPCR値に関連づけて行うことができる。暗号化は、システム・ファームウェアだけがアクセスできる不揮発性メモリに格納した共通鍵を利用して行ってもよい。所定の場所は、システム・メモリの第2の動作環境が動作する物理アドレス空間から区分したアドレス空間とすることができる。
【0018】
所定の場所は、第1の動作環境および第2の動作環境のブート・イメージを格納するディスク・ドライブとすることもできる。第2の動作環境から第1の動作環境への切換操作に応じて第2の動作環境を構成する第2のメモリ・イメージの少なくとも一部の同一性の検証が可能な代表ファイルを暗号化する。第2のメモリ・イメージを所定の場所に退避する。第1の動作環境から前記第2の動作環境への切換操作に応じて、暗号化した代表ファイルを復号する。退避した第2のメモリ・イメージから抽出した代表ファイルと復号した代表ファイルを比較する。
【発明の効果】
【0019】
本発明により、マルチOSの動作環境で動作するコンピュータのセキュリティ機能を強化する方法を提供することができた。さらに本発明により、退避ファイルの一貫性を信頼性の高い環境下で実現する方法を提供することができた。さらに本発明により、短時間での動作環境の切り換えを可能にしながら退避ファイルの一貫性を検証する方法を提供するができた。さらに本発明により、OSに変更を加えないようにしながら退避ファイルの一貫性を検証する方法を提供することができた。さらに本発明により、そのような方法を実現するコンピュータ・プログラム、およびコンピュータを提供することができた。
【発明を実施するための形態】
【0021】
[コンピュータの概略構成]
図1は、ノートブック型またはデスクトップ型のコンピュータ10のハードウェアの概略構成を説明するための機能ブロック図である。
図2は、コンピュータ10が実装するソフトウェアの構成を説明するための図である。多くのハードウェアおよびソフトウェアの構成は周知であるため、本明細書では本発明の理解に必要な範囲で各要素を説明する。
図1においてチップセット13はさまざまな規格のインターフェース機能を備えており、CPU11、システム・メモリ(RAM)15、GPU17、HDDまたはSSDなどのディスク・ドライブ21、ファームウェアROM23、ネットワーク・モジュール25、ロック可能な不揮発性メモリ(NVRAM)27、TCGが規定するセキュリティ・チップ(TPM)29およびエンベデッド・コントローラ(EC)33などが接続されている。
【0022】
GPU17にはタッチスクリーン19が接続されている。タッチスクリーン19は本発明の実現に必須ではないが、たとえばセカンダリOS113の動作環境でタッチ操作のユーザ・インターフェースを提供するために利用することができる。ディスク・ドライブ21は起動ディスクで、本実施の形態では
図2に示す起動可能なプライマリOS103、プライマリOS103上で動作するアプリケーション105、起動可能なセカンダリOS113、およびセカンダリOS113上で動作するアプリケーション115などを格納する。
【0023】
一例としてプライマリOS103は、Windows(登録商標)、MAC_OS(登録商標)などの大規模なプログラムで、セカンダリOS113は、Android(登録商標)、組み込み用Linux(登録商標)などの小規模のプログラムとすることができるが、本発明の適用が可能なOSの種類は特に限定する必要がない。ディスク・ドライブ21は、起動可能な3種類以上のOSを格納してもよい。また、本発明は、プライマリOS103とセカンダリOS113を異なる起動ディスクに格納してもよい。
【0024】
ファームウェアROM27は、BIOSやSecure BootをサポートするUEFIファームウェアといったシステム・ファームウェア101を格納している。システム・ファームウェア101は、コンピュータの起動時にデバイスの検査や初期化などを行うほかに、本実施の形態にかかる退避ファイルの一貫性を検証するための処理を行う。CPU11は、CPU11の電源を再起動するパワーオン・リセット、CPU11にリセット信号を送るハードウェア・リセットおよびCPU11が実行するプログラムがリセット信号を生成するソフトウェア・リセットのいずれかの方法でリセットされたときに必ずシステム・ファームウェア101を所定のアドレス(リセット・ベクタ)から実行する。
【0025】
NVRAM27は、システム・ファームウェア101だけがアクセスできるロック可能な不揮発性メモリである。NVRAM27は、本実施の形態の一例において利用する共通鍵の格納に利用することができる。NVRAM27は、CPU11がリセットされたときにロックが解除される。システム・ファームウェア101は、OSにCPU11の制御権を渡す前にNVRAM27をロックすることができる。TPM29の構成は周知である。TPM29は、プラットフォームが真正なものでTCGに準拠しているかを検証する完全性検証機能、ハードウェアやソフトウェアが改ざんされていないことを確認する一貫性(Integrity)の記録機能、内部に保存された暗号鍵は外部に出さないという暗号鍵の保護機能、および各種暗号処理機能を備える。
【0026】
TPM29は、Trust Bootを実現するために、ソフトウェアの一貫性を記録するPCR(Platform Configuration Register)31を搭載する。システム・ファームウェア101、プライマリOS103、およびセカンダリOS113のブート・モジュールは、ブート時に順番に後続のモジュールのハッシュ値を計算してExtendコマンドを使ってPCR31に書き込む。Extendコマンドが発行されるとTPMは新PCR値=HASH(旧PCR値+ハッシュ値)という計算をして、新PCR値をPCR31の所定の位置に記録する。
【0027】
一旦記録されたPCR値は、再起動するまで書き換えおよび消去することはできないようになっている。したがって、一旦記録されたPCR値をソフトウェアが任意の値に操作することは困難である。システム・ファームウェアやOSは、PCR値を利用して、周知の方法でソフトウェアの一貫性を検証することができる。PCR31は一例においてPCR[0]からPCR[23]までの24個のレジスタを含んでおり、利用の仕方はTCGが規定している。
【0028】
たとえば、システム・ファームウェア101は、PCR[0]〜PCR[7]までの7個のPCRに計算したハッシュ値を書き込むことができる。本実施の形態との関連では一例として、CRTMが計算したハッシュ値に対するPCR値を記録するPCR[0]と、OSのブート・ローダのハッシュ値に対するPCR値を記録するCRTM[4]を利用する。PCR[0]とPCR[4]の存在は周知であるが、本発明では退避ファイルの検証を、CRTMから開始してCPU11の制御権がOSに渡る前のシステム・ファームウェア101の動作環境であることを担保するために、一例においてPCR[0]とPCR[4]を利用する。TPM29はTrust Bootを実現するが、本発明はTrust Bootを採用しないシステムに適用することも可能である。
【0029】
EC33は、CPU、RAM、ROMなどを含むマイクロ・コンピュータでコンピュータ10の電源の制御や筐体内部の温度管理などを行う。EC33は、システム・ファームウェア101、プライマリOS103およびセカンダリOS113が利用可能なレジスタ35を備えている。レジスタ35には、起動時にシステム・ファームウェア101が参照して、ブートOSの選択や動作状態の移行先などを判断する状態情報が記憶される。EC33には、キーボード37が接続されている。キーボード37は、一例としてプライマリOS103の動作環境におけるユーザ・インターフェースとして機能する。
【0030】
[状態遷移とソフトウェア攻撃]
図3は、デュアルOSの動作環境200においてコンピュータ10の状態変化と退避ファイルに対して想定されるソフトウェア攻撃を説明するための状態遷移図である。ここに動作環境は、OSやアプリケーションなどのプログラム・コード、プログラムの状態を示すデータおよびアプリケーションが作成したユーザ・データなどの動作中にシステム・メモリ15が記憶しているメモリ・イメージと、当該動作環境下で動作しているCPU11を含むすべてのハードウェアのレジスタ、キャッシュ、ポインタなどが保持する内部状態を示す状態情報(システム・コンテキスト)が構成する。動作環境の数は実装されているOSの数に一致する。本明細書では2つの動作環境(デュアルOSの動作環境)の切り換え時の退避ファイルを保護する方法を説明するが、3以上の動作環境(マルチOSの動作環境)の切り換え時の退避ファイルの保護に適用することもできる。
【0031】
コンピュータ10は、ACPIが規定するパワー・オフ状態(S5ステート)201からプライマリOS103の動作環境203またはセカンダリOS113の動作環境205のいずれかに遷移する。ただし、コンピュータ10は、パワー・オフ状態201からシングルOSの動作環境に移行することもできる。プライマリOSの動作環境203では、セカンダリOS113が動作を停止する直前の動作状態を構成するランタイム・イメージをシステム・メモリ15またはディスク・ドライブ21に退避した状態でプライマリOS103が実行される。ここに、ランタイム・イメージは、メモリ・イメージとシステム・コンテキストが構成する。
【0032】
システム・コンテキストは、デバイスが停止する前、または他の動作環境への切換操作に応じてシステム・メモリ15に保存されて、ランタイム・イメージの一部を形成する。同様に、セカンダリOSの動作環境205では、プライマリOS103のランタイム・イメージをシステム・メモリ15またはディスク・ドライブ21に退避した状態でセカンダリOS113が実行される。
【0033】
プライマリOSの動作環境203とセカンダリOSの動作環境205からは、それぞれ停止している動作環境は変化しないで、実行しているOSだけがACPIに規定するサスペンド状態207、209に遷移し元の状態に復帰することができる。また、プライマリOSの動作環境203とセカンダリOSの動作環境205からは、それぞれ停止している動作環境は変化しないで、実行しているOSだけがACPIに規定するハイバネーション状態208、210に遷移し、元の状態に復帰することができる。ただし、ハイバネーション状態208、210に遷移するときは、停止している動作環境を維持するために、システム・メモリ15の記憶は維持する。本発明による退避ファイルの一貫性の検証方法は、サスペンド状態207、209またはハイバネーション状態208、210に適用することもできる。
【0034】
プライマリOSの動作環境203とセカンダリOSの動作環境205の間では、切換サスペンド状態213または切換ハイバネーション状態215のいずれかを経由して双方向に短時間で切り換えることができる。ここに、切換サスペンド状態213および切換ハイバネーション状態215は、システムが動作環境の切り換えのために、一時的にその時点で動作しているOSのランタイム・イメージをシステム・メモリ15またはディスク・ドライブ21に退避してから、CPU11をリセットしてシステム・ファームウェア101を実行する状態をいう。切換サスペンド状態213の間はシステム・メモリ15の電源を維持して記憶を保持する必要があるが、切換ハイバネーション状態215の際はシステム・メモリ15の電源を一時的に停止することが可能である。換サスペンド状態213および切換ハイバネーション状態215の間は、ネットワーク・モジュール25を停止してネットワークから遮断した環境を形成することができる。
【0035】
動作環境の切り換えが終了したときには、それまでシステム・メモリ15またはディスク・ドライブ21に退避していたランタイム・イメージがアクティブになって、移行先の動作環境が動作する。ここで、プライマリOSの動作環境203、セカンダリOSの動作環境205、サスペンド状態207、209またはハイバネーション状態208、210では、システム・メモリ15またはディスク・ドライブ21に退避中のランタイム・イメージ(退避ファイル)が存在する。退避ファイルは、やがてアクティブになって実行されるが、退避中にマルウェアの埋め込みや改変などの攻撃を受ける可能性がある。本実施の形態では、以下の手順で、退避ファイルがアクティブになる前に一貫性を検証して実行を停止する。
【0036】
[システム・メモリの退避ファイルを保護する手順]
図4、
図5は、デュアルOSの動作環境において、システム・メモリ15に退避した退避ファイルを保護する手順を説明するためのフローチャートである。
図6は、これに対応するシステム・メモリ15のデータ構造の変遷を説明するための図である。ブロック301では、コンピュータ10がパワー・オフ状態201(
図3)である。
【0037】
図6(A)に示すようにファームウェアROM23は、システム・ファームウェア101と、暗号化した秘密鍵C、秘密鍵Cとペアで作成した公開鍵C、セカンダリOS113のブート・ローダに添付したディジタル証明書Bを復号する公開鍵B、プライマリOS103のブート・ローダに添付したディジタル証明書Aを復号する公開鍵Aを格納している。秘密鍵Cと公開鍵Cのペアは、コンピュータ10の出荷時または任意の時期に、コンピュータ10が実装する暗号モジュールで作成することができる。公開鍵A、Bに対応する秘密鍵A、Bは、OSの製造者が秘密を保持している。
【0038】
退避ファイルの一貫性を検証する信頼性の強度は、格納中と利用中の秘密鍵Cの保護の強度に依存するため、秘密鍵Cは確実に保護する必要がある。一例においてはシステム・ファームウェア101がTPM29を使用して秘密鍵Cを保護する。システム・ファームウェア101は、秘密鍵Cと公開鍵Cのペアを作成したときに、暗号化のために秘密鍵Cを、PCR[0]およびPCR[4]を指定してTPM29に渡す。TPM29は、そのときPCR[0]およびPCR[4]が記録しているPCR値に関連付けて秘密鍵Cを暗号化しシステム・ファームウェア101に返す。システム・ファームウェア101は、ファームウェアROM23またはその他の不揮発性メモリに暗号化した秘密鍵Cを格納する。秘密鍵Cは暗号化されているためロックが可能な不揮発性メモリに格納する必要がない。
【0039】
TPM29は、暗号化された秘密鍵Cを、暗号化されたときに指定されたPCR[0]とPCR[4]が記憶していたPCR値と、復号の要求があったときに指定されたPCR[0]とPCR[4]のPCR値が一致しない限り復号しない。このようなTPMの暗号化処理をシールという。秘密鍵CはTPM29によって、PCR[0]とPCR[4]をアンシール条件として暗号化されることになる。TPM29がシールした秘密鍵Cは、一貫性があるシステム・ファームウェア101のブート・モジュール以外はアンシール(復号)できないことになる。
【0040】
ディスク・ドライブ21は、所定のパーティションにプライマリOS103のブート・イメージと、ブート・ローダのハッシュ値を秘密鍵Aで暗号化したディジタル証明書Aを格納している。また、他のパーティションにセカンダリOS113のブート・イメージと、ブート・ローダのハッシュ値を秘密鍵Bで暗号化したディジタル証明書Bを格納している。
【0041】
ディジタル証明書A、Bは、それぞれのOSの製造者が、プライマリOS103またはセカンダリOS113のハッシュ値を秘密鍵A、Bでそれぞれ暗号化した証明書である。ブロック303で電源が起動されて、最初にセカンダリOS113がブートされる。システム・ファームウェア101に対する設定により最初にプライマリOS103からブートするようにしてもよい。
【0042】
システム・ファームウェア101は、Secure Bootの方法で公開鍵Bを使ってディジタル証明書Bを復号した値と、セカンダリOSのブート・ローダから計算したハッシュ値が一致する場合だけセカンダリOS113のブートを許可する。なお、プライマリOS103のときも公開鍵Aを使ってディジタル証明書Aを復号して、同様にSecure Bootを行う。
【0043】
システム・ファームウェア101は、セカンダリOS113にシステム・メモリ15の所定の物理アドレス空間163(
図6(B))を割り当ててハードウェアの初期化や認証などを開始する。システム・ファームウェア101のCRTMに続くブート・モジュールは順番に計算したハッシュ値をPCR31のPCR[0]からPCR[7]に記録していく。ブロック305で、システム・ファームウェア101は、TPM29にPCR[0]とPCR[4]を指定して暗号化された秘密鍵Cの復号(アンシール)を要求する。秘密鍵Cを作成したときのPCR値と現在のPCR値が一致すれば、TPM29は暗号化された秘密鍵Cを復号してシステム・ファームウェア101に返す。
【0044】
したがって、秘密鍵CはCRTMを起点とする一貫性のあるブート・シーケンスおよびブート・モジュールのもとでだけ復号される。システム・ファームウェア101はSMIを発行してCPU11をSMM(System Management Mode)に移行させ、システム・メモリ15の物理アドレス空間163に対応するSMRAM領域に、復号した秘密鍵Cを記憶する。SMMでは、SMRAM領域でSMIハンドラしか動作できないため、秘密鍵Cの安全は確保されている。
【0045】
SMRAM領域は、秘密鍵Cを使用してランタイム・イメージを暗号化するSMIハンドラを記憶している。ブロック307でシステム・ファームウェア101からセカンダリOS113にブート・シーケンスが移って、セカンダリOSの動作環境205に移行する。ただし、この時点では、デュアルOSの動作環境を構築する途中であるため、ブートが完了するとアプリケーション115はただちにプライマリOS103をブートするようにセカンダリOS113に要求するようにしている。
【0046】
セカンダリOS113は、サスペンド状態207に遷移するときと同じようにランタイム・イメージ162を作成してからブロック309で切換サスペンド状態213に遷移する。切換サスペンド状態に遷移するとシステム・メモリ15の記憶が維持された状態で、セカンダリOS113の動作環境205は停止する。このときシステム・メモリ15が記憶しているランタイム・イメージ162が退避ファイルとなる。リセットされたCPU11はシステム・ファームウェア101を実行する。
【0047】
システム・ファームウェア101は、レジスタ35を参照してブロック311でプライマリOS103のブートを開始する。このときシステム・ファームウェア101は、プライマリOS103にセカンダリOS113とは異なる物理アドレス空間161を割り当てる。ブロック313では、ブロック305と同じ手順で暗号化された秘密鍵CがTPM29で復号されて、物理アドレス空間161に対応するSMRAM領域に記憶される。
【0048】
プライマリOS103のブートが完了すると、ブロック315でデュアルOSの動作環境200が構築さる。システム・メモリ15を利用して構築したデュアルOSの動作環境200では、プライマリOSの動作環境203とセカンダリOSの動作環境205のメモリ・イメージがともにシステム・メモリ15の相互に区分された物理アドレス空間161、163に記憶された状態で、一方がアクティブになって動作し、他方がインアクティブになって退避する。
【0049】
ブロック301からブロック317まではパワー・オフ状態で電源を起動したときに自動的に進行させることができる。プライマリOS103から先にブートすれば、デュアルOSの動作環境200が構築されたときにセカンダリOSの動作環境205に移行する。このときのシステム・メモリ15のデータ構造を
図6(B)に示す。ブロック317でコンピュータ10は、プライマリOSの動作環境203で動作してユーザが作業をする。
【0050】
ブロック319でユーザが、アプリケーション105が提供するユーザ・インターフェースを通じてキーボード37またはタッチスクリーン19にセカンダリOSの動作環境205に移行するための切換操作をする。ブロック321でプライマリOS103はシステム・コンテキストをシステム・メモリ15に記憶してランライム・イメージ164(
図6(C))を作成し、ブロック323で切換サスペンド状態213に移行する。リセットされたCPU11は、システム・ファームウェア101を実行する。システム・ファームウェア101はレジスタ35を参照して、切換サスペンド状態213に遷移していることを認識する。
【0051】
システム・ファームウェア101は、切換サスペンド状態に遷移するとSMIを発行してSMIハンドラを実行する。SMIハンドラはブロック325で、プライマリOSのランタイム・イメージ164をハッシュしてダイジェストPを計算し、秘密鍵Cで暗号化する。ここにハッシュ値の計算の対象となるランタイム・イメージ164は、プライマリOS103に割り当てられた物理アドレス空間161の全体の領域としてもよいし、物理アドレス空間161のなかでデータが格納されている領域、メモリ・イメージの全体、またはメモリ・イメージのなかでOSのカーネルが記憶されている領域などのように物理アドレス空間161の一部の領域としてもよい。暗号化の範囲は、OSがシステム・メモリ15の共用空間を通じてシステム・ファームウェア101に通知することができる。
【0052】
SMIハンドラは暗号化したダイジェストPを物理アドレス空間161に記憶する。このときのシステム・メモリ15のデータ構造を
図6(C)に示す。ブロック327でシステム・ファームウェア101は、セカンダリOS113にCPU11の制御権を渡してアクティブ化するとシステム・コンテキストが復帰してセカンダリOSの動作環境205に移行し、ユーザが作業をすることができる。ブロック329でユーザが、ユーザ・インターフェースを通じて、プライマリOSの動作環境203へ移行させる切換操作をする。ブロック331ではブロック321と同様にセカンダリOS113がランタイム・イメージ166を作成してブロック333で切換サスペンド状態213に移行する。
【0053】
ブロック335でSMIハンドラはブロック325と同様の手順でセカンダリOSのランタイム・イメージ166のダイジェストSを計算し、秘密鍵Cで暗号化して、物理アドレス空間163に記憶する。このときのシステム・メモリ15のデータ構造を
図6(D)に示す。ブロック337でシステム・ファームウェア101は、プライマリOS103をアクティブ化する前に、ブロック325でダイジェストPを計算したプライマリOS103の対象と同じ対象に対してダイジェストP’を計算する。
【0054】
ブロック339でシステム・ファームウェア101は、物理アドレス空間161に記憶していた暗号化したダイジェストPをファームウェアROM23から読み取った公開鍵Cで復号する。ブロック341でシステム・ファームウェア101は、ダイジェストPとダイジェストP’を比較して一致しない場合はブロック343でプライマリOS103のアクティブ化を停止する。一致する場合は、アクティブ化する直前のそれまで退避していたランタイム・イメージ164が、切換操作の直後に作成したランタイム・イメージ164とダイジェストを計算した範囲において同一であるといえる。この状態を退避ファイルに一貫性があるという。
【0055】
一致する場合は、ブロック345に移行して、プライマリOS103にCPU11の制御権を渡してアクティブ化するとシステム・コンテキストが復帰してプライマリOS103がブロック321でランタイム・イメージを作成した時点の状態に復帰する。攻撃者が意図的に両者を一致させようとする場合は、ダイジェストP‘とダイジェストPを同時に改変する必要があるが、ダイジェストPは秘密鍵Cの安全性が保証されている限りダイジェストP’と同一性を保つように改変することができないため、改変があればそれを検出してアクティブ化を停止することができる。
【0056】
図5のブロック401では、ユーザによってセカンダリOSの動作環境205へ移行する操作が行われる。ブロック403ではブロック331と同様の手順でプライマリOS103の新たなランタイム・イメージが生成され、ブロック405で切換サスペンド状態に移行する。ブロック407ではブロック335と同じ手順でSMIハンドラがプライマリOS103のランタイム・イメージのダイジェストPを計算し、秘密鍵Cで暗号化して、物理アドレス空間161に記憶する。ブロック409ではブロック337と同様にシステム・ファームウェア101が、セカンダリOS113をアクティブ化する前に、セカンダリOS113のランタイム・イメージのダイジェストS’を計算する。
【0057】
ブロック411ではブロック339と同様にシステム・ファームウェア101が、物理アドレス空間163に記憶していた暗号化されたダイジェストSを公開鍵Cで復号する。ブロック413ではブロック341と同様にシステム・ファームウェア101が、ダイジェストSとダイジェストS’を比較して一致しない場合はブロック415でセカンダリOS113のアクティブ化を停止する。一致する場合は、
図4のブロック327に移行して、セカンダリOS113にCPU11の制御権を渡してアクティブ化するとシステム・コンテキストが復帰してセカンダリOS113がブロック331でランタイム・イメージを作成した状態に復帰する。
【0058】
[ディスク・ドライブの退避ファイルを保護する手順]
図7、
図8は、デュアルOSの動作環境において、ディスク・ドライブ21に退避した退避ファイルを保護する手順を説明するためのフローチャートである。
図9は、これに対応するシステム・メモリ15とディスク・ドライブ21のデータ構造の変遷を説明するための図である。
図4、
図5の手順に類似する手順および
図4、
図5の手順から容易に類推できる手順は説明を簡略化する。本実施の形態におけるランタイム・イメージの退避先は、ディスク・ドライブ21とは異なる不揮発性メモリであってもよい。
【0059】
図7のブロック501では、ファームウェアROM23とディスク・ドライブ21のデータ構造が
図6(A)と同様に
図9(A)のとおりである。ブロック503でシステム・ファームウェア101は、一例として先にセカンダリOS113のブート・イメージを物理アドレス空間171にロードする。ここでは、物理アドレス空間171に、プライマリOS103またはセカンダリOS113のブート・イメージがロードされる例を説明する。ブロック505ではブロック305と同様にシステム・ファームウェア101が暗号化した秘密鍵Cを復号してSMRAM領域に記憶する。
【0060】
ブロック507でセカンダリOS113が動作しブロック509で自動的にランタイム・イメージ172(
図9(B))をディスク・ドライブ21に退避してからコンピュータ10の電源を一旦停止して、切換ハイバネーション状態215に遷移する。ディスク・ドライブ21に退避したランタイム・イメージ172は退避ファイルとなる。切換ハイバネーション状態215に遷移するとただちに電源が投入されて、リセットされたCPU11がシステム・ファームウェア101を実行する。システム・ファームウェア101はブロック511で、レジスタ35を参照して物理アドレス空間171にプライマリOSのブート・イメージ131をロードする。
【0061】
ブロック513では、システム・ファームウェア101がブロック313と同様に暗号化した秘密鍵Cを復号してSMRAM領域に記憶する。ブロック515ではデュアルOSの動作環境200が構築される。ディスク・ドライブ21を利用して構築したデュアルOSの動作環境200では、プライマリOSの動作環境203とセカンダリOS1のなかで一方の動作環境が動作し、他方の動作環境がディスク・ドライブ21に退避している。
【0062】
ブロック517でプライマリOS103が動作したときのシステム・メモリ15とディスク・ドライブ21のデータ構造を
図9(B)に示す。ブロック519でプライマリOS103への切換操作が行われ、ブロック521でブロック321と同様にプライマリOS103がランタイム・イメージ174を生成する。ブロック523でシステムは切換ハイバネーション状態215への移行を開始し、リセットされたCPU11が、システム・ファームウェア101を実行する。
【0063】
ブロック525でSMIハンドラがランタイム・イメージ174のダイジェストPを計算して秘密鍵Cで暗号化してシステム・メモリ15に記憶する。ブロック526でシステム・ファームウェア101は、ランタイム・イメージ174と暗号化したダイジェストPを含む物理アドレス空間171のファイルをディスク・ドライブ21のセカンダリOS113の退避ファイルとは異なる記憶領域に退避して電源を再起動する。退避先は、このときのシステム・メモリ15とディスク・ドライブ21のデータ構造を
図9(C)に示す。
【0064】
ブロック527でセカンダリOS113がアクティブ化し、ブロック529でプライマリOS103への切換操作が行われる。ブロック531で動作を開始したセカンダリOS133がランタイム・イメージ176を作成し、ブロック533でシステム・ファームウェア101が切換ハイバネーション状態215への移行を開始する。ブロック535でシステム・ファームウェア101がランタイム・イメージ176のダイジェストSを計算してシステム・メモリ15に記憶すると、SMIハンドラがダイジェストSを秘密鍵Cで暗号化する。ブロック536でシステム・ファームウェア101は、暗号化したダイジェストSとランタイム・イメージ176をディスク・ドライブ21に退避してから電源を再起動する。このとき、ランライム・イメージ176はブロック526で退避したランタイム・イメージ172を上書きしてもよい。
【0065】
このときのシステム・メモリ15とディスク・ドライブ21のデータ構造を
図9(D)に示す。ブロック537でシステム・ファームウェア101は、ディスク・ドライブ21から読み出したプライマリOSのランタイム・イメージ174のダイジェストP’を計算する。ブロック539でシステム・ファームウェア101は、ディスク・ドライブ21から読み取った暗号化したダイジェストPを公開鍵Cで復号してブロック541でダイジェストP’と比較する。一致する場合は、ブロック545でプライマリOSのランタイム・イメージ174をレジュームしてアクティブ化し、ブロック521でランタイム・イメージ174を作成した状態に復帰させる。一致しない場合はブロック543で、プライマリOSのランタイム・イメージ174のレジュームを停止する。
【0066】
図8のブロック601では、セカンダリOSの動作環境203への切換操作が行われる。ブロック603から608までの手順はブロック521からブロック526までの手順と同様に、ブロック603でプライマリOS103がランタイム・イメージを作成する。システム・ファームウェア101はブロック605で切換ハイバネーション状態215への切換操作を開始する。ブロック607で新たなランタイム・イメージのダイジェストPを計算して秘密鍵Cで暗号化してから、ブロック608で新たなランタイム・イメージと新たな暗号化したダイジェストPをディスク・ドライブ21に退避する。
【0067】
ブロック609でからブロック615までの手順は、ブロック537からブロック543までの手順と同様に、ブロック609でシステム・ファームウェア101は、ディスク・ドライブ21から読み出したセカンダリOSのランタイム・イメージ176のダイジェストS’を計算する。ブロック611でシステム・ファームウェア101は、ディスク・ドライブ21から読み取った暗号化したダイジェストSを公開鍵Cで復号してブロック613でダイジェストS’と比較する。一致する場合は、セカンダリOSのランタイム・イメージ176をレジュームしてブロック527でアクティブ化し、ブロック531でランタイム・イメージ176を作成した状態に復帰させる。一致しない場合はブロック615で、セカンダリOSのランタイム・イメージ176のレジュームを停止する。
【0068】
図4から
図9までの手順は、本発明の実施形態を説明するための一例であり、本発明はこの手順に限定するものではない、各手順を複数の手順に分割したり、統合したり、または入れ替えたりすることは当業者が容易に想起できるものである限り本発明に含まれる。また、明細書に具体的に示したファイルの処理は、同等の機能を実現する周知な他の処理で行うことも同等の効果を奏するものであれば本発明に含まれる。
【0069】
以上の手順では、システム・ファームウェア101だけがダイジェストP、Sを暗号化する秘密鍵Cにアクセスし、かつ、ネットワークから遮断された安全な環境でランタイム・イメージの一貫性を検証できる。システム・ファームウェア101の一貫性の検証にTPMを採用すれば、一層安全な環境で処理できる。ランタイム・イメージの作成は、ACPIが規定するサスペンド状態またはハイバネーション状態に遷移する手順を採用することができるため、OSに変更を加える必要がない。
【0070】
これまでランタイム・イメージの少なくとも一部の同一性の検証を小さなデータ量で可能にするダイジェストP、Sを利用する方法を説明したが、本発明はダイジェストの利用に限定する必要がない。ダイジェストに代えてランタイム・イメージの少なくとも一部の同一性の検証が可能な代表ファイルを採用することができる。代表ファイルは、ランタイム・イメージの全体でも、カーネルのような主要な部分だけでもよい。
【0071】
また本発明は実環境で構築するマルチOSの動作環境だけでなく、仮想環境で動作複数のOSのなかで、動作を停止するOSのランタイム・イメージを保護することに適用することもできる。さらに、規模の大きなOSの物理アドレス空間の中に小さい物理アドレス空間を形成し、規模の大きなOSをサスペンド状態にしながら小さい物理アドレス空間で規模の小さなOSを動作させるような動作環境の切り換え方式にも適用できる。
【0072】
ランタイム・イメージのダイジェストP、Sを暗号化するための秘密鍵Cは、サイズが大きいため、ロック可能なNVRAM27に格納することが困難な場合があるが、TPMを使ってシールすることで、ファームウェアROM23のようなロックできない不揮発性メモリに保管することができる。また、本発明はダイジェストP、Sの暗号化に、共通鍵(対称鍵)を使用することもできるが、共通鍵は秘密鍵に比べてサイズが小さいため、CRTMだけがアクセスできるようなロック可能なNVRAM27に格納して保護することができる。このときCRTMは、共通鍵をSMRAM領域に記憶するときだけNVRAMのロックを解除し、共通鍵を取り出したらロックするようにして共通鍵を保護することができる。
【0073】
暗号化したダイジェストP、Sを、ランタイム・イメージ164、166、174、176と同じシステム・メモリ15またはディスク・ドライブ21に退避する例を説明したが、暗号化したダイジェストP、Sの退避先はこの例に限定する必要はない。暗号化したダイジェストP、Sは、たとえば、ロック可能なNVRAM27に格納したり、またはその他のロック機能がない不揮発性メモリに退避したりするようにしてもよい。
【0074】
本発明は、
図1に示したハードウェアと
図2に示したソフトウェアの協働により構成した暗号化部、退避部、復号部、または比較部といったハードウェア要素で実現することもできる。たとえば暗号化部は、システム・メモリ15が記憶するランタイム・イメージから抽出した代表ファイルの暗号化を行い、退避部がランタイム・イメージのシステム・メモリ15またはディスク・ドライブ21への退避をすることができる。また、復号部が暗号化した代表ファイルの復号を行い、比較部が退避したランライム・イメージから抽出した代表ファイルと復号した代表ファイルの比較を行うことができる。
【0075】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。