以下、本実施形態の一例に係る無線通信システムについて説明する。図1は、本実施形態における無線通信システム1の一例を示す図である。図1に示されるように、無線通信システム1の一例は、複数の情報処理装置10a〜10cを含む。以下では、情報処理装置10a〜10cを総称して情報処理装置10と表記することがある。
情報処理装置10は、無線通信を行うことが可能な情報処理装置であり、例えば、IEEE 802.11n等の無線LANの規格に準拠した通信を行うことが可能である。情報処理装置10は、図1に示すネットワークを介して他の情報処理装置10と通信可能である。また、情報処理装置10は、例えば他の無線LANアクセスポイントを介してインターネットや他のネットワークに接続することができる。
各情報処理装置10は、それぞれ別のユーザによって使用される。情報処理装置10は、例えば、携帯型のゲーム装置、据置型のゲーム装置、パーソナルコンピュータ、タブレット端末、スマートフォン等であってもよい。また、情報処理装置10は、任意のアプリケーションを実行可能である。複数の情報処理装置10は、全て同じ機種の装置であってもよいし、それぞれ異なる機種の装置であってもよい。
複数の情報処理装置10のうちの1の情報処理装置10が親機として機能し、他の1又は複数の情報処理装置10が子機として機能し、1の親機と少なくとも1の子機とで1のネットワークが構成される。例えば、図1では、情報処理装置10aが親機として機能し、情報処理装置10bおよび10cが子機として機能する。
親機および子機は互いに無線通信を行うことが可能であり、子機は親機を介して(又は親機を介さずに)別の子機との間で無線通信を行うことが可能である。なお、図1は単なる一例であり、無線通信システム1に含まれる装置の数は3台以上であってもよいし、2台であってもよい。
図2は、情報処理装置10の機能構成の一例を示すブロック図である。図2に示されるように、情報処理装置10は、情報処理部11と、記憶部12と、入力部13と、表示部14と、無線通信部15と、鍵格納部16とを含む。
情報処理部11は、CPU(Central Processing Unit)、DRAM、GPU(Graphics Processing Unit)等を含む。情報処理部11は、例えば記憶部12に記憶された情報処理プログラム(ゲームアプリケーションプログラムや他のアプリケーションプログラム等)を実行可能である。また、情報処理部11は、ネットワークを介して取得された情報処理プログラム、他の外部記憶媒体に記憶された情報処理プログラムを実行可能である。
記憶部12は、例えば、不揮発性のメモリやハードディスクであり、所定の情報処理プログラムを記憶する。入力部13は、ユーザによる入力を受け付ける。入力部13は、例えば、ボタン、方向指示キー、タッチパネル、情報処理装置10の姿勢や動きを検出するセンサ(例えば、慣性センサ)等であってもよい。
表示部14は、文字や画像を表示するための表示装置であり、例えば液晶表示装置や有機EL表示装置であってもよい。
無線通信部15は、ネットワークを介して外部の装置と無線通信を行う。本実施形態においては、無線通信部15は、例えば802.11n等の無線LANの規格に準拠した方式により、外部と通信を行う。
鍵格納部16は、装置共通鍵のセキュアな保管場所を提供するハードウェアである。装置共通鍵は、暗号および復号に用いるための鍵であり、複数の情報処理装置10に共通の鍵である。情報処理部11は、鍵格納部16にパラメータを与えることで、鍵を取得することは可能であるが、装置共通鍵自体を読み取ることはできない。すなわち、装置共通鍵は、ハードウェアに書き込まれており、ソフトウェアによって容易には取り出せないようになっている。
複数の情報処理装置10は、図1に示すネットワークに接続されて、所定の通信アプリケーション(例えば通信ゲームアプリケーション)を実行可能である。なお、複数の情報処理装置10の間で、ゲームアプリケーション以外の他の任意のアプリケーションが実行されてもよい。以下では、複数の情報処理装置10が互いに通信することで通信ゲームアプリケーションを実行することについて説明する。
図3は、情報処理装置10a〜10cの間で通信ゲームアプリケーションが実行される場合の通信の概要を示す図である。
複数の情報処理装置10a〜10cのうちの情報処理装置10aが親機として設定され、情報処理装置10bおよび10cが子機として設定されているものとする。初期的には、情報処理装置10a〜10cの間で無線接続は確立されていない。情報処理装置10a〜10cの間で無線接続が確立されてから、これら情報処理装置10a〜10cの間で通信ゲームが開始される。
具体的には、図3に示されるように、親機としての情報処理装置10aは、所定の時間間隔でアクションフレームをブロードキャストで送信する(S1)。例えば、情報処理装置10aは、100msec毎にアクションフレームを送信する。アクションフレームは、無線LANにおける管理フレームの一種である。詳細は後述するが、アクションフレームは、無線接続を確立するための情報(言い換えると、複数の装置間で行われる通信ゲームへの参加に必要な情報)を周囲に送信するためのフレームである。また、アクションフレームは、通信ゲームに参加している子機に、現在参加中の子機の情報を伝える機能もある。アクションフレームには、親機の情報(IPアドレス及びMACアドレス等)、通信ゲームアプリケーションの識別情報、通信ゲームに参加している子機の情報等が含まれる。なお、アクションフレームは、その他の情報を周囲の装置に一斉に伝達するためにも用いられる。例えば、アクションフレームに、アプリケーションに特有の情報(例えば、アプリケーションに用いられるアイテムや画像のID、アプリケーションの実行状況に関する情報等)が含められて送信されてもよい。
情報処理装置10b(子機1)は、親機から送信されたアクションフレームを受信すると、親機に対して通信ゲームへの参加要求を送信する(S2)。親機は、子機1からの参加要求を受信すると、子機1に対してIPアドレスを付与する(S3)。この時点で、親機と子機1との間で無線接続が確立される(子機1が通信ゲームのネットワークに参加する)。
同様に、情報処理装置10c(子機2)は、親機から送信されたアクションフレームを受信すると、親機に対して通信ゲームへの参加要求を送信する(S4)。親機は、子機2からの参加要求を受信すると、子機2に対してIPアドレスを付与する(S5)。この時点で親機と子機2との間で無線接続が確立される。そして、その後に子機1と子機2とが親機からアクションフレームを受信すると、親機と子機の情報を取得することができるため、情報処理装置10a〜10cの間で通信が可能となり通信ゲームが開始される。
情報処理装置10a〜10cの間で通信ゲームが実行されている間、これら情報処理装置10a〜10cの間で互いに通信が行われる。例えば、子機1が子機2に所定のデータD1を送信する場合、子機1は、あて先を子機2に指定して、データD1を親機に送信する(S6)。親機は、当該データD1を子機2に転送する(S7)。このように、子機1が別の子機2にユニキャストでデータを送信する場合、子機1は、親機を介して子機2にデータを送信する。
また、子機1が親機に所定のデータD2を送信する場合、子機1は、あて先を親機に指定して、データD2を親機に送信する(S8)。このように、子機が親機にデータを送信する場合、子機は、データを親機にユニキャストで送信する。
また、子機1は、ネットワーク内の全ての情報処理装置10(具体的には親機および子機2)にデータD3を送信する場合、子機1は、データD3をブロードキャストで送信する(S9)。
次に、図3において親機と子機1との間の接続が確立するまでの具体的な処理の流れを説明する。図4は、親機と子機1との間の無線接続が確立するまでの処理の流れを示す図である。
図4に示されるように、情報処理装置10aにおいて、ユーザの選択により自機が親機として設定される(S20)。例えば、情報処理装置10aにおいて通信ゲームアプリケーションを実行する旨の指示がなされると、情報処理装置10aの表示部14の画面に、自機が親機になるか否かをユーザに選択させる画像が表示される。ユーザによって親機になることが選択された場合、情報処理装置10aは、自機を親機として設定するとともに、自機のIPアドレスを設定する。このとき、親機は、IPアドレスの重複を確認するためのフレーム(Gratuitous ARP)を送信することなく、自機のIPアドレスを設定する。
具体的には、情報処理装置10aは、IPアドレスのネットワーク部をランダムに設定するとともに、IPアドレスのホスト部を「1」に設定する。例えば、情報処理装置10aは、IPアドレスとして「111.111.0.1」を設定する。なお、IPアドレスにおける1〜3オクテット目(「111.111.0」)はネットワーク部であり、4オクテット目(「1」)はホスト部である。ネットワーク部における1〜2オクテット目(「111.111」)は固定であり、3オクテット目はランダムに決定される。
情報処理装置10aが親機として設定されると、情報処理装置10aは、アクションフレームをブロードキャストで送信する(S1)。親機は、アクションフレームを所定の時間間隔で繰り返し送信する。具体的には、親機は、通信ゲームへの子機の参加を受け付けている間も、通信ゲームへの参加の受け付けを終了して通信ゲームが開始された後も、アクションフレームを所定の時間間隔で繰り返し送信する。
一方、情報処理装置10bは、自機が親機として設定されなかったため、子機1として動作している。子機1は、親機からのアクションフレームを受信すると、自機の表示部14において親機情報を表示する(S21)。子機1は、自機の周辺に存在する親機からアクションフレームを受信すると、例えば、アクションフレームに含まれる親機のMACアドレス、ユーザ名(ホスト名)、IPアドレス、およびゲームアプリケーションに関する情報を取り出す。そして、子機1は、これらの情報を親機情報として表示部14に表示する。子機1の周辺に複数の親機が存在する場合、子機1は、複数の親機のそれぞれについて親機情報を表示する。
子機1において表示された1又は複数の親機情報のうちの何れかがユーザによって選択されると、子機1は、選択された親機に対して参加要求を送信する(S22)。この参加要求には、子機1のMACアドレスが含まれる。
親機は、子機1から参加要求を受信すると、子機1のIPアドレスを生成するとともに、ARPテーブルを生成する(S23)。具体的には、親機は、複数の装置間でIPアドレスが重複しないように、参加要求を送信してきた順に子機のIPアドレスを割り当てる。なお、親機は、IPアドレスの重複を確認するためのフレーム(Gratuitous ARP)を送信することなく、子機1のIPアドレスを生成する。例えば、親機は、最初に参加要求を送信してきた子機1に対して、「111.111.0.2」をIPアドレスとして割り当てる。なお、ARPテーブルは、IPアドレスとMACアドレスとを対応付けしたテーブルである。S23においては、親機のIPアドレスおよびMACアドレスを対応付けし、かつ、子機1のIPアドレスおよびMACアドレスを対応付けしたARPテーブルが生成される。ARPテーブルの一例については、図6を参照して後に詳述する。
次に、親機は、生成したARPテーブルをアクションフレームに含めてブロードキャストで送信する(S24)。子機1は、このアクションフレームを受信し、アクションフレームに含まれるARPテーブルに基づいて、自機のIPアドレスを設定する(S25)。このとき、子機は、IPアドレスの重複を確認するためのフレーム(Gratuitous ARP)を送信することなく、自機のIPアドレスを設定する。また、子機1は、アクションフレームに含まれるARPテーブルを自機の記憶装置(例えば、無線通信部15内のメモリ、情報処理部11内のDRAM、又は、記憶部12)に格納する。これにより、親機と子機1との間の無線接続が確立し、これら2つの装置間で通信ゲームアプリケーションの実行に用いられるアプリケーションデータの送受信(「アプリデータ通信」という)が可能となる。
なお、S22において子機1から参加要求が送信されたことに応じて、親機と子機1との間で認証処理が行われてもよい。例えば、親機と子機1との間で予め定められたパスフレーズによる認証が行われてもよい。また、親機と子機1との間でオープン認証が行われてもよい。親機と子機1との間で無線LANの認証が成功した場合に、親機は、子機1のIPアドレスを生成してもよい。また、親機は、親機と子機1との間で無線LANの認証が成功した場合に、ARPテーブル(親機のIPアドレスおよびMACアドレスを対応付けし、かつ、子機1のIPアドレスおよびMACアドレスを対応付けしたテーブル)を生成してもよい。
次に、図4に示す処理の後、親機と子機2との間の接続が確立して、3つの装置間で通信ゲームが行われるまでの処理の流れを説明する。図5は、親機と子機2との間の無線接続が確立して3つの装置の間で通信ゲームが行われるまでの処理の流れを示す図である。
図5に示されるように、親機と子機1との間でアプリデータ通信が行われ、当該アプリデータ通信によって交換されたデータに基づいて、通信ゲームアプリケーションが実行される(S26)。例えば、親機および子機1の間で通信ゲームが開始されている場合、親機および子機1のそれぞれの入力部13に対する入力に応じたデータがアプリデータ通信により交換される。当該交換されたデータに基づいて、親機および子機1においてゲームアプリケーションが実行される。また、例えば、複数の情報処理装置10間で行われる通信ゲームが開始されておらず、親機が他の子機の参加を受け付けている場合は、通信ゲームが開始されるまでの間、親機と子機1との間で所定のデータが交換され、当該データに応じてアプリケーションが実行される。例えば、通信ゲームが開始されるまでの間は、親機から子機1(あるいは子機1から親機)へメッセージが送信されてもよいし、親機と子機1との間でアイテムの交換が行われてもよい。
親機と子機1との間でアプリデータ通信が行われている間も、親機は、所定の時間間隔でアクションフレームを送信する(S1)。情報処理装置10c(子機2)は、親機からのアクションフレームを受信したことに応じて、親機情報を自機の表示部14に表示するとともに、ユーザによる親機の選択を受け付ける(S27)。親機からのアクションフレームには、上記ARPテーブルが含まれているため、子機2は、親機情報に加えて、親機に接続している(通信ゲームに参加している)子機1の情報も取得することができる。このため、子機2は、S27において、親機情報に加えて、現在参加している子機1の情報も表示してもよい。
子機2において親機が選択されると、子機2は、親機に対して参加要求を送信する(S28)。この参加要求には、子機2のMACアドレスが含まれる。親機は、子機2から参加要求を受信すると、子機2のIPアドレスを生成するとともに、ARPテーブルを生成する(S29)。なお、親機は、IPアドレスの重複を確認するためのフレーム(Gratuitous ARP)を送信することなく、子機2のIPアドレスを生成する。例えば、親機は、2番目に参加要求を送信してきた子機2に対して、「111.111.0.3」をIPアドレスとして割り当てる。また、親機は、親機のIPアドレスおよびMACアドレスを対応付けし、子機1のIPアドレスおよびMACアドレスを対応付けし、かつ、子機2のIPアドレスおよびMACアドレスを対応付けしたARPテーブルを生成する。
そして、親機は、生成したARPテーブルをアクションフレームに含めてブロードキャストで送信する(S30)。子機2は、このアクションフレームを受信し、アクションフレームに含まれるARPテーブルに基づいて、自機のIPアドレスを設定するとともに、ARPテーブルを自機の記憶装置に格納する(S31)。
また、子機1もアクションフレームを受信し、当該アクションフレームに含まれるARPテーブルを自機の記憶装置に格納する(S32)。これにより、3つの装置10a〜10c間でネットワークが構築され、アプリデータ通信が可能となる。このように、既に親機に接続されて子機1において格納されていたARPテーブルが、子機2の参加に応じて更新される。
そして、例えば親機において通信ゲームの開始が指示されることにより、3つの装置10a〜10c間でアプリデータ通信が行われ、3つの装置10a〜10c間で通信ゲームアプリケーションが実行される(S33)。例えば、3つの装置10a〜10cのそれぞれに対応するキャラクタA〜Cが同一のゲーム空間において移動するゲームが行われる場合、各装置の入力部13に対する入力に応じて、各キャラクタA〜Cがゲーム空間内を移動する。この場合において、例えば、子機1の入力部13に対する入力に応じたデータが、親機および子機2に送信される。親機および子機2は、子機1が送信したデータに基づいてゲームアプリケーションを実行することにより、子機1に対応するキャラクタBの位置を更新する。
図6は、親機から送信されるアクションフレームに含まれるARPテーブルの一例を示す図である。図6に示されるように、ネットワーク内に親機、子機1および子機2が存在する場合、ARPテーブルには、親機のIPアドレスと、親機のMACアドレスと、親機のユーザ名(ホスト名)とを対応付けたノードデータ1が含まれる。また、ARPテーブルには、子機1のIPアドレスと、子機1のMACアドレスと、子機1のユーザ名(ホスト名)とを対応付けたノードデータ2が含まれる。また、ARPテーブルには、子機2のIPアドレスと、子機2のMACアドレスと、子機2のユーザ名(ホスト名)とを対応付けたノードデータ3が含まれる。
図6では、2台の子機が親機に接続されている場合のARPテーブルの一例について示したが、3台目の子機が親機に接続された場合には、ノードデータ1〜3に加えてノードデータ4を含むARPテーブルが親機によって生成されてブロードキャストされる。なお、同時に1の親機に接続することができる子機の数には上限がある。この接続可能な子機の上限数は、予め定められた数(例えば、「8」)であってもよいし、実行する通信ゲームアプリケーションの種類に応じて異なる数であってもよい。また、通信状況によって、接続可能な子機の上限数が定められてもよい。また、親機に接続されている他の周辺機器の数に応じて、接続可能な子機の上限数が定められてもよい。例えば、親機には、他の周辺機器として、無線コントローラが無線で接続されてもよく、親機に接続された無線コントローラの数に応じて、当該親機に接続可能な子機の上限数が定められてもよい。なお、この親機と周辺機器との間の無線通信の規格は、親機と子機との間の無線通信の規格と異なるものであってもよいし、同じものであってもよい。例えば、親機と周辺機器との間の無線通信は、Bluetooth(登録商標)の規格により行われてもよい。
また、通信ゲームに参加している複数の子機のうちの何れかがゲームから離脱した場合には、親機は、当該離脱した子機に対応するノードデータを削除してARPテーブルを更新する。親機は、次に送信するアクションフレームに、更新したARPテーブルを含めて送信する。これにより、通信ゲームに参加している子機は、離脱した子機を認識することができる。
次に、情報処理装置10a〜10c(親機、子機1および子機2)の間で無線接続が確立された後においてこれら複数の情報処理装置の間で行われる通信について説明する。
図7は、子機1から子機2にユニキャストでデータD1が送信される場合の処理の流れを示す図である。
図7に示されるように、子機1は、子機2へのデータD1を生成する(S40)。例えば、子機1から子機2へユニキャストでデータを送信する例としては、子機1のユーザから子機2のユーザに個別にメッセージを送信する例が挙げられる。例えば、通信ゲームが実行されている間、子機1のユーザBが子機2のユーザCだけに所定のメッセージを送信する場合、ユーザBは自身の情報処理装置10bの入力部13を用いて、ユーザC宛てのメッセージを作成する。具体的には、ユーザBによってメッセージが作成されると、子機1のゲームアプリケーションは、作成されたメッセージに応じたデータD1を生成する。ここで、子機1のゲームアプリケーションは、子機2のアドレスとして子機2のIPアドレスを指定する。
子機1(の情報処理部11)は、ARPテーブルを参照して、ゲームアプリケーションから指定されたIPアドレスに対応する子機2のMACアドレスを取得する。そして、子機1の情報処理部11は、取得した子機2のMACアドレスを指定して無線通信部15にデータD1を送信するように命令を出し、この命令に応じて、無線通信部15は、データD1を含むフレームを生成する(S41)。
次に、子機1の無線通信部15は、子機2へのデータD1を含むデータフレームを親機に送信する(S42)。具体的には、子機1の無線通信部15は、ソースアドレスとして子機1のMACアドレスを指定し、ディスティネーションアドレスとして子機2のMACアドレスを指定し、レシーバとして親機のMACアドレスを指定し、トランスミッターとして子機1のMACアドレスを指定して、フレームを無線で送信する。
親機は、当該フレームを受信すると、当該フレームを子機2に転送する(S43)。具体的には、親機の無線通信部15は、ソースアドレスとして子機1のMACアドレスを指定し、ディスティネーションアドレスとして子機2のMACアドレスを指定し、レシーバとして子機2のMACアドレスを指定し、トランスミッターとして親機のMACアドレスを指定して、データフレームを無線で送信する。
子機2は、親機からのデータフレームを受信すると、ディスティネーションアドレスから自機宛てのデータであると判断し、当該フレームに含まれるデータD1を取り出す。そして、子機2は、当該データD1に基づいてゲームアプリケーションを実行する。例えば、子機2は、データD1に応じたメッセージを表示部14に表示する。
このように、子機1から子機2へ個別にデータを送信する場合、子機1は親機を介して子機2にデータを送信する。子機1は、親機から送信されて自機に格納されたARPテーブルを参照して、子機2のMACアドレスを指定する。子機1には予め親機から送信されたARPテーブルが格納されているため、子機1が、子機2のIPアドレスから子機2のMACアドレスを取得するためのARP(Address Resolution Protocol)をネットワークに送信しなくても、子機1は子機2のMACアドレスを知ることができる。これにより、余計な通信を行わなくても、子機1は子機2に対してデータを送信することができ、遅延を少なくすることができる。
また、子機1のアプリケーションは、子機2にデータを送信する場合、子機2のIPアドレスを指定する。アプリケーション側から見ると、他の装置のMACアドレスを意識することなく、IPアドレスを用いることで他の装置との通信を行うことができる。このため、例えば、2つのネットワークをルーティングするルータを介することで別のIPネットワークに接続された装置間で通信アプリケーションを実行することができる。例えば、親機Aと子機A1と子機A2とで構成されたネットワークA(111.111.0.0)と、別の親機Bと子機B1とで接続されたネットワークB(111.111.1.0)とがある場合、ルータを介することでネットワークA内の子機A1と、ネットワークB内の子機B1との間で通信を行うことができる。この場合、情報処理装置10とは異なるルータ装置によってルーティングが行われてもよいし、情報処理装置10(例えば親機)がルーティング機能を有してもよい。
なお、図7に示す例では、子機1は子機2にデータをユニキャストで送信する場合に、親機を経由してデータを送信した。すなわち、ネットワーク内の親機および複数の子機はインフラストラクチャーモードで動作することとした。他の実施形態では、子機1は子機2にデータをユニキャストで送信する場合に、子機1が子機2に直接データを送信してもよい。すなわち、ネットワーク内の親機および複数の子機は、アドホックモードで動作してもよい。具体的には、子機1は、ARPテーブルを参照して、子機2のIPアドレスに対応するMACアドレスを特定する。子機1は、特定した子機2のMACアドレスを指定し、子機2に直接データを送信する。
図8は、子機1と親機との間でデータをユニキャストで送信する場合の処理の流れを示す図である。
図8に示されるように、子機1は、親機へのデータD21を生成する(S44)。子機1から親機へユニキャストでデータを送信する例としては、上記のように子機1のユーザから親機のユーザに個別にメッセージを送信する例が挙げられる。具体的には、子機1のゲームアプリケーションは、親機宛てのデータD21を生成し、親機のIPアドレスを指定する。
子機1の情報処理部11は、ARPテーブルを参照して、ゲームアプリケーションから指定されたIPアドレスに対応する親機のMACアドレスを特定し、特定した親機のMACアドレスを指定してデータD21を送信するように無線通信部15に命令を出す。そして、子機1の無線通信部15は、データD21を含むデータフレームを生成する(S45)。
次に、子機1の無線通信部15は、親機へのデータD21を含むフレームを親機に送信する(S46)。具体的には、子機1の無線通信部15は、ソースアドレスとして自機のMACアドレスを指定し、ディスティネーションアドレスとして親機のMACアドレスを指定し、レシーバとして親機のMACアドレスを指定し、トランスミッターとして自機のMACアドレスを指定したデータフレームを無線で送信する。
親機は、子機1からのフレームを受信すると、ディスティネーションアドレスから自機宛てのデータであると判断し、当該フレームに含まれるデータD21を取り出す。そして、親機は、当該データD21に基づいてゲームアプリケーションを実行する。
また、親機から子機1に個別にデータD22を送信する場合も同様の流れである。親機から子機1へユニキャストでデータを送信する例としては、上記親機のユーザから子機1のユーザに個別にメッセージを送信する例の他に、親機と子機1との間で接続を維持するためのキープアライブを送受信する例が挙げられる。具体的には、親機は子機1宛てのデータD22を生成する(S47)。この場合、親機のゲームアプリケーションは、子機1のIPアドレスを指定する。
親機の情報処理部11は、ARPテーブルを参照して、ゲームアプリケーションから指定されたIPアドレスに対応する子機1のMACアドレスを特定し、特定した子機1のMACアドレスを指定してデータD22を送信するように無線通信部15に命令を出す。そして、親機の無線通信部15は、データD22を含むデータフレームを生成する(S48)。
次に、親機の無線通信部15は、子機1へのデータD22を含むフレームを子機1に送信する(S49)。具体的には、親機の無線通信部15は、ソースアドレスとして自機のMACアドレスを指定し、ディスティネーションアドレスとして子機1のMACアドレスを指定し、レシーバとして子機1のMACアドレスを指定し、トランスミッターとして自機のMACアドレスを指定したデータフレームを無線で送信する。
子機は、親機からのフレームを受信すると、ディスティネーションアドレスから自機宛てのデータであると判断し、当該フレームに含まれるデータD22を取り出す。そして、親機は、当該データD22に基づいてゲームアプリケーションを実行する。
図9は、子機1がブロードキャストで他の装置にデータD3を送信する場合の処理の流れを示す図である。
図9に示されるように、子機1は、データD3を生成する(S50)。例えば、各情報処理装置に対応するキャラクタの位置情報は、全ての装置に共有される必要がある。また、例えば、ある装置に対応するキャラクタが所定の動作を行った場合には、当該動作は全ての装置に共有される必要がある。このようなデータは、各装置に個別に送信するよりもブロードキャストで送信した方が効率的である。例えば、子機1は、自機の入力部13に対して行われた入力に応じて、子機1に対応するキャラクタの位置を算出し、当該位置に応じたデータD3を生成する。そして、子機1は、当該データD3を含むデータフレームをブロードキャストで送信する(S51)。
ブロードキャストで送信されたフレームは、親機および子機2によって受信される。親機および子機2は、受信したフレームに含まれるデータD3に基づいて、ゲームアプリケーションを実行する。これにより、例えば、子機1に対応するキャラクタの位置が、親機、子機1および子機2の間で共有される。また、例えば、子機1に対応するキャラクタが所定の動作(例えば、アイテムを使用する)を行った場合において当該所定の動作に応じたデータがブロードキャストされた場合、子機1に対応するキャラクタが所定の動作を行ったことが、親機および子機2にも反映される。
なお、子機1がデータをブロードキャストで送信する場合、子機1は、親機を介してデータをブロードキャストしてもよい。この場合、子機1は、ディスティネーションアドレスとしてブロードキャストアドレスを指定し、レシーバとして親機のMACアドレスを指定して、フレームを送信する。なお、子機は、データを他の装置にブロードキャストする場合、親機を介してブロードキャストするか、直接ブロードキャストするかを選択可能であってもよい。
次に、本実施形態のアクションフレームの構造について説明する。まず、無線LANの一般的なフレームの構造について図10を用いて説明する。
図10は、一般的なフレームの構造を説明するための図である。図10に示されるように、一般的なフレームは、フレームヘッダと、フレーム本体とを含む。フレームヘッダは、フレームのタイプと、アドレスとを含む。
フレームのタイプには、大別して、管理フレーム、制御フレーム、データフレームがある。管理フレームは、さらに、ビーコンと、プローブリクエストと、プローブレスポンスと、オーセンティケーションと、アソシエーション要求と、アソシエーション応答と、アクションフレーム等とに分けられる。
上述のように、本実施形態の情報処理装置10は、親機として機能する場合、所定の時間間隔でアクションフレームを送信する。なお、親機は、アクションフレームの他にも、上記ビーコンを所定の時間間隔で送信する。
また、「アドレス」には、複数のアドレスが格納される。「アドレス」は、レシーバ、トランスミッター、ディスティネーションアドレス、ソースアドレス等を設定するためのものであり、親機又は子機のMACアドレスを指定するためのものである。
図11は、本実施形態の親機が送信するアクションフレームの構造を説明するための図である。
アクションフレームは、IEEE802.11で規定されており、図11では、本実施形態に特有の部分についてのみ主に説明する。図11に示されるように、アクションフレームは、フレームヘッダと、カテゴリと、フレーム本体(Action details)とを含む。「カテゴリ」には、ベンダー独自(Vendor specific)を示す値が格納される。フレームヘッダにおけるフレームのタイプには、アクションフレームを示す値が格納される。
本実施形態のアクションフレームのフレーム本体は、「アプリID」と、「シーンID」と、「セッションID」と、「カウンタ」とが含まれる。これらは、暗号化されずに平文で送信される。
アプリIDは、通信アプリケーションに固有のIDである。アプリIDは、実行される通信アプリケーションの種類毎に異なり、アプリケーション製作者によって予め割り当てられたIDである。なお、異なる種類のアプリケーションであっても、同じシリーズのアプリケーションであって互いに通信することでアプリケーションを実行可能である場合には、これらのアプリケーションのアプリIDとして、同一のものが用いられてもよい。アプリIDは、フレーム暗号鍵を生成するために用いられる。ここで、「フレーム暗号鍵」は、図11に示される暗号化部分を暗号化および復号化するための鍵である。フレーム暗号鍵の生成方法については後述する。
シーンIDは、同一のアプリケーションにおける異なるシーンを識別するためのIDであり、アプリケーション製作者によって予め割り当てられたIDである。例えば、同一のアプリケーションにおいて、対戦シーンと、アイテム交換シーンとがある場合、これらには異なるシーンIDが割り当てられる。シーンIDは、フレーム暗号鍵を生成するために用いられる。
セッションIDは、他の情報処理装置との通信を行うための当該通信に固有の識別情報である。セッションIDは、他の情報処理装置との通信を開始する際にランダムに生成される。具体的には、セッションIDは、親機が設定される際に生成される。セッションIDは、フレーム暗号鍵を生成するために用いられる。
カウンタは、図11に示される暗号化部分の平文が同じ内容であっても異なる暗号文を生成するために用いられる。カウンタは、初期的にはランダムに生成される。カウンタは、前回のアクションフレームの暗号化部分の内容と今回のアクションフレームの暗号化部分の内容とが全く同じ場合には同じ値となる。一方、前回のアクションフレームの暗号化部分の内容と今回のアクションフレームの暗号化部分の内容とが少なくとも一部において異なる場合には、カウンタは「1」だけインクリメントされる。カウンタは、アクションフレームを暗号化する際のIV(Initialization Vector)として用いられる。
また、図11に示されるように、アクションフレームのフレーム本体には、「暗号化部分」が含まれる。「暗号化部分」は、上記鍵格納部16に格納された装置共通鍵(複数の情報処理装置10に共通の鍵)に基づいて暗号化される。具体的には、暗号化部分は、フレーム暗号鍵とIVとしてのカウンタとを用いて暗号化される。フレーム暗号鍵は、上記アプリID、シーンID及びセッションIDを所定の手順で変換した変換値を、上記装置共通鍵を用いて暗号化することにより、生成される。
図11に示されるように、「暗号化部分」は、「ノード情報」と、「受け入れポリシー」と、「アドバタイズデータ」と、「アプリ鍵生成用乱数」と、「ダイジェスト」とを含む。
ノード情報は、各装置のIPアドレスとMACアドレスとを対応付けした情報であり、上記ARPテーブルである。ノード情報は、現時点でネットワークに参加している1又は複数のノード(親機および複数の子機)の情報を含む。ノード情報は、例えば、最大で8台分のノードの情報を含む。
受け入れポリシーは、親機が子機の参加を受け付けているか否か、親機が子機の参加を条件付きで受け付けているか否かを示す情報である。受け入れポリシーの詳細については後述する。
アドバタイズデータは、親機が子機に対して送信するアプリケーションに関する任意のデータである。親機は、他の情報処理装置10との間で通信アプリケーションを実行している間、当該通信アプリケーションに関する任意のデータをアドバタイズデータとして周囲にブロードキャストすることができる。
アプリ鍵生成用乱数は、通信アプリケーションを開始する際に生成されるアプリ鍵を生成するための乱数である。通信アプリケーションの実行中に送受信されるアプリケーションデータは、アプリ鍵を用いて暗号化又は復号化される。アプリ鍵は、アプリ鍵生成用乱数と、アプリケーション固有のパスフレーズとに基づいて各情報処理装置10において生成される。アプリケーション固有のパスフレーズは、アプリケーションの開発者によって設定され、アプリケーションプログラムの中に含まれている。アプリ鍵は、複数の情報処理装置10の間で通信アプリケーションが開始される毎に生成される。例えば、あるタイミングで親機、子機1および子機2との間で第1の通信アプリケーションが実行される場合、当該第1の通信アプリケーションを実行するために親機が設定されるときに、アプリ鍵生成用乱数と第1の通信アプリケーションに固有のパスフレーズとに基づいて、アプリ鍵が生成される。このアプリ鍵は、第1の通信アプリケーションの実行中、親機、子機1および子機2の間で共有される。あるタイミングで開始された第1の通信アプリケーションが終了し、別のタイミングで同じ第1の通信アプリケーションが開始される場合、新たにアプリ鍵生成用乱数が生成されて、新たなアプリ鍵が生成される。また、例えば、あるタイミングで親機、子機1および子機2との間で第1の通信アプリケーションが実行され、同時に、親機と子機3との間で第2の通信アプリケーションが実行される場合、第1の通信アプリケーションのためのアプリ鍵と、第2の通信アプリケーションのためのアプリ鍵とがそれぞれ生成される。
「ダイジェスト」は、暗号化する前のフレーム本体全体のメッセージダイジェスト(署名)である。具体的には、ダイジェストは、所定のハッシュ関数を用いて算出された、図11に示す「アプリID」から「アプリ鍵生成用乱数」までの部分のハッシュ値である。
次に、受け入れポリシーの詳細について説明する。ここで、親機は、複数の動作モードのうちの何れかで動作する。図12Aは、親機の動作モードの一例を示す図である。
図12Aに示されるように、親機の動作モードには、「許可」、「拒否」、「ホワイトリスト」、「ブラックリスト」がある。これらの動作モードによって親機の動作は異なる。なお、親機の動作モードには、これら4つのモードに加えて、他のモードがあってもよい。
親機が、動作モード「許可」で動作している場合、親機は全ての子機の参加を受け付ける。すなわち、親機は、動作モード「許可」で動作している場合、常に、参加要求を送信した全ての子機からの接続を受け入れる。例えば、親機が通信ゲームを開始する前において通信ゲームへの参加を募集する場合には、親機は、動作モードを「許可」に設定する。親機が動作モード「許可」で動作しているとき、親機は、アクションフレームにおける受け入れポリシーの値を「許可」を示す値(例えば、「0」)に設定して、アクションフレームを送信する。
親機が、動作モード「拒否」で動作している場合、親機は全ての子機の参加を受け付けない。すなわち、親機は、動作モード「拒否」で動作している場合、常に、参加要求を送信した全ての子機からの接続を拒否する。例えば、通信ゲームに参加するメンバーが確定し、通信ゲームが開始された後は、親機は、動作モードを「拒否」に設定する。また、親機が通信ゲームを開始する前においても、現時点で参加している子機の数が上限に達した場合には、親機は、動作モードを「拒否」に設定する。親機が動作モード「拒否」で動作しているとき、親機は、アクションフレームにおける受け入れポリシーの値を「拒否」を示す値(例えば、「1」)に設定して、アクションフレームを送信する。
親機が、動作モード「ホワイトリスト」で動作している場合、動作モード「拒否」と同様に、親機は子機の参加を受け付けていないが、以前に接続されていた子機であって不意に切断された子機の再接続を受け入れる。例えば、親機と子機2とが接続されている状態において、通信状況等により親機が子機2の存在を検出できない時間が所定の閾値を超えた場合には、親機と子機2との接続が切断される。このような場合において、親機は、子機2の再接続を受け入れるため、動作モード「ホワイトリスト」を設定する。親機は、再接続を受け入れる子機の一覧を記載した「ホワイトリスト」を自機の記憶装置に記憶している。親機は、動作モード「ホワイトリスト」が設定されている場合、自機に記憶したホワイトリストに含まれる子機からの再接続の要求(参加要求)があったときは、当該子機の再接続を許可する。なお、動作モード「ホワイトリスト」が設定されている場合、親機は、ホワイトリストに含まれない子機からの参加要求があったときは、当該子機の接続を拒否する。親機が動作モード「ホワイトリスト」で動作しているとき、親機は、アクションフレームにおける受け入れポリシーの値を「ホワイトリスト」を示す値(例えば、「2」)に設定して、アクションフレームを送信する。
親機が、動作モード「ブラックリスト」で動作している場合、動作モード「許可」と同様に、親機は、子機の参加を受け付けるが、以前に接続されていた子機であって意図的に切断された子機の接続を拒否する。例えば、親機と子機2とが接続されている状態において、親機が子機2に対して意図的に切断する旨の切断要求を送信した場合には(例えば、親機のユーザが子機2のユーザに対して通信アプリケーションへの参加を拒絶する意思を示した場合)、親機と子機2との接続が切断される。このような場合において、親機は、子機2からの再接続を拒否するため、動作モード「ブラックリスト」を設定する。親機は、再接続を拒否する子機の一覧を記載した「ブラックリスト」を自機の記憶装置に記憶している。親機は、動作モード「ブラックリスト」が設定されている場合、自機に記憶したブラックリストに含まれる子機からの再接続のための参加要求があったときは、当該子機の再接続を拒否する。なお、親機は、動作モード「ブラックリスト」が設定されている場合、ブラックリストに含まれない子機からの参加要求があったときは、当該子機の接続を許可する。親機が動作モード「ブラックリスト」で動作しているとき、親機は、アクションフレームにおける受け入れポリシーの値を「ブラックリスト」を示す値(例えば、「3」)に設定して、アクションフレームを送信する。
親機は、親機のユーザが意図的に他のユーザを拒絶する場合に限らず、他の場合にも、子機に対して切断要求を送信する。親機が送信する切断要求は、切断理由を含む。親機は、子機に切断要求を送信するときの切断理由によって、子機をブラックリストに入れるか否かを判断する。
例えば、上記のように親機のユーザが子機のユーザを拒絶する場合(子機のユーザを通信ゲームから意図的に排除する場合)、親機は、子機に対してその切断理由を含めて切断要求を送信するとともに、当該子機をブラックリストに含める。なお、このような親機のユーザが意図的に子機のユーザを拒絶するときに送信される切断要求を、「第1切断要求」ということがある。
また、ユーザの操作によって親機がスリープ状態に移行するときやユーザの操作によらずに所定期間無入力の状態が継続した場合にスリープ状態に移行するとき、あるいは、親機がユーザの操作によってフライトモード(無線通信機能をOFFにした動作モード)に移行するとき、親機は、その切断理由を含めて切断要求を子機に送信する。この場合は、親機は、当該子機をブラックリストに含めない。なお、このような切断要求を、「第2切断要求」ということがある。
なお、親機がスリープ状態やフライトモードに移行するとネットワーク内に親機が存在しなくなる。この場合、ネットワーク内の他の子機が親機になって、接続を維持し、通信アプリケーションの実行を継続することができる。この場合、セッションIDは新たな親機に引き継がれる。
一方、子機は、アクションフレームを受信した場合、アクションフレームにおける受け入れポリシーを示す値に応じて動作する。図12Bは、アクションフレームを受信した子機の動作の一例を示す図である。
図12Bに示されるように、受け入れポリシー「許可」のアクションフレームを受信した子機は、このアクションフレームを送信した親機が動作モード「許可」で動作していることが分かる。このため、このアクションフレームを受信した子機は、このアクションフレームを送信した親機の情報を、接続先候補として表示する。
また、受け入れポリシー「拒否」のアクションフレームを受信した子機は、このアクションフレームを送信した親機が動作モード「拒否」で動作していることが分かる。このため、このアクションフレームを受信した子機は、このアクションフレームを送信した親機の情報を、接続先候補として表示しない。
また、受け入れポリシー「ホワイトリスト」のアクションフレームを受信した子機は、親機が動作モード「ホワイトリスト」で動作しており、以前に接続されていた子機のみ再接続を許可している状態であることが分かる。このため、子機は、例えば以前に自機が親機と接続したことがある場合には、このアクションフレームを送信した親機の情報を、接続先候補として表示する。また、子機は、親機への再接続が可能であることを示す画面を表示部14に表示してもよい。あるいは、子機は、このアクションフレームを送信した親機に対して、自動的に参加要求を送信してもよい。
また、受け入れポリシー「ブラックリスト」のアクションフレームを受信した子機は、親機が動作モード「ブラックリスト」で動作しており、以前に接続されて意図的に切断した子機の再接続を拒否している状態であることが分かる。このため、子機は、例えば以前に自機が親機から第1切断要求を受信したことがある場合には、このアクションフレームを送信した親機の情報を、接続先候補として表示しない。あるいは、子機は、このアクションフレームを送信した親機に対して自動的に再接続の要求を送信しない。なお、子機は、親機への再接続が不可能であることを示す画面を表示部14に表示してもよい。
本実施形態では、親機は、アクションフレームの「受け入れポリシー」として0〜3の何れかの値を設定してアクションフレームを送信するが、自機において記憶している再接続を受け入れる装置の一覧を記載した「ホワイトリスト」自体、または、自機において記憶している再接続を拒否する装置の一覧を記載した「ブラックリスト」自体を、アクションフレームに含めて送信しない。
なお、他の実施形態では、親機は、自機において記憶している「ホワイトリスト」自体、または、自機において記憶している「ブラックリスト」自体を、アクションフレームに含めて送信してもよい。
子機は、親機から受信したアクションフレームにおける「受け入れポリシー」に格納された値と、過去に親機から受信した切断要求とに基づいて、接続先候補として表示するか否か、すなわち、当該親機に対して再接続のための参加要求を送信するか否かを判断する。
なお、子機は、アクションフレームにおける「受け入れポリシー」の値、および、過去に親機から受信した切断要求に加えて、アクションフレームにおける「セッションID」にも基づいて、親機に対して再接続するか否か(接続先候補として表示するか否か)を判断する。子機は、親機との接続を確立した場合には、セッションIDを自機に記憶する。このセッションIDは、当該子機と親機との接続が切断された場合でも、子機において所定期間記憶される。例えば、子機は、親機との通信が所定期間行われなかった場合、親機との接続を切断するが、この親機への再接続のために当該接続のセッションIDを記憶しておく。子機は、親機との接続が切断された後にアクションフレームを受信した場合、アクションフレームに含まれるセッションIDが、切断前の親機との接続におけるセッションIDと一致する場合には、直前までこの親機と接続していたことが分かる。この場合、子機は、例えば、この親機に再接続するか否かをユーザに選択させるための画面を表示部14に表示する。ユーザによって再接続が選択された場合には、子機は、当該アクションフレームを送信した親機に対して、再接続のための参加要求を送信する。
一方、子機は、親機との接続が切断された後にアクションフレームを受信した場合において、アクションフレームに含まれるセッションIDが、切断前の親機との接続におけるセッションIDと一致しない場合には、このアクションフレームを送信した親機が、直前まで接続していた親機とは異なるものであると判断する。この場合、子機は、例えば、この親機に新たに接続するか否かをユーザに選択させるための画面を表示部14に表示する。ユーザによって新たに接続することが選択された場合には、子機は、当該アクションフレームを送信した親機に対して、新たな接続のための参加要求を送信する。例えば、子機は、直前まで接続していた親機Aから上記第1切断要求が送信された場合において、別の親機Bからアクションフレームを受信したとき、このアクションフレームの受け入れポリシーが「ブラックリスト」を示す値であったとしても、親機Bに対して参加要求を送信する。子機は、アクションフレームを送信した場合、第1切断要求を送信した親機Aからのアクションフレームなのか、親機Aとは異なる親機Bからのアクションフレームなのかを、セッションID及び/又はMACアドレスに基づいて判定することができる。
(各装置において行われる処理の詳細)
次に、情報処理装置10において行われる処理の詳細について説明する。図13は、情報処理装置10を親機または子機に設定するための処理の詳細を示すフローチャートである。複数の情報処理装置10のそれぞれにおいて図13に示される処理が行われることにより、各情報処理装置10は親機または子機に設定される。なお、図13に示す処理は、情報処理装置10の情報処理部11(具体的にはCPU)が所定のプログラムを実行することにより行われる。
図13に示されるように、情報処理装置10は、まず、自機を親機として設定するか否かをユーザに選択させるための選択画面を表示部14に表示する(ステップS101)。
選択画面において自機を親機として設定することが選択された場合(ステップS102:YES)、情報処理装置10は、自機を親機として設定する(ステップS103)。一方、選択画面において自機を親機として設定しないことが選択された場合(ステップS102:NO)、情報処理装置10は、自機を子機として設定する(ステップS104)。ステップS103の処理が実行された場合、情報処理装置10は、以降、親機として動作し、図15に示す親機処理を実行する。ステップS104の処理が実行された場合、情報処理装置10は、以降、子機として動作し、図20に示す子機処理を実行する。
次に、親機の動作について図15〜図18を参照して説明する。
(親機に記憶されるデータ)
まず、図14を参照して、親機において記憶されるデータについて説明する。図14は、親機において記憶されるデータの一例を示す図である。
図14に示されるように、親機には、記憶領域101〜113が設けられる。具体的には、記憶領域101〜105には、上述したアプリID、シーンID、セッションID、カウンタ、アプリ鍵生成用乱数がそれぞれ記憶される。また、記憶領域106および記憶領域107には、フレーム暗号鍵およびアプリ鍵がそれぞれ記憶される。
また、記憶領域108には、ノード情報(ARPテーブル)が記憶される。ノード情報(ARPテーブル)には、親機のIPアドレスおよびMACアドレスを対応付けしたデータと、接続中の各子機のIPアドレスおよびMACアドレスを対応付けしたデータとが含まれる。
また、記憶領域109には、受け入れポリシー(動作モード)を示す値が記憶される。記憶領域110には、ホワイトリストが記憶される。ホワイトリストには、子機の情報(IPアドレス、MACアドレス等)が含まれる。また、記憶領域111には、ブラックリストが記憶される。ブラックリストには、子機の情報(IPアドレス、MACアドレス等)が含まれる。
また、記憶領域112には、親機の入力部13に対して行われた入力に応じた操作データが記憶される。また、記憶領域113には、各子機から受信した操作データ(各子機の入力部13に対して行われた入力に応じた操作データ)が記憶される。
図14に示される各種データは、親機の記憶装置(情報処理部11内のDRAM、記憶部12、無線通信部15内のメモリの何れか)に記憶され、親機の情報処理部11から読み取り可能である。
(親機処理)
図15は、情報処理装置10aが親機として動作しているときの親機処理の詳細を示すフローチャートである。
図15に示されるように、情報処理装置10a(親機)は、まず、自機のIPアドレスを生成し、生成したIPアドレスを自機に設定する(ステップS110)。続いて、親機は、アプリIDおよびシーンIDを、記憶領域101および記憶領域102にそれぞれ設定する(ステップS111)。上述のように、アプリIDおよびシーンIDは予め定められたIDであり、親機は、実行する通信アプリケーションの種類、シーンに応じて、アプリIDおよびシーンIDを設定する。
続いて、親機は、セッションIDをランダムに生成して記憶領域103に格納する(ステップS112)。次に、親機は、アプリ鍵生成用乱数をランダムに生成して記憶領域105に格納する(ステップS113)。また、親機は、ステップS113において、生成したアプリ鍵生成用乱数と、アプリケーションプログラム内に格納されたアプリケーション固有のパスフレーズとを用いてアプリ鍵を生成して、記憶領域107に記憶する。親機は、当該アプリ鍵を用いて、通信アプリケーションの実行中に送受信されるアプリケーションデータの暗号化および復号化を行う。また、子機においても、親機から送信されたアプリ鍵生成用乱数を用いて同じアプリ鍵が生成される。
情報処理装置10aは、複数の情報処理装置10との間で通信アプリケーションを実行するために親機となる際に、上記ステップS110〜S113の処理を1回だけ実行する。親機は、ステップS113の処理を実行した後、ステップS114〜ステップS118の処理を繰り返し実行する。
具体的には、親機は、アクションフレーム送信処理を実行する(ステップS114)。アクションフレーム送信処理は、上述したアクションフレームを送信するための処理であり、所定の時間間隔(例えば、100msec毎)で繰り返し実行される。このアクションフレーム送信処理の詳細については後述する。
次に、親機は、ノード追加・削除処理を実行する(ステップS115)。ノード追加・削除処理は、子機を通信アプリケーションに参加または離脱させるための処理である。ノード追加・削除処理の詳細については後述する。
ステップS115に続いて、親機は、アプリデータ通信処理(親機)を実行する(ステップS116)。親機は、子機の参加の受け付けを終了した場合(例えば、ステップS115の処理で参加する子機の数が上限に達した場合や親機のユーザによって指示された場合)、通信アプリケーションの実行を開始する。アプリデータ通信処理(親機)は、親機と子機との間で通信アプリケーションが実行されている間にアプリケーションデータを送受信するための処理である。ステップS116のアプリデータ通信処理(親機)の詳細については後述する。
ステップS116に続いて、親機は、アプリケーション処理を実行する(ステップS117)。具体的には、親機は、ステップS116で受信したデータに基づいて、アプリケーション処理を実行する。例えば、親機は、子機の入力部13において行われた入力に応じた操作データをステップS116で受信し、当該受信した操作データを記憶領域113に記憶している。親機は、記憶領域113に記憶された子機の操作データに基づいて、アプリケーション処理を実行する。また、親機は、自機の入力部13において行われた入力に応じた操作データを記憶領域112に記憶している。親機は、記憶領域112に記憶された親機の操作データに基づいて、アプリケーション処理を実行する。例えば、通信アプリケーションとして、複数のユーザ間で格闘ゲームが行われる場合、各ユーザによって行われた入力に応じた操作データがステップS116において受信される。この操作データに基づいて、親機は、各ユーザに対応するキャラクタをゲーム空間内で動作させたり移動させたりする。そして、親機は、アプリケーション処理に応じた画像を表示部14に表示させる。
ステップS117の処理を実行した場合、親機は、通信アプリケーションを終了するか否かを判定する(ステップS118)。例えば、親機のユーザによって通信アプリケーションの終了が指示された場合や通信アプリケーションの開始から所定時間が経過した場合には、親機は通信アプリケーションを終了すると判定する。通信アプリケーションを終了しないと判定した場合(ステップS118:NO)、親機は、再びステップS114の処理を実行する。
(アクションフレーム送信処理)
次に、アクションフレーム送信処理の詳細について説明する。図16は、図15のステップS114のアクションフレーム送信処理の詳細を示すフローチャートである。
図16に示されるように、親機は、送信するデータが前回アクションフレームを送信したときのデータと同じであるか否かを判定する(ステップS120)。具体的には、親機は、ノード情報に変化がなく、受け入れポリシー(動作モード)に変化がなく、かつ、アドバタイズデータに変化がない場合は、ステップS120においてYESと判定する。一方、これらのデータの何れかに変化がある場合、親機は、ステップS120においてNOと判定する。なお、親機は、最初にステップS120の処理を実行するときは、常にNOと判定する。
送信するデータが前回のデータと異なると判定した場合(ステップS120:NO)、親機は、カウンタを生成して記憶領域104に設定する(ステップS121)。具体的には、親機は、最初にステップS121の処理を実行する場合、カウンタをランダムに生成する。一方、親機は、2回目以降にステップS121の処理を実行する場合、記憶領域104に記憶されているカウンタの値に「1」を加算して、加算後のカウンタの値を記憶領域104に記憶する。
次に、親機は、記憶領域103に設定されたセッションIDに基づいて、変換値を生成する(ステップS122)。具体的には、親機は、ステップS111において設定したアプリID、シーンID、および、ステップS112において生成したセッションIDを、所定の関数で変換することにより変換値を生成する。
次に、親機は、ステップS122で生成した変換値を、装置共通鍵を用いて暗号化することにより、フレーム暗号鍵を生成する(ステップS123)。親機は、生成したフレーム暗号鍵を記憶領域106に記憶する。ステップS123に続いて、親機は、「ダイジェスト」の値を一定値と仮定する(ステップS124)。
次に、親機は、「ダイジェスト」の値を一定値にした場合における図11に示すフレーム本体のメッセージダイジェストを計算する(ステップS125)。具体的には、親機は、図11に示すフレーム本体(具体的には、アプリID、シーンID、セッションID、カウンタ、ノード情報、受け入れポリシー、アドバタイズデータ、アプリ鍵生成用乱数、一定値と仮定した場合のダイジェスト)を図11に示す順に並べ、この部分のデータのハッシュ値を所定のハッシュ関数を用いて算出することにより、「ダイジェスト」を算出する。
なお、「ノード情報」および「受け入れポリシー」は、後述するノード追加・削除処理が行われることにより、生成、変更される。また、「アドバタイズデータ」は、例えば通信アプリケーションからの要求に応じて、適宜のタイミングで設定される。例えば、通信アプリケーションが、アプリケーション処理に用いる所定のデータを、アクションフレームを用いて周辺にブロードキャストする場合は、通信アプリケーションは、アドバタイズデータを設定する。
次に、親機は、ステップS123で生成したフレーム暗号鍵と、カウンタとを用いて、図11に示すフレーム本体の暗号化部分(ノード情報、受け入れポリシー、アドバタイズデータ、アプリ鍵生成用乱数、および、ダイジェスト)を暗号化する(ステップS126)。すなわち、親機は、ステップS126において、フレーム暗号鍵とIVとしてのカウンタとを用いて、フレーム本体の暗号化部分(平文)を暗号化する。平文は、フレーム暗号鍵が同じでも、IVとしてのカウンタが異なれば、異なる暗号文になる。カウンタは、暗号化部分の平文の少なくとも一部が変化する毎に変化するため、暗号化部分の平文の一部が前回と同じである場合でも、前回と同じ暗号文にはならない。
そして、親機は、アクションフレームを生成する(ステップS127)。具体的には、親機は、アプリID、シーンID、セッションID、カウンタ、ステップS126で暗号化した暗号化部分をこの順に並べて、図11に示すフレーム本体を生成する。そして、フレーム本体の前にフレームヘッダを付加して、図11に示すアクションフレームを生成する。
一方、親機は、送信するデータが前回のデータと同じと判定した場合(ステップS120:YES)、前回と同じアクションフレームを生成する(ステップS128)。
ステップS127の処理を実行した場合、又は、ステップS128の処理を実行した場合、親機は、生成したアクションフレームを送信する(ステップS129)。これにより、アクションフレームがブロードキャストされる。
上記から明らかなように、「フレーム暗号鍵」は、装置共通鍵とセッションIDとに基づいて生成される。セッションIDは、情報処理装置10が親機として設定される際に生成される。このため、フレーム暗号鍵は、親機が設定される毎に生成される。また、アクションフレームは、フレーム暗号鍵とカウンタとを用いて暗号化される。装置共通鍵は、各情報処理装置10に共通の鍵であり固定の鍵であるが、カウンタの値は、アクションフレームにおける暗号化部分のデータが変化する毎に変化する。このため、「フレーム暗号鍵」とカウンタとを用いて暗号化されるアクションフレームが繰り返し送信されても、アクションフレームの暗号化部分が変化する。したがって、フレーム暗号鍵を有しない他の装置は、アクションフレームを繰り返し受信してもフレーム暗号鍵を導出することは困難であり、アクションフレームにおける暗号化部分を解読することは困難である。
(ノード追加・削除処理)
次に、ノード追加・削除処理の詳細について説明する。図17は、図16のステップS115のノード追加・削除処理の詳細を示すフローチャートである。
図17に示されるように、親機は、子機から通信アプリケーションへの参加要求を受信したか否かを判定する(ステップS131)。子機からの参加要求には、子機のMACアドレスが含まれる。
子機からの参加要求を受信したと判定した場合(ステップS131:YES)、親機は、記憶領域109に設定されている動作モード(受け入れポリシー)の値に基づいて、当該参加要求を送信した子機の参加を許可するか否かを判定する(ステップS132)。具体的には、親機は、記憶領域109に動作モード「ホワイトリスト」を示す値が設定されている場合、参加要求を送信した子機が、記憶領域110に記憶されたホワイトリストに含まれているか否かを判定することにより、当該参加要求を送信した子機の参加を許可するか否かを判定する。親機は、参加要求を送信した子機がホワイトリストに含まれている場合、当該子機の参加を許可し、参加要求を送信した子機がホワイトリストに含まれていない場合、当該子機の参加を拒否する。
また、親機は、記憶領域109に動作モード「ブラックリスト」を示す値が設定されている場合、参加要求を送信した子機が、記憶領域111に記憶されたブラックリストに含まれているか否かを判定することにより、当該参加要求を送信した子機の参加を許可するか否かを判定する。親機は、参加要求を送信した子機がブラックリストに含まれている場合、当該子機の参加を拒否し、参加要求を送信した子機がブラックリストに含まれていない場合、当該子機の参加を許可する。
また、親機は、記憶領域109に動作モード「許可」を示す値が設定されている場合、ブラックリスト又はホワイトリストを参照することなく、参加要求を送信した子機の参加を許可する。また、親機は、記憶領域109に動作モード「拒否」を示す値が設定されている場合、ブラックリスト又はホワイトリストを参照することなく、参加要求を送信した子機の参加を拒否する。
なお、親機は、動作モード「許可」が設定されている場合、ステップS132およびステップS133の処理を実行することなく、次のステップS134の処理を実行してもよい。また、親機は、動作モード「拒否」が設定されている場合、ステップS132〜ステップS135の処理を実行することなく、ステップS136の処理を実行してもよい。
参加要求を送信した子機の参加を許可した場合(ステップS132:YES)、親機は、参加要求を送信した子機が新たな子機か否かを判定する(ステップS133)。親機は、ステップS103において自機を親機として設定して図15の処理を開始したときから、通信アプリケーションに参加した子機の情報(IPアドレスおよびMACアドレスを含む)を記憶装置に記憶している。例えば、図15の処理を開始してから子機1が通信アプリケーションに参加し、その後、例えば通信状況が悪化したために当該子機1との通信が切断された場合、親機は、子機1をノード情報(ARPテーブル)から削除するとともに、当該子機1の情報をホワイトリストに記憶しておく。そして、親機は、今回参加要求を送信した子機が、ホワイトリストに記憶している子機1であると判断した場合は、参加要求を送信した子機が過去に接続した子機であると判断して、ステップS133においてNOと判定する。一方、親機は、今回参加要求を送信した子機が過去に接続した子機でないと判断した場合には、ステップS133においてYESと判定する。
参加要求を送信した子機が新たな子機であると判定した場合(ステップS133:YES)、親機は、当該参加要求を送信した子機のIPアドレスを生成する。具体的には、親機は、参加要求を送信した順番に子機のIPアドレスを割り当てる。
ステップS134の処理を実行した場合、又は、ステップS133でNOと判定した場合、親機は、ノード情報(ARPテーブル)を更新する(ステップS135)。具体的には、親機は、ステップS134の処理に続いてステップS135の処理を実行する場合、ステップS134で生成したIPアドレスと、参加要求を送信した子機のMACアドレスとを対応付けして、記憶領域108のノード情報を更新する。また、親機は、ステップS133の処理に続いてステップS135の処理を実行する場合、例えばホワイトリストに記憶されている情報に基づいて、参加要求を送信した子機に前回と同じIPアドレスを割り当て、当該IPアドレスと子機のMACアドレスとを対応付けして、記憶領域108のノード情報を更新する。
ステップS135の処理を実行した場合、ステップS132でNOと判定した場合、又は、ステップS131でNOと判定した場合、親機は、子機の離脱を検出したか否かを判定する(ステップS136)。例えば、親機は、接続中の子機から定期的にフレームを受信しており、子機との接続が維持されているか否かを判定する。具体的には、親機は、各子機に対して定期的にフレームを送信し、そのフレームに対する応答フレームを各子機から受信することにより、各子機との接続が維持されているか否かを判定する。また、子機は、子機のユーザによって通信アプリケーションからの離脱を指示された場合、親機に対して通信アプリケーションから離脱する旨のメッセージを送信する。親機は、子機から応答フレームを所定期間受信しなかった場合や、子機から離脱の旨のメッセージを受信した場合には、ステップS136においてYESと判定する。
子機の離脱を検出した場合(ステップS136:YES)、親機は、当該子機をノード情報(ARPテーブル)から削除してノード情報を更新する(ステップS137)。このとき、親機は、削除した子機の情報(IPアドレス、MACアドレス、ユーザ名等)をホワイトリストに追加して、記憶領域110に記憶する。
ステップS137の処理を実行した場合、又は、ステップS136でNOと判定した場合、親機は、子機を切断するか否かを判定する(ステップS138)。例えば、親機のユーザによって意図的に子機を拒絶する旨の指示がされた場合には、親機は、ステップS138においてYESと判定する。また、例えば、親機がスリープモードに移行する場合には、親機は、ステップS138においてYESと判定する。
子機を切断すると判定した場合(ステップS138:YES)、親機は、当該子機に対して切断要求を送信する(ステップS139)。例えば、親機のユーザが子機を意図的に拒絶した場合には、第1切断要求を子機に対して送信する。
ステップS139に続いて、親機は、切断すると判定した子機をノード情報から削除してノード情報を更新する(ステップS140)。当該子機に対して第1切断要求を送信した場合には、親機は、当該子機の情報(IPアドレス、MACアドレス、ユーザ名等)をブラックリストに追加して、記憶領域111に記憶する。
ステップS140の処理を実行した場合、又は、ステップS138でNOと判定した場合、親機は、記憶領域109に記憶された受け入れポリシー(動作モード)の値を変更するか否かを判定する(ステップS141)。受け入れポリシーの値を変更すると判定した場合(ステップS141:YES)、親機は、受け入れポリシーの値を変更して記憶領域109に記憶する(ステップS142)。例えば、親機は、ステップS135の処理で子機が追加されたことによって参加している子機の数が上限数に達した場合には、記憶領域109に記憶された受け入れポリシーの値を「許可」を示す値から「拒否」を示す値に変更する。また、親機は、子機を募集している状態から子機の募集を終了し、通信ゲームを開始した場合には、記憶領域109に記憶された受け入れポリシーの値を、例えば「許可」又は「拒否」を示す値から「ホワイトリスト」を示す値に変更する。また、親機は、ステップS139において第1切断要求を送信した場合には、記憶領域109に記憶された受け入れポリシーの値を、例えば「許可」又は「拒否」を示す値から「ブラックリスト」を示す値に変更する。これにより、親機は、第1切断要求を送信する前では、受け入れポリシーとして例えば「許可」を示す値を含めたアクションフレームを送信していたものの、第1切断要求を送信した後では、受け入れポリシーとして「ブラックリスト」を示す値を含めたアクションフレームを送信する。
ステップS142の処理を実行した場合、又は、ステップS141でNOと判定した場合、親機は、図17に示す処理を終了する。
(アプリデータ通信処理(親機))
次に、親機において行われるアプリデータ通信処理の詳細について説明する。図18は、図16のステップS116のアプリデータ通信処理(親機)の詳細を示すフローチャートである。
図18に示されるように、親機は、通信アプリケーションを実行中か否かを判定する(ステップS150)。例えば、子機の参加の受け付けが終了し、複数の装置の間で通信アプリケーション(通信ゲーム)の実行が開始された場合、親機は、ステップS150においてYESと判定する。一方、親機は、子機の参加を受け付けている場合、ステップS150においてNOと判定し、図18に示す処理を終了する。
通信アプリを実行中の場合(ステップS150:YES)、親機は、自機から子機に対して送信すべきアプリケーションデータがあるか否かを判定する(ステップS151)。例えば、親機において実行中のアプリケーションからアプリケーションデータ(例えば、操作データ)の送信要求があった場合、親機は、送信すべきアプリケーションデータがあると判定する。
送信すべきアプリケーションデータがあると判定した場合(ステップS151:YES)、親機は、アプリケーションから渡されたアプリケーションデータを、記憶領域107に記憶したアプリ鍵で暗号化する(ステップS152)。上述のように、アプリ鍵は、上記ステップS113においてアプリ鍵生成用乱数に基づいて生成されて、記憶領域107に記憶されている。なお、子機の参加の受け付けが終了して通信アプリケーションが開始される際に、アプリ鍵生成用乱数に基づいて、アプリ鍵が生成されてもよい。
ステップS152に続いて、親機は、特定の子機へデータを送信するか否かを判定する(ステップS153)。特定の子機にアプリケーションデータをユニキャストで送信するか、全ての子機にアプリケーションデータをブロードキャストするかは、アプリケーションによって指定される。このとき、アプリケーションは、データを送信する特定の子機のIPアドレスを指定する。
特定の子機へデータを送信すると判定した場合(ステップS153:YES)、親機は、記憶領域108に記憶したノード情報(ARPテーブル)を参照する(ステップS154)。そして、親機は、アプリケーションから指定されたIPアドレスに対応するMACアドレスを指定したデータフレームを生成して、ステップS152で暗号化したデータを特定の子機にユニキャストで送信する(ステップS155)。
一方、ステップS153でNOと判定した場合、親機は、ステップS152で暗号化したデータをブロードキャストで送信する(ステップS156)。具体的には、親機は、ディスティネーションアドレスにブロードキャストアドレスを指定したデータフレームを生成して、ステップS152で暗号化したデータをブロードキャストで送信する。
ステップS155の処理を実行した場合、ステップS156の処理を実行した場合、又は、ステップS151でNOと判定した場合、親機は、子機からアプリケーションデータを受信したか否かを判定する(ステップS157)。アプリケーションデータを受信した場合(ステップS157:YES)、親機は、受信したデータを記憶領域107に記憶したアプリ鍵を用いて復号化する(ステップS158)。
ステップS158の処理を実行した場合、又は、ステップS157でNOと判定した場合、親機は、ある子機から別の子機宛てのデータフレームを受信したか否かを判定する(ステップS159)。ある子機から別の子機宛てのデータフレームを受信した場合(ステップS159:YES)、親機は、受信したフレームを、ディスティネーションアドレスで指定された子機に転送する(ステップS160)。
次に、子機の動作について図20〜図23を参照して説明する。
(子機に記憶されるデータ)
まず、図19を参照して、子機において記憶されるデータについて説明する。図19は、子機において記憶されるデータの一例を示す図である。
図19に示されるように、子機には、記憶領域201〜211が設けられる。具体的には、記憶領域201〜205には、親機から受信したアクションフレームに含まれるアプリID、シーンID、セッションID、カウンタ、アプリ鍵生成用乱数がそれぞれ記憶される。また、記憶領域206および記憶領域207には、フレーム暗号鍵およびアプリ鍵がそれぞれ記憶される。
また、記憶領域208には、親機から受信したアクションフレームに含まれるノード情報(ARPテーブル)が記憶される。ノード情報(ARPテーブル)には、親機のIPアドレスおよびMACアドレスを対応付けしたデータと、通信アプリケーションに参加している子機のIPアドレスおよびMACアドレスを対応付けしたデータとが含まれる。
また、記憶領域209には、親機から受信した切断要求が記憶される。例えば、上記ステップS139において親機が子機1に対して切断要求を送信した場合、子機1はこの切断要求を記憶領域209に記憶する。記憶領域209には、切断要求を送信した親機の情報(例えばMACアドレス、IPアドレス等)も記憶される。
また、記憶領域210には、自機の入力部13に対して行われた入力に応じた操作データが記憶される。また、記憶領域211には、他の装置(親機および他の子機)の入力部13に対して行われた入力に応じた操作データが記憶される。
図19に示される各種データは、子機の記憶装置(情報処理部11内のDRAM、記憶部12、無線通信部15内のメモリの何れか)に記憶され、子機の情報処理部11から読み取り可能である。
(子機処理)
図20は、情報処理装置10bが子機として動作しているときの子機処理の詳細を示すフローチャートである。
図20に示されるように、情報処理装置10b(子機)は、自機の周辺に存在する親機からのアクションフレームを受信したか否かを判定する(ステップS200)。ここでは、子機は、まだ親機に接続していないため、自機の周辺に存在する全ての親機からのアクションフレームを受信する。
アクションフレームを受信した場合(ステップS200:YES)、子機は、アクションフレームに含まれるアプリID、シーンID、セッションID,カウンタを、それぞれ記憶領域201〜204に記憶するとともに、復号化処理を行う(ステップS201)。ここでは、子機は、受信したアクションフレームに含まれるセッションIDと装置共通鍵とに基づいて、親機と同じフレーム暗号鍵を生成して記憶領域206に記憶し、当該フレーム暗号鍵を用いてアクションフレームの暗号化部分を復号化する。復号化処理の詳細については後述する。なお、子機は、複数の親機からアクションフレームを受信した場合、親機毎に、アプリID、シーンID、セッションID,カウンタ、フレーム暗号鍵を記憶領域に記憶して、復号化処理を行う。
ステップS201に続いて、子機は、アクションフレームを送信した親機のネットワーク(通信アプリケーション)に参加可能か否かを判定する(ステップS202)。具体的には、子機は、受信したアクションフレームにおける「受け入れポリシー」と、自機の記憶領域209に記憶した「切断要求」とに基づいて、アクションフレームを送信した親機のネットワークに参加可能か否かを判定する。また、子機は、アクションフレームにおける「セッションID」にも基づいて、参加可能か否かを判定する。なお、子機は、アクションフレームにおける「ゲームID」や「シーンID」にも基づいて、参加可能か否かを判定してもよい。
例えば、受信したアクションフレームにおける受け入れポリシーが「許可」を示す値である場合、子機は、記憶領域209に記憶した切断要求を参照することなく、参加可能と判定する。また、受信したアクションフレームにおける受け入れポリシーが「拒否」を示す値である場合、子機は、記憶領域209に記憶した切断要求を参照することなく、参加不可能と判定する。
また、例えば、受信したアクションフレームにおける受け入れポリシーが「ホワイトリスト」を示す値である場合、子機は、アクションフレームを送信した親機が、過去に自機と接続していた親機であるか否かを判定する。例えば、子機は、親機と接続した場合、その接続に関する情報(親機のIPアドレス、MACアドレス、セッションID等)を記憶しており、当該親機との接続が切断された場合でも、当該情報を所定期間、保持する。子機は、当該保持している情報に基づいて、アクションフレームを送信した親機が、過去に自機と接続していた親機か否かを判定する。アクションフレームを送信した親機が過去に自機と接続していた親機である場合には、子機は、再接続可能(参加可能)であると判断する。アクションフレームを送信した親機が過去に自機と接続していた親機でない場合には、子機は、参加不可能と判定する。
また、例えば、受信したアクションフレームにおける受け入れポリシーが「ブラックリスト」を示す値である場合、子機は、記憶領域209に記憶した切断要求を参照して、アクションフレームを送信した親機のネットワークに参加可能か否かを判定する。具体的には、記憶領域209に記憶した切断要求が第1切断要求である場合において、アクションフレームを送信した親機が当該第1切断要求を送信した親機と一致する場合、子機は、以前に当該親機から意図的に切断されたもの判断し、参加不可能と判定する。
アクションフレームを送信した親機のネットワークに参加可能と判定した場合(ステップS202:YES)、子機は、アクションフレームを送信した親機を接続先候補として表示する(ステップS203)。例えば、子機は、親機のIPアドレス、MACアドレス、ユーザ名、親機が実行する通信アプリケーション名、シーン名、参加中の他の子機の情報等を表示部14に表示する。また、子機は、複数の親機からアクションフレームを受信し、ステップS202でYESと判定した場合、複数の親機を接続先候補として表示する。子機のユーザは、表示された接続先候補の一覧から何れかの親機を選択する。なお、アクションフレームを送信した親機が過去に自機と接続していた親機である場合には、子機は、当該親機に再接続するか否かをユーザに選択させる画面を表示してもよい。また、この場合、子機は、ユーザに再接続を選択させる画面を表示することなく、ステップS205の処理を実行して自動的に参加要求を送信してもよい。
続いて、子機は、ステップS203で表示した接続先候補のリストから何れかの親機が選択されたか否かを判定する(ステップS204)。親機が選択されなかったと判定した場合(ステップS204:NO)、子機は、再びステップS200の処理を実行する。
親機が選択されたと判定した場合(ステップS204:YES)、子機は、選択された親機に対して参加要求を送信する(ステップS205)。続いて、子機は、参加要求を送信した親機からのアクションフレームを受信する(ステップS206)。子機は、アクションフレームを受信すると、記憶領域206に記憶されたフレーム暗号鍵と、アクションフレームに含まれるカウンタとを用いてアクションフレームの暗号化部分を復号化する。
そして、子機は、受信したアクションフレームに含まれるノード情報から、自機のMACアドレスに対応するIPアドレスを抽出し、自機にそのIPアドレスを設定する(ステップS207)。次に、子機は、受信したアクションフレームに含まれるノード情報(ARPテーブル)を記憶領域208に格納する。
上記ステップS200〜ステップS208の処理が行われることにより、子機は、親機のネットワークに参加して通信アプリケーションを実行可能になる。ステップS209〜ステップS212の処理は、子機が親機に接続した後の処理であり、子機はステップS209〜ステップS212の処理を所定の時間間隔で繰り返し実行する。
具体的には、子機は、ステップS208の処理の後、アクションフレーム受信処理を行う(ステップS209)。ここでは、子機は、接続中の親機から所定の時間間隔で送信されるアクションフレームを受信する。ステップS209のアクションフレーム受信処理の詳細については後述する。
続いて、子機は、アプリデータ通信処理(子機)を行う(ステップS210)。アプリデータ通信処理(子機)は、親機と子機との間で通信アプリケーションが実行されている間にアプリケーションデータを送受信するための処理である。ステップS210のアプリデータ通信処理(子機)の詳細については後述する。
ステップS210に続いて、子機は、アプリケーション処理を実行する(ステップS211)。ここでは、図15のステップS117と同様に、子機は、ステップS210で受信したアプリケーションデータに基づいてアプリケーション処理を実行する。例えば、子機は、他の装置の入力部13において行われた入力に応じた操作データをステップS210で受信し、当該受信した操作データを記憶領域211に記憶している。子機は、記憶領域211に記憶された他の装置の操作データに基づいて、アプリケーション処理を実行する。また、子機は、自機の入力部13において行われた入力に応じた操作データを記憶領域210に記憶しており、当該操作データに基づいてアプリケーション処理を実行する。また、子機は、アプリケーション処理の結果に応じた画像を表示部14に表示させる。
ステップS211の処理を実行した場合、子機は、親機から切断要求を受信したか否かを判定する(ステップS212)。親機から切断要求を受信した場合(ステップS212:YES)、子機は、切断要求を記憶領域209に記憶して図20に示す処理を終了する。一方、親機から切断要求を受信しなかった場合(ステップS212:NO)、子機は、再びステップS209の処理を実行する。
なお、親機から通信アプリケーションを終了する旨の通知が行われた場合や子機のユーザによって通信アプリケーションからの離脱が指示された場合には、子機は、図20に示す処理を終了する。また、子機は、親機との通信が所定期間行われなかった場合は、図20に示す処理を終了する。
(復号化処理)
次に、図20のステップS201の復号化処理の詳細について説明する。図21は、図20のステップS201の復号化処理の詳細を示すフローチャートである。
図21に示されるように、子機は、今回受信したアクションフレームのカウンタが前回受信したアクションフレームのカウンタと同じか否かを判定する(ステップS220)。なお、子機は、最初にステップS220の処理を実行するときは、常にステップS220においてNOと判定する。今回のカウンタが前回と同じであると判定した場合(ステップS220:YES)、子機は、図21の処理を終了する。
今回のカウンタが前回と異なると判定した場合(ステップS220:NO)、子機は、受信したアクションフレームに含まれるセッションIDに基づいて、変換値を生成する(ステップS221)。具体的には、子機は、アクションフレームに含まれるアプリID、シーンIDおよびセッションIDを、所定の関数で変換することにより変換値を生成する。
次に、子機は、ステップS221で生成した変換値を、装置共通鍵を用いて暗号化することにより、フレーム暗号鍵を生成する(ステップS222)。子機は、生成したフレーム暗号鍵を記憶領域206に記憶する。ここで生成されるフレーム暗号鍵は、親機において生成されるフレーム暗号鍵と同じである。
ステップS222に続いて、子機は、ステップS222で生成したフレーム暗号鍵と、アクションフレームに含まれるカウンタとを用いて、受信したアクションフレームの暗号化部分を復号化する(ステップS223)。続いて、親機は、「ダイジェスト」の値を一定値と仮定する(ステップS224)。
次に、子機は、復号化された後の図11に示すフレーム本体のメッセージダイジェストを計算する(ステップS225)。具体的には、子機は、所定のハッシュ関数を用いてフレーム本体のハッシュ値を算出することにより、ダイジェストを算出する。
そして、子機は、ステップS225で計算したダイジェストと、受信したアクションフレームに含まれるダイジェストとが一致していることを確認する(ステップS226)。なお、この2つのダイジェストの値が一致していない場合は、データが改竄された可能性があるため、子機は、受信したアクションフレームを破棄する。
(アクションフレーム受信処理)
次に、図20のステップS209のアクションフレーム受信処理の詳細について説明する。図22は、図20のステップS209のアクションフレーム受信処理の詳細を示すフローチャートである。
図22に示されるように、子機は、接続中の親機からアクションフレームを受信したか否かを判定する(ステップS230)。なお、子機は、接続中でない親機からアクションフレームを受信した場合には、当該アクションフレームを破棄する。
接続中の親機からアクションフレームを受信した場合(ステップS230:YES)、子機は、当該アクションフレームの復号化処理を行う(ステップS231)。この処理は、図21で示した復号化処理と同じ処理である。
続いて、子機は、記憶領域208に記憶したノード情報とアクションフレームに含まれるノード情報とを比較することにより、ノード情報が更新されたか否かを判定する(ステップS232)。ノード情報が更新されたと判定した場合(ステップS232:YES)、子機は、受信したアクションフレームに含まれるノード情報を記憶領域208に記憶することにより、ノード情報(ARPテーブル)を更新する(ステップS233)。
ステップS233の処理を実行した場合、又は、ステップS232でNOと判定した場合、子機は、アプリ鍵を生成済みか否かを判定する(ステップS234)。アプリ鍵を生成済みと判定した場合(ステップS234:YES)、子機は、図22に示す処理を終了する。
アプリ鍵を生成済みでないと判定した場合(ステップS234:NO)、子機は、受信したアクションフレームに含まれるアプリ鍵生成用乱数と、アプリケーションプログラム内のパスフレーズとを用いて、アプリ鍵を生成する(ステップS235)。ここで生成されるアプリ鍵は、上記ステップS113で親機において生成されるアプリ鍵と同じである。子機は、生成したアプリ鍵を記憶領域207に記憶する。子機は、以上で図22の処理を終了する。
(アプリデータ通信処理(子機))
次に、子機において行われるアプリデータ通信処理の詳細について説明する。図23は、図20のステップS210のアプリデータ通信処理(子機)の詳細を示すフローチャートである。
図23に示されるように、子機は、自機から他の装置(他の子機または親機)に対して送信すべきアプリケーションデータがあるか否かを判定する(ステップS240)。例えば、子機において実行中のアプリケーションからアプリケーションデータ(例えば、操作データ)の送信要求があった場合、子機は、送信すべきアプリケーションデータがあると判定する。
送信すべきアプリケーションデータがあると判定した場合(ステップS240:YES)、子機は、アプリケーションから渡されたアプリケーションデータを、記憶領域207に記憶したアプリ鍵で暗号化する(ステップS241)。上述のように、アプリ鍵は、上記ステップS235においてアプリ鍵生成用乱数に基づいて生成されて、記憶領域207に記憶されている。
ステップS241に続いて、子機は、特定の装置(他の子機または親機)へデータを送信するか否かを判定する(ステップS242)。特定の装置にアプリケーションデータをユニキャストで送信するか、全ての装置にアプリケーションデータをブロードキャストするかは、アプリケーションによって指定される。このとき、アプリケーションはデータを送信する特定の装置のIPアドレスを指定する。
特定の装置へデータを送信すると判定した場合(ステップS242:YES)、子機は、記憶領域208に記憶したノード情報(ARPテーブル)を参照する(ステップS243)。そして、子機は、アプリケーションから指定されたIPアドレスに対応するMACアドレスを指定して、ステップS241で暗号化したデータを特定の装置に送信する(ステップS244)。具体的には、子機は、ディスティネーションアドレスとして特定の装置のMACアドレスを指定し、レシーバとして親機のMACアドレスを指定して、データフレームを送信する。
一方、ステップS242でNOと判定した場合、子機は、ステップS241で暗号化したデータをブロードキャストで送信する(ステップS245)。具体的には、子機は、ディスティネーションアドレスとしてブロードキャストアドレスを指定して、データフレームを送信する。
ステップS244の処理を実行した場合、ステップS245の処理を実行した場合、又は、ステップS240でNOと判定した場合、子機は、他の装置からアプリケーションデータを受信したか否かを判定する(ステップS246)。アプリケーションデータを受信した場合(ステップS246:YES)、子機は、受信したデータを記憶領域207に記憶したアプリ鍵を用いて復号化する(ステップS247)。そして、子機は、復号化して得られたアプリケーションデータを記憶装置に記憶する。子機は、以上で図23に示す処理を終了する。
以上のように、本実施形態では、複数の情報処理装置(例えば10a〜10c)のうちの1の情報処理装置(10a)が親機となり、他の情報処理装置(10b、10c)が子機となり、複数の情報処理装置の間で通信アプリケーションが実行される。
なお、上記フローチャートの処理は単なる例示であり、例えば各ステップの順番を入れ替えたり、他のステップが加えられたり、上記ステップの一部が省略されたりしてもよい。
親機は、子機に対してIPアドレスを割り当てるとともに(ステップS134)、ノード情報(ARPテーブル)を子機に送信する(ステップS135、ステップS130)。ノード情報(ARPテーブル)は、ネットワークに接続している全ての装置のそれぞれについて、IPアドレスとMACアドレスとを対応付けしている。
例えば、親機、子機1および子機2がネットワークに接続している場合、親機のIPアドレスと親機のMACアドレスとを対応付けし、子機1のIPアドレスと子機1のMACアドレスとを対応付けし、子機2のIPアドレスと子機2のMACアドレスとを対応付けしたARPテーブル(管理テーブル)が、親機から子機1および子機2に送信される(ステップS233)。子機は、ある装置にデータを送信する際、親機から受信したARPテーブルを参照して(ステップS243)、当該ある装置のMACアドレスを特定し、データを送信する(ステップS244)。
これにより、子機は、他の子機にデータを送信する際に、IPアドレス(論理アドレス。ソフトウェアアドレスとも言う)に対応するMACアドレス(物理アドレス。ハードウェアアドレスとも言う)を周辺に問い合わせることなく、他の子機にデータを送信することができる。このため、子機は、余計なフレームを空間に送信しなくても指定された装置にフレームを送信することができ、電波の輻輳を防止することができる。また、データを送信する際の遅延を防止することができる。
また、本実施形態では、親機は子機から参加要求を受信すると、子機のIPアドレスを生成して、子機に対して、当該子機のMACアドレスとIPアドレスとを対応付けしたARPテーブルを送信する。子機は、親機からのARPテーブルから、自機のMACアドレスに対応するIPアドレスを、自機のIPアドレスを設定する。親機は、IPアドレスの重複がないことを確認するためのフレームを送信することなく子機のIPアドレスを生成し、子機は、IPアドレスの重複がないことを確認するためのフレームを送信することなく自機のIPアドレスを設定する。このため、複数の装置間ですぐにネットワークが構成され、複数の装置間ですぐに通信アプリケーションを開始することができる。
本実施形態では、子機が親機に接続する際に、装置毎にIPアドレスとMACアドレスとを対応付けしたテーブルが親機から子機に送信される。このため、子機は、一度も通信を行っていない装置のIPアドレスとMACアドレスとを対応付けしたテーブルを保持することができる。例えば、親機と子機1とが接続されているときに、新たに子機2が親機に接続した場合、親機から所定の時間間隔で送信されるアクションフレームを受信することにより、子機1と子機2とは一度も通信を行っていないにもかかわらず、子機1は子機2のIPアドレスおよびMACアドレスを保持し、子機2は子機1のIPアドレスおよびMACアドレスを保持することができる。また、このテーブルは、常にアクションフレームに含められて所定の時間間隔で送信される。したがって、ネットワークに接続している全ての装置(親機および子機)は、常に最新のテーブルを保持することができる。
また、本実施形態では、親機が設定される際に、親機と子機との通信を行うための当該通信に固有のセッションID(識別情報)がランダムに生成され(ステップS112)、装置共通鍵とセッションIDとを用いて、フレーム暗号鍵が生成される(ステップS124)。フレーム暗号鍵は、親機と子機との通信に固有の識別情報を用いて生成されるため、親機と子機との通信毎に変化する。このため、フレーム暗号鍵が解読されることを防止することができる。また、仮にフレーム暗号鍵が解読された場合でも、あるタイミングで開始された親機と子機との通信が終了して、別のタイミングで親機と子機との通信が開始されるときには、別のフレーム暗号鍵が生成されるため、当該別のタイミングで開始された通信では安全にデータを送信することができる。
また、装置共通鍵は、予め親機および子機に記憶された共通の鍵であり、親機および子機のハードウェアに書き込まれたセキュアな鍵である。このため、装置共通鍵は悪意ある者に読み取られ難く、安全に、フレーム暗号鍵を生成することができる。
また、本実施形態では、親機から所定の時間間隔でブロードキャストされるアクションフレームの暗号化部分がフレーム共通鍵を用いて暗号化され、当該暗号化部分にはアプリケーションに共通のアプリ鍵を生成するためのアプリ鍵生成用乱数が含まれる。子機は、親機に接続していない状態でもアクションフレームを受信することができ、自機の周辺のどのような通信アプリケーションを実行する親機が存在するのかを知ることができる。一方、通信アプリケーションのためのアプリケーションデータはアプリ鍵によって暗号化されるため、子機は、親機に接続しておらずアプリ鍵を生成していない状態では、その親機が他の子機と実行しているアプリケーションの内容について知ることができない。このため、通信アプリケーションに参加していない子機が、通信アプリケーションを実行中の複数の装置に対して誤ったデータを送信することを防止することができる。
また、アプリ鍵を生成するためのアプリ鍵生成用乱数は、フレーム暗号鍵によって暗号化されるため、装置共通鍵を有さない他の装置はアプリ鍵を解読することができない。したがって、複数の情報処理装置10は、安全に通信アプリケーションを実行することができる。
また、本実施形態では、アクションフレームに受け入れポリシーが含まれる。受け入れポリシーには、親機が常に子機の接続を許可することを示す「許可」と、親機が常に子機の接続を拒否することを示す「拒否」とがある。また、受け入れポリシーには、「許可」および「拒否」に加えて、親機が基本的には接続を拒否するものの条件付きで子機の接続を許可することを示す「ホワイトリスト」と、親機が基本的には接続を許可するものの条件付きで子機の接続を拒否することを示す「ブラックリスト」がある。受け入れポリシー「ホワイトリスト」は、一度接続された子機が通信状況の悪化等によって切断された場合に、親機が子機の再接続を許可することを示す。このような受け入れポリシーを含むアクションフレームを受信した子機は、親機に再接続を試みることができ、一度参加した通信アプリケーションに再度参加することができる。また、受け入れポリシー「ブラックリスト」は、一度接続された子機が親機によって意図的に拒絶されて切断された場合に、親機が子機の再接続を拒否することを示す。このような受け入れポリシーを含むアクションフレームを受信した子機は、親機への再接続を試みることがないため、無駄な通信を抑制することができる。
本実施形態では、親機は、子機に対して切断理由毎に様々な切断要求を送信することができる。例えば、親機のユーザが意図的に子機を切断する場合には、その意図的な切断の理由を含む第1切断要求が、親機から子機に送信される。また、親機がスリープ状態に移行するなどの場合には、その切断理由を含む第2切断要求が、親機から子機に送信される。子機は、親機から受信した切断要求と、親機からのアクションフレームに含まれる受け入れポリシーとに基づいて、親機に対して参加要求を送信するか否かを判定することができる。子機が切断理由によって参加要求を送信するか否かを判断するため、切断理由によって子機を細かく制御することができ、無駄なフレームが送信されることを防止したり、親機側の処理負荷を低減したりすることができる。また、親機は、自機に記憶しているブラックリストやホワイトリスト自体を子機に送信しなくても、子機の動作を制御することができ、トラフィックが増大することを防止することができる。
なお、本実施形態では、アクションフレームに上述したデータを含めて送信した。他の実施形態では、アクションフレームの代わりに、例えばビーコンに上記データを含めて送信してもよい。この場合、上記装置共通鍵とセッションIDとに基づいてフレーム暗号鍵が生成され、当該フレーム暗号鍵を用いて暗号化されたデータがビーコンによって送信される。また、アクションフレームとビーコンとを用いて、上記データが送信されてもよい。
また、上記実施形態では、親機から送信される接続のためのアクションフレームが、所定の時間間隔でブロードキャストされ、子機が当該アクションフレームを受信したことに応じて、親機と子機が接続された。他の実施形態では、子機がプローブリクエストをブロードキャストし、親機がプローブリクエストを受信したことに応じて、親機と子機が接続されてもよい。
また、上記実施形態では、装置に設定された可変のIPアドレスと装置に固有のMACアドレスとを対応付けしたARPテーブルが生成されて親機から子機に送信された。他の実施形態では、例えば、装置に設定された可変のユーザ名(ホスト名)とMACアドレスとを対応付けしたテーブルが生成されて、親機から子機に送信されてもよい。すなわち、装置に設定された可変の論理アドレスと、装置に固有の物理アドレスとを対応付けしたテーブルが生成されて親機から子機に送信されてもよい。この場合、各装置のアプリケーションは、装置に設定された論理アドレス(ユーザ名やホスト名、IPアドレス等)を指定し、各装置の無線通信部15は、テーブルを参照して、アプリケーションから指定された論理アドレスに対応する物理アドレスを取得し、当該物理アドレスを指定してデータを送信する。
また、上記実施形態では、通信アプリケーションとして、ゲームアプリケーションが行われる例について説明したが、通信アプリケーションとしてはゲームアプリケーションに限られず、任意のアプリケーションが複数の装置間で実行されてもよい。
以上、本発明について説明したが、上記説明は本発明の例示に過ぎず、種々の改良や変形が加えられてもよい。