(57)【要約】【課題】非合法に再流通されたデジタルデータが処理されることを防止するためのマシンを提供すること。【解決手段】半導体格納媒体は、例えば、プログラム、イメージ、音楽、映画など、デジタルデータと、公開鍵と、秘密鍵（private key）と、そして、コンピュータマシンとの通信を操作する回路とを備えており、公開鍵が少なくともデジタルデータと秘密鍵（private key）とから導き出される。第１に、半導体格納媒体は、公開鍵をコンピュータマシンへ転送する。第２に、コンピュータマシンがチャレンジ（乱数）を格納媒体へ送る。第３に、格納媒体がチャレンジのデジタル署名を発行し、そして、それをコンピュータマシンへ送り返す。第４に、コンピュータマシンが、公開鍵を使ってデジタル署名を検証する。第５に、格納媒体がデジタルデータをコンピュータマシンへ転送する。第６に、コンピュータマシンが、公開鍵を使ってデジタルデータを検証する。【選択図】図７
2010226276.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータマシンと結合されるための半導体メモリであって、
第１のデータ、第１の鍵、そして、第２の鍵を格納し、前記第１の鍵は、前記第１のデータと前記第２の鍵とから導き出された所定の値であるところの不揮発性メモリユニットと、そして、
コンピュータマシンからのチャレンジを受信し、そして、コンピュータマシンへ第２のデータを転送し、第２のデータが、前記第２の鍵と前記チャレンジとから導き出されるところのメモリコントローラとを備えていることを特徴とする半導体メモリ。
【請求項２】
請求項１に記載した半導体メモリにおいて、前記第２の鍵は、複数の秘密値を有しており、そして、前記第２のデータは、前記秘密値の選択を含んでいることを特徴とする半導体メモリ。
【請求項３】
請求項２に記載した半導体メモリにおいて、前記メモリコントローラは、更に、
秘密値の範囲を選択するための第１の選択ユニットと、
前記範囲内の前記秘密値の半分を選択するための第２の選択ユニットとを備えており、前記第２のデータは、前記第２の選択ユニットにより選択された前記秘密値を含んでいることを特徴とする半導体メモリ。
【請求項４】
請求項３に記載した半導体メモリにおいて、前記不揮発性メモリユニットは、更に、
前記秘密値の所定のハッシュ値である複数のイメージ値と、
第１の部分と第２の部分とを備えた複数のツリー値とを備えており、そこでは、
前記第１の部分でのツリー値は、複数のイメージ値の連結の所定のハッシュ値であり、そして、
前記第２の部分でのツリー値は、複数のツリー値の連結の所定のハッシュ値であることを特徴とする半導体メモリ。
【請求項５】
請求項４に記載した半導体メモリにおいて、前記第２のデータは、更に、イメージ値の選択と、そして、ツリー値の選択とを含んでいることを特徴とする半導体メモリ。
【請求項６】
請求項５に記載した半導体メモリにおいて、前記第１の鍵はツリー値の連結のハッシュ値であり、そして、前記第２のハッシュ値は、前記第１のデータから導き出された所定のハッシュ値であることを特徴とする半導体メモリ。
【請求項７】
請求項１に記載した半導体メモリであって、更に、ハッシュ機能ユニットを備えていることを特徴とする半導体メモリ。
【請求項８】
請求項７に記載した半導体メモリであって、更に、
前記ハッシュ機能ユニットにより前記第２の鍵を処理し、もって、第１の秘密値を発生する秘密値発生ユニットと、そして、
前記ハッシュ機能ユニットにより前記第２の鍵を処理して、第２の秘密値を発生し、前記第２の秘密値を前記ハッシュ機能ユニットにより処理してイメージ値を発生するイメージ発生ユニットとを備えたことを特徴とする半導体メモリ。
【請求項９】
請求項８に記載した半導体メモリであって、更に、前記チャレンジの少なくとも一のビットに対応して、前記秘密値発生器か、前記イメージ発生器かの、何れか一方を作動する作動ユニットを備えていることを特徴とする半導体メモリ。
【請求項１０】
請求項９に記載した半導体メモリであって、更に、前記作動ユニットを繰り返して、一連の秘密値とイメージ値を発生するループ制御ユニットを備えており、前記第２のデータが、前記一連の秘密値とイメージ値を備えていることを特徴とする半導体メモリ。
【請求項１１】
半導体メモリと結合するためのコンピュータマシンであって、
ＣＰＵと、
第１の鍵を格納している不揮発性メモリユニットと、
前記半導体メモリからのデータを受信するための入出力インターフェイスとを備えているものにおいて、前記半導体メモリからのデータは、
第２の鍵と、
第１のデータと、そして、
第２のデータとを含んでおり、そして、前記コンピュータマシンは、更に、
前記第２の鍵を検証するあめの署名検証ユニットと、
チャレンジを発生するための乱数発生器と、
前記第１と第２のデータを処理するためのハッシュ関数ユニットと、そして、
前記ハッシュ関数ユニットによって処理されたデータと第２の鍵を比較するための比較ユニットを備えており、もって、第１と第２のデータの完全性を確立することを特徴とするコンピュータマシン。
【請求項１２】
請求項１１に記載したコンピュータマシンにおいて、前記半導体メモリからのデータは、前記署名検証ユニットによって検証されるべき少なくとも一の証明書を含んでおり、そして、
少なくとも一つ以上の証明書は、前記第２の鍵のデジタル署名を含んでおり、そして、
少なくとも一つ以上の証明書は、前記第１の鍵に検証されるデジタル署名を含んでいることを特徴とするコンピュータマシン。
【請求項１３】
請求項１１に記載したコンピュータマシンであって、更に、
前記不揮発性メモリ内に格納された複数の危殆化された鍵と、そして、
前記危殆化複数の鍵を前記第２の鍵と比較し、もって、前記第２の鍵が危殆化されていないことを確認する比較ユニットとを備えていることを特徴とするコンピュータマシン。
【請求項１４】
請求項１３に記載したコンピュータマシンにおいて、前記不揮発性メモリは、更に、
不安全なデータの複数のパターンと、
不安全なデータのための複数のパッチと、
半導体メモリからのデータを前記不安全なデータのパターンと比較し、もって、当該データが安全に処理され得たことを確かめる第３の比較ユニットと、そして、
不安全なデータをパッチで置き換える置き換えユニットとを備えていることを特徴とするコンピュータマシン。
【請求項１５】
請求項１１に記載したコンピュータマシンであって、更に、セキュリティーチップを備えており、前記不揮発性メモリ、署名検証ユニット、乱数発生器、そして、ハッシュ関数ユニットが、前記セキュリティーチップのハードウェアユニットであることを特徴とするコンピュータマシン。
【請求項１６】
データ処理方法であって、
半導体メモリからの第１の鍵を受信するステップと、
前記半導体メモリへチャレンジを送信するステップと、
前記半導体メモリから第１のデータを受信するステップと、
前記チャレンジと前記第１の鍵により前記第１のデータの完全性をチェックするステップと、
前記半導体メモリから第２のデータを受信するステップと、
前記第１の鍵により前記第２のデータの完全性をチェックするステップと、そして、
前記第２のデータを処理するステップとを備えたことを特徴とするデータ処理方法。
【請求項１７】
請求項１６に記載したデータ処理方法において、前記第１のデータを受信するステップは、
複数の秘密値を受信するステップと、
複数のイメージ値を受信するステップと、そして、
複数のツリー値を受信するステップとを備えていることを特徴とするデータ処理方法。
【請求項１８】
請求項１７に記載したデータ処理方法において、前記第１のデータの完全性をチェックするステップは、
前記受信した秘密値をハッシュ関数により処理し、もって、複数のイメージ値を算出するステップと、
前記受信したイメージ値と前記計算したイメージ値とをハッシュ関数により処理し、もって、第１のツリー値を算出するステップと、そして、
前記第１の計算されたツリー値と前記受信されたツリー値とをハッシュ関数により処理し、もって、第２のツリー値を算出するステップとを備えていることを特徴とするデータ処理方法。
【請求項１９】
請求項１８に記載したデータ処理方法において、前記第２のデータの完全性をチェックするステップは、
前記第２のデータをハッシュ関数により処理し、もって、第１のハッシュ値を算出するステップと、
前記第１のデータと第２の算出されたツリー値とをハッシュ関数により処理し、もって、第２のハッシュ値を算出するステップと、そして、
前記第２のハッシュ値を前記第１の鍵と比較するステップとを備えていることを特徴とするデータ処理方法。
【請求項２０】
請求項１６に記載したデータ処理方法であって、更に、
少なくとも一の証明書を受信するステップと、そして、
少なくとも一の証明書を第２の鍵により検証し、もって、前記第１の鍵を検証するステップとを備えていることを特徴とするデータ処理方法。
【請求項２１】
請求項２０に記載したデータ処理方法であって、更に、前記第１の鍵を、危殆化された鍵のリストと比較するステップを備えていることを特徴とするデータ処理方法。
【請求項２２】
請求項２０に記載したデータ処理方法において、前記第２のデータの完全性をチェックするステップは、更に、
前記第２のデータを不安全なデジタルデータのパターンと比較するステップと、そして、
不安全なデータをパッチで置き換えるステップを備えていることを特徴とするデータ処理方法。
【請求項２３】
請求項２０に記載したデータ処理方法であって、更に、
ファームウェアプログラムをハッシュ関数で処理し、もって、ハッシュ値を得るステップと、
前記ハッシュ値を所定の値と比較するステップと、そして、
前記ファームウェアプログラムを実行するステップを備えていることを特徴とするデータ処理方法。
【請求項２４】
請求項２３に記載したデータ処理方法において、前記第２のデータを処理するステップは、
ファームウェアのアップデートとそのデジタル署名とを抽出するステップと、
前記デジタル署名を第２の鍵により検証するステップと、そして、
前記ファームウェアプログラムを、前記ファームウェアのアップデートで取り換えるステップを備えていることを特徴とするデータ処理方法。
【請求項２５】
データ処理方法であって、
第１の鍵とその証明書を送信するステップと、
少なくとも一のデータのハッシュ関数を送信するステップと、
チャレンジを受信するステップと、
複数の秘密値を送信するステップと、
複数のイメージ値を送信するステップと、
複数のツリー値を送信するステップと、そして、
前記データを送信するステップを備えていることを特徴とするデータ処理方法。
【請求項２６】
請求項２５に記載したデータ処理方法であって、更に、
秘密値の範囲を選択するステップと、そして、
前記範囲内における前記秘密値の半分を選択するステップを備えていることを特徴とするデータ処理方法。
【請求項２７】
請求項２５に記載したデータ処理方法であって、更に、
シード値をハッシュ関数により処理し、もって、第１の秘密値を得るステップと、
前記シード値をハッシュ関数により処理し、もって、第２の秘密値を得るステップと、
前記第１と第２の秘密値の一方を、前記チャレンジの少なくとも一のビットに従って選択するステップと、
前記選択された秘密値をハッシュ関数によって処理し、もって、イメージ値を得るステップと、そして、
前記選択した秘密値を廃棄するステップを備えていることを特徴とするデータ処理方法。
【請求項２８】
請求項２７に記載したデータ処理方法において、前記シード値を処理する前記ステップ、秘密を選択する前記ステップ、前記選択した秘密を処理するステップ、そして、前記選択した秘密を廃棄する前記ステップが繰り返され、もって、一連の秘密値と一連のイメージ値とを得ることを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタルコンテンツを格納するための半導体メモリと、半導体メモリに格納されたデジタルコンテンツを処理するためのコンピュータマシンに関し、より詳細には、本発明は、半導体メモリと、非合法的に再流通されたデジタルコンテンツを処理することを防止するコンピュータマシンと、そして、そのための処理方法に関する。
【背景技術】
【０００２】
認証は、海賊行為、未認証のコピー、又は、偽造を取り締まるため、重要な役割を担っている。かかる認証は、例えば、パスポートの所有者を認証し、又は、反偽造を目的とした無線通信可能なチップを埋設した安全なパスポートにも採用されており、そこでは、認証用チップが製造物の出所を認証する。加えて、著作権で保護されたデジタルメディアは、海賊行為などの未認証行為を防止するため、DRM (digital right managements) として知られる認証用トークンを含んでいる。その結果、それらを支える機器（CD、DVD、メモリカード、その他の同様なメモリ装置）は、しばしば、認証メカニズムを備えている。最後に、認証は、競合者が製品をリバースエンジニアリングすることを防止し、かつ、製品を安価に大量生産するためにも有用である。例えば、競合者によって製造された再充填用（リフィル）キットや偽のカートリッジの使用を防止するため、認証用チップをプリンターカートリッジに装着することもできる。
【０００３】
認証は、被認証装置（prover）がその特定のための証拠を認証装置（verifier）に提示すプロトコルから構成されている。通常、認証装置は、被認証装置だけが解決可能な要求（チャレンジ：challenge）を送付する。この要求が共通鍵暗号化法に依っている場合には、被認証装置及び認証装置は共通の秘密鍵を共有しており、それに対し、公開鍵暗号化法（public-key cryptography）の場合には、被認証装置だけが秘密鍵を所有し、そして、どの認証装置も、被認証装置によって提供される要求の解を確認（チェック）することが出来る。
【０００４】
公開鍵暗号化システム、特に、デジタル署名は、認証の目的のために利用することができる。認証装置はランダムなメッセージを、その秘密鍵を利用してメッセージに署名した被認証装置に送信する。そして、認証装置は、秘密鍵ではなく、被認証装置の公開鍵だけを用いて署名を認証することによって、被認証装置の身元を確認することができる。公開鍵暗号化法に基づく認証システムでは、認証装置は被認証装置の秘密鍵を知らないことから、認証装置が被認証装置を装うことができないという利点を有している。加えて、公開鍵基盤を利用することにより、製品ラインの認証が、容易に可能となる。即ち、被認証装置は、要求に対してデジタル的な署名を行い、そして、その公開鍵と共に、認証局装置（certificate authority）によって署名され、被認証装置の公開鍵のデジタル署名を含んだ被認証装置の公開鍵のための証明書（certificate）を提供する。そして、認証装置は、被認証装置の身元を確認するために、両方の署名を認証することができる。かかるアプローチは、個別ユニットの公開鍵ではなく、証明のための認証手段（例えば、全製品ラインのための単一の公開鍵であり、この公開鍵は製造会社から得られる。）を格納しなければならないという認証装置への格納要求を取り除くだけではなく、簡単な取り消し機構をも含んでいる。ある被認証装置の秘密鍵が知られ、その信用が失われた場合には、当該被認証装置の公開鍵は、全ての認証装置に対してブラックリスト内へ送ってもよい。
【０００５】
最近では、ＣＤやＤＶＤなどの媒体よりもよりフレキシブルであることを理由に、半導体メモリを、ゲームやコンピュータプログラムのデジタルデータのための格納手段として利用することに、再び、関心が集まっている。特に、半導体メモリユニットは、認証、コピープロテクション、データの暗号化などの機能性を向上するため、カスタム回路を含むことができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許第６，７８２，４７７号：「プライベートコピープロテクションとオンラインセキュリティーを提供するための改ざん防止ハードウェアを使用するための方法とシステム」
【特許文献２】米国特許第６，６０６，７０７号：「半導体メモリカード」
【非特許文献】
【０００７】
【非特許文献１】ラルフ C.メルクレ：「認証されたデジタル署名」CRYPTO 1989: ２１８−２３８頁
【非特許文献２】カミーユ ヴィオム、カツユキ オケヤ、エリック ダーメン、そして、ヨハネス ブックマン：メモリトークンによる公開鍵認証、WISA 2008, LNCS 5379:８４−９８頁
【発明の概要】
【発明が解決しようとする課題】
【０００８】
他方、例えば上記の特許文献１に開示されたデジタル署名は、プログラムの完全性（integrity）を、より具体的には、プログラムが悪意の者により変更されたことをチェックするために有用である。しかしながら、デジタル的に署名されたプログラムは、そのデジタル署名を含め、コピーされ、そして、第三者によって非合法に再流通される可能性がある。実際、かかる第三者は、プログラムとデジタル署名とを含んだ格納媒体と、プログラムを走らせるコンピュータマシンとの間のチャンネルを監視することが出来る。その結果として、そのプログラムとデジタル署名とを引き出し、そして、そのコピーを非合法に再流通することが可能となる。
【０００９】
他方、認証は、ある特定の格納媒体が、例えば、ライセンスを介して、公認の配給者によって認証されていることを保障している。特許文献２は、認証のための回路を備えている半導体メモリカードを開示している。しかしながら、認証は、認証が成功した後に転送されたプログラムがその特定の格納媒体に確かに格納されていたことを保障するものではない。例えば、悪意の者は、認証を目的として合法な格納媒体を利用し、その後、悪意の又は非合法に流通されたプログラムを、合法な格納媒体に格納されたプログラムの代わりに挿入することも可能である。
【００１０】
非特許文献２は、半導体メモリカードとコンピュータマシンとを開示しており、そこでは、半導体メモリカードとコンピュータマシンとが相互に認証プロトコルに従事し、そして、解読鍵を導き出す。その結果、解読鍵によって暗号化されたデータは、半導体メモリカードに源を発するものであることが保障される。しかしながら、コンピュータマシンと半導体メモリカードは、最初に、多くのコンピュータマシンが多くの半導体メモリカードと結合され得る場合には、実用的ではなく、共通のマスター共通鍵を割り当てなければならない。
【００１１】
本発明は、上記で述べた従来技術を考慮して達成されたものである。従って、本発明の一の目的は、メモリユニットや最初に共通鍵を割り当てるコンピュータなしに、メモリユニット内に格納されたデジタルデータの完全性を確立し、もって、非合法に再流通されたデジタルデータが処理されるのを防止するためのマシンを提供することである。更に、上記及び他の目的と新規な特徴が、続く記載や添付の図面から明らかとなろう。
【課題を解決するための手段】
【００１２】
上記の目的を達成するため、本発明によれば、まず、コンピュータマシンと結合されるための半導体メモリであって、第１のデータ、第１の鍵、そして、第２の鍵を格納し、前記第１の鍵は、前記第１のデータと前記第２の鍵とから導き出された所定の値であるところの不揮発性メモリユニットと、そして、コンピュータマシンからのチャレンジを受信し、そして、コンピュータマシンへ第２のデータを転送し、第２のデータが、前記第２の鍵と前記チャレンジとから導き出されるところのメモリコントローラとを備えている半導体メモリが提供されている。
【００１３】
また、本発明によれば、上述した目的を達成するため、半導体メモリと結合するためのコンピュータマシンであって、ＣＰＵと、第１の鍵を格納している不揮発性メモリユニットと、前記半導体メモリからのデータを受信するための入出力インターフェイスとを備えているものにおいて、前記半導体メモリからのデータは、第２の鍵と、第１のデータと、そして、第２のデータとを含んでおり、そして、前記コンピュータマシンは、更に、前記第２の鍵を検証するための署名検証ユニットと、チャレンジを発生するための乱数発生器と、前記第１と第２のデータを処理するためのハッシュ関数ユニットと、そして、前記ハッシュ関数ユニットによって処理されたデータと第２の鍵を比較するための比較ユニットを備えており、もって、第１と第２のデータの完全性を確立するコンピュータマシンが提供されている。
【００１４】
更に、本発明によれば、上述した目的を達成するため、データ処理方法であって、半導体メモリからの第１の鍵を受信するステップと、前記半導体メモリへチャレンジを送信するステップと、前記半導体メモリから第１のデータを受信するステップと、前記チャレンジと前記第１の鍵により前記第１のデータの完全性をチェックするステップと、前記半導体メモリから第２のデータを受信するステップと、前記第１の鍵により前記第２のデータの完全性をチェックするステップと、そして、前記第２のデータを処理するステップを備えたデータ処理方法が提供されている。
【００１５】
更には、本発明によれば、上述した目的を達成するため、データ処理方法であって、第１の鍵とその証明書を送信するステップと、少なくとも一のデータのハッシュ関数を送信するステップと、チャレンジを受信するステップと、複数の秘密値を送信するステップと、複数のイメージ値を送信するステップと、複数のツリー値を送信するステップと、そして、前記データを送信するステップを備えているデータ処理方法が提供されている。
【００１６】
上記に加え、ここに開示された実施例の中の好適なものを以下に略述する。
半導体格納媒体は、例えば、プログラム、イメージ、音楽、映画など、デジタルデータと、公開鍵と、秘密鍵（private key）と、そして、コンピュータマシンとの通信を操作する回路とを備えており、公開鍵が少なくともデジタルデータと秘密鍵（private key）とから導き出される。第１に、半導体格納媒体は、公開鍵をコンピュータマシンへ転送する。第２に、コンピュータマシンがチャレンジ（乱数）を格納媒体へ送る。第３に、格納媒体がチャレンジのデジタル署名を発行し、そして、それをコンピュータマシンへ送り返す。第４に、コンピュータマシンが、公開鍵を使ってデジタル署名を検証する、第５に、格納媒体がデジタルデータをコンピュータマシンへ転送する。第６に、コンピュータマシンが、公開鍵を使ってデジタルデータを検証する。
【発明の効果】
【００１７】
秘密鍵（private key）を知らなくとも、チャレンジの公開鍵やデジタル署名を利用し、コンピュータマシンは、正当（合法）な格納媒体を偽造品から区別することができる。更に、公開鍵を利用して、デジタルデータの有効性をチェックできることから、非合法プログラムを挿入することはできない。その結果、本発明は、デジタルデータの認証されていないコピーの利用を防止する。
【図面の簡単な説明】
【００１８】
これら及びその他の目的、本発明の特徴や利点は、添付された以下の図面と関連させることにより、より容易に明らかとなろう。
【図１】ゲームマシンと、ゲームプログラムを格納するための半導体メモリとを備えたゲームシステムのハードウェアダイアグラムである。
【図２】半導体メモリ内の論理メモリマッピングのブロックダイアグラムである。
【図３】半導体メモリ内のＲＯＭユニットの物理アドレスマップと、ＲＯＭ領域内に格納されたデータとの機能的な関連を示すブロックダイアグラムである。
【図４】半導体メモリ内のメモリコントローラのハードウェアダイアグラムである。
【図５】メモリコントローラの機能詳細を示すブロックダイアグラムである。
【図６】ゲームマシンにより行われる検証プロトコルの機能詳細を示すブロックダイアグラムである。
【図７】ゲームマシンと半導体メモリとの間の通信プロトコルのブロックダイアグラムである。
【図８】ゲームマシンと半導体メモリとを備えたゲームシステムのハードウェアダイアグラムである。
【図９】半導体メモリ内での論理メモリマッピングのブロックダイアグラムである。
【図１０】半導体メモリ内のメモリコントローラのハードウェアダイアグラムである。
【図１１】メモリコントローラの機能詳細を示すブロックダイアグラムである。
【図１２】ゲームマシン内のセキュリティーチップのハードウェアダイアグラムである。
【図１３】ゲームマシンにより行われる検証プロトコルの機能詳細を示すブロックダイアグラムである。
【図１４】ゲームマシンと半導体メモリの間の通信プロトコルのブロックダイアグラムである。
【図１５】ゲームマシンと半導体メモリユニットの製造プロセスのブロックダイアグラムである。
【発明を実施するための形態】
【００１９】
＜＜定義及び表記法＞＞
まず、以下に用いられる定義と表記法について述べる。
【００２０】
整数は、幾つかの表現を使って記述することができる。最も一般的な表現は十進法表現である。以下の図面における記述では、十進法表現に加えて、十六進法及び二進法表現が使用される。十六進法で書かれた場合、プレフィックス“0x”が添えられる。二進法で書かれた場合には、括弧“(…)”が書き添えられる。
【００２１】
例えば、「0xF」は整数１５の十六進法表現である。同様に、「(1111)」は１５の二進法表現である。
【００２２】
デジタルデータは、ビット列であり、ビットストリングとも呼ばれる。同様に、ビットの連続は、バイト列としても表現することができ、１バイトは８ビットから成る。例えば、ストリング(100101101)は９ビットを、又は、２つのバイト、「0x01」と「0x2D」とを有している。
【００２３】
「x||y」は、ビットストリング「x」と「y」の連結（concatenation）に言及している。例えば、「0x012D=0x01||0x2D」のように記述する。
【００２４】
「x(+)y」は、ビットストリング「x」と「y」のビット毎の排他的ＯＲを言及している（「(+)」は排他的ＯＲの演算記号を表す）。「x >> 1」は、ビットストリング「x」の右への移動を言及する。
【００２５】
ビットストリング「x」の最下位ビット(LSB)は、その二進表現の最右のビットである。
【００２６】
ハッシュ関数は任意の長さのビットストリングを所定の長さの短いビットストリングにマッピング（map）するアルゴリズムである。例えば、周知のハッシュ関数である「MD5」は、任意のサイズのメッセージを１２８ビットのハッシュ値にマッピングする。この意味において、ハッシュ値は、大きな入力メッセージの小さな「指紋」とも考えられる。ハッシュ関数の他の重要な特性は、同一のハッシュ値を持った二つのメッセージを見つけ出すことは困難であるということであり、この特性は、「衝突困難性（collision-resistance）」と呼ばれる。以下の好適な実施の形態での記載においては、表記法「y=H(x)」が使われるが、ここで「x」は入力メッセージであり、「H」はハッシュ関数であり、そして「y」はハッシュ値である。幾つかの周知の基本的なハッシュ関数としては、例えば、「MD5」又は「SHA1」がある。更に、ハッシュ関数は、ブロック暗号化（block ciphers）を含め（但し、それに限定されることない）、従来の暗号化関数（encryption functions）によって実現することができることも周知のことである。例えば、周知のブロック暗号化「AES」は、以下のように使用することができる。メッセージ「x」が２５６ビットを有しているとすれば、かかるメッセージは二つの１２８ビットのブロックx=x[1]||x[2]に分けることができ、１２８ビットの初期ベクトル（initial vector）が「IV」であれば、ハッシュ値「y=H(x)」は、以下の二つのステップで計算される。
【数１】
2010226276.tif 000003
【００２７】
上記において、「AESA(B)」は、鍵「A」による「B」の「AES」暗号化に言及しており、「A(+)B」は、「A」と「B」のビット毎の排他的ＯＲ(XOR)に言及している（「(+)」は排他的ＯＲの演算記号を表す）。
【００２８】
デジタル署名スキームは三つのアルゴリズムからなっている。最初の一つは、鍵対（key-pair）の発生であり、ここでは秘密鍵（private key）と公開鍵とが生成される。秘密鍵（private key）は公開されず、一方、公開鍵は誰にでも配布される。第二のアルゴリズムは、署名発生アルゴリズムである。メッセージと秘密鍵とを入力として、デジタル署名を発生する。第三は、署名認証アルゴリズムであり、これはメッセージ、署名、そして、公開鍵を入力として、署名の真正（correctness）を認証する。
【００２９】
公開鍵は自由に入手可能であることから、誰でも署名を認証することはできるが、他方、有効な署名は、秘密鍵（private key）の所有者だけがこれを発生することが出来ることに注目することが重要である。
【００３０】
上記非特許文献１に開示されている「Merkle」の署名スキームは、デジタル署名を提供するための周知の技術である。他の署名スキームとは異なり、「Merkle」の署名スキームは、複雑な算術演算を利用することなく、ただ単に、ハッシュ関数に依存するだけである。
【００３１】
認証プロトコルは、被認証装置（prover）及び認証装置（verifier）と呼ばれる二つの存在の間における通信プロトコルであり、そこでは、被認証装置がその身元（identity）の証明（proof）を与える。認証プロトコルは、少なくとも二つのステップから構成されており、認証装置がチャレンジ（challenge）を送付し、そして、被認証装置が秘密のデータを利用して応答（response）を生成する。認証装置は、応答の有効性をチェックすることができ、そして、その結果、被認証装置の身元が正しいことを立証する。デジタル署名のスキームから認証プロトコルを構成することは単純であり、そこでは、チャレンジ（challenge）は乱数であり、そして、応答（response）はそのデジタル署名である。例えば、上記非特許文献２には、「Merkle」署名を基礎とした認証技術が開示されており、そこでは、「Merkle」署名が、メモリ動作（memory operations）だけで構成されている。
【００３２】
デジタル証明書（digital certificate）は、公開鍵を確認するために有用なデジタル書面（digital document）である。デジタル証明書は、公開鍵のデジタル署名を備えており、そのデジタル署名は、例えば、政府の機関や、その公開鍵が信頼されている確立された会社など、信頼された第三者（trusted third party）により構成されている。加えて、証明書の階層を利用することが一般的であり、そこでは、ルート証明書（root certificate）が、公開鍵を検証するのに利用され、そして、同様に、第二の認証が公開鍵を検証するのに利用される。この型の階層は、一般に、公開鍵基盤（公開鍵インフラストラクチャ：public-key infrastructure）、又は、短縮して「PKI」と呼ばれる。「X.509」が、その構造やデジタル認証のフォーマットを規定するための周知の基準である。
【００３３】
以下、本発明の好適な実施の形態について、添付の図面を参照しながら、詳細に述べる。
＜＜ゲームマシンと半導体メモリユニットの製造プロセス＞＞
【００３４】
ゲームマシンと半導体メモリの詳細を述べる前に、本発明のより良い理解のため、ゲームマシンの製造プロセスと半導体について述べる。
【００３５】
図１５は、ゲームマシンと半導体メモリユニットの製造プロセスのブロック図である。このプロセスは、本発明の両方の実施例に適用可能である。
【００３６】
如何なる特定の限定をも意図するものではないが、このプロセスでは、ゲームマシンの製造者１５１０、ゲームメーカ１５３０、そして、メモリ製造者１５６０という、三人の行為者を含んでいる。ゲームマシン製造者１５１０は、ゲームマシンを製造し、ゲームメーカ１５３０は、ゲームマシンにより実行されるソフトウェアプログラムを開発し、そして、メモリ製造者は、ゲームマシンにより実行されるソフトウェアプログラムを格納する半導体メモリユニットを製造する。
【００３７】
ゲームマシン製造者１５１０は、ルート秘密鍵（root private key）１５１１、ルート公開鍵（root public key）１５１２、そして、解読鍵（decryption key）１５１３を保持している。如何なる特定の限定をも意図するものではないが、本発明においては、ルート秘密鍵及び公開鍵は「RSA」鍵であり、そして、それらはゲームマシンの製造者によって所有されたコンピュータ上で発生され、かつ、格納されたものであるとする。幾つかの同一のゲームマシン１５１４が製造され、そして、商品化されており、全てのゲームマシンは、ルート公開鍵１５１２と解読鍵１５１３とを格納している。
【００３８】
ゲームメーカ１５３０がゲームマシン１５１４のため、対応する未暗号化ゲームヘッダ１５３３とゲームプログラムとを含めたビデオゲームを開発し、そして、そのゲームの千個のコピーを商品化することを希望したとする。しかしながら、ゲームメーカは、ゲームマシン製造者から、ルート証明書（root certificate）１５１５を含んだライセンスを得なければならない。
【００３９】
ゲームマシン製造者と同様に、ゲームメーカは、ゲームメーカが所有するコンピュータ上で発生され、そして、格納された、ゲーム秘密鍵（game private key）１５３１とゲーム公開鍵（game public key）１５３２とを保有している。最初に、ゲームメーカ１５３０は、ゲーム公開鍵１５３２を送信して、ゲームマシン製造者１５１０からライセンスを入手し；ゲームマシン製造者は、解読鍵１５１３とゲーム公開鍵１５３２のデジタル署名を含むルート証明書１５１５を、応答する。デジタル署名は、ルート秘密鍵１５１１と共に、ゲームマシン製造者に帰属するコンピュータ上で発生される。また、アップデートデータ（data update）１５１６が、ゲームプログラム内に含まれ、そして商品化されたゲームマシン１５１４のファームウェアをアップデートするために送信される。
【００４０】
次に、ゲームメーカは、ゲームデータを暗号化するため、ゲーム鍵１５３５を発生し、そして、解読鍵１５１３を用いてゲーム鍵を暗号化する。また、ゲームメーカは、ゲームヘッダ１５３３とゲームプログラム１５３４とを、ゲーム鍵１５３５を用いて暗号化する。
【００４１】
その後、ゲームメーカにより所有されるコンピュータ上では、例えば、１５４１、１５４３、１５４５などの暗号化データが、そして、例えば、１５４２、１５４４、１５４６などのゲーム証明書が発生される、各暗号化データは秘密鍵を含んでいる。より正確には、千の異なる暗号化データがランダムに発生される。また、千の異なる公開鍵が演算される。それに加え、千のゲーム証明書が発生され、各ゲーム証明書は、千の公開鍵の中の一つのデジタル署名を含み、そして、当該署名はゲーム秘密鍵１５３１を用いて発生される。
【００４２】
最後に、ゲームメーカは、千の異なる暗号化データと千の異なるゲーム証明書とを、一意の暗号化されたゲーム鍵１５４７（unique version）、一意の暗号化されたゲームヘッダ、そして、一意の暗号化されたゲームデータとを用いて結合する。この演算の結果は、例えば、１５５１、１５５２、１５５３のような、メモリ製造者１５６０へ出荷される千のメモリイメージである。メモリ製造者の役割は、単純に、受信したゲームのメモリイメージを、例えば、１５６１、１５６２、１５６３のような千の半導体メモリユニット内にコピーすることであり、そして、それらを商品化することである。
【００４３】
ユーザが原品であるゲームマシンを、そして、原品である半導体メモリを購入した場合、二つの電子装置は、図７又は図１４に記載された認証プロトコルを開始し、そして、ユーザはゲームメーカ１５３０が開発したゲームで遊ぶことが可能となる。
【００４４】
上述したプロセスに替え、暗号化されたデータは、メモリ製造者によって、直接、発生することも可能であろう。この場合、メモリ製造者は、ゲーム秘密鍵と公開鍵とを保持し、ゲームマシン製造者からルート証明書を発生する。
＜＜実施例１＞＞
【００４５】
最初に、メモリコントローラを備えた半導体メモリに焦点を当てた説明を行うが、ここでは、メモリがゲームマシンによって実行されるプログラムを格納している。
＜ゲームシステム＞
【００４６】
図１はゲームシステムのハードウェアダイアグラムであり、ゲームマシン１２０と、ゲームプログラムを格納するための半導体メモリ１００とを備えている。如何なる特定の限定をも意図するものではないが、この実施例では、ゲームマシン１２０は、手で保持できるポータブルなゲームマシンであるものとする。
【００４７】
半導体メモリ１００は、プラスチックの覆い１０１の内部に取り囲まれた電子部品を含んでいる。図１では、破線により示された部品はプラスチックの覆い１０１の内部に配置されている。
【００４８】
半導体メモリ１００は二つのタイプのメモリユニット、即ち、読み書きが可能な不揮発性のメモリユニット（read-write non-volatile memory unit）１０２と、読み出し専用の不揮発性のメモリユニット（read-only non-volatile memory unit）１０３とを備えている。如何なる特定の限定をも意図するものではないが、この実施例では、読み書き可能な不揮発性のメモリユニットは「EEPROM」チップであり、他方、読み出し専用のメモリユニットは、１回だけプログラマブルな「ROM」チップであるものとする。「ROM」チップ１０３は、ゲームプログラムを格納することができ、「EEPROM」チップ１０２は、セーブされたゲーム状態を格納することができる。メモリユニット１０２と１０３の詳細な内容は、後に、図２を参照しながら述べる。
【００４９】
半導体メモリ１００は、メモリユニット１０２と１０３をメモリコントローラ１０５に結合するためのバス１０４を備えている。メモリコントローラ１０５は、ゲームマシン１２０との通信を操作し、そして、メモリユニット１０２と１０３内に格納されたデータにアクセスする回路である。通信プロトコルは、後に図７を参照しながら説明する。最後に、半導体メモリ１００は、物理的には、ピン１０６を介して、ゲームマシン１２０に結合することができる。本実施例においては、１２本のピンは、特に限定されるものではないが、以下のようになっている。
−  ピン１０６は、入力接地信号（input ground signal）、
−  ピン１０７は、入力電源供給ピン（input power supply pin）、
−  ピン１０８は、入力クロック信号（input clock signal）、
−  ピン１０９は、入力リセット信号（input reset signal）、
−  ピン１１０〜１１７は、ゲームマシン１２０と半導体メモリ１００との間の双方向のデータ交換のために利用されるものである。
【００５０】
ゲームマシン１２０は、プラスチックの覆い１２１、例えば方向性パッド（directional pad）１２２やボタン１２３のような入力コントローラ、液晶（ＬＣＤ）スクリーン１２４、スピーカ１２５、そして、オン／オフスイッチ１３９を有している。半導体メモリ１００が空洞部１３８内に挿入可能となっており、それによって、ゲームマシン１２０と半導体メモリ１００とを物理的に結合するための連結が得られる。本実施例では、１２個のコンタクトは、特に限定されるものではないが、以下の通りである。
−  コンタクト１２６は、出力接地信号（output ground signal）、
−  コンタクト１２７は、出力電源供給ピン（output power supply pin）、
−  コンタクト１２８は、出力クロック信号（output clock signal）、
−  コンタクト１２９は、出力リセット信号（output reset signal）、
−  コンタクト１３０〜１３７は、ゲームマシン１２０と半導体メモリ１００との間の双方向のデータ交換のために利用されるものである。
【００５１】
即ち、コンタクト１２６〜１２９は、ゲームマシン１２０から半導体メモリ１００への一方向の通信のために使用され、これに対して、コンタクト１３０〜１３７は、双方向の通信に使用することができる。
【００５２】
プラスチックの覆い１２１内には幾つかの電子部品がある。ＲＡＭ(Random Access Memory)１４１は、アクセスの早い、読み書き可能な揮発性メモリユニットであり、プログラムデータを共に、ＣＰＵ(Central Processing Unit)１４３によって処理された中間データをも格納する。フラッシュメモリユニット１４２は、読み書き可能な不揮発性メモリユニットである。フラッシュメモリ内に格納されるデータには、以下のものを含んでいる：
−  ゲームマシンのハードウェアを制御するプログラムである、ファームウェア１６１、
−  ルート公開鍵１６２、
−  解読鍵１６３。
【００５３】
入出力（Ｉ／Ｏ）インターフェイスユニット１４４は、ゲームマシン１２０と半導体メモリ１００との間の通信を操作する回路である。
【００５４】
ビデオコントローラ１４５は、スクリーン１２４に取り付けられた回路であり、映像をスクリーン１２４に対して発生し、そして、出力する。サウンドコントローラ１４６は、音、又は、音楽を表現するデジタル情報をアナログ電気信号に変換し、そして、その信号はスピーカ１２５によって音響信号に変換される。入力制御ユニット１４７は、ＣＰＵ１４３によって処理することが出来るように、例えば、方向性パッド１２２又はボタン１２３に加えられた圧力である入力信号を、デジタル情報に変換する。
【００５５】
最後に、電池１４８は、ゲームマシン内に封入された電子部品に対して電力を供給する。
【００５６】
ＲＡＭ、フラッシュメモリ、ＣＰＵ、Ｉ／Ｏインターフェイス、ビデオコントローラ、サウンドコントローラは、異なる電子部品への制御信号やデータ信号、そして、そこからの制御信号やデータ信号を伝達するためのバス１５１に結合されている。加えて、電力が電池１４８により、バス１５１を介して電子部品へ供給されている。同様に、コンタクト１２６〜１３７、そして、Ｉ／Ｏインターフェイス１４４が、Ｉ／Ｏバス１５２に結合されている。スピーカ１２５とサウンドコントローラ１４６は、ケーブル１５３と結合されている。方向性パット１２２、ボタン１２３、そして、入力インターフェイス１４７が、ケーブル１５４と結合されている。最後に、電池１４８とオン／オフスイッチ１３９が、ケーブル１５５に結合されている。
【００５７】
ユーザがスイッチを利用してゲームマシン１２０の電源をオンすると、フラッシュメモリ１４２に格納されたファームウェア１６１がＣＰＵ１４３により実行される。半導体メモリ１００が空洞１３８内に挿入され、それにより半導体メモリ１００のピン１０６〜１１７をゲームマシン１２０のコンタクト１２６〜１３７に結合すると、ゲームマシンとメモリとが連動し、図７を参照して後に述べる通信プロトコルを行う。通信プロトコルの普通に終了した後、半導体メモリ内に格納されていたプログラムがＲＡＭ１４１に転送され、そして、ＣＰＵ１４３により実行される。プログラムは、例えば、映像をスクリーン１２４上に表示し、スピーカ１２５を介して音楽や音を鳴らし、そして、方向性パッド１２２又はボタン１２３を押しているユーザの動きに反応することができる。しかしながら、通信プロトコルが失敗した場合には、プログラムは実行されない。
【００５８】
図２は、半導体メモリ１００の内における論理メモリマッピングのブロックダイアグラムである。
【００５９】
如何なる特定の限定をも意図するものではないが、本実施例では、半導体メモリ１００の論理アドレスが４８ビットの整数として表現されており、図２の左側に１６進法により表記されている。これに替えて、異なるアドレススペースを使用することもでき、その場合、データは、物理的なチップ上の異なるサイズと異なるロケーションで、異なる順序で格納することができる。
【００６０】
半導体メモリ１００上に格納されたデータをアクセスするために、ゲームマシンは、論理アドレスとデータ長さとを半導体メモリへ送信する。次に、メモリコントローラ１０５が論理アドレスを物理アドレスに翻訳（変換）し、例えば、ＲＯＭユニット１０２又はＥＥＰＲＯＭ１０３など、関連するメモリユニットを作動し、そして、関連するメモリユニット上に格納されているデータをゲームマシン１００へ送出する。
【００６１】
４８ビットのアドレス値は２５６，０００ギガバイトのデータにアドレスすることができる。しかしながら、半導体メモリは、例えば、１ギガバイト程度の、より小さな容量を有している。この場合、論理メモリのある部分だけが、実際に有効なアドレスである。図２において、許されていないアドレスは、斜線によって表示されている。
【００６２】
論理アドレスに加え、図２は、ＲＯＭユニット１０２、ＥＥＰＲＯＭユニット１０３、又は、メモリコントローラ１０５のうち、どのメモリユニット又はチップ上に、対応するデータが物理的に格納されているかを示している。メモリの特性（読出し専用か、又は、読み書き両方か）に対応して、ある論理アドレスに格納されたデータは読み出し可能であり、そして、時には書き込みも可能である。最後に、データへのアクセスは、アクセス制御ポリシー（access control policy）によって規定されており、図２において大文字「Ｕ」によって示されるユーザアクセスと、大文字「Ｓ」によって示される管理者アクセスとに分けられる。ユーザアクセスとは、ゲームマシン１２０によって直接アクセスされるデータを言い、他方、管理者アクセスとは、直接にはアクセスすることが出来なデータを意味する。より詳細には、メモリコントローラだけが管理者データにアクセスすることができる。
【００６３】
論理アドレスは、以下の五つの領域に分類される。
−  暗号化データ領域２００は、半導体メモリ１００の認証の期間に利用される。
−  暗号化ヘッダ領域２１０は、認証の期間に転送されたデータと組み合わされ、半導体メモリの正真性（authenticity）を保証するパブリックパラメータを含んでいる。
−  ゲームヘッダ領域２２０は、半導体メモリ内に格納されたゲームプログラムに関連する一般的な情報を含んでいる。
−  セーブゲーム状態領域２３０は、ユーザによってセーブされたゲームの状態を含んでいる。
−  ゲームプログラム領域２４０は、最初のセクタ２４１にファーウェアアップデートを、そして、他のセクタにゲームプログラムを格納している。
【００６４】
上述した領域が、以下に詳細に述べられる。
【００６５】
暗号化データ２００は、秘密テーブル２０１、イメージテーブル２０２、そして、ツリーテーブル２０３を含んでいる。秘密テーブル２０１は、「0x0」から「0x3FFFFF」までのアドレス値を、即ち、４メガバイトを占有している。物理的には、秘密テーブル２０１からのデータは、ＲＯＭユニット１０２内に配置されている。加えて、秘密テーブル２０１へのアクセスは、管理者アクセスポリシー（supervisor access policy）によって管理さることから、制限される。
【００６６】
イメージテーブル２０２は、「0x400000」から「0x7FFFFF」までのアドレス値を占有し（４メガバイト）、そして、ツリーテーブル２０３は、「0x800000」から「87FFEF」までを占有している。物理的には、それらはＲＯＭユニット１０２内に配置され、自由にアクセス可能である。
【００６７】
それらのテーブル内に格納されたデータについては、後に、図３を参照しながら述べる。
【００６８】
以下には、暗号化ヘッダ２１０が述べられる。アドレス「0x1000000」には、システムパラメータ２１１が格納されている。システムパラメータは、どのタイプのアルゴリズムを認証のために使用するのか、認証に使用するチャレンジのサイズ、認証を行うことができる総回数、そして、どのタイプの証明書が使用されるのかを、一義的に規定している。本実施例では、特に制限はないが、認証アルゴリズムは、ハッシュ関数「MD5」と共に、８ビットのチャレンジを使用する「Merkle」署名に基づくことができ、１６，３８４回まで認証を行なうことができ、そして、証明書は「X.509」のデジタル証明書でも可能であるとしている。その場合、システムパラメータは、以下のような「ASCII」キャラクターで記述されたストリングから構成される：
−  MD5_WITH_MERKLE
−  CHALLENGE_8
−  TIMES_16384
−  CERTIFICATE_X509
【００６９】
それに替えて、例えば、「SHA-1」又は「AES」のようなブロック暗号化に基づくものなど、「MD5」とは異なるハッシュ関数を使用することもでき、チャレンジのサイズや行われる認証の回数が異なっても、そして、証明書のタイプも異なってもよい。
【００７０】
公開鍵２１４は、アドレス「0x100900」に格納される。公開鍵は、後に図７を参照しながら詳細に記載する認証プロトコルにおいて、役割を演ずる。認証アルゴリズムがハッシュ関数「MD5」と共に「Merkle」署名を使用する場合には、公開鍵は１６バイトの二進データから構成される。
【００７１】
ゲーム証明書は、アドレス「0x100600」に格納される。ゲーム証明書は、公開鍵を有効にするために使用される。ルートゲーム証明書は、アドレス「0x100300」に格納され、そして、ゲーム証明書を有効にするために使用される。手順の詳細は、後に、図７を参照しながら述べる。システムパラメータ２１１、ルート証明書２１２、ゲーム証明書２１３、そして、公開鍵２１４は、物理的にＲＯＭユニット１０２内に格納されており、そして、自由にアクセス可能である。
【００７２】
２バイトの署名インデックス２１５は、アドレス「0x109400」に格納される。物理的には、署名インデックス２１５は、後に図４を参照しながら述べるメモリコントローラ１０５内における２バイトの不揮発性の読み書き可能なレジスタ内に配置される。署名インデックスは、秘密テーブル２０１、イメージテーブル２０２、そして、ツリーテーブル２０３で使用される暗号化データの配置を示している。
【００７３】
ゲームヘッダ領域の内容を以下に述べる。かかる内容は、物理的には、ＲＯＭユニット上に格納されており、そして、自由にアクセス可能である。
【００７４】
ゲームＩＤ２２１は、アドレス「0xFF0000000000」に格納されており、ゲームＩＤは、どのゲームが半導体メモリ上に格納されているかを一義的に規定する。ゲーム鍵２２２は、アドレス「0xFF0000000010」に格納される。ゲーム鍵は、ゲームヘッダデータの残りの部分と共に、ゲームプログラム２４０をも解読するために使用される。ゲームプログラムの権限のない解読を防止するため、ゲーム鍵２２１は、ゲームマシン１２０のフラッシュメモリユニット１４２内に格納された解読鍵１６３を使用して暗号化されている。
【００７５】
その後のアドレスにおけるデータが、ゲーム鍵２２２により暗号化される。プログラムのエントリポイント２２３（program entry point）は、アドレス「0xFF0000000020」に格納されている。このプログラムのエントリポイントは、ゲームプログラムのメインルーチンのアドレスを示している。それ故、認証が成功した後には、ゲームマシン１２０は、プログラムのエントリポイントに特定されたアドレスに配置されているプログラムデータを読み込む。
【００７６】
１６バイトを占有するアドレス「0xFF0000000030」には、第１のハッシュデータ２２４が格納される。このデータは、ゲームプログラム領域２４０の第１セクタ内に格納されたデータに適用された「MD5」ハッシュ関数の出力である。より詳細には、第１のハッシュデータ２２４は、アドレス「0xFFFF00000000」における１メガバイトのデータを連結した結果であり、それを「MD5」により処理し、もって、１６バイトのハッシュ値を得る。ゲームプログラム領域２４０には、合計１０２４セクタが存在することから、アドレス「0xFF0000000030」から「0xFF000000402F」まで、１０２４個のハッシュ値が存在する。
【００７７】
セーブゲーム状態２３０は、アドレス「0xFFF000000000」から「0xFFF00002FFFF」までに格納される。物理的には、それらのアドレスはＥＥＰＲＯＭに対応しており、それ故、セーブゲーム状態領域２３０内のデータは、読み出し、又は、書き込みができる。更に、データは、セーブゲーム状態領域２３０内において、自由にアクセス可能である。第１のセーブゲーム２３２から１６番目２３３まで、１６のセーブ用スロットがある。状態テーブル２３１は、各セーブゲームスロットの状態、即ち、アクティブか又は非アクティブかを示している。
【００７８】
最後に、ゲームプログラム領域が、アドレス「0xFFFF00000000」から「0xFFFF3FFFFFFF」まで広がっており、それらは物理的にＲＯＭユニット１０２に対応している。ゲームプログラムデータは自由にアクセス可能であるが、しかしながら、ゲーム鍵２２２によって暗号化されている。ゲームデータは、１０２４のセクタに編成されており、各セクタは１０２４バイトを含んでいる。その結果、半導体メモリは、１ギガバイトまでゲームプログラムを格納することができる。ファームウェアのアップデートは、ゲームプログラム領域の最初のセクタ２４１内に格納されている。
【００７９】
データサイズを略述すると、ＲＯＭユニット１０２は、１ギガバイトよりも僅かに大きい、１，０８２，７０９，０２４バイトを収容しており、そして、ＥＥＰＲＯＭは、１９６，６０８バイトを収容することが分かる。
【００８０】
図３は、ＲＯＭユニット１０３の物理的アドレスマップと、そして、ＲＯＭ領域内に格納されたデータとの機能的な関係を表すブロックダイアグラムである。
【００８１】
以下に記載される物理的アドレスのマップに代えて、異なる順番で、又は、異なる物理的配置に格納されたデータにより、異なるアドレスの仕方を利用することもできる。
【００８２】
以前にも説明したように、ＲＯＭユニット１０３は、暗号化データ２００、暗号化ヘッダ２１０の一部、ゲームヘッダ２２０、そして、ゲームプログラム２４０を格納している。他方、ゲームマシン１２０は、４８ビットのアドレスを使用して、半導体メモリの利用可能なメモリユニットに対し、データを読み出し又は書き込むことができる。他方、内部的には、各メモリユニットはそれ自身の物理的アドレスマップを有している。如何なる特定の限定をも意図するものではないが、本実施例では、ＲＯＭユニット１０３は、３２ビットのアドレス空間を使用している。ゲームマシン１２０によって送られた論理アドレスを物理アドレスへ変換すること、そして、半導体メモリ１００の対応するメモリユニットを作動することが、メモリコントローラ１０５の役割である。
【００８３】
暗号化データ２００は、秘密テーブル２０１、イメージテーブル２０２、そして、ツリーテーブルの、三つのテーブルを含んでいる。
【００８４】
秘密テーブル２０１は、２６２，１４４個の１６バイトの乱数、即ち、「x[1]」３０１〜「x[262144]」３０６によって満たされている。秘密「x[1]」は、物理アドレス「0x0」に配置され、秘密「x[2]」は「0x10」に、そして、秘密「262144」がアドレス「0x3FFFF0」に配置されるとまで、以下同様になっている。
【００８５】
イメージテーブル２０２は、２６２，１４４個の各１６バイトの値、即ち、「y[1]」３１１〜「y[262144]」３１６によって満たされている。如何なるインデックス「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]」に至るまで、以下同様となっている。
【００８６】
ツリーテーブル２０３は、各々が１６バイトの、３２７６７個の値、即ち、「t[1]」３２１〜「t[32767]」３２８を含んでおり、ここでは、「t[1]」はアドレス「0x800000」に配置され、「t[2]」は「0x800010」に、そして、アドレス「0x87FFF0」に配置された「t[32767]」に至るまで、以下同様となっている。ツリーデータは、その機能的な関係に応じて、二つのカテゴリに分類することができる。
【００８７】
ツリーテーブル２０３の上部、より正確には、「t[16384]」から「t[32767]」までにおいては、ツリーデータはイメージテーブル２０２からのイメージデータに依存しており、如何なるインデックス「0<=i<=16383」に対しても、ツリーデータ「t[i+16384]」は、以下のように規定される。
【数２】
2010226276.tif 000004
【００８８】
例えば、「t[16384]=H(y[1]||y[2]||…||y[16])」、又は「t[16385]= H(y[17]||y[18]||…||y[32])」である。
【００８９】
ツリーテーブル２０３の下部においては、如何なるインデックス「1<=i<=16383」に対しても、ツリーデータ「t[i]」は、以下のように規定される。
【数３】
2010226276.tif 000005
【００９０】
例えば、「t[1]=H(t[2]||t[3])」、又は、「t[8192]=H(t[16384]||t[16385])」である。
【００９１】
以上の機能的な関係から、ツリーデータ２０３の配列は、二分のハッシュツリーとして見ることができ、そこでは、ツリーの根（ルート：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]」に接続されている。
【００９２】
暗号化ヘッダ２１０は、アドレス「0x87FFF0」から出発し、そして、アドレス「0x8893F0」で終わる。暗号化ヘッダ２１０は、ＲＯＭ１０３内には、部分的にしか格納されていないことに留意のこと。より詳細には、システムパラメータ２１１、ルート証明書２１２、ゲーム証明書２１３、そして、公開鍵２１４がＲＯＭユニット１０３内に格納されているが、しかし、署名インデックス２１５はメモリコントローラ１０５内に格納されている。
【００９３】
公開鍵２１４は、ゲームヘッダ２２０のハッシュ値と連結されたツリーテーブル「t[1]」３２１の先頭のハッシュ値であると規定される。
【数４】
2010226276.tif 000006
【００９４】
ゲームヘッダ２２０は、ＲＯＭユニット１０３内に完全に格納され、アドレス「0x8893F0」から出発し、アドレス「0x88D420」までである。最後に、ゲームプログラムは、アドレス「0x88D420」から始まってアドレス「0x4088D420」までである。
＜メモリコントローラ＞
【００９５】
図４は、メモリコントローラ１０５のハードウェアダイアグラムである。
【００９６】
メモリコントローラは、「READ」、「WRITE」、そして、「CHALLENGE」の、三つのタイプのメッセージを取り扱う。
−  「READ」メッセージはアドレスとデータ長さとを含んでおり、「READ||Address||Length」のようにフォーマットされ、そこでは、アドレスは４８ビットのアドレスデータであり、長さは１６ビットである。「READ」メッセージを受信すると、メモリコントローラは、アドレスと長さが読み出し可能なデータに対応することを検証し、対応するメモリユニットからデータを取り出してそれをゲームマシン１２０へ送り返す。
−  「WRITE」メッセージは４８ビットのアドレスと８ビットのデータペイロード（data payload）を含んでおり、「WRITE||Address||Data」のようにフォーマットされる。「WRITE」メッセージを受信すると、メモリコントローラ１０５は、アドレスがＥＥＰＲＯＭの書き込み可能なメモリに対応することを検証し、そして、そのデータペイロードをＥＥＰＲＯＭ領域に書き込む。
−  「CHALLENGE」メッセージは８ビットのデータペイロード、即ち、チャレンジを含んでおり、「CHALLENGE||Data」のようにフォーマットされる。かかるデータを受信すると、メモリコントローラ１０５は秘密テーブル２０１からデータを選択し、そして、それをゲームマシン１２０へ送り返す。
【００９７】
上述したメッセージを如何に処理するかについて、図５を参照しながら詳細に述べる。
【００９８】
メモリコントローラ１０５は、ピン１０６〜１１７を介して、ゲームマシン１２０と交信する。特に、ピン１１０〜１１７は双方向のデータ交信のために使用されており、ゲームマシン１２０から受信され又はゲームマシンへ送出されるデータは、８ビットのＩ／Ｏバッファ４０１内に格納される。接地ピン１０６、電力供給ピン１０７、クロックピン１０８、リセットピン１０９、そして、Ｉ／Ｏバッファは、全て、制御ユニット４１０へ結合されている。
【００９９】
チャレンジレジスタ４２１と共に、シフトユニット４２２、秘密アドレスレジスタ４３０、三つの加算器４４１、４４２、４４３、そして、制御ユニット４１０が、図５を参照して詳細に述べるメッセージの処理機能を実現している。この制御ユニット４１０は、以下のものを備えている。
−  メモリコントローラ１０５内の他のユニットを作動、制御し、そして、受信したメッセージに応じて信号を発送する、有限状態マシン４１１。
−  読み出し、又は、書き込まなければならないデータの物理アドレスを格納するアドレスレジスタ４１２。
−  読み出されるデータの長さを格納する長さレジスタ４１３。
−  入力データに整数「１」を加算するインクリメントユニット４１５。
−  入力データから整数「１」を減算するデクリメントユニット４１６。
−  入力された論理アドレスを物理アドレスに翻訳（変換）するアドレス変換マップユニット４１７。
【０１００】
ＲＯＭユニット１０３が直接的に読み出された場合で、ゲームマシン１２０からの入力メッセージが「READ」メッセージであり、そして、論理アドレスが、直接アクセスが可能なＲＯＭ領域に対応する場合、又は、ＲＯＭユニット１０３が間接的に読み出された場合で、入力メッセージが「CHALLENGE」メッセージである場合、コントロールユニットは、以下のステップを行う。
【０１０１】
アドレスレジスタ４１２には適当な値が設定される。直接アクセスの場合、論理アドレスは、アドレス翻訳マップ４１７によって物理アドレスへ変換され、そして、物理アドレスがアドレスレジスタ４１２内でコピーされる。長さの値は、長さレジスタ４１３内でコピーされる。
【０１０２】
その後、アドレスレジスタの値が、バス４５２を介してＲＯＭユニット１０３へ送られ、そして、ピン１０７からの電力供給信号とピン１０８からのクロック信号も、バス４５２を介して送られる。最後に、ＲＯＭチップセレクト（ＲＯＭ  ＣＳ）が、ＲＯＭユニット１０３を作動するため、「１」に設定される。
【０１０３】
その結果、ＲＯＭユニット１０３は、バス４５１を介して、特定のアドレスに配置された１バイトを戻す。このバイトは、Ｉ／Ｏバッファ４０１とデータピン１１０から１１７を介して、ゲームマシンへ送られる。次に、アドレスレジスタ４１２はインクリメントユニット４１５によってインクリメントされ、そして、長さレジスタはデクリメントユニット４１６によってデクリメントされる。有限状態マシン４１１は上記のステップを、長さレジスタが零（０）になるまで繰り返す。
【０１０４】
データがＥＥＰＲＯＭユニット１０２から読み出され、又は、書き込まれる場合、同様のステップが、バス４５４、４５３を用いて行われる。唯一の相違は、バス４５４がＲＯＭチップセレクト（ＲＯＭ  ＣＳ）を「１」に設定し、付加的なＲ／Ｗ信号が、読み出しのための「０」、又は、書き込みのための「１」に設定され、そして、バスが双方向であることである。
【０１０５】
次に、間接的なＲＯＭへのアクセス、即ち、「CHALLENGE」メッセージがメモリコントローラにより受信され、そして、秘密テーブル２０１からのデータが選択されてゲームマシンに送り返される場合に関連するユニットについて述べる。秘密アドレスレジスタ４３０は、物理アドレスをＲＯＭユニット１０３内に表示する３２ビットのレジスタであり、以下の部品から構成される。
−  ４ビットのバイトカウンタ４３１。
−  シフトユニット４２２に接続されたチャレンジビット「m」４３２。
−  ３ビットの秘密カウンタ４３３。
−  暗号化ヘッダ２１０の一部である、１６ビットの署名インデックス２１５。かかる署名インデックス２１５は制御ユニット４１０に接続されており、ゲームマシン１２０によって読み出すことができる。署名インデックス２１５は１４ビットの署名カウンタ４３５と二つの零ビット４３６とから成る。
【０１０６】
チャレンジが半導体メモリ１００へ送出されると、チャレンジレジスタ４２１内に格納される。次に、チャレンジ値が、シフトユニット４２２により、右へ１ビットだけ移動される。この処理において、チャレンジの最右側のビットが削除され、しかしながら、この最右側のビットは、秘密アドレスレジスタ４３０のチャレンジビット４３２へ転送される。
【０１０７】
第１の加算器４４１の１ビット入力が、制御ユニット４１０によって「１」に設定されると、加算器４４１は、バイトカウンタ４３１の値を１だけインクリメントする。この時点で、秘密アドレスレジスタ４３０は、ＲＯＭユニット１０３内の秘密テーブル２０１の一つのエレメントに対応する物理アドレスを持っている。秘密アドレスレジスタの３２ビットの値は、アドレスレジスタ４１２へコピーされ、そして、バス接続４５２を介してＲＯＭユニット１０３へ送られる。従って、１バイトが、バス接続４５２を介して、ＲＯＭユニット１０３から送出され、そして、Ｉ／Ｏバッファ４０１とデータピン１１０〜１１７を介して、ゲームマシン１２０へ送られる。
【０１０８】
しかしながら、加算器４４１は、４ビットだけを取り扱うことができ、インクリメント動作の結果が４ビットよりも大きくなると、より具体的には、「１」が「0xF」に加算されると、オーバフローが起き、そして、加算器４４１の１ビットの出力が「１」に設定される。
【０１０９】
加算器４４１の１ビット出力は、第２の加算器４４２の１ビット入力と制御ユニット４１０に連結されている。制御ユニット４１０が第１の加算器４４１でのオーバフローを検出すると、チャレンジ値がシフトユニット４２２によって１ビットだけ右に移動し、そして、最右側のチャレンジビットが、再び、秘密アドレスレジスタ４３０のチャレンジビット４３２へ転送される。加えて、加算器４４１のオーバフロービットも第２の加算器４４２へ送られ、従って、それが３ビットの秘密カウンタ４３３をインクリメントする。しかしながら、秘密カウンタ４３３の値が「0x7」である場合は、インクリメント動作の結果が３ビットよりも大きくなるため、第２のオーバフローが生じる。この第２のオーバフローは、制御ユニット４１０と第３の加算器４４３の両方に送られる。
【０１１０】
従って、第３の加算器が１４ビットの署名カウンタ４３５の値をインクリメントし、これによって署名インデックスを１だけ上昇する。また、制御ユニットが第２の加算器４４２におけるオーバフローを検知すると、受信されたチャレンジに対応する秘密データが完全に送信され、そして、メモリコントローラはアイドル状態となり、ゲームマシン１２０からの次のメッセージを待つ。しかしながら、署名カウンタ４３５の値が「0x3FFF」であり、そして、第２のオーバフロービットが「１」に設定された場合には、第３のオーバフローが生じる。これは、利用可能な秘密データが使い尽くされ、そして、半導体メモリ１００がゲームマシン１２０とはもはや結合できないことを意味する。それ故、第３のオーバフローが制御ユニット４１０によって検出されると、ゲームマシン１２０からの如何なる新たなメッセージをも拒否する。
＜メモリコントローラの機能の明細＞
【０１１１】
図５は、メモリコントローラの機能の明細を示すブロックダイアグラムである。如何なる特定の限定をも意図するものではないが、本実施例では、図５に記載された機能は、メモリコントローラ１０５における有限状態マシン４１１内の回路として実現されている。
【０１１２】
最初に、メモリコントローラ１０５は聴取状態にあり、ゲームマシン１２０からのメッセージを待つ。メッセージがデータピン１１０〜１１７を介して到着すると、以下のステップが行われる。最初に、メッセージのタイプが特定される。既に説明したように、「READ」、「WRITE」、そして、「CHALLENGE」の、メッセージには三つのタイプがある。
【０１１３】
ステップ５１１では、「READ」メッセージを検出する。ステップ５１２では、論理アドレスと長さペイロードとが、メモリコントローラ１０５によりチェックされる。より詳細には、論理アドレスは、読み出し可能（readable）で、かつ、直接にアクセス可能なデータに対応するものでなければならない。例えば、アドレス「0x880000」は読み出し可能ではなく、拒否される。同様に、アドレス「0x1009400」は読み出し可能ではあるが、データ長さが「４」であれば、アドレス「0x1009402」は読み出し可能ではないことから、そのメッセージは拒絶される。加えて、アドレス「0x0」は秘密テーブル２０１に対応しており、そして、直接にアクセスすることはできない。アドレスが読み出し可能でかつ直接アクセスが可能であれば、メッセージ内に設けた長さとアドレスとが、アドレスレジスタ４１２と長さレジスタ４１３にコピーされる。
【０１１４】
ステップ５２１と５３１では、読み出されるアドレスの物理的位置、即ち、ＲＯＭ１０３、ＥＥＰＲＯＭ１０２、又は、メモリコントローラ１０５によって、三つの場合を識別する。
【０１１５】
ＲＯＭアドレスの場合には、ステップ５２３において、ＲＯＭチップセレクタ（ＲＯＭ  ＣＳ）信号が「１」に設定され、そして、アドレスがバス４５２を介して送られる。加えて、アドレスレジスタ４１２がインクリメントされ、そして、長さレジスタ４１３がデクリメントされる。従って、ＲＯＭユニット１０３は、バス接続を介して、ゲームマシン１２０へ送られた特定アドレスの１バイトデータを戻す。長さレジスタが「０」よりも大きい限り、ステップ５２３が繰り返され、長さレジスタが「０」になると、データは完全に転送され、そして、メモリコントローラは最初の聴取状態に戻る。
【０１１６】
ＥＥＰＲＯＭアドレスの場合には、ステップ５３３が実行される。ステップ５３３は、ＥＥＰＲＯＭユニット１０２を読み出しモードで起動することを除いて、基本的に、ステップ５２３と同じである。
【０１１７】
論理アドレスがＲＯＭでもＥＥＰＲＯＭでもない場合には、ステップ５４１において、署名インデックス２１５が戻される。
【０１１８】
ステップ５５１では、「WRITE」メッセージが検出される。ステップ５５２では、メッセージのアドレスペイロードが検証され、もしも有効であれば、アドレスがアドレスレジスタ４１２にコピーされる。次に、ステップ５５３では、ＥＥＰＲＯＭチップセレクトとＲ／Ｗを「１」に設定し、そして、アドレスをバス接続４５４へ送出することにより、対応するＥＥＰＲＯＭの物理アドレスが書込みモードで起動される。同様にして、「WRITE」メッセージのデータペイロードが、バス接続４５３を介して、ＥＥＰＲＯＭチップ１０２へ転送される。
【０１１９】
メッセージが「READ」でも「WRITE」タイプでもない場合には、「CHALLENGE」である筈である。ステップ５６１では、ペイロードされたデータがチャレンジレジスタ４２１へコピーされる。
【０１２０】
ステップ５６２では、シフトユニット４２２により、チャレンジ値４２１が１ビットだけ右に移動され、そして、最右側のビットがチャレンジビット４３２へコピーされる。
【０１２１】
この時点では、秘密アドレスレジスタ４３０は、ゲームマシン１２０へ転送しなければならない第１のバイトの物理アドレスを含んでいる。このデータ転送は、ステップ５６３において行われ、即ち、バス接続４５２において、そのアドレスが秘密アドレスに設定され、そして、ＲＯＭチップセレクトが「１」に設定される。従って、１バイトがＲＯＭユニット１０３から受信され、そして、ゲームマシンへ送出される。加えて、バイトカウンタ４３１が第１の加算器４４１によってインクリメントされる。
【０１２２】
インクリメント期間にオーバフローが起こらなければ、ステップ５６３が繰り返される。本実施例では、如何なる特定の限定をも意図するものではないが、第１の加算器が４つのビットを操作し、それ故、オーバフローが生じる前に、バイトカウンタ４３１が１６回インクリメントされ、そして、１６バイトが、ＲＯＭユニット１０３からゲームマシン１２０へ転送される。例えば、秘密アドレスが初めにアドレス「0x10」を格納している場合、アドレス領域「0x10」〜「0x20」内の全てのバイトが転送され、即ち、これらの１６バイトは、第２の秘密値「x[2]」３０２に対応することとなる。
【０１２３】
最初のオーバフローが第１の加算器４４１で起こった場合、ステップ５６５において、秘密カウンタ４３３が第２の加算器４４２によってインクリメントされる。このインクリメント動作期間にオーバフローが起こらなければ、チャレンジ４２１が、シフトユニット４２２によって右に１ビットだけ移動され、そして、ステップ５６２において、最右側ビットがチャレンジビット４５３へコピーされ、そして、ステップ４５３〜５６６が、再び実行される。もしも第２のオーバフローが起これば、秘密データの転送は完了する。その場合、署名カウンタ４３５は、ステップ５６７において、第３の加算器４４３によりインクリメントされる。このインクリメント動作期間にオーバフローが起こらなければ、メモリコントローラは、その初期状態へ戻る。もしも第３のオーバフローが生じれば、秘密テーブル２０１からのデータが利用し尽くされたことを意味し、そして、ステップ５６９において、メモリコントローラは永続的休止状態（perpetual idle state）に入り、ゲームマシン１２０からの如何なる新たなメッセージをも拒否する。
＜「CHALLENGE」メッセージ処理の例＞
【０１２４】
以下に、「CHALLENGE」メッセージ処理の一例を述べる。
【０１２５】
メモリコントローラ１０５は、「CHALLENGE」メッセージを、２進法により表現されたデータペイロード「(11010001)」と共に受信するものとする。更には、秘密アドレスレジスタ４３０は、初めは３２ビット値「0x00000100」を有しているものとする。より詳細には、署名インデックスは「１」であり、他の全てのレジスタは「０」であるとする。これは、秘密値「x[17]」３０５の物理アドレスであることに留意されたい。
【０１２６】
第１のチャレンジビットは「１」であり、従って、秘密アドレスレジスタは、秘密「x[18]」の物理アドレスである「0x110」に設定される。次に、秘密「x[18]」の１６バイトが、クロックピン１０８からのクロック信号の度に、バイトカウンタ４３１をインクリメントすることにより、一バイト毎、ゲームマシン１２０へ転送される。その結果、秘密アドレスレジスタが、順次、以下のアドレス、即ち、「0x110」、「0x111」、「0x113」…「0x11F」に格納する。
【０１２７】
この時点において、バイトカウンタがインクリメントされると、第１の加算器４４１においてオーバフローが生じ、そして、秘密アドレス４３０が、再び、「0x110」となる。従って、秘密カウンタ４３２がインクリメントされ、そして、チャレンジビットは、チャレンジ４２１を右に移動した後に「０」に設定され、即ち、秘密アドレスは、秘密「x[19]」のアドレスである「0x120」となる。次に、秘密「x[19]」の１６バイトがゲームマシンへ転送される。
【０１２８】
第３と第４のチャレンジビットは「０」であり、それ故、次に転送されるべき秘密値は「x[21]」と「x[23]」である。最後に、終わりの４つのチャレンジビットは、「1」、「0」、「1」、「1」であり、それ故、転送される秘密値は、「x[26]」、「x[27]」、「x[30]」、「x[32]」である。８つの秘密値が完全に転送された後に、署名レジスタがインクリメントされ、そして、秘密アドレスレジスタに格納された値は、秘密「x[33]」のアドレスである「0x00000200」となる。メモリコントローラは、最初の聴取状態へ戻り、そして、次のメッセージを待つ。
【０１２９】
従って、「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]」は転送されない。その結果、秘密値の半分だけが明かされることとなる。
【０１３０】
図６は、ゲームマシン１２０によって行われる検証プロトコル（verification protocol）の機能の明細を示すブロックダイアグラムである。如何なる特定の限定をも意図するものではないが、この実施例では、この検証プロトコルは、ゲームマシンのフラッシュメモリ１４２内に格納され、そして、ＣＰＵ１４３によって実行されるソフトウェアプログラムとして実現されるものとする。
【０１３１】
検証プロトコルの開始では、ゲームマシン１２０は、そのＲＡＭユニット１４１内に、図７を参照しながら詳細に述べる認証プロトコル（authentication protocol）の期間に入手された公開鍵２１４と署名インデックス２１５とを格納する。
【０１３２】
ステップ６０２では、ゲームマシンは、アドレス「0xFF0000000000」と長さ「0x4030」と共に「READ」メッセージを送付することにより、ゲームヘッダ２２０を要求する。ステップ６０３では、ゲームマシンはゲームヘッダを入手し、そして、アドレス「0x800000」と長さ「0x10」と共に「READ」メッセージを送付することにより、ツリー「t[1]」３２１の先頭を要求する。ステップ６０４では、ゲームマシンは「t[1]」を得て、そして、以下の演算を行う。
H1 = H( t[1] || H( game header) )
【０１３３】
ステップ６０５において、「H1」が公開鍵と比較される。ゲームマシンによって引き出されたデータが本物（authentic）であれば、演算された値「H1」は公開鍵２１４と等しい筈である。もしそうでなければ、ステップ６０６において、検証（verification）は失敗となる。
【０１３４】
もしも「H1」が公開鍵と等しい場合、ゲームマシンは、ステップ６１１において、８ビットのペイロード（乱数）と共に「CHALLENGE」メッセージを送信する。半導体メモリ１００の応答は８個の秘密値「x’[1]」…「x’[j]」…「x’[8]」からなり、そして、ステップ６１２において、ゲームマシンにより受信される。実際、これらの８つの秘密値は、１６個の秘密値「x[16*index+1]」、「x[16*index+2]」…「x[16*index+16]」の中から、メモリコントローラ１０５により選択され、そして、それら１６個の秘密の半分の選択が、図５に示すように、チャレンジ値に従って行われる。ここで、「index」は署名インデックス２１５である。
【０１３５】
加えて、変数「A」が以下のように設定される。即ち、「A = 0x00400000 + 0x100*index」であり、ここで、「index」は署名インデックス２１５である。即ち、「A」は、イメージテーブル２０２からのエレメント「y[16*index+1]」の論理アドレスである。例えば、もしも署名インデックス２１５が「0」であれば、「A」は「y[1]」３１１の論理アドレスである。署名インデックスが「1」であれば、「A」は「y[17]」３１５の論理アドレスであり、以下も同様である。
【０１３６】
ステップ６２１〜６２７では、１６個のイメージ「y[16*index+1]」、「y[16*index+2]」…「y[16*index+16]」から、丁度、８個のエレメント「y’[1]」…「y’[j]」…「y’[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]」として選択される。
【０１３７】
例えば、署名インデックスが「1」であるとして、「y’[1]」の選択を考える。「x’[1]=x[17]」が受信されれば、「y[18]」が選択される。しかしながら、「x’[1]=x[18]」であれば、「y[17]」が代わりに選択される。
【０１３８】
以下には、正しいイメージを選択するための手順が述べられる。ステップ６２２において、チャレンジの最右のビット、即ち、最小桁ビット（LSB）が、右移動によって抽出される。一方、チャレンジビットが「0」であれば、「x[16*index+2j-1]」が受信されたことを意味する。その結果として、「y[16*index+2j]」が必ず選択される。これは、ステップ６２６において、「0x10」を変数「A」に加算し、そして、「READ」メッセージをアドレス「A」と長さ「0x10」と共に送信することにより行われる。その後、「0x10」が変数「A」に加算される。ステップ６２７では、対応するイメージ値「y[16*index+2j]」が半導体メモリ１００から受信される。更に、受信された秘密「x[16*index+2j-1]」のハッシュ値と、受信されたイメージ「y[16*index+2j]」とが、以下のようにして、変数「H1」に連結される。
H1 = H1 || H( x’[j] ) || y’[j]
【０１３９】
もしも秘密値とイメージの値とが本物であれば、この演算の結果は、以下と等しくなる筈である。
【数５】
2010226276.tif 000007
【０１４０】
これは、「H(x[16*index+2j-1]) = y[16*index+2j-1]」が成り立つことによる。
【０１４１】
他方、チャレンジビットが「1」であれば、「x[16*index+2j]」が受信され、そして、「[16*index+2j-1]」が選択されなければならない。その結果として、ステップ６２４では、アドレス「A」と長さ「0x10」と共に、「READ」メッセージが半導体メモリ１００へ送信される。そして、「0x20」が、変数「A」に加算される。以前の場合と同様に、以下の演算がステップ６２５において行われる。
【数６】
2010226276.tif 000008
【０１４２】
再び、もしも受信した値が本物であれば、この演算の結果は、以下と等しくなる筈である。
【数７】
2010226276.tif 000009
【０１４３】
以上の手順を８回だけ繰り返した後、もしも全ての秘密値及びイメージ値が本物であれば、「H1」は以下と等しくなる筈である。
【数８】
2010226276.tif 000010
【０１４４】
換言すれば、「H1」は、１６個のイメージ値「y[16*index+1]」〜「y[16*index+16]」の連結である筈である。
【０１４５】
ステップ６３１において、「H1」のハッシュ値が計算される。以下の同等性が維持されることを思い出すこと。
【数９】
2010226276.tif 000011
結果として、もしも全ての受信された値が本物であれば、「H1」は「t[16384+index]」と等しくなる筈である。
【０１４６】
ステップ６３２では、変数「j」が「0x4000+index」に、又は、十進法で「16384+index」に設定される。
【０１４７】
ステップ６４１〜６４６では、ツリーテーブル２０３のエレメントが選択され、そして、半導体メモリ１００から抽出される。これらのエレメントは、ステップ６３１で計算された値「H1」を、ツリーテーブル「t[1]」３２１の先頭に関連付けることができる。この関連が有効性であれば、検証が成功したこととなるが、しかしながら、この関連が無効であることが明らかとなれば、検証は失敗となる。
【０１４８】
この関連は、ツリーテーブル２０３におけるエレメント間の関係、即ち、「t[i]=H(t[2i]||t[2i+1])」を利用している。最初に、「16384+index」は偶数の整数であるとする。それから、「t[16384+index+1]」が与えられれば、ノード「t[8192+index/2]」の値は、以下のように計算することが可能である。
【数１０】
2010226276.tif 000012
【０１４９】
同様に、もしも「16384+index」が奇数の整数であれば、もし「t[16384+index-1]」が与えられれば、「t[8192+(index-1)/2]」を以下のように計算することが可能である。
【数１１】
2010226276.tif 000013
【０１５０】
両方の場合において、ツリーにおいて１レベルだけ上に行くことが出来る。上記の手順を繰り返えすことにより、終には、全ての受信した値が本物である場合には、「H1」は、ツリーテーブル２０３の先頭である「t[1]」と等しい筈であり、これにより、ステップ６３１で計算したハッシュ値とツリーの先頭との間の関連を確立することとなる。
【０１５１】
以下に、ツリーデータを選択し、そして、抽出するための手順について述べる。初めに、「j」は「16384+index」に設定される。ステップ６４１では、「j」のパリティがチェックされる。
【０１５２】
もし「j」が奇数の整数である場合、ステップ６４３では、変数「A」が、「t[j-1]」のアドレスである「0x800000+0x10*(j-2)」に設定される。例えば、「index=1」であれば、初め、「j」は、奇数の整数「0x4001」、又は、十進法での「16385」と等しく、そして、「A」は以下と等しい。
【数１２】
2010226276.tif 000014
【０１５３】
これは、確かに、「t[16384]」３２５のアドレスである。
【０１５４】
それから、アドレス「A」及び長さ「0x10」と共に、「READ」メッセージが半導体メモリに送信され、半導体メモリは、ステップ６４４において、ツリーテーブル２０３の関連するエレメント「t[j-1]」を返送する。このエレメントは、変数「H2」内に格納される。
【０１５５】
その後、以下の演算、即ち「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」へアップデートされる。
【０１５６】
同様に、もしも「j」が偶数の整数であれば、ステップ６４５では、「A」が、「t[j+1]」のアドレスである「0x800000+0x10*j」に設定される。例えば、もしも「index=0」であれば、初め、「j」は偶数の整数「0x4000」、又は、十進法の「16384」と等しく、そして「A」は「0x840000」と等しい。これは、確かに、「t[16385]」３２６のアドレスである。
【０１５７】
それから、アドレス「A」と長さ「0x10」と共に、「READ」メッセージが送信され、そして、関連するエレメント「t[j+1]」が「H2」内に格納される。ステップ６４６では、演算「H1=H(H1||H2)」が行われる。「j」は偶数の整数であることから、「H2=t[j+1]」そして「H1=t[j]」であり、この計算の結果は、「t[j/2]=H(t[j]||t[j+1])」と等しくなる。最後に、「j」は右移動により「j/2」にアップデートされる。
【０１５８】
変数「j」は、上述した手順の各々の繰り返しにおいて、右に移動される。即ち、最終的には、「j」は、値「１」に到達する。この時点において、全ての受信した値が本物であれば、「H1」は、ツリーテーブル２０３の先頭である、「t[1]」３２１と等しい筈である。もしもそうであれば、全ての受信した値は、確かに、本物であり、そして、検証は、ステップ６５２において、成功裡に終了する。そうでない場合は、検証は、ステップ６５３において、失敗となる。
【０１５９】
本実施例においては、変数「j」は、当初は、厳密には「32768」よりも小さな整数である「16384+index」に設定される。その結果、丁度１４回の繰り返し、それにより、１４回の右移動の後に、変数「j」は「1」になる。換言すれば、本実施例では、ステップ６４２〜６４６において、丁度１４個のエレメントが、ステップ６３１において演算された値、即ち、「t[16384+index]」と、ツリー「t[1]」の根（ルート）との間の関連を確立するため、ツリーテーブル２０３から抽出される。
【０１６０】
上述した検証手順においては、ゲームマシンは８個の秘密値と、８個のイメージと、１４個のツリー値を入手し、そして、それらの秘密、イメージ、そしてツリー値は、非特許文献２に開示されたように、チャレンジの「Merkle」署名である。
【０１６１】
以下には、検証手順の一例が示される。
【０１６２】
署名インデックス２１５は「1」であり、そして、ゲームヘッダ２２０とテーブルツリー「t[1]」３２１の先頭は、ゲームマシン１２０にとって入手可能であるものとする。
【０１６３】
最初に、ゲームマシンが秘密値とイメージ値とを如何に入手し、そして、それらが如何に組み合わせられるについて述べる。
【０１６４】
ゲームマシンは、８ビットのチャレンジ（乱数）を発生し、このチャレンジの値の二進法での表現は「(11010001)」とする。従って、ゲームマシンは、メモリコントローラにより、チャレンジ値に従って選択される８個の秘密値「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]」を選択する。また、受信した秘密値のハッシュ値を計算し、そして、全てのものを以下のように連結する：
【数１３】
2010226276.tif 000015
【０１６５】
「y[i]=H(x[i])」であることから、上記の表現は、以下と等しい：
【数１４】
2010226276.tif 000016
【０１６６】
「H1」のハッシュ値を連結し、そして、「t[16385]=H(y[17]||…||y[32])」であることから、ゲームマシンは「H(H1)=t[16385]」を得る。
【０１６７】
次に、「t[16385]」と「t[1]」との間の関連の計算が説明される。初め、変数「j」は「16385」に等しい。
ステップ1: j=16385
【０１６８】
整数「16385」は奇数であり、それ故、「t[16384]」が半導体メモリから読み出される。さて、ゲームマシンは「H(t[16384||t[16385]]=t[8192])を計算することが出来る。
ステップ2: j=8192
【０１６９】
「8192」は偶数であり、「t[8193]」が半導体メモリから読み出され、そして、ゲームマシンは「H(t[8192]||t[8193])=t[4096]」を計算することが出来る。
ステップ3: j=4096
【０１７０】
「4096」は偶数であり、「t[4097]」が半導体メモリから読み出され、そして、ゲームマシンは「H(t[4096]||t[4097])=t[2048]」を計算することが出来る。
【０１７１】
この手順は、「j=2048」、「1024」、「512」、「256」、「128」、「64」、「32」、「16」、「8」、「4」、そして、「2」に対して、繰り返される。
ステップ14: j=2
【０１７２】
「2」は偶数であり、「t[3]」が半導体メモリから読み出され、そして、ゲームマシンが「H(t[2]||t[3])=t[1]」を計算する。
【０１７３】
ゲームマシンは、ツリーテーブルt[1]の先頭を再計算することができ、そして、検証が首尾よく終了する。
＜通信プロトコル＞
【０１７４】
図７は、ゲームマシン１２０と半導体メモリ１００との間の通信プロトコルのブロックダイアグラムである。
【０１７５】
図７の左側のブロックは、半導体メモリ１００により実行される作動であり、他方、図の右側のブロックは、ゲームマシン１２０によって実行される作動である。中央のブロックは、ゲームマシンと半導体メモリとの間で交されるメッセージである。
【０１７６】
ゲームマシンは、暗号化ヘッダ２１０への要求７０１を送信することによりプロトコルを開始する。この要求は、暗号化ヘッダのアドレス、即ち、「0x1000000」と、そのサイズ、即ち、「0x9402」又は二進表現で「37,890」バイトとを含んだ「READ」メッセージである。半導体メモリは、完全に暗号化ヘッダ２１０を送ることによって応答する。ステップ３０２では、ゲームマシンが、以下のサブステップを行うことによって、暗号化ヘッダ２１０を検証する。
−  システムパラメータ２１１がサポートされていることを検証する。
−  ルート証明書２１２を検証する。ルート証明書が、少なくとも、ゲーム公開鍵とデジタル署名とを含んでいる。即ち、ゲームマシンは、フラッシュメモリユニット１４２内に格納されているルート公開鍵によって、ルート証明書内に封入されたデジタル署名を検証し、もって、ゲーム公開鍵の有効性を確定する。
−  ゲーム証明書２１３を検証する。ゲーム証明書は、少なくとも、公開鍵２１４とそのためのデジタル署名を含んでいる。即ち、ゲームマシンは、ルート証明書２１２からの公開鍵により、ゲーム証明書２１３内に封入されたデジタル署名を検証し、もって、公開鍵２１４の有効性を確定する。
−  公開鍵２１４の使用がファームウェアによって禁止されていないかをチェックする。もしも、本当に、公開鍵が危殆化されていれば、それはもう使用されるべきではなく、これが、ファームウェアのアップデートが危殆化されたものとして知られた公開鍵のリストを含んでいる理由である。
【０１７７】
上記のステップの一又はそれ以上が失敗すると、プロトコルは中断される。全てのステップが成功裡に実行されると、公開鍵２１４は有効となる。そこから、ゲームマシン１２０は、公開鍵２１４と署名インデックス２１５とを、後の使用のため、ＲＡＭユニット１４１内に保持する。
【０１７８】
ステップ７１１は認証プロトコルであり、その中では、ゲームマシンと半導体メモリとが幾つかのメッセージを交換する。ゲームマシンにより行われる作動は、既に、図６を参照して述べられており、他方、半導体メモリにより行われる作動は、図４に記載したハードウェアユニットを利用し、既に、図５を参照して述べられている。
【０１７９】
一旦、認証が首尾よく終了すると、ステップ７１３では、フラッシュメモリ１４２内に格納された解読鍵１６３を使用して、ゲーム鍵２２２がゲームマシン１２０によって解読される。ゲーム鍵２２２を使用して、プログラムのエントリポイント２２３もまた、ゲームマシンによって解読される。
【０１８０】
次に、ステップ７２１では、第１のセクタ２４１とそのハッシュ値２２４とが、ゲーム鍵２２２により解読される。第１のセクタがファームウェアのアップデートを格納していることを思い出すこと。ステップ７２２では、ファームウェアのアップデートの有効性が、以下のようにしてチェックされる。
−  ゲームマシン１２０が、第１のセクタ２４１のハッシュ値を計算し、そして、それをゲームヘッダ内に格納されているハッシュ値２２４と比較する。二つのハッシュ値は等しい筈である。
−  ファームウェアのアップデートはデジタル署名を含んでいる。それ故、ゲームマシン１２０は、ルート公開鍵１６２によりデジタル署名を検証する。
【０１８１】
上述したチェックの一つが失敗すると、プロトコルは中断される。ステップ７２３では、ゲームマシンは、ファームウェアのアップデートがフラッシュメモリユニット１４２内に格納されたファームウェア１６１よりも新しいものであることを検証する。もしもそうであれば、ステップ７２４において、古いファームウェアが新しいものと交換される。そうでなければ、ゲームマシンはファームウェアのアップデートを無視する。
【０１８２】
そこから、プログラムデータは、半導体メモリからゲームマシンへ転送が可能となる。解読プログラムのエントリポイント２２３は、プログラム開始のアドレスを格納しており、このアドレスは、ゲームプログラム領域２４０における半導体メモリの１，０２４個のセクタの一つに対応している。即ち、ゲームマシンは、関連するセクタに対する要求７３１を、セクタデータ７３２を転送する半導体メモリへ送信する。セクタデータが解読され、それ故、ゲームマシンは、ステップ７３３において、ゲーム鍵２２２を使用して、セクタを解読する。加えて、ゲームヘッダ２２０は、解読されたセクタのハッシュ値を格納しており、この値はゲーム鍵２２２により解読される。
【０１８３】
解読されたセクタデータの有効性をチェックするため、ゲームマシンはそのハッシュ値を計算し、そして、それを、ゲームヘッダ２２０からの解読されたハッシュ値と比較する。もしも二つのハッシュ値が等しければ、セクタデータは有効であり、ステップ７３５において、セクタ内に格納されたプログラムが実行される。二つのハッシュ値が異なっていれば、これはセクタデータが変更されている可能性があることを意味しており、プログラムは実行されない。
【０１８４】
プログラムは、幾つかのセクタに広がっていてもよい。従って、新たなデータが要求されるそれぞれの時点で、新たなセクタが転送され、そして、ステップ７３１〜７３６がゲームマシンによって、再度、実行される。
【０１８５】
従って、以下の効果が得られる。
【０１８６】
半導体メモリは、その秘密値の半分しか明かさないことから、かかる秘密値を多数集めても、悪意の者は、異なるチャレンジに対し、正しい回答を発行することは出来ない。実際、異なるチャレンジは、半導体メモリによって明かされていない少なくとも一つの秘密を知っていることを要求する。
【０１８７】
更に、悪意の者は、認証を成功した後は、プログラムを挿入することは出来ない。実際、そのように試みても、挿入されたプログラムのハッシュ値は、ゲームヘッダ内のセクタのハッシュ値の何れとも一致することはない。
【０１８８】
最後に、ゲームマシンは、認証プロトコルを実行するためのルート公開鍵を知ることをだけを必要とする。結果として、如何なるゲームマシンも、共通鍵を共有することなく、如何なる半導体メモリでも認証することができる。
＜＜実施例２＞＞
【０１８９】
第２に、暗号化エンジンを更に備えた半導体メモリと、そして、セキュリティーチップを更に備えたゲームマシンに焦点を当てた記述を示す。
【０１９０】
本発明の第１の実施例により得られるそれらの効果に加え、下記の記載による以下の効果が得られる。半導体メモリは、秘密値とイメージ値とを再生成できる暗号化エンジンを備えている。結果として、それらの値を不揮発性メモリ内に格納する必要はなく、たとえ悪意の者がメモリの内容に直接アクセスしても、その秘密値とイメージ値とは明かされることはない。更に、ゲームマシンはセキュリティーチップを備えている。それ故、認証を非作動状態にし、又は、調整するため、悪意の者がゲームマシンのファームウェアを改造しようとしても、かかる改造は、セキュリティーチップにより検出できる。
【０１９１】
図８は、ゲームシステムのハードウェアダイアグラムであり、ゲームマシン８２０と、そして、ゲームプログラムを格納するための半導体メモリ８００を備えている。以下では、図１を参照して述べたゲームシステムとの違いが強調される。
【０１９２】
半導体メモリ８００は、ＲＯＭユニット１０３と、ＥＥＰＲＯＭユニット１０２と、そして、バスに結合されたメモリコントローラ８０１を有している。図１を参照して述べたメモリコントローラとは異なり、このメモリコントローラは、プログラム可能な（programmable）ＲＯＭ(PROM)と、１２８ビットの鍵「A」と１２８ビットの平文「B」とにより、「AESA(B)」のようなＡＥＳ暗号化を計算することが出来る、ＡＥＳエンジンとを備えている。
【０１９３】
図１を参照して上述したゲームマシンと比較して、このゲームマシン８２０は、更に、セキュリティーチップ８２１を備えている。後に、このセキュリティーチップ８２１の詳細については、図１２を参照しながら述べる。フラッシュメモリユニット１４２はファームウェア１６１を格納しているが、しかしながら、ルート公開鍵１６２又は解読鍵１６３を格納することは要求されない。
【０１９４】
図９は、半導体メモリ８００内における論理メモリマッピングのブロックダイアグラムである。
【０１９５】
図２を参照して述べた論理メモリマッピングとは異なり、本実施例では、如何なる特定の限定をも意図するものではないが、半導体メモリ８００は、秘密テーブル２０１やイメージテーブル２０２を格納していない。更に、ツリーテーブル２０３、システムパラメータ２１１、ルート証明書２１２、ゲーム証明書２１３、そして、公開鍵２１４は、メモリコントローラ８０１のＰＲＯＭユニット８０２内において物理的に配置されている。その結果、ＲＯＭユニット１０３は、単に、ゲームヘッダ２２０とゲームプログラム２４０とを格納している。ゲームヘッダ２２０とゲームプログラム２４０とを格納するのは、同様のゲームを格納している全て半導体メモリにとっては同様であることから、ＲＯＭユニット１０３は、マスクＲＯＭの技術、又は、オプションとして１回だけプログラム可能なＲＯＭの技術によって、実現することができる。
【０１９６】
ゲームプログラム２４０は幾つかのセクタに亘って広がっていてもよく、しかしながら、第１のセクタ９４１は、データアップデートのために取って置かれる。このデータアップデートは、ファームウェア１６１の最新のバージョンと、セキュリティーチップ８２１により要求されるデータと、そして、そのデジタル署名とを含んでいる。
＜メモリコントローラ＞
【０１９７】
図１０は、半導体メモリ８００のメモリコントローラ８０１のハードウェアダイアグラムである。
【０１９８】
以下、本メモリコントローラと、図４を参照して既に述べたメモリコントローラとの違いを強調して説明する。
【０１９９】
制御ユニット１０１０は、更に、シフトユニット１０１２、チャレンジレジスタ１０１１、そして、インデックスレジスタ「j」１０１３を備えている。
【０２００】
加えて、メモリコントローラ１０８は、更に、ツリーテーブル２０３と暗号化ヘッダ２１０とを格納したＰＲＯＭユニット８０２を備えている。ＰＲＯＭユニットは、メモリコントローラ８０１、８ビットデータバス、及び、ＶＣＣ接続と、クロック接続と、ＰＲＯＭチップセレクト(PROM CS)接続と、そして、３２ビットアドレスバスとを含んでいる３５ビットの制御バスと、結合されている。
【０２０１】
メモリコントローラは、更に、１８ビットカウンタであるカウンタレジスタ１０２１を備えている。カウンタは、その長さを１２８ビットまで伸ばすため、百十の零ビット１０２２によってパッディングされ（padded）ている。署名カウンタ１０２４は、カウンタ１０２１の１４個の最左側ビットから構成されており、他方、秘密カウンタ１０２３は、カウンタ１０２１の４個の最右側ビットから構成されている。署名インデックス２１５は、その長さを１６ビットまで伸ばすため、零ビット１０２５によりパッディングされた署名カウンタ１０２４から構成されている。１６ビットの署名インデックス２１５は制御ユニットと結合されており、１８ビットカウンタ１０２１は加算器１０２６と結合され、そして、零ビットでパッディングされたカウンタはマルチプレクサ１０３３に結合されている。
【０２０２】
加算器１０２６は二つの入力を有しており、一つの８ビット入力はカウンタ１０２１と、そして、その第２の１ビット入力を介して、制御ユニット４１０と結合されている。第２の１ビット入力が制御ユニット１０１０により「1」に設定されると、カウンタ１０２１がインクリメントされる。このインクリメント動作中にオーバフローが生じた場合、１ビットのオーバフロー信号がカウンタユニット１０１０へ転送される。オーバフローは、カウンタ１０２１がその最大値、即ち、「0x3FFFF」、又は、十進法で表すと「262143」に達した時に生じることから、制御ユニット１０１０は、永続的休止状態に入り、そして、その後に来るメッセージを拒否する。
【０２０３】
如何なる特定の限定をも意図するものではないが、本実施例では、ハッシュ関数「H」は、ＡＥＳと排他的ＯＲ動作により達成されるものとする。これに替えて、異なるブロック暗号器とすること、又は、「MD5」や「SHA-1」など、異なるハッシュ関数とすることもできる。
【０２０４】
即ち、メモリコントローラは、更に、ＡＥＳエンジン８０３と排他的ＯＲユニット１０３２を備えている。ＡＥＳエンジンは、右側の平文入力と、頂上の鍵入力との、二つの１２８ビット入力と、そして、左側の暗号文出力である、１２８ビットの出力とを有している。ＡＥＳエンジンは、マルチプレクサ１０３３、１０３４、１０３５になる構成によって、モード「0」とモード「1」と呼ばれる二つのモードの動作をサポートしている。
【０２０５】
モード「1」では、ＡＥＳエンジンは、１２８ビットの秘密のシード（seed）「s」を鍵入力とし、そして、平文入力をカウンタ１０２１の入力とする動作「x = AESs(counter)」を行う。モード「1」を起動するため、それらの「1」とラベルが貼られた入力を選択するよう、制御ユニットがマルチプレクサ１０３３、１０３４、１０３５を設定する。より詳細には、マルチプレクサ１０３３がモード「1」に設定されると、カウンタ１０２１が、ＡＥＳエンジンの平文入力に結合される。マルチプレクサ１０３４がモード「1」に設定されると、シード１０４１が、ＡＥＳエンジンの鍵入力に結合される。そして、マルチプレクサ１０３５がモード「1」に設定されると、排他的ＯＲユニット１０３２がオール零レジスタ（all-zero register）１０４３に結合される。その結果、「x(+)0 =x」であることから、出力レジスタ１０４４が、動作「AESs(counter)」の結果を格納することとなる。
【０２０６】
モード「0」では、ＡＥＳエンジンは、平文入力が初期ベクトル「IV」１０４２であり、そして、鍵入力が、出力レジスタ１０４４に格納された以前のＡＥＳ動作の結果、「x」である、動作「y = AESx(IV)(+)IV」を行う。モード「0」を起動するため、マルチプレクサ１０３３、１０３４、１０３５は、制御ユニット１０１０によって、それらの「0」とラベルが貼られた入力を選択するよう、適切に構成される。マルチプレクサ１０３３がモード「0」に設定されると、「IV」１０４２がＡＥＳエンジンの平文入力に結合される。マルチプレクサ１０３４がモード「0」に設定されると、出力レジスタ１０４２がＡＥＳエンジンの鍵入力に結合される。そして、マルチプレクサ１０３５がモード「0」に設定されると、排他的ＯＲユニット１０３２が「IV」１０４２と結合される。その結果、出力レジスタ１０４４は、動作「AESx(IV)(+)IV」の結果を格納することとなる。
【０２０７】
ＡＥＳエンジン８０３の二つのモードにより、メモリコントローラは乱数「x」と共に、それらのイメージ「y=H(x)」を計算することが出来る。「x」値は、秘密値の役割を果たし、他方、「y」値は、認証プロトコルにおけるイメージ値の役割を果たすことから、不揮発性メモリ内に秘密テーブルとイメージテーブルを格納するという要求を排除することができる。加えて、本実施例の秘密鍵（private key）は、それからＡＥＳエンジンのモード「1」を利用して秘密値が取り出され、シード１０４１となっている。
＜メモリコントローラの機能の詳細＞
【０２０８】
図１１は、メモリコントローラ８０１の機能の詳細を示すブロックダイアグラムである。
【０２０９】
メモリコントローラ８０１は、既に図５を参照して述べたメモリコントローラ１０５と同様の方法により、ゲームマシン８２０により送り出された「READ」メッセージと「WRITE」メッセージとを処理する。しかしながら、「READ」メッセージの場合、半導体メモリ８０１がＰＲＯＭユニット８０２を更に備えていることから、以下のステップが行われる。ステップ１１４３では、ＰＲＯＭユニット１０２がその「PROM CS」入力を介して起動され、そして物理ＰＲＯＭアドレスが制御ユニット１０１０によって送出される。従って、ＰＲＯＭユニットは、１バイトのデータを、当該バイトを通信ピン１１０〜１１７を介してゲームマシン８２０へ送信する制御ユニットに対し、送出する。加えて、アドレスレジスタ４１２がインクリメントされ、そして、長さレジスタがデクリメントされる。長さレジスタ内に格納された値が零でない限りは、ステップ１１４３が繰り返される。
【０２１０】
「CHALLENGE」メッセージが処理される方法も、また、異なっている。メモリコントローラは、以下の手順を８回繰り返し、各繰り返しでは、チャレンジ１０１１に応じて、一つの秘密値「x’[j]」及び一つのイメージ値「y’[j+1]」を、又は、一つのイメージ値「y’[j]」及び一つの秘密値「x’[j+1]」を発生する。
【０２１１】
ステップ１１６４では、チャレンジ１０１１は、シフトユニット１０１２により、１ビットだけ右に移動される。この処理では、チャレンジの最右側ビット(LSB)がチェックされる。
【０２１２】
チャレンジビットが「0」であれば、メモリコントローラは、ステップ１１６６において、「x’[j]」と「y’[j+1]」を計算する。より詳細には、「x’[j]=AESs(counter)」、即ち、制御ユニット１０１０が、ＡＥＳエンジン８０３のモード「1」を起動するように、マルチプレクサ１０３３、１０３４、１０３５を設定する。ＡＥＳエンジンが設定された後、出力レジスタ１０４４は、ゲームマシン８２０へ送信された「x’[j]」を格納する。次に、カウンタ１０２１が、加算器１０２６を使用することによりインクリメントされ、そして、モード「1」が再び起動される。その結果、出力レジスタが「x’[j+1]」を格納する。「y’[j+1]」を計算するため、モード「0」が起動される。ＡＥＳエンジンが設定された後、出力レジスタ１０４４は、ゲームマシンへ送信された「y’[j+1]=AESx[j+1](IV)(+)IV」を格納する。秘密「x’[j+1]」は破棄されていることから、明らかになっていないことに留意のこと。
【０２１３】
同様に、チャレンジビットが「1」の場合、メモリコントローラは、モード「1」を起動することにより「y’[j]」と「x’[j+1]」を計算し、モード「0」で「y’[j]」を送信し、それから、モード「0」を起動して「x’[j+1]」を送信する。同様に、秘密「x’[j]」は破棄される。
＜「CHALLENGE」メッセージの処理の一例＞
【０２１４】
以下、「CHALLENGE」メッセージの処理の一例を述べる。
【０２１５】
メモリコントローラ８０１は、二進法表現で「(11010001)」と表現されるデータペイロードと共に「CHALLENGE」メッセージを受信するものとする。更に、初期において、カウンタ１０２１は１８ビット値「0x00010」を含んでいるものとする。より詳細には、署名インデックスは「1」であり、そして、秘密カウンタは「0」である。
【０２１６】
第１のチャレンジビットは「1」であることから、ＡＥＳエンジンはモード「1」で起動される。従って、出力レジスタ１０４４は「x’[1]=AESs(0x10)」を格納する。次に、モード「0」が起動される、そして、出力レジスタが、ゲームマシン８２０へ送出された「y’[1]=AESx’[1](IV)(+)IV」を格納する。その後、カウンタ１０２１が「0x00011」にインクリメントされ、モード「1」が起動され、よって、出力レジスタ１０４４は、ゲームマシン８２０へ送出された「x’[2]=AESs(0x11)」を格納する。
【０２１７】
第２のチャレンジビットは「0」であり、それ故、ＡＥＳエンジンは「x’[3]=AESs(0x12)」、「x’[4]=AESs(0x13)」、そして「y’[4]= AESx’[4](IV)(+)IV」を計算する。「x’[3]」と「y’[4]」が、ゲームマシン８２０へ送出される。同様に、第３及び第４のチャレンジビットは「0」であり、それ故、「x’[5]」、「y’[6]」、「x’[7]」、そして、「y’[8]」が発送される。この時点で、カウンタ値１０２１は「0x18」である。
【０２１８】
次のチャレンジビットは「1」、「0」、「1」、「１」であることから、メモリコントローラ８０１は、「y’[9]」、「x’[10]」、「x’[11]」、「y’[12]」、「y’[13]」、「x’[14]」、「y’[15]」、「x’[16]」を計算して発送する。全ての動作が完了した後は、カウンタ値１０２１は「0x20」である。
＜セキュリティーチップ＞
【０２１９】
図１２は、ゲームマシン８２０のセキュリティーチップのハードウェアダイアグラムである。
【０２２０】
セキュリティーチップ８２１は、スマートカードマイクロコントローラ（smartcard microcontroller）として、又は、TPMチップ（trusted computing module）である、一般的には、耐タンパー性を持つチップ（tamper-resistant chip）として実現することができる。本実施例では、セキュリティーチップは、三つの異なるメモリユニット、即ち、ＲＯＭユニット１２１０、ＥＥＰＲＯＭユニット１２２０、そして、ＲＡＭユニット１２３０を備えている。
【０２２１】
ＲＯＭユニット１２１０は、「OS」１２１１でもよいプログラムと、例えば、ＡＥＳ暗号化又はＲＳＡ動作のような低レベルの安全機能性をインターフェイス接続する高レベル機能１２１２と、図１３を参照しながら詳細に述べられる認証プロトコル１２１３のプログラムと、そして、パターンマッチングプログラム１２１４とを格納している。これらのプログラムは、全ての商品化されたゲームマシンにとって同じであってもよいことから、ＲＯＭユニット１２１０はマスクＲＯＭ技術によって実現することができる。
【０２２２】
他方、ＥＥＰＲＯＭユニット１２２０は、もし必要であれば修正され、カスタマイズされ、又は、アップデートが可能なデータを格納する。より詳細には、ファームハッシュ１２２１、ルート公開鍵１２２２、解読鍵１２２３、パターンファイル１２２４、ブラックリスト１２２５、そして、パッチ１２２６を格納する。ファームハッシュ１２２１は、ゲームマシン８２０のフラッシュメモリユニット１４２内に格納されたファームウェア１６１のハッシュ値である。ルート公開鍵１２２２は、半導体メモリ８００がゲームマシン８２０と結合した場合に、ルート証明書２１２を有効にするために使用された公開鍵である。解読鍵１２２３は、半導体メモリ８００がゲームマシン８２０と結合した場合に、ゲーム鍵２２２を解読するために使用可能な鍵である。パターンファイル１２２４は、部分的に悪意のあるコードやプログラムバグのリストを格納する。ブラックリスト１２２５は、危殆化されたことが知られた公開鍵のリストである。最後に、パッチ１２２６は、ゲームにおける既知のバグをパッチするための部分的なコードのリストからなる。
【０２２３】
ＲＡＭユニット１２３０は、プログラムの実行中に発生したテンポラリデータや変数１２３１を格納する。
【０２２４】
セキュリティーチップ８２１は、また、三つの演算ユニット、即ち、ＣＰＵ１２４１、ＡＥＳエンジン１２４２、ＲＳＡエンジン１２４３と、そして、乱数発生器(RNG)１２４５を含んでいる。
【０２２５】
中央演算ユニット(CPU)１２４１はマイクロプロセッサであり、例えば、プログラムのように、ＲＯＭユニット１２１０内に格納されたものを、中間結果のためのＲＡＭユニット１２３０と、そして、カスタマイズされたパラメータを処理し又は長時間結果を格納するためのＥＥＰＲＯＭユニットとを利用して実行する。
【０２２６】
ＡＥＳエンジン１２４２は、暗号化に特化されたハードウェアコプロセッサである。コプロセッサは、ビットストリング「A」を鍵としてビットストリング「B」の暗号化を参照するＡＥＳ演算「AESA(B)」を、高速かつ低電力消費で、実行することができる。ＣＰＵ１２４１と接続して使用した場合、ＡＥＳエンジン１２４３は、データのハッシュを計算する（hashing data）などのより高度な演算は実現可能となる。例えば、１２８ビットの初期ベクトル「IV」と２５６ビットのメッセージ「x=x[1]||x[2]」とが与えられると、１２８ビットのハッシュ値「y=H(x)」が、以下の二つのステップにおいて計算され、即ち、「y’=AESx[1](IV)(+)IV」と「y=AESx[2](y’)(+)y’」、ここでは、ＡＥＳ暗号化は、ＡＥＳエンジン１２４２により行われ、排他的ＯＲ「(+)」は、ＣＰＵ１２４１により行われ、そして、中間結果「y’」はＲＡＭ１２３０内に格納される。
【０２２７】
ＲＳＡエンジン１２４３は、ＲＳＡ演算に特化したハードウェアコプロセッサである。特に、ＲＳＡエンジン１２４３は、ＥＥＰＲＯＭ１２２０内に格納されたルート公開鍵１２２２を使って、ルート証明書２１２、ゲーム証明書２１３、又は、アップデートデータ９４１内に封入されているＲＳＡ署名の検証が可能である。
【０２２８】
乱数発生器１２４５は、チャレンジとして使用できる乱数を発生する。
【０２２９】
最後に、セキュリティーチップ８２１内のユニットは内部バス１２５１に結合されており、セキュリティーチップ８２１は、バス１５１により、ゲームマシン８２０の他の電子コンポーネントに結合されている。他のコンポーネントとの通信は、入／出力(I/O)インターフェイス１２４４により管理されている。
＜検証プロトコル＞
【０２３０】
図１３は、ゲームマシン８２０によって行われる検証プロトコル（verification protocol）の機能詳細を表すブロックダイアグラムである。如何なる特定の限定をも意図するものではないが、この実施例では、検証プロトコルは、セキュリティーチップ８２１のＲＯＭユニット１２１０内に格納されたソフトウェアプログラムとして実現され、ＡＥＳエンジン１２４２とＲＳＡエンジン１２４３を使って、ＣＰＵ１２４１により実行されるものとする。
【０２３１】
以下に述べる検証プロトコルは、既に図１を参照して述べたものとは、幾つかの点で異なっている。相違点の一つは、どのようにして、「CHALLENGE」メッセージを半導体メモリ８００に送信した後に受信されたデータが処理されるかである。
【０２３２】
ステップ１３１２では、ゲームマシンが、半導体メモリからの１６個の値、「s[1]」…「s[16]」を受信する。最初、インデックス「j」は「1」に、そして、ビットストリング「H1」は、空のビットストリングに設定されている。次に、ステップ１３２１〜１３２６が８回繰り返される。
【０２３３】
ステップ１３２２では、セキュリティーチップ８２１のＣＰＵ１２４１によって行われる右移動動作を利用して、チャレンジの最右側のビットが抽出される。このチャレンジビット(LSB)が「0」であれば、受信された「s[j]」は「x’[j]」である筈であり、そして、「s[j+1]」は「y’[j+1]」である筈である。それ故、ステップ１３２６では、ＡＥＳエンジン１２４２とＣＰＵ１２４１とを使って、ハッシュ値「y’[j]」が「y’[j]=AESs[j](IV)(+)IV」として計算される。本実施例で使われるハッシュ関数「H」の定義によれば、以下の等式が満足されることに留意のこと。
【数１５】
2010226276.tif 000017
【０２３４】
その後、ビットストリング「y’[j]」と「s[j+1]」とが「H1」に添えられ、そして、カウンタ「j」が二つインクリメントされる。
【０２３５】
同様にして、チャレンジビットが「1」であれば、受信された「s[j]」は「y’[j]」であり、他方、「s[j+1]」であれば「x’[j+1]」である。即ち、ステップ１２３６では、「y’[j+1]」が「AESs[j+1](IV)(+)IV = H(x’[j+1])」として計算される。そして、ビットストリング「s[j]」と「y’[j+1]」が「H1」に添えられ、そして、カウンタ「j」が二つインクリメントされる。
【０２３６】
上述のステップを８回繰り返した後、そして、受信されたデータ「s[1],…,s[16]」が本物であるとすると、ビットストリング「H1」は「y’[1]||y’[2]||」…||y’[16]」と等しい筈である。ステップ１３４１では、ＡＥＳエンジン１２４２を使用して、「H1」のハッシュ値が計算される。ステップ６４１、６４２、１３４３〜１３４６は、ＰＲＯＭ８０２内に配置されたツリーテーブル２０３からツリーデータを抽出することを狙ったものである。それらのステップは、ツリーテーブル２０３の論理アドレスが「0x0」から開始することから、アドレス「A」がステップ１３４３においては「(j-2)*0x10」として、そして、ステップ１３４３においては「j*0x10」として、簡単に、ＣＰＵ１２４１により計算されるということを除き、基本的には、既に図６を参照して述べたステップと同様である。ステップ１３４４では、ハッシュ値「H(H2||H1)」が、二つのステップにより、ＣＰＵ１２４１とＡＥＳエンジン１２４２とを使って、以下のように計算される、最初に、「H1’ = AESH2(IV)(+)IV」が計算され、そして、「H1 = AESH1(H1’)(+)H1’」が計算される。
【０２３７】
ステップ６４１、６４２、１３４３、及び１３４６を１４回繰り返した後、そして、全ての受信されたデータが本物であるとすると、セキュリティーチップは、ツリーテーブル「t[1]」３２１の先頭を再計算することができ、そして検証は成功となる。もしも再計算されたデータがツリーテーブルの先頭と異なっていれば、検証は失敗となる。
＜通信プロトコル＞
【０２３８】
図１４は、ゲームマシン１２０と半導体メモリ１００との間の通信プロトコルのブロックダイアグラムである。
【０２３９】
図１４の左側のブロックは、半導体メモリ８００により実行される作動であり、他方、右側のブロックは、ゲームマシン８２０により実行される作動である。中央のブロックは、ゲームマシンと半導体メモリとの間で交わされるメッセージである。
【０２４０】
先に図７を参照して述べた通信プロトコルは、本実施例の通信プロトコルとは、幾つかの点で異なっている。これらの相異は、半導体メモリ８００がＡＥＳエンジン１２４２を備えていること、そして、ゲームマシン８２０がセキュリティーチップ８２１を備えているという事実に起因するものである。これらのユニットのおかげで、通信プロトコルは、以下のような方法により強化できる。
【０２４１】
ゲームマシン８２０がスイッチ１３９により給電されると、ファームウェア１６１がＲＡＭユニット１４１にロードされ、そして、ＣＰＵ１４３によって実行される前に、セキュリティーチップ８２１が、ステップ１４０１と１４０２においてその完全性を検証する。より詳細には、ステップ１４０１において、ファームウェアのハッシュ値が、ＡＥＳエンジン１２４２とセキュリティーチップ１２４１のＣＰＵを使って計算される。このハッシュ値は、セキュリティーチップ８２１のＥＥＰＲＯＭユニット１２２０内に格納されたファームウェア１２２１のハッシュ値と比較される。もしも、それらが一致しなければ、ファームウェアは非合法に修正されていることを意味し、この場合、ゲームマシンはスタートとしない。もしもファームウェアがその完全性のチェックを通過すれば、ＲＡＭ１４１内にロードされ、そして、ＣＰＵ１４３によって実行される。
【０２４２】
次に、暗号化ヘッダ２１０が、半導体メモリ８００から入手される。暗号化ヘッダの有効性は、セキュリティーチップにより、以下のようにしてチェックされる。
−  システムパラメータ２１１がサポートされていることを、セキュリティーチップが検証する。
−  ルート公開鍵１２２２により、ルート証明書２１２を検証する。証明書内に封入された署名がＲＳＡエンジン１２４３を使用して検証され、それにより、ゲーム公開鍵２１４の有効性を断定する。
−  ルート証明書２１２内に封入されたゲーム公開鍵によってゲーム証明書２１３を検証する。ゲーム証明書内に封入されている署名は、ＲＳＡエンジン１２４３を使用して検証され、これによって、ゲーム公開鍵２１４の有効性を断定する。
−  公開鍵２１４の使用が、危殆化された公開鍵のブラックリスト１２２５内に存在しないことをチェックする。
【０２４３】
暗号化ヘッダ２１０が有効であれば、先に図１０、１１、及び、１２を参照して述べた認証プロトコルが、ステップ１４１１で実行される。成功裡の結果の後、ステップ１４１３では、ＡＥＳエンジン１２４２により、解読鍵１２２３を使ってゲーム鍵２２２が解読され、そして、ＡＥＳエンジン１２４２によって、解読されたゲーム鍵２２２を使って、プログラムのエントリポイント２２３が解読される。
【０２４４】
ゲームプログラムの最初のセクタ９４１が、データのアップデートのために保存されていることを思い出すこと。ステップ１４２１では、第１のセクタ９４１とそのハッシュ値２２４が、ＡＥＳエンジン１２４２により、ゲーム鍵２２２を使って解読される。ステップ１４２２では、第１のセクタ９４１の完全性が、セキュリティーチップ８２１によって、以下のように検証される。
−  第１のセクタのハッシュ値がＡＥＳエンジン１２４２を使って計算され、そして、解読されたハッシュ値と比較される。等しくない場合には、データのアップデートが非合法的に修正されている。
−  第１のセクタは、ＲＳＡエンジン１２４３と、ルート公開鍵１２２２とを使って検証したデジタル署名とを含んでいる。デジタル署名の有効性が、データアップデート９１４の完全性を保障する。
【０２４５】
しかしながら、ファームウェア１６１及び／又はセキュリティーチップ８２１内に格納されたデータが、既にアップデートされていることもある。この場合、データアップデート９４１は廃棄される。アップデートが要求されると、ステップ１４２４において実行され、即ち、ファームウェアがより新たなバージョンに取り替えられ、そのハッシュ値１２２１がＥＥＰＲＯＭ１２２０内に格納され、そして、アップデートされたパターンファイル１２２４又はアップデートされたブラックリスト１２２５など、追加データがＥＥＰＲＯＭ１２２０内にコピーされる。
【０２４６】
次に、メインプログラムが半導体メモリから転送される。ゲームプログラムは暗号化されていることから、ステップ１４３３では、ＡＥＳエンジン１２４２により、ゲーム鍵２２２を使ってゲームプログラムが解読される。同様にして、ゲームヘッダ２２０内に格納したセクタのハッシュ値が解読される。転送されたセクタからのデータを有効にするために、ステップ１４３４においては、以下のタスクが、セキュリティーチップ８２１によって行われる。
−  セクタのハッシュ値が、ＡＥＳエンジンを使用することによって計算される。計算されたハッシュ値が、ゲームヘッダ２２０内に格納されたハッシュ値と異なっていれば、セクタデータは非合法的に修正されている。
−  セクタデータは、デジタル署名を含んでおり、このデジタル署名が、ルート公開鍵１２２２とＲＳＡエンジン１２４３を用いて検証される。検証が成功の場合には、セクタの完全性が保障される。
−  解読されたセクタはパターンファイル１２２４の要素と比較される。もしも一致しているとされれば、セクタデータは、バグ又は悪意のプログラムを含んでいる。この場合、セキュリティーチップ８２１は、パッチ１１２６内の訂正された部分的なプログラムを探す。パッチ（replacement）も見つからなければ、プログラムの実行が停止される。
【０２４７】
もしもセクタの完全性が断定されたとすれば、ステップ７３５において、セクタ内に格納されたプログラムがＣＰＵ１４３により実行される。半導体メモリ８００からもっと多くのデータが必要であれば、上述したステップが繰り返される。
【０２４８】
さて、好適な実施例によって得られる効果について、以下に、簡単に述べる。
【０２４９】
秘密鍵（private key）を知らなくとも、チャレンジの公開鍵やデジタル署名を利用し、コンピュータマシンは、原品である格納媒体を偽造品から区別することができる。更に、公開鍵を利用して、デジタルデータの有効性をチェックできることから、非合法プログラムを挿入することはできない。その結果、本発明は、デジタルデータの認証されていないコピーの利用を防止する。
【０２５０】
本発明になる幾つかの実施例について示しかつ述べたが、開示された実施例は、本発明の範囲から逸脱することなく変更や修正がされうるものであることが理解されよう。それ故、ここに示され、かつ、述べられた詳細によって縛られることはなく、しかしながら、添えられた請求項の範囲内に入ることとなる、かかる変更や修正の全てがカバーされる。
【符号の説明】
【０２５１】
１００…半導体メモリ、不揮発性のメモリユニット…１０２、読み出し専用不揮発性のメモリユニット…１０３、１０４…バス、メモリコントローラ…１０５、ピン…１０６〜１１７、１２０…ゲームマシン、１２２…方向性パッド、１２３…ボタン、１２４…液晶スクリーン、１２５…スピーカ、１３８…空洞部、１３９…オン／オフスイッチ、１２６〜１３７…コンタクト、１４１…ＲＡＭ、１４２…フラッシュメモリユニット、１４３…ＣＰＵ、入出力インターフェイスユニット…１４４、１４５…ビデオコントローラ、１４６…サウンドコントローラ、１４７…入力制御ユニット１４８…電池、１６１…ファームウェア、１６２…ルート公開鍵、１６３…解読鍵。
【図１】
2010226276.tif 000018
【図２】
2010226276.tif 000019
【図３】
2010226276.tif 000020
【図４】
2010226276.tif 000021
【図５】
2010226276.tif 000022
【図６】
2010226276.tif 000023
【図７】
2010226276.tif 000024
【図８】
2010226276.tif 000025
【図９】
2010226276.tif 000026
【図１０】
2010226276.tif 000027
【図１１】
2010226276.tif 000028
【図１２】
2010226276.tif 000029
【図１３】
2010226276.tif 000030
【図１４】
2010226276.tif 000031
【図１５】
2010226276.tif 000032
【外国語明細書】
2010226276000001.pdf
2010226276000002.pdf
2010226276000003.pdf
2010226276000004.pdf