(57)【要約】【課題】他の装置との通信の安全性を確保しつつ情報を送信する情報処理装置を提供する。【解決手段】親機は、子機との通信に固有のセッションＩＤと、親機及び子機に共通の装置共通鍵とを用いて、フレーム暗号鍵を生成し、当該フレーム暗号鍵を用いて、アクションフレームの暗号化部分のデータを暗号化し、当該暗号化部分を含むアクションフレームをブロードキャストで送信する。子機は、アクションフレームを受信したことに応じて、親機に対して参加要求を送信し、親機のネットワークに参加し、親機および子機は、通信アプリケーションを実行する。【選択図】図１１
2018148302.tif 000002
【特許請求の範囲】
【請求項１】
無線通信機能を有する情報処理装置であって、
他の情報処理装置と無線通信を行うための当該無線通信に固有の識別情報を取得する識別情報取得手段と、
前記識別情報取得手段によって取得された識別情報と、前記情報処理装置および前記他の情報処理装置に共通の鍵とを用いて、第１暗号鍵を生成する鍵生成手段と、
前記鍵生成手段によって生成された第１暗号鍵を用いて、フレームの少なくとも一部を暗号化する暗号処理手段と、
前記暗号処理手段によって暗号化されたフレームをブロードキャストで無線送信する送信手段と、を備える、情報処理装置。
【請求項２】
前記鍵生成手段は、前記識別情報と所定の関数に基づいて変換値を生成し、当該生成した変換値と前記共通の鍵とを用いて、前記第１暗号鍵を生成する、請求項１に記載の情報処理装置。
【請求項３】
前記共通の鍵は、前記情報処理装置および前記他の情報処理装置のハードウェアに書き込まれた鍵である、請求項１又は２に記載の情報処理装置。
【請求項４】
前記他の情報処理装置との間で、情報処理に用いられる第１データを無線で送信または受信するデータ送受信手段と、
前記データ送受信手段によって受信された第１データを用いて情報処理を行う情報処理手段と、をさらに備え、
前記送信手段は、前記情報処理装置と前記他の情報処理装置との間で前記第１データの送信または受信が継続的に行われている間に、前記フレームをブロードキャストする、請求項１から３の何れかに記載の情報処理装置。
【請求項５】
前記データ送受信手段は、前記第１データを暗号化して送信する、請求項４に記載の情報処理装置。
【請求項６】
前記データ送受信手段は、前記第１暗号鍵および前記共通の鍵とは異なる第２暗号鍵を用いて、前記第１データを暗号化する、請求項５に記載の情報処理装置。
【請求項７】
前記フレームの少なくとも一部には前記第２暗号鍵を生成するための第２データが含まれ、
前記暗号処理手段は、前記第２暗号鍵を生成するための第２データを、前記第１暗号鍵を用いて暗号化し、
前記送信手段は、暗号化された前記第２暗号鍵を生成するための第２データを前記フレームに含めてブロードキャストする、請求項６に記載の情報処理装置。
【請求項８】
前記情報処理手段は、前記情報処理として、前記他の情報処理装置との間でアプリケーションを実行し、
前記第２暗号鍵は、前記他の情報処理装置との間で実行されるアプリケーションに共通の鍵である、請求項６又は７に記載の情報処理装置。
【請求項９】
ブロードキャストで送信された前記フレームを受信した前記他の情報処理装置からの要求に応じて、前記情報処理装置と前記他の情報処理装置との間で通信を開始する通信開始手段をさらに備える、請求項１から８の何れかに記載の情報処理装置。
【請求項１０】
前記暗号処理手段は、前記フレームの少なくとも一部のハッシュ値を生成し、当該ハッシュ値を含む前記フレームの少なくとも一部を、前記第１暗号鍵を用いて暗号化する、請求項１から９の何れかに記載の情報処理装置。
【請求項１１】
前記暗号処理手段は、前記フレームのうちのベンダー独自の部分のハッシュ値を生成し、当該ハッシュ値を含む前記フレームの少なくとも一部を、前記第１暗号鍵を用いて暗号化する、請求項１０に記載の情報処理装置。
【請求項１２】
前記暗号処理手段によって暗号化されないフレームの部分には、前記フレームの少なくとも一部が更新されると変化する値が含まれ、
前記暗号処理手段は、前記値と前記第１暗号鍵を用いて、前記フレームの少なくとも一部を暗号化する、請求項１から１１の何れかに記載の情報処理装置。
【請求項１３】
前記送信手段は、前記フレームを所定の時間間隔で繰り返しブロードキャストする、請求項１から１２の何れかに記載の情報処理装置。
【請求項１４】
前記送信手段が送信する前記フレームには、前記情報処理装置が実行するアプリケーションを識別するための情報が含まれる、請求項１から１３の何れかに記載の情報処理装置。
【請求項１５】
前記アプリケーションを識別するための情報は、前記暗号処理手段によって暗号化されないフレームの部分に含まれる、請求項１４に記載の情報処理装置。
【請求項１６】
無線通信機能を有する複数の情報処理装置を含む無線通信システムであって、
前記無線通信システムは、第１の情報処理装置と第２の情報処理装置とを含み、
前記第１の情報処理装置は、
前記第２の情報処理装置と無線通信を行うための当該無線通信に固有の識別情報を取得する識別情報取得手段と、
前記識別情報取得手段によって取得された識別情報と、前記情報処理装置および前記他の情報処理装置に共通の鍵とを用いて、第１暗号鍵を生成する第１鍵生成手段と、
前記第１鍵生成手段によって生成された第１暗号鍵を用いて、フレームの少なくとも一部を暗号化する暗号処理手段と、
前記暗号処理手段によって暗号化されたフレームをブロードキャストで無線送信する送信手段と、を含み、
前記第２の情報処理装置は、
前記フレームを受信する受信手段と、
自機に記憶した前記共通の鍵と、前記フレームに含まれる前記識別情報とを用いて、前記第１暗号鍵を生成する第２鍵生成手段と、
前記第２鍵生成手段によって生成された第１暗号鍵を用いて、前記受信手段が受信したフレームを復号化する復号処理手段と、を含む、無線通信システム。
【請求項１７】
無線通信機能を有する複数の情報処理装置を含む無線通信システムにおいて実行される通信方法であって、
前記無線通信システムは、第１の情報処理装置と第２の情報処理装置とを含み、
前記第１の情報処理装置は、
前記第２の情報処理装置と無線通信を行うための当該無線通信に固有の識別情報を取得する識別情報取得ステップと、
前記識別情報取得ステップで取得された識別情報と、前記情報処理装置および前記他の情報処理装置に共通の鍵とを用いて、第１暗号鍵を生成する第１鍵生成ステップと、
前記第１鍵生成ステップ生成された第１暗号鍵を用いて、フレームの少なくとも一部を暗号化する暗号処理ステップと、
前記暗号処理ステップで暗号化されたフレームをブロードキャストで無線送信する送信ステップと、を含み、
前記第２の情報処理装置は、
前記フレームを受信する受信ステップと、
自機に記憶した前記共通の鍵と、前記フレームに含まれる前記識別情報とを用いて、前記第１暗号鍵を生成する第２鍵生成ステップと、
前記第２鍵生成ステップで生成された第１暗号鍵を用いて、前記受信手段が受信したフレームを復号化する復号処理ステップと、を含む、通信方法。
【請求項１８】
無線通信機能を有する情報処理装置であって、
前記情報処理装置および他の情報処理装置に共通の鍵を用いてアクションフレームの少なくとも一部を暗号化する暗号処理手段と、
前記暗号処理手段によって暗号化されたアクションフレームをブロードキャストで無線送信する送信手段と、を備える、情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理プログラム、無線通信システム、および、通信方法に関する。
【背景技術】
【０００２】
従来、ＩＥＥＥ８０２．１１で規定されているアクションフレームを用いてサービスの問い合わせを行う装置がある（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−１１４７６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記従来技術ではサービスの問い合わせのためのデータを単にアクションフレームに含めて送信するだけであり、他の装置との通信の安全性の観点から改善の余地があった。
【０００５】
それ故、本発明の目的は、他の装置との通信の安全性を確保しつつ情報を送信する情報処理装置を提供することである。
【課題を解決するための手段】
【０００６】
上記の課題を解決すべく、本発明は、以下の構成を採用した。
【０００７】
本発明の一例は、無線通信機能を有する情報処理装置である。情報処理装置は、識別情報取得手段と、鍵生成手段と、暗号処理手段と、送信手段と、を備える。識別情報取得手段は、他の情報処理装置と無線通信を行うための当該無線通信に固有の識別情報を取得する。鍵生成手段は、前記識別情報取得手段によって取得された識別情報と、前記情報処理装置および前記他の情報処理装置に共通の鍵とを用いて、第１暗号鍵を生成する。暗号処理手段は、前記鍵生成手段によって生成された第１暗号鍵を用いて、フレームの少なくとも一部を暗号化する。送信手段は、前記暗号処理手段によって暗号化されたフレームをブロードキャストで無線送信する。
【０００８】
上記によれば、前記情報処理装置および前記他の情報処理装置に共通の鍵と、前記他の情報処理装置と無線通信を行うための当該無線通信に固有の識別情報とに基づいて第１暗号鍵を生成することができる。第１暗号鍵は、通信に固有の識別情報と基づいて生成されるため、通信が行われる毎（例えば、他の情報処理装置との通信が開始される毎）に異なる第１暗号鍵を生成することができる。また、第１暗号鍵は、２つの装置に共通の鍵に基づいて生成されるため、当該共通の鍵を有していない第３の装置はこれを生成することができず、前記情報処理装置は前記他の情報処理装置に対して安全にフレームを送信することができる。
【０００９】
また、他の構成では、前記鍵生成手段は、前記識別情報と所定の関数に基づいて変換値を生成し、当該生成した変換値と前記共通の鍵とを用いて、前記第１暗号鍵を生成してもよい。
【００１０】
上記によれば、前記識別情報から変換値を生成し、当該変換値と前記共通の鍵とを用いて、第１暗号鍵を生成することができる。
【００１１】
また、他の構成では、前記共通の鍵は、前記情報処理装置および前記他の情報処理装置のハードウェアに書き込まれた鍵であってもよい。
【００１２】
上記によれば、前記共通の鍵は、前記情報処理装置および前記他の情報処理装置のハードウェアに書き込まれた鍵であるため、当該鍵を容易に取り出すことはできず、共通の鍵を安全に保持することができる。
【００１３】
また、他の構成では、上記情報処理装置は、前記他の情報処理装置との間で、情報処理に用いられる第１データを無線で送信または受信するデータ送受信手段と、前記データ送受信手段によって受信された第１データを用いて情報処理を行う情報処理手段と、をさらに備えてもよい。前記送信手段は、前記情報処理装置と前記他の情報処理装置との間で前記第１データの送信または受信が継続的に行われている間に、前記フレームをブロードキャストしてもよい。
【００１４】
上記によれば、前記情報処理装置と前記他の情報処理装置との間で前記情報処理に用いられる第１データの送受信が継続的に行われている間に、前記フレームをブロードキャストすることができる。例えば、前記情報処理装置と前記他の情報処理装置との間でアプリケーションが実行されているときでも、前記フレームをブロードキャストすることができる。
【００１５】
また、他の構成では、前記データ送受信手段は、前記第１データを暗号化して送信してもよい。
【００１６】
上記によれば、前記第１データを暗号化することができ、前記情報処理装置と前記他の情報処理装置との間の通信を安全に行うことができる。
【００１７】
また、他の構成では、前記データ送受信手段は、前記第１暗号鍵および前記共通の鍵とは異なる第２暗号鍵を用いて、前記第１データを暗号化してもよい。
【００１８】
上記によれば、前記情報処理装置は、前記第１暗号鍵および前記共通の鍵とは異なる第２暗号鍵を用いて前記第１データを安全に送信することができる。
【００１９】
また、他の構成では、前記フレームの少なくとも一部には前記第２暗号鍵を生成するための第２データが含まれてもよい。前記暗号処理手段は、前記第２暗号鍵を生成するための第２データを、前記第１暗号鍵を用いて暗号化してもよい。前記送信手段は、暗号化された前記第２暗号鍵を生成するための第２データを前記フレームに含めてブロードキャストしてもよい。
【００２０】
上記によれば、前記第２暗号鍵を生成するための第２データを、前記第１暗号鍵を用いて暗号化してブロードキャストすることができる。これにより、前記共通の鍵を有する装置にのみ前記第２暗号鍵を生成するための第２データを安全かつ一斉に送信することができる。
【００２１】
また、他の構成では、前記情報処理手段は、前記情報処理として、前記他の情報処理装置との間でアプリケーションを実行してもよい。前記第２暗号鍵は、前記他の情報処理装置との間で実行されるアプリケーションに共通の鍵であってもよい。
【００２２】
上記によれば、例えば、前記他の情報処理装置との間で実行されるアプリケーション毎に第２暗号鍵を異ならせることができる。
【００２３】
また、他の構成では、上記情報処理装置は、ブロードキャストで送信された前記フレームを受信した前記他の情報処理装置からの要求に応じて、前記情報処理装置と前記他の情報処理装置との間で通信を開始する通信開始手段をさらに備えてもよい。
【００２４】
上記によれば、前記他の情報処理装置は、前記情報処理装置からのフレームを受信したことに応じて要求を送信し、当該要求に応じて前記情報処理装置は、前記他の情報処理装置との間で通信を開始することができる。
【００２５】
また、他の構成では、前記暗号処理手段は、前記フレームの少なくとも一部のハッシュ値を生成し、当該ハッシュ値を含む前記フレームの少なくとも一部を、前記第１暗号鍵を用いて暗号化してもよい。
【００２６】
上記によれば、前記情報処理装置は、前記フレームの少なくとも一部のハッシュ値を第１暗号鍵を用いて暗号化して送信する。このため、例えば、フレームを受信した前記他の情報処理装置は、フレーム内のデータが改竄されていないことを確認することができる。
【００２７】
また、他の構成では、前記暗号処理手段は、前記フレームのうちのベンダー独自の部分のハッシュ値を生成し、当該ハッシュ値を含む前記フレームの少なくとも一部を、前記第１暗号鍵を用いて暗号化してもよい。
【００２８】
上記によれば、フレームにおけるベンダー独自の部分を暗号化して送信することができる。
【００２９】
また、他の構成では、前記暗号処理手段によって暗号化されないフレームの部分には、前記フレームの少なくとも一部が更新されると変化する値が含まれてもよい。前記暗号処理手段は、前記値と前記第１暗号鍵を用いて、前記フレームの少なくとも一部を暗号化してもよい。
【００３０】
上記によれば、前記フレームの少なくとも一部が更新されると変化する値と、前記第１暗号鍵とに基づいてフレームが暗号化される。このため、フレームの少なくとも一部が更新される毎に異なる暗号文を生成することができ、前記共通の鍵を有さない第３の装置によって前記フレームが解読されることを防止することができる。
【００３１】
また、他の構成では、前記送信手段は、前記フレームを所定の時間間隔で繰り返しブロードキャストしてもよい。
【００３２】
上記によれば、前記情報処理装置は、前記フレームを繰り返しブロードキャストすることができる。
【００３３】
また、他の構成では、前記送信手段が送信する前記フレームには、前記情報処理装置が実行するアプリケーションを識別するための情報が含まれてもよい。
【００３４】
上記によれば、前記情報処理装置は、自機が実行するアプリケーションを識別するための情報をブロードキャストすることができ、多数の装置にアプリケーションを識別するための情報を一斉に送信することができる。
【００３５】
また、他の構成では、前記アプリケーションを識別するための情報は、前記暗号処理手段によって暗号化されないフレームの部分に含まれてもよい。
【００３６】
上記によれば、アプリケーションを識別するための情報を平文で多数の装置に送信することができる。
【００３７】
また、本発明の他の例は、上記情報処理装置において行われる情報処理プログラムであってもよい。また、本発明の他の例は、上記情報処理装置と上記他の情報処理装置とを含む無線通信システムであってもよいし、無線通信システムにおいて行われる通信方法であってもよい。
【００３８】
本発明の他の例は、無線通信機能を有する情報処理装置である。情報処理装置は、前記情報処理装置および他の情報処理装置に共通の鍵を用いてアクションフレームの少なくとも一部を暗号化する暗号処理手段と、前記暗号処理手段によって暗号化されたアクションフレームをブロードキャストで無線送信する送信手段と、を備えてもよい。
【発明の効果】
【００３９】
本発明によれば、情報処理装置および他の情報処理装置に共通の鍵を用いてフレームを暗号化してブロードキャストすることができる。
【図面の簡単な説明】
【００４０】
【図１】本実施形態における無線通信システム１の一例を示す図
【図２】情報処理装置１０の機能構成の一例を示すブロック図
【図３】情報処理装置１０ａ〜１０ｃの間で通信ゲームアプリケーションが実行される場合の通信の概要を示す図
【図４】親機と子機１との間の無線接続が確立するまでの処理の流れを示す図
【図５】親機と子機２との間の無線接続が確立して３つの装置の間で通信ゲームが行われるまでの処理の流れを示す図
【図６】親機から送信されるアクションフレームに含まれるＡＲＰテーブルの一例を示す図
【図７】子機１から子機２にユニキャストでデータＤ１が送信される場合の処理の流れを示す図
【図８】子機１と親機との間でデータをユニキャストで送信する場合の処理の流れを示す図
【図９】子機１がブロードキャストで他の装置にデータＤ３を送信する場合の処理の流れを示す図
【図１０】一般的なフレームの構造を説明するための図
【図１１】本実施形態の親機が送信するアクションフレームの構造を説明するための図
【図１２Ａ】親機の動作モードの一例を示す図
【図１２Ｂ】アクションフレームを受信した子機の動作の一例を示す図
【図１３】情報処理装置１０を親機または子機に設定するための処理の詳細を示すフローチャート
【図１４】親機において記憶されるデータの一例を示す図
【図１５】情報処理装置１０ａが親機として動作しているときの親機処理の詳細を示すフローチャート
【図１６】図１５のステップＳ１１４のアクションフレーム送信処理の詳細を示すフローチャート
【図１７】図１６のステップＳ１１５のノード追加・削除処理の詳細を示すフローチャート
【図１８】図１６のステップＳ１１６のアプリデータ通信処理（親機）の詳細を示すフローチャート
【図１９】子機において記憶されるデータの一例を示す図
【図２０】情報処理装置１０ｂが子機として動作しているときの子機処理の詳細を示すフローチャート
【図２１】図２０のステップＳ２０１の復号化処理の詳細を示すフローチャート
【図２２】図２０のステップＳ２０９のアクションフレーム受信処理の詳細を示すフローチャート
【図２３】図２０のステップＳ２１０のアプリデータ通信処理（子機）の詳細を示すフローチャート
【発明を実施するための形態】
【００４１】
以下、本実施形態の一例に係る無線通信システムについて説明する。図１は、本実施形態における無線通信システム１の一例を示す図である。図１に示されるように、無線通信システム１の一例は、複数の情報処理装置１０ａ〜１０ｃを含む。以下では、情報処理装置１０ａ〜１０ｃを総称して情報処理装置１０と表記することがある。
【００４２】
情報処理装置１０は、無線通信を行うことが可能な情報処理装置であり、例えば、ＩＥＥＥ  ８０２．１１ｎ等の無線ＬＡＮの規格に準拠した通信を行うことが可能である。情報処理装置１０は、図１に示すネットワークを介して他の情報処理装置１０と通信可能である。また、情報処理装置１０は、例えば他の無線ＬＡＮアクセスポイントを介してインターネットや他のネットワークに接続することができる。
【００４３】
各情報処理装置１０は、それぞれ別のユーザによって使用される。情報処理装置１０は、例えば、携帯型のゲーム装置、据置型のゲーム装置、パーソナルコンピュータ、タブレット端末、スマートフォン等であってもよい。また、情報処理装置１０は、任意のアプリケーションを実行可能である。複数の情報処理装置１０は、全て同じ機種の装置であってもよいし、それぞれ異なる機種の装置であってもよい。
【００４４】
複数の情報処理装置１０のうちの１の情報処理装置１０が親機として機能し、他の１又は複数の情報処理装置１０が子機として機能し、１の親機と少なくとも１の子機とで１のネットワークが構成される。例えば、図１では、情報処理装置１０ａが親機として機能し、情報処理装置１０ｂおよび１０ｃが子機として機能する。
【００４５】
親機および子機は互いに無線通信を行うことが可能であり、子機は親機を介して（又は親機を介さずに）別の子機との間で無線通信を行うことが可能である。なお、図１は単なる一例であり、無線通信システム１に含まれる装置の数は３台以上であってもよいし、２台であってもよい。
【００４６】
図２は、情報処理装置１０の機能構成の一例を示すブロック図である。図２に示されるように、情報処理装置１０は、情報処理部１１と、記憶部１２と、入力部１３と、表示部１４と、無線通信部１５と、鍵格納部１６とを含む。
【００４７】
情報処理部１１は、ＣＰＵ（Central  Processing  Unit）、ＤＲＡＭ、ＧＰＵ（Graphics  Processing  Unit）等を含む。情報処理部１１は、例えば記憶部１２に記憶された情報処理プログラム（ゲームアプリケーションプログラムや他のアプリケーションプログラム等）を実行可能である。また、情報処理部１１は、ネットワークを介して取得された情報処理プログラム、他の外部記憶媒体に記憶された情報処理プログラムを実行可能である。
【００４８】
記憶部１２は、例えば、不揮発性のメモリやハードディスクであり、所定の情報処理プログラムを記憶する。入力部１３は、ユーザによる入力を受け付ける。入力部１３は、例えば、ボタン、方向指示キー、タッチパネル、情報処理装置１０の姿勢や動きを検出するセンサ（例えば、慣性センサ）等であってもよい。
【００４９】
表示部１４は、文字や画像を表示するための表示装置であり、例えば液晶表示装置や有機ＥＬ表示装置であってもよい。
【００５０】
無線通信部１５は、ネットワークを介して外部の装置と無線通信を行う。本実施形態においては、無線通信部１５は、例えば８０２．１１ｎ等の無線ＬＡＮの規格に準拠した方式により、外部と通信を行う。
【００５１】
鍵格納部１６は、装置共通鍵のセキュアな保管場所を提供するハードウェアである。装置共通鍵は、暗号および復号に用いるための鍵であり、複数の情報処理装置１０に共通の鍵である。情報処理部１１は、鍵格納部１６にパラメータを与えることで、鍵を取得することは可能であるが、装置共通鍵自体を読み取ることはできない。すなわち、装置共通鍵は、ハードウェアに書き込まれており、ソフトウェアによって容易には取り出せないようになっている。
【００５２】
複数の情報処理装置１０は、図１に示すネットワークに接続されて、所定の通信アプリケーション（例えば通信ゲームアプリケーション）を実行可能である。なお、複数の情報処理装置１０の間で、ゲームアプリケーション以外の他の任意のアプリケーションが実行されてもよい。以下では、複数の情報処理装置１０が互いに通信することで通信ゲームアプリケーションを実行することについて説明する。
【００５３】
図３は、情報処理装置１０ａ〜１０ｃの間で通信ゲームアプリケーションが実行される場合の通信の概要を示す図である。
【００５４】
複数の情報処理装置１０ａ〜１０ｃのうちの情報処理装置１０ａが親機として設定され、情報処理装置１０ｂおよび１０ｃが子機として設定されているものとする。初期的には、情報処理装置１０ａ〜１０ｃの間で無線接続は確立されていない。情報処理装置１０ａ〜１０ｃの間で無線接続が確立されてから、これら情報処理装置１０ａ〜１０ｃの間で通信ゲームが開始される。
【００５５】
具体的には、図３に示されるように、親機としての情報処理装置１０ａは、所定の時間間隔でアクションフレームをブロードキャストで送信する（Ｓ１）。例えば、情報処理装置１０ａは、１００ｍｓｅｃ毎にアクションフレームを送信する。アクションフレームは、無線ＬＡＮにおける管理フレームの一種である。詳細は後述するが、アクションフレームは、無線接続を確立するための情報（言い換えると、複数の装置間で行われる通信ゲームへの参加に必要な情報）を周囲に送信するためのフレームである。また、アクションフレームは、通信ゲームに参加している子機に、現在参加中の子機の情報を伝える機能もある。アクションフレームには、親機の情報（ＩＰアドレス及びＭＡＣアドレス等）、通信ゲームアプリケーションの識別情報、通信ゲームに参加している子機の情報等が含まれる。なお、アクションフレームは、その他の情報を周囲の装置に一斉に伝達するためにも用いられる。例えば、アクションフレームに、アプリケーションに特有の情報（例えば、アプリケーションに用いられるアイテムや画像のＩＤ、アプリケーションの実行状況に関する情報等）が含められて送信されてもよい。
【００５６】
情報処理装置１０ｂ（子機１）は、親機から送信されたアクションフレームを受信すると、親機に対して通信ゲームへの参加要求を送信する（Ｓ２）。親機は、子機１からの参加要求を受信すると、子機１に対してＩＰアドレスを付与する（Ｓ３）。この時点で、親機と子機１との間で無線接続が確立される（子機１が通信ゲームのネットワークに参加する）。
【００５７】
同様に、情報処理装置１０ｃ（子機２）は、親機から送信されたアクションフレームを受信すると、親機に対して通信ゲームへの参加要求を送信する（Ｓ４）。親機は、子機２からの参加要求を受信すると、子機２に対してＩＰアドレスを付与する（Ｓ５）。この時点で親機と子機２との間で無線接続が確立される。そして、その後に子機１と子機２とが親機からアクションフレームを受信すると、親機と子機の情報を取得することができるため、情報処理装置１０ａ〜１０ｃの間で通信が可能となり通信ゲームが開始される。
【００５８】
情報処理装置１０ａ〜１０ｃの間で通信ゲームが実行されている間、これら情報処理装置１０ａ〜１０ｃの間で互いに通信が行われる。例えば、子機１が子機２に所定のデータＤ１を送信する場合、子機１は、あて先を子機２に指定して、データＤ１を親機に送信する（Ｓ６）。親機は、当該データＤ１を子機２に転送する（Ｓ７）。このように、子機１が別の子機２にユニキャストでデータを送信する場合、子機１は、親機を介して子機２にデータを送信する。
【００５９】
また、子機１が親機に所定のデータＤ２を送信する場合、子機１は、あて先を親機に指定して、データＤ２を親機に送信する（Ｓ８）。このように、子機が親機にデータを送信する場合、子機は、データを親機にユニキャストで送信する。
【００６０】
また、子機１は、ネットワーク内の全ての情報処理装置１０（具体的には親機および子機２）にデータＤ３を送信する場合、子機１は、データＤ３をブロードキャストで送信する（Ｓ９）。
【００６１】
次に、図３において親機と子機１との間の接続が確立するまでの具体的な処理の流れを説明する。図４は、親機と子機１との間の無線接続が確立するまでの処理の流れを示す図である。
【００６２】
図４に示されるように、情報処理装置１０ａにおいて、ユーザの選択により自機が親機として設定される（Ｓ２０）。例えば、情報処理装置１０ａにおいて通信ゲームアプリケーションを実行する旨の指示がなされると、情報処理装置１０ａの表示部１４の画面に、自機が親機になるか否かをユーザに選択させる画像が表示される。ユーザによって親機になることが選択された場合、情報処理装置１０ａは、自機を親機として設定するとともに、自機のＩＰアドレスを設定する。このとき、親機は、ＩＰアドレスの重複を確認するためのフレーム（Gratuitous  ARP）を送信することなく、自機のＩＰアドレスを設定する。
【００６３】
具体的には、情報処理装置１０ａは、ＩＰアドレスのネットワーク部をランダムに設定するとともに、ＩＰアドレスのホスト部を「１」に設定する。例えば、情報処理装置１０ａは、ＩＰアドレスとして「１１１．１１１．０．１」を設定する。なお、ＩＰアドレスにおける１〜３オクテット目（「１１１．１１１．０」）はネットワーク部であり、４オクテット目（「１」）はホスト部である。ネットワーク部における１〜２オクテット目（「１１１．１１１」）は固定であり、３オクテット目はランダムに決定される。
【００６４】
情報処理装置１０ａが親機として設定されると、情報処理装置１０ａは、アクションフレームをブロードキャストで送信する（Ｓ１）。親機は、アクションフレームを所定の時間間隔で繰り返し送信する。具体的には、親機は、通信ゲームへの子機の参加を受け付けている間も、通信ゲームへの参加の受け付けを終了して通信ゲームが開始された後も、アクションフレームを所定の時間間隔で繰り返し送信する。
【００６５】
一方、情報処理装置１０ｂは、自機が親機として設定されなかったため、子機１として動作している。子機１は、親機からのアクションフレームを受信すると、自機の表示部１４において親機情報を表示する（Ｓ２１）。子機１は、自機の周辺に存在する親機からアクションフレームを受信すると、例えば、アクションフレームに含まれる親機のＭＡＣアドレス、ユーザ名（ホスト名）、ＩＰアドレス、およびゲームアプリケーションに関する情報を取り出す。そして、子機１は、これらの情報を親機情報として表示部１４に表示する。子機１の周辺に複数の親機が存在する場合、子機１は、複数の親機のそれぞれについて親機情報を表示する。
【００６６】
子機１において表示された１又は複数の親機情報のうちの何れかがユーザによって選択されると、子機１は、選択された親機に対して参加要求を送信する（Ｓ２２）。この参加要求には、子機１のＭＡＣアドレスが含まれる。
【００６７】
親機は、子機１から参加要求を受信すると、子機１のＩＰアドレスを生成するとともに、ＡＲＰテーブルを生成する（Ｓ２３）。具体的には、親機は、複数の装置間でＩＰアドレスが重複しないように、参加要求を送信してきた順に子機のＩＰアドレスを割り当てる。なお、親機は、ＩＰアドレスの重複を確認するためのフレーム（Gratuitous  ARP）を送信することなく、子機１のＩＰアドレスを生成する。例えば、親機は、最初に参加要求を送信してきた子機１に対して、「１１１．１１１．０．２」をＩＰアドレスとして割り当てる。なお、ＡＲＰテーブルは、ＩＰアドレスとＭＡＣアドレスとを対応付けしたテーブルである。Ｓ２３においては、親機のＩＰアドレスおよびＭＡＣアドレスを対応付けし、かつ、子機１のＩＰアドレスおよびＭＡＣアドレスを対応付けしたＡＲＰテーブルが生成される。ＡＲＰテーブルの一例については、図６を参照して後に詳述する。
【００６８】
次に、親機は、生成したＡＲＰテーブルをアクションフレームに含めてブロードキャストで送信する（Ｓ２４）。子機１は、このアクションフレームを受信し、アクションフレームに含まれるＡＲＰテーブルに基づいて、自機のＩＰアドレスを設定する（Ｓ２５）。このとき、子機は、ＩＰアドレスの重複を確認するためのフレーム（Gratuitous  ARP）を送信することなく、自機のＩＰアドレスを設定する。また、子機１は、アクションフレームに含まれるＡＲＰテーブルを自機の記憶装置（例えば、無線通信部１５内のメモリ、情報処理部１１内のＤＲＡＭ、又は、記憶部１２）に格納する。これにより、親機と子機１との間の無線接続が確立し、これら２つの装置間で通信ゲームアプリケーションの実行に用いられるアプリケーションデータの送受信（「アプリデータ通信」という）が可能となる。
【００６９】
なお、Ｓ２２において子機１から参加要求が送信されたことに応じて、親機と子機１との間で認証処理が行われてもよい。例えば、親機と子機１との間で予め定められたパスフレーズによる認証が行われてもよい。また、親機と子機１との間でオープン認証が行われてもよい。親機と子機１との間で無線ＬＡＮの認証が成功した場合に、親機は、子機１のＩＰアドレスを生成してもよい。また、親機は、親機と子機１との間で無線ＬＡＮの認証が成功した場合に、ＡＲＰテーブル（親機のＩＰアドレスおよびＭＡＣアドレスを対応付けし、かつ、子機１のＩＰアドレスおよびＭＡＣアドレスを対応付けしたテーブル）を生成してもよい。
【００７０】
次に、図４に示す処理の後、親機と子機２との間の接続が確立して、３つの装置間で通信ゲームが行われるまでの処理の流れを説明する。図５は、親機と子機２との間の無線接続が確立して３つの装置の間で通信ゲームが行われるまでの処理の流れを示す図である。
【００７１】
図５に示されるように、親機と子機１との間でアプリデータ通信が行われ、当該アプリデータ通信によって交換されたデータに基づいて、通信ゲームアプリケーションが実行される（Ｓ２６）。例えば、親機および子機１の間で通信ゲームが開始されている場合、親機および子機１のそれぞれの入力部１３に対する入力に応じたデータがアプリデータ通信により交換される。当該交換されたデータに基づいて、親機および子機１においてゲームアプリケーションが実行される。また、例えば、複数の情報処理装置１０間で行われる通信ゲームが開始されておらず、親機が他の子機の参加を受け付けている場合は、通信ゲームが開始されるまでの間、親機と子機１との間で所定のデータが交換され、当該データに応じてアプリケーションが実行される。例えば、通信ゲームが開始されるまでの間は、親機から子機１（あるいは子機１から親機）へメッセージが送信されてもよいし、親機と子機１との間でアイテムの交換が行われてもよい。
【００７２】
親機と子機１との間でアプリデータ通信が行われている間も、親機は、所定の時間間隔でアクションフレームを送信する（Ｓ１）。情報処理装置１０ｃ（子機２）は、親機からのアクションフレームを受信したことに応じて、親機情報を自機の表示部１４に表示するとともに、ユーザによる親機の選択を受け付ける（Ｓ２７）。親機からのアクションフレームには、上記ＡＲＰテーブルが含まれているため、子機２は、親機情報に加えて、親機に接続している（通信ゲームに参加している）子機１の情報も取得することができる。このため、子機２は、Ｓ２７において、親機情報に加えて、現在参加している子機１の情報も表示してもよい。
【００７３】
子機２において親機が選択されると、子機２は、親機に対して参加要求を送信する（Ｓ２８）。この参加要求には、子機２のＭＡＣアドレスが含まれる。親機は、子機２から参加要求を受信すると、子機２のＩＰアドレスを生成するとともに、ＡＲＰテーブルを生成する（Ｓ２９）。なお、親機は、ＩＰアドレスの重複を確認するためのフレーム（Gratuitous  ARP）を送信することなく、子機２のＩＰアドレスを生成する。例えば、親機は、２番目に参加要求を送信してきた子機２に対して、「１１１．１１１．０．３」をＩＰアドレスとして割り当てる。また、親機は、親機のＩＰアドレスおよびＭＡＣアドレスを対応付けし、子機１のＩＰアドレスおよびＭＡＣアドレスを対応付けし、かつ、子機２のＩＰアドレスおよびＭＡＣアドレスを対応付けしたＡＲＰテーブルを生成する。
【００７４】
そして、親機は、生成したＡＲＰテーブルをアクションフレームに含めてブロードキャストで送信する（Ｓ３０）。子機２は、このアクションフレームを受信し、アクションフレームに含まれるＡＲＰテーブルに基づいて、自機のＩＰアドレスを設定するとともに、ＡＲＰテーブルを自機の記憶装置に格納する（Ｓ３１）。
【００７５】
また、子機１もアクションフレームを受信し、当該アクションフレームに含まれるＡＲＰテーブルを自機の記憶装置に格納する（Ｓ３２）。これにより、３つの装置１０ａ〜１０ｃ間でネットワークが構築され、アプリデータ通信が可能となる。このように、既に親機に接続されて子機１において格納されていたＡＲＰテーブルが、子機２の参加に応じて更新される。
【００７６】
そして、例えば親機において通信ゲームの開始が指示されることにより、３つの装置１０ａ〜１０ｃ間でアプリデータ通信が行われ、３つの装置１０ａ〜１０ｃ間で通信ゲームアプリケーションが実行される（Ｓ３３）。例えば、３つの装置１０ａ〜１０ｃのそれぞれに対応するキャラクタＡ〜Ｃが同一のゲーム空間において移動するゲームが行われる場合、各装置の入力部１３に対する入力に応じて、各キャラクタＡ〜Ｃがゲーム空間内を移動する。この場合において、例えば、子機１の入力部１３に対する入力に応じたデータが、親機および子機２に送信される。親機および子機２は、子機１が送信したデータに基づいてゲームアプリケーションを実行することにより、子機１に対応するキャラクタＢの位置を更新する。
【００７７】
図６は、親機から送信されるアクションフレームに含まれるＡＲＰテーブルの一例を示す図である。図６に示されるように、ネットワーク内に親機、子機１および子機２が存在する場合、ＡＲＰテーブルには、親機のＩＰアドレスと、親機のＭＡＣアドレスと、親機のユーザ名（ホスト名）とを対応付けたノードデータ１が含まれる。また、ＡＲＰテーブルには、子機１のＩＰアドレスと、子機１のＭＡＣアドレスと、子機１のユーザ名（ホスト名）とを対応付けたノードデータ２が含まれる。また、ＡＲＰテーブルには、子機２のＩＰアドレスと、子機２のＭＡＣアドレスと、子機２のユーザ名（ホスト名）とを対応付けたノードデータ３が含まれる。
【００７８】
図６では、２台の子機が親機に接続されている場合のＡＲＰテーブルの一例について示したが、３台目の子機が親機に接続された場合には、ノードデータ１〜３に加えてノードデータ４を含むＡＲＰテーブルが親機によって生成されてブロードキャストされる。なお、同時に１の親機に接続することができる子機の数には上限がある。この接続可能な子機の上限数は、予め定められた数（例えば、「８」）であってもよいし、実行する通信ゲームアプリケーションの種類に応じて異なる数であってもよい。また、通信状況によって、接続可能な子機の上限数が定められてもよい。また、親機に接続されている他の周辺機器の数に応じて、接続可能な子機の上限数が定められてもよい。例えば、親機には、他の周辺機器として、無線コントローラが無線で接続されてもよく、親機に接続された無線コントローラの数に応じて、当該親機に接続可能な子機の上限数が定められてもよい。なお、この親機と周辺機器との間の無線通信の規格は、親機と子機との間の無線通信の規格と異なるものであってもよいし、同じものであってもよい。例えば、親機と周辺機器との間の無線通信は、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格により行われてもよい。
【００７９】
また、通信ゲームに参加している複数の子機のうちの何れかがゲームから離脱した場合には、親機は、当該離脱した子機に対応するノードデータを削除してＡＲＰテーブルを更新する。親機は、次に送信するアクションフレームに、更新したＡＲＰテーブルを含めて送信する。これにより、通信ゲームに参加している子機は、離脱した子機を認識することができる。
【００８０】
次に、情報処理装置１０ａ〜１０ｃ（親機、子機１および子機２）の間で無線接続が確立された後においてこれら複数の情報処理装置の間で行われる通信について説明する。
【００８１】
図７は、子機１から子機２にユニキャストでデータＤ１が送信される場合の処理の流れを示す図である。
【００８２】
図７に示されるように、子機１は、子機２へのデータＤ１を生成する（Ｓ４０）。例えば、子機１から子機２へユニキャストでデータを送信する例としては、子機１のユーザから子機２のユーザに個別にメッセージを送信する例が挙げられる。例えば、通信ゲームが実行されている間、子機１のユーザＢが子機２のユーザＣだけに所定のメッセージを送信する場合、ユーザＢは自身の情報処理装置１０ｂの入力部１３を用いて、ユーザＣ宛てのメッセージを作成する。具体的には、ユーザＢによってメッセージが作成されると、子機１のゲームアプリケーションは、作成されたメッセージに応じたデータＤ１を生成する。ここで、子機１のゲームアプリケーションは、子機２のアドレスとして子機２のＩＰアドレスを指定する。
【００８３】
子機１（の情報処理部１１）は、ＡＲＰテーブルを参照して、ゲームアプリケーションから指定されたＩＰアドレスに対応する子機２のＭＡＣアドレスを取得する。そして、子機１の情報処理部１１は、取得した子機２のＭＡＣアドレスを指定して無線通信部１５にデータＤ１を送信するように命令を出し、この命令に応じて、無線通信部１５は、データＤ１を含むフレームを生成する（Ｓ４１）。
【００８４】
次に、子機１の無線通信部１５は、子機２へのデータＤ１を含むデータフレームを親機に送信する（Ｓ４２）。具体的には、子機１の無線通信部１５は、ソースアドレスとして子機１のＭＡＣアドレスを指定し、ディスティネーションアドレスとして子機２のＭＡＣアドレスを指定し、レシーバとして親機のＭＡＣアドレスを指定し、トランスミッターとして子機１のＭＡＣアドレスを指定して、フレームを無線で送信する。
【００８５】
親機は、当該フレームを受信すると、当該フレームを子機２に転送する（Ｓ４３）。具体的には、親機の無線通信部１５は、ソースアドレスとして子機１のＭＡＣアドレスを指定し、ディスティネーションアドレスとして子機２のＭＡＣアドレスを指定し、レシーバとして子機２のＭＡＣアドレスを指定し、トランスミッターとして親機のＭＡＣアドレスを指定して、データフレームを無線で送信する。
【００８６】
子機２は、親機からのデータフレームを受信すると、ディスティネーションアドレスから自機宛てのデータであると判断し、当該フレームに含まれるデータＤ１を取り出す。そして、子機２は、当該データＤ１に基づいてゲームアプリケーションを実行する。例えば、子機２は、データＤ１に応じたメッセージを表示部１４に表示する。
【００８７】
このように、子機１から子機２へ個別にデータを送信する場合、子機１は親機を介して子機２にデータを送信する。子機１は、親機から送信されて自機に格納されたＡＲＰテーブルを参照して、子機２のＭＡＣアドレスを指定する。子機１には予め親機から送信されたＡＲＰテーブルが格納されているため、子機１が、子機２のＩＰアドレスから子機２のＭＡＣアドレスを取得するためのＡＲＰ（Address  Resolution  Protocol）をネットワークに送信しなくても、子機１は子機２のＭＡＣアドレスを知ることができる。これにより、余計な通信を行わなくても、子機１は子機２に対してデータを送信することができ、遅延を少なくすることができる。
【００８８】
また、子機１のアプリケーションは、子機２にデータを送信する場合、子機２のＩＰアドレスを指定する。アプリケーション側から見ると、他の装置のＭＡＣアドレスを意識することなく、ＩＰアドレスを用いることで他の装置との通信を行うことができる。このため、例えば、２つのネットワークをルーティングするルータを介することで別のＩＰネットワークに接続された装置間で通信アプリケーションを実行することができる。例えば、親機Ａと子機Ａ１と子機Ａ２とで構成されたネットワークＡ（１１１．１１１．０．０）と、別の親機Ｂと子機Ｂ１とで接続されたネットワークＢ（１１１．１１１．１．０）とがある場合、ルータを介することでネットワークＡ内の子機Ａ１と、ネットワークＢ内の子機Ｂ１との間で通信を行うことができる。この場合、情報処理装置１０とは異なるルータ装置によってルーティングが行われてもよいし、情報処理装置１０（例えば親機）がルーティング機能を有してもよい。
【００８９】
なお、図７に示す例では、子機１は子機２にデータをユニキャストで送信する場合に、親機を経由してデータを送信した。すなわち、ネットワーク内の親機および複数の子機はインフラストラクチャーモードで動作することとした。他の実施形態では、子機１は子機２にデータをユニキャストで送信する場合に、子機１が子機２に直接データを送信してもよい。すなわち、ネットワーク内の親機および複数の子機は、アドホックモードで動作してもよい。具体的には、子機１は、ＡＲＰテーブルを参照して、子機２のＩＰアドレスに対応するＭＡＣアドレスを特定する。子機１は、特定した子機２のＭＡＣアドレスを指定し、子機２に直接データを送信する。
【００９０】
図８は、子機１と親機との間でデータをユニキャストで送信する場合の処理の流れを示す図である。
【００９１】
図８に示されるように、子機１は、親機へのデータＤ２１を生成する（Ｓ４４）。子機１から親機へユニキャストでデータを送信する例としては、上記のように子機１のユーザから親機のユーザに個別にメッセージを送信する例が挙げられる。具体的には、子機１のゲームアプリケーションは、親機宛てのデータＤ２１を生成し、親機のＩＰアドレスを指定する。
【００９２】
子機１の情報処理部１１は、ＡＲＰテーブルを参照して、ゲームアプリケーションから指定されたＩＰアドレスに対応する親機のＭＡＣアドレスを特定し、特定した親機のＭＡＣアドレスを指定してデータＤ２１を送信するように無線通信部１５に命令を出す。そして、子機１の無線通信部１５は、データＤ２１を含むデータフレームを生成する（Ｓ４５）。
【００９３】
次に、子機１の無線通信部１５は、親機へのデータＤ２１を含むフレームを親機に送信する（Ｓ４６）。具体的には、子機１の無線通信部１５は、ソースアドレスとして自機のＭＡＣアドレスを指定し、ディスティネーションアドレスとして親機のＭＡＣアドレスを指定し、レシーバとして親機のＭＡＣアドレスを指定し、トランスミッターとして自機のＭＡＣアドレスを指定したデータフレームを無線で送信する。
【００９４】
親機は、子機１からのフレームを受信すると、ディスティネーションアドレスから自機宛てのデータであると判断し、当該フレームに含まれるデータＤ２１を取り出す。そして、親機は、当該データＤ２１に基づいてゲームアプリケーションを実行する。
【００９５】
また、親機から子機１に個別にデータＤ２２を送信する場合も同様の流れである。親機から子機１へユニキャストでデータを送信する例としては、上記親機のユーザから子機１のユーザに個別にメッセージを送信する例の他に、親機と子機１との間で接続を維持するためのキープアライブを送受信する例が挙げられる。具体的には、親機は子機１宛てのデータＤ２２を生成する（Ｓ４７）。この場合、親機のゲームアプリケーションは、子機１のＩＰアドレスを指定する。
【００９６】
親機の情報処理部１１は、ＡＲＰテーブルを参照して、ゲームアプリケーションから指定されたＩＰアドレスに対応する子機１のＭＡＣアドレスを特定し、特定した子機１のＭＡＣアドレスを指定してデータＤ２２を送信するように無線通信部１５に命令を出す。そして、親機の無線通信部１５は、データＤ２２を含むデータフレームを生成する（Ｓ４８）。
【００９７】
次に、親機の無線通信部１５は、子機１へのデータＤ２２を含むフレームを子機１に送信する（Ｓ４９）。具体的には、親機の無線通信部１５は、ソースアドレスとして自機のＭＡＣアドレスを指定し、ディスティネーションアドレスとして子機１のＭＡＣアドレスを指定し、レシーバとして子機１のＭＡＣアドレスを指定し、トランスミッターとして自機のＭＡＣアドレスを指定したデータフレームを無線で送信する。
【００９８】
子機は、親機からのフレームを受信すると、ディスティネーションアドレスから自機宛てのデータであると判断し、当該フレームに含まれるデータＤ２２を取り出す。そして、親機は、当該データＤ２２に基づいてゲームアプリケーションを実行する。
【００９９】
図９は、子機１がブロードキャストで他の装置にデータＤ３を送信する場合の処理の流れを示す図である。
【０１００】
図９に示されるように、子機１は、データＤ３を生成する（Ｓ５０）。例えば、各情報処理装置に対応するキャラクタの位置情報は、全ての装置に共有される必要がある。また、例えば、ある装置に対応するキャラクタが所定の動作を行った場合には、当該動作は全ての装置に共有される必要がある。このようなデータは、各装置に個別に送信するよりもブロードキャストで送信した方が効率的である。例えば、子機１は、自機の入力部１３に対して行われた入力に応じて、子機１に対応するキャラクタの位置を算出し、当該位置に応じたデータＤ３を生成する。そして、子機１は、当該データＤ３を含むデータフレームをブロードキャストで送信する（Ｓ５１）。
【０１０１】
ブロードキャストで送信されたフレームは、親機および子機２によって受信される。親機および子機２は、受信したフレームに含まれるデータＤ３に基づいて、ゲームアプリケーションを実行する。これにより、例えば、子機１に対応するキャラクタの位置が、親機、子機１および子機２の間で共有される。また、例えば、子機１に対応するキャラクタが所定の動作（例えば、アイテムを使用する）を行った場合において当該所定の動作に応じたデータがブロードキャストされた場合、子機１に対応するキャラクタが所定の動作を行ったことが、親機および子機２にも反映される。
【０１０２】
なお、子機１がデータをブロードキャストで送信する場合、子機１は、親機を介してデータをブロードキャストしてもよい。この場合、子機１は、ディスティネーションアドレスとしてブロードキャストアドレスを指定し、レシーバとして親機のＭＡＣアドレスを指定して、フレームを送信する。なお、子機は、データを他の装置にブロードキャストする場合、親機を介してブロードキャストするか、直接ブロードキャストするかを選択可能であってもよい。
【０１０３】
次に、本実施形態のアクションフレームの構造について説明する。まず、無線ＬＡＮの一般的なフレームの構造について図１０を用いて説明する。
【０１０４】
図１０は、一般的なフレームの構造を説明するための図である。図１０に示されるように、一般的なフレームは、フレームヘッダと、フレーム本体とを含む。フレームヘッダは、フレームのタイプと、アドレスとを含む。
【０１０５】
フレームのタイプには、大別して、管理フレーム、制御フレーム、データフレームがある。管理フレームは、さらに、ビーコンと、プローブリクエストと、プローブレスポンスと、オーセンティケーションと、アソシエーション要求と、アソシエーション応答と、アクションフレーム等とに分けられる。
【０１０６】
上述のように、本実施形態の情報処理装置１０は、親機として機能する場合、所定の時間間隔でアクションフレームを送信する。なお、親機は、アクションフレームの他にも、上記ビーコンを所定の時間間隔で送信する。
【０１０７】
また、「アドレス」には、複数のアドレスが格納される。「アドレス」は、レシーバ、トランスミッター、ディスティネーションアドレス、ソースアドレス等を設定するためのものであり、親機又は子機のＭＡＣアドレスを指定するためのものである。
【０１０８】
図１１は、本実施形態の親機が送信するアクションフレームの構造を説明するための図である。
【０１０９】
アクションフレームは、ＩＥＥＥ８０２．１１で規定されており、図１１では、本実施形態に特有の部分についてのみ主に説明する。図１１に示されるように、アクションフレームは、フレームヘッダと、カテゴリと、フレーム本体（Action  details）とを含む。「カテゴリ」には、ベンダー独自（Vendor  specific）を示す値が格納される。フレームヘッダにおけるフレームのタイプには、アクションフレームを示す値が格納される。
【０１１０】
本実施形態のアクションフレームのフレーム本体は、「アプリＩＤ」と、「シーンＩＤ」と、「セッションＩＤ」と、「カウンタ」とが含まれる。これらは、暗号化されずに平文で送信される。
【０１１１】
アプリＩＤは、通信アプリケーションに固有のＩＤである。アプリＩＤは、実行される通信アプリケーションの種類毎に異なり、アプリケーション製作者によって予め割り当てられたＩＤである。なお、異なる種類のアプリケーションであっても、同じシリーズのアプリケーションであって互いに通信することでアプリケーションを実行可能である場合には、これらのアプリケーションのアプリＩＤとして、同一のものが用いられてもよい。アプリＩＤは、フレーム暗号鍵を生成するために用いられる。ここで、「フレーム暗号鍵」は、図１１に示される暗号化部分を暗号化および復号化するための鍵である。フレーム暗号鍵の生成方法については後述する。
【０１１２】
シーンＩＤは、同一のアプリケーションにおける異なるシーンを識別するためのＩＤであり、アプリケーション製作者によって予め割り当てられたＩＤである。例えば、同一のアプリケーションにおいて、対戦シーンと、アイテム交換シーンとがある場合、これらには異なるシーンＩＤが割り当てられる。シーンＩＤは、フレーム暗号鍵を生成するために用いられる。
【０１１３】
セッションＩＤは、他の情報処理装置との通信を行うための当該通信に固有の識別情報である。セッションＩＤは、他の情報処理装置との通信を開始する際にランダムに生成される。具体的には、セッションＩＤは、親機が設定される際に生成される。セッションＩＤは、フレーム暗号鍵を生成するために用いられる。
【０１１４】
カウンタは、図１１に示される暗号化部分の平文が同じ内容であっても異なる暗号文を生成するために用いられる。カウンタは、初期的にはランダムに生成される。カウンタは、前回のアクションフレームの暗号化部分の内容と今回のアクションフレームの暗号化部分の内容とが全く同じ場合には同じ値となる。一方、前回のアクションフレームの暗号化部分の内容と今回のアクションフレームの暗号化部分の内容とが少なくとも一部において異なる場合には、カウンタは「１」だけインクリメントされる。カウンタは、アクションフレームを暗号化する際のＩＶ（Initialization  Vector）として用いられる。
【０１１５】
また、図１１に示されるように、アクションフレームのフレーム本体には、「暗号化部分」が含まれる。「暗号化部分」は、上記鍵格納部１６に格納された装置共通鍵（複数の情報処理装置１０に共通の鍵）に基づいて暗号化される。具体的には、暗号化部分は、フレーム暗号鍵とＩＶとしてのカウンタとを用いて暗号化される。フレーム暗号鍵は、上記アプリＩＤ、シーンＩＤ及びセッションＩＤを所定の手順で変換した変換値を、上記装置共通鍵を用いて暗号化することにより、生成される。
【０１１６】
図１１に示されるように、「暗号化部分」は、「ノード情報」と、「受け入れポリシー」と、「アドバタイズデータ」と、「アプリ鍵生成用乱数」と、「ダイジェスト」とを含む。
【０１１７】
ノード情報は、各装置のＩＰアドレスとＭＡＣアドレスとを対応付けした情報であり、上記ＡＲＰテーブルである。ノード情報は、現時点でネットワークに参加している１又は複数のノード（親機および複数の子機）の情報を含む。ノード情報は、例えば、最大で８台分のノードの情報を含む。
【０１１８】
受け入れポリシーは、親機が子機の参加を受け付けているか否か、親機が子機の参加を条件付きで受け付けているか否かを示す情報である。受け入れポリシーの詳細については後述する。
【０１１９】
アドバタイズデータは、親機が子機に対して送信するアプリケーションに関する任意のデータである。親機は、他の情報処理装置１０との間で通信アプリケーションを実行している間、当該通信アプリケーションに関する任意のデータをアドバタイズデータとして周囲にブロードキャストすることができる。
【０１２０】
アプリ鍵生成用乱数は、通信アプリケーションを開始する際に生成されるアプリ鍵を生成するための乱数である。通信アプリケーションの実行中に送受信されるアプリケーションデータは、アプリ鍵を用いて暗号化又は復号化される。アプリ鍵は、アプリ鍵生成用乱数と、アプリケーション固有のパスフレーズとに基づいて各情報処理装置１０において生成される。アプリケーション固有のパスフレーズは、アプリケーションの開発者によって設定され、アプリケーションプログラムの中に含まれている。アプリ鍵は、複数の情報処理装置１０の間で通信アプリケーションが開始される毎に生成される。例えば、あるタイミングで親機、子機１および子機２との間で第１の通信アプリケーションが実行される場合、当該第１の通信アプリケーションを実行するために親機が設定されるときに、アプリ鍵生成用乱数と第１の通信アプリケーションに固有のパスフレーズとに基づいて、アプリ鍵が生成される。このアプリ鍵は、第１の通信アプリケーションの実行中、親機、子機１および子機２の間で共有される。あるタイミングで開始された第１の通信アプリケーションが終了し、別のタイミングで同じ第１の通信アプリケーションが開始される場合、新たにアプリ鍵生成用乱数が生成されて、新たなアプリ鍵が生成される。また、例えば、あるタイミングで親機、子機１および子機２との間で第１の通信アプリケーションが実行され、同時に、親機と子機３との間で第２の通信アプリケーションが実行される場合、第１の通信アプリケーションのためのアプリ鍵と、第２の通信アプリケーションのためのアプリ鍵とがそれぞれ生成される。
【０１２１】
「ダイジェスト」は、暗号化する前のフレーム本体全体のメッセージダイジェスト（署名）である。具体的には、ダイジェストは、所定のハッシュ関数を用いて算出された、図１１に示す「アプリＩＤ」から「アプリ鍵生成用乱数」までの部分のハッシュ値である。
【０１２２】
次に、受け入れポリシーの詳細について説明する。ここで、親機は、複数の動作モードのうちの何れかで動作する。図１２Ａは、親機の動作モードの一例を示す図である。
【０１２３】
図１２Ａに示されるように、親機の動作モードには、「許可」、「拒否」、「ホワイトリスト」、「ブラックリスト」がある。これらの動作モードによって親機の動作は異なる。なお、親機の動作モードには、これら４つのモードに加えて、他のモードがあってもよい。
【０１２４】
親機が、動作モード「許可」で動作している場合、親機は全ての子機の参加を受け付ける。すなわち、親機は、動作モード「許可」で動作している場合、常に、参加要求を送信した全ての子機からの接続を受け入れる。例えば、親機が通信ゲームを開始する前において通信ゲームへの参加を募集する場合には、親機は、動作モードを「許可」に設定する。親機が動作モード「許可」で動作しているとき、親機は、アクションフレームにおける受け入れポリシーの値を「許可」を示す値（例えば、「０」）に設定して、アクションフレームを送信する。
【０１２５】
親機が、動作モード「拒否」で動作している場合、親機は全ての子機の参加を受け付けない。すなわち、親機は、動作モード「拒否」で動作している場合、常に、参加要求を送信した全ての子機からの接続を拒否する。例えば、通信ゲームに参加するメンバーが確定し、通信ゲームが開始された後は、親機は、動作モードを「拒否」に設定する。また、親機が通信ゲームを開始する前においても、現時点で参加している子機の数が上限に達した場合には、親機は、動作モードを「拒否」に設定する。親機が動作モード「拒否」で動作しているとき、親機は、アクションフレームにおける受け入れポリシーの値を「拒否」を示す値（例えば、「１」）に設定して、アクションフレームを送信する。
【０１２６】
親機が、動作モード「ホワイトリスト」で動作している場合、動作モード「拒否」と同様に、親機は子機の参加を受け付けていないが、以前に接続されていた子機であって不意に切断された子機の再接続を受け入れる。例えば、親機と子機２とが接続されている状態において、通信状況等により親機が子機２の存在を検出できない時間が所定の閾値を超えた場合には、親機と子機２との接続が切断される。このような場合において、親機は、子機２の再接続を受け入れるため、動作モード「ホワイトリスト」を設定する。親機は、再接続を受け入れる子機の一覧を記載した「ホワイトリスト」を自機の記憶装置に記憶している。親機は、動作モード「ホワイトリスト」が設定されている場合、自機に記憶したホワイトリストに含まれる子機からの再接続の要求（参加要求）があったときは、当該子機の再接続を許可する。なお、動作モード「ホワイトリスト」が設定されている場合、親機は、ホワイトリストに含まれない子機からの参加要求があったときは、当該子機の接続を拒否する。親機が動作モード「ホワイトリスト」で動作しているとき、親機は、アクションフレームにおける受け入れポリシーの値を「ホワイトリスト」を示す値（例えば、「２」）に設定して、アクションフレームを送信する。
【０１２７】
親機が、動作モード「ブラックリスト」で動作している場合、動作モード「許可」と同様に、親機は、子機の参加を受け付けるが、以前に接続されていた子機であって意図的に切断された子機の接続を拒否する。例えば、親機と子機２とが接続されている状態において、親機が子機２に対して意図的に切断する旨の切断要求を送信した場合には（例えば、親機のユーザが子機２のユーザに対して通信アプリケーションへの参加を拒絶する意思を示した場合）、親機と子機２との接続が切断される。このような場合において、親機は、子機２からの再接続を拒否するため、動作モード「ブラックリスト」を設定する。親機は、再接続を拒否する子機の一覧を記載した「ブラックリスト」を自機の記憶装置に記憶している。親機は、動作モード「ブラックリスト」が設定されている場合、自機に記憶したブラックリストに含まれる子機からの再接続のための参加要求があったときは、当該子機の再接続を拒否する。なお、親機は、動作モード「ブラックリスト」が設定されている場合、ブラックリストに含まれない子機からの参加要求があったときは、当該子機の接続を許可する。親機が動作モード「ブラックリスト」で動作しているとき、親機は、アクションフレームにおける受け入れポリシーの値を「ブラックリスト」を示す値（例えば、「３」）に設定して、アクションフレームを送信する。
【０１２８】
親機は、親機のユーザが意図的に他のユーザを拒絶する場合に限らず、他の場合にも、子機に対して切断要求を送信する。親機が送信する切断要求は、切断理由を含む。親機は、子機に切断要求を送信するときの切断理由によって、子機をブラックリストに入れるか否かを判断する。
【０１２９】
例えば、上記のように親機のユーザが子機のユーザを拒絶する場合（子機のユーザを通信ゲームから意図的に排除する場合）、親機は、子機に対してその切断理由を含めて切断要求を送信するとともに、当該子機をブラックリストに含める。なお、このような親機のユーザが意図的に子機のユーザを拒絶するときに送信される切断要求を、「第１切断要求」ということがある。
【０１３０】
また、ユーザの操作によって親機がスリープ状態に移行するときやユーザの操作によらずに所定期間無入力の状態が継続した場合にスリープ状態に移行するとき、あるいは、親機がユーザの操作によってフライトモード（無線通信機能をＯＦＦにした動作モード）に移行するとき、親機は、その切断理由を含めて切断要求を子機に送信する。この場合は、親機は、当該子機をブラックリストに含めない。なお、このような切断要求を、「第２切断要求」ということがある。
【０１３１】
なお、親機がスリープ状態やフライトモードに移行するとネットワーク内に親機が存在しなくなる。この場合、ネットワーク内の他の子機が親機になって、接続を維持し、通信アプリケーションの実行を継続することができる。この場合、セッションＩＤは新たな親機に引き継がれる。
【０１３２】
一方、子機は、アクションフレームを受信した場合、アクションフレームにおける受け入れポリシーを示す値に応じて動作する。図１２Ｂは、アクションフレームを受信した子機の動作の一例を示す図である。
【０１３３】
図１２Ｂに示されるように、受け入れポリシー「許可」のアクションフレームを受信した子機は、このアクションフレームを送信した親機が動作モード「許可」で動作していることが分かる。このため、このアクションフレームを受信した子機は、このアクションフレームを送信した親機の情報を、接続先候補として表示する。
【０１３４】
また、受け入れポリシー「拒否」のアクションフレームを受信した子機は、このアクションフレームを送信した親機が動作モード「拒否」で動作していることが分かる。このため、このアクションフレームを受信した子機は、このアクションフレームを送信した親機の情報を、接続先候補として表示しない。
【０１３５】
また、受け入れポリシー「ホワイトリスト」のアクションフレームを受信した子機は、親機が動作モード「ホワイトリスト」で動作しており、以前に接続されていた子機のみ再接続を許可している状態であることが分かる。このため、子機は、例えば以前に自機が親機と接続したことがある場合には、このアクションフレームを送信した親機の情報を、接続先候補として表示する。また、子機は、親機への再接続が可能であることを示す画面を表示部１４に表示してもよい。あるいは、子機は、このアクションフレームを送信した親機に対して、自動的に参加要求を送信してもよい。
【０１３６】
また、受け入れポリシー「ブラックリスト」のアクションフレームを受信した子機は、親機が動作モード「ブラックリスト」で動作しており、以前に接続されて意図的に切断した子機の再接続を拒否している状態であることが分かる。このため、子機は、例えば以前に自機が親機から第１切断要求を受信したことがある場合には、このアクションフレームを送信した親機の情報を、接続先候補として表示しない。あるいは、子機は、このアクションフレームを送信した親機に対して自動的に再接続の要求を送信しない。なお、子機は、親機への再接続が不可能であることを示す画面を表示部１４に表示してもよい。
【０１３７】
本実施形態では、親機は、アクションフレームの「受け入れポリシー」として０〜３の何れかの値を設定してアクションフレームを送信するが、自機において記憶している再接続を受け入れる装置の一覧を記載した「ホワイトリスト」自体、または、自機において記憶している再接続を拒否する装置の一覧を記載した「ブラックリスト」自体を、アクションフレームに含めて送信しない。
【０１３８】
なお、他の実施形態では、親機は、自機において記憶している「ホワイトリスト」自体、または、自機において記憶している「ブラックリスト」自体を、アクションフレームに含めて送信してもよい。
【０１３９】
子機は、親機から受信したアクションフレームにおける「受け入れポリシー」に格納された値と、過去に親機から受信した切断要求とに基づいて、接続先候補として表示するか否か、すなわち、当該親機に対して再接続のための参加要求を送信するか否かを判断する。
【０１４０】
なお、子機は、アクションフレームにおける「受け入れポリシー」の値、および、過去に親機から受信した切断要求に加えて、アクションフレームにおける「セッションＩＤ」にも基づいて、親機に対して再接続するか否か（接続先候補として表示するか否か）を判断する。子機は、親機との接続を確立した場合には、セッションＩＤを自機に記憶する。このセッションＩＤは、当該子機と親機との接続が切断された場合でも、子機において所定期間記憶される。例えば、子機は、親機との通信が所定期間行われなかった場合、親機との接続を切断するが、この親機への再接続のために当該接続のセッションＩＤを記憶しておく。子機は、親機との接続が切断された後にアクションフレームを受信した場合、アクションフレームに含まれるセッションＩＤが、切断前の親機との接続におけるセッションＩＤと一致する場合には、直前までこの親機と接続していたことが分かる。この場合、子機は、例えば、この親機に再接続するか否かをユーザに選択させるための画面を表示部１４に表示する。ユーザによって再接続が選択された場合には、子機は、当該アクションフレームを送信した親機に対して、再接続のための参加要求を送信する。
【０１４１】
一方、子機は、親機との接続が切断された後にアクションフレームを受信した場合において、アクションフレームに含まれるセッションＩＤが、切断前の親機との接続におけるセッションＩＤと一致しない場合には、このアクションフレームを送信した親機が、直前まで接続していた親機とは異なるものであると判断する。この場合、子機は、例えば、この親機に新たに接続するか否かをユーザに選択させるための画面を表示部１４に表示する。ユーザによって新たに接続することが選択された場合には、子機は、当該アクションフレームを送信した親機に対して、新たな接続のための参加要求を送信する。例えば、子機は、直前まで接続していた親機Ａから上記第１切断要求が送信された場合において、別の親機Ｂからアクションフレームを受信したとき、このアクションフレームの受け入れポリシーが「ブラックリスト」を示す値であったとしても、親機Ｂに対して参加要求を送信する。子機は、アクションフレームを送信した場合、第１切断要求を送信した親機Ａからのアクションフレームなのか、親機Ａとは異なる親機Ｂからのアクションフレームなのかを、セッションＩＤ及び／又はＭＡＣアドレスに基づいて判定することができる。
【０１４２】
（各装置において行われる処理の詳細）
次に、情報処理装置１０において行われる処理の詳細について説明する。図１３は、情報処理装置１０を親機または子機に設定するための処理の詳細を示すフローチャートである。複数の情報処理装置１０のそれぞれにおいて図１３に示される処理が行われることにより、各情報処理装置１０は親機または子機に設定される。なお、図１３に示す処理は、情報処理装置１０の情報処理部１１（具体的にはＣＰＵ）が所定のプログラムを実行することにより行われる。
【０１４３】
図１３に示されるように、情報処理装置１０は、まず、自機を親機として設定するか否かをユーザに選択させるための選択画面を表示部１４に表示する（ステップＳ１０１）。
【０１４４】
選択画面において自機を親機として設定することが選択された場合（ステップＳ１０２：ＹＥＳ）、情報処理装置１０は、自機を親機として設定する（ステップＳ１０３）。一方、選択画面において自機を親機として設定しないことが選択された場合（ステップＳ１０２：ＮＯ）、情報処理装置１０は、自機を子機として設定する（ステップＳ１０４）。ステップＳ１０３の処理が実行された場合、情報処理装置１０は、以降、親機として動作し、図１５に示す親機処理を実行する。ステップＳ１０４の処理が実行された場合、情報処理装置１０は、以降、子機として動作し、図２０に示す子機処理を実行する。
【０１４５】
次に、親機の動作について図１５〜図１８を参照して説明する。
【０１４６】
（親機に記憶されるデータ）
まず、図１４を参照して、親機において記憶されるデータについて説明する。図１４は、親機において記憶されるデータの一例を示す図である。
【０１４７】
図１４に示されるように、親機には、記憶領域１０１〜１１３が設けられる。具体的には、記憶領域１０１〜１０５には、上述したアプリＩＤ、シーンＩＤ、セッションＩＤ、カウンタ、アプリ鍵生成用乱数がそれぞれ記憶される。また、記憶領域１０６および記憶領域１０７には、フレーム暗号鍵およびアプリ鍵がそれぞれ記憶される。
【０１４８】
また、記憶領域１０８には、ノード情報（ＡＲＰテーブル）が記憶される。ノード情報（ＡＲＰテーブル）には、親機のＩＰアドレスおよびＭＡＣアドレスを対応付けしたデータと、接続中の各子機のＩＰアドレスおよびＭＡＣアドレスを対応付けしたデータとが含まれる。
【０１４９】
また、記憶領域１０９には、受け入れポリシー（動作モード）を示す値が記憶される。記憶領域１１０には、ホワイトリストが記憶される。ホワイトリストには、子機の情報（ＩＰアドレス、ＭＡＣアドレス等）が含まれる。また、記憶領域１１１には、ブラックリストが記憶される。ブラックリストには、子機の情報（ＩＰアドレス、ＭＡＣアドレス等）が含まれる。
【０１５０】
また、記憶領域１１２には、親機の入力部１３に対して行われた入力に応じた操作データが記憶される。また、記憶領域１１３には、各子機から受信した操作データ（各子機の入力部１３に対して行われた入力に応じた操作データ）が記憶される。
【０１５１】
図１４に示される各種データは、親機の記憶装置（情報処理部１１内のＤＲＡＭ、記憶部１２、無線通信部１５内のメモリの何れか）に記憶され、親機の情報処理部１１から読み取り可能である。
【０１５２】
（親機処理）
図１５は、情報処理装置１０ａが親機として動作しているときの親機処理の詳細を示すフローチャートである。
【０１５３】
図１５に示されるように、情報処理装置１０ａ（親機）は、まず、自機のＩＰアドレスを生成し、生成したＩＰアドレスを自機に設定する（ステップＳ１１０）。続いて、親機は、アプリＩＤおよびシーンＩＤを、記憶領域１０１および記憶領域１０２にそれぞれ設定する（ステップＳ１１１）。上述のように、アプリＩＤおよびシーンＩＤは予め定められたＩＤであり、親機は、実行する通信アプリケーションの種類、シーンに応じて、アプリＩＤおよびシーンＩＤを設定する。
【０１５４】
続いて、親機は、セッションＩＤをランダムに生成して記憶領域１０３に格納する（ステップＳ１１２）。次に、親機は、アプリ鍵生成用乱数をランダムに生成して記憶領域１０５に格納する（ステップＳ１１３）。また、親機は、ステップＳ１１３において、生成したアプリ鍵生成用乱数と、アプリケーションプログラム内に格納されたアプリケーション固有のパスフレーズとを用いてアプリ鍵を生成して、記憶領域１０７に記憶する。親機は、当該アプリ鍵を用いて、通信アプリケーションの実行中に送受信されるアプリケーションデータの暗号化および復号化を行う。また、子機においても、親機から送信されたアプリ鍵生成用乱数を用いて同じアプリ鍵が生成される。
【０１５５】
情報処理装置１０ａは、複数の情報処理装置１０との間で通信アプリケーションを実行するために親機となる際に、上記ステップＳ１１０〜Ｓ１１３の処理を１回だけ実行する。親機は、ステップＳ１１３の処理を実行した後、ステップＳ１１４〜ステップＳ１１８の処理を繰り返し実行する。
【０１５６】
具体的には、親機は、アクションフレーム送信処理を実行する（ステップＳ１１４）。アクションフレーム送信処理は、上述したアクションフレームを送信するための処理であり、所定の時間間隔（例えば、１００ｍｓｅｃ毎）で繰り返し実行される。このアクションフレーム送信処理の詳細については後述する。
【０１５７】
次に、親機は、ノード追加・削除処理を実行する（ステップＳ１１５）。ノード追加・削除処理は、子機を通信アプリケーションに参加または離脱させるための処理である。ノード追加・削除処理の詳細については後述する。
【０１５８】
ステップＳ１１５に続いて、親機は、アプリデータ通信処理（親機）を実行する（ステップＳ１１６）。親機は、子機の参加の受け付けを終了した場合（例えば、ステップＳ１１５の処理で参加する子機の数が上限に達した場合や親機のユーザによって指示された場合）、通信アプリケーションの実行を開始する。アプリデータ通信処理（親機）は、親機と子機との間で通信アプリケーションが実行されている間にアプリケーションデータを送受信するための処理である。ステップＳ１１６のアプリデータ通信処理（親機）の詳細については後述する。
【０１５９】
ステップＳ１１６に続いて、親機は、アプリケーション処理を実行する（ステップＳ１１７）。具体的には、親機は、ステップＳ１１６で受信したデータに基づいて、アプリケーション処理を実行する。例えば、親機は、子機の入力部１３において行われた入力に応じた操作データをステップＳ１１６で受信し、当該受信した操作データを記憶領域１１３に記憶している。親機は、記憶領域１１３に記憶された子機の操作データに基づいて、アプリケーション処理を実行する。また、親機は、自機の入力部１３において行われた入力に応じた操作データを記憶領域１１２に記憶している。親機は、記憶領域１１２に記憶された親機の操作データに基づいて、アプリケーション処理を実行する。例えば、通信アプリケーションとして、複数のユーザ間で格闘ゲームが行われる場合、各ユーザによって行われた入力に応じた操作データがステップＳ１１６において受信される。この操作データに基づいて、親機は、各ユーザに対応するキャラクタをゲーム空間内で動作させたり移動させたりする。そして、親機は、アプリケーション処理に応じた画像を表示部１４に表示させる。
【０１６０】
ステップＳ１１７の処理を実行した場合、親機は、通信アプリケーションを終了するか否かを判定する（ステップＳ１１８）。例えば、親機のユーザによって通信アプリケーションの終了が指示された場合や通信アプリケーションの開始から所定時間が経過した場合には、親機は通信アプリケーションを終了すると判定する。通信アプリケーションを終了しないと判定した場合（ステップＳ１１８：ＮＯ）、親機は、再びステップＳ１１４の処理を実行する。
【０１６１】
（アクションフレーム送信処理）
次に、アクションフレーム送信処理の詳細について説明する。図１６は、図１５のステップＳ１１４のアクションフレーム送信処理の詳細を示すフローチャートである。
【０１６２】
図１６に示されるように、親機は、送信するデータが前回アクションフレームを送信したときのデータと同じであるか否かを判定する（ステップＳ１２０）。具体的には、親機は、ノード情報に変化がなく、受け入れポリシー（動作モード）に変化がなく、かつ、アドバタイズデータに変化がない場合は、ステップＳ１２０においてＹＥＳと判定する。一方、これらのデータの何れかに変化がある場合、親機は、ステップＳ１２０においてＮＯと判定する。なお、親機は、最初にステップＳ１２０の処理を実行するときは、常にＮＯと判定する。
【０１６３】
送信するデータが前回のデータと異なると判定した場合（ステップＳ１２０：ＮＯ）、親機は、カウンタを生成して記憶領域１０４に設定する（ステップＳ１２１）。具体的には、親機は、最初にステップＳ１２１の処理を実行する場合、カウンタをランダムに生成する。一方、親機は、２回目以降にステップＳ１２１の処理を実行する場合、記憶領域１０４に記憶されているカウンタの値に「１」を加算して、加算後のカウンタの値を記憶領域１０４に記憶する。
【０１６４】
次に、親機は、記憶領域１０３に設定されたセッションＩＤに基づいて、変換値を生成する（ステップＳ１２２）。具体的には、親機は、ステップＳ１１１において設定したアプリＩＤ、シーンＩＤ、および、ステップＳ１１２において生成したセッションＩＤを、所定の関数で変換することにより変換値を生成する。
【０１６５】
次に、親機は、ステップＳ１２２で生成した変換値を、装置共通鍵を用いて暗号化することにより、フレーム暗号鍵を生成する（ステップＳ１２３）。親機は、生成したフレーム暗号鍵を記憶領域１０６に記憶する。ステップＳ１２３に続いて、親機は、「ダイジェスト」の値を一定値と仮定する（ステップＳ１２４）。
【０１６６】
次に、親機は、「ダイジェスト」の値を一定値にした場合における図１１に示すフレーム本体のメッセージダイジェストを計算する（ステップＳ１２５）。具体的には、親機は、図１１に示すフレーム本体（具体的には、アプリＩＤ、シーンＩＤ、セッションＩＤ、カウンタ、ノード情報、受け入れポリシー、アドバタイズデータ、アプリ鍵生成用乱数、一定値と仮定した場合のダイジェスト）を図１１に示す順に並べ、この部分のデータのハッシュ値を所定のハッシュ関数を用いて算出することにより、「ダイジェスト」を算出する。
【０１６７】
なお、「ノード情報」および「受け入れポリシー」は、後述するノード追加・削除処理が行われることにより、生成、変更される。また、「アドバタイズデータ」は、例えば通信アプリケーションからの要求に応じて、適宜のタイミングで設定される。例えば、通信アプリケーションが、アプリケーション処理に用いる所定のデータを、アクションフレームを用いて周辺にブロードキャストする場合は、通信アプリケーションは、アドバタイズデータを設定する。
【０１６８】
次に、親機は、ステップＳ１２３で生成したフレーム暗号鍵と、カウンタとを用いて、図１１に示すフレーム本体の暗号化部分（ノード情報、受け入れポリシー、アドバタイズデータ、アプリ鍵生成用乱数、および、ダイジェスト）を暗号化する（ステップＳ１２６）。すなわち、親機は、ステップＳ１２６において、フレーム暗号鍵とＩＶとしてのカウンタとを用いて、フレーム本体の暗号化部分（平文）を暗号化する。平文は、フレーム暗号鍵が同じでも、ＩＶとしてのカウンタが異なれば、異なる暗号文になる。カウンタは、暗号化部分の平文の少なくとも一部が変化する毎に変化するため、暗号化部分の平文の一部が前回と同じである場合でも、前回と同じ暗号文にはならない。
【０１６９】
そして、親機は、アクションフレームを生成する（ステップＳ１２７）。具体的には、親機は、アプリＩＤ、シーンＩＤ、セッションＩＤ、カウンタ、ステップＳ１２６で暗号化した暗号化部分をこの順に並べて、図１１に示すフレーム本体を生成する。そして、フレーム本体の前にフレームヘッダを付加して、図１１に示すアクションフレームを生成する。
【０１７０】
一方、親機は、送信するデータが前回のデータと同じと判定した場合（ステップＳ１２０：ＹＥＳ）、前回と同じアクションフレームを生成する（ステップＳ１２８）。
【０１７１】
ステップＳ１２７の処理を実行した場合、又は、ステップＳ１２８の処理を実行した場合、親機は、生成したアクションフレームを送信する（ステップＳ１２９）。これにより、アクションフレームがブロードキャストされる。
【０１７２】
上記から明らかなように、「フレーム暗号鍵」は、装置共通鍵とセッションＩＤとに基づいて生成される。セッションＩＤは、情報処理装置１０が親機として設定される際に生成される。このため、フレーム暗号鍵は、親機が設定される毎に生成される。また、アクションフレームは、フレーム暗号鍵とカウンタとを用いて暗号化される。装置共通鍵は、各情報処理装置１０に共通の鍵であり固定の鍵であるが、カウンタの値は、アクションフレームにおける暗号化部分のデータが変化する毎に変化する。このため、「フレーム暗号鍵」とカウンタとを用いて暗号化されるアクションフレームが繰り返し送信されても、アクションフレームの暗号化部分が変化する。したがって、フレーム暗号鍵を有しない他の装置は、アクションフレームを繰り返し受信してもフレーム暗号鍵を導出することは困難であり、アクションフレームにおける暗号化部分を解読することは困難である。
【０１７３】
（ノード追加・削除処理）
次に、ノード追加・削除処理の詳細について説明する。図１７は、図１６のステップＳ１１５のノード追加・削除処理の詳細を示すフローチャートである。
【０１７４】
図１７に示されるように、親機は、子機から通信アプリケーションへの参加要求を受信したか否かを判定する（ステップＳ１３１）。子機からの参加要求には、子機のＭＡＣアドレスが含まれる。
【０１７５】
子機からの参加要求を受信したと判定した場合（ステップＳ１３１：ＹＥＳ）、親機は、記憶領域１０９に設定されている動作モード（受け入れポリシー）の値に基づいて、当該参加要求を送信した子機の参加を許可するか否かを判定する（ステップＳ１３２）。具体的には、親機は、記憶領域１０９に動作モード「ホワイトリスト」を示す値が設定されている場合、参加要求を送信した子機が、記憶領域１１０に記憶されたホワイトリストに含まれているか否かを判定することにより、当該参加要求を送信した子機の参加を許可するか否かを判定する。親機は、参加要求を送信した子機がホワイトリストに含まれている場合、当該子機の参加を許可し、参加要求を送信した子機がホワイトリストに含まれていない場合、当該子機の参加を拒否する。
【０１７６】
また、親機は、記憶領域１０９に動作モード「ブラックリスト」を示す値が設定されている場合、参加要求を送信した子機が、記憶領域１１１に記憶されたブラックリストに含まれているか否かを判定することにより、当該参加要求を送信した子機の参加を許可するか否かを判定する。親機は、参加要求を送信した子機がブラックリストに含まれている場合、当該子機の参加を拒否し、参加要求を送信した子機がブラックリストに含まれていない場合、当該子機の参加を許可する。
【０１７７】
また、親機は、記憶領域１０９に動作モード「許可」を示す値が設定されている場合、ブラックリスト又はホワイトリストを参照することなく、参加要求を送信した子機の参加を許可する。また、親機は、記憶領域１０９に動作モード「拒否」を示す値が設定されている場合、ブラックリスト又はホワイトリストを参照することなく、参加要求を送信した子機の参加を拒否する。
【０１７８】
なお、親機は、動作モード「許可」が設定されている場合、ステップＳ１３２およびステップＳ１３３の処理を実行することなく、次のステップＳ１３４の処理を実行してもよい。また、親機は、動作モード「拒否」が設定されている場合、ステップＳ１３２〜ステップＳ１３５の処理を実行することなく、ステップＳ１３６の処理を実行してもよい。
【０１７９】
参加要求を送信した子機の参加を許可した場合（ステップＳ１３２：ＹＥＳ）、親機は、参加要求を送信した子機が新たな子機か否かを判定する（ステップＳ１３３）。親機は、ステップＳ１０３において自機を親機として設定して図１５の処理を開始したときから、通信アプリケーションに参加した子機の情報（ＩＰアドレスおよびＭＡＣアドレスを含む）を記憶装置に記憶している。例えば、図１５の処理を開始してから子機１が通信アプリケーションに参加し、その後、例えば通信状況が悪化したために当該子機１との通信が切断された場合、親機は、子機１をノード情報（ＡＲＰテーブル）から削除するとともに、当該子機１の情報をホワイトリストに記憶しておく。そして、親機は、今回参加要求を送信した子機が、ホワイトリストに記憶している子機１であると判断した場合は、参加要求を送信した子機が過去に接続した子機であると判断して、ステップＳ１３３においてＮＯと判定する。一方、親機は、今回参加要求を送信した子機が過去に接続した子機でないと判断した場合には、ステップＳ１３３においてＹＥＳと判定する。
【０１８０】
参加要求を送信した子機が新たな子機であると判定した場合（ステップＳ１３３：ＹＥＳ）、親機は、当該参加要求を送信した子機のＩＰアドレスを生成する。具体的には、親機は、参加要求を送信した順番に子機のＩＰアドレスを割り当てる。
【０１８１】
ステップＳ１３４の処理を実行した場合、又は、ステップＳ１３３でＮＯと判定した場合、親機は、ノード情報（ＡＲＰテーブル）を更新する（ステップＳ１３５）。具体的には、親機は、ステップＳ１３４の処理に続いてステップＳ１３５の処理を実行する場合、ステップＳ１３４で生成したＩＰアドレスと、参加要求を送信した子機のＭＡＣアドレスとを対応付けして、記憶領域１０８のノード情報を更新する。また、親機は、ステップＳ１３３の処理に続いてステップＳ１３５の処理を実行する場合、例えばホワイトリストに記憶されている情報に基づいて、参加要求を送信した子機に前回と同じＩＰアドレスを割り当て、当該ＩＰアドレスと子機のＭＡＣアドレスとを対応付けして、記憶領域１０８のノード情報を更新する。
【０１８２】
ステップＳ１３５の処理を実行した場合、ステップＳ１３２でＮＯと判定した場合、又は、ステップＳ１３１でＮＯと判定した場合、親機は、子機の離脱を検出したか否かを判定する（ステップＳ１３６）。例えば、親機は、接続中の子機から定期的にフレームを受信しており、子機との接続が維持されているか否かを判定する。具体的には、親機は、各子機に対して定期的にフレームを送信し、そのフレームに対する応答フレームを各子機から受信することにより、各子機との接続が維持されているか否かを判定する。また、子機は、子機のユーザによって通信アプリケーションからの離脱を指示された場合、親機に対して通信アプリケーションから離脱する旨のメッセージを送信する。親機は、子機から応答フレームを所定期間受信しなかった場合や、子機から離脱の旨のメッセージを受信した場合には、ステップＳ１３６においてＹＥＳと判定する。
【０１８３】
子機の離脱を検出した場合（ステップＳ１３６：ＹＥＳ）、親機は、当該子機をノード情報（ＡＲＰテーブル）から削除してノード情報を更新する（ステップＳ１３７）。このとき、親機は、削除した子機の情報（ＩＰアドレス、ＭＡＣアドレス、ユーザ名等）をホワイトリストに追加して、記憶領域１１０に記憶する。
【０１８４】
ステップＳ１３７の処理を実行した場合、又は、ステップＳ１３６でＮＯと判定した場合、親機は、子機を切断するか否かを判定する（ステップＳ１３８）。例えば、親機のユーザによって意図的に子機を拒絶する旨の指示がされた場合には、親機は、ステップＳ１３８においてＹＥＳと判定する。また、例えば、親機がスリープモードに移行する場合には、親機は、ステップＳ１３８においてＹＥＳと判定する。
【０１８５】
子機を切断すると判定した場合（ステップＳ１３８：ＹＥＳ）、親機は、当該子機に対して切断要求を送信する（ステップＳ１３９）。例えば、親機のユーザが子機を意図的に拒絶した場合には、第１切断要求を子機に対して送信する。
【０１８６】
ステップＳ１３９に続いて、親機は、切断すると判定した子機をノード情報から削除してノード情報を更新する（ステップＳ１４０）。当該子機に対して第１切断要求を送信した場合には、親機は、当該子機の情報（ＩＰアドレス、ＭＡＣアドレス、ユーザ名等）をブラックリストに追加して、記憶領域１１１に記憶する。
【０１８７】
ステップＳ１４０の処理を実行した場合、又は、ステップＳ１３８でＮＯと判定した場合、親機は、記憶領域１０９に記憶された受け入れポリシー（動作モード）の値を変更するか否かを判定する（ステップＳ１４１）。受け入れポリシーの値を変更すると判定した場合（ステップＳ１４１：ＹＥＳ）、親機は、受け入れポリシーの値を変更して記憶領域１０９に記憶する（ステップＳ１４２）。例えば、親機は、ステップＳ１３５の処理で子機が追加されたことによって参加している子機の数が上限数に達した場合には、記憶領域１０９に記憶された受け入れポリシーの値を「許可」を示す値から「拒否」を示す値に変更する。また、親機は、子機を募集している状態から子機の募集を終了し、通信ゲームを開始した場合には、記憶領域１０９に記憶された受け入れポリシーの値を、例えば「許可」又は「拒否」を示す値から「ホワイトリスト」を示す値に変更する。また、親機は、ステップＳ１３９において第１切断要求を送信した場合には、記憶領域１０９に記憶された受け入れポリシーの値を、例えば「許可」又は「拒否」を示す値から「ブラックリスト」を示す値に変更する。これにより、親機は、第１切断要求を送信する前では、受け入れポリシーとして例えば「許可」を示す値を含めたアクションフレームを送信していたものの、第１切断要求を送信した後では、受け入れポリシーとして「ブラックリスト」を示す値を含めたアクションフレームを送信する。
【０１８８】
ステップＳ１４２の処理を実行した場合、又は、ステップＳ１４１でＮＯと判定した場合、親機は、図１７に示す処理を終了する。
【０１８９】
（アプリデータ通信処理（親機））
次に、親機において行われるアプリデータ通信処理の詳細について説明する。図１８は、図１６のステップＳ１１６のアプリデータ通信処理（親機）の詳細を示すフローチャートである。
【０１９０】
図１８に示されるように、親機は、通信アプリケーションを実行中か否かを判定する（ステップＳ１５０）。例えば、子機の参加の受け付けが終了し、複数の装置の間で通信アプリケーション（通信ゲーム）の実行が開始された場合、親機は、ステップＳ１５０においてＹＥＳと判定する。一方、親機は、子機の参加を受け付けている場合、ステップＳ１５０においてＮＯと判定し、図１８に示す処理を終了する。
【０１９１】
通信アプリを実行中の場合（ステップＳ１５０：ＹＥＳ）、親機は、自機から子機に対して送信すべきアプリケーションデータがあるか否かを判定する（ステップＳ１５１）。例えば、親機において実行中のアプリケーションからアプリケーションデータ（例えば、操作データ）の送信要求があった場合、親機は、送信すべきアプリケーションデータがあると判定する。
【０１９２】
送信すべきアプリケーションデータがあると判定した場合（ステップＳ１５１：ＹＥＳ）、親機は、アプリケーションから渡されたアプリケーションデータを、記憶領域１０７に記憶したアプリ鍵で暗号化する（ステップＳ１５２）。上述のように、アプリ鍵は、上記ステップＳ１１３においてアプリ鍵生成用乱数に基づいて生成されて、記憶領域１０７に記憶されている。なお、子機の参加の受け付けが終了して通信アプリケーションが開始される際に、アプリ鍵生成用乱数に基づいて、アプリ鍵が生成されてもよい。
【０１９３】
ステップＳ１５２に続いて、親機は、特定の子機へデータを送信するか否かを判定する（ステップＳ１５３）。特定の子機にアプリケーションデータをユニキャストで送信するか、全ての子機にアプリケーションデータをブロードキャストするかは、アプリケーションによって指定される。このとき、アプリケーションは、データを送信する特定の子機のＩＰアドレスを指定する。
【０１９４】
特定の子機へデータを送信すると判定した場合（ステップＳ１５３：ＹＥＳ）、親機は、記憶領域１０８に記憶したノード情報（ＡＲＰテーブル）を参照する（ステップＳ１５４）。そして、親機は、アプリケーションから指定されたＩＰアドレスに対応するＭＡＣアドレスを指定したデータフレームを生成して、ステップＳ１５２で暗号化したデータを特定の子機にユニキャストで送信する（ステップＳ１５５）。
【０１９５】
一方、ステップＳ１５３でＮＯと判定した場合、親機は、ステップＳ１５２で暗号化したデータをブロードキャストで送信する（ステップＳ１５６）。具体的には、親機は、ディスティネーションアドレスにブロードキャストアドレスを指定したデータフレームを生成して、ステップＳ１５２で暗号化したデータをブロードキャストで送信する。
【０１９６】
ステップＳ１５５の処理を実行した場合、ステップＳ１５６の処理を実行した場合、又は、ステップＳ１５１でＮＯと判定した場合、親機は、子機からアプリケーションデータを受信したか否かを判定する（ステップＳ１５７）。アプリケーションデータを受信した場合（ステップＳ１５７：ＹＥＳ）、親機は、受信したデータを記憶領域１０７に記憶したアプリ鍵を用いて復号化する（ステップＳ１５８）。
【０１９７】
ステップＳ１５８の処理を実行した場合、又は、ステップＳ１５７でＮＯと判定した場合、親機は、ある子機から別の子機宛てのデータフレームを受信したか否かを判定する（ステップＳ１５９）。ある子機から別の子機宛てのデータフレームを受信した場合（ステップＳ１５９：ＹＥＳ）、親機は、受信したフレームを、ディスティネーションアドレスで指定された子機に転送する（ステップＳ１６０）。
【０１９８】
次に、子機の動作について図２０〜図２３を参照して説明する。
【０１９９】
（子機に記憶されるデータ）
まず、図１９を参照して、子機において記憶されるデータについて説明する。図１９は、子機において記憶されるデータの一例を示す図である。
【０２００】
図１９に示されるように、子機には、記憶領域２０１〜２１１が設けられる。具体的には、記憶領域２０１〜２０５には、親機から受信したアクションフレームに含まれるアプリＩＤ、シーンＩＤ、セッションＩＤ、カウンタ、アプリ鍵生成用乱数がそれぞれ記憶される。また、記憶領域２０６および記憶領域２０７には、フレーム暗号鍵およびアプリ鍵がそれぞれ記憶される。
【０２０１】
また、記憶領域２０８には、親機から受信したアクションフレームに含まれるノード情報（ＡＲＰテーブル）が記憶される。ノード情報（ＡＲＰテーブル）には、親機のＩＰアドレスおよびＭＡＣアドレスを対応付けしたデータと、通信アプリケーションに参加している子機のＩＰアドレスおよびＭＡＣアドレスを対応付けしたデータとが含まれる。
【０２０２】
また、記憶領域２０９には、親機から受信した切断要求が記憶される。例えば、上記ステップＳ１３９において親機が子機１に対して切断要求を送信した場合、子機１はこの切断要求を記憶領域２０９に記憶する。記憶領域２０９には、切断要求を送信した親機の情報（例えばＭＡＣアドレス、ＩＰアドレス等）も記憶される。
【０２０３】
また、記憶領域２１０には、自機の入力部１３に対して行われた入力に応じた操作データが記憶される。また、記憶領域２１１には、他の装置（親機および他の子機）の入力部１３に対して行われた入力に応じた操作データが記憶される。
【０２０４】
図１９に示される各種データは、子機の記憶装置（情報処理部１１内のＤＲＡＭ、記憶部１２、無線通信部１５内のメモリの何れか）に記憶され、子機の情報処理部１１から読み取り可能である。
【０２０５】
（子機処理）
図２０は、情報処理装置１０ｂが子機として動作しているときの子機処理の詳細を示すフローチャートである。
【０２０６】
図２０に示されるように、情報処理装置１０ｂ（子機）は、自機の周辺に存在する親機からのアクションフレームを受信したか否かを判定する（ステップＳ２００）。ここでは、子機は、まだ親機に接続していないため、自機の周辺に存在する全ての親機からのアクションフレームを受信する。
【０２０７】
アクションフレームを受信した場合（ステップＳ２００：ＹＥＳ）、子機は、アクションフレームに含まれるアプリＩＤ、シーンＩＤ、セッションＩＤ，カウンタを、それぞれ記憶領域２０１〜２０４に記憶するとともに、復号化処理を行う（ステップＳ２０１）。ここでは、子機は、受信したアクションフレームに含まれるセッションＩＤと装置共通鍵とに基づいて、親機と同じフレーム暗号鍵を生成して記憶領域２０６に記憶し、当該フレーム暗号鍵を用いてアクションフレームの暗号化部分を復号化する。復号化処理の詳細については後述する。なお、子機は、複数の親機からアクションフレームを受信した場合、親機毎に、アプリＩＤ、シーンＩＤ、セッションＩＤ，カウンタ、フレーム暗号鍵を記憶領域に記憶して、復号化処理を行う。
【０２０８】
ステップＳ２０１に続いて、子機は、アクションフレームを送信した親機のネットワーク（通信アプリケーション）に参加可能か否かを判定する（ステップＳ２０２）。具体的には、子機は、受信したアクションフレームにおける「受け入れポリシー」と、自機の記憶領域２０９に記憶した「切断要求」とに基づいて、アクションフレームを送信した親機のネットワークに参加可能か否かを判定する。また、子機は、アクションフレームにおける「セッションＩＤ」にも基づいて、参加可能か否かを判定する。なお、子機は、アクションフレームにおける「ゲームＩＤ」や「シーンＩＤ」にも基づいて、参加可能か否かを判定してもよい。
【０２０９】
例えば、受信したアクションフレームにおける受け入れポリシーが「許可」を示す値である場合、子機は、記憶領域２０９に記憶した切断要求を参照することなく、参加可能と判定する。また、受信したアクションフレームにおける受け入れポリシーが「拒否」を示す値である場合、子機は、記憶領域２０９に記憶した切断要求を参照することなく、参加不可能と判定する。
【０２１０】
また、例えば、受信したアクションフレームにおける受け入れポリシーが「ホワイトリスト」を示す値である場合、子機は、アクションフレームを送信した親機が、過去に自機と接続していた親機であるか否かを判定する。例えば、子機は、親機と接続した場合、その接続に関する情報（親機のＩＰアドレス、ＭＡＣアドレス、セッションＩＤ等）を記憶しており、当該親機との接続が切断された場合でも、当該情報を所定期間、保持する。子機は、当該保持している情報に基づいて、アクションフレームを送信した親機が、過去に自機と接続していた親機か否かを判定する。アクションフレームを送信した親機が過去に自機と接続していた親機である場合には、子機は、再接続可能（参加可能）であると判断する。アクションフレームを送信した親機が過去に自機と接続していた親機でない場合には、子機は、参加不可能と判定する。
【０２１１】
また、例えば、受信したアクションフレームにおける受け入れポリシーが「ブラックリスト」を示す値である場合、子機は、記憶領域２０９に記憶した切断要求を参照して、アクションフレームを送信した親機のネットワークに参加可能か否かを判定する。具体的には、記憶領域２０９に記憶した切断要求が第１切断要求である場合において、アクションフレームを送信した親機が当該第１切断要求を送信した親機と一致する場合、子機は、以前に当該親機から意図的に切断されたもの判断し、参加不可能と判定する。
【０２１２】
アクションフレームを送信した親機のネットワークに参加可能と判定した場合（ステップＳ２０２：ＹＥＳ）、子機は、アクションフレームを送信した親機を接続先候補として表示する（ステップＳ２０３）。例えば、子機は、親機のＩＰアドレス、ＭＡＣアドレス、ユーザ名、親機が実行する通信アプリケーション名、シーン名、参加中の他の子機の情報等を表示部１４に表示する。また、子機は、複数の親機からアクションフレームを受信し、ステップＳ２０２でＹＥＳと判定した場合、複数の親機を接続先候補として表示する。子機のユーザは、表示された接続先候補の一覧から何れかの親機を選択する。なお、アクションフレームを送信した親機が過去に自機と接続していた親機である場合には、子機は、当該親機に再接続するか否かをユーザに選択させる画面を表示してもよい。また、この場合、子機は、ユーザに再接続を選択させる画面を表示することなく、ステップＳ２０５の処理を実行して自動的に参加要求を送信してもよい。
【０２１３】
続いて、子機は、ステップＳ２０３で表示した接続先候補のリストから何れかの親機が選択されたか否かを判定する（ステップＳ２０４）。親機が選択されなかったと判定した場合（ステップＳ２０４：ＮＯ）、子機は、再びステップＳ２００の処理を実行する。
【０２１４】
親機が選択されたと判定した場合（ステップＳ２０４：ＹＥＳ）、子機は、選択された親機に対して参加要求を送信する（ステップＳ２０５）。続いて、子機は、参加要求を送信した親機からのアクションフレームを受信する（ステップＳ２０６）。子機は、アクションフレームを受信すると、記憶領域２０６に記憶されたフレーム暗号鍵と、アクションフレームに含まれるカウンタとを用いてアクションフレームの暗号化部分を復号化する。
【０２１５】
そして、子機は、受信したアクションフレームに含まれるノード情報から、自機のＭＡＣアドレスに対応するＩＰアドレスを抽出し、自機にそのＩＰアドレスを設定する（ステップＳ２０７）。次に、子機は、受信したアクションフレームに含まれるノード情報（ＡＲＰテーブル）を記憶領域２０８に格納する。
【０２１６】
上記ステップＳ２００〜ステップＳ２０８の処理が行われることにより、子機は、親機のネットワークに参加して通信アプリケーションを実行可能になる。ステップＳ２０９〜ステップＳ２１２の処理は、子機が親機に接続した後の処理であり、子機はステップＳ２０９〜ステップＳ２１２の処理を所定の時間間隔で繰り返し実行する。
【０２１７】
具体的には、子機は、ステップＳ２０８の処理の後、アクションフレーム受信処理を行う（ステップＳ２０９）。ここでは、子機は、接続中の親機から所定の時間間隔で送信されるアクションフレームを受信する。ステップＳ２０９のアクションフレーム受信処理の詳細については後述する。
【０２１８】
続いて、子機は、アプリデータ通信処理（子機）を行う（ステップＳ２１０）。アプリデータ通信処理（子機）は、親機と子機との間で通信アプリケーションが実行されている間にアプリケーションデータを送受信するための処理である。ステップＳ２１０のアプリデータ通信処理（子機）の詳細については後述する。
【０２１９】
ステップＳ２１０に続いて、子機は、アプリケーション処理を実行する（ステップＳ２１１）。ここでは、図１５のステップＳ１１７と同様に、子機は、ステップＳ２１０で受信したアプリケーションデータに基づいてアプリケーション処理を実行する。例えば、子機は、他の装置の入力部１３において行われた入力に応じた操作データをステップＳ２１０で受信し、当該受信した操作データを記憶領域２１１に記憶している。子機は、記憶領域２１１に記憶された他の装置の操作データに基づいて、アプリケーション処理を実行する。また、子機は、自機の入力部１３において行われた入力に応じた操作データを記憶領域２１０に記憶しており、当該操作データに基づいてアプリケーション処理を実行する。また、子機は、アプリケーション処理の結果に応じた画像を表示部１４に表示させる。
【０２２０】
ステップＳ２１１の処理を実行した場合、子機は、親機から切断要求を受信したか否かを判定する（ステップＳ２１２）。親機から切断要求を受信した場合（ステップＳ２１２：ＹＥＳ）、子機は、切断要求を記憶領域２０９に記憶して図２０に示す処理を終了する。一方、親機から切断要求を受信しなかった場合（ステップＳ２１２：ＮＯ）、子機は、再びステップＳ２０９の処理を実行する。
【０２２１】
なお、親機から通信アプリケーションを終了する旨の通知が行われた場合や子機のユーザによって通信アプリケーションからの離脱が指示された場合には、子機は、図２０に示す処理を終了する。また、子機は、親機との通信が所定期間行われなかった場合は、図２０に示す処理を終了する。
【０２２２】
（復号化処理）
次に、図２０のステップＳ２０１の復号化処理の詳細について説明する。図２１は、図２０のステップＳ２０１の復号化処理の詳細を示すフローチャートである。
【０２２３】
図２１に示されるように、子機は、今回受信したアクションフレームのカウンタが前回受信したアクションフレームのカウンタと同じか否かを判定する（ステップＳ２２０）。なお、子機は、最初にステップＳ２２０の処理を実行するときは、常にステップＳ２２０においてＮＯと判定する。今回のカウンタが前回と同じであると判定した場合（ステップＳ２２０：ＹＥＳ）、子機は、図２１の処理を終了する。
【０２２４】
今回のカウンタが前回と異なると判定した場合（ステップＳ２２０：ＮＯ）、子機は、受信したアクションフレームに含まれるセッションＩＤに基づいて、変換値を生成する（ステップＳ２２１）。具体的には、子機は、アクションフレームに含まれるアプリＩＤ、シーンＩＤおよびセッションＩＤを、所定の関数で変換することにより変換値を生成する。
【０２２５】
次に、子機は、ステップＳ２２１で生成した変換値を、装置共通鍵を用いて暗号化することにより、フレーム暗号鍵を生成する（ステップＳ２２２）。子機は、生成したフレーム暗号鍵を記憶領域２０６に記憶する。ここで生成されるフレーム暗号鍵は、親機において生成されるフレーム暗号鍵と同じである。
【０２２６】
ステップＳ２２２に続いて、子機は、ステップＳ２２２で生成したフレーム暗号鍵と、アクションフレームに含まれるカウンタとを用いて、受信したアクションフレームの暗号化部分を復号化する（ステップＳ２２３）。続いて、親機は、「ダイジェスト」の値を一定値と仮定する（ステップＳ２２４）。
【０２２７】
次に、子機は、復号化された後の図１１に示すフレーム本体のメッセージダイジェストを計算する（ステップＳ２２５）。具体的には、子機は、所定のハッシュ関数を用いてフレーム本体のハッシュ値を算出することにより、ダイジェストを算出する。
【０２２８】
そして、子機は、ステップＳ２２５で計算したダイジェストと、受信したアクションフレームに含まれるダイジェストとが一致していることを確認する（ステップＳ２２６）。なお、この２つのダイジェストの値が一致していない場合は、データが改竄された可能性があるため、子機は、受信したアクションフレームを破棄する。
【０２２９】
（アクションフレーム受信処理）
次に、図２０のステップＳ２０９のアクションフレーム受信処理の詳細について説明する。図２２は、図２０のステップＳ２０９のアクションフレーム受信処理の詳細を示すフローチャートである。
【０２３０】
図２２に示されるように、子機は、接続中の親機からアクションフレームを受信したか否かを判定する（ステップＳ２３０）。なお、子機は、接続中でない親機からアクションフレームを受信した場合には、当該アクションフレームを破棄する。
【０２３１】
接続中の親機からアクションフレームを受信した場合（ステップＳ２３０：ＹＥＳ）、子機は、当該アクションフレームの復号化処理を行う（ステップＳ２３１）。この処理は、図２１で示した復号化処理と同じ処理である。
【０２３２】
続いて、子機は、記憶領域２０８に記憶したノード情報とアクションフレームに含まれるノード情報とを比較することにより、ノード情報が更新されたか否かを判定する（ステップＳ２３２）。ノード情報が更新されたと判定した場合（ステップＳ２３２：ＹＥＳ）、子機は、受信したアクションフレームに含まれるノード情報を記憶領域２０８に記憶することにより、ノード情報（ＡＲＰテーブル）を更新する（ステップＳ２３３）。
【０２３３】
ステップＳ２３３の処理を実行した場合、又は、ステップＳ２３２でＮＯと判定した場合、子機は、アプリ鍵を生成済みか否かを判定する（ステップＳ２３４）。アプリ鍵を生成済みと判定した場合（ステップＳ２３４：ＹＥＳ）、子機は、図２２に示す処理を終了する。
【０２３４】
アプリ鍵を生成済みでないと判定した場合（ステップＳ２３４：ＮＯ）、子機は、受信したアクションフレームに含まれるアプリ鍵生成用乱数と、アプリケーションプログラム内のパスフレーズとを用いて、アプリ鍵を生成する（ステップＳ２３５）。ここで生成されるアプリ鍵は、上記ステップＳ１１３で親機において生成されるアプリ鍵と同じである。子機は、生成したアプリ鍵を記憶領域２０７に記憶する。子機は、以上で図２２の処理を終了する。
【０２３５】
（アプリデータ通信処理（子機））
次に、子機において行われるアプリデータ通信処理の詳細について説明する。図２３は、図２０のステップＳ２１０のアプリデータ通信処理（子機）の詳細を示すフローチャートである。
【０２３６】
図２３に示されるように、子機は、自機から他の装置（他の子機または親機）に対して送信すべきアプリケーションデータがあるか否かを判定する（ステップＳ２４０）。例えば、子機において実行中のアプリケーションからアプリケーションデータ（例えば、操作データ）の送信要求があった場合、子機は、送信すべきアプリケーションデータがあると判定する。
【０２３７】
送信すべきアプリケーションデータがあると判定した場合（ステップＳ２４０：ＹＥＳ）、子機は、アプリケーションから渡されたアプリケーションデータを、記憶領域２０７に記憶したアプリ鍵で暗号化する（ステップＳ２４１）。上述のように、アプリ鍵は、上記ステップＳ２３５においてアプリ鍵生成用乱数に基づいて生成されて、記憶領域２０７に記憶されている。
【０２３８】
ステップＳ２４１に続いて、子機は、特定の装置（他の子機または親機）へデータを送信するか否かを判定する（ステップＳ２４２）。特定の装置にアプリケーションデータをユニキャストで送信するか、全ての装置にアプリケーションデータをブロードキャストするかは、アプリケーションによって指定される。このとき、アプリケーションはデータを送信する特定の装置のＩＰアドレスを指定する。
【０２３９】
特定の装置へデータを送信すると判定した場合（ステップＳ２４２：ＹＥＳ）、子機は、記憶領域２０８に記憶したノード情報（ＡＲＰテーブル）を参照する（ステップＳ２４３）。そして、子機は、アプリケーションから指定されたＩＰアドレスに対応するＭＡＣアドレスを指定して、ステップＳ２４１で暗号化したデータを特定の装置に送信する（ステップＳ２４４）。具体的には、子機は、ディスティネーションアドレスとして特定の装置のＭＡＣアドレスを指定し、レシーバとして親機のＭＡＣアドレスを指定して、データフレームを送信する。
【０２４０】
一方、ステップＳ２４２でＮＯと判定した場合、子機は、ステップＳ２４１で暗号化したデータをブロードキャストで送信する（ステップＳ２４５）。具体的には、子機は、ディスティネーションアドレスとしてブロードキャストアドレスを指定して、データフレームを送信する。
【０２４１】
ステップＳ２４４の処理を実行した場合、ステップＳ２４５の処理を実行した場合、又は、ステップＳ２４０でＮＯと判定した場合、子機は、他の装置からアプリケーションデータを受信したか否かを判定する（ステップＳ２４６）。アプリケーションデータを受信した場合（ステップＳ２４６：ＹＥＳ）、子機は、受信したデータを記憶領域２０７に記憶したアプリ鍵を用いて復号化する（ステップＳ２４７）。そして、子機は、復号化して得られたアプリケーションデータを記憶装置に記憶する。子機は、以上で図２３に示す処理を終了する。
【０２４２】
以上のように、本実施形態では、複数の情報処理装置（例えば１０ａ〜１０ｃ）のうちの１の情報処理装置（１０ａ）が親機となり、他の情報処理装置（１０ｂ、１０ｃ）が子機となり、複数の情報処理装置の間で通信アプリケーションが実行される。
【０２４３】
なお、上記フローチャートの処理は単なる例示であり、例えば各ステップの順番を入れ替えたり、他のステップが加えられたり、上記ステップの一部が省略されたりしてもよい。
【０２４４】
親機は、子機に対してＩＰアドレスを割り当てるとともに（ステップＳ１３４）、ノード情報（ＡＲＰテーブル）を子機に送信する（ステップＳ１３５、ステップＳ１３０）。ノード情報（ＡＲＰテーブル）は、ネットワークに接続している全ての装置のそれぞれについて、ＩＰアドレスとＭＡＣアドレスとを対応付けしている。
【０２４５】
例えば、親機、子機１および子機２がネットワークに接続している場合、親機のＩＰアドレスと親機のＭＡＣアドレスとを対応付けし、子機１のＩＰアドレスと子機１のＭＡＣアドレスとを対応付けし、子機２のＩＰアドレスと子機２のＭＡＣアドレスとを対応付けしたＡＲＰテーブル（管理テーブル）が、親機から子機１および子機２に送信される（ステップＳ２３３）。子機は、ある装置にデータを送信する際、親機から受信したＡＲＰテーブルを参照して（ステップＳ２４３）、当該ある装置のＭＡＣアドレスを特定し、データを送信する（ステップＳ２４４）。
【０２４６】
これにより、子機は、他の子機にデータを送信する際に、ＩＰアドレス（論理アドレス。ソフトウェアアドレスとも言う）に対応するＭＡＣアドレス（物理アドレス。ハードウェアアドレスとも言う）を周辺に問い合わせることなく、他の子機にデータを送信することができる。このため、子機は、余計なフレームを空間に送信しなくても指定された装置にフレームを送信することができ、電波の輻輳を防止することができる。また、データを送信する際の遅延を防止することができる。
【０２４７】
また、本実施形態では、親機は子機から参加要求を受信すると、子機のＩＰアドレスを生成して、子機に対して、当該子機のＭＡＣアドレスとＩＰアドレスとを対応付けしたＡＲＰテーブルを送信する。子機は、親機からのＡＲＰテーブルから、自機のＭＡＣアドレスに対応するＩＰアドレスを、自機のＩＰアドレスを設定する。親機は、ＩＰアドレスの重複がないことを確認するためのフレームを送信することなく子機のＩＰアドレスを生成し、子機は、ＩＰアドレスの重複がないことを確認するためのフレームを送信することなく自機のＩＰアドレスを設定する。このため、複数の装置間ですぐにネットワークが構成され、複数の装置間ですぐに通信アプリケーションを開始することができる。
【０２４８】
本実施形態では、子機が親機に接続する際に、装置毎にＩＰアドレスとＭＡＣアドレスとを対応付けしたテーブルが親機から子機に送信される。このため、子機は、一度も通信を行っていない装置のＩＰアドレスとＭＡＣアドレスとを対応付けしたテーブルを保持することができる。例えば、親機と子機１とが接続されているときに、新たに子機２が親機に接続した場合、親機から所定の時間間隔で送信されるアクションフレームを受信することにより、子機１と子機２とは一度も通信を行っていないにもかかわらず、子機１は子機２のＩＰアドレスおよびＭＡＣアドレスを保持し、子機２は子機１のＩＰアドレスおよびＭＡＣアドレスを保持することができる。また、このテーブルは、常にアクションフレームに含められて所定の時間間隔で送信される。したがって、ネットワークに接続している全ての装置（親機および子機）は、常に最新のテーブルを保持することができる。
【０２４９】
また、本実施形態では、親機が設定される際に、親機と子機との通信を行うための当該通信に固有のセッションＩＤ（識別情報）がランダムに生成され（ステップＳ１１２）、装置共通鍵とセッションＩＤとを用いて、フレーム暗号鍵が生成される（ステップＳ１２４）。フレーム暗号鍵は、親機と子機との通信に固有の識別情報を用いて生成されるため、親機と子機との通信毎に変化する。このため、フレーム暗号鍵が解読されることを防止することができる。また、仮にフレーム暗号鍵が解読された場合でも、あるタイミングで開始された親機と子機との通信が終了して、別のタイミングで親機と子機との通信が開始されるときには、別のフレーム暗号鍵が生成されるため、当該別のタイミングで開始された通信では安全にデータを送信することができる。
【０２５０】
また、装置共通鍵は、予め親機および子機に記憶された共通の鍵であり、親機および子機のハードウェアに書き込まれたセキュアな鍵である。このため、装置共通鍵は悪意ある者に読み取られ難く、安全に、フレーム暗号鍵を生成することができる。
【０２５１】
また、本実施形態では、親機から所定の時間間隔でブロードキャストされるアクションフレームの暗号化部分がフレーム共通鍵を用いて暗号化され、当該暗号化部分にはアプリケーションに共通のアプリ鍵を生成するためのアプリ鍵生成用乱数が含まれる。子機は、親機に接続していない状態でもアクションフレームを受信することができ、自機の周辺のどのような通信アプリケーションを実行する親機が存在するのかを知ることができる。一方、通信アプリケーションのためのアプリケーションデータはアプリ鍵によって暗号化されるため、子機は、親機に接続しておらずアプリ鍵を生成していない状態では、その親機が他の子機と実行しているアプリケーションの内容について知ることができない。このため、通信アプリケーションに参加していない子機が、通信アプリケーションを実行中の複数の装置に対して誤ったデータを送信することを防止することができる。
【０２５２】
また、アプリ鍵を生成するためのアプリ鍵生成用乱数は、フレーム暗号鍵によって暗号化されるため、装置共通鍵を有さない他の装置はアプリ鍵を解読することができない。したがって、複数の情報処理装置１０は、安全に通信アプリケーションを実行することができる。
【０２５３】
また、本実施形態では、アクションフレームに受け入れポリシーが含まれる。受け入れポリシーには、親機が常に子機の接続を許可することを示す「許可」と、親機が常に子機の接続を拒否することを示す「拒否」とがある。また、受け入れポリシーには、「許可」および「拒否」に加えて、親機が基本的には接続を拒否するものの条件付きで子機の接続を許可することを示す「ホワイトリスト」と、親機が基本的には接続を許可するものの条件付きで子機の接続を拒否することを示す「ブラックリスト」がある。受け入れポリシー「ホワイトリスト」は、一度接続された子機が通信状況の悪化等によって切断された場合に、親機が子機の再接続を許可することを示す。このような受け入れポリシーを含むアクションフレームを受信した子機は、親機に再接続を試みることができ、一度参加した通信アプリケーションに再度参加することができる。また、受け入れポリシー「ブラックリスト」は、一度接続された子機が親機によって意図的に拒絶されて切断された場合に、親機が子機の再接続を拒否することを示す。このような受け入れポリシーを含むアクションフレームを受信した子機は、親機への再接続を試みることがないため、無駄な通信を抑制することができる。
【０２５４】
本実施形態では、親機は、子機に対して切断理由毎に様々な切断要求を送信することができる。例えば、親機のユーザが意図的に子機を切断する場合には、その意図的な切断の理由を含む第１切断要求が、親機から子機に送信される。また、親機がスリープ状態に移行するなどの場合には、その切断理由を含む第２切断要求が、親機から子機に送信される。子機は、親機から受信した切断要求と、親機からのアクションフレームに含まれる受け入れポリシーとに基づいて、親機に対して参加要求を送信するか否かを判定することができる。子機が切断理由によって参加要求を送信するか否かを判断するため、切断理由によって子機を細かく制御することができ、無駄なフレームが送信されることを防止したり、親機側の処理負荷を低減したりすることができる。また、親機は、自機に記憶しているブラックリストやホワイトリスト自体を子機に送信しなくても、子機の動作を制御することができ、トラフィックが増大することを防止することができる。
【０２５５】
なお、本実施形態では、アクションフレームに上述したデータを含めて送信した。他の実施形態では、アクションフレームの代わりに、例えばビーコンに上記データを含めて送信してもよい。この場合、上記装置共通鍵とセッションＩＤとに基づいてフレーム暗号鍵が生成され、当該フレーム暗号鍵を用いて暗号化されたデータがビーコンによって送信される。また、アクションフレームとビーコンとを用いて、上記データが送信されてもよい。
【０２５６】
また、上記実施形態では、親機から送信される接続のためのアクションフレームが、所定の時間間隔でブロードキャストされ、子機が当該アクションフレームを受信したことに応じて、親機と子機が接続された。他の実施形態では、子機がプローブリクエストをブロードキャストし、親機がプローブリクエストを受信したことに応じて、親機と子機が接続されてもよい。
【０２５７】
また、上記実施形態では、装置に設定された可変のＩＰアドレスと装置に固有のＭＡＣアドレスとを対応付けしたＡＲＰテーブルが生成されて親機から子機に送信された。他の実施形態では、例えば、装置に設定された可変のユーザ名（ホスト名）とＭＡＣアドレスとを対応付けしたテーブルが生成されて、親機から子機に送信されてもよい。すなわち、装置に設定された可変の論理アドレスと、装置に固有の物理アドレスとを対応付けしたテーブルが生成されて親機から子機に送信されてもよい。この場合、各装置のアプリケーションは、装置に設定された論理アドレス（ユーザ名やホスト名、ＩＰアドレス等）を指定し、各装置の無線通信部１５は、テーブルを参照して、アプリケーションから指定された論理アドレスに対応する物理アドレスを取得し、当該物理アドレスを指定してデータを送信する。
【０２５８】
また、上記実施形態では、通信アプリケーションとして、ゲームアプリケーションが行われる例について説明したが、通信アプリケーションとしてはゲームアプリケーションに限られず、任意のアプリケーションが複数の装置間で実行されてもよい。
【０２５９】
以上、本発明について説明したが、上記説明は本発明の例示に過ぎず、種々の改良や変形が加えられてもよい。
【符号の説明】
【０２６０】
１    無線通信システム
１０  情報処理装置
１１  情報処理部
１２  記憶部
１３  入力部
１４  表示部
１５  無線通信部
１６  鍵格納部
【図１】
2018148302.tif 000003
【図２】
2018148302.tif 000004
【図３】
2018148302.tif 000005
【図４】
2018148302.tif 000006
【図５】
2018148302.tif 000007
【図６】
2018148302.tif 000008
【図７】
2018148302.tif 000009
【図８】
2018148302.tif 000010
【図９】
2018148302.tif 000011
【図１０】
2018148302.tif 000012
【図１１】
2018148302.tif 000013
【図１２Ａ】
2018148302.tif 000014
【図１２Ｂ】
2018148302.tif 000015
【図１３】
2018148302.tif 000016
【図１４】
2018148302.tif 000017
【図１５】
2018148302.tif 000018
【図１６】
2018148302.tif 000019
【図１７】
2018148302.tif 000020
【図１８】
2018148302.tif 000021
【図１９】
2018148302.tif 000022
【図２０】
2018148302.tif 000023
【図２１】
2018148302.tif 000024
【図２２】
2018148302.tif 000025
【図２３】
2018148302.tif 000026