図1を参照して、この発明の実施例のセキュリティシステム(以下、単に「システム」という。)100は、情報処理装置10およびサーバ102を含む。情報処理装置10は、サーバ102からデータをダウンロードして、当該データを所定の記憶領域に保存する。この実施例のシステム100は、ダウンロードセキュリティシステムであり、ダウンロードしたデータを書き込むための所定の記憶領域が不正なダウンロードによって利用されるのを防止しようとするものである。また、情報処理装置10は、バックアップデータのための書込み領域セキュリティシステムとしても機能し、バックアップデータを書き込むための所定の記憶領域が不正利用されるのを防止するものでもある。なお、システム100がバックアップデータのための書込み領域セキュリティシステムとして機能する場合もある。
なお、情報処理装置10は、この実施例では携帯型ゲーム装置の形態で実現されるが、他の実施例では、携帯情報端末、携帯電話機、パーソナルコンピュータまたは据え置き型ゲーム装置等のような他の形態のコンピュータであってよい。また、サーバ102はコンピュータであり、図示は省略するが、CPU、RAM、ROM、HDD、通信装置等を備えている。
情報処理装置すなわちゲーム装置10は、アクセスポイント104およびネットワーク106を介してサーバ102に接続可能である。ネットワーク106は、たとえば、ワイドエリアネットワーク(WAN)やインターネット等であり、あるいはローカルエリアネットワーク(LAN)であってもよい。ゲーム装置10は、サーバ102からデータをダウンロードする際には、無線(または有線)によってアクセスポイント104に接続し、当該アクセスポイント104を介してネットワーク106上のサーバ102と通信する。なお、ゲーム装置10は、ユーザの入力またはリスト選択等によってアクセスポイント104およびサーバ102のIPアドレスを取得する。
図2を参照して、ゲーム装置10は、第1の液晶表示器(LCD)12および第2のLCD14を含む。LCD12およびLCD14は、所定の配置位置となるようにハウジング16に収納される。この実施例では、ハウジング16は、上側ハウジング16aと下側ハウジング16bとによって構成され、LCD12は上側ハウジング16aに収納され、LCD14は下側ハウジング16bに収納される。したがって、LCD12とLCD14とは縦(上下)に並ぶように近接して配置される。
なお、この実施例では、表示器としてLCDを用いるようにしてあるが、LCDに代えて、EL(Electronic Luminescence)ディスプレイやプラズマディスプレイを用いるようにしてもよい。
図2からも分かるように、上側ハウジング16aは、LCD12の平面形状よりも少し大きな平面形状を有し、一方主面からLCD12の表示面を露出するように開口部が形成される。一方、下側ハウジング16bの平面形状およびサイズも上側ハウジング16aと同等に選ばれ、横方向の略中央部にLCD14の表示面を露出するように開口部が形成される。下側ハウジング16bの右側面には電源スイッチ18が設けられる。
また、上側ハウジング16aには、LCD12を挟んで左右に、スピーカ36aおよび36b(図3参照)のための音抜き孔20aおよび20bが形成される。
上側ハウジング16aと下側ハウジング16bとは、上側ハウジング16aの下辺(下端)と下側ハウジング16bの上辺(上端)の一部とが回動可能に連結されている。したがって、たとえば、ゲームをプレイしない場合には、LCD12の表示面とLCD14の表示面とが対面するように、上側ハウジング16aを回動させて折りたたんでおけば、LCD12の表示面およびLCD14の表示面に傷がつくなどの破損を防止することができる。ただし、上側ハウジング16aと下側ハウジング16bとは、回動可能に連結せずに、それらを一体的(固定的)に設けたハウジング16を形成するようにしてもよい。
そして、上側ハウジング16aと下側ハウジング16bとの連結部の中央には、マイク(図示せず)のためのマイク孔20cが形成される。マイクから取り込んだ音、音声または息などによる音声信号に基づいてゲーム処理を行うことが可能である。
また、下側ハウジング16bには、操作スイッチ22(22a,22b,22c,22d,22e,22Lおよび22R)が設けられる。操作スイッチ22は、方向指示スイッチ(十字スイッチ)22a,スタートスイッチ22b、セレクトスイッチ22c、動作スイッチ(Aボタン)22d、動作スイッチ(Bボタン)22e、動作スイッチ(Xボタン)22f、動作スイッチ(Yボタン)22g、動作スイッチ(Lボタン)22Lおよび動作スイッチ(Rボタン)22Rを含む。
スイッチ22aは、下側ハウジング16bの一方主面であり、LCD14の左側に配置される。その他のスイッチ22b−22gは、下側ハウジング16bの一方主面であり、LCD14の右側に配置される。さらに、動作スイッチ22Lおよび22Rは、それぞれ下側ハウジング16bの上端面の左右角部に配置される。なお、動作スイッチ22Lおよび22Rは下側ハウジング16bの背面に設けられており、図2のような正面視では連結部の背後に隠れているので破線で示されている。
方向指示スイッチ22aは、ディジタルジョイスティックとして機能し、4つの押圧部の1つを操作することによって、ユーザないしプレイヤによって操作可能なプレイヤオブジェクト(またはプレイヤキャラクタ)の進行方向(移動方向)を指示したり、カーソルの進行方向を指示したりする等のために用いられる。また、各押圧部には、特定の役割を割り当てることができ、4つの押圧部の1つを操作することによって、割り当てられた役割を指示(指定)することができる。
スタートスイッチ22bは、プッシュボタンで構成され、ゲームを開始(再開)したり、一時停止(Pause)したりする等に用いられる。また、セレクトスイッチ22cは、プッシュボタンで構成され、ゲームモードの選択等に用いられる。
動作スイッチ22dすなわちAボタンは、プッシュボタンで構成され、方向指示以外の動作、すなわち、プレイヤオブジェクトに打つ(パンチ)、投げる、つかむ(取得)、乗る、ジャンプするなどの任意のアクションをさせることができる。たとえば、アクションゲームにおいては、ジャンプ、パンチ、武器を動かす等を指示することができる。また、ロールプレイングゲーム(RPG)やシミュレーションRPGにおいては、アイテムの取得、武器やコマンドの選択および決定等を指示することができる。動作スイッチ22eすなわちBボタンは、プッシュボタンで構成され、セレクトスイッチ22cで選択したゲームモードの変更やAボタン22dで決定したアクションの取り消し等のために用いられる。
動作スイッチ22fすなわちXボタン、および動作スイッチ22gすなわちYボタンは、プッシュボタンで構成され、Aボタン22dとBボタン22eだけでは、ゲーム進行ができないときに、補助的な操作に用いられる。ただし、Xボタン22fおよびYボタン22gは、Aボタン22dおよびBボタン22eと同様の操作に用いることも可能である。もちろん、ゲームプレイにおいてXボタン22fとYボタン22gとを必ずしも使用しなくてよい。
動作スイッチ22L(左押しボタン)および動作スイッチ22R(右押しボタン)は、プッシュボタンで構成され、左押しボタン(Lボタン)22Lおよび右押しボタン(Rボタン)22Rは、Aボタン22dおよびBボタン22eと同様の操作に用いることができ、また、Aボタン22dおよびBボタン22eの補助的な操作に用いることができる。さらに、Lボタン22LおよびRボタン22Rは、方向スイッチ22a,Aボタン22d,Bボタン22e,Xボタン22f,Yボタン22gに割り当てられた役割を、他の役割に変更することができる。
また、LCD14の上面には、タッチパネル24が装着される。タッチパネル24としては、たとえば、抵抗膜方式、光学式(赤外線方式)および静電容量結合式のいずれかの種類のものを用いることができる。また、タッチパネル24は、その上面をスティック26ないしはペン(スタイラスペン)或いは指(以下、これらを「スティック26等」という場合がある。)で、押圧したり、撫でたり、触れたりすることにより操作(タッチ入力)すると、スティック26等の操作位置の座標を検出して、当該検出座標に対応する座標データを出力する。
なお、この実施例では、LCD14(LCD12も同じ、または略同じ。)の表示面の解像度は256dot×192dotである。タッチパネル24の検出精度も表示画面に対応して256dot×192dotとしてあるが、タッチパネル24の検出精度は表示画面の解像度よりも低くてもよく、高くてもよい。
LCD12およびLCD14には異なるゲーム画面を表示することができる。たとえば、レースゲームでは一方のLCDに運転席からの視点による画面を表示し、他方のLCDにレース(コース)全体の画面を表示することができる。また、RPGでは、一方のLCDにマップやプレイヤオブジェクト等のキャラクタを表示し、他方のLCDにプレイヤオブジェクトが所有するアイテムを表示することができる。さらに、一方のLCDにプレイヤオブジェクトやノンプレイヤオブジェクトなどを含むゲーム画面を表示し、他方のLCDに当該プレイヤオブジェクトやノンプレイヤオブジェクトに関する情報を含む他のゲーム画面または当該プレイヤオブジェクトを操作するための操作画面を表示することができる。さらには、2つのLCD12およびLCD14を合わせて1つの画面として用いることにより、プレイヤオブジェクトが倒さなければならない巨大な怪物(敵オブジェクト)を表示することもできる。
したがって、プレイヤはスティック26等でタッチパネル24を操作することにより、LCD14の画面に表示されるプレイヤオブジェクト、敵オブジェクト、アイテムオブジェクト、操作オブジェクトなどの画像を指示(操作)したり、コマンドを選択(入力)したりすることができる。また、仮想ゲーム空間(3次元ゲーム空間)に設けられる仮想カメラ(視点)の方向(視線の向き)を変化させたり、ゲーム画面(マップ)のスクロール(徐々に移動表示)方向を指示したりすることもできる。
なお、ゲームの種類によっては、タッチパネル24を用いることにより、その他の入力指示も可能である。たとえば、LCD14上のタッチパネル24において文字,数字,記号等を手書き入力することができる。
このように、ゲーム装置10は、2画面分の表示部となるLCD12およびLCD14を有し、いずれか一方(この実施例では、LCD14)の上面にタッチパネル24が設けられるので、2画面(12,14)と2系統の操作部(22,24)とを有する構成になっている。
なお、この実施例では、第1のLCD12と第2のLCD14とを縦方向に並べて配置するようにしているが、2つのLCDの配置は適宜に変更され得る。他の実施例では、第1のLCD12と第2のLCD14とを横方向に並べて配置するようにしてもよい。
また、この実施例では、2つのLCDを設けるようにしていたが、表示手段としてのLCDの数は適宜変更され得る。他の実施例では、縦長形状の1つのLCDを設けて、表示領域を上下に分けて、2つのゲーム画面をそれぞれの表示領域に表示するようにしてもよいし、あるいは、横長形状の1つのLCDを設けて、表示領域を左右に分割し、2つゲーム画面をそれぞれの表示領域に表示するようにしてもよい。
また、スティック26は、たとえば下側ハウジング16bに設けられる収納部(図示せず)に収納することができ、必要に応じて取り出される。ただし、スティック26を設けない場合には、その収納部も設ける必要はない。
さらに、ゲーム装置10はメモリカード(またはカートリッジ)28を含み、このメモリカード28はゲーム装置10に装着可能な記憶媒体であり、下側ハウジング16bの上端面に設けられる挿入部30(図2では点線で示す)に挿入される。挿入部30の奥部には、メモリカード28の挿入方向先端部に設けられるコネクタ60と接合するためのコネクタ32(図3参照)が設けられており、したがって、メモリカード28が挿入部30に挿入されると、コネクタ同士が接合され、ゲーム装置10のCPU34(図3参照)がメモリカード28にアクセス可能となる。
なお、図1では省略するが、たとえば、下側ハウジング16bにおいて、その裏面には電池収容ボックスが設けられ、下端面(底面)には、音量スイッチおよびイヤフォンジャックなどが設けられ、上端面(天面)には、外部拡張コネクタなどが設けられる。
図3はゲーム装置10の電気的な構成を示すブロック図である。この図3を参照して、ゲーム装置10は電子回路基板38を含み、この電子回路基板38には上述のCPU34等の回路コンポーネントが実装される。CPU34は、バス40を介して前述のコネクタ32に接続されるととともに、RAM42、第1のグラフィック処理ユニット(GPU)44、第2のGPU46、入出カインターフェース回路(以下、「I/F回路」という。)48、LCDコントローラ50および無線通信部58に接続される。
コネクタ32には、上述したように、メモリカード28が着脱自在に接続される。メモリカード28は、メモリコントローラ62およびフラッシュメモリ64を含み、メモリコントローラ62はバスを介してフラッシュメモリ64およびコネクタ60と接続される。したがって、上述したように、CPU34は、メモリコントローラ62を介してフラッシュメモリ64にアクセスすることができる。
メモリコントローラ62は、フラッシュメモリ64の書込みおよび読出しを制御する制御装置である。メモリコントローラ66は内部メモリとしてRAM66を有する。
フラッシュメモリ64は、ゲーム装置10で実行すべきゲームのためのゲームプログラム、画像データ(文字やオブジェクトの画像、背景画像、アイテム画像、アイコン(ボタン)画像、メッセージ画像など)およびゲームに必要な音(音楽)のデータ(音データ)等を予め記憶する。また、後述するように、フラッシュメモリ64には、ダウンロードしたデータを保存するための領域や、そのゲームの途中データやゲームの結果データなどのバックアップデータを記憶するための領域が設けられている。また、この実施例ではフラッシュメモリ64としてNAND型フラッシュメモリが適用される。他の実施例では、他の不揮発性メモリが適用されてよい。
ゲーム装置10のRAM42は、バッファメモリやワーキングメモリとして使用される。つまり、CPU34は、メモリカード28に記憶されたゲームプログラム、画像データおよび音データ等をRAM42にロードし、ロードしたゲームプログラムを実行する。また、CPU34は、ゲームの進行に応じて一時的に生成するデータ(ゲームデータやフラグデータ)をRAM42に記憶しつつゲーム処理を実行する。
なお、ゲームプログラム、画像データおよび音データ等は、メモリカード28から一度に全部または部分的にかつ順次的に読み出され、RAM42に記憶される。
ただし、ゲーム装置10ではゲーム以外の他のアプリケーションが実行されてよく、この場合、メモリカード28のフラッシュメモリ64には、当該アプリケーションについてのプログラムおよび画像データ等の必要なデータが記憶されてよい。また、必要に応じて、音(音楽)データが記憶されてもよい。
GPU44およびGPU46は、それぞれ、描画手段の一部を形成し、たとえばシングルチップASICで構成され、CPU34からのグラフィックスコマンド(作画命令)を受け、そのグラフィックスコマンドに従って画像データを生成する。ただし、CPU34は、グラフィックスコマンドに加えて、画像データの生成に必要な画像生成プログラム(ゲームプログラムに含まれる。)をGPU44およびGPU46のそれぞれに与える。
また、GPU44には、第1のビデオRAM(以下、「VRAM」という。)52が接続され、GPU46には、第2のVRAM54が接続される。GPU44およびGPU46が作画コマンドを実行するにあたって必要なデータ(画像データ:ポリゴンやテクスチャ等のデータ)は、GPU44およびGPU46が、それぞれ、第1のVRAM52および第2のVRAM54にアクセスして取得する。
なお、CPU34は、描画に必要な画像データをGPU44およびGPU46を介して第1のVRAM52および第2のVRAM54に書き込む。GPU44はVRAM52にアクセスして描画のための画像データを作成し、その画像データをVRAM52の描画バッファに記憶する。GPU46はVRAM54にアクセスして描画のための画像データを作成し、その画像データをVRAM54の描画バッファに記憶する。描画バッファとしてはフレームバッファまたはラインバッファ等が採用されてよい。
VRAM52およびVRAM54は、LCDコントローラ50に接続される。LCDコントローラ50はレジスタ56を含み、レジスタ56はたとえば1ビットで構成され、CPU34の指示によって「0」または「1」の値(データ値)を記憶する。LCDコントローラ50は、レジスタ56のデータ値が「0」である場合には、GPU44によって作成された画像データをLCD12に出力し、GPU46によって作成された画像データをLCD14に出力する。また、LCDコントローラ50は、レジスタ56のデータ値が「1」である場合には、GPU44によって作成された画像データをLCD14に出力し、GPU46によって作成された画像データをLCD12に出力する。
なお、LCDコントローラ50は、VRAM52およびVRAM54から直接画像データを読み出したり、GPU44およびGPU46を介してVRAM52およびVRAM54から画像データを読み出したりする。
また、VRAM52およびVRAM54はRAM42に設けられてもよいし、あるいはその描画バッファおよびZバッファがRAM42に設けられてもよい。
I/F回路48には、操作スイッチ22,タッチパネル24およびスピーカ36a,36bが接続される。ここで、操作スイッチ22は、上述したスイッチ22a,22b,22c,22d,22e,22g,22Lおよび22Rであり、操作スイッチ22が操作されると、対応する操作信号(操作データ)がI/F回路48を介してCPU34に入力される。また、タッチパネル24からの座標データがI/F回路48を介してCPU34に入力される。さらに、CPU34は、ゲーム音楽(BGM)、効果音またはゲームキャラクタの音声(擬制音)などのゲームに必要な音データをRAM42から読み出し、I/F回路48を介してスピーカ36a,36bから当該音を出力する。
無線通信部58は他のゲーム装置10や通信機器等との間で無線によってデータを送受信するための通信手段である。なお、ゲーム装置10が送受信する微弱電波は、電波法による規制のかからない強度に設定されている。CPU34がゲームデータやコマンドなどのデータを無線通信部58に与えると、無線通信部58は、相手方へのデータを無線信号に変調してアンテナから送信する。また、無線通信部58は、相手方からの無線信号を同じアンテナで受信してデータに復調し、当該データをCPU34に与える。この無線通信部58を用いて、ゲーム装置10は、他のゲーム装置10との間でデータを通信しつつ通信ゲームを実行することが可能である。また、ゲーム装置10は、上述のように、無線通信部58を介してアクセスポイント104およびネットワーク106に接続することができ、ネットワーク106上のサーバ102からプログラムやデータをダウンロードしたり、ネットワーク106を介して他のゲーム装置10と通信したりすることが可能である。
このシステム10では、サーバ102からダウンロードしたデータを書き込むための所定の領域がメモリカード28のフラッシュメモリ64に設けられる。また、ゲーム(アプリケーション)の実行中に生成されるバックアップデータを書き込むための所定の領域がフラッシュメモリ64に設けられる。図4にフラッシュメモリ64のメモリマップの一例が示される。フラッシュメモリ64にはインフォメーション領域200、ゲーム領域202、ダウンロード領域204およびバックアップ領域206等が設けられる。なお、図4はメモリマップの一部を示しており、他の領域が設けられ得る。
ダウンロード領域204がサーバ102からダウンロードしたデータを書き込むための領域であり、バックアップ領域206がバックアップデータを書き込むための領域である。なお、インフォメーション領域200には、後述の図8のように、フラッシュメモリ64のヘッダ情報や所定のデータが予め記憶される。また、ゲーム領域202には、ゲームプログラムやデータが予め記憶される。ゲームプログラムは、たとえば、ゲーム処理プログラム、ダウンロード処理プログラム、およびバックアップ処理プログラムなどを含んでいる。
このフラッシュメモリ64に設けられた書込み領域に対して段階的なセキュリティをかけることができるように、メモリコントローラ62の動作をモードに応じて制御するようにしている。各モードではメモリコントローラ62の実行可能な動作が限られ、必要な動作を実行するためにはモードを切替える必要がある。メモリコントローラ62のモード遷移の概要が図5に示されている。メモリコントローラ62は、この実施例では、ゲームモード、DL(Download)セキュアモード、ダウンロードモードおよびバックアップモード等を有する。メモリコントローラ62は、外部(ホストであるCPU34、またはネットワーク106上のサーバ102)から与えられる各種の遷移コマンドに応じて、そのモードを遷移させるようになっている。なお、CPU34は、メモリカード28に記憶されるアプリケーションプログラム(ゲーム装置10内に記憶されるプログラムでもよい)を実行することにより遷移コマンドを発行する。
ゲームモードは、通常のモードである。メモリコントローラ62は、たとえばゲーム装置10の電源がオンされたときに、当該ゲーム装置10から電力が供給されてメモリコントローラ62が起動する。メモリコントローラ62は、起動すると、このゲームモードに置かれ、ゲーム実行中も基本的には(より具体的には、フラッシュメモリにデータを書き込む必要がないときには)このゲームモードにある。ゲーム実行中はフラッシュメモリ64からプログラムおよびデータを必要に応じて読み出す必要があるので、このゲームモードでは、フラッシュメモリ64からの読出しが高速に行えるようにするのが望ましい。このため、このゲームモードでは、メモリコントローラ62に与えられるコマンドは、暗号化されなくてもよいが、コマンドを暗号化する場合でも、処理負担の軽いアルゴリズムで暗号化する程度のセキュリティがかけられればよい。なお、ゲームモードでは、たとえホスト(CPU34)がフラッシュメモリ64へのデータ書込みコマンドを発行したとしても、メモリコントローラ62は当該コマンドを受け付けないため、フラッシュメモリ64にデータを書き込むことはできない。
ゲーム実行中にプレイヤの選択またはプログラムに従ってサーバ102からデータをダウンロードする場合のために、フラッシュメモリ64にはダウンロードしたデータを書き込むためのダウンロード領域204が設けられている。ダウンロードする場合、フラッシュメモリ64を不正アクセスから保護するために、セキュリティ度を高める必要がある。そこで、メモリコントローラ62を、フラッシュメモリ64へのアクセスが容易なゲームモードから、セキュリティ度の高いモードに遷移させる。
また、ダウンロードデータを書き込むことのできるダウンロードモードにゲームモードからいきなり遷移させるのではなく、この実施例では、ダウンロードの際に2段階のセキュリティをかけることができるように、別のモード、すなわち、DLセキュアモードを介在させるようにしている。
具体的には、ゲームモードにおいてgCHG_DL_MODEコマンドがメモリコントローラ62に与えられると、メモリコントローラ62はゲームモードからDLセキュアモードに遷移する。なお、gCHG_DL_MODEコマンドは、ゲームモードからDLセキュアモードへ遷移させるための遷移コマンドであり、ゲーム装置10のCPU34によって発行される。
DLセキュアモードは、ダウンロードの際のセキュリティ度を高めるために設けられたモードである。このDLセキュアモードで、メモリコントローラ62に与えられるコマンドは暗号化される。具体的には、暗号化されたdsCHG_MODEコマンドがメモリコントローラ62に与えられる。なお、dsCHG_MODEコマンドは、DLセキュアモードからダウンロードモードに遷移するための遷移コマンドである。このダウンロードモードへの遷移コマンドは、ゲーム装置10のCPU34から発行されるのではなく、サーバ102で暗号化されてサーバ102から送信される。なお、ゲーム装置10のCPU34はdsCHG_MODEコマンドを生成することができない。なぜなら、dsCHG_MODEコマンドは暗号化された状態でメモリコントローラ62に与えられるべきものであり、ゲーム装置10のCPU34は当該暗号化のための鍵データを有しないためである。メモリコントローラ62は、DLセキュアモードで受信したコマンドを復号化し、そのコマンドがdsCHG_MODEコマンドであれば、ダウンロードモードに遷移する。この遷移コマンドの暗号のために、サーバ102およびメモリカード28は共通キーを記憶している。
このように、DLセキュアモードからダウンロードモードへの遷移に対してセキュリティをかけることができる。また、DLセキュアモードへの遷移コマンドをホストであるCPU34から発行し、ダウンロードモードへの遷移コマンドをサーバ102から発行するようにしており、つまり、CPU34とサーバ102の協働によってダウンロードモードへの遷移を可能にしているので、さらにセキュリティ度を高めることができる。
ダウンロードモードでは、サーバからダウンロードしたデータがダウンロード領域204に書き込まれることとなる。ダウンロードされるデータはサーバで暗号化されて送信され、受信したデータはメモリコントローラ62によって復号化される。このように、ダウンロードするデータに対してセキュリティをかけることができる。また、DLセキュアモードでの暗号のキーとダウンロードモードでの暗号のキーとを変えるので、2段階のセキュリティが存在することとなり、遷移コマンドとデータとに別々のセキュリティをかけることができる。
ダウンロードデータは、上述のようにサーバで暗号化されており、CPU34は、当該暗号化されたデータを受信するとメモリコントローラ62に転送する。このデータの書込みのために、CPU34は、書込みコマンド(dWR_PAGEコマンド)を発行する。当該書込みコマンドに応じて、メモリコントローラ62は、データの復号化など、データを書き込むための処理を実行する。受信したデータが正当なデータであることが認証されれば、メモリコントローラ62は、当該データをダウンロード領域204に書き込む。このダウンロード領域204への書込みは、ダウンロードモードにおいてのみ可能である。メモリコントローラ62は、CPU34の発行する書込みコマンドをダウンロードモードにおいてのみ受け付けるようになっており、したがって、他のモードではダウンロード領域204への書込みは行えない。
所定のデータを書き込んだ後に、dlCHG_MODEコマンドに応じてメモリコントローラ62はゲームモードに遷移する。なお、dlCHG_MODEコマンドは、ダウンロードモードからゲームモードに遷移させるための遷移コマンドであり、CPU34から発行される。
このようなダウンロードの場合のモードの遷移において、フラッシュメモリ64に対するアクセスの可否状態が変化される。図6には、ダウンロードモードに遷移する場合のフラッシュメモリ64のメモリマップの変化が示されている。まず、ゲームモードにおいては、ゲーム領域202およびダウンロード領域204は読出しのみ可能にされている。そして、gCHG_DL_MODEコマンドに応じてDLセキュアモードに遷移したとき、全領域が読出しおよび書込みの不可能な状態にされる。このようなフラッシュメモリ64の全領域へのアクセスが不可能にされた状態で、暗号化されたdsCHG_MODEコマンドの処理が行われることとなる。そして、dsCHG_MODEコマンドに応じてダウンロードモードに遷移したときには、ダウンロード領域202がアクセス可能な状態にされる。しかも、この実施例では、ダウンロード領域202のうち、dsCHG_MODEコマンドで指定されたブロックのみがアクセス可能にされる。このように、モードの遷移に応じて、フラッシュメモリ64の各領域に対して、読出しおよび書込み可能な状態を変化させ、つまり、モードごとにメモリマップを変化させるようにしたので、セキュリティ度を高めることができる。
一方、ゲーム実行中にはCPU34はゲームのバックアップデータを生成する。このバックアップデータを書き込むためのバックアップ領域206がフラッシュメモリ64に設けられている。バックアップ領域206への書込み自体は本来ローカルなものであるが、このバックアップ領域206に対して、たとえばネットワーク106上から不正に入手したプログラムデータが書き込まれてしまうおそれがある。このバックアップ領域206の不正利用を防止するために、バックアップ領域206のセキュリティ度を上げる。
図5に示すように、バックアップ領域206に対する書込みまたは読出しのために、メモリコントローラ62は、gCHG_BK_MODEコマンドに応じて、ゲームモードからバックアップモードに遷移される。なお、このgCHG_BK_MODEコマンドは、ゲームモードからバックアップモードに遷移させるための遷移コマンドであり、ホストであるCPU34がメモリコントローラ62に発行する。また、bCHG_MODEコマンドに応じて、メモリコントローラ62はゲームモードに遷移する。なお、このbCHG_MODEコマンドは、バックアップモードからゲームモードに遷移させるための遷移コマンドであり、ホストであるCPU34がメモリコントローラ62に発行する。
バックアップモードでは、データを書き込む際には、CPU34によって書込みデータが所定のフォーマットに変換され、当該所定のフォーマットのデータがメモリコントローラ62によってバックアップ領域206に書き込まれる。一方、データを読み出す際には、メモリコントローラ62によって、読み出したデータが所定のフォーマットであるか否かが判定される。データが所定のフォーマットであると判定される場合には当該データはCPU34に出力される。
しかし、データが所定のフォーマットでないと判定される場合には、当該データはバックアップ領域に不正に書き込まれたデータであるとみなされ、メモリコントローラ62はイリーガルモードに遷移する。イリーガルモードに遷移すると、当該データは出力されず、したがって、バックアップ領域の不正利用を防止することができる。
なお、この実施例では、書込まれていたデータが所定のフォーマットでないと判定されるとき、メモリコントローラ62が何らデータを出力しないようにしているが、他の実施例では、メモリコントローラ62が、不正データであることを示す所定のデータをCPU34に出力するようにして、不正な書込みデータであることをCPU34が認識できるようにしてもよい。この場合にも、書込まれていたデータが正常に出力されないので、バックアップ領域206を不正利用から保護することができる。
このようなバックアップの場合のモードの遷移においても、フラッシュメモリ64に対するアクセスの可否状態が変化される。図7には、バックアップモードに遷移する場合のフラッシュメモリ64のメモリマップの変化が示されている。ゲームモードでは、ゲーム領域202は読出しのみ可能な状態にされており、バックアップ領域206は、読出しおよび書込みともに不可能な状態にされている。そして、gCHG_BK_MODEコマンドに応じて、バックアップモードに遷移したとき、バックアップ領域206のみがアクセス可能な状態にされる。しかも、この実施例では、バックアップ領域206のうち、gCHG_BK_MODEコマンドで指定されたブロックのみがアクセス可能にされる。ダウンロードの場合と同様に、モードの遷移に応じて、フラッシュメモリ64の各領域に対して、読出しおよび書込み可能な状態を変化させ、つまり、モードごとにメモリマップを変化させるようにしたので、セキュリティ度を高めることができる。
なお、本実施例においては、バックアップモードに遷移した後でないとバックアップ領域206に書込みできないようにした。これは、例えば工場出荷時などにおいて一度書き込んだデータを間違って上書きしてしまわないようにするためである。しかしながら、変形例としては、フラッシュメモリ64のうちバックアップ領域206はゲームモードでも書き込み可能にしてもよい。
図8にはフラッシュメモリ64のインフォメーション領域200のメモリマップの一例が示される。なお、図8はインフォメーション領域200の一部であり、ゲーム領域202の開始アドレスなど他の必要なデータも記憶されている。
記憶領域210にはダウンロード領域204の開始アドレスが予め記憶され、記憶領域212にはバックアップ領域206の開始アドレスが予め記憶されている。その他にダウンロード領域204およびバックアップ領域206のサイズまたは終了アドレスなどが記憶されてもよい。ヘッダ情報としては、ダウンロード領域204およびバックアップ領域206のそれぞれと他の領域とを区別することのできるデータ、すなわち、各領域の境界データが記憶されればよい。メモリコントローラ62は、各領域の境界データを参照することによって、各領域を把握してアクセスすることができる。
記憶領域214には、暗号化されたキー1が予め記憶されている。キー1は、DLセキュアモード用のキー(暗号鍵)、つまり、DLセキュアモードにおいて使用されるキーである。このキー1によって、サーバ102で暗号化されたdsCHG_MODEコマンドが復号化される。
なお、フラッシュメモリ64には暗号化されたキーを記憶するようにしているので、メモリカード28からフラッシュメモリ64が抜き取られてデータが不正に読み出されても、キーの内容を読み取られないようにすることができる。
記憶領域216には、暗号化されたキー2が予め記憶されている。キー2はダウンロードモード用のキー(暗号鍵)、つまり、ダウンロードモードにおいて使用されるキーである。このキー2によって、サーバ102で暗号化されたダウンロード用データが復号化される。
記憶領域218には、暗号化されたキー3が予め記憶されている。キー3は、ダウンロード用データのメッセージダイジェスト認証用のキー(暗号鍵)であり、つまり、ダウンロード用データの認証記号としてのメッセージ完全性コード(MIC: Message Integrity Code)を算出するためのキーである。ただし、この実施例では、キー3の一部がキー2の一部と同一になるような構成を採用している。つまり、キー3は、キー2の一部(同一部分を除いた部分)を置き換えることによって得られるキーである。そして、この記憶領域218には、上述のようなキー3の残りの部分(キー2との同一部分を除いた部分)だけを暗号化して記憶するようにしている。MIC算出のために完全なキー3を必要とするときは、記憶領域218のキー3とキー2の同一部分とが使用されるようにしている。
記憶領域220には、メモリカード28(フラッシュメモリ64)の識別情報を示すユニークIDが記憶される。また、記憶領域222には、メモリカード28のゲームないしアプリケーションの識別情報を示すゲームIDが記憶される。ゲームIDはゲームのタイトルや種類であってよい。
なお、この実施例では、フラッシュメモリ64には、メモリカード28に固有のキーが記憶される。つまり、ユニークIDに対応するキー1、2および3が記憶されている。他の実施例では、ゲームタイトルに固有のキー、すなわち、ゲームIDに対応するキー1、2および3が記憶されてもよい。
図9にはメモリコントローラ62の内部RAM66のメモリマップの一例が示される。なお、図9は当該内部RAM66のメモリマップの一部である。
記憶領域300には現在のモードが記憶される。このモードデータによってメモリコントローラ62は現在のモードを把握することが可能である。コマンドを受信したときには、メモリコントローラ62は、たとえば、当該コマンドの実行の前に、当該コマンドが現在のモードで発行されることを規定されたコマンドであるか否かを判定するようにしてよい。これによって、正規に発行されたコマンドを判別することができる。
記憶領域302はキー記憶領域である。現在のモードに応じたキーが記憶される。上述のように、この実施例では、各キーは暗号化されてフラッシュメモリ64のインフォメーション領域200に記憶されているので、メモリコントローラ62は、内部RAM66のワークエリアにキーを読み出して復号化し、当該復号化したキーを記憶領域302に記憶する。また、各キーは、各遷移コマンドに応じて各モードに遷移したときに、この記憶領域302に展開されてよい。
具体的には、図10に示すように、DLセキュアモードにおいては、キー記憶領域302には、復号化済みのキー1および復号化済みのキー3(この実施例では、厳密にはキー3の一部)が記憶される。なお、キー1はDLセキュアモード用のキーであるが、この実施例では、ゲームモードにおいても、このキー1を使用して所定のデータ(乱数およびユニークIDもしくはゲームID)を暗号化するようにしているので、ゲームモードのときから既にキー1を記憶領域302に記憶するようにしている。また、キー3は電源オフまで常駐された状態になる。このキー3の一部は、キー2と共用される部分に比べて小さいので、予め展開されるようにしている。なお、ゲームモードからDLセキュアモードに遷移する際には、キー1を再度フラッシュメモリ64から読み出して復号化して、その後記憶領域302に展開するようにしている。これは、何らかの事故で内部RAM66上のデータが書き換わってしまう場合を考慮し、念の為の再展開である。
ダウンロードモードに遷移すると、キー1がキー2に置き換えられる。つまり、キー1が記憶領域302から消去されるとともに、フラッシュメモリ64からキー2をワークエリアに読み出して復号化し、当該復号化したキーを記憶領域302に記憶する。また、キー3はそのまま記憶される。上述のように、キー2は、ダウンロードモードにおけるダウンロード用のデータの暗号のために使用され、一方、キー3は、ダウンロード用のデータのMIC算出のために使用される。この実施例のように、キー2とキー3とで一部を共用することによって、キー記憶領域302のために確保すべき領域のサイズを抑えることができ、結果として内部RAM66の容量を抑制して、コストを低減することができる。
なお、他の実施例では、完全なキー3を予め記憶しておき、当該キー3をキー記憶領域302に展開するようにしてよい。
図9に戻って、記憶領域304には乱数が記憶される。乱数は疑似乱数であり、メモリコントローラ62で所定の処理が実行されるときに発生される。また、記憶領域306にはライトプロテクトを示すフラグが記憶される。このライトプロテクトがオンされているときには、フラッシュメモリ64のダウンロード領域204に対する書込みが禁止される。
図11にはサーバ102のデータベースに記憶されるデータの一例を示す。なお、このデータベースは、サーバ102のHDDまたはROMなどに記憶されている。
データベースには、ダウンロード用データが記憶されている。ダウンロード用データは、メモリカード28のダウンロード領域204に記憶するためのデータである。たとえばゲームタイトルごとに、つまり、ゲームIDに対応付けられたダウンロード用のファイルが準備されてよい。
また、データベースにはキーデータが記憶される。この実施例では、上述のようにメモリカード28ごとに固有のキーを準備しているので、ユニークIDに対応付けて、キー1、キー2およびキー3が記憶されている。なお、メモリカード28と同様に、キー3としては、一部がキー2と共用のため、残りの一部のみが記憶されてもよいし、または、完全なキー3を記憶するようにしてもよい。
なお、他の実施例では、ゲームタイトルごとのキーが準備されてもよく、つまり、ゲームIDに対応付けてキー1、2および3が記憶されてもよい。
図12にはサーバ102のRAMのメモリマップの一例が示される。なお、このメモリマップは一部を示しており、他の必要なプログラムおよびデータも記憶される。
記憶領域400はプログラム記憶領域であり、当該サーバ102のダウンロード処理を実行するためのプログラムが記憶される。プログラムはROMまたはHDD等から読み出される。
記憶領域402はデータ記憶領域であり、ROMまたはHDD等から読み出されたデータ、CPUによって生成されたデータ、ゲーム装置10から受信したデータ等が記憶される。
記憶領域404には、最初に受信したユニークIDが記憶され、記憶領域406には、ゲームIDが記憶される。具体的には、ダウンロード処理が開始されると、最初にゲーム装置10からユニークIDとゲームIDが送信されてくるので、当該ユニークIDおよびゲームIDが記憶領域404および406に記憶される。
記憶領域408には、データベースから読み出されたキーが記憶される。この実施例では、ユニークIDに対応するキー1、2および3が記憶される。
記憶領域410には乱数およびユニークIDが記憶される。具体的には、ゲーム装置10から最初のユニークIDの後に、乱数およびユニークIDをキー1で暗号化したデータがゲーム装置10から送信されてくるので、当該受信データをキー1で復号化して得られた乱数およびユニークIDがこの記憶領域410に記憶される。
記憶領域412にはブロックアドレスが記憶される。具体的には、上述の乱数およびユニークIDの後に、ゲーム装置10から書込みを行うブロックアドレスが送信されてくるので、当該ブロックアドレスがこの記憶領域412に記憶される。この実施例では、サーバ102は、ブロックアドレスを指定した遷移コマンドをゲーム装置10経由でメモリコントローラ62に送信し、ダウンロードするファイルを書き込むブロックアドレスを指示する。
記憶領域414には書込みファイルが記憶される。具体的には、データベースから読み出されたダウンロード用データのファイルが記憶される。ゲームタイトルごとにダウンロードデータが準備される場合、ゲームIDに対応するデータが記憶される。なお、ユニークIDに対応するデータ、つまり、メモリカード28ごとのデータが読み出されてもよいし、ゲームIDやユニークIDにかかわらず所定のデータが読み出されてもよい。この書込みファイルから所定量のデータが順に取り出されて、ゲーム装置10に送信される。
図13には、ダウンロード処理を実行する際のゲーム装置10のRAM42のメモリマップの一例が示される。なお、図13はメモリマップの一部を示しており、他に必要なデータが記憶される。
記憶領域500はプログラム記憶領域であり、ゲーム装置10の処理を実行するためのプログラムがメモリカード28から読み出されて記憶される。プログラムは、ゲーム処理プログラムやダウンロード処理プログラム等を含む。
記憶領域502はデータ記憶領域であり、メモリカード28から取得されたデータ、CPU34によって生成されたデータ、サーバ102から受信したデータ等が記憶される。
記憶領域504はゲームIDが記憶される。ゲームIDは、たとえば電源オンの際にフラッシュメモリ64のインフォメーション領域200の記憶領域222からメモリコントローラ62によって読み出されて出力され、コネクタ60およびコネクタ32等を介してCPU34に与えられる。このゲームIDは、最初にユニークIDをサーバ102に送信する際に、一緒に送信される。
記憶領域506にはダウンロードしたデータを書き込むブロックアドレスが記憶される。ゲーム装置10では、ダウンロード領域204の空き領域が確保され、当該空き領域から書き込むブロックアドレスが決定される。このブロックアドレスはサーバ102に送信される。
記憶領域508にはサーバ102からダウンロードされるファイルデータ量が記憶される。ダウンロードされるファイルのファイルデータ量はサーバ102から送信されてくるので、当該受信したファイルデータ量がこの記憶領域508に記憶される。このデータファイル量によって、CPU34は、書込みファイルのすべてを書き込んだか否かを判定することができる。
図14には、バックアップ処理の際のゲーム装置10のRAM42のメモリマップの一例が示される。なお、この図14も図13と同様にメモリマップの一部のみを示す。
記憶領域500はプログラム記憶領域であり、メモリカード28から読み出されたゲーム処理プログラムおよびバックアップ処理プログラム等が記憶される。
データ記憶領域502の記憶領域504には、図13のダウンロード処理の場合と同様に、メモリカード28から読み出したゲームIDが記憶される。
記憶領域510には書き込むデータが記憶される。つまり、CPU34がゲーム(アプリケーション)実行中に生成したバックアップデータが記憶される。
記憶領域512にはパリティ付きデータが記憶される。書き込むデータは、CPU34によって所定のフォーマットに変換されてバックアップ領域206に書き込まれる。この実施例では、バックアップデータにはパリティビットが付加される。このパリティ付きデータがバックアップ領域206に書き込まれる。
図15にパリティ付きデータの一例が示される。図15は、バックアップ領域206のページデータ(512バイト)の構成例であり、この実施例では、各バイトのデータの構成が、「7ビットのデータ」+「7ビットのデータのパリティ(1ビット)」にされる。つまり、書き込むデータについて、7ビットごとに1ビットのパリティビットを付加することによって、パリティ付きデータを生成する。たとえば、ビット0−6のビット列において「1」が偶数個あった場合、ビット7には「1」が書かれ、一方、ビット列において「1」が奇数個あった場合、ビット7には「0」が書かれる。
記憶領域514には書き込むブロックアドレスが記憶される。ゲーム装置10のCPU34は、バックアップ領域206の空き領域を確保し、パリティ付きデータを書き込むブロックアドレスを決定し、この記憶領域514に記憶する。この書き込むブロックアドレスは、バックアップモードに遷移させるための遷移コマンドにおいて指定される。
記憶領域516には読み出すブロックアドレスが記憶される。CPU34は、バックアップ領域206の読み出すデータの格納場所を確認して、読み出すブロックアドレスを決定し、この記憶領域516に記憶する。この読み出すブロックアドレスは、バックアップモードに遷移させるための遷移コマンドにおいて指定される。
記憶領域518には、メモリカード28のバックアップ領域206から読み出したデータが記憶される。バックアップ領域206から読み出そうとしているデータがパリティ付きデータであるか否かは、読み出す際にメモリコントローラ62によってチェックされる。バックアップ領域206からデータが読み出されれば、当該データは正規にバックアップ領域206に書き込まれたデータであるので、CPU34は、当該読み出したデータからパリティを除去して元のデータに変換して、当該データを利用することができる。一方、パリティチェックの結果、バックアップ領域206のデータが不正に書き込まれたデータと判断される場合、メモリコントローラ62はイリーガルモードに遷移し、当該データを出力しない。したがって、バックアップデータの読出し処理が完了せず、正常な動作が行われなくなる。
ダウンロード処理の際のシステム10の全体的な動作を図16から図19を参照しながら簡単に説明する。なお、ダウンロード処理の際の、ゲーム装置10、メモリコントローラ62およびサーバ102のそれぞれの動作は、個別のフロー図を用いて後に説明する。
ダウンロード処理は、メモリカード28のメモリコントローラ62がゲームモードにあるときに開始される。図16を参照して、ダウンロード処理が開始されると、まずステップS1で、ゲーム装置10のCPU34は、gRD_UIDコマンドをメモリカード28に発行する。このgRD_UIDコマンドは、メモリカード28からユニークIDを読むためのコマンドである。これに応じて、メモリコントローラ62は、ステップS3でユニークIDをフラッシュメモリ64から読み出してゲーム装置10に出力する。CPU34は、受信したユニークIDを、ステップS5でサーバ102に転送し、サーバ102のCPUは受信したユニークIDをRAMに記憶する。このようにして、メモリカード28のユニークIDがサーバ102に送信される。このユニークIDは、メモリカード28の認証のために、後に受信されるユニークIDと比較される。
続いて、ゲーム装置10のCPU34は、ステップS9でgRD_IFコマンドをメモリカード28に発行する。このgRD_IFコマンドは、メモリカード28の乱数およびユニークIDを読むためのコマンドである。これに応じて、メモリコントローラ62は、ステップS11で、発生した乱数およびフラッシュメモリ64から読み出したユニークIDをゲーム装置10に出力する。ただし、乱数およびユニークIDは、内部RAM66に展開されているキー1で暗号化される。CPU34は、ステップS13で、受信したデータをサーバ102に転送する。サーバ102のCPUは、ステップS15で、受信したデータをキー1で復号化する。使用されるキー1はユニークIDに対応するキー1である。そして、サーバ102のCPUはステップS17で、ステップS15で復号化したユニークIDとステップS7で最初に受信したユニークIDとが一致するか否かを判定する。ステップS17で“NO”の場合、つまり、ユニークIDが最初に受信したユニークIDと異なる場合には、メモリカード28が正規のカードであるとは認められないので、サーバ102のCPUはステップS19でダウンロード書込み処理を終了する。
一方、ステップS17で“YES”の場合、つまり、メモリカード28が正規のカードであるとサーバ102で判定された場合には、ゲーム装置10のCPU34は、ステップS21で、ダウンロード領域204のうち、ダウンロードするデータを書込むブロックアドレスを決定する。また、CPU34は、ステップS23で、gCHG_DL_MODEコマンドをメモリカード28に発行する。このgCHG_DL_MODEコマンドは、ゲームモードからDLセキュアモードに遷移させるための遷移コマンドである。これに応じて、メモリコントローラ62は、ステップS25で、DLセキュアモードに遷移する。
また、ステップS27で、ゲーム装置10のCPU34は、ステップS21で決定したブロックアドレスをサーバ102に送信する。これに応じて、サーバ102のCPUは、ステップS29で、dsCHG_MODEコマンドを生成する。このdsCHG_MODEコマンドは、DLセキュアモードからダウンロードモードの遷移させるための遷移コマンドである。この遷移コマンドは、ステップS15で取得した乱数およびユニークIDと、このステップS29で受信したブロックアドレスを用いて生成される。なお、乱数およびユニークIDはメモリコントローラ62での認証のために使用され、また、ブロックアドレスによって、ダウンロードデータを書き込むブロックアドレスが指定される。
続いて、図17のステップS31で、サーバ102のCPUは、生成したdsCHG_MODEコマンドをキー1で暗号化する。そして、ステップS33で、サーバ102のCPUは、暗号化されたdsCHG_MODEコマンドをゲーム装置10に送信する。ゲーム装置10のCPU34は、ステップS35で、受信したデータをメモリカード28に転送する。メモリコントローラ62は、データを受信し、ステップS37で、受信したデータをキー1で復号化する。したがって、dsCHG_MODEコマンドから乱数およびユニークIDを取得することができ、また、指定されたブロックアドレスも取得できる。
メモリコントローラ62は、ステップS39で、コマンドから取得したユニークIDおよび乱数は、メモリカード28内の乱数およびユニークIDと一致するか否かを判断する。ステップS39で“NO”の場合、つまり、受信したコマンドが正当なコマンドでなかった場合には、メモリコントローラ62は、ステップS41でイリーガルモードに遷移する。これによって、ダウンロード処理が進まなくなり、不正なダウンロードが行われない。
一方、ステップS39で“YES”の場合、つまり、受信したコマンドが正当なコマンドである場合には、メモリコントローラ62は、ステップS43でダウンロードモードに遷移し、ステップS45で指定ブロックのみをアクセス可能にする。これによって、ダウンロードモードへの遷移コマンドで指定されたブロックへの書込みが可能になる。また、このとき、ダウンロードモード用のキー2が復号化されて内部RAM66に展開される。
また、ステップS47で、ゲーム装置10のCPU34は、dlRD_IFコマンドをメモリカード28に発行する。このdlRD_IFコマンドは、乱数およびユニークIDを読むためのコマンドである。このコマンドに応じて、メモリコントローラ62は、ステップS49で、乱数およびユニークIDをキー2で暗号化してゲーム装置10へ出力する。ゲーム装置10のCPU34は、このデータを受信し、ステップS51で当該受信データをサーバ102に転送する。これに応じて、サーバ102のCPUは、データを受信し、ステップS53で当該データをキー2を用いて復号化する。これによって、サーバ102は、メモリカード28からの乱数およびユニークIDを取得する。この乱数およびユニークIDは、この後、ダウンロードするデータのMICを算出する際の初期値として使用され、また、サーバ102から送信するデータの暗号化の初期値としても使用される。
さらに、図18のステップS55で、ゲーム装置10のCPU34は、dlPRT_OFFコマンドをメモリカード28に発行する。dlPRT_OFFコマンドは、ライトプロテクトを解除するためのコマンドである。このコマンドに応じて、メモリコントローラ62は、ライトプロテクトをオフにし、これによって、ダウンロード領域204の指定ブロックへの書込みを実行することが可能になる。
続いて、ステップS59で、サーバ102のCPUは、ダウンロードするデータ、つまり、書込みファイルを準備する。そして、ステップS61で、サーバ102のCPUは、書込みファイルから所定サイズ(この実施例では2KByte)のデータを取り出す。サーバ102からゲーム装置10(メモリカード28)への書込みファイルの送信は、この所定のサイズごとに行われる。
そして、ステップS63で、サーバ102のCPUは、キー3を用いて2KByteのデータから所定サイズ(この実施例では8Byte)のMICを算出する。なお、MIC算出の初期値として、ステップS53で取得された乱数およびユニークIDが用いられる。さらに、サーバ102のCPUは、ステップS65で、2KByteのデータに8ByteのMICを追加したデータを生成し、当該生成したデータをキー2で暗号化する。なお、この暗号化の初期値として、ステップS53で取得された乱数およびユニークIDが用いられる。そして、ステップS67で、サーバ102のCPUは、当該暗号化されたデータをゲーム装置10に送信する。
これに応じて、ステップS69で、ゲーム装置10のCPU34は、受信したデータとともに書き込むページアドレスをメモリカード28に送信する。これに応じて、ステップS71で、メモリコントローラ62はデータを受信する。
続いて、ステップS73で、ゲーム装置10のCPU34は、dWR_PAGEコマンドをメモリカード28に発行する。dWR_PAGEコマンドは、メモリカード28に送信したデータをダウンロード領域204に書き込むためのコマンドである。このコマンドに応じて、ステップS75で、メモリコントローラ62は、ステップS71で受信したデータをキー2で復号化する。これによって、2KByteのデータに8ByteのMICを追加したデータを取得することができる。
さらに、ステップS77で、メモリコントローラ62は、取得した2KByteのデータに対してキー3で8ByteのMICを算出する。このMICの算出の際には、ステップS49で送信した乱数およびユニークIDが初期値として使用される。
そして、ステップS79で、メモリコントローラ62は、算出したMICと復号化によって取得したMICとが一致するか否かを判断する。ステップS79で“NO”の場合、つまり、正当なダウンロードデータを受信しなかった場合には、メモリコントローラ62は、ステップS81で、書込みを行わない。これによって、不正なデータがダウンロード領域204に書込まれない。
一方、ステップS79で“YES”の場合、つまり、正当なデータを受信した場合には、メモリコントローラ62は、ステップS83で、受信した2Kbyteのデータをダウンロード領域204の指定ブロックに書き込む。
続いて、ゲーム装置10のCPU34は、ステップS85で、ファイルの書込みが終了したか、または、1ブロックの書込みが終了したかを判断する。この実施例のダウンロードモードでは、指定ブロックアドレスの一定範囲(この実施例では1ブロック)内であれば、サーバ102からの遷移コマンドなしに、データを書き込むことができる。したがって、1ブロックの書込みが終わるまで、または1ブロック未満のファイルの書込みが終わるまでは、サーバ102のCPUが暗号化したデータを送信し、メモリコントローラ62が当該データを復号化して書き込むという動作を繰返す。すなわち、ステップS85で“NO”の場合には、図18のステップS61に戻って、処理が繰返される。このように、一定範囲内の書込みにおいてサーバ102からの遷移コマンドを不要にすることによって、サーバ102の負荷を軽減することができ、ゲーム装置10側での処理も短くできるという利点がある。
一方、1ブロック以上のファイルの書込み行う必要がある場合には、一旦、ダウンロードモードを終了してゲームモードに遷移する。そして、再びサーバ102から遷移コマンドを送信して、メモリコントローラ62のモードをダウンロードモードに遷移させて、データのダウンロードを行う。
すなわち、ステップS85で“YES”の場合、ゲーム装置10のCPU34は、ステップS87でdlCHG_MODEコマンドをメモリカード28に発行する。このdlCHG_MODEコマンドは、ダウンロードモードからゲームモードに遷移させるための遷移コマンドである。これに応じて、メモリコントローラ62は、ステップS89でゲームモードに遷移する。
さらに、ゲーム装置10のCPU34は、ステップS91で、ファイルの書込みが終了したか否かを判断する。ステップS91で“NO”の場合、つまり、書込みファイルのうち未書込みのデータが残っている場合には、図16のステップS9に戻って、ゲームモードからの処理が繰返される。一方、ステップS91で“YES”の場合、つまり、書込みファイルのすべてのデータを書込んだ場合には、このダウンロード処理を終了する。
続いて、ダウンロード処理におけるゲーム装置10、メモリコントローラ62およびサーバ102の個別の動作を説明する。
図20から図22にはダウンロード処理におけるゲーム装置10の動作の一例が示される。ダウンロード処理を開始すると、図20のステップS101で、CPU34は、gRD_UIDコマンドをメモリカード28に発行する。gRD_UIDコマンドは、ユニークIDを読むためのコマンドである。また、このgRD_UIDコマンドは、メモリコントローラ62がゲームモードにある場合に発行されるので、処理負担の比較的軽いアルゴリズム(たとえばスクランブル)で暗号化してメモリカード28に出力するようにしてよい。
なお、ゲーム装置10からメモリカード28にコマンドやデータを送信する際には、CPU34は、当該コマンドやデータをコネクタ32に与え、したがって、当該コマンドやデータはコネクタ60を介してメモリコントローラ62に与えられる。
次にステップS103で、CPU34はユニークIDをメモリカード28から受信したか否かを判断する。gRD_UIDコマンドに応じてメモリコントローラ62はユニークIDを返すので、コネクタ32を介したメモリコントローラ62からのデータの受信を待機する。
ステップS103で“YES”の場合、つまり、メモリコントローラ62からのユニークIDを受信した場合には、CPU34は、ステップS105でユニークIDとゲームIDとをサーバ102に送信する。具体的には、受信したユニークIDをRAM42のデータ記憶領域502に記憶し、記憶領域504に記憶されているゲームIDを読み出して、ユニークIDとゲームIDとを含むデータを送信する。
なお、ゲーム装置10からサーバ102にデータを送信する際には、CPU34は、無線通信部58に当該データを与え、したがって、当該データは、無線通信部58からアクセスポイント104およびネットワーク106を介してサーバ102に与えられる。
続いて、CPU34は、ステップS107で、gRD_IFコマンドをメモリカード28に発行する。なお、このgRD_IFコマンドは乱数およびユニークIDを読むためのコマンドである。また、このgRD_IFコマンドも、スクランブルのような比較的処理負担の軽いアルゴリズムで暗号化されて送信されてよい。そして、ステップS109で、CPU34は、データ(暗号化された乱数およびユニークID)をメモリカード28から受信したか否かを判断する。gRD_IFコマンドに応じてメモリコントローラ62が上記データを返すので、当該データの受信を待機する。
ステップS109で“YES”の場合、つまり、メモリコントローラ62からのデータを受信した場合には、CPU34は、ステップS111で、当該受信したデータ(暗号化された乱数およびユニークID)をサーバ102に送信する。
続いて、ステップS113およびS115で、メモリカード28が正当なカードか否かの結果を、無線通信部58を介してサーバ102から受信したかどうかを判断する。ステップS111でのデータの送信に応じてサーバ102はメモリカード28の認証の結果を返すので、サーバ102からの当該データの受信を待機する。具体的には、ステップS113で、CPU34はメモリカード28が正規カードであることをサーバ102から受信したか否かを判断する。ステップS113で“NO”の場合、CPU34はステップS115でメモリカード28が正規カードでないことを受信したか否かを判断する。ステップS115で“NO”の場合は、処理はステップS113に戻る。
ステップS115で“YES”の場合には、つまり、不正なメモリカード28が装着されているとみなされる場合には、ダウンロード処理を終了する。したがって、不正なメモリカード28へのダウンロードを回避できる。
一方、ステップS113で“YES”の場合、つまり、正規なメモリカード28が装着されている場合には、CPU34は、ステップS117で、ダウンロード領域204の空き領域を確保し、書き込むブロックアドレスを決定する。なお、フラッシュメモリ64の記憶領域のうち、どの領域が使用され、またはどの領域が空き領域であるかなどの情報は、たとえばインフォメーション領域200にヘッダ情報として記憶されているので、CPU34は当該ヘッダ情報に基づいてフラッシュメモリ64の管理データを生成し、当該管理データに基づいて、空き領域を確保して、書き込むブロックアドレスを決定する。決定したブロックアドレスは、記憶領域506に記憶される。ステップS117を終了すると、処理は図21のステップS119に進む。
図21のステップS119では、CPU34は、gCHG_DL_MODEコマンドをメモリカード28に発行する。このgCHG_DL_MODEコマンドは、DLセキュアモードに遷移させるための遷移コマンドである。なお、このgCHG_DL_MODEコマンドは、スクランブルなどの比較的処理負担の軽いアルゴリズムに従って暗号化されて送信されてよい。続いて、ステップS121で、CPU34は、ステップS117で決定したブロックアドレスをサーバ102に送信する。
そして、ステップS123で、CPU34は、データ(暗号化されたdsCHG_MODEコマンド)をサーバ102から受信したか否かを判断する。ステップS121の送信に応じてサーバ102がデータを返すので、当該データの受信を待機する。
ステップS123で“YES”の場合、つまり、上記データを受信した場合には、CPU34は、ステップS125で、受信したデータ(暗号化されたdsCHG_MODEコマンド)をメモリカード28に送信する。これによって、メモリコントローラ62はダウンロードモードに遷移することとなる。
さらに、ステップS127で、CPU34はdlRD_IFコマンドをメモリカード28に発行する。このdlRD_IFコマンドは、乱数およびユニークIDを読むためのコマンドである。そして、ステップS129で、CPU34は、データ(暗号化された乱数およびユニークID)をメモリカード28から受信したか否かを判断する。dlRD_IFコマンドに応じてメモリコントローラ62は暗号化された乱数およびユニークIDを返すので、当該データの受信を待機する。
ステップS129で“YES”の場合、つまり、上記データを受信した場合には、CPU34は、ステップS131で当該受信したデータ(暗号化された乱数およびユニークID)をサーバ102に送信する。
続いて、ステップS133で、CPU34はdlPRT_OFFコマンドをメモリカード28に発行する。このdlPRT_OFFコマンドは、ライトプロテクトを解除するためのコマンドである。ステップS133を終了すると、処理は図22のステップS135に進む。
図22のステップS135では、CPU34は、ファイルデータ量に関するデータをサーバ102から受信したか否かを判断する。ステップS131におけるデータ送信に応じて、サーバ102は、ダウンロードするデータ(書込みファイル)を準備し、まず当該ファイルデータ量を送信してくるので、このステップS135では当該ファイルデータ量の受信を待機する。ステップS135で“YES”の場合、CPU34はステップS137で受信したファイルデータ量を記憶領域508に記憶する。
続いて、ステップS139で、CPU34は、データ(暗号化された2KByte+8Byteのデータ)をサーバ102から受信したか否かを判断する。なお、ファイルデータ量の送信の後、サーバ102は、書込みファイルから所定サイズずつデータを送信する。具体的には、サーバ102は、2KByteのデータに8ByteのMICを付加したデータを暗号化して送信するので、このステップS139では当該データの受信を待機する。
ステップS139で“YES”の場合、つまり、上記データを受信した場合には、CPU34は、ステップS141で、受信したデータとともに書き込むページアドレスをメモリカード28に送信する。なお、サーバ102からは所定サイズごとのデータが送信されてくるので、CPU34は、フラッシュメモリ64の管理データやブロックアドレス等に基づいて、データを受信するごとに、当該データを書き込むページアドレスを決定することができる。続くステップS143で、CPU34は、dWR_PAGEコマンドをメモリカード28に発行する。このdWR_PAGEコマンドは、ステップS141で送信したデータを指定ページアドレスに書き込むこと指示するコマンドである。
そして、ステップS145で、CPU34は、ファイルの書込みが終了したか、または、1ブロックの書込みが終了したかを判断する。上述のように所定サイズごとにデータがサーバ102から送信されてくるので、CPU34は、書き込んだデータ量(メモリカード28に送信したデータ量)を算出することができる。したがって、CPU34は、当該書き込んだデータ量がファイルデータ量に達したか、または1ブロックに達したかを判断することができる。ステップS145で“NO”の場合、処理はステップS139に戻り、ファイルの書込みが終了し、または1ブロックの書込みが終了するまで、データの書込みが繰り返される。
一方、ステップS145で“YES”の場合には、CPU34は、ステップS147でdlCHG_MODEコマンドをメモリカード28に発行する。このdlCHG_MODEコマンドは、ダウンロードモードからゲームモードに遷移させるための遷移コマンドである。そして、ステップS149で、CPU34はファイルの書込みが終了したか否かを判断する。ステップS149で“NO”の場合、つまり、1ブロックの書込みが終了したが、書込みファイルのすべてを書き終えていない場合には、処理は図20のステップS107に戻り、残りのデータを書き込むために、ゲームモードにおけるステップS107からの処理が再び行われる。一方、ステップS149で“YES”の場合には、このダウンロード処理を終了する。
図23から図26には、ダウンロード処理におけるメモリコントローラ62の動作の一例が示される。なお、上述のように、ダウンロード処理はゲームモードにおいて開始されるので、図23では、電源がオンされてメモリコントローラ62がゲームモードに置かれるまでの処理を、ステップS201からS205として記載している。
処理が開始されると、図23のステップS201で、メモリコントローラ62はモードをゲームモードにする。内部RAM66のモード記憶領域300にはゲームモードを示すデータが記憶される。
次に、ステップS203で、メモリコントローラ62は、ダウンロード領域204およびゲーム領域202を読み出しのみ可能な状態にする。たとえば、メモリコントローラ62は、フラッシュメモリ64の各領域に対するアクセスの状態を示すデータを内部RAM66に生成しておく。そして、当該データにおいて、ダウンロード領域204およびゲーム領域202について、読出しのみ可能な状態であることを示すデータを設定する。
続いて、ステップS205で、メモリコントローラ62は、キー1およびキー3をフラッシュメモリ64のインフォメーション領域200から内部RAM66のワークエリアに読み出して復号化し、キー1およびキー3をキー記憶領域302に展開する。
続くステップS207以降の処理がメモリコントローラ62のダウンロード処理に相当する。メモリコントローラ62は、ステップS207で、gRD_UIDコマンドをコネクタ60を介して受信したか否かを判断する。ステップS207で“YES”の場合、つまり、ユニークIDを読み取るためのコマンドを受信した場合には、メモリコントローラ62は、ステップS209で、インフォメーション領域200の記憶領域220からユニークIDを読み出して、当該ユニークIDをコネクタ60に出力する。なお、gRD_UIDコマンドがスクランブルなどで暗号化して送信される場合には、受信したデータを復号化して、当該データがgRD_UIDコマンドであるか否かを判断する。また、メモリコントローラ62がコネクタ60に出力したデータは、コネクタ32等を介してCPU34に与えられる。
ステップS209を終了し、またはステップS207で“NO”の場合、メモリコントローラ62は、ステップS211でgRD_IFコマンドを受信したか否かを判断する。なお、gRD_IFコマンドがスクランブルなどで暗号化される場合、受信したデータを復号化して、当該データがgRD_IFコマンドであるか否かを判断する。ステップS211で“NO”の場合、処理はステップS207へ戻る。
一方、ステップS211で“YES”の場合、つまり、乱数およびユニークIDを読み取るためのコマンドを受信した場合には、メモリコントローラ62は、ステップS213で、乱数およびユニークIDをキー1で暗号化する。なお、メモリコントローラ62は、記憶領域304に乱数を発生し、また、メモリコントローラ62はインフォメーション領域200の記憶領域220からユニークIDをワークエリアに読み出す。また、暗号化に使用されるキー1は、記憶領域302に既に展開されている。続くステップS215で、メモリコントローラ62は、暗号化された乱数およびユニークIDを出力する。
続いて、ステップS217で、メモリコントローラ62は、gCHG_DL_MODEコマンドを受信したか否かを判断する。このgCHG_DL_MODEコマンドは、サーバ102でメモリカード28が正規なカードであると判断された場合にCPU34から発行されるので、ステップS217で当該コマンドの受信を待機する。なお、gCHG_DL_MODEコマンドがスクランブルなどで暗号化される場合、受信したデータを復号化して、当該データがgCHG_DL_MODEコマンドであるか否かを判断する。
ステップS217で“YES”の場合、つまり、DLセキュアモードに遷移するための遷移コマンドを受信した場合には、メモリコントローラ62は、ステップS219でゲームモードからDLセキュアモードに遷移する。モード記憶領域300にはDLセキュアモードを示すデータを記憶する。
続いて、図24のステップS221で、メモリコントローラ62は、インフォメーション領域200の記憶領域214からキー1を読み出して復号化し、内部RAM66の記憶領域302に展開する。なお、キー記憶領域302には既にキー1が展開されているが、事故によるデータの置き換わり等を回避するために、このステップS221の処理でキー1を展開し直す。
また、ステップS224で、メモリコントローラ62は、フラッシュメモリ64の全領域をアクセス不可状態にする。たとえば、メモリコントローラ62は、フラッシュメモリ64の各領域に対するアクセスの状態を示すデータにおいて、全領域について、アクセス不可能な状態であることを示すデータを設定する。
そして、ステップS225で、メモリコントローラ62はデータ(暗号化されたdsCHG_MODEコマンド)を受信したか否かを判断する。DLセキュアモードに遷移した後に、この暗号化されたdsCHG_MODEコマンドがサーバ102から送信されるので、このステップS225で、当該データの受信を待機する。
ステップS225で“YES”の場合、つまり、データ(暗号化されたdsCHG_MODEコマンド)を受信した場合には、メモリコントローラ62は、ステップS227で、受信したデータをキー1で復号化する。dsCHG_MODEコマンドは、サーバ102において、このメモリカード28のユニークIDに対応するキー1を用いて暗号化されているので、記憶領域302のキー1を用いて復号化を行う。
続いて、ステップS229で、メモリコントローラ62は、dsCHG_MODEコマンドからブロックアドレスならびにユニークIDおよび乱数を取得する。dsCHG_MODEコマンドには、ダウンロードしたデータを書き込むブロックアドレスが指定されており、また、先にステップS215で出力した乱数およびユニークIDが埋め込まれている。
そして、ステップS231で、メモリコントローラ62は、取得したユニークIDおよび乱数が、メモリカード28内のユニークIDおよび乱数、つまり、内部RAM66に記憶されているユニークIDおよび記憶領域304に記憶されている乱数と一致するか否かを判断する。
ステップS231で“NO”の場合、つまり、ダウンロードモードへの遷移コマンドが正当なコマンドではない場合には、メモリコントローラ62は、ステップS233でイリーガルモードに遷移する。モード記憶領域300にはイリーガルモードを示すデータが記憶される。イリーガルモードに遷移すると、メモリコントローラ62はダウンロード処理を行わないので、不正な書込みを防止できる。
一方、ステップS231で“YES”の場合、つまり、ダウンロードモードへの遷移コマンドが正当なコマンドである場合には、メモリコントローラ62は、ステップS235で、DLセキュアモードからダウンロードモードに遷移する。モード記憶領域300にはダウンロードモードを示すデータが記憶される。
また、ステップS237で、メモリコントローラ62は、dsCHG_MODEコマンドで指定されたブロックのみをアクセス可能状態にする。たとえば、メモリコントローラ62は、フラッシュメモリ64の各領域に対するアクセスの状態を示すデータにおいて、ダウンロード領域のメモリマップを指定ブロックのみに変更するとともに、当該ダウンロード領域のみについて、アクセス可能状態であることを示すデータを設定する。
さらに、ステップS239で、メモリコントローラ62は、インフォメーション領域200の記憶領域216からキー2を読み出して復号化し、キー1に代えて内部RAM66の記憶領域302に展開する。なお、キー2の展開前に、キー記憶領域302からキー1を消去しておく。
続いて、図25のステップS241で、メモリコントローラ62は、dlRD_IFコマンドを受信したか否かを判断する。このdlRD_IFコマンドは、暗号化されたdsCHG_MODEコマンドの転送後に、CPU34によって発行されるので、このステップS241で当該dlRD_IFコマンドの受信を待機する。
ステップS241で“YES”の場合、つまり、乱数およびユニークIDを読むためのコマンドを受信した場合には、メモリコントローラ62は、ステップS243で、乱数およびユニークIDをキー2で暗号化する。なお、メモリコントローラ62は、記憶領域304に乱数を発生し、インフォメーション領域200の記憶領域220からユニークIDを読み出す。そして、乱数およびユニークIDを記憶領域302に展開されているキー2で暗号化する。ステップS245で、メモリコントローラ62は、暗号化された乱数およびユニークIDを出力する。
続いて、ステップS247で、メモリコントローラ62は、dlPRT_OFFコマンドを受信したか否かを判断する。CPU34は、ステップS245で出力された暗号化された乱数およびユニークIDをサーバ102に転送後に、このdlPRT_OFFコマンドを発行するので、ステップS247で当該コマンドの受信を待機する。
ステップS247で“YES”の場合、つまり、ライトプロテクトを解除するためのコマンドを受信した場合には、メモリコントローラ62は、ステップS249でフラッシュメモリ64のダウンロード領域204に対するライトプロテクトをオフにする。具体的には、メモリコントローラ62は、内部RAM66の記憶領域306に記憶されるライトプロテクトを示すフラグをオフにする。
続いて、ステップS251で、メモリコントローラ62は、データ(暗号化された2KByte+8Byteのデータ)を受信したか否かを判断する。このデータは、サーバ102から送信されたダウンロードデータである。また、受信データには、ゲーム装置10のCPU34によって、書き込むページアドレスが追加されている。
ステップS251で“YES”の場合、メモリコントローラ62は、ステップS253で、受信したデータとページアドレスを内部RAM66のワークエリアに記憶する。一方、ステップS251で“NO”の場合、処理は図26のステップS269に進む。
続いて、ステップS255では、メモリコントローラ62は、dWR_PAGEコマンドを受信したか否かを判断する。このdWR_PAGEコマンドは、ゲーム装置10のCPU34によって、ダウンロードデータの転送後に発行されるので、ステップS255で当該dWR_PAGEコマンドの受信を待機する。
ステップS255で“YES”の場合、つまり、書込みコマンドを受信した場合には、処理は図26のステップS257に進む。ステップS257では、メモリコントローラ62は、記憶領域306のライトプロテクトがオフであるか否かを判断する。
ステップS257で“YES”の場合、つまり、ダウンロードしたデータの書込みが許可されている場合には、メモリコントローラ62は、ステップS259で、受信したデータ(暗号化された2KByte+8Byteのデータ)をキー2で復号化する。なお、受信したデータは、サーバ102において、メモリカード28のユニークIDに対応するキー2で暗号化されている。この復号化によって、2KByteのダウンロード用データおよび8ByteのMICを取得できる。
続いて、ステップS261で、メモリコントローラ62は、復号化した2KByteのデータに対して、キー3で8ByteのMICを算出する。なお、このMIC算出の際には、内部RAM66に記憶されているユニークIDおよび乱数を初期値として使用する。また、算出用のキー3は、記憶領域302に記憶されているキー2の一部(共用部分)とキー3とによって構成される。
そして、ステップS263で、メモリコントローラ62は、算出したMICが復号化したMICと一致するか否かを判断する。ステップS263で“NO”の場合、つまり、ダウンロードしたデータが不正なデータと認められる場合には、処理はステップS265へ進む。ステップS265では、メモリコントローラ62は、書込みを実行しない。したがって、不正なデータがダウンロード領域204に書込まれるのを防止できる。ステップS265を終了すると、このダウンロード処理を終了する。
一方、ステップS263で“YES”の場合、つまり、ダウンロードしたデータが正規なデータである場合には、メモリコントローラ62は、ステップS267で、復号化した2KByteのデータを、指定されたページに書き込む。
続いて、ステップS269で、メモリコントローラ62は、dlCHG_MODEコマンドを受信したか否かを判断する。このdlCHG_MODEコマンドは、ファイルの書込みが終了したか、または、1ブロックの書込みが終了したときに、CPU34によって発行される。ステップS269で“NO”の場合、処理は図25のステップS251に戻る。したがって、ファイルの書込みが終了するか、または1ブロックの書込みが終了するまでは、ダウンロードされた所定サイズ(2KByte)のデータのダウンロード領域204への書込みが繰返される。
一方、ステップS269で“YES”の場合、つまり、ゲームモードに遷移させる遷移コマンドを受信した場合には、メモリコントローラ62は、ステップS271で、ダウンロードモードからゲームモードに遷移する。モード記憶領域300には、ゲームモードを示すデータが記憶される。また、ステップS273で、メモリコントローラ62は、ステップS203と同様にして、ダウンロード領域204およびゲーム領域202を読出しのみ可能状態にする。なお、ダウンロード領域のメモリマップが指定ブロックに変更されているので、インフォメーション領域200に規定された各領域の境界データ(開始アドレス)に基づいて、ダウンロード領域204を元に戻し、当該ダウンロード領域204に対して読出しのみ可能状態を示すデータを設定する。
さらに、ステップS275で、メモリコントローラ62は、インフォメーション領域200の記憶領域214から読み出したキー1を復号化して、キー2に代えて内部RAM66のキー記憶領域302にキー1を展開する。ステップS275を終了すると、処理はステップS207に戻る。ダウンロードするファイルの書込みが終了していない場合には、ダウンロード処理がゲームモードから再び実行されて、残りのデータの書込みが行われることとなる。
図27から図29には、ダウンロード処理におけるサーバ102の動作の一例が示される。ダウンロード処理を開始すると、サーバ102のCPUは、ステップS301で、ユニークIDとゲームIDとを受信したか否かを判断する。ダウンロード処理では、最初にゲーム装置10からメモリカード28のユニークIDとゲームIDとがネットワーク106を介して送信されるので、このステップS301でその受信を待機する。
ステップS301で“YES”の場合、サーバ102のCPUは、ステップS303で、受信したユニークIDおよびゲームIDをRAMの記憶領域404および記憶領域406に記憶する。
続いて、ステップS305で、サーバ102のCPUは、データ(暗号化された乱数およびユニークID)を受信したか否かを判断する。メモリカード28の認証のために、最初のユニークIDの送信の後にゲーム装置10から上記データが送信されるので、このステップS305でその受信を待機する。
ステップS305で“YES”の場合には、サーバ102のCPUは、ステップS307で、受信したデータ(暗号化された乱数およびユニークID)を、ユニークIDに対応するキー1で復号化する。具体的には、受信データは、メモリカード28のメモリコントローラ62によってキー1で暗号化されているので、CPUは、記憶領域404の最初に受信したユニークIDに対応するキー1、2および3をデータベースから読み出して、記憶領域408に記憶する。そして、そのキー1で受信データを復号化する。これによって、乱数およびユニークIDを取得することができ、取得された乱数およびユニークIDは記憶領域410に記憶される。
そして、ステップS309で、サーバ102のCPUは、記憶領域410に記憶された復号化されたユニークIDが、記憶領域404に記憶された初めのユニークIDと一致するか否かを判断する。
ステップS309で“YES”の場合、つまり、メモリカード28が正規のカードであると認められる場合には、サーバ102のCPUは、ステップS311でメモリカード28が正規カードであることを示すデータをネットワーク106を介してゲーム装置10に送信する。ステップS311を終了すると、処理は図28のステップS315へ進む。
一方、ステップS309で“NO”の場合、つまり、メモリカード28が正規のカードであるとは認められない場合には、サーバ102のCPUは、ステップS313でメモリカード28が正規カードではないことを示すデータをゲーム装置10に送信する。そして、このダウンロード処理を終了する。
図28のステップS315では、サーバ102のCPUは、ステップS315でブロックアドレスを受信したか否かを判断する。ステップS311の送信に応じて、ゲーム装置10からブロックアドレスが送信されるので、ステップS315でその受信を待機する。
ステップS315で“YES”の場合、サーバ102のCPUは、ステップS317で受信したブロックアドレスを記憶領域412に記憶する。続いて、ステップS319で、サーバ102のCPUは、ブロックアドレスならびにユニークIDおよび乱数を用いて、dsCHG_MODEコマンドを生成する。このdsCHG_MODEコマンドは、ダウンロードモードに遷移させるための遷移コマンドである。dsCHG_MODEコマンドにおいてはブロックアドレスが指定され、ダウンロードモードでは、この指定されたブロックアドレスへの書込みが可能にされることとなる。また、dsCHG_MODEコマンドには、記憶領域410の乱数およびユニークIDが含められる。
また、ステップS321で、サーバ102のCPUは、生成したdsCHG_MODEコマンドを、ユニークIDに対応するキー1を用いて暗号化する。そして、ステップS323で、サーバ102のCPUは、暗号化されたdsCHG_MODEコマンドをゲーム装置10に送信する。
続いて、ステップS325で、サーバ102のCPUは、データ(暗号化された乱数およびユニークID)をゲーム装置10から受信したか否かを判断する。メモリコントローラ62はダウンロードモードに遷移すると、乱数およびユニークIDをキー2で暗号化してサーバ102に送信するので、このステップS325でその受信を待機する。
ステップS325で“YES”の場合、つまり、上記データ(暗号化された乱数およびユニークID)を受信した場合には、サーバ102のCPUは、ステップS327で、受信したデータ(暗号化された乱数およびユニークID)を、ユニークIDに対応するキー2で復号化する。これによって取得された乱数およびユニークIDは、記憶領域410に記憶される。ステップS327を終了すると、処理は図29のステップS329へ進む。
図29のステップS329では、サーバ102のCPUは、書込みファイルを準備する。具体的には、データベースに記憶されたダウンロード用データから所定のデータを読み出して、RAMの記憶領域414に記憶する。書込みファイルは、たとえば、ユニークIDに対応するファイルであってよいし、ゲームIDに対応するファイルであってよいし、あるいは、ユニークIDやゲームIDによらない所定のファイルであってよい。ステップS331では、サーバ102のCPUは、書込みファイルのファイルデータ量をゲーム装置10に送信する。
続いて、ステップS333で、サーバ102のCPUは、書込みファイルから所定サイズ(この実施例では2KByte)のデータを取り出す。書込みファイルのデータは所定サイズごとに分けて送信される。
ステップS335で、サーバ102のCPUは、2KByteのデータについて、8ByteのMICを、ユニークIDに対応するキー3で算出する。なお、MIC算出の初期値として、記憶領域410の乱数およびユニークIDが使用される。続くステップS337で、サーバ102のCPUは、2KByteのデータに8ByteのMICを追加する。そして、ステップS339で、サーバ102のCPUは、2KByte+8Byteのデータを、ユニークIDに対応するキー2で暗号化する。なお、暗号化の初期値として、記憶領域410のユニークIDおよび乱数が使用される。ステップS341で、サーバ102のCPUは、暗号化された2KByte+8Byteのデータをゲーム装置10に送信する。
続くステップS343で、サーバ102のCPUは、ファイルの送信が終了したか、または、1ブロックの送信が終了したかを判断する。なお、ファイルの送信か終了したかは、書込みファイルのデータ量とデータ送信量の累積とに基づいて判断することができる。ステップS343で“NO”の場合には、つまり、1ブロックの送信が終了せず、または、ファイルの送信が終了していない場合には、処理はステップS333に戻って、所定サイズのデータの送信のための処理を繰返す。
一方、ステップS343で“YES”の場合には、サーバ102のCPUは、ステップS345でファイルの送信が終了したか否かを判断する。ステップS345で“NO”の場合、つまり、1ブロック単位のデータの送信を終了したが書込みファイルのすべてのデータの送信を終えていない場合には、処理は図27のステップS305に戻る。メモリコントローラ62がゲームモードにある場合のダウンロード処理から繰返すことによって、次のブロックへのファイルの書込みを行う。一方、ステップS345で“YES”であれば、ファイルの書込みを終了したので、ダウンロード処理を終了する。
バックアップ領域206に対するセキュリティシステムとしてのゲーム装置10のバックアップ処理の動作について図30から図33のフロー図を参照しながら説明する。
図30はバックアップ書込み処理におけるゲーム装置10の動作の一例を示す。バックアップ領域206への書込み処理を開始すると、ステップS401で、CPU34は、書き込むデータをRAM42に準備する。この書き込むデータは、CPU34がゲーム処理で生成したバックアップデータであり、記憶領域510に記憶される。
次に、ステップS403で、CPU34は、書き込むデータにパリティを付ける。図15に示したように、この実施例では、各バイトデータが「7ビットのデータ」+「パリティビット(1ビット)」のフォーマットとなるようにして、パリティ付きデータが生成される。つまり、各バイトの先頭7ビットは、生成されたバックアップデータであり、最終ビットに先頭7ビットのパリティが追加される。生成されたパリティ付きデータは、記憶領域512に記憶される。
続いて、ステップS405で、CPU34は、バックアップ領域206の空き領域を確認し、書き込むブロックアドレスを決定する。なお、フラッシュメモリ64の記憶領域のうち、どの領域が使用され、またはどの領域が空き領域であるかなどの情報は、たとえばインフォメーション領域200にヘッダ情報として記憶されているので、CPU34は当該ヘッダ情報に基づいてフラッシュメモリ64の管理データを生成し、当該管理データに基づいて、バックアップ領域206における空き領域を確保して、書き込むブロックアドレスを決定する。決定されたブロックアドレスは、記憶領域514に記憶される。
そして、ステップS407で、CPU34は、gCHG_BK_MODEコマンドをメモリカード28に発行する。このgCHG_BK_MODEコマンドは、バックアップモードに遷移させるための遷移コマンドである。この遷移コマンドにおいて、書き込むブロックアドレスが指定される。なお、メモリコントローラ62は、この遷移コマンドに応じてバックアップモードに遷移し、バックアップ領域206のうち指定ブロックのみがアクセス可能にされる。
続くステップS409で、CPU34は、パリティ付きデータを書き込むためのライトコマンドをメモリカード28に発行する。このライトコマンドは、書き込もうとしているパリティ付きデータを含む。上述のダウンロード領域204への書込みの場合と同様に所定サイズずつデータが書き込まれるように、たとえば、ライトコマンドには所定サイズのデータを添付する。このライトコマンドに応じて、メモリコントローラ62は、データをバックアップ領域206の指定ブロックに書き込む。
そして、ステップS411で、CPU34は、用意したデータを全て書き終えたか、または、1ブロックのデータを書き終えたかを判断する。なお、用意したデータ(パリティ付きデータ)の書込みか終了したかは、記憶領域512に記憶したパリティ付きデータのデータ量とライトコマンドによるデータ送信量の累積とに基づいて判断することができる。ステップS411で“NO”の場合には、処理はステップS409に戻って、ライトコマンドによる書込みを繰返す。
一方、ステップS411で“YES”の場合には、CPU34は、ステップS413でbCHG_MODEコマンドをメモリカード28に発行する。このbCHG_MODEコマンドは、バックアップモードからゲームモードに遷移するための遷移コマンドである。なお、この遷移コマンドに応じて、メモリコントローラ62はゲームモードに遷移する。
そして、ステップS415で、CPU34は、用意したデータ(パリティ付きデータ)を全て書き終えたか否かを判断する。ステップS45で“NO”の場合には、つまり、1ブロックのデータを書き終えたが書込みしていないパリティ付きデータが残っている場合には、処理はステップS405に戻って、次のブロックへの書込みのための処理を実行する。一方、ステップS415で“YES”であれば、このバックアップ書込み処理を終了する。
図31はバックアップ読出し処理におけるゲーム装置10の動作の一例を示す。バックアップ領域206からの読出し処理を開始すると、ステップS501で、CPU34は、読み出すバックアップデータの格納場所を確認する。なお、読み出すバックアップデータは、ユーザの操作またはプログラム等に従って選択される。各バックアップデータの格納場所に関する情報は、たとえばフラッシュメモリ64のヘッダ情報に含まれる。
次に、ステップS503で、CPU34は、読み出すブロックアドレスを決定する。読み出すバックアップデータの格納場所から、読み出すブロックアドレスを決定し、記憶領域516に記憶する。
続いて、ステップS505で、CPU34はgCHG_BK_MODEコマンドをメモリカード28に発行する。このgCHG_BK_MODEコマンドは、バックアップモードに遷移するための遷移コマンドである。この遷移コマンドではステップS503で決定された読み出すブロックアドレスが指定される。この遷移コマンドに応じて、メモリコントローラ62はバックアップモードに遷移し、指定ブロックのみアクセス可能にされる。
ステップS507では、CPU34は、読み出すページアドレスを指定してリードコマンドをメモリカード28に発行する。このリードコマンドは、データの読出しを指示するためのコマンドである。たとえば、指定されたページのデータの読出しを指示することができる。なお、このリードコマンドに応じて、メモリコントローラ62は、指定ページのデータをバックアップ領域206から読み出す。そして、当該読み出したデータが正当なデータであれば、当該データがCPU34に出力される。
ステップS509では、CPU34は、データをメモリカード28から受信したか否かを判断する。上述のように、読み出したデータが正当であれば当該データが出力されるので、このステップS509では、その受信を待機する。なお、メモリコントローラ62の読み出したデータが正当でないと判定される場合、イリーガルモードに遷移してデータが出力されないので、このバックアップ読出し処理は正常に動作しなくなる。
ステップS509で“YES”の場合には、CPU34は、ステップS511で、受信したデータ、すなわち読み出したデータをRAM42の記憶領域518に記憶する。そして、ステップS513で、CPU34は、読み出すデータをすべて読み出したか、または、1ブロックの読出しが終了したかを判断する。なお、読み出すデータを全て読み出したかどうかは、読み出すデータのデータ量とリードコマンドによる読出しデータ量の累積とに基づいて判断することができる。ステップS513で“NO”の場合には、処理はステップS507に戻り、リードコマンドによる読出し処理を繰返す。
一方、ステップS513で“YES”の場合には、CPU34は、ステップS515で、bCHG_MODEコマンドをメモリカード28に発行する。このbCHG_MODEコマンドは、ゲームモードに遷移するための遷移コマンドである。この遷移コマンドに応じて、メモリコントローラ62はゲームモードに遷移する。
そして、ステップS517で、CPU34は、読み出すデータを全て読み出したか否かを判断する。ステップS517で“NO”の場合、つまり、1ブロックの読出しを終了したが読み出すべきデータが残っている場合には、処理はステップS503に戻って、次のブロックの読出しのための処理を実行する。一方、ステップS517で“YES”であれば、このバックアップ読出し処理を終了する。
図32および図33はバックアップ処理におけるメモリコントローラ62の動作の一例を示す。図32のステップS601で、メモリコントローラ62は、gCHG_BK_MODEコマンドを受信したか否かを判断する。このgCHG_BK_MODEコマンドは、バックアップモードへの遷移コマンドである。ステップS601で“NO”の場合、このバックアップ処理を終了する。
一方、ステップS601で“YES”の場合、メモリコントローラ62は、ステップS603でゲームモードからバックアップモードに遷移する。内部RAM66のモード記憶領域300にはバックアップモードを示すデータが記憶される。続くステップS605で、メモリコントローラ62は、バックアップ領域206のうち、gCHG_BK_MODEコマンドで指定されたブロックのみをアクセス可能状態にする。たとえば、メモリコントローラ62は、フラッシュメモリ64の各領域に対するアクセスの状態を示すデータを内部RAM66に記憶しておき、当該データにおいて、バックアップ領域206のメモリマップを指定ブロックのみに変更するとともに、当該バックアップ領域のみについて、アクセス可能状態であることを示すデータを設定する。
そして、メモリコントローラ62は、バックアップモードで受信したコマンドに応じた処理を実行する。すなわち、ステップS607で、メモリコントローラ62は、ライトコマンドを受信したか否かを判断する。ステップS607で“YES”の場合、メモリコントローラ62は、ステップS609で、ライトコマンドとともに受信したデータを、遷移コマンドで指定されたバックアップ領域206のブロックに書き込む。
ステップS609を終了し、または、ステップS607で“NO”の場合、ステップS611で、メモリコントローラ62は、bCHG_MODEコマンドを受信したか否かを判断する。ステップS611で“YES”の場合、つまり、ゲームモードへの遷移コマンドを受信した場合には、メモリコントローラ62は、ステップS613で、バックアップモードからゲームモードに遷移する。モード記憶領域300には、ゲームモードを示すデータを記憶する。続いて、ステップS615で、メモリコントローラ62は、バックアップ領域206をアクセス不可状態にする。たとえば、フラッシュメモリ64の各領域に対するアクセスの状態を示すデータにおいて、バックアップ領域のメモリマップを元に戻すととともに、当該バックアップ領域206に対してアクセス不可能状態であることを示すデータを設定する。ステップS615を終了すると、このバックアップ処理を終了する。
一方、ステップS611で“NO”の場合、図33のステップS617で、メモリコントローラ62は、リードコマンドを受信したか否かを判断する。ステップS617で“YES”の場合、メモリコントローラ62は、ステップS619で、リードコマンドで指定されたページがアクセス可能なブロック内であるか否かを判断する。アクセス可能なブロックは、バックアップモードへの遷移コマンドで指定されたバックアップ領域206内のブロックである。この判定によって、適切な読出し指定が行われたデータに対してのみ、パリティチェックを行うようにすることができ、不正な読出し命令を排除することができる。
ステップS619で“YES”の場合、メモリコントローラ62は、ステップS621で、リードコマンドで指定されたページのパリティをチェックする。具体的には、メモリコントローラ62は、指定されたページデータを内部RAM66のワークエリアに読出し、各バイトの先頭7ビットのパリティを算出し、当該計算結果を各バイトの最終ビットと比較する。
そして、ステップS623で、メモリコントローラ62は、パリティチェックの結果が正しいか否かを判断する。ステップS623で“YES”の場合、つまり、全バイトについて、算出されたパリティビットと最終ビットとが等しい場合には、メモリコントローラ62は、ステップS625で、指定されたページのデータをCPU34に出力する。
一方、ステップS623で“NO”の場合、つまり、算出されたパリティビットと最終ビットとが等しくないバイトが1つでも検出された場合には、読み出そうとしているデータが不正であると認められるので、メモリコントローラ62は、ステップS627でイリーガルモードに遷移する。モード記憶領域300にはイリーガルモードを示すデータが記憶される。イリーガルモードに遷移すると、メモリコントローラ62は、読み出したデータを出力しない。したがって、不正データが読み出されて利用されるのを防止できる。
なお、ステップS617で“NO”の場合、ステップS619で“NO”の場合、またはステップS625を終了すると、処理は図32のステップS607に戻る。
なお、上述の実施例では、ゲーム装置10に装着可能なメモリカード28のフラッシュメモリ64にダウンロード領域204を設けるようにしたが、他の実施例では、ゲーム装置10のハウジング16内にフラッシュメモリ64を設けて、当該フラッシュメモリ64にダウンロード領域204を設けるようにしてもよい。その場合、メモリコントローラ62もハウジング16内に設けられる。また、バックアップ領域206に関しても、同様に、ゲーム装置10のハウジング16内のフラッシュメモリ64に設けるようにしてよい。なお、フラッシュメモリ64をゲーム装置10のハウジング16に内蔵する場合、ユニークIDはゲーム装置10の識別情報であってもよい。
また、上述の各実施例では、メモリカード28ごとの暗号とするために、メモリカード28のユニークIDに対応するキー1、2および3を準備して、フラッシュメモリ64およびサーバ12に予め記憶するようにした。しかし、他の実施例では、ゲームタイトル(ゲームプログラム)またはアプリケーションの種類(アプリケーションプログラム)ごとの暗号とするようにしてもよく、その場合には、ゲームID(アプリケーションID)に対応するキー1、2および3を準備して、フラッシュメモリ64およびサーバ12に予め記憶する。そして、暗号化および復号化の際には、ゲームIDに対応するキーを用いるようにする。
また、上述の各実施例では、フラッシュメモリ64にダウンロード領域204とバックアップ領域206の2つの書込み領域を設けて、一方のダウンロード領域204に対してモード遷移と書込みデータの暗号化による段階的なセキュリティをかけ、他方のバックアップ領域206に対しては書込みデータのフォーマットによってセキュリティをかけるようにしていた。しかし、他の実施例では、フラッシュメモリ64にはいずれか一方の書込み領域のみを設けるようにしてよい。
この発明が詳細に説明され図示されたが、それは単なる図解および一例として用いたものであり、限定であると解されるべきではないことは明らかであり、この発明の精神および範囲は添付されたクレームの文言によってのみ限定される。