【文献】
一松 信,“データ保護と暗号化の研究”,日本,日本経済新聞社,1983年 7月29日,1版1刷,p.90−97
【文献】
稲村 雄,中山 雄大,竹下 敦,“安全な端末を目指すTrusted Mobile Platform技術”,NTT DoCoMoテクニカル・ジャーナル,社団法人電気通信協会,2005年 7月 1日,Vol.13, No.2,p.25−29
【文献】
Shay Gueron, Geoffrey Strongin, Jean-Pierre Seifert, Derek Chiou, Resit Sendag, Joshua J. Yi,“WHERE DOES SECURITY STAND ? NEW VULNERABILITIES VS. TRUSTED COMPUTING”,IEEE MICRO,IEEE,2007年11月,Volume: 27, Issue: 6,p.25-35
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0006】
以下の詳細な記載は、請求されている主題の例である実施形態を参照しながら行われるが、当業者であれば数多くの代替例、変更例、および変形例を想到する。したがって請求されている主題は広義にとらえられることを意図しており、その定義は、添付請求項のみによって行われることが意図されている。
【0007】
プラットフォームにセキュリティを提供するために利用される鍵のプロビジョン方法の1つに、ハードウェアデバイスの製造業者が、ハードウェアデバイスの製造中に、プログラム可能な書き込みが一度だけ可能なメモリに、鍵(鍵材料)を永久的格納する、というものがある。鍵は、プラットフォームにハードウェアデバイスを設置する前にハードウェアデバイスに格納されてよい。たとえば書き込みが一度だけ可能なメモリは、ファームウェアもソフトウェアもアクセスできないハードウェアデバイスのセキュアな領域の複数のヒューズであってよい。
【0008】
しかし、すべての鍵材料が、書き込みが一度だけ可能なメモリに格納されるので、デバイス製造業者は、製造プロセス中にハードウェアデバイスに鍵材料をプロビジョンすることしかできない。加えて、ハードウェアデバイスにセキュアにプロビジョンされる鍵の数が多いと、書き込みが一度だけ可能なメモリではこれに対応して大きな領域が必要とされ、プラットフォームへの追加費用が高くなる。
【0009】
別の鍵材料プロビジョン方法として、デバイス製造業者が、固有の非対称デバイス認証鍵(DAK)を製造プロセス中に、書き込みが一度だけ可能なメモリに格納する、というものがある。後でプロビジョンサーバは、インタラクティブ型のプロビジョンプロトコルを用いてプラットフォームに設置されたハードウェアデバイスに遠隔操作によって鍵(送信鍵)をプロビジョンすることができる。ハードウェアデバイスから受けた、格納DAKを検証した後で、プロビジョンサーバが鍵材料をハードウェアデバイスに送信する。この方法の欠点には、ハードウェアデバイスに固有のDAKを格納するときに利用される、書き込みが一度だけ可能なメモリの領域のサイズ、書き込みが一度だけ可能なメモリに鍵を格納する製造業者のテストマシンによってセキュリティが脅かされる可能性、オフラインでのプロビジョンがサポートされないこと(つまり、ハードウェアデバイスが設置されているプラットフォームが利用できるインターネット接続が存在しない)、および、ハードウェアデバイスで、より大きなトラステッドコンピューティングベース(TCB)のサイズのためにより大きなメモリを必要とする、非対称鍵の演算が利用される点、が含まれる。
【0010】
本発明の一実施形態では、鍵プロビジョン方法は、対称鍵を利用して、オンラインおよびオフラインのプロビジョン両方をサポートする。対称鍵は、メッセージの受信者および送信者両方ともにより、メッセージの暗号化および復号化の際に利用され、共有される。加えて、ハードウェアデバイスの製造中には、攻撃に対してセキュリティを提供する初期鍵プロビジョン方法を実行して、デバイス固有鍵110をハードウェアデバイスに格納する。鍵プロビジョンサーバは、製造テストマシンによりテストされる各ハードウェアデバイスの固有プロビジョン鍵を格納するプロビジョンデータベースを含む。プロビジョン鍵を利用することで、オフラインおよびオンラインのプロビジョンがサポートされる。
【0011】
図1は、製造環境で初期鍵のプロビジョンを実行するシステム100を示すブロック図である。システム100は、ハードウェアデバイス102、製造テスタマシン104、および、鍵生成サーバ106を含む。製造テストマシン104および鍵生成サーバ106は、セキュアなチャネル108経由で通信する。セキュアなチャネルは、2つの実体の間の、認証されて暗号化されている通信チャネルのことである。たとえば、プラットフォームは、トランスポートレイヤセキュリティ(TLS)を利用して、サーバとの間にセキュアなチャネルをセットアップして、オンラインバンキングを実行することが可能である。
【0012】
製造中に、デバイス固有鍵110は、鍵生成サーバ106によりハードウェアデバイス102に割り当てられて、ハードウェアデバイス102の保護されているメモリ109に格納される。このデバイス固有鍵110は、ハードウェアにより保護され、後の時点でも、ハードウェア102が後でインストールされるプラットフォームで実行されるソフトウェアには公開されない。ハードウェアデバイス102がインストールされるプラットフォームは、たとえばモバイルフォンまたはコンピュータであってよい任意のコンピュータデバイスであってよい。
【0013】
一実施形態では、ハードウェアデバイス102はプロセッサであってよい。プロセッサとしては、シングルコアのIntel(登録商標)Pentium(登録商標) IV(登録商標)プロセッサ、シングルコアのIntel(登録商標)Celeronプロセッサ、Intel(登録商標)XScaleプロセッサ、または、Intel(登録商標)Pentium(登録商標) D、Intel(登録商標)Xeon(登録商標)プロセッサ、または、Intel(登録商標)Core(登録商標)Duoプロセッサ等のマルチコアのプロセッサ、または、任意の他の種類のプロセッサであってよい。別の実施形態では、ハードウェアデバイス102が、入出力デバイスとの間の通信を制御するために、プラットフォーム上のプロセッサに連結される集積回路であってもよい。集積回路は、互いに協働するよう設計されている、チップセットにおける複数の集積回路の1つであってよい。例えばチップセットの集積回路は、プロセッサを、メモリ、グラフィックコントローラ等の高速デバイスにリンクすることができ、チップセットの別の集積回路が、プロセッサを、周辺コントローラインターフェース(PCI)、ユニバーサルシリアルバス(USB)またはイーサネット(登録商標)等の通信プロトコルを介してアクセスされる低速の周辺機器にリンクさせることができてよい。
【0014】
鍵生成サーバ106は、ハードウェアデバイス102に割り当てられるハードウェアデバイス固有鍵110、および、たとえばAES等の暗号復号アルゴリズムで利用可能な鍵等のプラットフォームが利用する他の鍵を含む鍵材料を生成するオフラインのサーバである。オフラインのサーバは、インターネットを介して外部の実体と直接相互作用しない、鍵生成のためのセキュアな機器である。鍵生成サーバ106は、セキュアで、保護された環境で動作する。ハードウェアデバイス102にデバイス固有鍵110を最初にプロビジョンする際に利用可能な方法は数多くある。利用される方法は、製造環境のセキュリティレベルに依存している。これら方法のうち3つを、
図2から
図4を参照して後述する。
【0015】
図2は、ハードウェアデバイスへのデバイス固有鍵110の基本的な初期製造プロビジョン方法を示すフローグラフである。
【0016】
ブロック200で、鍵生成サーバ106は、製造テストマシン104に連結されているハードウェアデバイス102に対してランダムにデバイス固有鍵を選択する。処理はブロック202に続く。
【0017】
ブロック202で、鍵生成サーバ106は、テスト中のハードウェアデバイス102のデバイス固有鍵110を、セキュアなチャネル108を利用して製造テストマシン104に送信する。デバイス固有鍵110を受け取ると、製造テストマシン104は、デバイス固有鍵110を、保護されたメモリ109に格納するが、この、保護されたメモリ109は、ハードウェアデバイス102内のフラッシュメモリデバイス等の、書き込みが一度だけ可能なメモリまたは書き換え可能なメモリ等であってよい。一実施形態では、書き込みが一度だけ可能なメモリは、複数のヒューズを含み、固有鍵は、ヒューズを飛ばして、デバイス102にデバイス固有鍵110を永久格納することによって格納される。処理はブロック204に続く。
【0018】
ブロック204で、鍵生成サーバ106は、様々な一方向関数を利用して、デバイス固有鍵からハードウェアデバイス102のためのプロビジョン鍵804およびプロビジョン識別子を導出する。プロビジョン鍵804およびプロビジョン識別子に関しては後述する。一方向関数を利用すると、プロビジョン鍵804およびプロビジョン識別子は、デバイス固有鍵110から導出されるが、プロビジョン鍵804またはプロビジョン識別子からは、デバイス固有鍵110は導出できない。一実施形態では、一方向関数は、鍵導出に利用される擬似乱数関数(PRF)(たとえばハッシュベースのメッセージ認証符号(HMAC)およびAES−CMAC(Advanced Encryption Standard-Cipher-Based Message Authentication Code)であってよい)である。プロビジョン識別子およびプロビジョン鍵804は、ハードウェアデバイス102に固有である。処理はブロック206に続く。
【0019】
ブロック206で、鍵生成サーバ106は、デバイス固有鍵110から導出されるプロビジョン鍵およびプロビジョン識別子をプロビジョンデータベース112に格納して、後で、他のセキュリティ鍵をハードウェアデバイス102にオンザフィールドでプロビジョンするのに備えさせる。処理はブロック208に続く。
【0020】
ブロック208で、鍵生成サーバ106は、プロビジョンデータベース112に格納されているプロビジョン鍵およびプロビジョン識別子(ID)を生成するために利用した、鍵生成サーバ106に格納されているデバイス固有鍵110のコピーを削除する。
【0021】
図3は、ハードウェアデバイスへの、共有鍵保護が行われたデバイス固有鍵の初期製造プロビジョン方法を示すフローグラフである。セキュリティを向上させるために、鍵生成サーバ106は、各ハードウェアデバイス102埋め込まれた共有鍵でデバイス固有鍵を暗号化して、該ハードウェアデバイス102のみがデバイス固有鍵を復号できるようにしている。製造テストマシン104は、共有鍵を格納せず、共有鍵にアクセスもできない。したがって製造テストマシン104は、鍵生成サーバ106が生成したデバイス固有鍵110を復号することができない。
【0022】
ブロック300で、テスト対象のハードウェアデバイス102の論理には、対称共有鍵(SK)が埋め込まれている。共有鍵は、複数のデバイスについて同じものである。共有鍵は、ハードウェアデバイス102および鍵生成サーバ106には知らされるが、製造テストマシン104には知らされない。一実施形態では、鍵生成サーバが共有鍵を生成する。鍵生成サーバ106は、各ハードウェアデバイス102についてランダムにデバイス固有鍵を選択する。鍵生成サーバ106は、鍵生成サーバ106が知らされた共有鍵を利用して、デバイス固有鍵を暗号化する。共有鍵には二つの目的がある。つまり、(1)悪意のある製造テスタに対する保護を追加すること、および、(2)デバイス102の製造後のデバイス固有鍵の保護を強化すること、である。処理はブロック302に続く。
【0023】
ブロック302で、鍵生成サーバ106は、セキュアなチャネル108を利用して製造テストマシン104に、暗号化されているデバイス固有鍵を送信する。製造テストマシン104は、この暗号化されているデバイス固有鍵を、ハードウェアデバイス102の、保護されているメモリ109(たとえば書き込みが一度だけ可能なメモリ(ヒューズ))に格納する。ハードウェアデバイス102は、デバイス固有鍵の暗号化に鍵生成サーバ106が利用する共有鍵を格納しているので、ハードウェアデバイス102は、格納した暗号化されているデバイス固有鍵にアクセスして、共有鍵を用いて復号を行い、デバイス固有鍵を得ることができる。処理はブロック304に続く。
【0024】
ブロック304で、鍵生成サーバ106は、
図2の実施形態との関連で上述したように、デバイス固有鍵からプロビジョン識別子とプロビジョン鍵とを導出する。処理はブロック306に続く。
【0025】
ブロック306で、鍵生成サーバ106は、自らが生成したデバイス固有鍵110を削除して、デバイス固有鍵110から導出したプロビジョン鍵およびプロビジョン識別子を、プロビジョンデータベース112に格納する。
ブロック308で、鍵生成サーバ106は、鍵生成サーバ106に格納されているデバイス固有鍵110のコピーを削除する。
【0026】
図4は、ハードウェアデバイスへのデバイス固有鍵のセキュアな初期製造プロビジョン方法を示すフローグラフである。
図4との関連で説明される方法は、デバイス固有鍵がデバイスで生成され、ほかのハードウェアデバイス102へ通信チャネル経由で送信されない点で、
図2および
図3との関連で説明する方法よりもセキュアである。ハードウェアデバイス102は、論理に埋め込まれた対称共有鍵(GK)を有している。GKは、ハードウェアデバイス102および鍵生成サーバ106は知らされるが、製造テストマシン104には知らされない。
図3との関連で説明した実施形態で説明したGKに加えて、本実施形態では、ハードウェアデバイス102には、非対称鍵対(つまり、公開暗号鍵(PEK)および秘密復号鍵(PDK))が埋め込まれている。この非対称鍵対は、鍵生成サーバ106にも格納される。
【0027】
ハードウェアデバイス102は、本発明の範囲外である公知の方法を利用して、固有デバイス鍵110を生成する。たとえば、固有デバイス鍵110は、ランダムゲート技術(a random gates technique)またはPUF(physically unclonable function)をファジー・エクストラクター(fuzzy extractor)により生成することができる。ハードウェアデバイス102は、デバイス固有鍵110からプロビジョン識別子(ID)およびプロビジョン鍵を導出して、PEKを利用して2つの鍵を暗号化して、共有鍵を利用して2つの鍵のメッセージ認証コード(MAC)を計算する。利用される関数の例は以下の通りとなる。
C1 = RSA-Enc(PEK, プロビジョン ID ||プロビジョン鍵),
C2 = MAC(GK, C1),
暗号文= C1 || C2.
【0028】
RSA-Enc(K, M)は、RSA(Rivest, Shamir and Adleman)公開暗号鍵Kを利用してメッセージMのRSA暗号を行うことを示している。一実施形態では、メッセージ認証コード(MAC)関数がHMACである。別の実施形態では、MAC関数がAES−CMAC.5である。ハードウェアデバイス102は、暗号文(暗号化された鍵)を製造テストマシン104に出力する。
【0029】
ブロック400で、鍵生成サーバ106は、製造テストマシン104からセキュアなチャネル108経由で暗号文を受信する。処理はブロック402に続く。
【0030】
ブロック402で、鍵生成サーバ106は、各暗号文についてGKを利用してMACを検証して、PDKを利用して復号を行う。鍵生成サーバ106は、セキュアなチャネル108を介してセキュアにハードウェアデバイス102のプロビジョン鍵およびプロビジョンIDを取得する。一実施形態では、鍵生成サーバ106が、受信した暗号化に対して以下の関数を実行して、ハードウェアデバイス102に格納されているデバイス固有鍵110から導出される、プロビジョン識別子およびプロビジョン鍵を取得する。 C2=MAC(GK,C1)を、GKを用いて検証する
PDKを利用して、プロビジョン ID || プロビジョン鍵 = RSA-Dec(PDK, C1)とする
処理は、ブロック404に続く。
【0031】
ブロック404で、鍵生成サーバ106が、プロビジョン識別子とプロビジョン鍵とをプロビジョンデータベース112に格納する。
【0032】
ハードウェアデバイス102は、製造された後でOEM(Original Equipment Manufacturers)に送られて、プラットフォームに設置されてよい。通常、プラットフォームがエンドユーザに配信される。ハードウェアデバイスの製造業者は、ハードウェアデバイス102を含むプラットフォームのエンドユーザに対して、鍵を送信する(プロビジョンする)必要があると思われる。たとえば、ハードウェアデバイスの製造業者は、たとえばデバイス認証対称鍵、トラステッドプラットフォームモジュール(TPM)保証鍵、HDCP(High-bandwidth Digital Content Protection)鍵、またはAACS(Advanced Access Content System)デバイス鍵等のハードウェアデバイス102ごとに固有の鍵を含む鍵、または、共通鍵を、ハードウェアデバイス102に送信する(プロビジョンする)。
【0033】
ハードウェアデバイス102に鍵を送信する前に、ハードウェアデバイス102に、製造した鍵のみを確実にプロビジョンするために、ハードウェアデバイスの製造業者は、鍵を、プロビジョンデータベース112に格納されている、ハードウェアデバイス102に関連付けられたプロビジョン鍵を利用して暗号化する。デバイス製造業者は、このプロビジョン方法を複数回行うことで、複数のハードウェアデバイス102に、製造した鍵をそれぞれプロビジョンすることができる。
【0034】
鍵生成サーバ106のプロビジョンデータベース112は、製造テストマシン104によりテストされた各ハードウェアデバイス102のプロビジョン識別子およびプロビジョン鍵を格納する。あるプロビジョン識別子およびプロビジョン鍵に関連づけられたハードウェアデバイス102に対して鍵をプロビジョンするために、鍵生成サーバ106は、当該ハードウェアデバイス102にプロビジョンする鍵材料を準備する。鍵材料は、「鍵ブロブ」と称される場合もあり、TPM鍵等の1つの鍵であってもよいし、TPM鍵とHDCP鍵といったように、複数の鍵であってもよい。ハードウェアデバイス102ごとに異なる鍵材料が割り当てられてよい。
【0035】
鍵生成サーバ106は、プロビジョン鍵を利用して鍵材料を暗号化することができる。暗号は、AES−GCM(Advanced Encryption Standard-Galois/Counter Mode)モードの暗号方式またはAES−CBC(Advanced Encryption Standard- Cipher Block Chaining)モードの暗号方式等の任意の暗号アルゴリズムが、擬似乱数関数(PRF)と組み合わせられた、任意の鍵ラップ(暗号)アルゴリズムにより実行することができる。AES−GCMおよびAES−CBCは、NIST規格のFIPS−197で定義されている。鍵生成サーバ106は、プロビジョンデータベース112を準備して、プロビジョンIDおよび対応する暗号化鍵をすべて格納する。
【0036】
図5は、鍵生成サーバ106、プロビジョンサーバ500、および、ハードウェアデバイス102を含むプラットフォーム502が、通信ネットワーク504に連結されたシステムを示す。一実施形態では、システムはさらに、取り外し可能記憶媒体(CDまたはDVD)を有するCDまたはDVD等のディスクドライブであってよい記憶装置506を含む。
【0037】
鍵生成サーバ106は、プロビジョンデータベース112の内容をプロビジョンサーバ500に送り、プロビジョンサーバ500が、通信ネットワーク504を介して、ハードウェアデバイス102が設置されているプラットフォーム502に鍵のオンラインでのプロビジョンを行うことができるようにする。プロビジョンデータベース112は、フラッシュメモリまたはCDまたはDVD等の不揮発性メモリデバイス等の取り外し可能な記憶媒体に格納して、ハードウェアデバイス102に対して鍵をオフラインでプロビジョンするようにしてもよい。
【0038】
ハードウェアデバイス102がプラットフォームに設置されており(たとえばホストシステムに設置されており)、鍵が無効になっていると気づいた場合には、デバイスは、プロビジョンサーバ500にコンタクトするための要求を発行する。一実施形態では、要求は、ハードウェアデバイス102から、プラットフォーム502のホストネットワークスタックを介して、セキュアな通信チャネルを通ってプロビジョンサーバ500へと送信される。セキュアなチャネルは、人が介在する攻撃に対してロバストなので、ホストネットワークスタックが壊れている場合であっても、ファームウェアのみがプロビジョンIDおよびプロビジョン鍵にアクセスすることができることから、鍵プロビジョンのセキュリティは影響されない。
【0039】
図6は、ハードウェアデバイス102がプロビジョンサーバから鍵を取得するオンラインによる方法の一実施形態を示す。
【0040】
ブロック600で、プラットフォームのハードウェアデバイス102は、ハードウェアデバイスの保護されているメモリ109(ヒューズまたはランダムゲート等)に格納されているデバイス固有鍵を取得する。ハードウェアデバイス固有鍵110が暗号化されている場合には、ハードウェアデバイス102は、共有鍵(GK)を利用して復号化を行う。ハードウェアデバイス102は、上述したように鍵生成サーバ106と協働して、擬似乱数関数を利用することで、デバイス固有鍵からプロビジョンIDを導出する。処理はブロック602に続く。
【0041】
ブロック602で、ハードウェアデバイス102は、セキュアなチャネルをセットアップするために、プロビジョンサーバ500との間での鍵交換プロトコルを開始する。一実施形態では、鍵交換プロトコルは、SSL(Secure Sockets Layer)/TLS(Transport Layer Security)セッションを利用して、プロビジョンサーバが認証されたものであるかを検証する。通信ネットワーク504経由でプロビジョンIDを明らかにすることに関してプライバシーの心配がない一実施形態では、セキュリティチャネルが不要であり、利用しない。処理はブロック604に続く。
【0042】
ブロック604では、ハードウェアデバイス102がプロビジョンIDをプロビジョンサーバ500に通信ネットワーク(たとえばインターネット)を介してセキュアなチャネルで送る。処理はブロック606に続く。
【0043】
ブロック606で、プロビジョンサーバ500は、プロビジョンデータベース112からプロビジョンIDを受信して、プロビジョンデータベースに格納されているプロビジョンIDに関連付けられた暗号化された鍵を取得する。ハードウェアデバイス102は、セキュアなチャネルを介してプロビジョンサーバ500から暗号化された鍵を受信する。
【0044】
ハードウェアデバイス102が通信ネットワークにアクセスを有さない実施形態も可能であり、この場合には、ハードウェアデバイス102にセキュリティ機能を提供するために、鍵のプロビジョンが必要となる。取り外し可能な記憶媒体のプロビジョンデータベース112をハードウェアデバイス102のエンドユーザに提供することで、鍵を、ハードウェアデバイス102にオフラインでプロビジョンすることができる。エンドユーザは、取り外し可能な記憶媒体に含まれた形でプロビジョンデータベース全体を受け取るが、このプロビジョンデータベースのなかで、固有デバイス鍵から導出ししたハードウェアデバイスのプロビジョン鍵が暗号化した鍵のみを利用することができる。
【0045】
ハードウェアデバイス102は、オフラインのプロビジョンでも、オンラインプロビジョンで説明した方法を利用してプロビジョンIDを取得する。しかし、プロビジョンIDを通信ネットワークで送信する代わりに、ハードウェアデバイス102は、プロビジョンIDに関連付けられている暗号化された鍵を求めて、ローカルのプロビジョンデータベースを検索することもできる。
【0046】
図7は、ハードウェアデバイス102に実装されている、暗号化鍵を復号する方法を示す。
図7に示す方法は、オンラインまたはオフラインプロビジョンを利用してプロビジョンされた暗号化鍵に関するものである。
【0047】
ブロック700で、ハードウェアデバイス102は、ハードウェアデバイス102に格納されている、自身のデバイス固有鍵110を取得する。処理はブロック702に続く。
【0048】
ブロック702で、ハードウェアデバイス102は、デバイス固有鍵110から、一方向擬似乱数関数(PRF)を利用して、プロビジョン鍵および格納鍵を導出する。導出された格納鍵は、プラットフォームの任意の秘密を隠すために利用することができる。導出されたプロビジョン鍵をプロビジョンに利用する。処理はブロック704に続く。
【0049】
ブロック704で、ハードウェアデバイス102は、導出されたプロビジョン鍵を利用して、
図6を参照して説明したオンラインまたはオフライン鍵プロビジョン方法を利用して取得された暗号化された鍵を復号する。処理はブロック706に続く。
【0050】
ブロック706で、ハードウェアデバイス102は、セキュアなストレージにローカルに、暗号化鍵を格納する。別の実施形態では、暗号化された鍵は、格納鍵と擬似乱数関数とを利用して再度暗号化することができ、この再度行われた暗号化の結果は、受信された暗号化された鍵の代わりに、ローカルにセキュアなストレージに格納することができる。
【0051】
ハードウェアデバイス102は、鍵材料を暗号化するために利用されるプロビジョン鍵を導出することができるので、ハードウェアデバイス102の製造業者から鍵材料(暗号化された鍵)を遠隔で成功裏に取得することができる。攻撃者(たとえばマルウェア)は、擬似乱数関数とともに利用されてプロビジョン鍵が導出されるデバイス固有鍵110なしに、ハードウェアデバイス製造業者から鍵材料を取得することはできない。攻撃者は、取り外し可能な記憶媒体を介してプロビジョンデータベースにアクセスを有する場合はあるが、攻撃者は、有効なプロビジョン鍵なしには暗号化された鍵を復号することはできない。
図3との関連で説明した共有鍵を利用する実施形態では、製造テストマシン104が壊れている場合には、攻撃者は、すべてのデバイス固有鍵が製造テストマシン104にはわからない共有鍵によって暗号化されているために、製造業者から暗号化された鍵を取得することができない。
図4との関連で説明した実施形態では、製造テストマシン104が共有鍵について知っていたとしても、デバイス固有鍵またはプロビジョン鍵のことを知ることはできない。
【0052】
小型の、書き込みが一度だけ可能なメモリは、ハードウェアデバイス102を悪意のある攻撃者から守るために利用される他の鍵を導出するために利用されるハードウェアデバイス102の信頼の連鎖(root of trust)として、デバイス固有鍵を格納する。一実施形態では、書き込みが一度だけ可能なメモリは、128ビットである。別の実施形態では書き込みが一度だけ可能なメモリが256ビットである。他の実施形態では、書き込みが一度だけ可能なメモリは、128ビットまたは192ビット、または、対称暗号で利用される鍵の長さに応じた別のサイズである。製造プロセス中にハードウェアデバイス102に鍵を格納する方法は、悪意のある製造テストマシン104に対してロバストであるが、これは、デバイスの製造が他の実体に委託される場合には重要である。少なくともプロセッサと1以上の集積回路を有するチップセットを含むプラットフォームでは、チップセットの各集積回路およびプロセッサは、デバイス固有鍵を有するセキュリティエンジンを含みうる。鍵のプロビジョンは簡単でスケーリング可能であり、対称鍵演算を利用するために、トラステッドコンピューティングベース(TCB)のサイズを低減させることができる。
【0053】
トラステッドプラットフォームは、通常、実行環境の設定を証明するため、または、プラットフォームの認証のために、デバイス認証鍵(DAK)を有している。DAKは、
図6から
図7を参照して説明したオンラインまたはオフラインのプロビジョン方法を利用してトラステッドプラットフォームにプロビジョンすることができる。トラステッドプラットフォームはさらに、プラットフォーム鍵および秘密を暗号化するために利用される格納ルート鍵(SRK)を有してよい。一実施形態では、DAKは、DAA(Direct Anonymous Attestation)鍵または任意の他の種類のデジタル署名鍵であってよい。
【0054】
DAAは、匿名の署名を提供するための暗号プロトコルである。DAAは、トラステッドプラットフォームモジュール(TPM)専用に設計される。DAAは、トラステッドプラットフォームのユーザのプライバシーを守りつつ、トラステッドプラットフォームを遠隔に認証することができる。
【0055】
例えばプラットフォームの悪意のある攻撃(たとえばソフトウェアウィルス)に対するプラットフォームのトラステッドコンピューティングベース(TCB)の脆弱性が見つかると、プラットフォームに別のバージョンのファームウェアをインストールすることで脆弱性を是正することができる。しかしプラットフォームは、他の実体(外部の実体)によってファームウェアの脆弱性が是正されたことを暗号的に証明することはできない。
【0056】
図8は、トラステッドプラットフォームのトラステッドコンピューティングベース(TCB)800の一実施形態を示すブロック図である。
図8からわかるように、TCB800は、暗号導出モジュール812及び814を更に含む復旧不可能なTCB810を含む。復旧不可能なTCB810は、また、報告されていないファームウェアの署名を検証するモジュール816を含む。モジュール812、814及び816は、既知の方法を用いることによって実装されることができ、下記以上の詳細は記載されない。
【0057】
トラステッドコンピューティングベース800の鍵構造では、プラットフォーム502のハードウェアデバイス102に埋め込まれたデバイス固有鍵110が存在している。デバイス固有鍵110は、ハードウェアデバイス102の保護されたストレージ109に永久的に格納されている。このデバイス固有鍵110は、プラットフォームの他の鍵の「ルート鍵」であり、トラステッドコンピューティングベース800のいくつかの他の鍵(たとえば、プロビジョンID802、プロビジョンベース鍵822、プロビジョン鍵804、および格納鍵806)が、このデバイス固有鍵110から導出される。
【0058】
プロビジョンID802およびプロビジョン鍵804は、鍵プロビジョンサーバ500から固有のDAK鍵をダウンロードするために利用される。格納鍵806は、DAK鍵を含む、プラットフォーム502の鍵および秘密を暗号化するために利用される。
【0059】
TCB802内のアップグレードされたファームウェアを機能させるためには、これら導出鍵(たとえばプロビジョンID802、プロビジョン鍵804、および格納鍵806)にアクセスする必要がある。固有識別子は、ファームウェアの異なるバージョンを識別するように割り当てられている。一実施形態では、固有識別子は、不揮発性メモリの復旧不可能なファームウェアコード818に格納され、復旧不可能なTCB810が読み出すことができるセキュリティバージョン番号(SVN)808である。他の実施形態では、ファームウェアの異なるバージョンを識別するための固有識別子を割り当てる代わりに、ファームウェアの画像の各バージョンに対して暗号関数を実行することにより、各ファームウェアのバージョンの固有識別子を導出することができる。
【0060】
デバイス固有鍵110から導出した鍵(つまり、プロビジョンID802、プロビジョン鍵804、および格納鍵806)は、復旧不可能として指定され、「復旧不可能なTCB」と称される場合もあるTCB810の署名検証部分で計算される。プロビジョン鍵804および格納鍵806は、セキュリティバージョン番号808に基づいて導出され、TCB810の署名検証部分から、TCB800の復旧可能部分に出力される。鍵がデバイス固有鍵110から導出された後で、TCB810の署名検証部分は、デバイス固有鍵110へのアクセスを「ロック」して、TCB800の復旧可能な部分が、デバイス固有鍵110(たとえば未加工の「ルート鍵」)にアクセスしないようにする。プロビジョン鍵804および格納鍵806が、TCBの復旧可能な部分に格納されると、TCB800のSVN808に更新があった場合、プロビジョン鍵804および格納鍵806が更新される。たとえば鍵の導出は、デバイスの起動時に復旧可能なTCB810内で実行される。新たなファームウェアがプラットフォームにインストールされるたびに、デバイスの再起動が実行されて、これにより新たなプロビジョン鍵および格納鍵がデバイスの再起動中に計算されることになる。
【0061】
図9は、TCB800のセキュリティの脆弱性から復旧するための方法を示すフローグラフである。セキュリティの脆弱性が復旧可能なTCBで見つかると、TCBの復旧をトリガする。
【0062】
ブロック900で、TCB800にセキュリティの脆弱性が見つかると、プラットフォーム/ハードウェアの製造業者は、脆弱性を是正するソフトウェア修正を含むファームウェアの新たなバージョンを生成する。ファームウェアの新たなバージョンには、セキュリティバージョン番号808が割り当てられる。ファームウェアがマルウェアではなく、プラットフォーム/ハードウェア製造業者のものであることを検証するために、ファームウェアの新たなバージョンには、ハードウェアの製造業者のデジタル署名(暗号化)がなされている。復旧可能なTCB810は、製造業者の公開鍵(つまり、ハードウェアデバイス102に埋め込まれているファームウェア検証鍵)を利用して署名を検証することができ、新たなファームウェア画像が、ハードウェアの製造業者からのものであり、マルウェアではないことを確かめることができる。製造業者は、この新たなファームウェア画像を公知の方法(たとえばOEM(Original Equipment Manufacturer)またはソフトウェア製造業者のソフトウェアアップデート)を利用して各プラットフォームに配信することができる。処理はブロック902に続く。
【0063】
ブロック902で、ファームウェアの新たなバージョンがプラットフォームにインストールされた後で、TCB800の署名検証部分が、プラットフォームのハードウェアデバイス102に埋め込まれているファームウェア検証鍵820を利用して、復旧可能なTCBの新たなファームウェアの署名を検証する。TCB810の署名検証部分は、ファームウェアに埋め込まれている新たなファームウェアのセキュリティバージョン番号(SVN)808を取得して、ハードウェアデバイス102に格納されているデバイス固有鍵110を取得する。プロビジョンID802およびプロビジョンベース鍵822が、デバイス固有鍵110から導出される。プロビジョン鍵804は、プロビジョンベース鍵822およびSVN808から導出される。格納鍵806は、デバイス固有鍵110およびSVN808から導出される。これらの鍵の導出方法については後述する。導出されたプロビジョン鍵ID802、プロビジョン鍵804、および格納鍵806は、復旧可能なTCBに送られる。処理はブロック804に続く。
【0064】
ブロック906で、新たなDAKを新たなバージョンのファームウェアについて生成する。TCBの復旧がトリガされると、ハードウェアの製造業者は、DAKを、ファームウェアの新たなバージョンを受信した各プラットフォーム502に再度プロビジョンして、セキュリティの脆弱性を是正する。鍵生成サーバ106は、DAKを生成して、それぞれのプラットフォームに通信ネットワーク504経由で送信する。前述したように、鍵生成サーバ106のプロビジョンデータベース112は、プロビジョンID802およびプロビジョンベース鍵822を、製造テストデバイスがテストした各ハードウェアデバイス102について格納する。プロビジョン鍵804は、格納されているプロビジョンベース鍵822から、最新のセキュリティバージョン番号808に基づいて導出される。一実施形態では、選択される鍵導出方法が、ブロック904で利用されるものと同じである。新たな固有のDAKがハードウェアデバイス102について生成されて、プロビジョン鍵804を利用して暗号化される。任意の対称暗号アルゴリズム(たとえばAES−GCM)を利用することができる。鍵生成サーバ106は、各データベースエントリがプロビジョン鍵804と対応する暗号化されたDAKとを有するようなDAKプロビジョンデータベースを準備する。鍵生成サーバ106は、DAKプロビジョンデータベースを鍵プロビジョンサーバ500に送信する。各プラットフォームは、鍵プロビジョンサーバ500から新たなDAKをダウンロードする。
【0065】
復旧可能なTCBは、プロビジョンID802とプロビジョン鍵804とを有し、プロビジョンプロトコルを利用してプロビジョンサーバ500と通信して、プラットフォーム502から新たなDAK鍵を取得する。プラットフォーム502は、自身のプロビジョンID802を、プロビジョンサーバ500の公開鍵を利用して暗号化して、暗号化されたプロビジョンIDをプロビジョンサーバ500に送る。プロビジョンサーバ500は、受信した暗号されているプロビジョンIDを、秘密鍵を利用して復号して、要求を発するプラットフォーム502の、暗号化されていないプロビジョンID802を得る。プロビジョンサーバ500は、プラットフォーム502のハードウェアデバイス102のために新たなプロビジョン鍵により暗号化された、新たな暗号化DAK鍵を格納するプロビジョンID802に対応するエントリを求めて、DAKプロビジョンデータベースを検索する。プロビジョンサーバ500は、暗号化された新たなDAKをプラットフォーム502に送る。プラットフォーム502は、新たなDAKを、新たなプロビジョン鍵を利用して復号する。プラットフォーム502は、新たなDAKを、自身の新たな格納鍵806を用いて再度暗号化して、暗号化された新たなDAKをセキュアに格納する。暗号化された新たなDAKは、プラットフォーム502の不揮発性メモリに格納される。不揮発性メモリはBIOSフラッシュメモリ、チップセットフラッシュメモリ、固体ドライブ、または、ハードディスクドライブであってよい。DAKが格納鍵により暗号化されているために、不揮発性メモリが攻撃者により万一アクセスされた場合であっても、攻撃者はDAKを復号することができない。
【0066】
プラットフォーム502が、セキュリティの脆弱性を是正するために新たなファームウェアをインストールしていない場合には、最新のSVNに対応する新たなプロビジョン鍵804を導出することができない。したがって、プラットフォーム502は、たとえ暗号化された新たなDAKをプロビジョンサーバ500から受け取った場合であっても、新たなDAKを復号することができない。処理はブロック908に続く。
【0067】
ブロック908で、プラットフォーム502が、新たなSVNを有する新たなファームウェアをインストールすると、さらに、新たなSVNに対応する新たな格納鍵806も有することになる。ファームウェアがアップグレードされる前に、プラットフォーム502は、プラットフォーム鍵材料と秘密とを、古いSVNに対応する古い格納鍵806を利用して暗号化しているはずである。したがってプラットフォーム502は、鍵の移行を行う(つまり、新たな格納鍵を利用して、すべてのプラットフォーム鍵材料を再度暗号化する)。古い格納鍵で暗号化した各データアイテムについて(鍵材料であっても秘密であっても)、プラットフォーム502は、古い格納鍵を利用して復号を行い、暗号化されていないデータの整合性を検証する。プラットフォーム502は、次に、新たな格納鍵を利用してデータを再度暗号化して、暗号化されたデータをプラットフォームの不揮発性メモリに格納する。上述したように、不揮発性メモリとは、TCB以外のメモリのことである。
【0068】
攻撃者がTCBファームウェアの古いバージョンを破壊して、古いバージョンに関連付けられている格納鍵806を抽出してしまっている場合には、ファームウェアを更新した後であっても攻撃者がプラットフォームの秘密(新しいDAKを含む)を復号できてしまうことから、新たな格納鍵を導出する。
【0069】
現在の復旧可能なTCTにソフトウェアの脆弱性が見つかった場合には、脆弱性を直す復旧可能なTCBファームウェアを更新して、新たなSVN808を割り当てることによって、復旧することができる。TCBの古いバージョンは、新たなプロビジョン鍵804または新たな格納鍵806がそれぞれ新たなSVN808を利用して導出されることから、新たなDAK鍵をダウンロードしてラップする(暗号化する)ために利用されるこれら鍵にアクセスしたり導出したりすることはできない。加えて、プラットフォーム502の製造業者は、前のTCBバージョンに関連付けられているDAKを無効化することができる。新たなDAKをダウンロードした後で、各プラットフォーム502は、この新たなDAKを利用して、暗号的に、TCB800のどのバージョンが利用されているかを証明することができる。
【0070】
復旧可能なTCBが、脆弱性を是正する新たなファームウェアでアップグレードされていない場合には、復旧可能なTCBは、最新のSVNのプロビジョン鍵804を取得することができないので、DAK鍵の現在のバージョンを取得することができない。さらに、復旧可能なTCBが、鍵の移行目的で前の格納鍵824へのアクセスを得て、復旧可能なTCBが新たなSVNにアップグレードされている場合には、新たな復旧可能なTCBは、前のバージョンのデータと鍵とを復号して、これらを新たな格納鍵を利用して暗号化することができる。
【0071】
次に、鍵を導出して、前の格納鍵を計算する方法を説明する。一実施形態では、SVNに割り当てられている初期値が1であり、新たなファームウェアの更新が行われるたびに、SVNを1ずつ増分する。SK[i]は、SVNiに対応する格納鍵のことを示す。プロビジョンIDおよびプロビジョン鍵804は、以下のようにして計算される。
プロビジョンID = PRF(デバイス固有鍵, "プロビジョンID"),
プロビジョンベース鍵= PRF(デバイス固有鍵, "プロビジョンベース鍵"),
プロビジョン鍵 = PRF(プロビジョンベース鍵, "プロビジョン鍵" || SVN).
【0072】
一実施形態では、復旧可能なTCBが、前の格納鍵824すべてを、i=1、…に対して、SVNについて、SK[i]=PRF(デバイス固有鍵"格納鍵"||i)、として計算する。
【0073】
次に、復旧不可能なTCBが、すべての格納鍵を復旧可能なTCBに送信する。
【0074】
別の実施形態では、前の格納鍵を1つだけ計算する。格納鍵806が保護するデータのストレージを制御するプラットフォーム502は、現在の格納鍵と、前の格納鍵とに対するアクセスのみを必要とする。前の格納鍵とは、直前のファームウェア更新が行われる前にプラットフォーム502が利用していた格納鍵のことである。
【0075】
ファームウェアは、前のSVNを利用してすべての既存のデータを復号してから、現在のSVNを利用してデータを暗号化することができ、こうすることで、この遷移中以外に古いSVN鍵が不要となる。復旧不可能なTCB810は、2つの格納鍵(つまり、現在のSVN用の第1の格納鍵806と、前のSVN用の第2の格納鍵824)を出力する。プラットフォームのユーザは一部のファームウェアのアップグレードを省くことがあるので、前のSVN(pSVN)は、SVN−1ではない場合もある。復旧不可能なTCB802は以下を計算する。
SK[SVN] = PRF(デバイス固有鍵, "格納鍵" || SVN).
SK[pSVN] = PRF(デバイス固有鍵, "格納鍵" || pSVN).
SVNは現在の鍵であり、pSVNは前のSVNであり、PRFは擬似乱数関数である。
【0076】
SVN808は、TCB800のファームウェアから入手可能である。pSVNは、格納されている不揮発性メモリから復旧可能なTCB810に提供することができる。たとえばチップセットTCB復旧を実装するときに、プラットフォームが、BIOS(Built In Operating System)のフラッシュ分割テーブル(FPT)パーティションにpSVNを格納する。プロセッサTCB復旧を実装する実施形態では、前の格納鍵を、pSVNを利用せずに導出することができる。
【0077】
図10は、前の格納鍵を計算するために鍵生成を実行するためのハッシュチェイン方法の一実施形態を示すフローグラフである。保護されるデータを格納する領域(部分)を制御しないプラットフォーム502において、前から保護されているデータに適切なアクセスを保証するためには、前の格納鍵824が複数必要となる。
【0078】
ブロック1000で、復旧可能なTCBファームウェアから現在のSVN808が読み出される。処理はブロック1002に続く。
【0079】
ブロック1002で、最大数の復旧可能な前のSVN(「n」)がある。たとえば一実施形態では、復旧可能な前のSVNの最大数は32であってよい。現在のSVNが、復旧可能な前のSVNの最大数未満である場合には、処理はブロック1004に続く。そうではない場合には、SVNがnより大きいので、プロビジョン鍵および格納鍵が導出できず、TCBを復旧できない。
【0080】
ブロック1004で、最大数の復旧可能な格納鍵に対応する格納鍵の値をSK[n] = PRF(デバイス固有鍵, "格納鍵" || n)として計算する。処理はブロック1006に続く。
【0081】
ブロック1006で、最大数−1までのすべての格納鍵をSK[i] = ハッシュ(SK[i+ 1 ]) (i = 1 , ... , n- 1)のようにして計算する。
【0082】
SK[i]が与えられると、すべての前のファームウェアバージョンの格納鍵は、ハッシュ関数を計算することで得られる。しかしSK[i]が所与であっても、格納鍵の将来のバージョンは、デバイス固有鍵110なしには導出できない。処理はブロック1008に続く。ブロック1008で、SK[SVN]を出力する。
【0083】
復旧不可能なTCB810は、格納鍵806を1つ出力するだけでよい。しかし、前の格納鍵の最大数が増加すると、格納鍵を導出する際の計算量が増加するが、前の格納鍵の最大数を小さくすると、復旧できる前の格納鍵の数も小さくなる。
【0084】
また別の実施形態では、一部の格納鍵を直接デバイス固有鍵110から導出して、他の格納鍵は次のバージョンのハッシュから計算する。格納鍵の値は以下のように定義されている。
SK[i] = PRF(デバイス固有鍵, "格納鍵" | | i) (iがnの乗数である場合)
SK[i] = ハッシュ(SK[i+l]) (iが nの乗数ではない場合)
nはチェックポイントの整数である。
【0085】
図11は、格納鍵を導出するために回復不可能なTCBが実行する方法の一実施形態を示すフローグラフである。
【0086】
ブロック1100で、SVN808は、復旧不可能なTCBファームウェアから読み出される。処理はブロック1102に続く。
【0087】
ブロックで、現在の格納鍵を、デバイス固有鍵110を以下のように利用して導出する。
m = [SVN / n]とする。
SK[m-n] = PRF(デバイス固有鍵, "格納鍵" || m-n);
i = mn-1, …, SVNについて, SK[i] = ハッシュ( SK[i+l] ).
処理は、ブロック1104に続く。
【0088】
ブロック1104で、前の格納鍵を、現在の格納鍵を利用して以下のように計算する。
i = 1 , . . , m - 1について , SK[i-n] = PRF(デバイス固有鍵, "格納鍵" II i-n)を計算する。 処理は、ブロック1106に続く。
【0089】
ブロック1106で、計算された格納鍵SK[SVN], SK[n], SK[2n]…SK[(m-l)-n]を復旧可能なTCBに出力する。SK[SVN], SK[n], SK[2n]…SK[(m-l)-n]が所与の場合、復旧可能なTCBは、任意のi = 1 ,… SVNについてSK[i]を計算することができる。
【0090】
1つの復旧可能なTCBについての前の格納鍵824を計算する方法の実施形態を説明してきた。しかし、プラットフォームは、複数の復旧可能なTCBのレイヤを有する場合がある。一実施形態では、TCBの各レイヤが銘々SVN808を有している場合がある。各レイヤは、前のレイヤが計算する導出鍵を有している。セキュリティバージョン番号が整数である場合、TCBの各レイヤは、次のレイヤのTCBファームウェアの署名を検証する必要があるだろう。たとえば一実施形態では、復旧不可能なTCBがファームウェアパッチローダであってよく、レイヤ1のTCBがファームウェアレイヤ1であり、レイヤ2のTCBがより高いレベルの技術のファームウェア実装であってよい。
【0091】
図12は、復旧可能なTCB810およびレイヤ1のTCB1202を示すブロック図である。起動シーケンス中に(つまり、プラットフォームに電力を投入するたびに)、復旧不可能なTCB810が、デバイス固有鍵110を受け取る。
【0092】
ブロック1204で、復旧不可能なTCB810は、復旧不可能なTCBファームウェアの署名を検証して、ブロック1206にTCBの復旧不可能なSVNを送る。ブロック1206では、復旧不可能なTCBが、受信したデバイス固有鍵110と復旧不可能なTCBのSVとに擬似乱数関数を実行することに基づいて、レイヤ1のTCB1202の鍵を導出する。
【0093】
ブロック1208のレイヤ1のTCB1202で、レイヤ1のTCB1202は、レイヤ1のTCBファームウェアの署名をチェックする。ブロック1210で、レイヤ1のTCB1202は、ブロック1210で受信した導出された復旧不可能なTCB鍵およびレイヤ1のTCBのSVNに擬似乱数関数を実行することに基づいて、レイヤ2のTCB(不図示)の鍵を導出する。k個の鍵を生成するためには、ブロック1204、1206、1208、および1210に示す鍵生成関数をk回繰り返す。
【0094】
前述した、現在の鍵と前の鍵とを利用する実施形態では、各レベルのマルチレイヤのTCBが、そのレイヤのSVNおよびpSVNに基づいて2つの鍵を生成することができる。これら2つの鍵は、前のレイヤのSVNおよびpSVNの鍵から導出される。
【0095】
図10を参照して説明したハッシュチェイン法は、1つのレイヤのTCB復旧を行うことができるが、複数のレイヤにあわせスケーリングはできない。
【0096】
プラットフォームがランタイムにクエリ可能であるアクティブな復旧可能レイヤを含む場合には、ハイブリッド法は、ハッシュチェインを利用して、復旧可能なレイヤを保護する。復旧可能なレイヤは、残りのレイヤのSVNを格納して、要求に応じて様々なレイヤのpSVNの任意の組み合わせの格納鍵を導出することができる。
【0097】
図13は、復旧可能なレイヤを保護するためにハッシュチェインを利用するハイブリッド方法を示すブロック図である。復旧不可能なTCBレイヤ810、レイヤ1のTCB1300、レイヤ2のTCB1302、およびレイヤ3の1304という4つのレイヤが示されている。図示されている4つのレイヤすべてを、プロセッサユニットの実施形態に実装することができる。チップセットの実施形態では、通常、これらレイヤの2つのみ(つまり、復旧不可能なTCBレイヤ810およびレイヤ1のTCB1300)が利用される。鍵レジスタ1314は、プロセッサユニットの実施形態の復旧不可能なTCBレイヤ810およびレイヤ3 1304が利用するプロセッサユニットまたはチップセットの特別なレジスタであってよい。
【0098】
各レイヤ(i)のTCBは、TCB[i] = TCBレイヤiのSVN、として計算される。
【0099】
復旧不可能なTCBレイヤ810は、格納されているデバイス固有鍵110を受信して、レイヤ1の復旧可能なTCBファームウェアの整合性およびソースを検証して、PRFループ1312のハッシュチェインを利用してSK[TCB[1]]を計算する。PRFループ1312は、鍵の特定の改定版の特定のレイヤのプロビジョン鍵を導出して、鍵レジスタにレイヤ1のCB1300のプロビジョン鍵を格納する。PRFループはさらに、レイヤ1のSVN1305、レイヤ2のSVN1306、および、レイヤ3のSVN1308も生成する。PRFループ1312で実行されるPRF関数は、ルート鍵および現在のTCBバージョン(または前のTCBバージョン番号)に実行されるハッシュ関数である。
【0100】
レイヤ1のTCB1302は、レイヤ2の整合性およびソースを検証して、PRFループ1312が保護されているレジスタ(たとえばTCBSVNレジスタ1310)に生成したレイヤ2のセキュリティバージョン番号(SVN)1306を格納する。TCBSVNレジスタ1310は、他のレイヤにより書き換えられないよう保護されている。
【0101】
レイヤ2から最後のレイヤまでは、レイヤ1 1300との関連で説明したものと同じ動作を実行する。最後のレイヤで実装される命令は、レイヤ1の関数getKey(TCB_request[])を呼び出すことができ、この関数は以下の処理を行う。
i = 1 , ...について , TCBレイヤは以下をカウントする。
TCB_request[i] > TCB[i]の場合には, 失敗(failure)を返す。
TCB_request[i] < TCB[i]の場合には、
チェインを利用して、tmp = SK[TCB_request[i]]として、
PRF(tmp, "格納鍵" || j || k)を返す;
ここでjおよびkは、それぞれレイヤ1のTCB1300およびレイヤ2のTCB1302のSVNである 。
【0102】
レイヤ1がアクティブであり続けている限り、TCBレイヤの前の順列(permutation)の格納鍵806を導出する。
【0103】
レイヤ3の1304はさらに、プロビジョン鍵の前のバージョンを生成することを要求されている場合、鍵レジスタ1314に格納されているプロビジョン鍵を利用して、PRFループ1318のPRF関数を随意で実行する。PRF関数は1320で、鍵レジスタ1314に格納されている、または、格納されているレイヤ2のSVN1306および格納されているレイヤ3のSVN1308でPRFループ1318に導出されたプロビジョン鍵に実行される。格納鍵は、このPRF関数
1322の結果に基づいて計算される。
【0104】
破損しているプラットフォームは、プロビジョンサーバ500からの新たなDAKを受信することを妨げられる。各プラットフォームは、自身の復旧可能なTCBファームウェアが更新されると、新たなDAKを受信することができる。プラットフォームが無効化されている場合(たとえばプラットフォームのデバイス固有鍵110が悪意のハードウェアの攻撃中に抽出された場合)、DAK再プロビジョンプロトコルは、新たなDAKをプラットフォームに提供しない。
【0105】
図14は、プラットフォーム502とプロビジョンサーバ500との間にプロトコルをプロビジョンするデバイス認証鍵(DAK)の一実施形態を示す。
【0106】
1400で、プラットフォーム502とプロビジョンサーバ500とは、標準的なプロトコル(たとえばTLS/SSL)を利用してセキュアな通信チャネルをセットアップする。
【0107】
1402で、プラットフォーム502は、自身の前のDAKを利用してメッセージを暗号化して、暗号化したメッセージをプロビジョンサーバ500に送信する。プロビジョンサーバ500は、前のDAKをチェックして、前のDAKに無効化チェックを行い、無効化されているかどうかを確かめる。プラットフォーム502が無効化されている場合には、プロビジョンサーバ500はプロトコルを終了させる。
【0108】
1404で、プラットフォームは、セキュアなチャネルでプロビジョンID802をプロビジョンサーバ500に送信する。プロビジョンサーバ500はDAKプロビジョンデータベース内を、受信したプロビジョンID(ハードウェアデバイス102それぞれに1つ)を利用して検索して、プラットフォーム502の暗号化された新たなDAKを取得する。
【0109】
1406で、プロビジョンサーバ500は、新たな暗号化されたDAKをプラットフォーム502に送信する。
【0110】
プラットフォーム502にプロビジョンした後でDAKを削除する、というプロビジョンサーバ500のプライバシー要件がある実施形態では、DAKの再プロビジョンを修正して、プロビジョンサーバ500にDAKを格納する。
【0111】
図15は、プラットフォーム502とプライバシーをサポートするためのプロビジョンサーバ500との間に
図14のプロトコルを再度プロビジョンするための一実施形態を示す。
【0112】
図14を参照して説明したように、1400で、プラットフォーム502は、プロビジョンサーバ500との間でセキュアなチャネルをセットアップする。
【0113】
1402で、プラットフォーム502は、前のDAKをプロビジョンサーバ500に送ることで、自身が無効化されていないことを証明する。
【0114】
1404で、プラットフォーム502は、セキュアなチャネルでプロビジョンIDをプロビジョンサーバ500に送信する。プロビジョンサーバ500は、前のDAKに合致するものを探してDAKプロビジョンデータベースを検索して、プラットフォーム502の新たなDAKを取得する。
【0115】
1506で、プロビジョンサーバ500は、プロビジョン鍵804を用いて暗号化された新たなDAKを、プラットフォーム502に送り返す。プラットフォーム502は、暗号化されたDAKを、そのプロビジョン鍵804を利用して復号する。
【0116】
1508で、プラットフォーム502は、受信した新たなDAKを、格納鍵806を利用して再度暗号化するが、この格納鍵806は、プロビジョンサーバ500および鍵生成サーバ106には知らされていない。プラットフォーム502は、格納鍵806で暗号化された新たなDAKを、プロビジョンサーバ500に送る。プロビジョンサーバ500は、プラットフォームのDAKをデータベースから削除して、格納鍵で暗号化された新たなDAKをデータベースに格納する。
【0117】
図16は、格納鍵で暗号化したプラットフォームのDAKを格納するプロビジョンサーバ500とプラットフォームとの間のDAKバックアップ取得プロトコルの一実施形態を示す。
【0118】
プラットフォームが自身のDAKを失った場合には、プロビジョンサーバ500のデータベースに格納されているDAKをダウンロードすることができる。
【0119】
1600で、プラットフォーム502は、プロビジョンサーバの公開鍵を利用して自身のプロビジョンID804を暗号化して、暗号化したプロビジョンIDをプロビジョンサーバ500に送信する。暗号化されたプロビジョンIDを受信すると、プロビジョンサーバ500は、プロビジョンIDを復号して、プロビジョンサーバのデータベースを、プロビジョンIDに対応するエントリを探すべく検索する。
【0120】
1602で、プロビジョンサーバ500は、プロビジョンサーバ500のデータベースに格納されているプラットフォームの格納鍵806で暗号化されたDAKをプラットフォームに送信する。暗号化されたDAKを受信すると、プラットフォーム502は、その格納鍵を利用して、受信した暗号化されているDAK(DAKのバックアップコピー)を復号する。
【0121】
前のセキュリティバージョン番号(PSVN)は、不揮発性書き換え可能メモリ(たとえばプラットフォーム502のフラッシュメモリ)に格納される。簡単な、消耗を予防する保護アルゴリズムを利用して、不揮発性書き換え可能メモリの消去サイクルを防止するために最少のフラッシュファイルシステムサポートによって不揮発性書き換えメモリに永続的にPSVNを格納する。
【0122】
不揮発性書き換え可能メモリ(たとえばフラッシュメモリ)の64バイトのブロック(パーティション)を利用して、前のセキュリティバージョン(PSVN)を格納する。各バイトが潜在的なPSVNを表しており、64バイトのブロックの1つのバイトのみが各時点で有効である。64バイトブロックの1バイトの初期値は255である(16進法表現で0xFF)。そのバイトの値が0である場合には(16進法表現の0x00)、SVNエントリが既に利用されており、今は無効であることになる。任意の他の値(1から254(16進法表現で0x01−0xFE))が、PSVNエントリが有効であることを示す。
【0123】
図17は、不揮発性書き換え可能メモリにP−SVNを格納する方法の一実施形態のフローグラフを示す。
【0124】
ブロック1700で、現在のバイトのアドレスが64バイトのブロックの最大バイトのアドレス未満である場合には、処理はブロック1702に続く。
【0125】
ブロック1702で、現在のアドレスの64バイトのブロックのバイトが読み出される。処理はブロック1704に続く。
【0126】
ブロック1704で、値がゼロである場合には、処理はブロック1705に続く。ゼロではない場合には、処理はブロック1706に続く。
【0127】
ブロック1705で、64バイトブロックのアドレスを増分して、次のバイトの位置を読み出す。処理はブロック1700に続く。
【0128】
ブロック1706で、値が255である場合には、アクティブなPSVNがないことになる。処理はブロック1708に続く。値が255でない場合には、値は1から254のいずれかであり、PSVNが有効であることになる。処理はブロック1710に続く。
【0129】
ブロック1710で、前のルート鍵を導出する。
【0130】
ブロック1708では、PSVNエントリの数(PSVNエントリを格納するためにリザーブされている64バイトのブロックで利用可能な位置の数)が64を超えており、プロビジョン鍵を導出することができず、DAK鍵を取り換える(rekeyed)ことができない。
【0131】
プラットフォームが、新たなDAKのプロビジョンを促すことにより、TCBが是正されているかを証明する方法および装置を説明してきた。この方法および装置は、マネジャビリチェインジン(ME)およびTPM等のセキュリティアプリケーションによって利用することができる。
【0132】
当業者であれば、本発明の実施形態に関する方法を、コンピュータ利用可能な媒体を含むコンピュータプログラムプロダクトに具現化することができることを理解する。たとえば、コンピュータ利用可能媒体は、読み取り専用メモリデバイス(たとえば、コンピュータ可読プログラムコードが格納されたCD ROMディスク、または従来のROMデバイス、または、コンピュータディスク)からなってよい。
【0133】
本発明の実施形態は、その実施形態を参照して図示して説明してきたが、当業者であれば、添付請求項に含まれる本発明の実施形態の範囲から逸脱せずに、さまざまな変更を行い、詳細を特定することができることを理解する。