半導体メモリ、当該半導体メモリと結合されるコンピュータマシン、及び、そのデータ処理方法
【課題】非合法に再流通されたデジタルデータが処理されることを防止するためのマシンを提供すること。
【解決手段】半導体格納媒体は、例えば、プログラム、イメージ、音楽、映画など、デジタルデータと、公開鍵と、秘密鍵(private key)と、そして、コンピュータマシンとの通信を操作する回路とを備えており、公開鍵が少なくともデジタルデータと秘密鍵(private key)とから導き出される。第1に、半導体格納媒体は、公開鍵をコンピュータマシンへ転送する。第2に、コンピュータマシンがチャレンジ(乱数)を格納媒体へ送る。第3に、格納媒体がチャレンジのデジタル署名を発行し、そして、それをコンピュータマシンへ送り返す。第4に、コンピュータマシンが、公開鍵を使ってデジタル署名を検証する。第5に、格納媒体がデジタルデータをコンピュータマシンへ転送する。第6に、コンピュータマシンが、公開鍵を使ってデジタルデータを検証する。
【解決手段】半導体格納媒体は、例えば、プログラム、イメージ、音楽、映画など、デジタルデータと、公開鍵と、秘密鍵(private key)と、そして、コンピュータマシンとの通信を操作する回路とを備えており、公開鍵が少なくともデジタルデータと秘密鍵(private key)とから導き出される。第1に、半導体格納媒体は、公開鍵をコンピュータマシンへ転送する。第2に、コンピュータマシンがチャレンジ(乱数)を格納媒体へ送る。第3に、格納媒体がチャレンジのデジタル署名を発行し、そして、それをコンピュータマシンへ送り返す。第4に、コンピュータマシンが、公開鍵を使ってデジタル署名を検証する。第5に、格納媒体がデジタルデータをコンピュータマシンへ転送する。第6に、コンピュータマシンが、公開鍵を使ってデジタルデータを検証する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、デジタルコンテンツを格納するための半導体メモリと、半導体メモリに格納されたデジタルコンテンツを処理するためのコンピュータマシンに関し、より詳細には、本発明は、半導体メモリと、非合法的に再流通されたデジタルコンテンツを処理することを防止するコンピュータマシンと、そして、そのための処理方法に関する。
【背景技術】
【0002】
認証は、海賊行為、未認証のコピー、又は、偽造を取り締まるため、重要な役割を担っている。かかる認証は、例えば、パスポートの所有者を認証し、又は、反偽造を目的とした無線通信可能なチップを埋設した安全なパスポートにも採用されており、そこでは、認証用チップが製造物の出所を認証する。加えて、著作権で保護されたデジタルメディアは、海賊行為などの未認証行為を防止するため、DRM (digital right managements) として知られる認証用トークンを含んでいる。その結果、それらを支える機器(CD、DVD、メモリカード、その他の同様なメモリ装置)は、しばしば、認証メカニズムを備えている。最後に、認証は、競合者が製品をリバースエンジニアリングすることを防止し、かつ、製品を安価に大量生産するためにも有用である。例えば、競合者によって製造された再充填用(リフィル)キットや偽のカートリッジの使用を防止するため、認証用チップをプリンターカートリッジに装着することもできる。
【0003】
認証は、被認証装置(prover)がその特定のための証拠を認証装置(verifier)に提示すプロトコルから構成されている。通常、認証装置は、被認証装置だけが解決可能な要求(チャレンジ:challenge)を送付する。この要求が共通鍵暗号化法に依っている場合には、被認証装置及び認証装置は共通の秘密鍵を共有しており、それに対し、公開鍵暗号化法(public-key cryptography)の場合には、被認証装置だけが秘密鍵を所有し、そして、どの認証装置も、被認証装置によって提供される要求の解を確認(チェック)することが出来る。
【0004】
公開鍵暗号化システム、特に、デジタル署名は、認証の目的のために利用することができる。認証装置はランダムなメッセージを、その秘密鍵を利用してメッセージに署名した被認証装置に送信する。そして、認証装置は、秘密鍵ではなく、被認証装置の公開鍵だけを用いて署名を認証することによって、被認証装置の身元を確認することができる。公開鍵暗号化法に基づく認証システムでは、認証装置は被認証装置の秘密鍵を知らないことから、認証装置が被認証装置を装うことができないという利点を有している。加えて、公開鍵基盤を利用することにより、製品ラインの認証が、容易に可能となる。即ち、被認証装置は、要求に対してデジタル的な署名を行い、そして、その公開鍵と共に、認証局装置(certificate authority)によって署名され、被認証装置の公開鍵のデジタル署名を含んだ被認証装置の公開鍵のための証明書(certificate)を提供する。そして、認証装置は、被認証装置の身元を確認するために、両方の署名を認証することができる。かかるアプローチは、個別ユニットの公開鍵ではなく、証明のための認証手段(例えば、全製品ラインのための単一の公開鍵であり、この公開鍵は製造会社から得られる。)を格納しなければならないという認証装置への格納要求を取り除くだけではなく、簡単な取り消し機構をも含んでいる。ある被認証装置の秘密鍵が知られ、その信用が失われた場合には、当該被認証装置の公開鍵は、全ての認証装置に対してブラックリスト内へ送ってもよい。
【0005】
最近では、CDやDVDなどの媒体よりもよりフレキシブルであることを理由に、半導体メモリを、ゲームやコンピュータプログラムのデジタルデータのための格納手段として利用することに、再び、関心が集まっている。特に、半導体メモリユニットは、認証、コピープロテクション、データの暗号化などの機能性を向上するため、カスタム回路を含むことができる。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】米国特許第6,782,477号:「プライベートコピープロテクションとオンラインセキュリティーを提供するための改ざん防止ハードウェアを使用するための方法とシステム」
【特許文献2】米国特許第6,606,707号:「半導体メモリカード」
【非特許文献】
【0007】
【非特許文献1】ラルフ C.メルクレ:「認証されたデジタル署名」CRYPTO 1989: 218−238頁
【非特許文献2】カミーユ ヴィオム、カツユキ オケヤ、エリック ダーメン、そして、ヨハネス ブックマン:メモリトークンによる公開鍵認証、WISA 2008, LNCS 5379:84−98頁
【発明の概要】
【発明が解決しようとする課題】
【0008】
他方、例えば上記の特許文献1に開示されたデジタル署名は、プログラムの完全性(integrity)を、より具体的には、プログラムが悪意の者により変更されたことをチェックするために有用である。しかしながら、デジタル的に署名されたプログラムは、そのデジタル署名を含め、コピーされ、そして、第三者によって非合法に再流通される可能性がある。実際、かかる第三者は、プログラムとデジタル署名とを含んだ格納媒体と、プログラムを走らせるコンピュータマシンとの間のチャンネルを監視することが出来る。その結果として、そのプログラムとデジタル署名とを引き出し、そして、そのコピーを非合法に再流通することが可能となる。
【0009】
他方、認証は、ある特定の格納媒体が、例えば、ライセンスを介して、公認の配給者によって認証されていることを保障している。特許文献2は、認証のための回路を備えている半導体メモリカードを開示している。しかしながら、認証は、認証が成功した後に転送されたプログラムがその特定の格納媒体に確かに格納されていたことを保障するものではない。例えば、悪意の者は、認証を目的として合法な格納媒体を利用し、その後、悪意の又は非合法に流通されたプログラムを、合法な格納媒体に格納されたプログラムの代わりに挿入することも可能である。
【0010】
非特許文献2は、半導体メモリカードとコンピュータマシンとを開示しており、そこでは、半導体メモリカードとコンピュータマシンとが相互に認証プロトコルに従事し、そして、解読鍵を導き出す。その結果、解読鍵によって暗号化されたデータは、半導体メモリカードに源を発するものであることが保障される。しかしながら、コンピュータマシンと半導体メモリカードは、最初に、多くのコンピュータマシンが多くの半導体メモリカードと結合され得る場合には、実用的ではなく、共通のマスター共通鍵を割り当てなければならない。
【0011】
本発明は、上記で述べた従来技術を考慮して達成されたものである。従って、本発明の一の目的は、メモリユニットや最初に共通鍵を割り当てるコンピュータなしに、メモリユニット内に格納されたデジタルデータの完全性を確立し、もって、非合法に再流通されたデジタルデータが処理されるのを防止するためのマシンを提供することである。更に、上記及び他の目的と新規な特徴が、続く記載や添付の図面から明らかとなろう。
【課題を解決するための手段】
【0012】
上記の目的を達成するため、本発明によれば、まず、コンピュータマシンと結合されるための半導体メモリであって、第1のデータ、第1の鍵、そして、第2の鍵を格納し、前記第1の鍵は、前記第1のデータと前記第2の鍵とから導き出された所定の値であるところの不揮発性メモリユニットと、そして、コンピュータマシンからのチャレンジを受信し、そして、コンピュータマシンへ第2のデータを転送し、第2のデータが、前記第2の鍵と前記チャレンジとから導き出されるところのメモリコントローラとを備えている半導体メモリが提供されている。
【0013】
また、本発明によれば、上述した目的を達成するため、半導体メモリと結合するためのコンピュータマシンであって、CPUと、第1の鍵を格納している不揮発性メモリユニットと、前記半導体メモリからのデータを受信するための入出力インターフェイスとを備えているものにおいて、前記半導体メモリからのデータは、第2の鍵と、第1のデータと、そして、第2のデータとを含んでおり、そして、前記コンピュータマシンは、更に、前記第2の鍵を検証するための署名検証ユニットと、チャレンジを発生するための乱数発生器と、前記第1と第2のデータを処理するためのハッシュ関数ユニットと、そして、前記ハッシュ関数ユニットによって処理されたデータと第2の鍵を比較するための比較ユニットを備えており、もって、第1と第2のデータの完全性を確立するコンピュータマシンが提供されている。
【0014】
更に、本発明によれば、上述した目的を達成するため、データ処理方法であって、半導体メモリからの第1の鍵を受信するステップと、前記半導体メモリへチャレンジを送信するステップと、前記半導体メモリから第1のデータを受信するステップと、前記チャレンジと前記第1の鍵により前記第1のデータの完全性をチェックするステップと、前記半導体メモリから第2のデータを受信するステップと、前記第1の鍵により前記第2のデータの完全性をチェックするステップと、そして、前記第2のデータを処理するステップを備えたデータ処理方法が提供されている。
【0015】
更には、本発明によれば、上述した目的を達成するため、データ処理方法であって、第1の鍵とその証明書を送信するステップと、少なくとも一のデータのハッシュ関数を送信するステップと、チャレンジを受信するステップと、複数の秘密値を送信するステップと、複数のイメージ値を送信するステップと、複数のツリー値を送信するステップと、そして、前記データを送信するステップを備えているデータ処理方法が提供されている。
【0016】
上記に加え、ここに開示された実施例の中の好適なものを以下に略述する。
半導体格納媒体は、例えば、プログラム、イメージ、音楽、映画など、デジタルデータと、公開鍵と、秘密鍵(private key)と、そして、コンピュータマシンとの通信を操作する回路とを備えており、公開鍵が少なくともデジタルデータと秘密鍵(private key)とから導き出される。第1に、半導体格納媒体は、公開鍵をコンピュータマシンへ転送する。第2に、コンピュータマシンがチャレンジ(乱数)を格納媒体へ送る。第3に、格納媒体がチャレンジのデジタル署名を発行し、そして、それをコンピュータマシンへ送り返す。第4に、コンピュータマシンが、公開鍵を使ってデジタル署名を検証する、第5に、格納媒体がデジタルデータをコンピュータマシンへ転送する。第6に、コンピュータマシンが、公開鍵を使ってデジタルデータを検証する。
【発明の効果】
【0017】
秘密鍵(private key)を知らなくとも、チャレンジの公開鍵やデジタル署名を利用し、コンピュータマシンは、正当(合法)な格納媒体を偽造品から区別することができる。更に、公開鍵を利用して、デジタルデータの有効性をチェックできることから、非合法プログラムを挿入することはできない。その結果、本発明は、デジタルデータの認証されていないコピーの利用を防止する。
【図面の簡単な説明】
【0018】
これら及びその他の目的、本発明の特徴や利点は、添付された以下の図面と関連させることにより、より容易に明らかとなろう。
【図1】ゲームマシンと、ゲームプログラムを格納するための半導体メモリとを備えたゲームシステムのハードウェアダイアグラムである。
【図2】半導体メモリ内の論理メモリマッピングのブロックダイアグラムである。
【図3】半導体メモリ内のROMユニットの物理アドレスマップと、ROM領域内に格納されたデータとの機能的な関連を示すブロックダイアグラムである。
【図4】半導体メモリ内のメモリコントローラのハードウェアダイアグラムである。
【図5】メモリコントローラの機能詳細を示すブロックダイアグラムである。
【図6】ゲームマシンにより行われる検証プロトコルの機能詳細を示すブロックダイアグラムである。
【図7】ゲームマシンと半導体メモリとの間の通信プロトコルのブロックダイアグラムである。
【図8】ゲームマシンと半導体メモリとを備えたゲームシステムのハードウェアダイアグラムである。
【図9】半導体メモリ内での論理メモリマッピングのブロックダイアグラムである。
【図10】半導体メモリ内のメモリコントローラのハードウェアダイアグラムである。
【図11】メモリコントローラの機能詳細を示すブロックダイアグラムである。
【図12】ゲームマシン内のセキュリティーチップのハードウェアダイアグラムである。
【図13】ゲームマシンにより行われる検証プロトコルの機能詳細を示すブロックダイアグラムである。
【図14】ゲームマシンと半導体メモリの間の通信プロトコルのブロックダイアグラムである。
【図15】ゲームマシンと半導体メモリユニットの製造プロセスのブロックダイアグラムである。
【発明を実施するための形態】
【0019】
<<定義及び表記法>>
まず、以下に用いられる定義と表記法について述べる。
【0020】
整数は、幾つかの表現を使って記述することができる。最も一般的な表現は十進法表現である。以下の図面における記述では、十進法表現に加えて、十六進法及び二進法表現が使用される。十六進法で書かれた場合、プレフィックス“0x”が添えられる。二進法で書かれた場合には、括弧“(…)”が書き添えられる。
【0021】
例えば、「0xF」は整数15の十六進法表現である。同様に、「(1111)」は15の二進法表現である。
【0022】
デジタルデータは、ビット列であり、ビットストリングとも呼ばれる。同様に、ビットの連続は、バイト列としても表現することができ、1バイトは8ビットから成る。例えば、ストリング(100101101)は9ビットを、又は、2つのバイト、「0x01」と「0x2D」とを有している。
【0023】
「x||y」は、ビットストリング「x」と「y」の連結(concatenation)に言及している。例えば、「0x012D=0x01||0x2D」のように記述する。
【0024】
「x(+)y」は、ビットストリング「x」と「y」のビット毎の排他的ORを言及している(「(+)」は排他的ORの演算記号を表す)。「x >> 1」は、ビットストリング「x」の右への移動を言及する。
【0025】
ビットストリング「x」の最下位ビット(LSB)は、その二進表現の最右のビットである。
【0026】
ハッシュ関数は任意の長さのビットストリングを所定の長さの短いビットストリングにマッピング(map)するアルゴリズムである。例えば、周知のハッシュ関数である「MD5」は、任意のサイズのメッセージを128ビットのハッシュ値にマッピングする。この意味において、ハッシュ値は、大きな入力メッセージの小さな「指紋」とも考えられる。ハッシュ関数の他の重要な特性は、同一のハッシュ値を持った二つのメッセージを見つけ出すことは困難であるということであり、この特性は、「衝突困難性(collision-resistance)」と呼ばれる。以下の好適な実施の形態での記載においては、表記法「y=H(x)」が使われるが、ここで「x」は入力メッセージであり、「H」はハッシュ関数であり、そして「y」はハッシュ値である。幾つかの周知の基本的なハッシュ関数としては、例えば、「MD5」又は「SHA1」がある。更に、ハッシュ関数は、ブロック暗号化(block ciphers)を含め(但し、それに限定されることない)、従来の暗号化関数(encryption functions)によって実現することができることも周知のことである。例えば、周知のブロック暗号化「AES」は、以下のように使用することができる。メッセージ「x」が256ビットを有しているとすれば、かかるメッセージは二つの128ビットのブロックx=x[1]||x[2]に分けることができ、128ビットの初期ベクトル(initial vector)が「IV」であれば、ハッシュ値「y=H(x)」は、以下の二つのステップで計算される。
【数1】
【0027】
上記において、「AESA(B)」は、鍵「A」による「B」の「AES」暗号化に言及しており、「A(+)B」は、「A」と「B」のビット毎の排他的OR(XOR)に言及している(「(+)」は排他的ORの演算記号を表す)。
【0028】
デジタル署名スキームは三つのアルゴリズムからなっている。最初の一つは、鍵対(key-pair)の発生であり、ここでは秘密鍵(private key)と公開鍵とが生成される。秘密鍵(private key)は公開されず、一方、公開鍵は誰にでも配布される。第二のアルゴリズムは、署名発生アルゴリズムである。メッセージと秘密鍵とを入力として、デジタル署名を発生する。第三は、署名認証アルゴリズムであり、これはメッセージ、署名、そして、公開鍵を入力として、署名の真正(correctness)を認証する。
【0029】
公開鍵は自由に入手可能であることから、誰でも署名を認証することはできるが、他方、有効な署名は、秘密鍵(private key)の所有者だけがこれを発生することが出来ることに注目することが重要である。
【0030】
上記非特許文献1に開示されている「Merkle」の署名スキームは、デジタル署名を提供するための周知の技術である。他の署名スキームとは異なり、「Merkle」の署名スキームは、複雑な算術演算を利用することなく、ただ単に、ハッシュ関数に依存するだけである。
【0031】
認証プロトコルは、被認証装置(prover)及び認証装置(verifier)と呼ばれる二つの存在の間における通信プロトコルであり、そこでは、被認証装置がその身元(identity)の証明(proof)を与える。認証プロトコルは、少なくとも二つのステップから構成されており、認証装置がチャレンジ(challenge)を送付し、そして、被認証装置が秘密のデータを利用して応答(response)を生成する。認証装置は、応答の有効性をチェックすることができ、そして、その結果、被認証装置の身元が正しいことを立証する。デジタル署名のスキームから認証プロトコルを構成することは単純であり、そこでは、チャレンジ(challenge)は乱数であり、そして、応答(response)はそのデジタル署名である。例えば、上記非特許文献2には、「Merkle」署名を基礎とした認証技術が開示されており、そこでは、「Merkle」署名が、メモリ動作(memory operations)だけで構成されている。
【0032】
デジタル証明書(digital certificate)は、公開鍵を確認するために有用なデジタル書面(digital document)である。デジタル証明書は、公開鍵のデジタル署名を備えており、そのデジタル署名は、例えば、政府の機関や、その公開鍵が信頼されている確立された会社など、信頼された第三者(trusted third party)により構成されている。加えて、証明書の階層を利用することが一般的であり、そこでは、ルート証明書(root certificate)が、公開鍵を検証するのに利用され、そして、同様に、第二の認証が公開鍵を検証するのに利用される。この型の階層は、一般に、公開鍵基盤(公開鍵インフラストラクチャ:public-key infrastructure)、又は、短縮して「PKI」と呼ばれる。「X.509」が、その構造やデジタル認証のフォーマットを規定するための周知の基準である。
【0033】
以下、本発明の好適な実施の形態について、添付の図面を参照しながら、詳細に述べる。
<<ゲームマシンと半導体メモリユニットの製造プロセス>>
【0034】
ゲームマシンと半導体メモリの詳細を述べる前に、本発明のより良い理解のため、ゲームマシンの製造プロセスと半導体について述べる。
【0035】
図15は、ゲームマシンと半導体メモリユニットの製造プロセスのブロック図である。このプロセスは、本発明の両方の実施例に適用可能である。
【0036】
如何なる特定の限定をも意図するものではないが、このプロセスでは、ゲームマシンの製造者1510、ゲームメーカ1530、そして、メモリ製造者1560という、三人の行為者を含んでいる。ゲームマシン製造者1510は、ゲームマシンを製造し、ゲームメーカ1530は、ゲームマシンにより実行されるソフトウェアプログラムを開発し、そして、メモリ製造者は、ゲームマシンにより実行されるソフトウェアプログラムを格納する半導体メモリユニットを製造する。
【0037】
ゲームマシン製造者1510は、ルート秘密鍵(root private key)1511、ルート公開鍵(root public key)1512、そして、解読鍵(decryption key)1513を保持している。如何なる特定の限定をも意図するものではないが、本発明においては、ルート秘密鍵及び公開鍵は「RSA」鍵であり、そして、それらはゲームマシンの製造者によって所有されたコンピュータ上で発生され、かつ、格納されたものであるとする。幾つかの同一のゲームマシン1514が製造され、そして、商品化されており、全てのゲームマシンは、ルート公開鍵1512と解読鍵1513とを格納している。
【0038】
ゲームメーカ1530がゲームマシン1514のため、対応する未暗号化ゲームヘッダ1533とゲームプログラムとを含めたビデオゲームを開発し、そして、そのゲームの千個のコピーを商品化することを希望したとする。しかしながら、ゲームメーカは、ゲームマシン製造者から、ルート証明書(root certificate)1515を含んだライセンスを得なければならない。
【0039】
ゲームマシン製造者と同様に、ゲームメーカは、ゲームメーカが所有するコンピュータ上で発生され、そして、格納された、ゲーム秘密鍵(game private key)1531とゲーム公開鍵(game public key)1532とを保有している。最初に、ゲームメーカ1530は、ゲーム公開鍵1532を送信して、ゲームマシン製造者1510からライセンスを入手し;ゲームマシン製造者は、解読鍵1513とゲーム公開鍵1532のデジタル署名を含むルート証明書1515を、応答する。デジタル署名は、ルート秘密鍵1511と共に、ゲームマシン製造者に帰属するコンピュータ上で発生される。また、アップデートデータ(data update)1516が、ゲームプログラム内に含まれ、そして商品化されたゲームマシン1514のファームウェアをアップデートするために送信される。
【0040】
次に、ゲームメーカは、ゲームデータを暗号化するため、ゲーム鍵1535を発生し、そして、解読鍵1513を用いてゲーム鍵を暗号化する。また、ゲームメーカは、ゲームヘッダ1533とゲームプログラム1534とを、ゲーム鍵1535を用いて暗号化する。
【0041】
その後、ゲームメーカにより所有されるコンピュータ上では、例えば、1541、1543、1545などの暗号化データが、そして、例えば、1542、1544、1546などのゲーム証明書が発生される、各暗号化データは秘密鍵を含んでいる。より正確には、千の異なる暗号化データがランダムに発生される。また、千の異なる公開鍵が演算される。それに加え、千のゲーム証明書が発生され、各ゲーム証明書は、千の公開鍵の中の一つのデジタル署名を含み、そして、当該署名はゲーム秘密鍵1531を用いて発生される。
【0042】
最後に、ゲームメーカは、千の異なる暗号化データと千の異なるゲーム証明書とを、一意の暗号化されたゲーム鍵1547(unique version)、一意の暗号化されたゲームヘッダ、そして、一意の暗号化されたゲームデータとを用いて結合する。この演算の結果は、例えば、1551、1552、1553のような、メモリ製造者1560へ出荷される千のメモリイメージである。メモリ製造者の役割は、単純に、受信したゲームのメモリイメージを、例えば、1561、1562、1563のような千の半導体メモリユニット内にコピーすることであり、そして、それらを商品化することである。
【0043】
ユーザが原品であるゲームマシンを、そして、原品である半導体メモリを購入した場合、二つの電子装置は、図7又は図14に記載された認証プロトコルを開始し、そして、ユーザはゲームメーカ1530が開発したゲームで遊ぶことが可能となる。
【0044】
上述したプロセスに替え、暗号化されたデータは、メモリ製造者によって、直接、発生することも可能であろう。この場合、メモリ製造者は、ゲーム秘密鍵と公開鍵とを保持し、ゲームマシン製造者からルート証明書を発生する。
<<実施例1>>
【0045】
最初に、メモリコントローラを備えた半導体メモリに焦点を当てた説明を行うが、ここでは、メモリがゲームマシンによって実行されるプログラムを格納している。
<ゲームシステム>
【0046】
図1はゲームシステムのハードウェアダイアグラムであり、ゲームマシン120と、ゲームプログラムを格納するための半導体メモリ100とを備えている。如何なる特定の限定をも意図するものではないが、この実施例では、ゲームマシン120は、手で保持できるポータブルなゲームマシンであるものとする。
【0047】
半導体メモリ100は、プラスチックの覆い101の内部に取り囲まれた電子部品を含んでいる。図1では、破線により示された部品はプラスチックの覆い101の内部に配置されている。
【0048】
半導体メモリ100は二つのタイプのメモリユニット、即ち、読み書きが可能な不揮発性のメモリユニット(read-write non-volatile memory unit)102と、読み出し専用の不揮発性のメモリユニット(read-only non-volatile memory unit)103とを備えている。如何なる特定の限定をも意図するものではないが、この実施例では、読み書き可能な不揮発性のメモリユニットは「EEPROM」チップであり、他方、読み出し専用のメモリユニットは、1回だけプログラマブルな「ROM」チップであるものとする。「ROM」チップ103は、ゲームプログラムを格納することができ、「EEPROM」チップ102は、セーブされたゲーム状態を格納することができる。メモリユニット102と103の詳細な内容は、後に、図2を参照しながら述べる。
【0049】
半導体メモリ100は、メモリユニット102と103をメモリコントローラ105に結合するためのバス104を備えている。メモリコントローラ105は、ゲームマシン120との通信を操作し、そして、メモリユニット102と103内に格納されたデータにアクセスする回路である。通信プロトコルは、後に図7を参照しながら説明する。最後に、半導体メモリ100は、物理的には、ピン106を介して、ゲームマシン120に結合することができる。本実施例においては、12本のピンは、特に限定されるものではないが、以下のようになっている。
− ピン106は、入力接地信号(input ground signal)、
− ピン107は、入力電源供給ピン(input power supply pin)、
− ピン108は、入力クロック信号(input clock signal)、
− ピン109は、入力リセット信号(input reset signal)、
− ピン110〜117は、ゲームマシン120と半導体メモリ100との間の双方向のデータ交換のために利用されるものである。
【0050】
ゲームマシン120は、プラスチックの覆い121、例えば方向性パッド(directional pad)122やボタン123のような入力コントローラ、液晶(LCD)スクリーン124、スピーカ125、そして、オン/オフスイッチ139を有している。半導体メモリ100が空洞部138内に挿入可能となっており、それによって、ゲームマシン120と半導体メモリ100とを物理的に結合するための連結が得られる。本実施例では、12個のコンタクトは、特に限定されるものではないが、以下の通りである。
− コンタクト126は、出力接地信号(output ground signal)、
− コンタクト127は、出力電源供給ピン(output power supply pin)、
− コンタクト128は、出力クロック信号(output clock signal)、
− コンタクト129は、出力リセット信号(output reset signal)、
− コンタクト130〜137は、ゲームマシン120と半導体メモリ100との間の双方向のデータ交換のために利用されるものである。
【0051】
即ち、コンタクト126〜129は、ゲームマシン120から半導体メモリ100への一方向の通信のために使用され、これに対して、コンタクト130〜137は、双方向の通信に使用することができる。
【0052】
プラスチックの覆い121内には幾つかの電子部品がある。RAM(Random Access Memory)141は、アクセスの早い、読み書き可能な揮発性メモリユニットであり、プログラムデータを共に、CPU(Central Processing Unit)143によって処理された中間データをも格納する。フラッシュメモリユニット142は、読み書き可能な不揮発性メモリユニットである。フラッシュメモリ内に格納されるデータには、以下のものを含んでいる:
− ゲームマシンのハードウェアを制御するプログラムである、ファームウェア161、
− ルート公開鍵162、
− 解読鍵163。
【0053】
入出力(I/O)インターフェイスユニット144は、ゲームマシン120と半導体メモリ100との間の通信を操作する回路である。
【0054】
ビデオコントローラ145は、スクリーン124に取り付けられた回路であり、映像をスクリーン124に対して発生し、そして、出力する。サウンドコントローラ146は、音、又は、音楽を表現するデジタル情報をアナログ電気信号に変換し、そして、その信号はスピーカ125によって音響信号に変換される。入力制御ユニット147は、CPU143によって処理することが出来るように、例えば、方向性パッド122又はボタン123に加えられた圧力である入力信号を、デジタル情報に変換する。
【0055】
最後に、電池148は、ゲームマシン内に封入された電子部品に対して電力を供給する。
【0056】
RAM、フラッシュメモリ、CPU、I/Oインターフェイス、ビデオコントローラ、サウンドコントローラは、異なる電子部品への制御信号やデータ信号、そして、そこからの制御信号やデータ信号を伝達するためのバス151に結合されている。加えて、電力が電池148により、バス151を介して電子部品へ供給されている。同様に、コンタクト126〜137、そして、I/Oインターフェイス144が、I/Oバス152に結合されている。スピーカ125とサウンドコントローラ146は、ケーブル153と結合されている。方向性パット122、ボタン123、そして、入力インターフェイス147が、ケーブル154と結合されている。最後に、電池148とオン/オフスイッチ139が、ケーブル155に結合されている。
【0057】
ユーザがスイッチを利用してゲームマシン120の電源をオンすると、フラッシュメモリ142に格納されたファームウェア161がCPU143により実行される。半導体メモリ100が空洞138内に挿入され、それにより半導体メモリ100のピン106〜117をゲームマシン120のコンタクト126〜137に結合すると、ゲームマシンとメモリとが連動し、図7を参照して後に述べる通信プロトコルを行う。通信プロトコルの普通に終了した後、半導体メモリ内に格納されていたプログラムがRAM141に転送され、そして、CPU143により実行される。プログラムは、例えば、映像をスクリーン124上に表示し、スピーカ125を介して音楽や音を鳴らし、そして、方向性パッド122又はボタン123を押しているユーザの動きに反応することができる。しかしながら、通信プロトコルが失敗した場合には、プログラムは実行されない。
【0058】
図2は、半導体メモリ100の内における論理メモリマッピングのブロックダイアグラムである。
【0059】
如何なる特定の限定をも意図するものではないが、本実施例では、半導体メモリ100の論理アドレスが48ビットの整数として表現されており、図2の左側に16進法により表記されている。これに替えて、異なるアドレススペースを使用することもでき、その場合、データは、物理的なチップ上の異なるサイズと異なるロケーションで、異なる順序で格納することができる。
【0060】
半導体メモリ100上に格納されたデータをアクセスするために、ゲームマシンは、論理アドレスとデータ長さとを半導体メモリへ送信する。次に、メモリコントローラ105が論理アドレスを物理アドレスに翻訳(変換)し、例えば、ROMユニット102又はEEPROM103など、関連するメモリユニットを作動し、そして、関連するメモリユニット上に格納されているデータをゲームマシン100へ送出する。
【0061】
48ビットのアドレス値は256,000ギガバイトのデータにアドレスすることができる。しかしながら、半導体メモリは、例えば、1ギガバイト程度の、より小さな容量を有している。この場合、論理メモリのある部分だけが、実際に有効なアドレスである。図2において、許されていないアドレスは、斜線によって表示されている。
【0062】
論理アドレスに加え、図2は、ROMユニット102、EEPROMユニット103、又は、メモリコントローラ105のうち、どのメモリユニット又はチップ上に、対応するデータが物理的に格納されているかを示している。メモリの特性(読出し専用か、又は、読み書き両方か)に対応して、ある論理アドレスに格納されたデータは読み出し可能であり、そして、時には書き込みも可能である。最後に、データへのアクセスは、アクセス制御ポリシー(access control policy)によって規定されており、図2において大文字「U」によって示されるユーザアクセスと、大文字「S」によって示される管理者アクセスとに分けられる。ユーザアクセスとは、ゲームマシン120によって直接アクセスされるデータを言い、他方、管理者アクセスとは、直接にはアクセスすることが出来なデータを意味する。より詳細には、メモリコントローラだけが管理者データにアクセスすることができる。
【0063】
論理アドレスは、以下の五つの領域に分類される。
− 暗号化データ領域200は、半導体メモリ100の認証の期間に利用される。
− 暗号化ヘッダ領域210は、認証の期間に転送されたデータと組み合わされ、半導体メモリの正真性(authenticity)を保証するパブリックパラメータを含んでいる。
− ゲームヘッダ領域220は、半導体メモリ内に格納されたゲームプログラムに関連する一般的な情報を含んでいる。
− セーブゲーム状態領域230は、ユーザによってセーブされたゲームの状態を含んでいる。
− ゲームプログラム領域240は、最初のセクタ241にファーウェアアップデートを、そして、他のセクタにゲームプログラムを格納している。
【0064】
上述した領域が、以下に詳細に述べられる。
【0065】
暗号化データ200は、秘密テーブル201、イメージテーブル202、そして、ツリーテーブル203を含んでいる。秘密テーブル201は、「0x0」から「0x3FFFFF」までのアドレス値を、即ち、4メガバイトを占有している。物理的には、秘密テーブル201からのデータは、ROMユニット102内に配置されている。加えて、秘密テーブル201へのアクセスは、管理者アクセスポリシー(supervisor access policy)によって管理さることから、制限される。
【0066】
イメージテーブル202は、「0x400000」から「0x7FFFFF」までのアドレス値を占有し(4メガバイト)、そして、ツリーテーブル203は、「0x800000」から「87FFEF」までを占有している。物理的には、それらはROMユニット102内に配置され、自由にアクセス可能である。
【0067】
それらのテーブル内に格納されたデータについては、後に、図3を参照しながら述べる。
【0068】
以下には、暗号化ヘッダ210が述べられる。アドレス「0x1000000」には、システムパラメータ211が格納されている。システムパラメータは、どのタイプのアルゴリズムを認証のために使用するのか、認証に使用するチャレンジのサイズ、認証を行うことができる総回数、そして、どのタイプの証明書が使用されるのかを、一義的に規定している。本実施例では、特に制限はないが、認証アルゴリズムは、ハッシュ関数「MD5」と共に、8ビットのチャレンジを使用する「Merkle」署名に基づくことができ、16,384回まで認証を行なうことができ、そして、証明書は「X.509」のデジタル証明書でも可能であるとしている。その場合、システムパラメータは、以下のような「ASCII」キャラクターで記述されたストリングから構成される:
− MD5_WITH_MERKLE
− CHALLENGE_8
− TIMES_16384
− CERTIFICATE_X509
【0069】
それに替えて、例えば、「SHA-1」又は「AES」のようなブロック暗号化に基づくものなど、「MD5」とは異なるハッシュ関数を使用することもでき、チャレンジのサイズや行われる認証の回数が異なっても、そして、証明書のタイプも異なってもよい。
【0070】
公開鍵214は、アドレス「0x100900」に格納される。公開鍵は、後に図7を参照しながら詳細に記載する認証プロトコルにおいて、役割を演ずる。認証アルゴリズムがハッシュ関数「MD5」と共に「Merkle」署名を使用する場合には、公開鍵は16バイトの二進データから構成される。
【0071】
ゲーム証明書は、アドレス「0x100600」に格納される。ゲーム証明書は、公開鍵を有効にするために使用される。ルートゲーム証明書は、アドレス「0x100300」に格納され、そして、ゲーム証明書を有効にするために使用される。手順の詳細は、後に、図7を参照しながら述べる。システムパラメータ211、ルート証明書212、ゲーム証明書213、そして、公開鍵214は、物理的にROMユニット102内に格納されており、そして、自由にアクセス可能である。
【0072】
2バイトの署名インデックス215は、アドレス「0x109400」に格納される。物理的には、署名インデックス215は、後に図4を参照しながら述べるメモリコントローラ105内における2バイトの不揮発性の読み書き可能なレジスタ内に配置される。署名インデックスは、秘密テーブル201、イメージテーブル202、そして、ツリーテーブル203で使用される暗号化データの配置を示している。
【0073】
ゲームヘッダ領域の内容を以下に述べる。かかる内容は、物理的には、ROMユニット上に格納されており、そして、自由にアクセス可能である。
【0074】
ゲームID221は、アドレス「0xFF0000000000」に格納されており、ゲームIDは、どのゲームが半導体メモリ上に格納されているかを一義的に規定する。ゲーム鍵222は、アドレス「0xFF0000000010」に格納される。ゲーム鍵は、ゲームヘッダデータの残りの部分と共に、ゲームプログラム240をも解読するために使用される。ゲームプログラムの権限のない解読を防止するため、ゲーム鍵221は、ゲームマシン120のフラッシュメモリユニット142内に格納された解読鍵163を使用して暗号化されている。
【0075】
その後のアドレスにおけるデータが、ゲーム鍵222により暗号化される。プログラムのエントリポイント223(program entry point)は、アドレス「0xFF0000000020」に格納されている。このプログラムのエントリポイントは、ゲームプログラムのメインルーチンのアドレスを示している。それ故、認証が成功した後には、ゲームマシン120は、プログラムのエントリポイントに特定されたアドレスに配置されているプログラムデータを読み込む。
【0076】
16バイトを占有するアドレス「0xFF0000000030」には、第1のハッシュデータ224が格納される。このデータは、ゲームプログラム領域240の第1セクタ内に格納されたデータに適用された「MD5」ハッシュ関数の出力である。より詳細には、第1のハッシュデータ224は、アドレス「0xFFFF00000000」における1メガバイトのデータを連結した結果であり、それを「MD5」により処理し、もって、16バイトのハッシュ値を得る。ゲームプログラム領域240には、合計1024セクタが存在することから、アドレス「0xFF0000000030」から「0xFF000000402F」まで、1024個のハッシュ値が存在する。
【0077】
セーブゲーム状態230は、アドレス「0xFFF000000000」から「0xFFF00002FFFF」までに格納される。物理的には、それらのアドレスはEEPROMに対応しており、それ故、セーブゲーム状態領域230内のデータは、読み出し、又は、書き込みができる。更に、データは、セーブゲーム状態領域230内において、自由にアクセス可能である。第1のセーブゲーム232から16番目233まで、16のセーブ用スロットがある。状態テーブル231は、各セーブゲームスロットの状態、即ち、アクティブか又は非アクティブかを示している。
【0078】
最後に、ゲームプログラム領域が、アドレス「0xFFFF00000000」から「0xFFFF3FFFFFFF」まで広がっており、それらは物理的にROMユニット102に対応している。ゲームプログラムデータは自由にアクセス可能であるが、しかしながら、ゲーム鍵222によって暗号化されている。ゲームデータは、1024のセクタに編成されており、各セクタは1024バイトを含んでいる。その結果、半導体メモリは、1ギガバイトまでゲームプログラムを格納することができる。ファームウェアのアップデートは、ゲームプログラム領域の最初のセクタ241内に格納されている。
【0079】
データサイズを略述すると、ROMユニット102は、1ギガバイトよりも僅かに大きい、1,082,709,024バイトを収容しており、そして、EEPROMは、196,608バイトを収容することが分かる。
【0080】
図3は、ROMユニット103の物理的アドレスマップと、そして、ROM領域内に格納されたデータとの機能的な関係を表すブロックダイアグラムである。
【0081】
以下に記載される物理的アドレスのマップに代えて、異なる順番で、又は、異なる物理的配置に格納されたデータにより、異なるアドレスの仕方を利用することもできる。
【0082】
以前にも説明したように、ROMユニット103は、暗号化データ200、暗号化ヘッダ210の一部、ゲームヘッダ220、そして、ゲームプログラム240を格納している。他方、ゲームマシン120は、48ビットのアドレスを使用して、半導体メモリの利用可能なメモリユニットに対し、データを読み出し又は書き込むことができる。他方、内部的には、各メモリユニットはそれ自身の物理的アドレスマップを有している。如何なる特定の限定をも意図するものではないが、本実施例では、ROMユニット103は、32ビットのアドレス空間を使用している。ゲームマシン120によって送られた論理アドレスを物理アドレスへ変換すること、そして、半導体メモリ100の対応するメモリユニットを作動することが、メモリコントローラ105の役割である。
【0083】
暗号化データ200は、秘密テーブル201、イメージテーブル202、そして、ツリーテーブルの、三つのテーブルを含んでいる。
【0084】
秘密テーブル201は、262,144個の16バイトの乱数、即ち、「x[1]」301〜「x[262144]」306によって満たされている。秘密「x[1]」は、物理アドレス「0x0」に配置され、秘密「x[2]」は「0x10」に、そして、秘密「262144」がアドレス「0x3FFFF0」に配置されるとまで、以下同様になっている。
【0085】
イメージテーブル202は、262,144個の各16バイトの値、即ち、「y[1]」311〜「y[262144]」316によって満たされている。如何なるインデックス「1<= i <= 262,144」に対しても、イメージ「y[i]」が「y[i]=H(x[i])」として規定されており、ここで「H」はハッシュ関数「MD5」である。換言すれば、「y[i]」は、ハッシュ関数「MD5」を介した秘密「x[i]」のイメージであり、例えば、「y[1]=H(x[1])」が成り立つ。イメージ「y[1]」は、物理アドレス「0x400000」に配置され、イメージ「x[2]」はアドレス「0x400010」に、そして、アドレス「0x7FFFF0」に配置されたイメージ「y[262144]」に至るまで、以下同様となっている。
【0086】
ツリーテーブル203は、各々が16バイトの、32767個の値、即ち、「t[1]」321〜「t[32767]」328を含んでおり、ここでは、「t[1]」はアドレス「0x800000」に配置され、「t[2]」は「0x800010」に、そして、アドレス「0x87FFF0」に配置された「t[32767]」に至るまで、以下同様となっている。ツリーデータは、その機能的な関係に応じて、二つのカテゴリに分類することができる。
【0087】
ツリーテーブル203の上部、より正確には、「t[16384]」から「t[32767]」までにおいては、ツリーデータはイメージテーブル202からのイメージデータに依存しており、如何なるインデックス「0<=i<=16383」に対しても、ツリーデータ「t[i+16384]」は、以下のように規定される。
【数2】
【0088】
例えば、「t[16384]=H(y[1]||y[2]||…||y[16])」、又は「t[16385]= H(y[17]||y[18]||…||y[32])」である。
【0089】
ツリーテーブル203の下部においては、如何なるインデックス「1<=i<=16383」に対しても、ツリーデータ「t[i]」は、以下のように規定される。
【数3】
【0090】
例えば、「t[1]=H(t[2]||t[3])」、又は、「t[8192]=H(t[16384]||t[16385])」である。
【0091】
以上の機能的な関係から、ツリーデータ203の配列は、二分のハッシュツリーとして見ることができ、そこでは、ツリーの根(ルート:root)は、テーブル「t[1]」の先頭値であり、その葉(leaves)は、「t[16384]」、「t[16385]」…「t[32676]」である。加えて、葉を除いて、全てのノード「t[i]」は、「t[i] = H(t[2*i]||t[2*i+1])」なる機能的関係に従って、ノード「t[2*i]」と「t[2*i+1]」に接続されている。
【0092】
暗号化ヘッダ210は、アドレス「0x87FFF0」から出発し、そして、アドレス「0x8893F0」で終わる。暗号化ヘッダ210は、ROM103内には、部分的にしか格納されていないことに留意のこと。より詳細には、システムパラメータ211、ルート証明書212、ゲーム証明書213、そして、公開鍵214がROMユニット103内に格納されているが、しかし、署名インデックス215はメモリコントローラ105内に格納されている。
【0093】
公開鍵214は、ゲームヘッダ220のハッシュ値と連結されたツリーテーブル「t[1]」321の先頭のハッシュ値であると規定される。
【数4】
【0094】
ゲームヘッダ220は、ROMユニット103内に完全に格納され、アドレス「0x8893F0」から出発し、アドレス「0x88D420」までである。最後に、ゲームプログラムは、アドレス「0x88D420」から始まってアドレス「0x4088D420」までである。
<メモリコントローラ>
【0095】
図4は、メモリコントローラ105のハードウェアダイアグラムである。
【0096】
メモリコントローラは、「READ」、「WRITE」、そして、「CHALLENGE」の、三つのタイプのメッセージを取り扱う。
− 「READ」メッセージはアドレスとデータ長さとを含んでおり、「READ||Address||Length」のようにフォーマットされ、そこでは、アドレスは48ビットのアドレスデータであり、長さは16ビットである。「READ」メッセージを受信すると、メモリコントローラは、アドレスと長さが読み出し可能なデータに対応することを検証し、対応するメモリユニットからデータを取り出してそれをゲームマシン120へ送り返す。
− 「WRITE」メッセージは48ビットのアドレスと8ビットのデータペイロード(data payload)を含んでおり、「WRITE||Address||Data」のようにフォーマットされる。「WRITE」メッセージを受信すると、メモリコントローラ105は、アドレスがEEPROMの書き込み可能なメモリに対応することを検証し、そして、そのデータペイロードをEEPROM領域に書き込む。
− 「CHALLENGE」メッセージは8ビットのデータペイロード、即ち、チャレンジを含んでおり、「CHALLENGE||Data」のようにフォーマットされる。かかるデータを受信すると、メモリコントローラ105は秘密テーブル201からデータを選択し、そして、それをゲームマシン120へ送り返す。
【0097】
上述したメッセージを如何に処理するかについて、図5を参照しながら詳細に述べる。
【0098】
メモリコントローラ105は、ピン106〜117を介して、ゲームマシン120と交信する。特に、ピン110〜117は双方向のデータ交信のために使用されており、ゲームマシン120から受信され又はゲームマシンへ送出されるデータは、8ビットのI/Oバッファ401内に格納される。接地ピン106、電力供給ピン107、クロックピン108、リセットピン109、そして、I/Oバッファは、全て、制御ユニット410へ結合されている。
【0099】
チャレンジレジスタ421と共に、シフトユニット422、秘密アドレスレジスタ430、三つの加算器441、442、443、そして、制御ユニット410が、図5を参照して詳細に述べるメッセージの処理機能を実現している。この制御ユニット410は、以下のものを備えている。
− メモリコントローラ105内の他のユニットを作動、制御し、そして、受信したメッセージに応じて信号を発送する、有限状態マシン411。
− 読み出し、又は、書き込まなければならないデータの物理アドレスを格納するアドレスレジスタ412。
− 読み出されるデータの長さを格納する長さレジスタ413。
− 入力データに整数「1」を加算するインクリメントユニット415。
− 入力データから整数「1」を減算するデクリメントユニット416。
− 入力された論理アドレスを物理アドレスに翻訳(変換)するアドレス変換マップユニット417。
【0100】
ROMユニット103が直接的に読み出された場合で、ゲームマシン120からの入力メッセージが「READ」メッセージであり、そして、論理アドレスが、直接アクセスが可能なROM領域に対応する場合、又は、ROMユニット103が間接的に読み出された場合で、入力メッセージが「CHALLENGE」メッセージである場合、コントロールユニットは、以下のステップを行う。
【0101】
アドレスレジスタ412には適当な値が設定される。直接アクセスの場合、論理アドレスは、アドレス翻訳マップ417によって物理アドレスへ変換され、そして、物理アドレスがアドレスレジスタ412内でコピーされる。長さの値は、長さレジスタ413内でコピーされる。
【0102】
その後、アドレスレジスタの値が、バス452を介してROMユニット103へ送られ、そして、ピン107からの電力供給信号とピン108からのクロック信号も、バス452を介して送られる。最後に、ROMチップセレクト(ROM CS)が、ROMユニット103を作動するため、「1」に設定される。
【0103】
その結果、ROMユニット103は、バス451を介して、特定のアドレスに配置された1バイトを戻す。このバイトは、I/Oバッファ401とデータピン110から117を介して、ゲームマシンへ送られる。次に、アドレスレジスタ412はインクリメントユニット415によってインクリメントされ、そして、長さレジスタはデクリメントユニット416によってデクリメントされる。有限状態マシン411は上記のステップを、長さレジスタが零(0)になるまで繰り返す。
【0104】
データがEEPROMユニット102から読み出され、又は、書き込まれる場合、同様のステップが、バス454、453を用いて行われる。唯一の相違は、バス454がROMチップセレクト(ROM CS)を「1」に設定し、付加的なR/W信号が、読み出しのための「0」、又は、書き込みのための「1」に設定され、そして、バスが双方向であることである。
【0105】
次に、間接的なROMへのアクセス、即ち、「CHALLENGE」メッセージがメモリコントローラにより受信され、そして、秘密テーブル201からのデータが選択されてゲームマシンに送り返される場合に関連するユニットについて述べる。秘密アドレスレジスタ430は、物理アドレスをROMユニット103内に表示する32ビットのレジスタであり、以下の部品から構成される。
− 4ビットのバイトカウンタ431。
− シフトユニット422に接続されたチャレンジビット「m」432。
− 3ビットの秘密カウンタ433。
− 暗号化ヘッダ210の一部である、16ビットの署名インデックス215。かかる署名インデックス215は制御ユニット410に接続されており、ゲームマシン120によって読み出すことができる。署名インデックス215は14ビットの署名カウンタ435と二つの零ビット436とから成る。
【0106】
チャレンジが半導体メモリ100へ送出されると、チャレンジレジスタ421内に格納される。次に、チャレンジ値が、シフトユニット422により、右へ1ビットだけ移動される。この処理において、チャレンジの最右側のビットが削除され、しかしながら、この最右側のビットは、秘密アドレスレジスタ430のチャレンジビット432へ転送される。
【0107】
第1の加算器441の1ビット入力が、制御ユニット410によって「1」に設定されると、加算器441は、バイトカウンタ431の値を1だけインクリメントする。この時点で、秘密アドレスレジスタ430は、ROMユニット103内の秘密テーブル201の一つのエレメントに対応する物理アドレスを持っている。秘密アドレスレジスタの32ビットの値は、アドレスレジスタ412へコピーされ、そして、バス接続452を介してROMユニット103へ送られる。従って、1バイトが、バス接続452を介して、ROMユニット103から送出され、そして、I/Oバッファ401とデータピン110〜117を介して、ゲームマシン120へ送られる。
【0108】
しかしながら、加算器441は、4ビットだけを取り扱うことができ、インクリメント動作の結果が4ビットよりも大きくなると、より具体的には、「1」が「0xF」に加算されると、オーバフローが起き、そして、加算器441の1ビットの出力が「1」に設定される。
【0109】
加算器441の1ビット出力は、第2の加算器442の1ビット入力と制御ユニット410に連結されている。制御ユニット410が第1の加算器441でのオーバフローを検出すると、チャレンジ値がシフトユニット422によって1ビットだけ右に移動し、そして、最右側のチャレンジビットが、再び、秘密アドレスレジスタ430のチャレンジビット432へ転送される。加えて、加算器441のオーバフロービットも第2の加算器442へ送られ、従って、それが3ビットの秘密カウンタ433をインクリメントする。しかしながら、秘密カウンタ433の値が「0x7」である場合は、インクリメント動作の結果が3ビットよりも大きくなるため、第2のオーバフローが生じる。この第2のオーバフローは、制御ユニット410と第3の加算器443の両方に送られる。
【0110】
従って、第3の加算器が14ビットの署名カウンタ435の値をインクリメントし、これによって署名インデックスを1だけ上昇する。また、制御ユニットが第2の加算器442におけるオーバフローを検知すると、受信されたチャレンジに対応する秘密データが完全に送信され、そして、メモリコントローラはアイドル状態となり、ゲームマシン120からの次のメッセージを待つ。しかしながら、署名カウンタ435の値が「0x3FFF」であり、そして、第2のオーバフロービットが「1」に設定された場合には、第3のオーバフローが生じる。これは、利用可能な秘密データが使い尽くされ、そして、半導体メモリ100がゲームマシン120とはもはや結合できないことを意味する。それ故、第3のオーバフローが制御ユニット410によって検出されると、ゲームマシン120からの如何なる新たなメッセージをも拒否する。
<メモリコントローラの機能の明細>
【0111】
図5は、メモリコントローラの機能の明細を示すブロックダイアグラムである。如何なる特定の限定をも意図するものではないが、本実施例では、図5に記載された機能は、メモリコントローラ105における有限状態マシン411内の回路として実現されている。
【0112】
最初に、メモリコントローラ105は聴取状態にあり、ゲームマシン120からのメッセージを待つ。メッセージがデータピン110〜117を介して到着すると、以下のステップが行われる。最初に、メッセージのタイプが特定される。既に説明したように、「READ」、「WRITE」、そして、「CHALLENGE」の、メッセージには三つのタイプがある。
【0113】
ステップ511では、「READ」メッセージを検出する。ステップ512では、論理アドレスと長さペイロードとが、メモリコントローラ105によりチェックされる。より詳細には、論理アドレスは、読み出し可能(readable)で、かつ、直接にアクセス可能なデータに対応するものでなければならない。例えば、アドレス「0x880000」は読み出し可能ではなく、拒否される。同様に、アドレス「0x1009400」は読み出し可能ではあるが、データ長さが「4」であれば、アドレス「0x1009402」は読み出し可能ではないことから、そのメッセージは拒絶される。加えて、アドレス「0x0」は秘密テーブル201に対応しており、そして、直接にアクセスすることはできない。アドレスが読み出し可能でかつ直接アクセスが可能であれば、メッセージ内に設けた長さとアドレスとが、アドレスレジスタ412と長さレジスタ413にコピーされる。
【0114】
ステップ521と531では、読み出されるアドレスの物理的位置、即ち、ROM103、EEPROM102、又は、メモリコントローラ105によって、三つの場合を識別する。
【0115】
ROMアドレスの場合には、ステップ523において、ROMチップセレクタ(ROM CS)信号が「1」に設定され、そして、アドレスがバス452を介して送られる。加えて、アドレスレジスタ412がインクリメントされ、そして、長さレジスタ413がデクリメントされる。従って、ROMユニット103は、バス接続を介して、ゲームマシン120へ送られた特定アドレスの1バイトデータを戻す。長さレジスタが「0」よりも大きい限り、ステップ523が繰り返され、長さレジスタが「0」になると、データは完全に転送され、そして、メモリコントローラは最初の聴取状態に戻る。
【0116】
EEPROMアドレスの場合には、ステップ533が実行される。ステップ533は、EEPROMユニット102を読み出しモードで起動することを除いて、基本的に、ステップ523と同じである。
【0117】
論理アドレスがROMでもEEPROMでもない場合には、ステップ541において、署名インデックス215が戻される。
【0118】
ステップ551では、「WRITE」メッセージが検出される。ステップ552では、メッセージのアドレスペイロードが検証され、もしも有効であれば、アドレスがアドレスレジスタ412にコピーされる。次に、ステップ553では、EEPROMチップセレクトとR/Wを「1」に設定し、そして、アドレスをバス接続454へ送出することにより、対応するEEPROMの物理アドレスが書込みモードで起動される。同様にして、「WRITE」メッセージのデータペイロードが、バス接続453を介して、EEPROMチップ102へ転送される。
【0119】
メッセージが「READ」でも「WRITE」タイプでもない場合には、「CHALLENGE」である筈である。ステップ561では、ペイロードされたデータがチャレンジレジスタ421へコピーされる。
【0120】
ステップ562では、シフトユニット422により、チャレンジ値421が1ビットだけ右に移動され、そして、最右側のビットがチャレンジビット432へコピーされる。
【0121】
この時点では、秘密アドレスレジスタ430は、ゲームマシン120へ転送しなければならない第1のバイトの物理アドレスを含んでいる。このデータ転送は、ステップ563において行われ、即ち、バス接続452において、そのアドレスが秘密アドレスに設定され、そして、ROMチップセレクトが「1」に設定される。従って、1バイトがROMユニット103から受信され、そして、ゲームマシンへ送出される。加えて、バイトカウンタ431が第1の加算器441によってインクリメントされる。
【0122】
インクリメント期間にオーバフローが起こらなければ、ステップ563が繰り返される。本実施例では、如何なる特定の限定をも意図するものではないが、第1の加算器が4つのビットを操作し、それ故、オーバフローが生じる前に、バイトカウンタ431が16回インクリメントされ、そして、16バイトが、ROMユニット103からゲームマシン120へ転送される。例えば、秘密アドレスが初めにアドレス「0x10」を格納している場合、アドレス領域「0x10」〜「0x20」内の全てのバイトが転送され、即ち、これらの16バイトは、第2の秘密値「x[2]」302に対応することとなる。
【0123】
最初のオーバフローが第1の加算器441で起こった場合、ステップ565において、秘密カウンタ433が第2の加算器442によってインクリメントされる。このインクリメント動作期間にオーバフローが起こらなければ、チャレンジ421が、シフトユニット422によって右に1ビットだけ移動され、そして、ステップ562において、最右側ビットがチャレンジビット453へコピーされ、そして、ステップ453〜566が、再び実行される。もしも第2のオーバフローが起これば、秘密データの転送は完了する。その場合、署名カウンタ435は、ステップ567において、第3の加算器443によりインクリメントされる。このインクリメント動作期間にオーバフローが起こらなければ、メモリコントローラは、その初期状態へ戻る。もしも第3のオーバフローが生じれば、秘密テーブル201からのデータが利用し尽くされたことを意味し、そして、ステップ569において、メモリコントローラは永続的休止状態(perpetual idle state)に入り、ゲームマシン120からの如何なる新たなメッセージをも拒否する。
<「CHALLENGE」メッセージ処理の例>
【0124】
以下に、「CHALLENGE」メッセージ処理の一例を述べる。
【0125】
メモリコントローラ105は、「CHALLENGE」メッセージを、2進法により表現されたデータペイロード「(11010001)」と共に受信するものとする。更には、秘密アドレスレジスタ430は、初めは32ビット値「0x00000100」を有しているものとする。より詳細には、署名インデックスは「1」であり、他の全てのレジスタは「0」であるとする。これは、秘密値「x[17]」305の物理アドレスであることに留意されたい。
【0126】
第1のチャレンジビットは「1」であり、従って、秘密アドレスレジスタは、秘密「x[18]」の物理アドレスである「0x110」に設定される。次に、秘密「x[18]」の16バイトが、クロックピン108からのクロック信号の度に、バイトカウンタ431をインクリメントすることにより、一バイト毎、ゲームマシン120へ転送される。その結果、秘密アドレスレジスタが、順次、以下のアドレス、即ち、「0x110」、「0x111」、「0x113」…「0x11F」に格納する。
【0127】
この時点において、バイトカウンタがインクリメントされると、第1の加算器441においてオーバフローが生じ、そして、秘密アドレス430が、再び、「0x110」となる。従って、秘密カウンタ432がインクリメントされ、そして、チャレンジビットは、チャレンジ421を右に移動した後に「0」に設定され、即ち、秘密アドレスは、秘密「x[19]」のアドレスである「0x120」となる。次に、秘密「x[19]」の16バイトがゲームマシンへ転送される。
【0128】
第3と第4のチャレンジビットは「0」であり、それ故、次に転送されるべき秘密値は「x[21]」と「x[23]」である。最後に、終わりの4つのチャレンジビットは、「1」、「0」、「1」、「1」であり、それ故、転送される秘密値は、「x[26]」、「x[27]」、「x[30]」、「x[32]」である。8つの秘密値が完全に転送された後に、署名レジスタがインクリメントされ、そして、秘密アドレスレジスタに格納された値は、秘密「x[33]」のアドレスである「0x00000200」となる。メモリコントローラは、最初の聴取状態へ戻り、そして、次のメッセージを待つ。
【0129】
従って、「CHALLENGE」メッセージを処理した後、八つの秘密値「x[18]」、「x[19]」、「x[21]」、「x[23]」、「x[26]」、「x[27]」、「x[30]」、「x[32]」が転送されるが、しかし、八つの秘密値「x[17]」、「x[20]」、「x[22]」、「x[24]」、「x[25]」、「x[28]」、「x[29]」、「x[31]」は転送されない。その結果、秘密値の半分だけが明かされることとなる。
【0130】
図6は、ゲームマシン120によって行われる検証プロトコル(verification protocol)の機能の明細を示すブロックダイアグラムである。如何なる特定の限定をも意図するものではないが、この実施例では、この検証プロトコルは、ゲームマシンのフラッシュメモリ142内に格納され、そして、CPU143によって実行されるソフトウェアプログラムとして実現されるものとする。
【0131】
検証プロトコルの開始では、ゲームマシン120は、そのRAMユニット141内に、図7を参照しながら詳細に述べる認証プロトコル(authentication protocol)の期間に入手された公開鍵214と署名インデックス215とを格納する。
【0132】
ステップ602では、ゲームマシンは、アドレス「0xFF0000000000」と長さ「0x4030」と共に「READ」メッセージを送付することにより、ゲームヘッダ220を要求する。ステップ603では、ゲームマシンはゲームヘッダを入手し、そして、アドレス「0x800000」と長さ「0x10」と共に「READ」メッセージを送付することにより、ツリー「t[1]」321の先頭を要求する。ステップ604では、ゲームマシンは「t[1]」を得て、そして、以下の演算を行う。
H1 = H( t[1] || H( game header) )
【0133】
ステップ605において、「H1」が公開鍵と比較される。ゲームマシンによって引き出されたデータが本物(authentic)であれば、演算された値「H1」は公開鍵214と等しい筈である。もしそうでなければ、ステップ606において、検証(verification)は失敗となる。
【0134】
もしも「H1」が公開鍵と等しい場合、ゲームマシンは、ステップ611において、8ビットのペイロード(乱数)と共に「CHALLENGE」メッセージを送信する。半導体メモリ100の応答は8個の秘密値「x’[1]」…「x’[j]」…「x’[8]」からなり、そして、ステップ612において、ゲームマシンにより受信される。実際、これらの8つの秘密値は、16個の秘密値「x[16*index+1]」、「x[16*index+2]」…「x[16*index+16]」の中から、メモリコントローラ105により選択され、そして、それら16個の秘密の半分の選択が、図5に示すように、チャレンジ値に従って行われる。ここで、「index」は署名インデックス215である。
【0135】
加えて、変数「A」が以下のように設定される。即ち、「A = 0x00400000 + 0x100*index」であり、ここで、「index」は署名インデックス215である。即ち、「A」は、イメージテーブル202からのエレメント「y[16*index+1]」の論理アドレスである。例えば、もしも署名インデックス215が「0」であれば、「A」は「y[1]」311の論理アドレスである。署名インデックスが「1」であれば、「A」は「y[17]」315の論理アドレスであり、以下も同様である。
【0136】
ステップ621〜627では、16個のイメージ「y[16*index+1]」、「y[16*index+2]」…「y[16*index+16]」から、丁度、8個のエレメント「y’[1]」…「y’[j]」…「y’[8]」が、即ち、それらの半分が引き出され、従って、それらのステップは8回、繰り返される。より詳細には、
− 秘密「x’[j]」が実際に「x[16*index+2j-1]」であれば、「y’[j]」は「y[16*index+2j]」として選択される。
− しかし、秘密「x’[j]」が「x[16*index+2j]」であれば、「y’[j]」は「y[16*index+2j-1]」として選択される。
【0137】
例えば、署名インデックスが「1」であるとして、「y’[1]」の選択を考える。「x’[1]=x[17]」が受信されれば、「y[18]」が選択される。しかしながら、「x’[1]=x[18]」であれば、「y[17]」が代わりに選択される。
【0138】
以下には、正しいイメージを選択するための手順が述べられる。ステップ622において、チャレンジの最右のビット、即ち、最小桁ビット(LSB)が、右移動によって抽出される。一方、チャレンジビットが「0」であれば、「x[16*index+2j-1]」が受信されたことを意味する。その結果として、「y[16*index+2j]」が必ず選択される。これは、ステップ626において、「0x10」を変数「A」に加算し、そして、「READ」メッセージをアドレス「A」と長さ「0x10」と共に送信することにより行われる。その後、「0x10」が変数「A」に加算される。ステップ627では、対応するイメージ値「y[16*index+2j]」が半導体メモリ100から受信される。更に、受信された秘密「x[16*index+2j-1]」のハッシュ値と、受信されたイメージ「y[16*index+2j]」とが、以下のようにして、変数「H1」に連結される。
H1 = H1 || H( x’[j] ) || y’[j]
【0139】
もしも秘密値とイメージの値とが本物であれば、この演算の結果は、以下と等しくなる筈である。
【数5】
【0140】
これは、「H(x[16*index+2j-1]) = y[16*index+2j-1]」が成り立つことによる。
【0141】
他方、チャレンジビットが「1」であれば、「x[16*index+2j]」が受信され、そして、「[16*index+2j-1]」が選択されなければならない。その結果として、ステップ624では、アドレス「A」と長さ「0x10」と共に、「READ」メッセージが半導体メモリ100へ送信される。そして、「0x20」が、変数「A」に加算される。以前の場合と同様に、以下の演算がステップ625において行われる。
【数6】
【0142】
再び、もしも受信した値が本物であれば、この演算の結果は、以下と等しくなる筈である。
【数7】
【0143】
以上の手順を8回だけ繰り返した後、もしも全ての秘密値及びイメージ値が本物であれば、「H1」は以下と等しくなる筈である。
【数8】
【0144】
換言すれば、「H1」は、16個のイメージ値「y[16*index+1]」〜「y[16*index+16]」の連結である筈である。
【0145】
ステップ631において、「H1」のハッシュ値が計算される。以下の同等性が維持されることを思い出すこと。
【数9】
結果として、もしも全ての受信された値が本物であれば、「H1」は「t[16384+index]」と等しくなる筈である。
【0146】
ステップ632では、変数「j」が「0x4000+index」に、又は、十進法で「16384+index」に設定される。
【0147】
ステップ641〜646では、ツリーテーブル203のエレメントが選択され、そして、半導体メモリ100から抽出される。これらのエレメントは、ステップ631で計算された値「H1」を、ツリーテーブル「t[1]」321の先頭に関連付けることができる。この関連が有効性であれば、検証が成功したこととなるが、しかしながら、この関連が無効であることが明らかとなれば、検証は失敗となる。
【0148】
この関連は、ツリーテーブル203におけるエレメント間の関係、即ち、「t[i]=H(t[2i]||t[2i+1])」を利用している。最初に、「16384+index」は偶数の整数であるとする。それから、「t[16384+index+1]」が与えられれば、ノード「t[8192+index/2]」の値は、以下のように計算することが可能である。
【数10】
【0149】
同様に、もしも「16384+index」が奇数の整数であれば、もし「t[16384+index-1]」が与えられれば、「t[8192+(index-1)/2]」を以下のように計算することが可能である。
【数11】
【0150】
両方の場合において、ツリーにおいて1レベルだけ上に行くことが出来る。上記の手順を繰り返えすことにより、終には、全ての受信した値が本物である場合には、「H1」は、ツリーテーブル203の先頭である「t[1]」と等しい筈であり、これにより、ステップ631で計算したハッシュ値とツリーの先頭との間の関連を確立することとなる。
【0151】
以下に、ツリーデータを選択し、そして、抽出するための手順について述べる。初めに、「j」は「16384+index」に設定される。ステップ641では、「j」のパリティがチェックされる。
【0152】
もし「j」が奇数の整数である場合、ステップ643では、変数「A」が、「t[j-1]」のアドレスである「0x800000+0x10*(j-2)」に設定される。例えば、「index=1」であれば、初め、「j」は、奇数の整数「0x4001」、又は、十進法での「16385」と等しく、そして、「A」は以下と等しい。
【数12】
【0153】
これは、確かに、「t[16384]」325のアドレスである。
【0154】
それから、アドレス「A」及び長さ「0x10」と共に、「READ」メッセージが半導体メモリに送信され、半導体メモリは、ステップ644において、ツリーテーブル203の関連するエレメント「t[j-1]」を返送する。このエレメントは、変数「H2」内に格納される。
【0155】
その後、以下の演算、即ち「H1 = H(H2||H1)」が行われる。「j」は奇数の整数であることから、「H2=t[j-1]」、そして、「H1=t[j]」であり、計算の結果は、「t[(j-1)/2] = H(t[j-1]||t[j])」と等しくなる。最後に、「j」は右移動により「(j-1)/2」へアップデートされる。
【0156】
同様に、もしも「j」が偶数の整数であれば、ステップ645では、「A」が、「t[j+1]」のアドレスである「0x800000+0x10*j」に設定される。例えば、もしも「index=0」であれば、初め、「j」は偶数の整数「0x4000」、又は、十進法の「16384」と等しく、そして「A」は「0x840000」と等しい。これは、確かに、「t[16385]」326のアドレスである。
【0157】
それから、アドレス「A」と長さ「0x10」と共に、「READ」メッセージが送信され、そして、関連するエレメント「t[j+1]」が「H2」内に格納される。ステップ646では、演算「H1=H(H1||H2)」が行われる。「j」は偶数の整数であることから、「H2=t[j+1]」そして「H1=t[j]」であり、この計算の結果は、「t[j/2]=H(t[j]||t[j+1])」と等しくなる。最後に、「j」は右移動により「j/2」にアップデートされる。
【0158】
変数「j」は、上述した手順の各々の繰り返しにおいて、右に移動される。即ち、最終的には、「j」は、値「1」に到達する。この時点において、全ての受信した値が本物であれば、「H1」は、ツリーテーブル203の先頭である、「t[1]」321と等しい筈である。もしもそうであれば、全ての受信した値は、確かに、本物であり、そして、検証は、ステップ652において、成功裡に終了する。そうでない場合は、検証は、ステップ653において、失敗となる。
【0159】
本実施例においては、変数「j」は、当初は、厳密には「32768」よりも小さな整数である「16384+index」に設定される。その結果、丁度14回の繰り返し、それにより、14回の右移動の後に、変数「j」は「1」になる。換言すれば、本実施例では、ステップ642〜646において、丁度14個のエレメントが、ステップ631において演算された値、即ち、「t[16384+index]」と、ツリー「t[1]」の根(ルート)との間の関連を確立するため、ツリーテーブル203から抽出される。
【0160】
上述した検証手順においては、ゲームマシンは8個の秘密値と、8個のイメージと、14個のツリー値を入手し、そして、それらの秘密、イメージ、そしてツリー値は、非特許文献2に開示されたように、チャレンジの「Merkle」署名である。
【0161】
以下には、検証手順の一例が示される。
【0162】
署名インデックス215は「1」であり、そして、ゲームヘッダ220とテーブルツリー「t[1]」321の先頭は、ゲームマシン120にとって入手可能であるものとする。
【0163】
最初に、ゲームマシンが秘密値とイメージ値とを如何に入手し、そして、それらが如何に組み合わせられるについて述べる。
【0164】
ゲームマシンは、8ビットのチャレンジ(乱数)を発生し、このチャレンジの値の二進法での表現は「(11010001)」とする。従って、ゲームマシンは、メモリコントローラにより、チャレンジ値に従って選択される8個の秘密値「x’[1]」…「x’[8]」を受信する。より詳細には、もしも秘密値が本物であれば、以下の関係、「x’[1]=x[18]」、「x’[2]=x[19]」、「x’[3]=x[21]」、「x’[4]=x[23]」、「x’[5]=x[26]」、「x’[6]=x[27]」、「x’[7]=x[30]」、そして「x’[8]=x[32]」が保持される。それ故、ゲームマシンは、以下の秘密イメージ、「y[17]」、「y[20]」、「y[22]」、「y[24]」、「y[25]」、「y[28]」、「y[29]」そして「y[31]」を選択する。また、受信した秘密値のハッシュ値を計算し、そして、全てのものを以下のように連結する:
【数13】
【0165】
「y[i]=H(x[i])」であることから、上記の表現は、以下と等しい:
【数14】
【0166】
「H1」のハッシュ値を連結し、そして、「t[16385]=H(y[17]||…||y[32])」であることから、ゲームマシンは「H(H1)=t[16385]」を得る。
【0167】
次に、「t[16385]」と「t[1]」との間の関連の計算が説明される。初め、変数「j」は「16385」に等しい。
ステップ1: j=16385
【0168】
整数「16385」は奇数であり、それ故、「t[16384]」が半導体メモリから読み出される。さて、ゲームマシンは「H(t[16384||t[16385]]=t[8192])を計算することが出来る。
ステップ2: j=8192
【0169】
「8192」は偶数であり、「t[8193]」が半導体メモリから読み出され、そして、ゲームマシンは「H(t[8192]||t[8193])=t[4096]」を計算することが出来る。
ステップ3: j=4096
【0170】
「4096」は偶数であり、「t[4097]」が半導体メモリから読み出され、そして、ゲームマシンは「H(t[4096]||t[4097])=t[2048]」を計算することが出来る。
【0171】
この手順は、「j=2048」、「1024」、「512」、「256」、「128」、「64」、「32」、「16」、「8」、「4」、そして、「2」に対して、繰り返される。
ステップ14: j=2
【0172】
「2」は偶数であり、「t[3]」が半導体メモリから読み出され、そして、ゲームマシンが「H(t[2]||t[3])=t[1]」を計算する。
【0173】
ゲームマシンは、ツリーテーブルt[1]の先頭を再計算することができ、そして、検証が首尾よく終了する。
<通信プロトコル>
【0174】
図7は、ゲームマシン120と半導体メモリ100との間の通信プロトコルのブロックダイアグラムである。
【0175】
図7の左側のブロックは、半導体メモリ100により実行される作動であり、他方、図の右側のブロックは、ゲームマシン120によって実行される作動である。中央のブロックは、ゲームマシンと半導体メモリとの間で交されるメッセージである。
【0176】
ゲームマシンは、暗号化ヘッダ210への要求701を送信することによりプロトコルを開始する。この要求は、暗号化ヘッダのアドレス、即ち、「0x1000000」と、そのサイズ、即ち、「0x9402」又は二進表現で「37,890」バイトとを含んだ「READ」メッセージである。半導体メモリは、完全に暗号化ヘッダ210を送ることによって応答する。ステップ302では、ゲームマシンが、以下のサブステップを行うことによって、暗号化ヘッダ210を検証する。
− システムパラメータ211がサポートされていることを検証する。
− ルート証明書212を検証する。ルート証明書が、少なくとも、ゲーム公開鍵とデジタル署名とを含んでいる。即ち、ゲームマシンは、フラッシュメモリユニット142内に格納されているルート公開鍵によって、ルート証明書内に封入されたデジタル署名を検証し、もって、ゲーム公開鍵の有効性を確定する。
− ゲーム証明書213を検証する。ゲーム証明書は、少なくとも、公開鍵214とそのためのデジタル署名を含んでいる。即ち、ゲームマシンは、ルート証明書212からの公開鍵により、ゲーム証明書213内に封入されたデジタル署名を検証し、もって、公開鍵214の有効性を確定する。
− 公開鍵214の使用がファームウェアによって禁止されていないかをチェックする。もしも、本当に、公開鍵が危殆化されていれば、それはもう使用されるべきではなく、これが、ファームウェアのアップデートが危殆化されたものとして知られた公開鍵のリストを含んでいる理由である。
【0177】
上記のステップの一又はそれ以上が失敗すると、プロトコルは中断される。全てのステップが成功裡に実行されると、公開鍵214は有効となる。そこから、ゲームマシン120は、公開鍵214と署名インデックス215とを、後の使用のため、RAMユニット141内に保持する。
【0178】
ステップ711は認証プロトコルであり、その中では、ゲームマシンと半導体メモリとが幾つかのメッセージを交換する。ゲームマシンにより行われる作動は、既に、図6を参照して述べられており、他方、半導体メモリにより行われる作動は、図4に記載したハードウェアユニットを利用し、既に、図5を参照して述べられている。
【0179】
一旦、認証が首尾よく終了すると、ステップ713では、フラッシュメモリ142内に格納された解読鍵163を使用して、ゲーム鍵222がゲームマシン120によって解読される。ゲーム鍵222を使用して、プログラムのエントリポイント223もまた、ゲームマシンによって解読される。
【0180】
次に、ステップ721では、第1のセクタ241とそのハッシュ値224とが、ゲーム鍵222により解読される。第1のセクタがファームウェアのアップデートを格納していることを思い出すこと。ステップ722では、ファームウェアのアップデートの有効性が、以下のようにしてチェックされる。
− ゲームマシン120が、第1のセクタ241のハッシュ値を計算し、そして、それをゲームヘッダ内に格納されているハッシュ値224と比較する。二つのハッシュ値は等しい筈である。
− ファームウェアのアップデートはデジタル署名を含んでいる。それ故、ゲームマシン120は、ルート公開鍵162によりデジタル署名を検証する。
【0181】
上述したチェックの一つが失敗すると、プロトコルは中断される。ステップ723では、ゲームマシンは、ファームウェアのアップデートがフラッシュメモリユニット142内に格納されたファームウェア161よりも新しいものであることを検証する。もしもそうであれば、ステップ724において、古いファームウェアが新しいものと交換される。そうでなければ、ゲームマシンはファームウェアのアップデートを無視する。
【0182】
そこから、プログラムデータは、半導体メモリからゲームマシンへ転送が可能となる。解読プログラムのエントリポイント223は、プログラム開始のアドレスを格納しており、このアドレスは、ゲームプログラム領域240における半導体メモリの1,024個のセクタの一つに対応している。即ち、ゲームマシンは、関連するセクタに対する要求731を、セクタデータ732を転送する半導体メモリへ送信する。セクタデータが解読され、それ故、ゲームマシンは、ステップ733において、ゲーム鍵222を使用して、セクタを解読する。加えて、ゲームヘッダ220は、解読されたセクタのハッシュ値を格納しており、この値はゲーム鍵222により解読される。
【0183】
解読されたセクタデータの有効性をチェックするため、ゲームマシンはそのハッシュ値を計算し、そして、それを、ゲームヘッダ220からの解読されたハッシュ値と比較する。もしも二つのハッシュ値が等しければ、セクタデータは有効であり、ステップ735において、セクタ内に格納されたプログラムが実行される。二つのハッシュ値が異なっていれば、これはセクタデータが変更されている可能性があることを意味しており、プログラムは実行されない。
【0184】
プログラムは、幾つかのセクタに広がっていてもよい。従って、新たなデータが要求されるそれぞれの時点で、新たなセクタが転送され、そして、ステップ731〜736がゲームマシンによって、再度、実行される。
【0185】
従って、以下の効果が得られる。
【0186】
半導体メモリは、その秘密値の半分しか明かさないことから、かかる秘密値を多数集めても、悪意の者は、異なるチャレンジに対し、正しい回答を発行することは出来ない。実際、異なるチャレンジは、半導体メモリによって明かされていない少なくとも一つの秘密を知っていることを要求する。
【0187】
更に、悪意の者は、認証を成功した後は、プログラムを挿入することは出来ない。実際、そのように試みても、挿入されたプログラムのハッシュ値は、ゲームヘッダ内のセクタのハッシュ値の何れとも一致することはない。
【0188】
最後に、ゲームマシンは、認証プロトコルを実行するためのルート公開鍵を知ることをだけを必要とする。結果として、如何なるゲームマシンも、共通鍵を共有することなく、如何なる半導体メモリでも認証することができる。
<<実施例2>>
【0189】
第2に、暗号化エンジンを更に備えた半導体メモリと、そして、セキュリティーチップを更に備えたゲームマシンに焦点を当てた記述を示す。
【0190】
本発明の第1の実施例により得られるそれらの効果に加え、下記の記載による以下の効果が得られる。半導体メモリは、秘密値とイメージ値とを再生成できる暗号化エンジンを備えている。結果として、それらの値を不揮発性メモリ内に格納する必要はなく、たとえ悪意の者がメモリの内容に直接アクセスしても、その秘密値とイメージ値とは明かされることはない。更に、ゲームマシンはセキュリティーチップを備えている。それ故、認証を非作動状態にし、又は、調整するため、悪意の者がゲームマシンのファームウェアを改造しようとしても、かかる改造は、セキュリティーチップにより検出できる。
【0191】
図8は、ゲームシステムのハードウェアダイアグラムであり、ゲームマシン820と、そして、ゲームプログラムを格納するための半導体メモリ800を備えている。以下では、図1を参照して述べたゲームシステムとの違いが強調される。
【0192】
半導体メモリ800は、ROMユニット103と、EEPROMユニット102と、そして、バスに結合されたメモリコントローラ801を有している。図1を参照して述べたメモリコントローラとは異なり、このメモリコントローラは、プログラム可能な(programmable)ROM(PROM)と、128ビットの鍵「A」と128ビットの平文「B」とにより、「AESA(B)」のようなAES暗号化を計算することが出来る、AESエンジンとを備えている。
【0193】
図1を参照して上述したゲームマシンと比較して、このゲームマシン820は、更に、セキュリティーチップ821を備えている。後に、このセキュリティーチップ821の詳細については、図12を参照しながら述べる。フラッシュメモリユニット142はファームウェア161を格納しているが、しかしながら、ルート公開鍵162又は解読鍵163を格納することは要求されない。
【0194】
図9は、半導体メモリ800内における論理メモリマッピングのブロックダイアグラムである。
【0195】
図2を参照して述べた論理メモリマッピングとは異なり、本実施例では、如何なる特定の限定をも意図するものではないが、半導体メモリ800は、秘密テーブル201やイメージテーブル202を格納していない。更に、ツリーテーブル203、システムパラメータ211、ルート証明書212、ゲーム証明書213、そして、公開鍵214は、メモリコントローラ801のPROMユニット802内において物理的に配置されている。その結果、ROMユニット103は、単に、ゲームヘッダ220とゲームプログラム240とを格納している。ゲームヘッダ220とゲームプログラム240とを格納するのは、同様のゲームを格納している全て半導体メモリにとっては同様であることから、ROMユニット103は、マスクROMの技術、又は、オプションとして1回だけプログラム可能なROMの技術によって、実現することができる。
【0196】
ゲームプログラム240は幾つかのセクタに亘って広がっていてもよく、しかしながら、第1のセクタ941は、データアップデートのために取って置かれる。このデータアップデートは、ファームウェア161の最新のバージョンと、セキュリティーチップ821により要求されるデータと、そして、そのデジタル署名とを含んでいる。
<メモリコントローラ>
【0197】
図10は、半導体メモリ800のメモリコントローラ801のハードウェアダイアグラムである。
【0198】
以下、本メモリコントローラと、図4を参照して既に述べたメモリコントローラとの違いを強調して説明する。
【0199】
制御ユニット1010は、更に、シフトユニット1012、チャレンジレジスタ1011、そして、インデックスレジスタ「j」1013を備えている。
【0200】
加えて、メモリコントローラ108は、更に、ツリーテーブル203と暗号化ヘッダ210とを格納したPROMユニット802を備えている。PROMユニットは、メモリコントローラ801、8ビットデータバス、及び、VCC接続と、クロック接続と、PROMチップセレクト(PROM CS)接続と、そして、32ビットアドレスバスとを含んでいる35ビットの制御バスと、結合されている。
【0201】
メモリコントローラは、更に、18ビットカウンタであるカウンタレジスタ1021を備えている。カウンタは、その長さを128ビットまで伸ばすため、百十の零ビット1022によってパッディングされ(padded)ている。署名カウンタ1024は、カウンタ1021の14個の最左側ビットから構成されており、他方、秘密カウンタ1023は、カウンタ1021の4個の最右側ビットから構成されている。署名インデックス215は、その長さを16ビットまで伸ばすため、零ビット1025によりパッディングされた署名カウンタ1024から構成されている。16ビットの署名インデックス215は制御ユニットと結合されており、18ビットカウンタ1021は加算器1026と結合され、そして、零ビットでパッディングされたカウンタはマルチプレクサ1033に結合されている。
【0202】
加算器1026は二つの入力を有しており、一つの8ビット入力はカウンタ1021と、そして、その第2の1ビット入力を介して、制御ユニット410と結合されている。第2の1ビット入力が制御ユニット1010により「1」に設定されると、カウンタ1021がインクリメントされる。このインクリメント動作中にオーバフローが生じた場合、1ビットのオーバフロー信号がカウンタユニット1010へ転送される。オーバフローは、カウンタ1021がその最大値、即ち、「0x3FFFF」、又は、十進法で表すと「262143」に達した時に生じることから、制御ユニット1010は、永続的休止状態に入り、そして、その後に来るメッセージを拒否する。
【0203】
如何なる特定の限定をも意図するものではないが、本実施例では、ハッシュ関数「H」は、AESと排他的OR動作により達成されるものとする。これに替えて、異なるブロック暗号器とすること、又は、「MD5」や「SHA-1」など、異なるハッシュ関数とすることもできる。
【0204】
即ち、メモリコントローラは、更に、AESエンジン803と排他的ORユニット1032を備えている。AESエンジンは、右側の平文入力と、頂上の鍵入力との、二つの128ビット入力と、そして、左側の暗号文出力である、128ビットの出力とを有している。AESエンジンは、マルチプレクサ1033、1034、1035になる構成によって、モード「0」とモード「1」と呼ばれる二つのモードの動作をサポートしている。
【0205】
モード「1」では、AESエンジンは、128ビットの秘密のシード(seed)「s」を鍵入力とし、そして、平文入力をカウンタ1021の入力とする動作「x = AESs(counter)」を行う。モード「1」を起動するため、それらの「1」とラベルが貼られた入力を選択するよう、制御ユニットがマルチプレクサ1033、1034、1035を設定する。より詳細には、マルチプレクサ1033がモード「1」に設定されると、カウンタ1021が、AESエンジンの平文入力に結合される。マルチプレクサ1034がモード「1」に設定されると、シード1041が、AESエンジンの鍵入力に結合される。そして、マルチプレクサ1035がモード「1」に設定されると、排他的ORユニット1032がオール零レジスタ(all-zero register)1043に結合される。その結果、「x(+)0 =x」であることから、出力レジスタ1044が、動作「AESs(counter)」の結果を格納することとなる。
【0206】
モード「0」では、AESエンジンは、平文入力が初期ベクトル「IV」1042であり、そして、鍵入力が、出力レジスタ1044に格納された以前のAES動作の結果、「x」である、動作「y = AESx(IV)(+)IV」を行う。モード「0」を起動するため、マルチプレクサ1033、1034、1035は、制御ユニット1010によって、それらの「0」とラベルが貼られた入力を選択するよう、適切に構成される。マルチプレクサ1033がモード「0」に設定されると、「IV」1042がAESエンジンの平文入力に結合される。マルチプレクサ1034がモード「0」に設定されると、出力レジスタ1042がAESエンジンの鍵入力に結合される。そして、マルチプレクサ1035がモード「0」に設定されると、排他的ORユニット1032が「IV」1042と結合される。その結果、出力レジスタ1044は、動作「AESx(IV)(+)IV」の結果を格納することとなる。
【0207】
AESエンジン803の二つのモードにより、メモリコントローラは乱数「x」と共に、それらのイメージ「y=H(x)」を計算することが出来る。「x」値は、秘密値の役割を果たし、他方、「y」値は、認証プロトコルにおけるイメージ値の役割を果たすことから、不揮発性メモリ内に秘密テーブルとイメージテーブルを格納するという要求を排除することができる。加えて、本実施例の秘密鍵(private key)は、それからAESエンジンのモード「1」を利用して秘密値が取り出され、シード1041となっている。
<メモリコントローラの機能の詳細>
【0208】
図11は、メモリコントローラ801の機能の詳細を示すブロックダイアグラムである。
【0209】
メモリコントローラ801は、既に図5を参照して述べたメモリコントローラ105と同様の方法により、ゲームマシン820により送り出された「READ」メッセージと「WRITE」メッセージとを処理する。しかしながら、「READ」メッセージの場合、半導体メモリ801がPROMユニット802を更に備えていることから、以下のステップが行われる。ステップ1143では、PROMユニット102がその「PROM CS」入力を介して起動され、そして物理PROMアドレスが制御ユニット1010によって送出される。従って、PROMユニットは、1バイトのデータを、当該バイトを通信ピン110〜117を介してゲームマシン820へ送信する制御ユニットに対し、送出する。加えて、アドレスレジスタ412がインクリメントされ、そして、長さレジスタがデクリメントされる。長さレジスタ内に格納された値が零でない限りは、ステップ1143が繰り返される。
【0210】
「CHALLENGE」メッセージが処理される方法も、また、異なっている。メモリコントローラは、以下の手順を8回繰り返し、各繰り返しでは、チャレンジ1011に応じて、一つの秘密値「x’[j]」及び一つのイメージ値「y’[j+1]」を、又は、一つのイメージ値「y’[j]」及び一つの秘密値「x’[j+1]」を発生する。
【0211】
ステップ1164では、チャレンジ1011は、シフトユニット1012により、1ビットだけ右に移動される。この処理では、チャレンジの最右側ビット(LSB)がチェックされる。
【0212】
チャレンジビットが「0」であれば、メモリコントローラは、ステップ1166において、「x’[j]」と「y’[j+1]」を計算する。より詳細には、「x’[j]=AESs(counter)」、即ち、制御ユニット1010が、AESエンジン803のモード「1」を起動するように、マルチプレクサ1033、1034、1035を設定する。AESエンジンが設定された後、出力レジスタ1044は、ゲームマシン820へ送信された「x’[j]」を格納する。次に、カウンタ1021が、加算器1026を使用することによりインクリメントされ、そして、モード「1」が再び起動される。その結果、出力レジスタが「x’[j+1]」を格納する。「y’[j+1]」を計算するため、モード「0」が起動される。AESエンジンが設定された後、出力レジスタ1044は、ゲームマシンへ送信された「y’[j+1]=AESx[j+1](IV)(+)IV」を格納する。秘密「x’[j+1]」は破棄されていることから、明らかになっていないことに留意のこと。
【0213】
同様に、チャレンジビットが「1」の場合、メモリコントローラは、モード「1」を起動することにより「y’[j]」と「x’[j+1]」を計算し、モード「0」で「y’[j]」を送信し、それから、モード「0」を起動して「x’[j+1]」を送信する。同様に、秘密「x’[j]」は破棄される。
<「CHALLENGE」メッセージの処理の一例>
【0214】
以下、「CHALLENGE」メッセージの処理の一例を述べる。
【0215】
メモリコントローラ801は、二進法表現で「(11010001)」と表現されるデータペイロードと共に「CHALLENGE」メッセージを受信するものとする。更に、初期において、カウンタ1021は18ビット値「0x00010」を含んでいるものとする。より詳細には、署名インデックスは「1」であり、そして、秘密カウンタは「0」である。
【0216】
第1のチャレンジビットは「1」であることから、AESエンジンはモード「1」で起動される。従って、出力レジスタ1044は「x’[1]=AESs(0x10)」を格納する。次に、モード「0」が起動される、そして、出力レジスタが、ゲームマシン820へ送出された「y’[1]=AESx’[1](IV)(+)IV」を格納する。その後、カウンタ1021が「0x00011」にインクリメントされ、モード「1」が起動され、よって、出力レジスタ1044は、ゲームマシン820へ送出された「x’[2]=AESs(0x11)」を格納する。
【0217】
第2のチャレンジビットは「0」であり、それ故、AESエンジンは「x’[3]=AESs(0x12)」、「x’[4]=AESs(0x13)」、そして「y’[4]= AESx’[4](IV)(+)IV」を計算する。「x’[3]」と「y’[4]」が、ゲームマシン820へ送出される。同様に、第3及び第4のチャレンジビットは「0」であり、それ故、「x’[5]」、「y’[6]」、「x’[7]」、そして、「y’[8]」が発送される。この時点で、カウンタ値1021は「0x18」である。
【0218】
次のチャレンジビットは「1」、「0」、「1」、「1」であることから、メモリコントローラ801は、「y’[9]」、「x’[10]」、「x’[11]」、「y’[12]」、「y’[13]」、「x’[14]」、「y’[15]」、「x’[16]」を計算して発送する。全ての動作が完了した後は、カウンタ値1021は「0x20」である。
<セキュリティーチップ>
【0219】
図12は、ゲームマシン820のセキュリティーチップのハードウェアダイアグラムである。
【0220】
セキュリティーチップ821は、スマートカードマイクロコントローラ(smartcard microcontroller)として、又は、TPMチップ(trusted computing module)である、一般的には、耐タンパー性を持つチップ(tamper-resistant chip)として実現することができる。本実施例では、セキュリティーチップは、三つの異なるメモリユニット、即ち、ROMユニット1210、EEPROMユニット1220、そして、RAMユニット1230を備えている。
【0221】
ROMユニット1210は、「OS」1211でもよいプログラムと、例えば、AES暗号化又はRSA動作のような低レベルの安全機能性をインターフェイス接続する高レベル機能1212と、図13を参照しながら詳細に述べられる認証プロトコル1213のプログラムと、そして、パターンマッチングプログラム1214とを格納している。これらのプログラムは、全ての商品化されたゲームマシンにとって同じであってもよいことから、ROMユニット1210はマスクROM技術によって実現することができる。
【0222】
他方、EEPROMユニット1220は、もし必要であれば修正され、カスタマイズされ、又は、アップデートが可能なデータを格納する。より詳細には、ファームハッシュ1221、ルート公開鍵1222、解読鍵1223、パターンファイル1224、ブラックリスト1225、そして、パッチ1226を格納する。ファームハッシュ1221は、ゲームマシン820のフラッシュメモリユニット142内に格納されたファームウェア161のハッシュ値である。ルート公開鍵1222は、半導体メモリ800がゲームマシン820と結合した場合に、ルート証明書212を有効にするために使用された公開鍵である。解読鍵1223は、半導体メモリ800がゲームマシン820と結合した場合に、ゲーム鍵222を解読するために使用可能な鍵である。パターンファイル1224は、部分的に悪意のあるコードやプログラムバグのリストを格納する。ブラックリスト1225は、危殆化されたことが知られた公開鍵のリストである。最後に、パッチ1226は、ゲームにおける既知のバグをパッチするための部分的なコードのリストからなる。
【0223】
RAMユニット1230は、プログラムの実行中に発生したテンポラリデータや変数1231を格納する。
【0224】
セキュリティーチップ821は、また、三つの演算ユニット、即ち、CPU1241、AESエンジン1242、RSAエンジン1243と、そして、乱数発生器(RNG)1245を含んでいる。
【0225】
中央演算ユニット(CPU)1241はマイクロプロセッサであり、例えば、プログラムのように、ROMユニット1210内に格納されたものを、中間結果のためのRAMユニット1230と、そして、カスタマイズされたパラメータを処理し又は長時間結果を格納するためのEEPROMユニットとを利用して実行する。
【0226】
AESエンジン1242は、暗号化に特化されたハードウェアコプロセッサである。コプロセッサは、ビットストリング「A」を鍵としてビットストリング「B」の暗号化を参照するAES演算「AESA(B)」を、高速かつ低電力消費で、実行することができる。CPU1241と接続して使用した場合、AESエンジン1243は、データのハッシュを計算する(hashing data)などのより高度な演算は実現可能となる。例えば、128ビットの初期ベクトル「IV」と256ビットのメッセージ「x=x[1]||x[2]」とが与えられると、128ビットのハッシュ値「y=H(x)」が、以下の二つのステップにおいて計算され、即ち、「y’=AESx[1](IV)(+)IV」と「y=AESx[2](y’)(+)y’」、ここでは、AES暗号化は、AESエンジン1242により行われ、排他的OR「(+)」は、CPU1241により行われ、そして、中間結果「y’」はRAM1230内に格納される。
【0227】
RSAエンジン1243は、RSA演算に特化したハードウェアコプロセッサである。特に、RSAエンジン1243は、EEPROM1220内に格納されたルート公開鍵1222を使って、ルート証明書212、ゲーム証明書213、又は、アップデートデータ941内に封入されているRSA署名の検証が可能である。
【0228】
乱数発生器1245は、チャレンジとして使用できる乱数を発生する。
【0229】
最後に、セキュリティーチップ821内のユニットは内部バス1251に結合されており、セキュリティーチップ821は、バス151により、ゲームマシン820の他の電子コンポーネントに結合されている。他のコンポーネントとの通信は、入/出力(I/O)インターフェイス1244により管理されている。
<検証プロトコル>
【0230】
図13は、ゲームマシン820によって行われる検証プロトコル(verification protocol)の機能詳細を表すブロックダイアグラムである。如何なる特定の限定をも意図するものではないが、この実施例では、検証プロトコルは、セキュリティーチップ821のROMユニット1210内に格納されたソフトウェアプログラムとして実現され、AESエンジン1242とRSAエンジン1243を使って、CPU1241により実行されるものとする。
【0231】
以下に述べる検証プロトコルは、既に図1を参照して述べたものとは、幾つかの点で異なっている。相違点の一つは、どのようにして、「CHALLENGE」メッセージを半導体メモリ800に送信した後に受信されたデータが処理されるかである。
【0232】
ステップ1312では、ゲームマシンが、半導体メモリからの16個の値、「s[1]」…「s[16]」を受信する。最初、インデックス「j」は「1」に、そして、ビットストリング「H1」は、空のビットストリングに設定されている。次に、ステップ1321〜1326が8回繰り返される。
【0233】
ステップ1322では、セキュリティーチップ821のCPU1241によって行われる右移動動作を利用して、チャレンジの最右側のビットが抽出される。このチャレンジビット(LSB)が「0」であれば、受信された「s[j]」は「x’[j]」である筈であり、そして、「s[j+1]」は「y’[j+1]」である筈である。それ故、ステップ1326では、AESエンジン1242とCPU1241とを使って、ハッシュ値「y’[j]」が「y’[j]=AESs[j](IV)(+)IV」として計算される。本実施例で使われるハッシュ関数「H」の定義によれば、以下の等式が満足されることに留意のこと。
【数15】
【0234】
その後、ビットストリング「y’[j]」と「s[j+1]」とが「H1」に添えられ、そして、カウンタ「j」が二つインクリメントされる。
【0235】
同様にして、チャレンジビットが「1」であれば、受信された「s[j]」は「y’[j]」であり、他方、「s[j+1]」であれば「x’[j+1]」である。即ち、ステップ1236では、「y’[j+1]」が「AESs[j+1](IV)(+)IV = H(x’[j+1])」として計算される。そして、ビットストリング「s[j]」と「y’[j+1]」が「H1」に添えられ、そして、カウンタ「j」が二つインクリメントされる。
【0236】
上述のステップを8回繰り返した後、そして、受信されたデータ「s[1],…,s[16]」が本物であるとすると、ビットストリング「H1」は「y’[1]||y’[2]||」…||y’[16]」と等しい筈である。ステップ1341では、AESエンジン1242を使用して、「H1」のハッシュ値が計算される。ステップ641、642、1343〜1346は、PROM802内に配置されたツリーテーブル203からツリーデータを抽出することを狙ったものである。それらのステップは、ツリーテーブル203の論理アドレスが「0x0」から開始することから、アドレス「A」がステップ1343においては「(j-2)*0x10」として、そして、ステップ1343においては「j*0x10」として、簡単に、CPU1241により計算されるということを除き、基本的には、既に図6を参照して述べたステップと同様である。ステップ1344では、ハッシュ値「H(H2||H1)」が、二つのステップにより、CPU1241とAESエンジン1242とを使って、以下のように計算される、最初に、「H1’ = AESH2(IV)(+)IV」が計算され、そして、「H1 = AESH1(H1’)(+)H1’」が計算される。
【0237】
ステップ641、642、1343、及び1346を14回繰り返した後、そして、全ての受信されたデータが本物であるとすると、セキュリティーチップは、ツリーテーブル「t[1]」321の先頭を再計算することができ、そして検証は成功となる。もしも再計算されたデータがツリーテーブルの先頭と異なっていれば、検証は失敗となる。
<通信プロトコル>
【0238】
図14は、ゲームマシン120と半導体メモリ100との間の通信プロトコルのブロックダイアグラムである。
【0239】
図14の左側のブロックは、半導体メモリ800により実行される作動であり、他方、右側のブロックは、ゲームマシン820により実行される作動である。中央のブロックは、ゲームマシンと半導体メモリとの間で交わされるメッセージである。
【0240】
先に図7を参照して述べた通信プロトコルは、本実施例の通信プロトコルとは、幾つかの点で異なっている。これらの相異は、半導体メモリ800がAESエンジン1242を備えていること、そして、ゲームマシン820がセキュリティーチップ821を備えているという事実に起因するものである。これらのユニットのおかげで、通信プロトコルは、以下のような方法により強化できる。
【0241】
ゲームマシン820がスイッチ139により給電されると、ファームウェア161がRAMユニット141にロードされ、そして、CPU143によって実行される前に、セキュリティーチップ821が、ステップ1401と1402においてその完全性を検証する。より詳細には、ステップ1401において、ファームウェアのハッシュ値が、AESエンジン1242とセキュリティーチップ1241のCPUを使って計算される。このハッシュ値は、セキュリティーチップ821のEEPROMユニット1220内に格納されたファームウェア1221のハッシュ値と比較される。もしも、それらが一致しなければ、ファームウェアは非合法に修正されていることを意味し、この場合、ゲームマシンはスタートとしない。もしもファームウェアがその完全性のチェックを通過すれば、RAM141内にロードされ、そして、CPU143によって実行される。
【0242】
次に、暗号化ヘッダ210が、半導体メモリ800から入手される。暗号化ヘッダの有効性は、セキュリティーチップにより、以下のようにしてチェックされる。
− システムパラメータ211がサポートされていることを、セキュリティーチップが検証する。
− ルート公開鍵1222により、ルート証明書212を検証する。証明書内に封入された署名がRSAエンジン1243を使用して検証され、それにより、ゲーム公開鍵214の有効性を断定する。
− ルート証明書212内に封入されたゲーム公開鍵によってゲーム証明書213を検証する。ゲーム証明書内に封入されている署名は、RSAエンジン1243を使用して検証され、これによって、ゲーム公開鍵214の有効性を断定する。
− 公開鍵214の使用が、危殆化された公開鍵のブラックリスト1225内に存在しないことをチェックする。
【0243】
暗号化ヘッダ210が有効であれば、先に図10、11、及び、12を参照して述べた認証プロトコルが、ステップ1411で実行される。成功裡の結果の後、ステップ1413では、AESエンジン1242により、解読鍵1223を使ってゲーム鍵222が解読され、そして、AESエンジン1242によって、解読されたゲーム鍵222を使って、プログラムのエントリポイント223が解読される。
【0244】
ゲームプログラムの最初のセクタ941が、データのアップデートのために保存されていることを思い出すこと。ステップ1421では、第1のセクタ941とそのハッシュ値224が、AESエンジン1242により、ゲーム鍵222を使って解読される。ステップ1422では、第1のセクタ941の完全性が、セキュリティーチップ821によって、以下のように検証される。
− 第1のセクタのハッシュ値がAESエンジン1242を使って計算され、そして、解読されたハッシュ値と比較される。等しくない場合には、データのアップデートが非合法的に修正されている。
− 第1のセクタは、RSAエンジン1243と、ルート公開鍵1222とを使って検証したデジタル署名とを含んでいる。デジタル署名の有効性が、データアップデート914の完全性を保障する。
【0245】
しかしながら、ファームウェア161及び/又はセキュリティーチップ821内に格納されたデータが、既にアップデートされていることもある。この場合、データアップデート941は廃棄される。アップデートが要求されると、ステップ1424において実行され、即ち、ファームウェアがより新たなバージョンに取り替えられ、そのハッシュ値1221がEEPROM1220内に格納され、そして、アップデートされたパターンファイル1224又はアップデートされたブラックリスト1225など、追加データがEEPROM1220内にコピーされる。
【0246】
次に、メインプログラムが半導体メモリから転送される。ゲームプログラムは暗号化されていることから、ステップ1433では、AESエンジン1242により、ゲーム鍵222を使ってゲームプログラムが解読される。同様にして、ゲームヘッダ220内に格納したセクタのハッシュ値が解読される。転送されたセクタからのデータを有効にするために、ステップ1434においては、以下のタスクが、セキュリティーチップ821によって行われる。
− セクタのハッシュ値が、AESエンジンを使用することによって計算される。計算されたハッシュ値が、ゲームヘッダ220内に格納されたハッシュ値と異なっていれば、セクタデータは非合法的に修正されている。
− セクタデータは、デジタル署名を含んでおり、このデジタル署名が、ルート公開鍵1222とRSAエンジン1243を用いて検証される。検証が成功の場合には、セクタの完全性が保障される。
− 解読されたセクタはパターンファイル1224の要素と比較される。もしも一致しているとされれば、セクタデータは、バグ又は悪意のプログラムを含んでいる。この場合、セキュリティーチップ821は、パッチ1126内の訂正された部分的なプログラムを探す。パッチ(replacement)も見つからなければ、プログラムの実行が停止される。
【0247】
もしもセクタの完全性が断定されたとすれば、ステップ735において、セクタ内に格納されたプログラムがCPU143により実行される。半導体メモリ800からもっと多くのデータが必要であれば、上述したステップが繰り返される。
【0248】
さて、好適な実施例によって得られる効果について、以下に、簡単に述べる。
【0249】
秘密鍵(private key)を知らなくとも、チャレンジの公開鍵やデジタル署名を利用し、コンピュータマシンは、原品である格納媒体を偽造品から区別することができる。更に、公開鍵を利用して、デジタルデータの有効性をチェックできることから、非合法プログラムを挿入することはできない。その結果、本発明は、デジタルデータの認証されていないコピーの利用を防止する。
【0250】
本発明になる幾つかの実施例について示しかつ述べたが、開示された実施例は、本発明の範囲から逸脱することなく変更や修正がされうるものであることが理解されよう。それ故、ここに示され、かつ、述べられた詳細によって縛られることはなく、しかしながら、添えられた請求項の範囲内に入ることとなる、かかる変更や修正の全てがカバーされる。
【符号の説明】
【0251】
100…半導体メモリ、不揮発性のメモリユニット…102、読み出し専用不揮発性のメモリユニット…103、104…バス、メモリコントローラ…105、ピン…106〜117、120…ゲームマシン、122…方向性パッド、123…ボタン、124…液晶スクリーン、125…スピーカ、138…空洞部、139…オン/オフスイッチ、126〜137…コンタクト、141…RAM、142…フラッシュメモリユニット、143…CPU、入出力インターフェイスユニット…144、145…ビデオコントローラ、146…サウンドコントローラ、147…入力制御ユニット148…電池、161…ファームウェア、162…ルート公開鍵、163…解読鍵。
【技術分野】
【0001】
本発明は、デジタルコンテンツを格納するための半導体メモリと、半導体メモリに格納されたデジタルコンテンツを処理するためのコンピュータマシンに関し、より詳細には、本発明は、半導体メモリと、非合法的に再流通されたデジタルコンテンツを処理することを防止するコンピュータマシンと、そして、そのための処理方法に関する。
【背景技術】
【0002】
認証は、海賊行為、未認証のコピー、又は、偽造を取り締まるため、重要な役割を担っている。かかる認証は、例えば、パスポートの所有者を認証し、又は、反偽造を目的とした無線通信可能なチップを埋設した安全なパスポートにも採用されており、そこでは、認証用チップが製造物の出所を認証する。加えて、著作権で保護されたデジタルメディアは、海賊行為などの未認証行為を防止するため、DRM (digital right managements) として知られる認証用トークンを含んでいる。その結果、それらを支える機器(CD、DVD、メモリカード、その他の同様なメモリ装置)は、しばしば、認証メカニズムを備えている。最後に、認証は、競合者が製品をリバースエンジニアリングすることを防止し、かつ、製品を安価に大量生産するためにも有用である。例えば、競合者によって製造された再充填用(リフィル)キットや偽のカートリッジの使用を防止するため、認証用チップをプリンターカートリッジに装着することもできる。
【0003】
認証は、被認証装置(prover)がその特定のための証拠を認証装置(verifier)に提示すプロトコルから構成されている。通常、認証装置は、被認証装置だけが解決可能な要求(チャレンジ:challenge)を送付する。この要求が共通鍵暗号化法に依っている場合には、被認証装置及び認証装置は共通の秘密鍵を共有しており、それに対し、公開鍵暗号化法(public-key cryptography)の場合には、被認証装置だけが秘密鍵を所有し、そして、どの認証装置も、被認証装置によって提供される要求の解を確認(チェック)することが出来る。
【0004】
公開鍵暗号化システム、特に、デジタル署名は、認証の目的のために利用することができる。認証装置はランダムなメッセージを、その秘密鍵を利用してメッセージに署名した被認証装置に送信する。そして、認証装置は、秘密鍵ではなく、被認証装置の公開鍵だけを用いて署名を認証することによって、被認証装置の身元を確認することができる。公開鍵暗号化法に基づく認証システムでは、認証装置は被認証装置の秘密鍵を知らないことから、認証装置が被認証装置を装うことができないという利点を有している。加えて、公開鍵基盤を利用することにより、製品ラインの認証が、容易に可能となる。即ち、被認証装置は、要求に対してデジタル的な署名を行い、そして、その公開鍵と共に、認証局装置(certificate authority)によって署名され、被認証装置の公開鍵のデジタル署名を含んだ被認証装置の公開鍵のための証明書(certificate)を提供する。そして、認証装置は、被認証装置の身元を確認するために、両方の署名を認証することができる。かかるアプローチは、個別ユニットの公開鍵ではなく、証明のための認証手段(例えば、全製品ラインのための単一の公開鍵であり、この公開鍵は製造会社から得られる。)を格納しなければならないという認証装置への格納要求を取り除くだけではなく、簡単な取り消し機構をも含んでいる。ある被認証装置の秘密鍵が知られ、その信用が失われた場合には、当該被認証装置の公開鍵は、全ての認証装置に対してブラックリスト内へ送ってもよい。
【0005】
最近では、CDやDVDなどの媒体よりもよりフレキシブルであることを理由に、半導体メモリを、ゲームやコンピュータプログラムのデジタルデータのための格納手段として利用することに、再び、関心が集まっている。特に、半導体メモリユニットは、認証、コピープロテクション、データの暗号化などの機能性を向上するため、カスタム回路を含むことができる。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】米国特許第6,782,477号:「プライベートコピープロテクションとオンラインセキュリティーを提供するための改ざん防止ハードウェアを使用するための方法とシステム」
【特許文献2】米国特許第6,606,707号:「半導体メモリカード」
【非特許文献】
【0007】
【非特許文献1】ラルフ C.メルクレ:「認証されたデジタル署名」CRYPTO 1989: 218−238頁
【非特許文献2】カミーユ ヴィオム、カツユキ オケヤ、エリック ダーメン、そして、ヨハネス ブックマン:メモリトークンによる公開鍵認証、WISA 2008, LNCS 5379:84−98頁
【発明の概要】
【発明が解決しようとする課題】
【0008】
他方、例えば上記の特許文献1に開示されたデジタル署名は、プログラムの完全性(integrity)を、より具体的には、プログラムが悪意の者により変更されたことをチェックするために有用である。しかしながら、デジタル的に署名されたプログラムは、そのデジタル署名を含め、コピーされ、そして、第三者によって非合法に再流通される可能性がある。実際、かかる第三者は、プログラムとデジタル署名とを含んだ格納媒体と、プログラムを走らせるコンピュータマシンとの間のチャンネルを監視することが出来る。その結果として、そのプログラムとデジタル署名とを引き出し、そして、そのコピーを非合法に再流通することが可能となる。
【0009】
他方、認証は、ある特定の格納媒体が、例えば、ライセンスを介して、公認の配給者によって認証されていることを保障している。特許文献2は、認証のための回路を備えている半導体メモリカードを開示している。しかしながら、認証は、認証が成功した後に転送されたプログラムがその特定の格納媒体に確かに格納されていたことを保障するものではない。例えば、悪意の者は、認証を目的として合法な格納媒体を利用し、その後、悪意の又は非合法に流通されたプログラムを、合法な格納媒体に格納されたプログラムの代わりに挿入することも可能である。
【0010】
非特許文献2は、半導体メモリカードとコンピュータマシンとを開示しており、そこでは、半導体メモリカードとコンピュータマシンとが相互に認証プロトコルに従事し、そして、解読鍵を導き出す。その結果、解読鍵によって暗号化されたデータは、半導体メモリカードに源を発するものであることが保障される。しかしながら、コンピュータマシンと半導体メモリカードは、最初に、多くのコンピュータマシンが多くの半導体メモリカードと結合され得る場合には、実用的ではなく、共通のマスター共通鍵を割り当てなければならない。
【0011】
本発明は、上記で述べた従来技術を考慮して達成されたものである。従って、本発明の一の目的は、メモリユニットや最初に共通鍵を割り当てるコンピュータなしに、メモリユニット内に格納されたデジタルデータの完全性を確立し、もって、非合法に再流通されたデジタルデータが処理されるのを防止するためのマシンを提供することである。更に、上記及び他の目的と新規な特徴が、続く記載や添付の図面から明らかとなろう。
【課題を解決するための手段】
【0012】
上記の目的を達成するため、本発明によれば、まず、コンピュータマシンと結合されるための半導体メモリであって、第1のデータ、第1の鍵、そして、第2の鍵を格納し、前記第1の鍵は、前記第1のデータと前記第2の鍵とから導き出された所定の値であるところの不揮発性メモリユニットと、そして、コンピュータマシンからのチャレンジを受信し、そして、コンピュータマシンへ第2のデータを転送し、第2のデータが、前記第2の鍵と前記チャレンジとから導き出されるところのメモリコントローラとを備えている半導体メモリが提供されている。
【0013】
また、本発明によれば、上述した目的を達成するため、半導体メモリと結合するためのコンピュータマシンであって、CPUと、第1の鍵を格納している不揮発性メモリユニットと、前記半導体メモリからのデータを受信するための入出力インターフェイスとを備えているものにおいて、前記半導体メモリからのデータは、第2の鍵と、第1のデータと、そして、第2のデータとを含んでおり、そして、前記コンピュータマシンは、更に、前記第2の鍵を検証するための署名検証ユニットと、チャレンジを発生するための乱数発生器と、前記第1と第2のデータを処理するためのハッシュ関数ユニットと、そして、前記ハッシュ関数ユニットによって処理されたデータと第2の鍵を比較するための比較ユニットを備えており、もって、第1と第2のデータの完全性を確立するコンピュータマシンが提供されている。
【0014】
更に、本発明によれば、上述した目的を達成するため、データ処理方法であって、半導体メモリからの第1の鍵を受信するステップと、前記半導体メモリへチャレンジを送信するステップと、前記半導体メモリから第1のデータを受信するステップと、前記チャレンジと前記第1の鍵により前記第1のデータの完全性をチェックするステップと、前記半導体メモリから第2のデータを受信するステップと、前記第1の鍵により前記第2のデータの完全性をチェックするステップと、そして、前記第2のデータを処理するステップを備えたデータ処理方法が提供されている。
【0015】
更には、本発明によれば、上述した目的を達成するため、データ処理方法であって、第1の鍵とその証明書を送信するステップと、少なくとも一のデータのハッシュ関数を送信するステップと、チャレンジを受信するステップと、複数の秘密値を送信するステップと、複数のイメージ値を送信するステップと、複数のツリー値を送信するステップと、そして、前記データを送信するステップを備えているデータ処理方法が提供されている。
【0016】
上記に加え、ここに開示された実施例の中の好適なものを以下に略述する。
半導体格納媒体は、例えば、プログラム、イメージ、音楽、映画など、デジタルデータと、公開鍵と、秘密鍵(private key)と、そして、コンピュータマシンとの通信を操作する回路とを備えており、公開鍵が少なくともデジタルデータと秘密鍵(private key)とから導き出される。第1に、半導体格納媒体は、公開鍵をコンピュータマシンへ転送する。第2に、コンピュータマシンがチャレンジ(乱数)を格納媒体へ送る。第3に、格納媒体がチャレンジのデジタル署名を発行し、そして、それをコンピュータマシンへ送り返す。第4に、コンピュータマシンが、公開鍵を使ってデジタル署名を検証する、第5に、格納媒体がデジタルデータをコンピュータマシンへ転送する。第6に、コンピュータマシンが、公開鍵を使ってデジタルデータを検証する。
【発明の効果】
【0017】
秘密鍵(private key)を知らなくとも、チャレンジの公開鍵やデジタル署名を利用し、コンピュータマシンは、正当(合法)な格納媒体を偽造品から区別することができる。更に、公開鍵を利用して、デジタルデータの有効性をチェックできることから、非合法プログラムを挿入することはできない。その結果、本発明は、デジタルデータの認証されていないコピーの利用を防止する。
【図面の簡単な説明】
【0018】
これら及びその他の目的、本発明の特徴や利点は、添付された以下の図面と関連させることにより、より容易に明らかとなろう。
【図1】ゲームマシンと、ゲームプログラムを格納するための半導体メモリとを備えたゲームシステムのハードウェアダイアグラムである。
【図2】半導体メモリ内の論理メモリマッピングのブロックダイアグラムである。
【図3】半導体メモリ内のROMユニットの物理アドレスマップと、ROM領域内に格納されたデータとの機能的な関連を示すブロックダイアグラムである。
【図4】半導体メモリ内のメモリコントローラのハードウェアダイアグラムである。
【図5】メモリコントローラの機能詳細を示すブロックダイアグラムである。
【図6】ゲームマシンにより行われる検証プロトコルの機能詳細を示すブロックダイアグラムである。
【図7】ゲームマシンと半導体メモリとの間の通信プロトコルのブロックダイアグラムである。
【図8】ゲームマシンと半導体メモリとを備えたゲームシステムのハードウェアダイアグラムである。
【図9】半導体メモリ内での論理メモリマッピングのブロックダイアグラムである。
【図10】半導体メモリ内のメモリコントローラのハードウェアダイアグラムである。
【図11】メモリコントローラの機能詳細を示すブロックダイアグラムである。
【図12】ゲームマシン内のセキュリティーチップのハードウェアダイアグラムである。
【図13】ゲームマシンにより行われる検証プロトコルの機能詳細を示すブロックダイアグラムである。
【図14】ゲームマシンと半導体メモリの間の通信プロトコルのブロックダイアグラムである。
【図15】ゲームマシンと半導体メモリユニットの製造プロセスのブロックダイアグラムである。
【発明を実施するための形態】
【0019】
<<定義及び表記法>>
まず、以下に用いられる定義と表記法について述べる。
【0020】
整数は、幾つかの表現を使って記述することができる。最も一般的な表現は十進法表現である。以下の図面における記述では、十進法表現に加えて、十六進法及び二進法表現が使用される。十六進法で書かれた場合、プレフィックス“0x”が添えられる。二進法で書かれた場合には、括弧“(…)”が書き添えられる。
【0021】
例えば、「0xF」は整数15の十六進法表現である。同様に、「(1111)」は15の二進法表現である。
【0022】
デジタルデータは、ビット列であり、ビットストリングとも呼ばれる。同様に、ビットの連続は、バイト列としても表現することができ、1バイトは8ビットから成る。例えば、ストリング(100101101)は9ビットを、又は、2つのバイト、「0x01」と「0x2D」とを有している。
【0023】
「x||y」は、ビットストリング「x」と「y」の連結(concatenation)に言及している。例えば、「0x012D=0x01||0x2D」のように記述する。
【0024】
「x(+)y」は、ビットストリング「x」と「y」のビット毎の排他的ORを言及している(「(+)」は排他的ORの演算記号を表す)。「x >> 1」は、ビットストリング「x」の右への移動を言及する。
【0025】
ビットストリング「x」の最下位ビット(LSB)は、その二進表現の最右のビットである。
【0026】
ハッシュ関数は任意の長さのビットストリングを所定の長さの短いビットストリングにマッピング(map)するアルゴリズムである。例えば、周知のハッシュ関数である「MD5」は、任意のサイズのメッセージを128ビットのハッシュ値にマッピングする。この意味において、ハッシュ値は、大きな入力メッセージの小さな「指紋」とも考えられる。ハッシュ関数の他の重要な特性は、同一のハッシュ値を持った二つのメッセージを見つけ出すことは困難であるということであり、この特性は、「衝突困難性(collision-resistance)」と呼ばれる。以下の好適な実施の形態での記載においては、表記法「y=H(x)」が使われるが、ここで「x」は入力メッセージであり、「H」はハッシュ関数であり、そして「y」はハッシュ値である。幾つかの周知の基本的なハッシュ関数としては、例えば、「MD5」又は「SHA1」がある。更に、ハッシュ関数は、ブロック暗号化(block ciphers)を含め(但し、それに限定されることない)、従来の暗号化関数(encryption functions)によって実現することができることも周知のことである。例えば、周知のブロック暗号化「AES」は、以下のように使用することができる。メッセージ「x」が256ビットを有しているとすれば、かかるメッセージは二つの128ビットのブロックx=x[1]||x[2]に分けることができ、128ビットの初期ベクトル(initial vector)が「IV」であれば、ハッシュ値「y=H(x)」は、以下の二つのステップで計算される。
【数1】
【0027】
上記において、「AESA(B)」は、鍵「A」による「B」の「AES」暗号化に言及しており、「A(+)B」は、「A」と「B」のビット毎の排他的OR(XOR)に言及している(「(+)」は排他的ORの演算記号を表す)。
【0028】
デジタル署名スキームは三つのアルゴリズムからなっている。最初の一つは、鍵対(key-pair)の発生であり、ここでは秘密鍵(private key)と公開鍵とが生成される。秘密鍵(private key)は公開されず、一方、公開鍵は誰にでも配布される。第二のアルゴリズムは、署名発生アルゴリズムである。メッセージと秘密鍵とを入力として、デジタル署名を発生する。第三は、署名認証アルゴリズムであり、これはメッセージ、署名、そして、公開鍵を入力として、署名の真正(correctness)を認証する。
【0029】
公開鍵は自由に入手可能であることから、誰でも署名を認証することはできるが、他方、有効な署名は、秘密鍵(private key)の所有者だけがこれを発生することが出来ることに注目することが重要である。
【0030】
上記非特許文献1に開示されている「Merkle」の署名スキームは、デジタル署名を提供するための周知の技術である。他の署名スキームとは異なり、「Merkle」の署名スキームは、複雑な算術演算を利用することなく、ただ単に、ハッシュ関数に依存するだけである。
【0031】
認証プロトコルは、被認証装置(prover)及び認証装置(verifier)と呼ばれる二つの存在の間における通信プロトコルであり、そこでは、被認証装置がその身元(identity)の証明(proof)を与える。認証プロトコルは、少なくとも二つのステップから構成されており、認証装置がチャレンジ(challenge)を送付し、そして、被認証装置が秘密のデータを利用して応答(response)を生成する。認証装置は、応答の有効性をチェックすることができ、そして、その結果、被認証装置の身元が正しいことを立証する。デジタル署名のスキームから認証プロトコルを構成することは単純であり、そこでは、チャレンジ(challenge)は乱数であり、そして、応答(response)はそのデジタル署名である。例えば、上記非特許文献2には、「Merkle」署名を基礎とした認証技術が開示されており、そこでは、「Merkle」署名が、メモリ動作(memory operations)だけで構成されている。
【0032】
デジタル証明書(digital certificate)は、公開鍵を確認するために有用なデジタル書面(digital document)である。デジタル証明書は、公開鍵のデジタル署名を備えており、そのデジタル署名は、例えば、政府の機関や、その公開鍵が信頼されている確立された会社など、信頼された第三者(trusted third party)により構成されている。加えて、証明書の階層を利用することが一般的であり、そこでは、ルート証明書(root certificate)が、公開鍵を検証するのに利用され、そして、同様に、第二の認証が公開鍵を検証するのに利用される。この型の階層は、一般に、公開鍵基盤(公開鍵インフラストラクチャ:public-key infrastructure)、又は、短縮して「PKI」と呼ばれる。「X.509」が、その構造やデジタル認証のフォーマットを規定するための周知の基準である。
【0033】
以下、本発明の好適な実施の形態について、添付の図面を参照しながら、詳細に述べる。
<<ゲームマシンと半導体メモリユニットの製造プロセス>>
【0034】
ゲームマシンと半導体メモリの詳細を述べる前に、本発明のより良い理解のため、ゲームマシンの製造プロセスと半導体について述べる。
【0035】
図15は、ゲームマシンと半導体メモリユニットの製造プロセスのブロック図である。このプロセスは、本発明の両方の実施例に適用可能である。
【0036】
如何なる特定の限定をも意図するものではないが、このプロセスでは、ゲームマシンの製造者1510、ゲームメーカ1530、そして、メモリ製造者1560という、三人の行為者を含んでいる。ゲームマシン製造者1510は、ゲームマシンを製造し、ゲームメーカ1530は、ゲームマシンにより実行されるソフトウェアプログラムを開発し、そして、メモリ製造者は、ゲームマシンにより実行されるソフトウェアプログラムを格納する半導体メモリユニットを製造する。
【0037】
ゲームマシン製造者1510は、ルート秘密鍵(root private key)1511、ルート公開鍵(root public key)1512、そして、解読鍵(decryption key)1513を保持している。如何なる特定の限定をも意図するものではないが、本発明においては、ルート秘密鍵及び公開鍵は「RSA」鍵であり、そして、それらはゲームマシンの製造者によって所有されたコンピュータ上で発生され、かつ、格納されたものであるとする。幾つかの同一のゲームマシン1514が製造され、そして、商品化されており、全てのゲームマシンは、ルート公開鍵1512と解読鍵1513とを格納している。
【0038】
ゲームメーカ1530がゲームマシン1514のため、対応する未暗号化ゲームヘッダ1533とゲームプログラムとを含めたビデオゲームを開発し、そして、そのゲームの千個のコピーを商品化することを希望したとする。しかしながら、ゲームメーカは、ゲームマシン製造者から、ルート証明書(root certificate)1515を含んだライセンスを得なければならない。
【0039】
ゲームマシン製造者と同様に、ゲームメーカは、ゲームメーカが所有するコンピュータ上で発生され、そして、格納された、ゲーム秘密鍵(game private key)1531とゲーム公開鍵(game public key)1532とを保有している。最初に、ゲームメーカ1530は、ゲーム公開鍵1532を送信して、ゲームマシン製造者1510からライセンスを入手し;ゲームマシン製造者は、解読鍵1513とゲーム公開鍵1532のデジタル署名を含むルート証明書1515を、応答する。デジタル署名は、ルート秘密鍵1511と共に、ゲームマシン製造者に帰属するコンピュータ上で発生される。また、アップデートデータ(data update)1516が、ゲームプログラム内に含まれ、そして商品化されたゲームマシン1514のファームウェアをアップデートするために送信される。
【0040】
次に、ゲームメーカは、ゲームデータを暗号化するため、ゲーム鍵1535を発生し、そして、解読鍵1513を用いてゲーム鍵を暗号化する。また、ゲームメーカは、ゲームヘッダ1533とゲームプログラム1534とを、ゲーム鍵1535を用いて暗号化する。
【0041】
その後、ゲームメーカにより所有されるコンピュータ上では、例えば、1541、1543、1545などの暗号化データが、そして、例えば、1542、1544、1546などのゲーム証明書が発生される、各暗号化データは秘密鍵を含んでいる。より正確には、千の異なる暗号化データがランダムに発生される。また、千の異なる公開鍵が演算される。それに加え、千のゲーム証明書が発生され、各ゲーム証明書は、千の公開鍵の中の一つのデジタル署名を含み、そして、当該署名はゲーム秘密鍵1531を用いて発生される。
【0042】
最後に、ゲームメーカは、千の異なる暗号化データと千の異なるゲーム証明書とを、一意の暗号化されたゲーム鍵1547(unique version)、一意の暗号化されたゲームヘッダ、そして、一意の暗号化されたゲームデータとを用いて結合する。この演算の結果は、例えば、1551、1552、1553のような、メモリ製造者1560へ出荷される千のメモリイメージである。メモリ製造者の役割は、単純に、受信したゲームのメモリイメージを、例えば、1561、1562、1563のような千の半導体メモリユニット内にコピーすることであり、そして、それらを商品化することである。
【0043】
ユーザが原品であるゲームマシンを、そして、原品である半導体メモリを購入した場合、二つの電子装置は、図7又は図14に記載された認証プロトコルを開始し、そして、ユーザはゲームメーカ1530が開発したゲームで遊ぶことが可能となる。
【0044】
上述したプロセスに替え、暗号化されたデータは、メモリ製造者によって、直接、発生することも可能であろう。この場合、メモリ製造者は、ゲーム秘密鍵と公開鍵とを保持し、ゲームマシン製造者からルート証明書を発生する。
<<実施例1>>
【0045】
最初に、メモリコントローラを備えた半導体メモリに焦点を当てた説明を行うが、ここでは、メモリがゲームマシンによって実行されるプログラムを格納している。
<ゲームシステム>
【0046】
図1はゲームシステムのハードウェアダイアグラムであり、ゲームマシン120と、ゲームプログラムを格納するための半導体メモリ100とを備えている。如何なる特定の限定をも意図するものではないが、この実施例では、ゲームマシン120は、手で保持できるポータブルなゲームマシンであるものとする。
【0047】
半導体メモリ100は、プラスチックの覆い101の内部に取り囲まれた電子部品を含んでいる。図1では、破線により示された部品はプラスチックの覆い101の内部に配置されている。
【0048】
半導体メモリ100は二つのタイプのメモリユニット、即ち、読み書きが可能な不揮発性のメモリユニット(read-write non-volatile memory unit)102と、読み出し専用の不揮発性のメモリユニット(read-only non-volatile memory unit)103とを備えている。如何なる特定の限定をも意図するものではないが、この実施例では、読み書き可能な不揮発性のメモリユニットは「EEPROM」チップであり、他方、読み出し専用のメモリユニットは、1回だけプログラマブルな「ROM」チップであるものとする。「ROM」チップ103は、ゲームプログラムを格納することができ、「EEPROM」チップ102は、セーブされたゲーム状態を格納することができる。メモリユニット102と103の詳細な内容は、後に、図2を参照しながら述べる。
【0049】
半導体メモリ100は、メモリユニット102と103をメモリコントローラ105に結合するためのバス104を備えている。メモリコントローラ105は、ゲームマシン120との通信を操作し、そして、メモリユニット102と103内に格納されたデータにアクセスする回路である。通信プロトコルは、後に図7を参照しながら説明する。最後に、半導体メモリ100は、物理的には、ピン106を介して、ゲームマシン120に結合することができる。本実施例においては、12本のピンは、特に限定されるものではないが、以下のようになっている。
− ピン106は、入力接地信号(input ground signal)、
− ピン107は、入力電源供給ピン(input power supply pin)、
− ピン108は、入力クロック信号(input clock signal)、
− ピン109は、入力リセット信号(input reset signal)、
− ピン110〜117は、ゲームマシン120と半導体メモリ100との間の双方向のデータ交換のために利用されるものである。
【0050】
ゲームマシン120は、プラスチックの覆い121、例えば方向性パッド(directional pad)122やボタン123のような入力コントローラ、液晶(LCD)スクリーン124、スピーカ125、そして、オン/オフスイッチ139を有している。半導体メモリ100が空洞部138内に挿入可能となっており、それによって、ゲームマシン120と半導体メモリ100とを物理的に結合するための連結が得られる。本実施例では、12個のコンタクトは、特に限定されるものではないが、以下の通りである。
− コンタクト126は、出力接地信号(output ground signal)、
− コンタクト127は、出力電源供給ピン(output power supply pin)、
− コンタクト128は、出力クロック信号(output clock signal)、
− コンタクト129は、出力リセット信号(output reset signal)、
− コンタクト130〜137は、ゲームマシン120と半導体メモリ100との間の双方向のデータ交換のために利用されるものである。
【0051】
即ち、コンタクト126〜129は、ゲームマシン120から半導体メモリ100への一方向の通信のために使用され、これに対して、コンタクト130〜137は、双方向の通信に使用することができる。
【0052】
プラスチックの覆い121内には幾つかの電子部品がある。RAM(Random Access Memory)141は、アクセスの早い、読み書き可能な揮発性メモリユニットであり、プログラムデータを共に、CPU(Central Processing Unit)143によって処理された中間データをも格納する。フラッシュメモリユニット142は、読み書き可能な不揮発性メモリユニットである。フラッシュメモリ内に格納されるデータには、以下のものを含んでいる:
− ゲームマシンのハードウェアを制御するプログラムである、ファームウェア161、
− ルート公開鍵162、
− 解読鍵163。
【0053】
入出力(I/O)インターフェイスユニット144は、ゲームマシン120と半導体メモリ100との間の通信を操作する回路である。
【0054】
ビデオコントローラ145は、スクリーン124に取り付けられた回路であり、映像をスクリーン124に対して発生し、そして、出力する。サウンドコントローラ146は、音、又は、音楽を表現するデジタル情報をアナログ電気信号に変換し、そして、その信号はスピーカ125によって音響信号に変換される。入力制御ユニット147は、CPU143によって処理することが出来るように、例えば、方向性パッド122又はボタン123に加えられた圧力である入力信号を、デジタル情報に変換する。
【0055】
最後に、電池148は、ゲームマシン内に封入された電子部品に対して電力を供給する。
【0056】
RAM、フラッシュメモリ、CPU、I/Oインターフェイス、ビデオコントローラ、サウンドコントローラは、異なる電子部品への制御信号やデータ信号、そして、そこからの制御信号やデータ信号を伝達するためのバス151に結合されている。加えて、電力が電池148により、バス151を介して電子部品へ供給されている。同様に、コンタクト126〜137、そして、I/Oインターフェイス144が、I/Oバス152に結合されている。スピーカ125とサウンドコントローラ146は、ケーブル153と結合されている。方向性パット122、ボタン123、そして、入力インターフェイス147が、ケーブル154と結合されている。最後に、電池148とオン/オフスイッチ139が、ケーブル155に結合されている。
【0057】
ユーザがスイッチを利用してゲームマシン120の電源をオンすると、フラッシュメモリ142に格納されたファームウェア161がCPU143により実行される。半導体メモリ100が空洞138内に挿入され、それにより半導体メモリ100のピン106〜117をゲームマシン120のコンタクト126〜137に結合すると、ゲームマシンとメモリとが連動し、図7を参照して後に述べる通信プロトコルを行う。通信プロトコルの普通に終了した後、半導体メモリ内に格納されていたプログラムがRAM141に転送され、そして、CPU143により実行される。プログラムは、例えば、映像をスクリーン124上に表示し、スピーカ125を介して音楽や音を鳴らし、そして、方向性パッド122又はボタン123を押しているユーザの動きに反応することができる。しかしながら、通信プロトコルが失敗した場合には、プログラムは実行されない。
【0058】
図2は、半導体メモリ100の内における論理メモリマッピングのブロックダイアグラムである。
【0059】
如何なる特定の限定をも意図するものではないが、本実施例では、半導体メモリ100の論理アドレスが48ビットの整数として表現されており、図2の左側に16進法により表記されている。これに替えて、異なるアドレススペースを使用することもでき、その場合、データは、物理的なチップ上の異なるサイズと異なるロケーションで、異なる順序で格納することができる。
【0060】
半導体メモリ100上に格納されたデータをアクセスするために、ゲームマシンは、論理アドレスとデータ長さとを半導体メモリへ送信する。次に、メモリコントローラ105が論理アドレスを物理アドレスに翻訳(変換)し、例えば、ROMユニット102又はEEPROM103など、関連するメモリユニットを作動し、そして、関連するメモリユニット上に格納されているデータをゲームマシン100へ送出する。
【0061】
48ビットのアドレス値は256,000ギガバイトのデータにアドレスすることができる。しかしながら、半導体メモリは、例えば、1ギガバイト程度の、より小さな容量を有している。この場合、論理メモリのある部分だけが、実際に有効なアドレスである。図2において、許されていないアドレスは、斜線によって表示されている。
【0062】
論理アドレスに加え、図2は、ROMユニット102、EEPROMユニット103、又は、メモリコントローラ105のうち、どのメモリユニット又はチップ上に、対応するデータが物理的に格納されているかを示している。メモリの特性(読出し専用か、又は、読み書き両方か)に対応して、ある論理アドレスに格納されたデータは読み出し可能であり、そして、時には書き込みも可能である。最後に、データへのアクセスは、アクセス制御ポリシー(access control policy)によって規定されており、図2において大文字「U」によって示されるユーザアクセスと、大文字「S」によって示される管理者アクセスとに分けられる。ユーザアクセスとは、ゲームマシン120によって直接アクセスされるデータを言い、他方、管理者アクセスとは、直接にはアクセスすることが出来なデータを意味する。より詳細には、メモリコントローラだけが管理者データにアクセスすることができる。
【0063】
論理アドレスは、以下の五つの領域に分類される。
− 暗号化データ領域200は、半導体メモリ100の認証の期間に利用される。
− 暗号化ヘッダ領域210は、認証の期間に転送されたデータと組み合わされ、半導体メモリの正真性(authenticity)を保証するパブリックパラメータを含んでいる。
− ゲームヘッダ領域220は、半導体メモリ内に格納されたゲームプログラムに関連する一般的な情報を含んでいる。
− セーブゲーム状態領域230は、ユーザによってセーブされたゲームの状態を含んでいる。
− ゲームプログラム領域240は、最初のセクタ241にファーウェアアップデートを、そして、他のセクタにゲームプログラムを格納している。
【0064】
上述した領域が、以下に詳細に述べられる。
【0065】
暗号化データ200は、秘密テーブル201、イメージテーブル202、そして、ツリーテーブル203を含んでいる。秘密テーブル201は、「0x0」から「0x3FFFFF」までのアドレス値を、即ち、4メガバイトを占有している。物理的には、秘密テーブル201からのデータは、ROMユニット102内に配置されている。加えて、秘密テーブル201へのアクセスは、管理者アクセスポリシー(supervisor access policy)によって管理さることから、制限される。
【0066】
イメージテーブル202は、「0x400000」から「0x7FFFFF」までのアドレス値を占有し(4メガバイト)、そして、ツリーテーブル203は、「0x800000」から「87FFEF」までを占有している。物理的には、それらはROMユニット102内に配置され、自由にアクセス可能である。
【0067】
それらのテーブル内に格納されたデータについては、後に、図3を参照しながら述べる。
【0068】
以下には、暗号化ヘッダ210が述べられる。アドレス「0x1000000」には、システムパラメータ211が格納されている。システムパラメータは、どのタイプのアルゴリズムを認証のために使用するのか、認証に使用するチャレンジのサイズ、認証を行うことができる総回数、そして、どのタイプの証明書が使用されるのかを、一義的に規定している。本実施例では、特に制限はないが、認証アルゴリズムは、ハッシュ関数「MD5」と共に、8ビットのチャレンジを使用する「Merkle」署名に基づくことができ、16,384回まで認証を行なうことができ、そして、証明書は「X.509」のデジタル証明書でも可能であるとしている。その場合、システムパラメータは、以下のような「ASCII」キャラクターで記述されたストリングから構成される:
− MD5_WITH_MERKLE
− CHALLENGE_8
− TIMES_16384
− CERTIFICATE_X509
【0069】
それに替えて、例えば、「SHA-1」又は「AES」のようなブロック暗号化に基づくものなど、「MD5」とは異なるハッシュ関数を使用することもでき、チャレンジのサイズや行われる認証の回数が異なっても、そして、証明書のタイプも異なってもよい。
【0070】
公開鍵214は、アドレス「0x100900」に格納される。公開鍵は、後に図7を参照しながら詳細に記載する認証プロトコルにおいて、役割を演ずる。認証アルゴリズムがハッシュ関数「MD5」と共に「Merkle」署名を使用する場合には、公開鍵は16バイトの二進データから構成される。
【0071】
ゲーム証明書は、アドレス「0x100600」に格納される。ゲーム証明書は、公開鍵を有効にするために使用される。ルートゲーム証明書は、アドレス「0x100300」に格納され、そして、ゲーム証明書を有効にするために使用される。手順の詳細は、後に、図7を参照しながら述べる。システムパラメータ211、ルート証明書212、ゲーム証明書213、そして、公開鍵214は、物理的にROMユニット102内に格納されており、そして、自由にアクセス可能である。
【0072】
2バイトの署名インデックス215は、アドレス「0x109400」に格納される。物理的には、署名インデックス215は、後に図4を参照しながら述べるメモリコントローラ105内における2バイトの不揮発性の読み書き可能なレジスタ内に配置される。署名インデックスは、秘密テーブル201、イメージテーブル202、そして、ツリーテーブル203で使用される暗号化データの配置を示している。
【0073】
ゲームヘッダ領域の内容を以下に述べる。かかる内容は、物理的には、ROMユニット上に格納されており、そして、自由にアクセス可能である。
【0074】
ゲームID221は、アドレス「0xFF0000000000」に格納されており、ゲームIDは、どのゲームが半導体メモリ上に格納されているかを一義的に規定する。ゲーム鍵222は、アドレス「0xFF0000000010」に格納される。ゲーム鍵は、ゲームヘッダデータの残りの部分と共に、ゲームプログラム240をも解読するために使用される。ゲームプログラムの権限のない解読を防止するため、ゲーム鍵221は、ゲームマシン120のフラッシュメモリユニット142内に格納された解読鍵163を使用して暗号化されている。
【0075】
その後のアドレスにおけるデータが、ゲーム鍵222により暗号化される。プログラムのエントリポイント223(program entry point)は、アドレス「0xFF0000000020」に格納されている。このプログラムのエントリポイントは、ゲームプログラムのメインルーチンのアドレスを示している。それ故、認証が成功した後には、ゲームマシン120は、プログラムのエントリポイントに特定されたアドレスに配置されているプログラムデータを読み込む。
【0076】
16バイトを占有するアドレス「0xFF0000000030」には、第1のハッシュデータ224が格納される。このデータは、ゲームプログラム領域240の第1セクタ内に格納されたデータに適用された「MD5」ハッシュ関数の出力である。より詳細には、第1のハッシュデータ224は、アドレス「0xFFFF00000000」における1メガバイトのデータを連結した結果であり、それを「MD5」により処理し、もって、16バイトのハッシュ値を得る。ゲームプログラム領域240には、合計1024セクタが存在することから、アドレス「0xFF0000000030」から「0xFF000000402F」まで、1024個のハッシュ値が存在する。
【0077】
セーブゲーム状態230は、アドレス「0xFFF000000000」から「0xFFF00002FFFF」までに格納される。物理的には、それらのアドレスはEEPROMに対応しており、それ故、セーブゲーム状態領域230内のデータは、読み出し、又は、書き込みができる。更に、データは、セーブゲーム状態領域230内において、自由にアクセス可能である。第1のセーブゲーム232から16番目233まで、16のセーブ用スロットがある。状態テーブル231は、各セーブゲームスロットの状態、即ち、アクティブか又は非アクティブかを示している。
【0078】
最後に、ゲームプログラム領域が、アドレス「0xFFFF00000000」から「0xFFFF3FFFFFFF」まで広がっており、それらは物理的にROMユニット102に対応している。ゲームプログラムデータは自由にアクセス可能であるが、しかしながら、ゲーム鍵222によって暗号化されている。ゲームデータは、1024のセクタに編成されており、各セクタは1024バイトを含んでいる。その結果、半導体メモリは、1ギガバイトまでゲームプログラムを格納することができる。ファームウェアのアップデートは、ゲームプログラム領域の最初のセクタ241内に格納されている。
【0079】
データサイズを略述すると、ROMユニット102は、1ギガバイトよりも僅かに大きい、1,082,709,024バイトを収容しており、そして、EEPROMは、196,608バイトを収容することが分かる。
【0080】
図3は、ROMユニット103の物理的アドレスマップと、そして、ROM領域内に格納されたデータとの機能的な関係を表すブロックダイアグラムである。
【0081】
以下に記載される物理的アドレスのマップに代えて、異なる順番で、又は、異なる物理的配置に格納されたデータにより、異なるアドレスの仕方を利用することもできる。
【0082】
以前にも説明したように、ROMユニット103は、暗号化データ200、暗号化ヘッダ210の一部、ゲームヘッダ220、そして、ゲームプログラム240を格納している。他方、ゲームマシン120は、48ビットのアドレスを使用して、半導体メモリの利用可能なメモリユニットに対し、データを読み出し又は書き込むことができる。他方、内部的には、各メモリユニットはそれ自身の物理的アドレスマップを有している。如何なる特定の限定をも意図するものではないが、本実施例では、ROMユニット103は、32ビットのアドレス空間を使用している。ゲームマシン120によって送られた論理アドレスを物理アドレスへ変換すること、そして、半導体メモリ100の対応するメモリユニットを作動することが、メモリコントローラ105の役割である。
【0083】
暗号化データ200は、秘密テーブル201、イメージテーブル202、そして、ツリーテーブルの、三つのテーブルを含んでいる。
【0084】
秘密テーブル201は、262,144個の16バイトの乱数、即ち、「x[1]」301〜「x[262144]」306によって満たされている。秘密「x[1]」は、物理アドレス「0x0」に配置され、秘密「x[2]」は「0x10」に、そして、秘密「262144」がアドレス「0x3FFFF0」に配置されるとまで、以下同様になっている。
【0085】
イメージテーブル202は、262,144個の各16バイトの値、即ち、「y[1]」311〜「y[262144]」316によって満たされている。如何なるインデックス「1<= i <= 262,144」に対しても、イメージ「y[i]」が「y[i]=H(x[i])」として規定されており、ここで「H」はハッシュ関数「MD5」である。換言すれば、「y[i]」は、ハッシュ関数「MD5」を介した秘密「x[i]」のイメージであり、例えば、「y[1]=H(x[1])」が成り立つ。イメージ「y[1]」は、物理アドレス「0x400000」に配置され、イメージ「x[2]」はアドレス「0x400010」に、そして、アドレス「0x7FFFF0」に配置されたイメージ「y[262144]」に至るまで、以下同様となっている。
【0086】
ツリーテーブル203は、各々が16バイトの、32767個の値、即ち、「t[1]」321〜「t[32767]」328を含んでおり、ここでは、「t[1]」はアドレス「0x800000」に配置され、「t[2]」は「0x800010」に、そして、アドレス「0x87FFF0」に配置された「t[32767]」に至るまで、以下同様となっている。ツリーデータは、その機能的な関係に応じて、二つのカテゴリに分類することができる。
【0087】
ツリーテーブル203の上部、より正確には、「t[16384]」から「t[32767]」までにおいては、ツリーデータはイメージテーブル202からのイメージデータに依存しており、如何なるインデックス「0<=i<=16383」に対しても、ツリーデータ「t[i+16384]」は、以下のように規定される。
【数2】
【0088】
例えば、「t[16384]=H(y[1]||y[2]||…||y[16])」、又は「t[16385]= H(y[17]||y[18]||…||y[32])」である。
【0089】
ツリーテーブル203の下部においては、如何なるインデックス「1<=i<=16383」に対しても、ツリーデータ「t[i]」は、以下のように規定される。
【数3】
【0090】
例えば、「t[1]=H(t[2]||t[3])」、又は、「t[8192]=H(t[16384]||t[16385])」である。
【0091】
以上の機能的な関係から、ツリーデータ203の配列は、二分のハッシュツリーとして見ることができ、そこでは、ツリーの根(ルート:root)は、テーブル「t[1]」の先頭値であり、その葉(leaves)は、「t[16384]」、「t[16385]」…「t[32676]」である。加えて、葉を除いて、全てのノード「t[i]」は、「t[i] = H(t[2*i]||t[2*i+1])」なる機能的関係に従って、ノード「t[2*i]」と「t[2*i+1]」に接続されている。
【0092】
暗号化ヘッダ210は、アドレス「0x87FFF0」から出発し、そして、アドレス「0x8893F0」で終わる。暗号化ヘッダ210は、ROM103内には、部分的にしか格納されていないことに留意のこと。より詳細には、システムパラメータ211、ルート証明書212、ゲーム証明書213、そして、公開鍵214がROMユニット103内に格納されているが、しかし、署名インデックス215はメモリコントローラ105内に格納されている。
【0093】
公開鍵214は、ゲームヘッダ220のハッシュ値と連結されたツリーテーブル「t[1]」321の先頭のハッシュ値であると規定される。
【数4】
【0094】
ゲームヘッダ220は、ROMユニット103内に完全に格納され、アドレス「0x8893F0」から出発し、アドレス「0x88D420」までである。最後に、ゲームプログラムは、アドレス「0x88D420」から始まってアドレス「0x4088D420」までである。
<メモリコントローラ>
【0095】
図4は、メモリコントローラ105のハードウェアダイアグラムである。
【0096】
メモリコントローラは、「READ」、「WRITE」、そして、「CHALLENGE」の、三つのタイプのメッセージを取り扱う。
− 「READ」メッセージはアドレスとデータ長さとを含んでおり、「READ||Address||Length」のようにフォーマットされ、そこでは、アドレスは48ビットのアドレスデータであり、長さは16ビットである。「READ」メッセージを受信すると、メモリコントローラは、アドレスと長さが読み出し可能なデータに対応することを検証し、対応するメモリユニットからデータを取り出してそれをゲームマシン120へ送り返す。
− 「WRITE」メッセージは48ビットのアドレスと8ビットのデータペイロード(data payload)を含んでおり、「WRITE||Address||Data」のようにフォーマットされる。「WRITE」メッセージを受信すると、メモリコントローラ105は、アドレスがEEPROMの書き込み可能なメモリに対応することを検証し、そして、そのデータペイロードをEEPROM領域に書き込む。
− 「CHALLENGE」メッセージは8ビットのデータペイロード、即ち、チャレンジを含んでおり、「CHALLENGE||Data」のようにフォーマットされる。かかるデータを受信すると、メモリコントローラ105は秘密テーブル201からデータを選択し、そして、それをゲームマシン120へ送り返す。
【0097】
上述したメッセージを如何に処理するかについて、図5を参照しながら詳細に述べる。
【0098】
メモリコントローラ105は、ピン106〜117を介して、ゲームマシン120と交信する。特に、ピン110〜117は双方向のデータ交信のために使用されており、ゲームマシン120から受信され又はゲームマシンへ送出されるデータは、8ビットのI/Oバッファ401内に格納される。接地ピン106、電力供給ピン107、クロックピン108、リセットピン109、そして、I/Oバッファは、全て、制御ユニット410へ結合されている。
【0099】
チャレンジレジスタ421と共に、シフトユニット422、秘密アドレスレジスタ430、三つの加算器441、442、443、そして、制御ユニット410が、図5を参照して詳細に述べるメッセージの処理機能を実現している。この制御ユニット410は、以下のものを備えている。
− メモリコントローラ105内の他のユニットを作動、制御し、そして、受信したメッセージに応じて信号を発送する、有限状態マシン411。
− 読み出し、又は、書き込まなければならないデータの物理アドレスを格納するアドレスレジスタ412。
− 読み出されるデータの長さを格納する長さレジスタ413。
− 入力データに整数「1」を加算するインクリメントユニット415。
− 入力データから整数「1」を減算するデクリメントユニット416。
− 入力された論理アドレスを物理アドレスに翻訳(変換)するアドレス変換マップユニット417。
【0100】
ROMユニット103が直接的に読み出された場合で、ゲームマシン120からの入力メッセージが「READ」メッセージであり、そして、論理アドレスが、直接アクセスが可能なROM領域に対応する場合、又は、ROMユニット103が間接的に読み出された場合で、入力メッセージが「CHALLENGE」メッセージである場合、コントロールユニットは、以下のステップを行う。
【0101】
アドレスレジスタ412には適当な値が設定される。直接アクセスの場合、論理アドレスは、アドレス翻訳マップ417によって物理アドレスへ変換され、そして、物理アドレスがアドレスレジスタ412内でコピーされる。長さの値は、長さレジスタ413内でコピーされる。
【0102】
その後、アドレスレジスタの値が、バス452を介してROMユニット103へ送られ、そして、ピン107からの電力供給信号とピン108からのクロック信号も、バス452を介して送られる。最後に、ROMチップセレクト(ROM CS)が、ROMユニット103を作動するため、「1」に設定される。
【0103】
その結果、ROMユニット103は、バス451を介して、特定のアドレスに配置された1バイトを戻す。このバイトは、I/Oバッファ401とデータピン110から117を介して、ゲームマシンへ送られる。次に、アドレスレジスタ412はインクリメントユニット415によってインクリメントされ、そして、長さレジスタはデクリメントユニット416によってデクリメントされる。有限状態マシン411は上記のステップを、長さレジスタが零(0)になるまで繰り返す。
【0104】
データがEEPROMユニット102から読み出され、又は、書き込まれる場合、同様のステップが、バス454、453を用いて行われる。唯一の相違は、バス454がROMチップセレクト(ROM CS)を「1」に設定し、付加的なR/W信号が、読み出しのための「0」、又は、書き込みのための「1」に設定され、そして、バスが双方向であることである。
【0105】
次に、間接的なROMへのアクセス、即ち、「CHALLENGE」メッセージがメモリコントローラにより受信され、そして、秘密テーブル201からのデータが選択されてゲームマシンに送り返される場合に関連するユニットについて述べる。秘密アドレスレジスタ430は、物理アドレスをROMユニット103内に表示する32ビットのレジスタであり、以下の部品から構成される。
− 4ビットのバイトカウンタ431。
− シフトユニット422に接続されたチャレンジビット「m」432。
− 3ビットの秘密カウンタ433。
− 暗号化ヘッダ210の一部である、16ビットの署名インデックス215。かかる署名インデックス215は制御ユニット410に接続されており、ゲームマシン120によって読み出すことができる。署名インデックス215は14ビットの署名カウンタ435と二つの零ビット436とから成る。
【0106】
チャレンジが半導体メモリ100へ送出されると、チャレンジレジスタ421内に格納される。次に、チャレンジ値が、シフトユニット422により、右へ1ビットだけ移動される。この処理において、チャレンジの最右側のビットが削除され、しかしながら、この最右側のビットは、秘密アドレスレジスタ430のチャレンジビット432へ転送される。
【0107】
第1の加算器441の1ビット入力が、制御ユニット410によって「1」に設定されると、加算器441は、バイトカウンタ431の値を1だけインクリメントする。この時点で、秘密アドレスレジスタ430は、ROMユニット103内の秘密テーブル201の一つのエレメントに対応する物理アドレスを持っている。秘密アドレスレジスタの32ビットの値は、アドレスレジスタ412へコピーされ、そして、バス接続452を介してROMユニット103へ送られる。従って、1バイトが、バス接続452を介して、ROMユニット103から送出され、そして、I/Oバッファ401とデータピン110〜117を介して、ゲームマシン120へ送られる。
【0108】
しかしながら、加算器441は、4ビットだけを取り扱うことができ、インクリメント動作の結果が4ビットよりも大きくなると、より具体的には、「1」が「0xF」に加算されると、オーバフローが起き、そして、加算器441の1ビットの出力が「1」に設定される。
【0109】
加算器441の1ビット出力は、第2の加算器442の1ビット入力と制御ユニット410に連結されている。制御ユニット410が第1の加算器441でのオーバフローを検出すると、チャレンジ値がシフトユニット422によって1ビットだけ右に移動し、そして、最右側のチャレンジビットが、再び、秘密アドレスレジスタ430のチャレンジビット432へ転送される。加えて、加算器441のオーバフロービットも第2の加算器442へ送られ、従って、それが3ビットの秘密カウンタ433をインクリメントする。しかしながら、秘密カウンタ433の値が「0x7」である場合は、インクリメント動作の結果が3ビットよりも大きくなるため、第2のオーバフローが生じる。この第2のオーバフローは、制御ユニット410と第3の加算器443の両方に送られる。
【0110】
従って、第3の加算器が14ビットの署名カウンタ435の値をインクリメントし、これによって署名インデックスを1だけ上昇する。また、制御ユニットが第2の加算器442におけるオーバフローを検知すると、受信されたチャレンジに対応する秘密データが完全に送信され、そして、メモリコントローラはアイドル状態となり、ゲームマシン120からの次のメッセージを待つ。しかしながら、署名カウンタ435の値が「0x3FFF」であり、そして、第2のオーバフロービットが「1」に設定された場合には、第3のオーバフローが生じる。これは、利用可能な秘密データが使い尽くされ、そして、半導体メモリ100がゲームマシン120とはもはや結合できないことを意味する。それ故、第3のオーバフローが制御ユニット410によって検出されると、ゲームマシン120からの如何なる新たなメッセージをも拒否する。
<メモリコントローラの機能の明細>
【0111】
図5は、メモリコントローラの機能の明細を示すブロックダイアグラムである。如何なる特定の限定をも意図するものではないが、本実施例では、図5に記載された機能は、メモリコントローラ105における有限状態マシン411内の回路として実現されている。
【0112】
最初に、メモリコントローラ105は聴取状態にあり、ゲームマシン120からのメッセージを待つ。メッセージがデータピン110〜117を介して到着すると、以下のステップが行われる。最初に、メッセージのタイプが特定される。既に説明したように、「READ」、「WRITE」、そして、「CHALLENGE」の、メッセージには三つのタイプがある。
【0113】
ステップ511では、「READ」メッセージを検出する。ステップ512では、論理アドレスと長さペイロードとが、メモリコントローラ105によりチェックされる。より詳細には、論理アドレスは、読み出し可能(readable)で、かつ、直接にアクセス可能なデータに対応するものでなければならない。例えば、アドレス「0x880000」は読み出し可能ではなく、拒否される。同様に、アドレス「0x1009400」は読み出し可能ではあるが、データ長さが「4」であれば、アドレス「0x1009402」は読み出し可能ではないことから、そのメッセージは拒絶される。加えて、アドレス「0x0」は秘密テーブル201に対応しており、そして、直接にアクセスすることはできない。アドレスが読み出し可能でかつ直接アクセスが可能であれば、メッセージ内に設けた長さとアドレスとが、アドレスレジスタ412と長さレジスタ413にコピーされる。
【0114】
ステップ521と531では、読み出されるアドレスの物理的位置、即ち、ROM103、EEPROM102、又は、メモリコントローラ105によって、三つの場合を識別する。
【0115】
ROMアドレスの場合には、ステップ523において、ROMチップセレクタ(ROM CS)信号が「1」に設定され、そして、アドレスがバス452を介して送られる。加えて、アドレスレジスタ412がインクリメントされ、そして、長さレジスタ413がデクリメントされる。従って、ROMユニット103は、バス接続を介して、ゲームマシン120へ送られた特定アドレスの1バイトデータを戻す。長さレジスタが「0」よりも大きい限り、ステップ523が繰り返され、長さレジスタが「0」になると、データは完全に転送され、そして、メモリコントローラは最初の聴取状態に戻る。
【0116】
EEPROMアドレスの場合には、ステップ533が実行される。ステップ533は、EEPROMユニット102を読み出しモードで起動することを除いて、基本的に、ステップ523と同じである。
【0117】
論理アドレスがROMでもEEPROMでもない場合には、ステップ541において、署名インデックス215が戻される。
【0118】
ステップ551では、「WRITE」メッセージが検出される。ステップ552では、メッセージのアドレスペイロードが検証され、もしも有効であれば、アドレスがアドレスレジスタ412にコピーされる。次に、ステップ553では、EEPROMチップセレクトとR/Wを「1」に設定し、そして、アドレスをバス接続454へ送出することにより、対応するEEPROMの物理アドレスが書込みモードで起動される。同様にして、「WRITE」メッセージのデータペイロードが、バス接続453を介して、EEPROMチップ102へ転送される。
【0119】
メッセージが「READ」でも「WRITE」タイプでもない場合には、「CHALLENGE」である筈である。ステップ561では、ペイロードされたデータがチャレンジレジスタ421へコピーされる。
【0120】
ステップ562では、シフトユニット422により、チャレンジ値421が1ビットだけ右に移動され、そして、最右側のビットがチャレンジビット432へコピーされる。
【0121】
この時点では、秘密アドレスレジスタ430は、ゲームマシン120へ転送しなければならない第1のバイトの物理アドレスを含んでいる。このデータ転送は、ステップ563において行われ、即ち、バス接続452において、そのアドレスが秘密アドレスに設定され、そして、ROMチップセレクトが「1」に設定される。従って、1バイトがROMユニット103から受信され、そして、ゲームマシンへ送出される。加えて、バイトカウンタ431が第1の加算器441によってインクリメントされる。
【0122】
インクリメント期間にオーバフローが起こらなければ、ステップ563が繰り返される。本実施例では、如何なる特定の限定をも意図するものではないが、第1の加算器が4つのビットを操作し、それ故、オーバフローが生じる前に、バイトカウンタ431が16回インクリメントされ、そして、16バイトが、ROMユニット103からゲームマシン120へ転送される。例えば、秘密アドレスが初めにアドレス「0x10」を格納している場合、アドレス領域「0x10」〜「0x20」内の全てのバイトが転送され、即ち、これらの16バイトは、第2の秘密値「x[2]」302に対応することとなる。
【0123】
最初のオーバフローが第1の加算器441で起こった場合、ステップ565において、秘密カウンタ433が第2の加算器442によってインクリメントされる。このインクリメント動作期間にオーバフローが起こらなければ、チャレンジ421が、シフトユニット422によって右に1ビットだけ移動され、そして、ステップ562において、最右側ビットがチャレンジビット453へコピーされ、そして、ステップ453〜566が、再び実行される。もしも第2のオーバフローが起これば、秘密データの転送は完了する。その場合、署名カウンタ435は、ステップ567において、第3の加算器443によりインクリメントされる。このインクリメント動作期間にオーバフローが起こらなければ、メモリコントローラは、その初期状態へ戻る。もしも第3のオーバフローが生じれば、秘密テーブル201からのデータが利用し尽くされたことを意味し、そして、ステップ569において、メモリコントローラは永続的休止状態(perpetual idle state)に入り、ゲームマシン120からの如何なる新たなメッセージをも拒否する。
<「CHALLENGE」メッセージ処理の例>
【0124】
以下に、「CHALLENGE」メッセージ処理の一例を述べる。
【0125】
メモリコントローラ105は、「CHALLENGE」メッセージを、2進法により表現されたデータペイロード「(11010001)」と共に受信するものとする。更には、秘密アドレスレジスタ430は、初めは32ビット値「0x00000100」を有しているものとする。より詳細には、署名インデックスは「1」であり、他の全てのレジスタは「0」であるとする。これは、秘密値「x[17]」305の物理アドレスであることに留意されたい。
【0126】
第1のチャレンジビットは「1」であり、従って、秘密アドレスレジスタは、秘密「x[18]」の物理アドレスである「0x110」に設定される。次に、秘密「x[18]」の16バイトが、クロックピン108からのクロック信号の度に、バイトカウンタ431をインクリメントすることにより、一バイト毎、ゲームマシン120へ転送される。その結果、秘密アドレスレジスタが、順次、以下のアドレス、即ち、「0x110」、「0x111」、「0x113」…「0x11F」に格納する。
【0127】
この時点において、バイトカウンタがインクリメントされると、第1の加算器441においてオーバフローが生じ、そして、秘密アドレス430が、再び、「0x110」となる。従って、秘密カウンタ432がインクリメントされ、そして、チャレンジビットは、チャレンジ421を右に移動した後に「0」に設定され、即ち、秘密アドレスは、秘密「x[19]」のアドレスである「0x120」となる。次に、秘密「x[19]」の16バイトがゲームマシンへ転送される。
【0128】
第3と第4のチャレンジビットは「0」であり、それ故、次に転送されるべき秘密値は「x[21]」と「x[23]」である。最後に、終わりの4つのチャレンジビットは、「1」、「0」、「1」、「1」であり、それ故、転送される秘密値は、「x[26]」、「x[27]」、「x[30]」、「x[32]」である。8つの秘密値が完全に転送された後に、署名レジスタがインクリメントされ、そして、秘密アドレスレジスタに格納された値は、秘密「x[33]」のアドレスである「0x00000200」となる。メモリコントローラは、最初の聴取状態へ戻り、そして、次のメッセージを待つ。
【0129】
従って、「CHALLENGE」メッセージを処理した後、八つの秘密値「x[18]」、「x[19]」、「x[21]」、「x[23]」、「x[26]」、「x[27]」、「x[30]」、「x[32]」が転送されるが、しかし、八つの秘密値「x[17]」、「x[20]」、「x[22]」、「x[24]」、「x[25]」、「x[28]」、「x[29]」、「x[31]」は転送されない。その結果、秘密値の半分だけが明かされることとなる。
【0130】
図6は、ゲームマシン120によって行われる検証プロトコル(verification protocol)の機能の明細を示すブロックダイアグラムである。如何なる特定の限定をも意図するものではないが、この実施例では、この検証プロトコルは、ゲームマシンのフラッシュメモリ142内に格納され、そして、CPU143によって実行されるソフトウェアプログラムとして実現されるものとする。
【0131】
検証プロトコルの開始では、ゲームマシン120は、そのRAMユニット141内に、図7を参照しながら詳細に述べる認証プロトコル(authentication protocol)の期間に入手された公開鍵214と署名インデックス215とを格納する。
【0132】
ステップ602では、ゲームマシンは、アドレス「0xFF0000000000」と長さ「0x4030」と共に「READ」メッセージを送付することにより、ゲームヘッダ220を要求する。ステップ603では、ゲームマシンはゲームヘッダを入手し、そして、アドレス「0x800000」と長さ「0x10」と共に「READ」メッセージを送付することにより、ツリー「t[1]」321の先頭を要求する。ステップ604では、ゲームマシンは「t[1]」を得て、そして、以下の演算を行う。
H1 = H( t[1] || H( game header) )
【0133】
ステップ605において、「H1」が公開鍵と比較される。ゲームマシンによって引き出されたデータが本物(authentic)であれば、演算された値「H1」は公開鍵214と等しい筈である。もしそうでなければ、ステップ606において、検証(verification)は失敗となる。
【0134】
もしも「H1」が公開鍵と等しい場合、ゲームマシンは、ステップ611において、8ビットのペイロード(乱数)と共に「CHALLENGE」メッセージを送信する。半導体メモリ100の応答は8個の秘密値「x’[1]」…「x’[j]」…「x’[8]」からなり、そして、ステップ612において、ゲームマシンにより受信される。実際、これらの8つの秘密値は、16個の秘密値「x[16*index+1]」、「x[16*index+2]」…「x[16*index+16]」の中から、メモリコントローラ105により選択され、そして、それら16個の秘密の半分の選択が、図5に示すように、チャレンジ値に従って行われる。ここで、「index」は署名インデックス215である。
【0135】
加えて、変数「A」が以下のように設定される。即ち、「A = 0x00400000 + 0x100*index」であり、ここで、「index」は署名インデックス215である。即ち、「A」は、イメージテーブル202からのエレメント「y[16*index+1]」の論理アドレスである。例えば、もしも署名インデックス215が「0」であれば、「A」は「y[1]」311の論理アドレスである。署名インデックスが「1」であれば、「A」は「y[17]」315の論理アドレスであり、以下も同様である。
【0136】
ステップ621〜627では、16個のイメージ「y[16*index+1]」、「y[16*index+2]」…「y[16*index+16]」から、丁度、8個のエレメント「y’[1]」…「y’[j]」…「y’[8]」が、即ち、それらの半分が引き出され、従って、それらのステップは8回、繰り返される。より詳細には、
− 秘密「x’[j]」が実際に「x[16*index+2j-1]」であれば、「y’[j]」は「y[16*index+2j]」として選択される。
− しかし、秘密「x’[j]」が「x[16*index+2j]」であれば、「y’[j]」は「y[16*index+2j-1]」として選択される。
【0137】
例えば、署名インデックスが「1」であるとして、「y’[1]」の選択を考える。「x’[1]=x[17]」が受信されれば、「y[18]」が選択される。しかしながら、「x’[1]=x[18]」であれば、「y[17]」が代わりに選択される。
【0138】
以下には、正しいイメージを選択するための手順が述べられる。ステップ622において、チャレンジの最右のビット、即ち、最小桁ビット(LSB)が、右移動によって抽出される。一方、チャレンジビットが「0」であれば、「x[16*index+2j-1]」が受信されたことを意味する。その結果として、「y[16*index+2j]」が必ず選択される。これは、ステップ626において、「0x10」を変数「A」に加算し、そして、「READ」メッセージをアドレス「A」と長さ「0x10」と共に送信することにより行われる。その後、「0x10」が変数「A」に加算される。ステップ627では、対応するイメージ値「y[16*index+2j]」が半導体メモリ100から受信される。更に、受信された秘密「x[16*index+2j-1]」のハッシュ値と、受信されたイメージ「y[16*index+2j]」とが、以下のようにして、変数「H1」に連結される。
H1 = H1 || H( x’[j] ) || y’[j]
【0139】
もしも秘密値とイメージの値とが本物であれば、この演算の結果は、以下と等しくなる筈である。
【数5】
【0140】
これは、「H(x[16*index+2j-1]) = y[16*index+2j-1]」が成り立つことによる。
【0141】
他方、チャレンジビットが「1」であれば、「x[16*index+2j]」が受信され、そして、「[16*index+2j-1]」が選択されなければならない。その結果として、ステップ624では、アドレス「A」と長さ「0x10」と共に、「READ」メッセージが半導体メモリ100へ送信される。そして、「0x20」が、変数「A」に加算される。以前の場合と同様に、以下の演算がステップ625において行われる。
【数6】
【0142】
再び、もしも受信した値が本物であれば、この演算の結果は、以下と等しくなる筈である。
【数7】
【0143】
以上の手順を8回だけ繰り返した後、もしも全ての秘密値及びイメージ値が本物であれば、「H1」は以下と等しくなる筈である。
【数8】
【0144】
換言すれば、「H1」は、16個のイメージ値「y[16*index+1]」〜「y[16*index+16]」の連結である筈である。
【0145】
ステップ631において、「H1」のハッシュ値が計算される。以下の同等性が維持されることを思い出すこと。
【数9】
結果として、もしも全ての受信された値が本物であれば、「H1」は「t[16384+index]」と等しくなる筈である。
【0146】
ステップ632では、変数「j」が「0x4000+index」に、又は、十進法で「16384+index」に設定される。
【0147】
ステップ641〜646では、ツリーテーブル203のエレメントが選択され、そして、半導体メモリ100から抽出される。これらのエレメントは、ステップ631で計算された値「H1」を、ツリーテーブル「t[1]」321の先頭に関連付けることができる。この関連が有効性であれば、検証が成功したこととなるが、しかしながら、この関連が無効であることが明らかとなれば、検証は失敗となる。
【0148】
この関連は、ツリーテーブル203におけるエレメント間の関係、即ち、「t[i]=H(t[2i]||t[2i+1])」を利用している。最初に、「16384+index」は偶数の整数であるとする。それから、「t[16384+index+1]」が与えられれば、ノード「t[8192+index/2]」の値は、以下のように計算することが可能である。
【数10】
【0149】
同様に、もしも「16384+index」が奇数の整数であれば、もし「t[16384+index-1]」が与えられれば、「t[8192+(index-1)/2]」を以下のように計算することが可能である。
【数11】
【0150】
両方の場合において、ツリーにおいて1レベルだけ上に行くことが出来る。上記の手順を繰り返えすことにより、終には、全ての受信した値が本物である場合には、「H1」は、ツリーテーブル203の先頭である「t[1]」と等しい筈であり、これにより、ステップ631で計算したハッシュ値とツリーの先頭との間の関連を確立することとなる。
【0151】
以下に、ツリーデータを選択し、そして、抽出するための手順について述べる。初めに、「j」は「16384+index」に設定される。ステップ641では、「j」のパリティがチェックされる。
【0152】
もし「j」が奇数の整数である場合、ステップ643では、変数「A」が、「t[j-1]」のアドレスである「0x800000+0x10*(j-2)」に設定される。例えば、「index=1」であれば、初め、「j」は、奇数の整数「0x4001」、又は、十進法での「16385」と等しく、そして、「A」は以下と等しい。
【数12】
【0153】
これは、確かに、「t[16384]」325のアドレスである。
【0154】
それから、アドレス「A」及び長さ「0x10」と共に、「READ」メッセージが半導体メモリに送信され、半導体メモリは、ステップ644において、ツリーテーブル203の関連するエレメント「t[j-1]」を返送する。このエレメントは、変数「H2」内に格納される。
【0155】
その後、以下の演算、即ち「H1 = H(H2||H1)」が行われる。「j」は奇数の整数であることから、「H2=t[j-1]」、そして、「H1=t[j]」であり、計算の結果は、「t[(j-1)/2] = H(t[j-1]||t[j])」と等しくなる。最後に、「j」は右移動により「(j-1)/2」へアップデートされる。
【0156】
同様に、もしも「j」が偶数の整数であれば、ステップ645では、「A」が、「t[j+1]」のアドレスである「0x800000+0x10*j」に設定される。例えば、もしも「index=0」であれば、初め、「j」は偶数の整数「0x4000」、又は、十進法の「16384」と等しく、そして「A」は「0x840000」と等しい。これは、確かに、「t[16385]」326のアドレスである。
【0157】
それから、アドレス「A」と長さ「0x10」と共に、「READ」メッセージが送信され、そして、関連するエレメント「t[j+1]」が「H2」内に格納される。ステップ646では、演算「H1=H(H1||H2)」が行われる。「j」は偶数の整数であることから、「H2=t[j+1]」そして「H1=t[j]」であり、この計算の結果は、「t[j/2]=H(t[j]||t[j+1])」と等しくなる。最後に、「j」は右移動により「j/2」にアップデートされる。
【0158】
変数「j」は、上述した手順の各々の繰り返しにおいて、右に移動される。即ち、最終的には、「j」は、値「1」に到達する。この時点において、全ての受信した値が本物であれば、「H1」は、ツリーテーブル203の先頭である、「t[1]」321と等しい筈である。もしもそうであれば、全ての受信した値は、確かに、本物であり、そして、検証は、ステップ652において、成功裡に終了する。そうでない場合は、検証は、ステップ653において、失敗となる。
【0159】
本実施例においては、変数「j」は、当初は、厳密には「32768」よりも小さな整数である「16384+index」に設定される。その結果、丁度14回の繰り返し、それにより、14回の右移動の後に、変数「j」は「1」になる。換言すれば、本実施例では、ステップ642〜646において、丁度14個のエレメントが、ステップ631において演算された値、即ち、「t[16384+index]」と、ツリー「t[1]」の根(ルート)との間の関連を確立するため、ツリーテーブル203から抽出される。
【0160】
上述した検証手順においては、ゲームマシンは8個の秘密値と、8個のイメージと、14個のツリー値を入手し、そして、それらの秘密、イメージ、そしてツリー値は、非特許文献2に開示されたように、チャレンジの「Merkle」署名である。
【0161】
以下には、検証手順の一例が示される。
【0162】
署名インデックス215は「1」であり、そして、ゲームヘッダ220とテーブルツリー「t[1]」321の先頭は、ゲームマシン120にとって入手可能であるものとする。
【0163】
最初に、ゲームマシンが秘密値とイメージ値とを如何に入手し、そして、それらが如何に組み合わせられるについて述べる。
【0164】
ゲームマシンは、8ビットのチャレンジ(乱数)を発生し、このチャレンジの値の二進法での表現は「(11010001)」とする。従って、ゲームマシンは、メモリコントローラにより、チャレンジ値に従って選択される8個の秘密値「x’[1]」…「x’[8]」を受信する。より詳細には、もしも秘密値が本物であれば、以下の関係、「x’[1]=x[18]」、「x’[2]=x[19]」、「x’[3]=x[21]」、「x’[4]=x[23]」、「x’[5]=x[26]」、「x’[6]=x[27]」、「x’[7]=x[30]」、そして「x’[8]=x[32]」が保持される。それ故、ゲームマシンは、以下の秘密イメージ、「y[17]」、「y[20]」、「y[22]」、「y[24]」、「y[25]」、「y[28]」、「y[29]」そして「y[31]」を選択する。また、受信した秘密値のハッシュ値を計算し、そして、全てのものを以下のように連結する:
【数13】
【0165】
「y[i]=H(x[i])」であることから、上記の表現は、以下と等しい:
【数14】
【0166】
「H1」のハッシュ値を連結し、そして、「t[16385]=H(y[17]||…||y[32])」であることから、ゲームマシンは「H(H1)=t[16385]」を得る。
【0167】
次に、「t[16385]」と「t[1]」との間の関連の計算が説明される。初め、変数「j」は「16385」に等しい。
ステップ1: j=16385
【0168】
整数「16385」は奇数であり、それ故、「t[16384]」が半導体メモリから読み出される。さて、ゲームマシンは「H(t[16384||t[16385]]=t[8192])を計算することが出来る。
ステップ2: j=8192
【0169】
「8192」は偶数であり、「t[8193]」が半導体メモリから読み出され、そして、ゲームマシンは「H(t[8192]||t[8193])=t[4096]」を計算することが出来る。
ステップ3: j=4096
【0170】
「4096」は偶数であり、「t[4097]」が半導体メモリから読み出され、そして、ゲームマシンは「H(t[4096]||t[4097])=t[2048]」を計算することが出来る。
【0171】
この手順は、「j=2048」、「1024」、「512」、「256」、「128」、「64」、「32」、「16」、「8」、「4」、そして、「2」に対して、繰り返される。
ステップ14: j=2
【0172】
「2」は偶数であり、「t[3]」が半導体メモリから読み出され、そして、ゲームマシンが「H(t[2]||t[3])=t[1]」を計算する。
【0173】
ゲームマシンは、ツリーテーブルt[1]の先頭を再計算することができ、そして、検証が首尾よく終了する。
<通信プロトコル>
【0174】
図7は、ゲームマシン120と半導体メモリ100との間の通信プロトコルのブロックダイアグラムである。
【0175】
図7の左側のブロックは、半導体メモリ100により実行される作動であり、他方、図の右側のブロックは、ゲームマシン120によって実行される作動である。中央のブロックは、ゲームマシンと半導体メモリとの間で交されるメッセージである。
【0176】
ゲームマシンは、暗号化ヘッダ210への要求701を送信することによりプロトコルを開始する。この要求は、暗号化ヘッダのアドレス、即ち、「0x1000000」と、そのサイズ、即ち、「0x9402」又は二進表現で「37,890」バイトとを含んだ「READ」メッセージである。半導体メモリは、完全に暗号化ヘッダ210を送ることによって応答する。ステップ302では、ゲームマシンが、以下のサブステップを行うことによって、暗号化ヘッダ210を検証する。
− システムパラメータ211がサポートされていることを検証する。
− ルート証明書212を検証する。ルート証明書が、少なくとも、ゲーム公開鍵とデジタル署名とを含んでいる。即ち、ゲームマシンは、フラッシュメモリユニット142内に格納されているルート公開鍵によって、ルート証明書内に封入されたデジタル署名を検証し、もって、ゲーム公開鍵の有効性を確定する。
− ゲーム証明書213を検証する。ゲーム証明書は、少なくとも、公開鍵214とそのためのデジタル署名を含んでいる。即ち、ゲームマシンは、ルート証明書212からの公開鍵により、ゲーム証明書213内に封入されたデジタル署名を検証し、もって、公開鍵214の有効性を確定する。
− 公開鍵214の使用がファームウェアによって禁止されていないかをチェックする。もしも、本当に、公開鍵が危殆化されていれば、それはもう使用されるべきではなく、これが、ファームウェアのアップデートが危殆化されたものとして知られた公開鍵のリストを含んでいる理由である。
【0177】
上記のステップの一又はそれ以上が失敗すると、プロトコルは中断される。全てのステップが成功裡に実行されると、公開鍵214は有効となる。そこから、ゲームマシン120は、公開鍵214と署名インデックス215とを、後の使用のため、RAMユニット141内に保持する。
【0178】
ステップ711は認証プロトコルであり、その中では、ゲームマシンと半導体メモリとが幾つかのメッセージを交換する。ゲームマシンにより行われる作動は、既に、図6を参照して述べられており、他方、半導体メモリにより行われる作動は、図4に記載したハードウェアユニットを利用し、既に、図5を参照して述べられている。
【0179】
一旦、認証が首尾よく終了すると、ステップ713では、フラッシュメモリ142内に格納された解読鍵163を使用して、ゲーム鍵222がゲームマシン120によって解読される。ゲーム鍵222を使用して、プログラムのエントリポイント223もまた、ゲームマシンによって解読される。
【0180】
次に、ステップ721では、第1のセクタ241とそのハッシュ値224とが、ゲーム鍵222により解読される。第1のセクタがファームウェアのアップデートを格納していることを思い出すこと。ステップ722では、ファームウェアのアップデートの有効性が、以下のようにしてチェックされる。
− ゲームマシン120が、第1のセクタ241のハッシュ値を計算し、そして、それをゲームヘッダ内に格納されているハッシュ値224と比較する。二つのハッシュ値は等しい筈である。
− ファームウェアのアップデートはデジタル署名を含んでいる。それ故、ゲームマシン120は、ルート公開鍵162によりデジタル署名を検証する。
【0181】
上述したチェックの一つが失敗すると、プロトコルは中断される。ステップ723では、ゲームマシンは、ファームウェアのアップデートがフラッシュメモリユニット142内に格納されたファームウェア161よりも新しいものであることを検証する。もしもそうであれば、ステップ724において、古いファームウェアが新しいものと交換される。そうでなければ、ゲームマシンはファームウェアのアップデートを無視する。
【0182】
そこから、プログラムデータは、半導体メモリからゲームマシンへ転送が可能となる。解読プログラムのエントリポイント223は、プログラム開始のアドレスを格納しており、このアドレスは、ゲームプログラム領域240における半導体メモリの1,024個のセクタの一つに対応している。即ち、ゲームマシンは、関連するセクタに対する要求731を、セクタデータ732を転送する半導体メモリへ送信する。セクタデータが解読され、それ故、ゲームマシンは、ステップ733において、ゲーム鍵222を使用して、セクタを解読する。加えて、ゲームヘッダ220は、解読されたセクタのハッシュ値を格納しており、この値はゲーム鍵222により解読される。
【0183】
解読されたセクタデータの有効性をチェックするため、ゲームマシンはそのハッシュ値を計算し、そして、それを、ゲームヘッダ220からの解読されたハッシュ値と比較する。もしも二つのハッシュ値が等しければ、セクタデータは有効であり、ステップ735において、セクタ内に格納されたプログラムが実行される。二つのハッシュ値が異なっていれば、これはセクタデータが変更されている可能性があることを意味しており、プログラムは実行されない。
【0184】
プログラムは、幾つかのセクタに広がっていてもよい。従って、新たなデータが要求されるそれぞれの時点で、新たなセクタが転送され、そして、ステップ731〜736がゲームマシンによって、再度、実行される。
【0185】
従って、以下の効果が得られる。
【0186】
半導体メモリは、その秘密値の半分しか明かさないことから、かかる秘密値を多数集めても、悪意の者は、異なるチャレンジに対し、正しい回答を発行することは出来ない。実際、異なるチャレンジは、半導体メモリによって明かされていない少なくとも一つの秘密を知っていることを要求する。
【0187】
更に、悪意の者は、認証を成功した後は、プログラムを挿入することは出来ない。実際、そのように試みても、挿入されたプログラムのハッシュ値は、ゲームヘッダ内のセクタのハッシュ値の何れとも一致することはない。
【0188】
最後に、ゲームマシンは、認証プロトコルを実行するためのルート公開鍵を知ることをだけを必要とする。結果として、如何なるゲームマシンも、共通鍵を共有することなく、如何なる半導体メモリでも認証することができる。
<<実施例2>>
【0189】
第2に、暗号化エンジンを更に備えた半導体メモリと、そして、セキュリティーチップを更に備えたゲームマシンに焦点を当てた記述を示す。
【0190】
本発明の第1の実施例により得られるそれらの効果に加え、下記の記載による以下の効果が得られる。半導体メモリは、秘密値とイメージ値とを再生成できる暗号化エンジンを備えている。結果として、それらの値を不揮発性メモリ内に格納する必要はなく、たとえ悪意の者がメモリの内容に直接アクセスしても、その秘密値とイメージ値とは明かされることはない。更に、ゲームマシンはセキュリティーチップを備えている。それ故、認証を非作動状態にし、又は、調整するため、悪意の者がゲームマシンのファームウェアを改造しようとしても、かかる改造は、セキュリティーチップにより検出できる。
【0191】
図8は、ゲームシステムのハードウェアダイアグラムであり、ゲームマシン820と、そして、ゲームプログラムを格納するための半導体メモリ800を備えている。以下では、図1を参照して述べたゲームシステムとの違いが強調される。
【0192】
半導体メモリ800は、ROMユニット103と、EEPROMユニット102と、そして、バスに結合されたメモリコントローラ801を有している。図1を参照して述べたメモリコントローラとは異なり、このメモリコントローラは、プログラム可能な(programmable)ROM(PROM)と、128ビットの鍵「A」と128ビットの平文「B」とにより、「AESA(B)」のようなAES暗号化を計算することが出来る、AESエンジンとを備えている。
【0193】
図1を参照して上述したゲームマシンと比較して、このゲームマシン820は、更に、セキュリティーチップ821を備えている。後に、このセキュリティーチップ821の詳細については、図12を参照しながら述べる。フラッシュメモリユニット142はファームウェア161を格納しているが、しかしながら、ルート公開鍵162又は解読鍵163を格納することは要求されない。
【0194】
図9は、半導体メモリ800内における論理メモリマッピングのブロックダイアグラムである。
【0195】
図2を参照して述べた論理メモリマッピングとは異なり、本実施例では、如何なる特定の限定をも意図するものではないが、半導体メモリ800は、秘密テーブル201やイメージテーブル202を格納していない。更に、ツリーテーブル203、システムパラメータ211、ルート証明書212、ゲーム証明書213、そして、公開鍵214は、メモリコントローラ801のPROMユニット802内において物理的に配置されている。その結果、ROMユニット103は、単に、ゲームヘッダ220とゲームプログラム240とを格納している。ゲームヘッダ220とゲームプログラム240とを格納するのは、同様のゲームを格納している全て半導体メモリにとっては同様であることから、ROMユニット103は、マスクROMの技術、又は、オプションとして1回だけプログラム可能なROMの技術によって、実現することができる。
【0196】
ゲームプログラム240は幾つかのセクタに亘って広がっていてもよく、しかしながら、第1のセクタ941は、データアップデートのために取って置かれる。このデータアップデートは、ファームウェア161の最新のバージョンと、セキュリティーチップ821により要求されるデータと、そして、そのデジタル署名とを含んでいる。
<メモリコントローラ>
【0197】
図10は、半導体メモリ800のメモリコントローラ801のハードウェアダイアグラムである。
【0198】
以下、本メモリコントローラと、図4を参照して既に述べたメモリコントローラとの違いを強調して説明する。
【0199】
制御ユニット1010は、更に、シフトユニット1012、チャレンジレジスタ1011、そして、インデックスレジスタ「j」1013を備えている。
【0200】
加えて、メモリコントローラ108は、更に、ツリーテーブル203と暗号化ヘッダ210とを格納したPROMユニット802を備えている。PROMユニットは、メモリコントローラ801、8ビットデータバス、及び、VCC接続と、クロック接続と、PROMチップセレクト(PROM CS)接続と、そして、32ビットアドレスバスとを含んでいる35ビットの制御バスと、結合されている。
【0201】
メモリコントローラは、更に、18ビットカウンタであるカウンタレジスタ1021を備えている。カウンタは、その長さを128ビットまで伸ばすため、百十の零ビット1022によってパッディングされ(padded)ている。署名カウンタ1024は、カウンタ1021の14個の最左側ビットから構成されており、他方、秘密カウンタ1023は、カウンタ1021の4個の最右側ビットから構成されている。署名インデックス215は、その長さを16ビットまで伸ばすため、零ビット1025によりパッディングされた署名カウンタ1024から構成されている。16ビットの署名インデックス215は制御ユニットと結合されており、18ビットカウンタ1021は加算器1026と結合され、そして、零ビットでパッディングされたカウンタはマルチプレクサ1033に結合されている。
【0202】
加算器1026は二つの入力を有しており、一つの8ビット入力はカウンタ1021と、そして、その第2の1ビット入力を介して、制御ユニット410と結合されている。第2の1ビット入力が制御ユニット1010により「1」に設定されると、カウンタ1021がインクリメントされる。このインクリメント動作中にオーバフローが生じた場合、1ビットのオーバフロー信号がカウンタユニット1010へ転送される。オーバフローは、カウンタ1021がその最大値、即ち、「0x3FFFF」、又は、十進法で表すと「262143」に達した時に生じることから、制御ユニット1010は、永続的休止状態に入り、そして、その後に来るメッセージを拒否する。
【0203】
如何なる特定の限定をも意図するものではないが、本実施例では、ハッシュ関数「H」は、AESと排他的OR動作により達成されるものとする。これに替えて、異なるブロック暗号器とすること、又は、「MD5」や「SHA-1」など、異なるハッシュ関数とすることもできる。
【0204】
即ち、メモリコントローラは、更に、AESエンジン803と排他的ORユニット1032を備えている。AESエンジンは、右側の平文入力と、頂上の鍵入力との、二つの128ビット入力と、そして、左側の暗号文出力である、128ビットの出力とを有している。AESエンジンは、マルチプレクサ1033、1034、1035になる構成によって、モード「0」とモード「1」と呼ばれる二つのモードの動作をサポートしている。
【0205】
モード「1」では、AESエンジンは、128ビットの秘密のシード(seed)「s」を鍵入力とし、そして、平文入力をカウンタ1021の入力とする動作「x = AESs(counter)」を行う。モード「1」を起動するため、それらの「1」とラベルが貼られた入力を選択するよう、制御ユニットがマルチプレクサ1033、1034、1035を設定する。より詳細には、マルチプレクサ1033がモード「1」に設定されると、カウンタ1021が、AESエンジンの平文入力に結合される。マルチプレクサ1034がモード「1」に設定されると、シード1041が、AESエンジンの鍵入力に結合される。そして、マルチプレクサ1035がモード「1」に設定されると、排他的ORユニット1032がオール零レジスタ(all-zero register)1043に結合される。その結果、「x(+)0 =x」であることから、出力レジスタ1044が、動作「AESs(counter)」の結果を格納することとなる。
【0206】
モード「0」では、AESエンジンは、平文入力が初期ベクトル「IV」1042であり、そして、鍵入力が、出力レジスタ1044に格納された以前のAES動作の結果、「x」である、動作「y = AESx(IV)(+)IV」を行う。モード「0」を起動するため、マルチプレクサ1033、1034、1035は、制御ユニット1010によって、それらの「0」とラベルが貼られた入力を選択するよう、適切に構成される。マルチプレクサ1033がモード「0」に設定されると、「IV」1042がAESエンジンの平文入力に結合される。マルチプレクサ1034がモード「0」に設定されると、出力レジスタ1042がAESエンジンの鍵入力に結合される。そして、マルチプレクサ1035がモード「0」に設定されると、排他的ORユニット1032が「IV」1042と結合される。その結果、出力レジスタ1044は、動作「AESx(IV)(+)IV」の結果を格納することとなる。
【0207】
AESエンジン803の二つのモードにより、メモリコントローラは乱数「x」と共に、それらのイメージ「y=H(x)」を計算することが出来る。「x」値は、秘密値の役割を果たし、他方、「y」値は、認証プロトコルにおけるイメージ値の役割を果たすことから、不揮発性メモリ内に秘密テーブルとイメージテーブルを格納するという要求を排除することができる。加えて、本実施例の秘密鍵(private key)は、それからAESエンジンのモード「1」を利用して秘密値が取り出され、シード1041となっている。
<メモリコントローラの機能の詳細>
【0208】
図11は、メモリコントローラ801の機能の詳細を示すブロックダイアグラムである。
【0209】
メモリコントローラ801は、既に図5を参照して述べたメモリコントローラ105と同様の方法により、ゲームマシン820により送り出された「READ」メッセージと「WRITE」メッセージとを処理する。しかしながら、「READ」メッセージの場合、半導体メモリ801がPROMユニット802を更に備えていることから、以下のステップが行われる。ステップ1143では、PROMユニット102がその「PROM CS」入力を介して起動され、そして物理PROMアドレスが制御ユニット1010によって送出される。従って、PROMユニットは、1バイトのデータを、当該バイトを通信ピン110〜117を介してゲームマシン820へ送信する制御ユニットに対し、送出する。加えて、アドレスレジスタ412がインクリメントされ、そして、長さレジスタがデクリメントされる。長さレジスタ内に格納された値が零でない限りは、ステップ1143が繰り返される。
【0210】
「CHALLENGE」メッセージが処理される方法も、また、異なっている。メモリコントローラは、以下の手順を8回繰り返し、各繰り返しでは、チャレンジ1011に応じて、一つの秘密値「x’[j]」及び一つのイメージ値「y’[j+1]」を、又は、一つのイメージ値「y’[j]」及び一つの秘密値「x’[j+1]」を発生する。
【0211】
ステップ1164では、チャレンジ1011は、シフトユニット1012により、1ビットだけ右に移動される。この処理では、チャレンジの最右側ビット(LSB)がチェックされる。
【0212】
チャレンジビットが「0」であれば、メモリコントローラは、ステップ1166において、「x’[j]」と「y’[j+1]」を計算する。より詳細には、「x’[j]=AESs(counter)」、即ち、制御ユニット1010が、AESエンジン803のモード「1」を起動するように、マルチプレクサ1033、1034、1035を設定する。AESエンジンが設定された後、出力レジスタ1044は、ゲームマシン820へ送信された「x’[j]」を格納する。次に、カウンタ1021が、加算器1026を使用することによりインクリメントされ、そして、モード「1」が再び起動される。その結果、出力レジスタが「x’[j+1]」を格納する。「y’[j+1]」を計算するため、モード「0」が起動される。AESエンジンが設定された後、出力レジスタ1044は、ゲームマシンへ送信された「y’[j+1]=AESx[j+1](IV)(+)IV」を格納する。秘密「x’[j+1]」は破棄されていることから、明らかになっていないことに留意のこと。
【0213】
同様に、チャレンジビットが「1」の場合、メモリコントローラは、モード「1」を起動することにより「y’[j]」と「x’[j+1]」を計算し、モード「0」で「y’[j]」を送信し、それから、モード「0」を起動して「x’[j+1]」を送信する。同様に、秘密「x’[j]」は破棄される。
<「CHALLENGE」メッセージの処理の一例>
【0214】
以下、「CHALLENGE」メッセージの処理の一例を述べる。
【0215】
メモリコントローラ801は、二進法表現で「(11010001)」と表現されるデータペイロードと共に「CHALLENGE」メッセージを受信するものとする。更に、初期において、カウンタ1021は18ビット値「0x00010」を含んでいるものとする。より詳細には、署名インデックスは「1」であり、そして、秘密カウンタは「0」である。
【0216】
第1のチャレンジビットは「1」であることから、AESエンジンはモード「1」で起動される。従って、出力レジスタ1044は「x’[1]=AESs(0x10)」を格納する。次に、モード「0」が起動される、そして、出力レジスタが、ゲームマシン820へ送出された「y’[1]=AESx’[1](IV)(+)IV」を格納する。その後、カウンタ1021が「0x00011」にインクリメントされ、モード「1」が起動され、よって、出力レジスタ1044は、ゲームマシン820へ送出された「x’[2]=AESs(0x11)」を格納する。
【0217】
第2のチャレンジビットは「0」であり、それ故、AESエンジンは「x’[3]=AESs(0x12)」、「x’[4]=AESs(0x13)」、そして「y’[4]= AESx’[4](IV)(+)IV」を計算する。「x’[3]」と「y’[4]」が、ゲームマシン820へ送出される。同様に、第3及び第4のチャレンジビットは「0」であり、それ故、「x’[5]」、「y’[6]」、「x’[7]」、そして、「y’[8]」が発送される。この時点で、カウンタ値1021は「0x18」である。
【0218】
次のチャレンジビットは「1」、「0」、「1」、「1」であることから、メモリコントローラ801は、「y’[9]」、「x’[10]」、「x’[11]」、「y’[12]」、「y’[13]」、「x’[14]」、「y’[15]」、「x’[16]」を計算して発送する。全ての動作が完了した後は、カウンタ値1021は「0x20」である。
<セキュリティーチップ>
【0219】
図12は、ゲームマシン820のセキュリティーチップのハードウェアダイアグラムである。
【0220】
セキュリティーチップ821は、スマートカードマイクロコントローラ(smartcard microcontroller)として、又は、TPMチップ(trusted computing module)である、一般的には、耐タンパー性を持つチップ(tamper-resistant chip)として実現することができる。本実施例では、セキュリティーチップは、三つの異なるメモリユニット、即ち、ROMユニット1210、EEPROMユニット1220、そして、RAMユニット1230を備えている。
【0221】
ROMユニット1210は、「OS」1211でもよいプログラムと、例えば、AES暗号化又はRSA動作のような低レベルの安全機能性をインターフェイス接続する高レベル機能1212と、図13を参照しながら詳細に述べられる認証プロトコル1213のプログラムと、そして、パターンマッチングプログラム1214とを格納している。これらのプログラムは、全ての商品化されたゲームマシンにとって同じであってもよいことから、ROMユニット1210はマスクROM技術によって実現することができる。
【0222】
他方、EEPROMユニット1220は、もし必要であれば修正され、カスタマイズされ、又は、アップデートが可能なデータを格納する。より詳細には、ファームハッシュ1221、ルート公開鍵1222、解読鍵1223、パターンファイル1224、ブラックリスト1225、そして、パッチ1226を格納する。ファームハッシュ1221は、ゲームマシン820のフラッシュメモリユニット142内に格納されたファームウェア161のハッシュ値である。ルート公開鍵1222は、半導体メモリ800がゲームマシン820と結合した場合に、ルート証明書212を有効にするために使用された公開鍵である。解読鍵1223は、半導体メモリ800がゲームマシン820と結合した場合に、ゲーム鍵222を解読するために使用可能な鍵である。パターンファイル1224は、部分的に悪意のあるコードやプログラムバグのリストを格納する。ブラックリスト1225は、危殆化されたことが知られた公開鍵のリストである。最後に、パッチ1226は、ゲームにおける既知のバグをパッチするための部分的なコードのリストからなる。
【0223】
RAMユニット1230は、プログラムの実行中に発生したテンポラリデータや変数1231を格納する。
【0224】
セキュリティーチップ821は、また、三つの演算ユニット、即ち、CPU1241、AESエンジン1242、RSAエンジン1243と、そして、乱数発生器(RNG)1245を含んでいる。
【0225】
中央演算ユニット(CPU)1241はマイクロプロセッサであり、例えば、プログラムのように、ROMユニット1210内に格納されたものを、中間結果のためのRAMユニット1230と、そして、カスタマイズされたパラメータを処理し又は長時間結果を格納するためのEEPROMユニットとを利用して実行する。
【0226】
AESエンジン1242は、暗号化に特化されたハードウェアコプロセッサである。コプロセッサは、ビットストリング「A」を鍵としてビットストリング「B」の暗号化を参照するAES演算「AESA(B)」を、高速かつ低電力消費で、実行することができる。CPU1241と接続して使用した場合、AESエンジン1243は、データのハッシュを計算する(hashing data)などのより高度な演算は実現可能となる。例えば、128ビットの初期ベクトル「IV」と256ビットのメッセージ「x=x[1]||x[2]」とが与えられると、128ビットのハッシュ値「y=H(x)」が、以下の二つのステップにおいて計算され、即ち、「y’=AESx[1](IV)(+)IV」と「y=AESx[2](y’)(+)y’」、ここでは、AES暗号化は、AESエンジン1242により行われ、排他的OR「(+)」は、CPU1241により行われ、そして、中間結果「y’」はRAM1230内に格納される。
【0227】
RSAエンジン1243は、RSA演算に特化したハードウェアコプロセッサである。特に、RSAエンジン1243は、EEPROM1220内に格納されたルート公開鍵1222を使って、ルート証明書212、ゲーム証明書213、又は、アップデートデータ941内に封入されているRSA署名の検証が可能である。
【0228】
乱数発生器1245は、チャレンジとして使用できる乱数を発生する。
【0229】
最後に、セキュリティーチップ821内のユニットは内部バス1251に結合されており、セキュリティーチップ821は、バス151により、ゲームマシン820の他の電子コンポーネントに結合されている。他のコンポーネントとの通信は、入/出力(I/O)インターフェイス1244により管理されている。
<検証プロトコル>
【0230】
図13は、ゲームマシン820によって行われる検証プロトコル(verification protocol)の機能詳細を表すブロックダイアグラムである。如何なる特定の限定をも意図するものではないが、この実施例では、検証プロトコルは、セキュリティーチップ821のROMユニット1210内に格納されたソフトウェアプログラムとして実現され、AESエンジン1242とRSAエンジン1243を使って、CPU1241により実行されるものとする。
【0231】
以下に述べる検証プロトコルは、既に図1を参照して述べたものとは、幾つかの点で異なっている。相違点の一つは、どのようにして、「CHALLENGE」メッセージを半導体メモリ800に送信した後に受信されたデータが処理されるかである。
【0232】
ステップ1312では、ゲームマシンが、半導体メモリからの16個の値、「s[1]」…「s[16]」を受信する。最初、インデックス「j」は「1」に、そして、ビットストリング「H1」は、空のビットストリングに設定されている。次に、ステップ1321〜1326が8回繰り返される。
【0233】
ステップ1322では、セキュリティーチップ821のCPU1241によって行われる右移動動作を利用して、チャレンジの最右側のビットが抽出される。このチャレンジビット(LSB)が「0」であれば、受信された「s[j]」は「x’[j]」である筈であり、そして、「s[j+1]」は「y’[j+1]」である筈である。それ故、ステップ1326では、AESエンジン1242とCPU1241とを使って、ハッシュ値「y’[j]」が「y’[j]=AESs[j](IV)(+)IV」として計算される。本実施例で使われるハッシュ関数「H」の定義によれば、以下の等式が満足されることに留意のこと。
【数15】
【0234】
その後、ビットストリング「y’[j]」と「s[j+1]」とが「H1」に添えられ、そして、カウンタ「j」が二つインクリメントされる。
【0235】
同様にして、チャレンジビットが「1」であれば、受信された「s[j]」は「y’[j]」であり、他方、「s[j+1]」であれば「x’[j+1]」である。即ち、ステップ1236では、「y’[j+1]」が「AESs[j+1](IV)(+)IV = H(x’[j+1])」として計算される。そして、ビットストリング「s[j]」と「y’[j+1]」が「H1」に添えられ、そして、カウンタ「j」が二つインクリメントされる。
【0236】
上述のステップを8回繰り返した後、そして、受信されたデータ「s[1],…,s[16]」が本物であるとすると、ビットストリング「H1」は「y’[1]||y’[2]||」…||y’[16]」と等しい筈である。ステップ1341では、AESエンジン1242を使用して、「H1」のハッシュ値が計算される。ステップ641、642、1343〜1346は、PROM802内に配置されたツリーテーブル203からツリーデータを抽出することを狙ったものである。それらのステップは、ツリーテーブル203の論理アドレスが「0x0」から開始することから、アドレス「A」がステップ1343においては「(j-2)*0x10」として、そして、ステップ1343においては「j*0x10」として、簡単に、CPU1241により計算されるということを除き、基本的には、既に図6を参照して述べたステップと同様である。ステップ1344では、ハッシュ値「H(H2||H1)」が、二つのステップにより、CPU1241とAESエンジン1242とを使って、以下のように計算される、最初に、「H1’ = AESH2(IV)(+)IV」が計算され、そして、「H1 = AESH1(H1’)(+)H1’」が計算される。
【0237】
ステップ641、642、1343、及び1346を14回繰り返した後、そして、全ての受信されたデータが本物であるとすると、セキュリティーチップは、ツリーテーブル「t[1]」321の先頭を再計算することができ、そして検証は成功となる。もしも再計算されたデータがツリーテーブルの先頭と異なっていれば、検証は失敗となる。
<通信プロトコル>
【0238】
図14は、ゲームマシン120と半導体メモリ100との間の通信プロトコルのブロックダイアグラムである。
【0239】
図14の左側のブロックは、半導体メモリ800により実行される作動であり、他方、右側のブロックは、ゲームマシン820により実行される作動である。中央のブロックは、ゲームマシンと半導体メモリとの間で交わされるメッセージである。
【0240】
先に図7を参照して述べた通信プロトコルは、本実施例の通信プロトコルとは、幾つかの点で異なっている。これらの相異は、半導体メモリ800がAESエンジン1242を備えていること、そして、ゲームマシン820がセキュリティーチップ821を備えているという事実に起因するものである。これらのユニットのおかげで、通信プロトコルは、以下のような方法により強化できる。
【0241】
ゲームマシン820がスイッチ139により給電されると、ファームウェア161がRAMユニット141にロードされ、そして、CPU143によって実行される前に、セキュリティーチップ821が、ステップ1401と1402においてその完全性を検証する。より詳細には、ステップ1401において、ファームウェアのハッシュ値が、AESエンジン1242とセキュリティーチップ1241のCPUを使って計算される。このハッシュ値は、セキュリティーチップ821のEEPROMユニット1220内に格納されたファームウェア1221のハッシュ値と比較される。もしも、それらが一致しなければ、ファームウェアは非合法に修正されていることを意味し、この場合、ゲームマシンはスタートとしない。もしもファームウェアがその完全性のチェックを通過すれば、RAM141内にロードされ、そして、CPU143によって実行される。
【0242】
次に、暗号化ヘッダ210が、半導体メモリ800から入手される。暗号化ヘッダの有効性は、セキュリティーチップにより、以下のようにしてチェックされる。
− システムパラメータ211がサポートされていることを、セキュリティーチップが検証する。
− ルート公開鍵1222により、ルート証明書212を検証する。証明書内に封入された署名がRSAエンジン1243を使用して検証され、それにより、ゲーム公開鍵214の有効性を断定する。
− ルート証明書212内に封入されたゲーム公開鍵によってゲーム証明書213を検証する。ゲーム証明書内に封入されている署名は、RSAエンジン1243を使用して検証され、これによって、ゲーム公開鍵214の有効性を断定する。
− 公開鍵214の使用が、危殆化された公開鍵のブラックリスト1225内に存在しないことをチェックする。
【0243】
暗号化ヘッダ210が有効であれば、先に図10、11、及び、12を参照して述べた認証プロトコルが、ステップ1411で実行される。成功裡の結果の後、ステップ1413では、AESエンジン1242により、解読鍵1223を使ってゲーム鍵222が解読され、そして、AESエンジン1242によって、解読されたゲーム鍵222を使って、プログラムのエントリポイント223が解読される。
【0244】
ゲームプログラムの最初のセクタ941が、データのアップデートのために保存されていることを思い出すこと。ステップ1421では、第1のセクタ941とそのハッシュ値224が、AESエンジン1242により、ゲーム鍵222を使って解読される。ステップ1422では、第1のセクタ941の完全性が、セキュリティーチップ821によって、以下のように検証される。
− 第1のセクタのハッシュ値がAESエンジン1242を使って計算され、そして、解読されたハッシュ値と比較される。等しくない場合には、データのアップデートが非合法的に修正されている。
− 第1のセクタは、RSAエンジン1243と、ルート公開鍵1222とを使って検証したデジタル署名とを含んでいる。デジタル署名の有効性が、データアップデート914の完全性を保障する。
【0245】
しかしながら、ファームウェア161及び/又はセキュリティーチップ821内に格納されたデータが、既にアップデートされていることもある。この場合、データアップデート941は廃棄される。アップデートが要求されると、ステップ1424において実行され、即ち、ファームウェアがより新たなバージョンに取り替えられ、そのハッシュ値1221がEEPROM1220内に格納され、そして、アップデートされたパターンファイル1224又はアップデートされたブラックリスト1225など、追加データがEEPROM1220内にコピーされる。
【0246】
次に、メインプログラムが半導体メモリから転送される。ゲームプログラムは暗号化されていることから、ステップ1433では、AESエンジン1242により、ゲーム鍵222を使ってゲームプログラムが解読される。同様にして、ゲームヘッダ220内に格納したセクタのハッシュ値が解読される。転送されたセクタからのデータを有効にするために、ステップ1434においては、以下のタスクが、セキュリティーチップ821によって行われる。
− セクタのハッシュ値が、AESエンジンを使用することによって計算される。計算されたハッシュ値が、ゲームヘッダ220内に格納されたハッシュ値と異なっていれば、セクタデータは非合法的に修正されている。
− セクタデータは、デジタル署名を含んでおり、このデジタル署名が、ルート公開鍵1222とRSAエンジン1243を用いて検証される。検証が成功の場合には、セクタの完全性が保障される。
− 解読されたセクタはパターンファイル1224の要素と比較される。もしも一致しているとされれば、セクタデータは、バグ又は悪意のプログラムを含んでいる。この場合、セキュリティーチップ821は、パッチ1126内の訂正された部分的なプログラムを探す。パッチ(replacement)も見つからなければ、プログラムの実行が停止される。
【0247】
もしもセクタの完全性が断定されたとすれば、ステップ735において、セクタ内に格納されたプログラムがCPU143により実行される。半導体メモリ800からもっと多くのデータが必要であれば、上述したステップが繰り返される。
【0248】
さて、好適な実施例によって得られる効果について、以下に、簡単に述べる。
【0249】
秘密鍵(private key)を知らなくとも、チャレンジの公開鍵やデジタル署名を利用し、コンピュータマシンは、原品である格納媒体を偽造品から区別することができる。更に、公開鍵を利用して、デジタルデータの有効性をチェックできることから、非合法プログラムを挿入することはできない。その結果、本発明は、デジタルデータの認証されていないコピーの利用を防止する。
【0250】
本発明になる幾つかの実施例について示しかつ述べたが、開示された実施例は、本発明の範囲から逸脱することなく変更や修正がされうるものであることが理解されよう。それ故、ここに示され、かつ、述べられた詳細によって縛られることはなく、しかしながら、添えられた請求項の範囲内に入ることとなる、かかる変更や修正の全てがカバーされる。
【符号の説明】
【0251】
100…半導体メモリ、不揮発性のメモリユニット…102、読み出し専用不揮発性のメモリユニット…103、104…バス、メモリコントローラ…105、ピン…106〜117、120…ゲームマシン、122…方向性パッド、123…ボタン、124…液晶スクリーン、125…スピーカ、138…空洞部、139…オン/オフスイッチ、126〜137…コンタクト、141…RAM、142…フラッシュメモリユニット、143…CPU、入出力インターフェイスユニット…144、145…ビデオコントローラ、146…サウンドコントローラ、147…入力制御ユニット148…電池、161…ファームウェア、162…ルート公開鍵、163…解読鍵。
【特許請求の範囲】
【請求項1】
コンピュータマシンと結合されるための半導体メモリであって、
第1のデータ、第1の鍵、そして、第2の鍵を格納し、前記第1の鍵は、前記第1のデータと前記第2の鍵とから導き出された所定の値であるところの不揮発性メモリユニットと、そして、
コンピュータマシンからのチャレンジを受信し、そして、コンピュータマシンへ第2のデータを転送し、第2のデータが、前記第2の鍵と前記チャレンジとから導き出されるところのメモリコントローラとを備えていることを特徴とする半導体メモリ。
【請求項2】
請求項1に記載した半導体メモリにおいて、前記第2の鍵は、複数の秘密値を有しており、そして、前記第2のデータは、前記秘密値の選択を含んでいることを特徴とする半導体メモリ。
【請求項3】
請求項2に記載した半導体メモリにおいて、前記メモリコントローラは、更に、
秘密値の範囲を選択するための第1の選択ユニットと、
前記範囲内の前記秘密値の半分を選択するための第2の選択ユニットとを備えており、前記第2のデータは、前記第2の選択ユニットにより選択された前記秘密値を含んでいることを特徴とする半導体メモリ。
【請求項4】
請求項3に記載した半導体メモリにおいて、前記不揮発性メモリユニットは、更に、
前記秘密値の所定のハッシュ値である複数のイメージ値と、
第1の部分と第2の部分とを備えた複数のツリー値とを備えており、そこでは、
前記第1の部分でのツリー値は、複数のイメージ値の連結の所定のハッシュ値であり、そして、
前記第2の部分でのツリー値は、複数のツリー値の連結の所定のハッシュ値であることを特徴とする半導体メモリ。
【請求項5】
請求項4に記載した半導体メモリにおいて、前記第2のデータは、更に、イメージ値の選択と、そして、ツリー値の選択とを含んでいることを特徴とする半導体メモリ。
【請求項6】
請求項5に記載した半導体メモリにおいて、前記第1の鍵はツリー値の連結のハッシュ値であり、そして、前記第2のハッシュ値は、前記第1のデータから導き出された所定のハッシュ値であることを特徴とする半導体メモリ。
【請求項7】
請求項1に記載した半導体メモリであって、更に、ハッシュ機能ユニットを備えていることを特徴とする半導体メモリ。
【請求項8】
請求項7に記載した半導体メモリであって、更に、
前記ハッシュ機能ユニットにより前記第2の鍵を処理し、もって、第1の秘密値を発生する秘密値発生ユニットと、そして、
前記ハッシュ機能ユニットにより前記第2の鍵を処理して、第2の秘密値を発生し、前記第2の秘密値を前記ハッシュ機能ユニットにより処理してイメージ値を発生するイメージ発生ユニットとを備えたことを特徴とする半導体メモリ。
【請求項9】
請求項8に記載した半導体メモリであって、更に、前記チャレンジの少なくとも一のビットに対応して、前記秘密値発生器か、前記イメージ発生器かの、何れか一方を作動する作動ユニットを備えていることを特徴とする半導体メモリ。
【請求項10】
請求項9に記載した半導体メモリであって、更に、前記作動ユニットを繰り返して、一連の秘密値とイメージ値を発生するループ制御ユニットを備えており、前記第2のデータが、前記一連の秘密値とイメージ値を備えていることを特徴とする半導体メモリ。
【請求項11】
半導体メモリと結合するためのコンピュータマシンであって、
CPUと、
第1の鍵を格納している不揮発性メモリユニットと、
前記半導体メモリからのデータを受信するための入出力インターフェイスとを備えているものにおいて、前記半導体メモリからのデータは、
第2の鍵と、
第1のデータと、そして、
第2のデータとを含んでおり、そして、前記コンピュータマシンは、更に、
前記第2の鍵を検証するあめの署名検証ユニットと、
チャレンジを発生するための乱数発生器と、
前記第1と第2のデータを処理するためのハッシュ関数ユニットと、そして、
前記ハッシュ関数ユニットによって処理されたデータと第2の鍵を比較するための比較ユニットを備えており、もって、第1と第2のデータの完全性を確立することを特徴とするコンピュータマシン。
【請求項12】
請求項11に記載したコンピュータマシンにおいて、前記半導体メモリからのデータは、前記署名検証ユニットによって検証されるべき少なくとも一の証明書を含んでおり、そして、
少なくとも一つ以上の証明書は、前記第2の鍵のデジタル署名を含んでおり、そして、
少なくとも一つ以上の証明書は、前記第1の鍵に検証されるデジタル署名を含んでいることを特徴とするコンピュータマシン。
【請求項13】
請求項11に記載したコンピュータマシンであって、更に、
前記不揮発性メモリ内に格納された複数の危殆化された鍵と、そして、
前記危殆化複数の鍵を前記第2の鍵と比較し、もって、前記第2の鍵が危殆化されていないことを確認する比較ユニットとを備えていることを特徴とするコンピュータマシン。
【請求項14】
請求項13に記載したコンピュータマシンにおいて、前記不揮発性メモリは、更に、
不安全なデータの複数のパターンと、
不安全なデータのための複数のパッチと、
半導体メモリからのデータを前記不安全なデータのパターンと比較し、もって、当該データが安全に処理され得たことを確かめる第3の比較ユニットと、そして、
不安全なデータをパッチで置き換える置き換えユニットとを備えていることを特徴とするコンピュータマシン。
【請求項15】
請求項11に記載したコンピュータマシンであって、更に、セキュリティーチップを備えており、前記不揮発性メモリ、署名検証ユニット、乱数発生器、そして、ハッシュ関数ユニットが、前記セキュリティーチップのハードウェアユニットであることを特徴とするコンピュータマシン。
【請求項16】
データ処理方法であって、
半導体メモリからの第1の鍵を受信するステップと、
前記半導体メモリへチャレンジを送信するステップと、
前記半導体メモリから第1のデータを受信するステップと、
前記チャレンジと前記第1の鍵により前記第1のデータの完全性をチェックするステップと、
前記半導体メモリから第2のデータを受信するステップと、
前記第1の鍵により前記第2のデータの完全性をチェックするステップと、そして、
前記第2のデータを処理するステップとを備えたことを特徴とするデータ処理方法。
【請求項17】
請求項16に記載したデータ処理方法において、前記第1のデータを受信するステップは、
複数の秘密値を受信するステップと、
複数のイメージ値を受信するステップと、そして、
複数のツリー値を受信するステップとを備えていることを特徴とするデータ処理方法。
【請求項18】
請求項17に記載したデータ処理方法において、前記第1のデータの完全性をチェックするステップは、
前記受信した秘密値をハッシュ関数により処理し、もって、複数のイメージ値を算出するステップと、
前記受信したイメージ値と前記計算したイメージ値とをハッシュ関数により処理し、もって、第1のツリー値を算出するステップと、そして、
前記第1の計算されたツリー値と前記受信されたツリー値とをハッシュ関数により処理し、もって、第2のツリー値を算出するステップとを備えていることを特徴とするデータ処理方法。
【請求項19】
請求項18に記載したデータ処理方法において、前記第2のデータの完全性をチェックするステップは、
前記第2のデータをハッシュ関数により処理し、もって、第1のハッシュ値を算出するステップと、
前記第1のデータと第2の算出されたツリー値とをハッシュ関数により処理し、もって、第2のハッシュ値を算出するステップと、そして、
前記第2のハッシュ値を前記第1の鍵と比較するステップとを備えていることを特徴とするデータ処理方法。
【請求項20】
請求項16に記載したデータ処理方法であって、更に、
少なくとも一の証明書を受信するステップと、そして、
少なくとも一の証明書を第2の鍵により検証し、もって、前記第1の鍵を検証するステップとを備えていることを特徴とするデータ処理方法。
【請求項21】
請求項20に記載したデータ処理方法であって、更に、前記第1の鍵を、危殆化された鍵のリストと比較するステップを備えていることを特徴とするデータ処理方法。
【請求項22】
請求項20に記載したデータ処理方法において、前記第2のデータの完全性をチェックするステップは、更に、
前記第2のデータを不安全なデジタルデータのパターンと比較するステップと、そして、
不安全なデータをパッチで置き換えるステップを備えていることを特徴とするデータ処理方法。
【請求項23】
請求項20に記載したデータ処理方法であって、更に、
ファームウェアプログラムをハッシュ関数で処理し、もって、ハッシュ値を得るステップと、
前記ハッシュ値を所定の値と比較するステップと、そして、
前記ファームウェアプログラムを実行するステップを備えていることを特徴とするデータ処理方法。
【請求項24】
請求項23に記載したデータ処理方法において、前記第2のデータを処理するステップは、
ファームウェアのアップデートとそのデジタル署名とを抽出するステップと、
前記デジタル署名を第2の鍵により検証するステップと、そして、
前記ファームウェアプログラムを、前記ファームウェアのアップデートで取り換えるステップを備えていることを特徴とするデータ処理方法。
【請求項25】
データ処理方法であって、
第1の鍵とその証明書を送信するステップと、
少なくとも一のデータのハッシュ関数を送信するステップと、
チャレンジを受信するステップと、
複数の秘密値を送信するステップと、
複数のイメージ値を送信するステップと、
複数のツリー値を送信するステップと、そして、
前記データを送信するステップを備えていることを特徴とするデータ処理方法。
【請求項26】
請求項25に記載したデータ処理方法であって、更に、
秘密値の範囲を選択するステップと、そして、
前記範囲内における前記秘密値の半分を選択するステップを備えていることを特徴とするデータ処理方法。
【請求項27】
請求項25に記載したデータ処理方法であって、更に、
シード値をハッシュ関数により処理し、もって、第1の秘密値を得るステップと、
前記シード値をハッシュ関数により処理し、もって、第2の秘密値を得るステップと、
前記第1と第2の秘密値の一方を、前記チャレンジの少なくとも一のビットに従って選択するステップと、
前記選択された秘密値をハッシュ関数によって処理し、もって、イメージ値を得るステップと、そして、
前記選択した秘密値を廃棄するステップを備えていることを特徴とするデータ処理方法。
【請求項28】
請求項27に記載したデータ処理方法において、前記シード値を処理する前記ステップ、秘密を選択する前記ステップ、前記選択した秘密を処理するステップ、そして、前記選択した秘密を廃棄する前記ステップが繰り返され、もって、一連の秘密値と一連のイメージ値とを得ることを特徴とするデータ処理方法。
【請求項1】
コンピュータマシンと結合されるための半導体メモリであって、
第1のデータ、第1の鍵、そして、第2の鍵を格納し、前記第1の鍵は、前記第1のデータと前記第2の鍵とから導き出された所定の値であるところの不揮発性メモリユニットと、そして、
コンピュータマシンからのチャレンジを受信し、そして、コンピュータマシンへ第2のデータを転送し、第2のデータが、前記第2の鍵と前記チャレンジとから導き出されるところのメモリコントローラとを備えていることを特徴とする半導体メモリ。
【請求項2】
請求項1に記載した半導体メモリにおいて、前記第2の鍵は、複数の秘密値を有しており、そして、前記第2のデータは、前記秘密値の選択を含んでいることを特徴とする半導体メモリ。
【請求項3】
請求項2に記載した半導体メモリにおいて、前記メモリコントローラは、更に、
秘密値の範囲を選択するための第1の選択ユニットと、
前記範囲内の前記秘密値の半分を選択するための第2の選択ユニットとを備えており、前記第2のデータは、前記第2の選択ユニットにより選択された前記秘密値を含んでいることを特徴とする半導体メモリ。
【請求項4】
請求項3に記載した半導体メモリにおいて、前記不揮発性メモリユニットは、更に、
前記秘密値の所定のハッシュ値である複数のイメージ値と、
第1の部分と第2の部分とを備えた複数のツリー値とを備えており、そこでは、
前記第1の部分でのツリー値は、複数のイメージ値の連結の所定のハッシュ値であり、そして、
前記第2の部分でのツリー値は、複数のツリー値の連結の所定のハッシュ値であることを特徴とする半導体メモリ。
【請求項5】
請求項4に記載した半導体メモリにおいて、前記第2のデータは、更に、イメージ値の選択と、そして、ツリー値の選択とを含んでいることを特徴とする半導体メモリ。
【請求項6】
請求項5に記載した半導体メモリにおいて、前記第1の鍵はツリー値の連結のハッシュ値であり、そして、前記第2のハッシュ値は、前記第1のデータから導き出された所定のハッシュ値であることを特徴とする半導体メモリ。
【請求項7】
請求項1に記載した半導体メモリであって、更に、ハッシュ機能ユニットを備えていることを特徴とする半導体メモリ。
【請求項8】
請求項7に記載した半導体メモリであって、更に、
前記ハッシュ機能ユニットにより前記第2の鍵を処理し、もって、第1の秘密値を発生する秘密値発生ユニットと、そして、
前記ハッシュ機能ユニットにより前記第2の鍵を処理して、第2の秘密値を発生し、前記第2の秘密値を前記ハッシュ機能ユニットにより処理してイメージ値を発生するイメージ発生ユニットとを備えたことを特徴とする半導体メモリ。
【請求項9】
請求項8に記載した半導体メモリであって、更に、前記チャレンジの少なくとも一のビットに対応して、前記秘密値発生器か、前記イメージ発生器かの、何れか一方を作動する作動ユニットを備えていることを特徴とする半導体メモリ。
【請求項10】
請求項9に記載した半導体メモリであって、更に、前記作動ユニットを繰り返して、一連の秘密値とイメージ値を発生するループ制御ユニットを備えており、前記第2のデータが、前記一連の秘密値とイメージ値を備えていることを特徴とする半導体メモリ。
【請求項11】
半導体メモリと結合するためのコンピュータマシンであって、
CPUと、
第1の鍵を格納している不揮発性メモリユニットと、
前記半導体メモリからのデータを受信するための入出力インターフェイスとを備えているものにおいて、前記半導体メモリからのデータは、
第2の鍵と、
第1のデータと、そして、
第2のデータとを含んでおり、そして、前記コンピュータマシンは、更に、
前記第2の鍵を検証するあめの署名検証ユニットと、
チャレンジを発生するための乱数発生器と、
前記第1と第2のデータを処理するためのハッシュ関数ユニットと、そして、
前記ハッシュ関数ユニットによって処理されたデータと第2の鍵を比較するための比較ユニットを備えており、もって、第1と第2のデータの完全性を確立することを特徴とするコンピュータマシン。
【請求項12】
請求項11に記載したコンピュータマシンにおいて、前記半導体メモリからのデータは、前記署名検証ユニットによって検証されるべき少なくとも一の証明書を含んでおり、そして、
少なくとも一つ以上の証明書は、前記第2の鍵のデジタル署名を含んでおり、そして、
少なくとも一つ以上の証明書は、前記第1の鍵に検証されるデジタル署名を含んでいることを特徴とするコンピュータマシン。
【請求項13】
請求項11に記載したコンピュータマシンであって、更に、
前記不揮発性メモリ内に格納された複数の危殆化された鍵と、そして、
前記危殆化複数の鍵を前記第2の鍵と比較し、もって、前記第2の鍵が危殆化されていないことを確認する比較ユニットとを備えていることを特徴とするコンピュータマシン。
【請求項14】
請求項13に記載したコンピュータマシンにおいて、前記不揮発性メモリは、更に、
不安全なデータの複数のパターンと、
不安全なデータのための複数のパッチと、
半導体メモリからのデータを前記不安全なデータのパターンと比較し、もって、当該データが安全に処理され得たことを確かめる第3の比較ユニットと、そして、
不安全なデータをパッチで置き換える置き換えユニットとを備えていることを特徴とするコンピュータマシン。
【請求項15】
請求項11に記載したコンピュータマシンであって、更に、セキュリティーチップを備えており、前記不揮発性メモリ、署名検証ユニット、乱数発生器、そして、ハッシュ関数ユニットが、前記セキュリティーチップのハードウェアユニットであることを特徴とするコンピュータマシン。
【請求項16】
データ処理方法であって、
半導体メモリからの第1の鍵を受信するステップと、
前記半導体メモリへチャレンジを送信するステップと、
前記半導体メモリから第1のデータを受信するステップと、
前記チャレンジと前記第1の鍵により前記第1のデータの完全性をチェックするステップと、
前記半導体メモリから第2のデータを受信するステップと、
前記第1の鍵により前記第2のデータの完全性をチェックするステップと、そして、
前記第2のデータを処理するステップとを備えたことを特徴とするデータ処理方法。
【請求項17】
請求項16に記載したデータ処理方法において、前記第1のデータを受信するステップは、
複数の秘密値を受信するステップと、
複数のイメージ値を受信するステップと、そして、
複数のツリー値を受信するステップとを備えていることを特徴とするデータ処理方法。
【請求項18】
請求項17に記載したデータ処理方法において、前記第1のデータの完全性をチェックするステップは、
前記受信した秘密値をハッシュ関数により処理し、もって、複数のイメージ値を算出するステップと、
前記受信したイメージ値と前記計算したイメージ値とをハッシュ関数により処理し、もって、第1のツリー値を算出するステップと、そして、
前記第1の計算されたツリー値と前記受信されたツリー値とをハッシュ関数により処理し、もって、第2のツリー値を算出するステップとを備えていることを特徴とするデータ処理方法。
【請求項19】
請求項18に記載したデータ処理方法において、前記第2のデータの完全性をチェックするステップは、
前記第2のデータをハッシュ関数により処理し、もって、第1のハッシュ値を算出するステップと、
前記第1のデータと第2の算出されたツリー値とをハッシュ関数により処理し、もって、第2のハッシュ値を算出するステップと、そして、
前記第2のハッシュ値を前記第1の鍵と比較するステップとを備えていることを特徴とするデータ処理方法。
【請求項20】
請求項16に記載したデータ処理方法であって、更に、
少なくとも一の証明書を受信するステップと、そして、
少なくとも一の証明書を第2の鍵により検証し、もって、前記第1の鍵を検証するステップとを備えていることを特徴とするデータ処理方法。
【請求項21】
請求項20に記載したデータ処理方法であって、更に、前記第1の鍵を、危殆化された鍵のリストと比較するステップを備えていることを特徴とするデータ処理方法。
【請求項22】
請求項20に記載したデータ処理方法において、前記第2のデータの完全性をチェックするステップは、更に、
前記第2のデータを不安全なデジタルデータのパターンと比較するステップと、そして、
不安全なデータをパッチで置き換えるステップを備えていることを特徴とするデータ処理方法。
【請求項23】
請求項20に記載したデータ処理方法であって、更に、
ファームウェアプログラムをハッシュ関数で処理し、もって、ハッシュ値を得るステップと、
前記ハッシュ値を所定の値と比較するステップと、そして、
前記ファームウェアプログラムを実行するステップを備えていることを特徴とするデータ処理方法。
【請求項24】
請求項23に記載したデータ処理方法において、前記第2のデータを処理するステップは、
ファームウェアのアップデートとそのデジタル署名とを抽出するステップと、
前記デジタル署名を第2の鍵により検証するステップと、そして、
前記ファームウェアプログラムを、前記ファームウェアのアップデートで取り換えるステップを備えていることを特徴とするデータ処理方法。
【請求項25】
データ処理方法であって、
第1の鍵とその証明書を送信するステップと、
少なくとも一のデータのハッシュ関数を送信するステップと、
チャレンジを受信するステップと、
複数の秘密値を送信するステップと、
複数のイメージ値を送信するステップと、
複数のツリー値を送信するステップと、そして、
前記データを送信するステップを備えていることを特徴とするデータ処理方法。
【請求項26】
請求項25に記載したデータ処理方法であって、更に、
秘密値の範囲を選択するステップと、そして、
前記範囲内における前記秘密値の半分を選択するステップを備えていることを特徴とするデータ処理方法。
【請求項27】
請求項25に記載したデータ処理方法であって、更に、
シード値をハッシュ関数により処理し、もって、第1の秘密値を得るステップと、
前記シード値をハッシュ関数により処理し、もって、第2の秘密値を得るステップと、
前記第1と第2の秘密値の一方を、前記チャレンジの少なくとも一のビットに従って選択するステップと、
前記選択された秘密値をハッシュ関数によって処理し、もって、イメージ値を得るステップと、そして、
前記選択した秘密値を廃棄するステップを備えていることを特徴とするデータ処理方法。
【請求項28】
請求項27に記載したデータ処理方法において、前記シード値を処理する前記ステップ、秘密を選択する前記ステップ、前記選択した秘密を処理するステップ、そして、前記選択した秘密を廃棄する前記ステップが繰り返され、もって、一連の秘密値と一連のイメージ値とを得ることを特徴とするデータ処理方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【公開番号】特開2010−226276(P2010−226276A)
【公開日】平成22年10月7日(2010.10.7)
【国際特許分類】
【外国語出願】
【出願番号】特願2009−69435(P2009−69435)
【出願日】平成21年3月23日(2009.3.23)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
【公開日】平成22年10月7日(2010.10.7)
【国際特許分類】
【出願番号】特願2009−69435(P2009−69435)
【出願日】平成21年3月23日(2009.3.23)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
[ Back to top ]