以下、添付の図面を参照して実施形態を詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
図1に、本実施形態に係る通信装置101が参加する通信システムのネットワーク構成を示す。通信システムは、通信装置101、102、103およびこれらの通信装置が参加する無線LANネットワーク104(以下、ネットワーク104)を含んで構成される。通信装置101、102、103はIEEE802.11シリーズ規格に準拠したインフラストラクチャネットワークであるネットワーク104上で無線通信を行う。なお、IEEEとは、Institute of Electrical and Electronics Engineersの略である。
ネットワーク104は、通信装置101がアクセスポイント(AP)として形成する、時刻同期を実行するためのネットワークである。通信装置102、103はステーション(STA)としてネットワーク104に参加する。通信装置101はネットワーク104に参加する通信装置102、103と時刻同期を行う。また、通信装置101は自装置の時刻情報を基準として時刻同期を行うマスタ端末として動作し、通信装置102、103は通信装置101の時刻情報に同期するスレーブ端末として動作する。なお、通信装置101は、ネットワーク104以外にも、時刻同期とは異なる目的のネットワークを構築することができる。例えば、各通信装置がカメラであった場合、通信装置101はネットワーク104とは別に、各通信装置において自動でシャッターが切られるタイミングを共有する連動撮影の実行を目的としたネットワークを構築できる。
通信装置101、102、103の具体的な例としては、カメラ、タブレット、スマートフォン、PC、携帯電話、ビデオカメラなどが挙げられるが、これらに限定されない。通信装置101、102、103は、時刻同期を実行できる通信装置であればよい。また、図1の通信システムは3台の通信装置を含んで構成される通信システムであるが、2台または4台以上を含んで構成される通信システムであってもよい。
本実施形態において、図1の各装置はIEEE802.11シリーズ規格に準拠した無線通信を行うが、これに加えて、Bluetooth(登録商標)、NFC、UWB、ZigBee、MBOAなどの他の無線通信方式に準拠した無線通信も利用してよい。なお、UWBはUltra Wide Bandの略であり、MBOAはMulti Band OFDM Allianceの略である。なお、OFDMはOrthogonal Frequency Division Multiplexingの略である。また、NFCはNear Field Communicationの略である。UWBには、ワイヤレスUSB、ワイヤレス1394、WiNETなどが含まれる。
図2は、通信装置101のハードウェア構成を示す図である。
通信装置101は、記憶部203、制御部202、機能部209、入力部208、出力部205、無線通信部204、アンテナ207、およびタイマ210を備える。
記憶部203はROMやRAM等の1以上のメモリにより構成され、後述する各種動作を行うためのコンピュータプログラムや、無線通信のための通信パラメータ等の各種情報を記憶する。ROMはRead Only Memoryの、RAMはRandom Access Memoryの夫々略である。なお、記憶部203として、ROM、RAM等のメモリの他に、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD-ROM、CD-R、磁気テープ、不揮発性のメモリカード、DVDなどの記憶媒体を用いてもよい。また、記憶部203が複数のメモリ等を備えていてもよい。
制御部202はCPUやMPU等の1以上のプロセッサにより構成され、記憶部203に記憶されたコンピュータプログラムを実行することにより通信装置101全体を制御する。CPUはCentral Processing Unitの、MPUはMicro Processing Unitの略であり、コンピュータとして機能する。なお、制御部202は、記憶部203に記憶されたコンピュータプログラムとOS(Operating System)との協働により通信装置101全体を制御するようにしてもよい。また、制御部202がマルチコア等の複数のプロセッサを備え、複数のプロセッサにより通信装置101全体を制御するようにしてもよい。
また、制御部202が記憶部203に記憶されたコンピュータプログラムを実行することで、通信装置101はマスタ端末としての時刻同期機能を実現する。マスタ端末としての時刻同期機能とは、自装置の時刻情報を基準としてスレーブ端末である他の通信装置との時刻同期を実行する機能である。
また、制御部202は、機能部209を制御して、撮像やコンテンツの閲覧などの所定の処理を実行する。機能部209は、通信装置101が所定の処理を実行するためのハードウェアである。例えば、通信装置101がカメラである場合、機能部209は撮像部であり、撮像処理を行う。
入力部208は、ユーザからの各種操作の受付を行う。出力部205は、モニタ画面やスピーカーなどを介してユーザに対して各種出力を行う。ここで、出力部205による出力とは、画面上への表示や、スピーカーによる音声出力、振動出力などであってもよい。なお、出力部205が出力するモニタ画面は、通信装置101が備えるモニタ画面である。あるいは、通信装置101と接続された他の装置が有するモニタ画面であってもよい。なお、タッチパネルのように入力部208と出力部205の両方を1つのモジュールで実現するようにしてもよい。入力部208、出力部205は、夫々通信装置101とは別体であってもよい。また、出力部205は、画面上への表示や、スピーカーによる音声出力、振動出力などを行うことで、ユーザに対して通知を行う通知部としての機能を実現する。また、入力部208と、出力部205は、夫々通信装置101と一体であってもよいし、別体であってもよい。通信装置101は入力部208として、例えば通信装置101と一体のハードキーやタッチスクリーンなどを有していてもよいし、通信装置101と別体のリモコンなどを有していてもよい。また、通信装置101は出力部205として、例えば通信装置101と一体のモニタ画面や光源などを有していてもよいし、通信装置101と別体のディスプレイやスピーカーを有していてもよい。
無線通信部204は、IEEE802.11シリーズに準拠した無線通信の制御を行う。また、無線通信部204はアンテナ207を制御して、無線通信のための無線信号の送受信を行う。なお、通信装置101は、IEEE802.11シリーズに準拠した無線通信に加えて、あるいは代えて、NFCによる無線通信や、Bluetoothによる無線通信を行ってもよい。また、通信装置101が複数の無線通信規格に準拠した無線通信を実行できる場合、夫々の無線通信に対応した無線通信部204とアンテナ207を個別に有する構成であってもよい。
タイマ210は、各種制御に用いる時間や、内蔵されている時計の時間を計測する計時部である。タイマ210は制御部202によって管理され、計測した時間は記憶部203に保持される。また、タイマ210によって計時される時刻は制御部202によって適宜修正が可能である。
通信装置102、103は通信装置101と同様のハードウェア構成を有するが、通信装置102、103の制御部202は、記憶部203に記憶されたコンピュータプログラムを実行することで、スレーブ端末としての時刻同期機能を実現する。スレーブ端末としての時刻同期機能とは、マスタ端末(通信装置101)の時刻情報を基準として時刻同期を行う機能である。
図3は、通信装置101の機能構成を示す図である。なお、通信装置102、103の機能構成は、通信装置101と同様である。
通信パラメータ制御部302は、通信装置間で通信パラメータを共有するための通信パラメータ共有処理を実行する。通信パラメータの提供端末(通信装置101)が受信端末(通信装置102、103)に、ネットワーク104へ無線接続するための通信パラメータを提供する。本実施形態において、各通信装置は、Wi-Fi DPP(Device Provisioning Protocol)規格に準拠した方法で通信パラメータ共有処理を実行する。なお、通信パラメータ共有処理の詳細は後述の図6で説明する。
なお、通信パラメータには、Wi-Fi DPP規格に規定されるコネクタが含まれる。また、コネクタに加えて、あるいは代えて、ネットワーク識別子としてのSSID、暗号方式、暗号鍵、認証方式、認証鍵、MACアドレス、PSK(Pre-Shared Key)、パスフレーズ等の情報も通信パラメータとして含めることができる。なお、SSIDとはService Set Identifierの、MACとはMedia Access Controlの夫々略である。また、これらに加えて、あるいは代えて、提供端末は、ネットワーク層での通信を行うためのIPアドレスや、ネットワーク層より上位の通信層におけるサービスの利用に必要な情報や、ネットワークの利用用途等も通信パラメータとして含めてもよい。なお、IPとはInternet Protocolの略である。
なお、本実施形態において、各通信装置はWi-Fi DPP規格に準拠した通信パラメータ共有処理を実行するとしたが、これに限らず、WPS規格やWi-Fi Direct規格などに準拠した通信パラメータ共有処理を実行してもよい。なお、WPS規格とはWi-Fi Protected Setup規格の略である。
また、本実施形態において、各通信装置は通信パラメータ共有処理によって、ネットワーク104の通信パラメータを共有するとしたが、これに限らず、例えば撮像データの送受信など時刻同期以外を目的とするネットワークの通信パラメータを共有してもよい。なお、これらのネットワークのパラメータは、一回の通信パラメータ共有処理によって共有されてもよいし、夫々のネットワークについて別々の通信パラメータ共有処理を必要としてもよい。
パケット受信部303、パケット送信部304は、データリンク層だけではなく、ネットワーク層やトランスポート層、アプリケーション層といった上位の通信層の通信プロトコルを含むあらゆるパケットの送受信を制御する。本実施形態においてアプリケーション層とはOSI(Open Systems Interconnection)参照モデル(7階層)における第5層以上の上位層を指す。また、トランスポート層とは、OSI参照モデルにおける第4層を、ネットワーク層とはOSI参照モデルにおける第3層を指す。データリンク層とは、OSI参照モデルにおける第2層を指す。
また、パケット受信部303、パケット送信部304は、無線通信を行う相手装置との間で、IEEE802.11シリーズ規格に準拠したパケットの送信および受信を行うために、無線通信部204を制御する。なお、NFCやBluetoothなど、他の無線通信規格に準拠した無線通信も可能な通信装置の場合、それらの通信規格に準拠したパケットの送信および受信を行うために無線通信部204を制御してもよい。あるいは、通信規格ごとに異なる無線通信部やパケット受信部、パケット送信部を有していてもよい。
データ記憶部305は、記憶部203への、ソフトウェアや通信パラメータ、認証情報などの書き込みおよび読み出しの制御を行う。
サービス制御部306は、アプリケーション層におけるサービスを制御する制御部である。例えばサービス制御部306は、無線通信部204による無線通信を介して、他の通信装置に自装置が保持している撮像データの送信などを実行する。
ステーション機能制御部307は、IEEE802.11シリーズ規格に準拠したインフラストラクチャモードにおけるステーション(STA)として動作するSTA機能を提供する。STAとして動作する通信装置は、インフラストラクチャモードにおいてアクセスポイント(AP)として動作する通信装置が構築したネットワークに参加し、他の通信装置と無線通信を行う。STA機能制御部307は、APが構築したネットワークにSTAとして参加する際に、STAとしての認証処理や暗号処理等を実施する。
アクセスポイント機能制御部308は、IEEE802.11シリーズ規格に準拠したインフラストラクチャモードにおけるアクセスポイント(AP)として動作するAP機能を提供する。APとして動作する通信装置は、ネットワークを構築し、自装置が構築したネットワークに参加した他の通信装置と無線通信を行う。また、AP機能制御部308は、自装置が構築したネットワークに他の通信装置がSTAとして参加する際に、APとしての認証処理や暗号処理を実施し、更にネットワークに参加しているSTAの管理等を実施する。なお、AP機能制御部308は自装置が構築したネットワークに参加するSTAの台数をカウントする機能を有する。
なお、本実施形態において、通信装置101は時刻同期に用いるネットワーク104を構築するが、これに限らず、ネットワーク104とは別に、撮像データの送受信など他の目的に用いるためのネットワークを構築してもよい。
本実施形態において、通信装置101、102、103は、夫々STA機能制御部307とAP機能制御部308との両方を有しているが、これに限らず、何れか一方のみを有していてもよい。具体的には、ネットワーク104を構築する通信装置101はAP機能制御部308のみを有していてもよいし、ネットワーク104に参加する通信装置102、103はSTA機能制御部307のみ有していてもよい。
同期処理部309は、ネットワーク104を介して、マスタ端末とスレーブ端末との間の時刻同期処理を行う。なお、本実施形態において、時刻同期処理では、マスタ端末の時刻情報を基準として、スレーブ端末がマスタ端末の時刻に合わせるものとする。時刻同期処理に詳細については、図7、図8、および図9で説明する。
本実施形態において、各通信装置は通信装置101をマスタ端末、通信装置102、103をスレーブ端末として時刻同期処理を行う。そのため、通信装置101の同期処理部309は、マスタ端末としての時刻同期処理のみを実行できる処理部であってもよい。また、通信装置102、103の同期処理部309は、スレーブ端末としての時刻同期処理のみを実行できる処理部であってもよい。
図4は、本実施形態における通信装置101が時刻同期処理を行う際に、記憶部203に記憶されたコンピュータプログラムを制御部202が実行することで実現される処理の一例を示すフローチャートである。
本フローチャートは通信装置101がユーザからマスタ端末としての時刻同期処理を開始するように指示を受けたことで開始される。具体的には出力部205であるタッチパネルに表示されたソフトキーをユーザが押下したことに応じて開始される。あるいは、通信装置101に備えられたハードキーが押下されたことに応じて開始されてもよい。なお、通信装置101は所定のタイミングが到来する毎に時刻同期処理を実行する通信装置であってもよく、この場合通信装置101は所定のタイミングが到来したことで本フローチャートの処理を開始してもよい。
マスタ端末としての時刻同期処理の開始を指示された通信装置101は、インフラストラクチャモードとしてのAP機能を実行する(ステップS401)。具体的には、通信装置101はネットワーク104を構築する。通信装置101は、後述する処理によりネットワーク104に参加した通信装置102、103と時刻同期処理を行う。なお、通信装置101はネットワーク104を構築する際に、ネットワーク104に参加するための通信パラメータを用意する。
通信装置101は、AP機能を起動した後、スレーブ端末との無線接続処理を行う(ステップS402)。通信装置101は、本ステップの処理を行うことで、通信装置102および通信装置103と時刻同期用のネットワーク104を確立する。通信装置101は、時刻同期を目的とするSTAとのみ無線接続を確立することができる。本ステップの詳細は、後述の図6で説明する。
マスタ端末である通信装置101は、スレーブ端末である他の通信装置との無線接続を確立できたかを判定する(ステップS403)。具体的には通信装置101は、ステップS402で無線接続処理を行った相手装置が、ネットワーク104に参加したかを判定し、参加している場合は本ステップでYesと判定し、参加していない場合はNoと判定する。通信装置101はステップS403でNoと判定されると、ステップS405の処理を行う。また、通信装置101はステップS403でYesと判定されると、ステップS404の処理を行う。
通信装置101は、自装置が構築したネットワーク104に参加している端末数のカウントアップを行う(ステップS404)。具体的には、通信装置101は、ネットワーク104に参加している端末数として保持しているカウンタの値を1つ増やす。なお、通信装置101は、ステップS402以降において、ネットワーク104に参加している端末数に関する情報を、出力部205を介してユーザに表示する。この場合、通信装置101は、ステップS402の処理を行い、ステップS403でYesと判定する毎に、表示している端末数を一台ずつカウントアップする。また、本ステップにおいて通信装置101は、新たにネットワーク104に参加したスレーブ端末のMACアドレスを保持する。保持したMACアドレスは、後述(図7、図8、および図9)の時刻同期処理におけるアクションフレームの交換で用いる。
通信装置101は、ユーザから現在ネットワーク104に参加しているスレーブ端末との時刻同期処理を開始するように指示するユーザ操作を受け付けたかを判定する(ステップS405)。具体的には出力部205であるタッチパネルに表示されたソフトキーをユーザが押下したことに応じてYesと判定される。あるいは、通信装置101に備えられたハードキーが押下されたことに応じてYesと判定されてもよい。これらのソフトキーあるいはハードキーが押下されなかった場合、通信装置101はNoと判定する。なお、通信装置101は、ユーザ指示に限らず、所定の台数のスレーブ端末がネットワーク104に参加したことに応じて本ステップをYesと判定してもよい。あるいは、通信装置101は、本フローチャートを開始する際にユーザからマスタ端末としての時刻同期処理を開始するように指示を受けてから所定の時間が経過したことに応じて、本ステップをYesと判定してもよい。あるいは、通信装置101は、最後にネットワーク104にスレーブ端末が参加してから所定の時間が経過したことに応じて、本ステップをYesと判定してもよい。通信装置101は、本ステップをNoと判定するとステップS402の処理を行う。
一方、通信装置101はステップS405でYesと判定すると、ステップS405までにネットワーク104に参加したスレーブ端末と、時刻同期処理を行う(ステップS406)。この場合、通信装置101は、ユーザから時刻同期処理を行う相手となるスレーブ端末を選択する選択指示を受け付けることなく、ネットワーク104に参加している全てのスレーブ端末との時刻同期処理を開始する。具体的には、ステップS404で保持したMACアドレスから、時刻同期処理を実行するスレーブ端末を特定し、該特定したスレーブ端末に時刻同期処理を実行させる。本ステップの詳細は、図8で説明する。
通信装置101は、スレーブ端末との時刻同期処理を完了させると、ステップS404でカウントしていた参加端末数のカウンタを1減らす(ステップS407)。具体的には、マスタ端末は、時刻同期処理を完了したスレーブ端末から時刻同期の完了通知を受信したことに基づいて参加端末数のカウンタを1減らす。なお、通信装置101は、時刻同期処理を完了したことに応じて参加端末数のカウンタを1減らすことに同期して、出力部205を介して表示している参加端末数に関する情報も変化させてもよい。参加端末数に関する情報とは、単に参加端末数そのものであってもよいし、あるいはステップS405でYesと判定された時点での参加端末数を基に、時刻同期処理が完了した端末数を割合で示すことで、時刻同期処理の進捗状況を示す情報であってもよい。これによりユーザは、時刻同期処理の進捗状況を視認でき、便利である。
通信装置101は、ステップS407の処理を行うと、ネットワーク104に参加している全てのスレーブ端末との時刻同期が完了したかを判定する(ステップS408)。本ステップにおいて通信装置101は、参加端末数のカウンタが0であるかに応じて判定する。通信装置101は、参加端末数のカウンタが0である場合は本ステップにおいてYesと判定し、ステップS409の処理を行う。一方、通信装置101は、参加端末数のカウンタが0でない場合には本ステップにおいてNoと判定し、ステップS406の処理を行う。
ネットワーク104に参加している全スレーブ端末との時刻同期処理が完了した場合(ステップS408のYes)、通信装置101はステップS401で起動したAP機能を終了する(ステップS409)。これにより、ネットワーク104が終了し、マスタ端末とスレーブ端末との無線通信は切断される。
通信装置101は、AP機能を終了すると、時刻同期処理が完了したことを、出力部205を介してユーザに通知する(ステップS410)。なお、ステップS410より以前のステップで、時刻同期処理の進捗状況を表示させている場合、時刻同期処理の進捗状況が100%になったことを表示することで、ステップS410における通知の代わりとしてもよい。あるいは、時刻同期処理を未実施のスレーブ端末が0%になったことを表示することで、ステップS410における通知の代わりとしてもよい。また、本実施形態において通信装置101はステップS409の後にステップS410を行うが、これに限らずステップS409より先に行ってもよいし、あるいはステップS409と並行して行ってもよい。通信装置101はステップS410の処理を行うと、本フローチャートのフローを終了する。
以上、図4には、通信装置101が時刻同期処理を行う際に実行する処理を示した。
図5は、本実施形態における通信装置102、103が時刻同期処理を行う際に、記憶部203に記憶されたコンピュータプログラムを制御部202が実行することで実現される処理の一例を示すフローチャートである。本明細書では、通信装置102を例として本図の説明を行う。
本フローチャートは通信装置102がユーザからスレーブ端末としての時刻同期処理を開始するように指示を受けたことで開始される。具体的には出力部205であるタッチパネルに表示されたソフトキーをユーザが押下したことに応じて開始される。あるいは、通信装置102に備えられたハードキーが押下されたことに応じて開始されてもよい。なお、通信装置102は所定のタイミングが到来する毎に時刻同期処理を実行する通信装置であってもよく、この場合通信装置102は所定のタイミングが到来したことで本フローチャートの処理を開始してもよい。
スレーブ端末としての時刻同期処理の開始を指示された通信装置102は、インフラストラクチャモードとしてのSTA機能を実行し、マスタ端末である通信装置101との無線接続処理を行う(ステップS501)。通信装置102は、本ステップの処理を行うことで、通信装置101が構築するネットワーク104に参加し、通信装置101との無線接続を確立する。本ステップの詳細は、後述の図6で説明する。
通信装置102は、マスタ端末である通信装置101との無線接続を確立できたかを判定する(ステップS502)。具体的には通信装置102は、ステップS501で無線接続処理を行った通信装置101が構築したネットワーク104に自装置が参加したかを判定し、参加した場合は本ステップでYesと判定し、参加できなかった場合はNoと判定する。通信装置102はステップS502でNoと判定されると、ステップS501の処理を行う。
通信装置102はマスタ端末である通信装置101と無線接続を確立できた場合、通信装置101と時刻同期処理を行う(ステップS503)。本ステップの詳細は、図9で説明する。
通信装置102は、マスタ端末との時刻同期処理が完了したことを、出力部205を介してユーザに通知し(ステップS504)、本フローチャートのフローを終了する。
以上、図5には、通信装置102、103が時刻同期処理を行う際に実行する処理を示した。
図6は、通信装置101と、通信装置102、103とが通信パラメータの共有と無線接続を確立する際に実行される処理を示すシーケンス図である。通信装置101は図4のステップS402において、通信装置102、103は図5のステップS501において、夫々本シーケンス図に示した処理を実行する。
本実施形態において、通信装置101は通信装置102、103とWi-Fi DPP規格に準拠した通信パラメータの共有処理を実行する。本実施形態において、通信装置101はコンフィグレータ(configurator)として、通信装置102、103は夫々エンローリ(enrollee)として動作する。なお、コンフィグレータとは、通信パラメータをエンローリに提供する役割であり、エンローリとはコンフィグレータが提供する通信パラメータを受信する役割である。エンローリとして動作する通信装置は、コンフィグレータから提供された通信パラメータを利用することで、該通信パラメータを使用したネットワークに参加することができる。
Wi-Fi DPP規格に準拠した通信パラメータの共有処理と無線接続の確立は、大きく分けて4ステップで構成される。具体的には、Bootstrapping(ステップS601)、Authentication(ステップS602)、Configuration(ステップS603)、Network Introduction(ステップS604)で構成される。さらに、通信装置101と通信装置102、103は、ステップS605の処理を行うことで、無線接続を確立する。以下に、各ステップの説明を行う。
Bootstrapping(ステップS601)において、コンフィグレータとエンローリは、Authentication(ステップS602)を実施する際に利用する公開鍵(Bootstrapping Key)の共有を行う。なお、公開鍵は通信パラメータ共有処理の際のセキュリティを高めるために用いられる情報であり、証明書、またはパスワードなどの情報であってもよい。ここで、公開鍵は公開鍵暗号方式で用いられる暗号鍵の一種である。また、公開鍵以外にも、コンフィグレータとエンローリは、Authenticationを実施するためのチャネル情報やMACアドレスなどの情報の共有を行ってもよい。Bootstrapping(ステップS601)の方法としては、PKEX Protocolを利用する方法、Bluetoothを利用する方法、NFCを利用する方法、およびQRコード(登録商標)を利用する方法がある。なお、PKEXとは、Public Key Exchangeの略である。夫々の方法について以下に説明する。なお、BootstrappingやAuthenticationを行う際、コンフィグレータとエンローリは夫々イニシエータとレスポンダという役割を与えられる。本実施形態においては、コンフィグレータがレスポンダに、エンローリがイニシエータとして動作する場合を例に説明をするが、コンフィグレータがイニシエータに、エンローリがレスポンダとして動作してもよい。
まず、PKEX Protocolを利用したBootstrappingについて説明する。PKEX Protocolを用いる場合、イニシエータとレスポンダは共通のコードを利用することで、相手装置とBootstrapping Keyの共有を行う。コードとは、文字や数字、記号、あるいはそれらの組み合わせなどによって構成されるものである。本実施形態では、通信装置101、通信装置102、および通信装置103は、時刻同期を行うネットワーク104に対応する時刻同期用のコード(例えば“time-synchronization”)をBootstrappingにおいて利用する。コードは、通信装置が保持するものであってもよいし、ユーザによって任意に入力されるものであってもよい。
通信装置101、通信装置102、および通信装置103は、時刻同期を開始する際に、自装置が保持する時刻同期用のコードをBootstrappingで使用するように設定する。これにより、各通信装置において共通のコードが設定される。あるいは、通信装置101が時刻同期を開始する際に表示した時刻同期用のコードを、ユーザが通信装置102,103に入力することで共通のコードを設定するようにしてもよい。この場合、通信装置101は時刻同期用のコードを保持していてもよいし、生成してもよい。また、コードを表示する装置は、通信装置101に代えて、通信装置102あるいは通信装置103であってもよい。あるいは、ユーザによって任意のコードが通信装置101、102、103に共通に入力されることで、各通信装置に共通のコードが設定されるようにしてもよい。
まず、イニシエータは、コード(code)と自装置のMACアドレス(MAC-Initiator)とをハッシュ化し、暗号要素Qiを生成する。
Qi=H(MAC-Initiator|code)*Pi
また、X=x*Gである一時的な鍵ペア(x/X)を生成し、先ほど生成した暗号要素QiにXを付与することで情報要素Mを生成する。なお、Xは公開鍵であり、xはXに対応する秘密鍵である。また、公開鍵Xおよび情報要素Mは、x成分およびy成分を含むベクトルである。
M=X+Qi
イニシエータは、生成した情報要素MをPKEX Exchange Requestフレームに含めてレスポンダに送信する。
なお、イニシエータは、レスポンダのMACアドレスを既に知っている場合は、PKEX Exchange Requestフレームをレスポンダ宛にユニキャストで送信する。一方、レスポンダのMACアドレスをまだ知らない場合、イニシエータはPKEX Exchange Requestフレームをブロードキャストで送信する。
レスポンダは、受信した情報要素Mからイニシエータの一時鍵であるXを算出する。ここでは、レスポンダが算出したイニシエータの一時鍵XをX’とする。
レスポンダはコードとイニシエータのMACアドレスとをハッシュ化し、暗号要素Qi’を生成する。
Qi’=H(MAC-Initiator|code)*Pi
そして、生成した暗号要素Qi’と、イニシエータから受信した情報要素Mとから一時鍵X’を算出する。
X’=M-Qi’
また、これらの処理に加えて、レスポンダもイニシエータと同様に、Y=y*Gである一時的な鍵ペア(y/Y)を生成する。なお、Yは公開鍵であり、yはYに対応する秘密鍵である。また、コードと自装置のMACアドレス(MAC-Responder)とをハッシュ化し、暗号要素Qrを生成する。
Qr=H(MAC-Responder|code)*Pi
生成した暗号要素Qrに一時鍵Yを付与することで、情報要素Nを生成する。なお、公開鍵Yおよび情報要素Nは、x成分およびy成分を含むベクトルである。
N=Y+Qr
レスポンダは、情報要素NをPKEX Exchange Requestに対する応答である、PKEX Exchange Responseに含めてイニシエータに送信する。
さらに、レスポンダは、自装置のyと算出した一時鍵X’とから、秘密要素Kを算出する。
K=y*X’
レスポンダは、イニシエータおよびレスポンダのMACアドレス、情報要素M、N、コード、および秘密要素Kを用いて、イニシエータとの共通暗号鍵Zを生成する。
Z=HKDF(<>、MAC-Initiator|MAC-Responder|M.x|N.x|code,K.x)
ここで、<>は関数に引き渡される第1の引数がブランクであることを示す。また、|は、各要素を結合させることを示す。また、M.x、N.x、および、K.xは、各々、M、N、Kのx成分の値を示す。
一方、レスポンダから情報要素Nを受信したイニシエータも、同様にレスポンダの一時鍵Yを算出し(Y’)、秘密要素Kを生成することで、共通暗号鍵Zを生成する。
イニシエータは、コードとレスポンダのMACアドレスとから、暗号要素Qr’を生成する。
Qr’=H(MAC-Responder|code)*Pi
イニシエータは、受信した情報要素Nと、生成した暗号要素Qr’とから、レスポンダの一時鍵Y’を算出する。
Y’=M-Qr’
イニシエータは、算出した一時鍵Y’とxから秘密要素Kを算出する。
K=x*Y’
イニシエータは、イニシエータおよびレスポンダのMACアドレス、情報要素M、N、コード、および秘密要素Kを用いて、レスポンダとの共通暗号鍵Zを生成する。
Z=HKDF(<>、MAC-Initiator|MAC-Responder|M.x|N.x|code,K.x)
このように、イニシエータとレスポンダは、同一のコードを使って共通暗号鍵Zを生成する。
レスポンダとイニシエータは、夫々共通暗号鍵Zを生成すると、次にBootstrapping Keyの共有を行う。
まず、イニシエータは算出したレスポンダの一時鍵Y’と、自装置のBootstrapping Key Aに対応する秘密鍵aとを用いて情報要素Jを生成する。
J=a*Y’
続いて、イニシエータは、算出した情報要素Jと、自装置のMACアドレスと、Bootstrapping Key Aと、レスポンダの一時鍵Y’と、自装置の一時鍵Xとを用いて暗号要素uを算出する。
u=HMAC(J.x,Mac-Initiator|A.x|Y’.x|X.x)
イニシエータは、算出した暗号要素uと、Bootstrapping Key Aを含むBootstrappingに関する情報とを共通暗号鍵Zで暗号化し、PKEX Confirmation Requestに含めてレスポンダに送信する。
レスポンダは、暗号化された暗号要素uと、Bootstrapping Key Aを受信すると、復号を行う。そして、復号したイニシエータのBootstrapping Key A’を用いて、情報要素J’を算出する。
J’=y*A’
さらに、レスポンダは、算出した情報要素J’と、イニシエータのMACアドレスと、復号したBootstrapping Key A’と、自装置の一時鍵Yと,イニシエータの一時鍵X’とを用いて暗号要素u’を算出する。
u’=HMAC(J’.x,Mac-Initiator|A’.x|Y.x|X’.x)
レスポンダは、算出した暗号要素u’と、イニシエータから受信した情報要素uが一致するか判定し、一致した場合、復号したBootstrapping Key A’をイニシエータのBootstrapping Keyであると認証する。レスポンダは、認証したBootstrapping Key A’を、S602以降の処理で利用する。
同様の方法で、レスポンダのBootstrapping Key Bもイニシエータに送信される。まず、レスポンダは、算出したイニシエータの一時鍵X’と、自装置のBootstrapping Key Bに対応する秘密鍵bとを用いて情報要素Lを生成する。
L=b*X’
続いて、レスポンダは、算出した情報要素Lと、自装置のMACアドレスと、Bootstrapping Key Bと、イニシエータの一時鍵X’と、自装置の一時鍵Yとを用いて暗号要素vを算出する。
v=HMAC(L.x,Mac-Responder|B.x|X’.x|Y.x)
レスポンダは、算出した暗号要素vと、Bootstrapping Key Bを含むBootstrappingに関する情報とを共通暗号鍵Zで暗号化し、PKEX Confirmation Responseに含めてイニシエータに送信する。
イニシエータは、暗号化された暗号要素vと、Bootstrapping Key Bとを受信すると、復号を行う。そして、復号したレスポンダのBootstrapping Key B’を用いて情報要素L’を算出する。
L’=x*B’
更にイニシエータは、算出した情報要素L’と、レスポンダのMACアドレスと、復号したBootstrapping Key B’と、自装置の一時鍵Xと、レスポンダの一時鍵Y’とを用いて暗号要素v’を算出する。
v’=HMAC(L’.x,Mac-Responder|B’.x|X.x|Y’.x)
イニシエータは、算出した暗号要素v’と、レスポンダから受信した情報要素vが一致するか判定し、一致した場合、復号したBootstrapping Key B’をレスポンダのBootstrapping Keyであると認証する。イニシエータは、認証したBootstrapping Key B’を、S602以降の処理で利用する。
なお、イニシエータとレスポンダとの間で、Bootstrappingに用いるコードが異なる場合、相手装置から受信した暗号化されたBootstrapping Keyを復号できない。あるいは、自装置が算出した暗号要素(u’またはv’)と、相手装置から受信した暗号要素(uまたはv)とが一致しない結果を示す。この場合、イニシエータまたはレスポンダは、Bootstrappingが失敗したとして、Bootstrappingの処理を終了し、相手装置にエラーを示す情報を送信する。Bootstrappingに失敗すると、S602以降の処理を実施することはできないので、イニシエータおよびレスポンダは図4および図5の処理を終了する。なお、イニシエータおよびレスポンダは、Bootstrappingに失敗した場合、自装置の表示部にエラー、あるいはBootstrappingの失敗を示す情報を表示することで、ユーザに通知してもよい。
なお、本実施形態では、各通信装置は時刻同期を行うために、時刻同期用のコードを用いてBootstrappingを行った。各通信装置は、これに加えて、連動撮影など、異なる目的のネットワークに対応するコード(例えば“interlocking-shutter”等の文字列)を用いたBootstrappingを行うことができる。このように、時刻同期用のコードと、その他のコードを分けて用いることで、ネットワーク104に時刻同期を目的としない通信装置が参加することを防ぐことができる。
続いて、Bluetoothを利用したBootstrappingについて説明する。なお、本実施形態において、Bluetoothとは、Bluetooth 4.0以降のbluetooth low energyも含む。まず、レスポンダとして動作するコンフィグレータがbootstrappingモードに入り、bootstrappingについての情報を含めたアドバタイズパケットを送信する際に利用するセカンダリーチャネルの情報をアドバタイズする。なお、bootstrappingについての情報を含めたアドバタイズパケットとはAUX_ADV_INDパケットである。レスポンダは、セカンダリーチャネルに関する情報を、セカンダリーチャネルとは異なるプライマリーチャネルにおいて、ADV_EXT_INDパケットを利用してアドバタイズする。イニシエータは、プライマリーチャネルにおいてレスポンダからアドバタイズパケット(ADV_EXT_IND)を受信する。イニシエータは、受信したアドバタイズパケット(ADV_EXT_IND)から取得したセカンダリーチャネルにおいてレスポンダからのアドバタイズパケットを待ち受ける。レスポンダはセカンダリーチャネルにおいて、Bootstrappingに関する情報を含めたアドバタイズパケット(AUX_ADV_IND)を送信する。イニシエータは、セカンダリーチャネルにおいてエンローリからアドバタイズパケットを受信することで、Bootstrapping Keyを含むBootstrappingに関する情報を取得し、Bootstrappingを完了する。
なお、イニシエータは、プライマリーチャネルにおいてADV_EXT_INDを受信した際に、BluetoothによるBootstrappingに対応しているレスポンダの情報をユーザに表示することができる。これによりユーザはBootstrappingを行うレスポンダを選択することができる。イニシエータは、ユーザによって選択されたレスポンダから、セカンダリーチャネルにおいてAUX_ADV_INDを受信できていた場合は、Bootstrappingに関する情報を取得できているので、Bootstrappingを完了する。一方、AUX_ADV_INDを受信できていなかった場合は、ユーザによって選択されたレスポンダに、Bootstrappingに関する情報を要求するためにAUX_SCAN_REQを送信する。AUX_SCAN_REQを受信したレスポンダは、Bootstrappingに関する情報を含めたAUX_SCAN_RSPをイニシエータに送信することで、Bootstrappingを完了する。
次に、NFCを利用したBootstrappingについて説明する。NFCでは、NFCとは異なる通信方式(例えばWi-FiやBluetooth、IP通信など)による通信を行うための情報を、NFCを介して共有するNFC Handoverという方法がある。NFCを利用したBootstrappingでは、このNFC Handoverという方法を利用する。NFC Handoverには、Negotiated HandoverとStatic Handoverという二種類の方法があるが、以下では夫々の方法によるBootstrappingについて説明する。
Negotiated Handoverの場合、イニシエータであるエンローリと、レスポンダであるコンフィグレータが近接すると、どちらの装置がNFC Handover Requesterになるかを決定する。NFC Handover Requesterとは、Handover Requestメッセージを送信することで、NFC Handoverを開始する役割である。どちらかの装置がNFC Handover Requesterとなると、もう一方の装置はNFC Handover Selectorとなる。イニシエータとレスポンダのどちらがNFC Handover Requesterとなってもよい。RequesterはSelectorに対して、RequesterのBootstrappingに関する情報を含めたHandover Requestメッセージを送信する。Handover Requestメッセージを受信したSelectorは、応答として、SelectorのBootstrappingに関する情報を含めたHandover Selectメッセージを送信する。これらのメッセージのやり取りにより、RequesterとSelectorの間でBootstrappingに関する情報が交換されると、RequesterとSelectorはBootstrappingを完了する。なお、Bootstrappingに関する情報は、Handover RequestメッセージとHandover Selectメッセージとの何れか一方にのみ含まれていてもよい。
一方、Static Handoverの場合、イニシエータであるエンローリと、レスポンダであるコンフィグレータが近接すると、イニシエータはレスポンダからNFC通信によって、レスポンダのBootstrappingに関する情報を読み取る。これにより、Bootstrappingが完了する。
なお、BluetoothあるいはNFCを用いてBootstrappingを行う場合、各通信装置は自装置が送信するフレームの何れかに、無線接続を行う目的を示す情報を含めるようにしてもよい。具体的には、各通信装置は自装置が送信するフレームの何れかに無線接続を行う目的を示すコードを含めるようにしてもよい。本実施形態において、各通信装置は時刻同期を目的としてネットワーク104を介した無線接続を行うので、送信するフレームに例えば“time-synchronization”という時刻同期処理に対応したコードを含めて送信してもよい。フレームを受信した通信装置は、フレームに含まれるコードと、自装置が保持する時刻同期処理に対応したコードとが一致するかを判定し、一致した場合に通信パラメータの共有処理を行う。フレームを受信した通信装置は、時刻同期処理に対応したコードを含まないフレームを送信してきた他の通信装置とのパラメータ共有処理をエラーとして終了することで、目的の異なる通信装置のネットワーク104への参加を防ぐことができる。
最後に、QRコードを利用したBootstrappingについて説明する。イニシエータまたはレスポンダは、相手装置のBootstrappingに関する情報を含むQRコードを読み取ることで、Bootstrappingを完了する。QRコードは、通信装置が有する出力部である画面を介して表示されてもよいし、通信装置本体に貼り付けられていてもよい。あるいは、相手装置が印刷機能を有する場合、通信装置によって印刷された自装置のBootstrappingに関する情報を含むQRコードを読み取ってもよい。
なお、本実施形態においてQRコードを表示する通信装置は、表示するQRコードに、無線接続を行う目的を示す情報を含めてもよい。具体的には、QRコードを表示する通信装置は、表示するQRコードに無線接続を行う目的を示すコードを含めてもよい。本実施形態において、各通信装置は時刻同期を目的としてネットワーク104を介した無線通信を行う。QRコードを撮影した通信装置は、QRコードに含まれるコードと、自装置が保持する時刻同期処理に対応したコードとが一致するかを判定し、一致した場合にパラメータ共有処理を行う。QRコードを撮影した通信装置は、撮影したQRコードに時刻同期処理に対応するコードが含まれていない場合、その通信装置とのパラメータ共有処理を行わないことで、目的の異なる通信装置のネットワーク104への参加を防ぐことができる。
なお、上記の何れかの方法で通信されるBootstrappingに関する情報とは、具体的にはAuthenticationで利用する公開鍵(Bootstrapping Key)である。また、公開鍵以外に、Authenticationを実施するためのチャネル情報や、エンローリのMACアドレス等の情報が含まれていてもよい。
以上の何れかの方法によりBootstrapping(ステップS601)が行われ、Bootstrapping Keyが共有されると、通信装置101と通信装置102、103はAuthentication(ステップS602)を行う。
Authentication(ステップS602)では、通信パラメータ共有処理を行うための認証処理を行う。認証処理にはBootstrapping(ステップS601)で得られた公開鍵を使用する。Authentication(ステップS602)を行うことで、コンフィグレータとエンローリは共通鍵を取得できる。この共通鍵はConfiguration(ステップS603)の通信を暗号化するために用いられる。
Authentication(ステップS602)における認証方法では、Bootstrapping(ステップS601)で共有したBootstrapping Keyを用いる。具体的には、共有したBootstrapping Keyのハッシュ値をそれぞれの端末で計算し、相手から送られてくるハッシュ値と自身が計算したものと一致するかどうかで判定される。ハッシュ値が一致した場合は認証が成功となり、一致しなかった場合は失敗となる。Authentication(ステップS602)は認証要求、認証応答、認証確認の各フレームをやり取りすることで行われる。
まず、イニシエータが認証要求を送信する。認証要求はWi-Fi DPP規格で規定されたDPP Authentication Requestフレームである。Bootstrappingで共有したBootstrappingに関する情報にチャネル情報が含まれていた場合、イニシエータは当該チャネル情報が示すチャネルにおいて認証要求を送信する。同様にレスポンダも、当該チャネル情報が示すチャネルにおいて認証要求を待ち受ける。また、Bootstrappingに関する情報としてレスポンダのMACアドレスが含まれていた場合、イニシエータは該MACアドレスを利用して、認証要求をレスポンダにユニキャストで送信してもよい。この認証要求には、認証情報、識別情報、役割情報、乱数、共有鍵生成用の公開鍵が含まれる。認証情報とは、Bootstrapping(ステップS601)で取得したレスポンダのBootstrapping Keyのハッシュ値である。識別情報とは、イニシエータのBootstrapping Keyのハッシュ値である。役割情報とは、イニシエータがコンフィグレータあるいはエンローリ、もしくはその両方で動作することを示す情報である。乱数とは、後述の認証応答を受信した際に行う認証のために使用する情報である。共有鍵生成用の公開鍵とは、認証相手であるレスポンダとの間で生成する共有鍵の生成元となる鍵である。
イニシエータは、レスポンダから受信した共有鍵生成用の公開鍵と、自身の共有鍵生成用の秘密鍵とを用いて生成した鍵を共有鍵とする。一方レスポンダは、イニシエータから受信した共有鍵生成用の公開鍵と、自身の共有鍵生成用の秘密鍵の双方を用いて生成した鍵を共有鍵とする。この時、ECDH(Elliptic Curve Diffie-Hellman)方式に基づいて共有鍵を生成する。以下、共有鍵は、このECDH方式に基づいて生成されるものとする。なお、共有鍵の生成方法はこの方式に限定されるものではなく、その他の公開鍵暗号方式で生成してもよい。
レスポンダは、イニシエータから認証要求を受信すると、認証要求を送信したイニシエータが、Bootstrapping(ステップS601)でBootstrappingに関する情報を送信した相手であるかの確認を行う。具体的には、レスポンダは自装置のBootstrapping Keyのハッシュ値が、受信した認証要求に含まれている認証情報と一致するかを確認する。レスポンダは、二つのハッシュ値が一致すれば認証が成功したと判定する。ハッシュ値の計算に使用するハッシュ関数は、レスポンダとイニシエータの間であらかじめ合意されているものとする。
また、このときレスポンダは認証要求に含まれているイニシエータの役割情報を参照し、自装置の役割を決定する。例えばイニシエータがエンローリの場合、レスポンダはコンフィグレータとなる。決定された役割の情報は、後述の認証応答に含まれ、イニシエータに送信される。
認証が成功すると、レスポンダは認証応答をイニシエータへ送信する。この認証応答は、Wi-Fi DPP規格で規定されたDPP Authentication Responseフレームである。この認証応答には、レスポンダの共有鍵生成用の公開鍵、役割情報、乱数、タグ情報が含まれる。レスポンダの共有鍵生成用の公開鍵とは、通信パラメータを暗号化するための共有鍵の生成元となる鍵である。また、タグ情報とは、認証要求に含まれていた乱数である。このタグ情報は、レスポンダの共有鍵生成用の秘密鍵と、イニシエータの共有鍵生成用の公開鍵の双方を用いて生成された共有鍵で暗号化される。なお、レスポンダがイニシエータのBootstrapping Keyを有している場合、認証応答にそのハッシュ値を含めることで、相互認証を行ってもよい。
次に、認証応答を受信したイニシエータは、認証応答に含まれるタグ情報を自身が生成した共有鍵で正しく復号できるか確認する。具体的には、イニシエータは、レスポンダの共有鍵生成用の公開鍵と、イニシエータの共有鍵生成用の秘密鍵を用いて共有鍵を生成し、その共有鍵でタグ情報を復元する。復号できた場合、イニシエータは認証成功と判定し、レスポンダに認証確認を送信する。また、イニシエータは認証応答に含まれるレスポンダの役割情報を確認することで、自装置の役割を決定してもよい。認証確認は、例えばWi-Fi DPP規格で規定されたDPP Authentication Confirmフレームである。認証確認には、タグ情報が含まれる。タグ情報とは、レスポンダから受信した認証応答に含まれていた乱数を、イニシエータが生成した共有鍵で暗号化したものである。
レスポンダは認証応答を受信すると、レスポンダが生成した共有鍵を用いてタグ情報を復号できるか確認し、復号できた場合、認証成功と判定する。
以上のように、Authentication(ステップS602)を行うことで、通信装置101と通信装置102、103は認証処理の実行と、コンフィグレータあるいはエンローリの役割の決定を行うことができる。
Authentication(ステップS602)が完了すると、Configuration(ステップS603)が行われる。Configurationでは、無線接続を行うための通信パラメータの共有が行われる。Configurationでは、どちらの装置がイニシエータあるいはレスポンダであったかに関わらず、エンローリが通信パラメータを要求し、コンフィグレータが提供することになる。
通信パラメータは、DPPを用いた場合、DPP Credentialという全体構成の中に、AKM、レガシーPSK/パスフレーズ、Connector(コネクタ)、Expiry(有効期限)、C-sign-key(公開鍵)などが含まれる。AKMとは、Authentication and key management typeの略であり、通信時にどの認証プロトコルや鍵交換アルゴリズムを使用するかを示す値である。レガシーPSK/パスフレーズは、従来のWPAやIEEE802.11に基づいた認証・鍵交換を実施する際の暗号鍵である。レガシーPSK/パスフレーズは、DPPに非対応のアクセスポイントに接続するための情報でもあり、通信パラメータとして含まれていなくてもよい。また、コネクタは、DPPが定めた認証プロトコルや鍵交換アルゴリズムで使用する各種情報である。コネクタは、DPPに対応するアクセスポイントに接続し、ネットワークに参加するための情報であって、本実施形態では通信装置101が構築するネットワーク104に参加するための情報である。C-sign-keyはコンフィグレータ専用の公開鍵であり、コネクタはコンフィグレータ専用の秘密鍵で暗号化されている。
なお、本実施形態では、通信装置101、通信装置102、および通信装置103は時刻同期を目的としてネットワーク104を介した無線接続を行うため、コンフィグレータはネットワーク104用の(時刻同期用の)コネクタを提供する。しかし、これに限らず、例えば各通信装置がデータ通信を目的としてネットワークを介した無線接続を行う場合、コンフィグレータは時刻同期用のコネクタとは異なるコネクタを提供してもよい。なお、BootstrappingでPKEXを利用した場合、コンフィグレータは利用したコードに基づいて提供するコネクタを決定してもよい。また、その他の方法を用いてBootstrappingを行う場合、コンフィグレータはネットワークの目的を示す情報に基づいて提供するコネクタを決定してもよい。
Configuration(ステップS603)は、設定要求、設定応答の各フレームをやり取りすることで実行される。なお、エンローリのみがConfigurationを開始する(つまり設定要求を送信する)ことができる。
設定要求とは、例えばDPP規格で規定されたDPP Configuration Requestフレームであって、エンローリからコンフィグレータに送信される。この設定要求には、デバイス情報や役割情報が含まれる。デバイス情報とは、自身のデバイス名などである。役割情報とは、受信した通信パラメータによってエンローリが参加できるネットワークにおいて、エンローリが希望する役割を示す情報である。具体的には、ネットワークを構築するAPとしての役割を希望するか、ネットワークに参加するSTAとしての役割を希望するかを示す情報である。本実施形態では、通信装置102、103がエンローリとして動作しているので、役割情報としてはSTAとしての役割を希望する情報が含まれることになる。設定要求に含まれる情報は、Authentication(ステップS602)で作成した共有鍵で暗号化される。
設定要求を受信したコンフィグレータはエンローリへ設定応答を送信する。この設定応答は、例えばDPP規格で規定されたDPP Configuration Responseフレームである。設定応答には、コンフィグレータが提供する通信パラメータが含まれる。設定応答に含まれる情報はAuthentication(ステップS602)で作成した共有鍵で暗号化される。
設定応答を受信したエンローリは共有鍵を使用して通信パラメータを復号する。そして、通信パラメータに含まれるコンフィグレータ専用の公開鍵を使って、秘密鍵で暗号化されているコネクタを復号することで、コンフィグレータが提供する通信パラメータを取得する。
このようにConfiguration(ステップS603)が行われることで、コンフィグレータからエンローリに通信パラメータの提供が完了すると、Network Introduction(ステップS604)が行われる。
Network Introduction(ステップS604)では、Configuration(ステップS603)までの処理を完了したデバイスが、コンフィグレータから提供された通信パラメータを用いてネットワークへ参加できるかを確認する。コンフィグレータから提供された通信パラメータがインフラストラクチャネットワークである場合、STAとして動作するデバイスから検索要求を送信することで本ステップの処理が開始される。本実施形態では、STA端末である通信装置102、103から、AP端末である通信装置101に検索要求が送信される。
まず、STA端末は、AP端末から送信されるビーコンやProbe Responseに含まれているAKMを確認し、DPPに対応していることを示す情報が含まれているかを確認する。なお、Configuration(ステップS603)でやりとりしたフレームに含まれているAKMを利用して当該確認を行ってもよい。AP端末から送信されたフレームに、DPPに対応していることを示す情報が含まれている場合、STA端末はAP端末に検索要求を送信する。この検索要求は、例えばWi-Fi DPP規格で規定されたDPP Peer Discovery Requestフレームである。検索要求には、コンフィグレータ専用の秘密鍵で暗号化されたコネクタが含まれる。
検索要求を受信したAP端末は、検索要求に含まれているコネクタを、コンフィグレータ専用の公開鍵で復号できるかを確認する。AP端末はSTA端末から受信したコネクタを復号できたことを確認すると、接続許可である検索応答をSTA端末に送信する。この検索応答は、例えばDPP規格で規定されたDPP Peer Discovery Responseフレームである。接続許可を受信したSTA端末は、AP端末との間で4-Way handshakeなどの必要な接続処理を実施してネットワーク104へ参加する(ステップS605)。
なお、AP端末から送信されたフレームに、DPPに対応していることを示す情報が含まれていない場合、つまりレガシー端末であることを示している場合は、ステップS604およびステップS605に代えて、以下の処理を行う。STA端末は、レガシーPSK/パスフレーズを参照して、自装置の暗号鍵として設定する。そしてSTA端末はWPA・WPA2プロトコルを用いてAP端末と接続を行う。
以上のステップS601からステップS605の処理を行い、通信装置101が構築するネットワーク104に、通信装置102、103が参加することで、通信装置101と通信装置102、103との無線接続が確立される。
ステップS601からステップS605の各ステップの途中でエラーが検出された場合、各通信装置は本シーケンスから抜け、通信装置101は図4のステップS403の、通信装置102、103は図5のステップS502の処理を行い、Noと判定する。なお、エラーが検出された場合、各通信装置はユーザに通知してもよい。また、各通信装置は図4のステップS403や図5のステップS502の処理を行うのではなく、本シーケンスの最初や、エラーが発生した処理から再度やり直してもよい。また、各通信装置は、エラーが発生した数をカウントし、エラーの発生数が所定の値を超えたら、図4や図5のフローチャートのフローを強制的に終了する構成であっても良い。
本実施形態のように、エンローリが複数台ある場合、図6の処理はコンフィグレータと各エンローリとの間で1回ずつ行われる。具体的には、通信装置101および102の間と、通信装置101および103との間の計2回、図6の処理が行われることになる。
また、各通信装置が時刻同期用のコードとは異なる目的のコードを有しており、該コードを用いたBootstrapping処理を行った場合、コンフィグレータはネットワーク104の通信パラメータとは異なる通信パラメータを提供するようにしてもよい。この通信パラメータは、通信装置101がネットワーク104とは異なるネットワークを構築する際、および通信装置102、103が該ネットワークに参加する際に用いられる。
以上、図6には、通信装置101と、通信装置102、103とが通信パラメータの共有と無線接続を確立する際に実行される処理を示した。
なお、本実施形態では、通信装置101、通信装置102、および通信装置103はWi-Fi DPP規格に準拠して通信パラメータの共有処理を行うが、これに限らず、WPS規格に準拠した通信パラメータ共有処理を行ってもよい。この場合、各通信装置は、WPS規格に準拠したPIN(Personal Identification Number)方式による通信パラメータ共有処理を行う。WPS規格に準拠したPIN方式によるパラメータ共有処理を実行する際も、Wi-Fi DPP規格に準拠したパラメータ共有処理と同様に、時刻同期用のPINを用いてパラメータ共有処理を行う。
WPS規格に準拠したパラメータ共有処理において、各通信装置は、通信パラメータを提供するレジストラと、レジストラから提供された通信パラメータを受信するエンローリという役割を与えられる。本実施形態では、AP機能を有する通信装置101がレジストラ、STA機能を有する通信装置102、103がエンローリとしてWPS規格に準拠した通信パラメータ共有処理を行うとする。以下に、WPS規格による通信パラメータ共有処理について説明する。
まず、エンローリが保持するPIN(ここでは時刻同期用のPIN)がレジストラに入力される。PINは、エンローリの表示部に表示されたPINをユーザが入力することでレジストラに入力される。もしくは、Bluetooth通信、NFC通信、あるいは有線通信によってエンローリからレジストラにPINが入力されてもよい。あるいは、レジストラも予めエンローリと同じ時刻同期用のPINを保持しており、ユーザから時刻同期処理の開始指示を受けたことに応じて当該PINを用いた通信パラメータ共有処理を実行するようにしてもよい。
エンローリは、時刻同期処理の開始指示を受けたことに応じて、保持している時刻同期用のPINに対して値Aを用いて所定のアルゴリズムに従った計算処理を行い、計算結果PKeを算出する。エンローリはPKeを算出すると、レジストラに送信する。また、エンローリは計算に用いた値Aもレジストラに送信する。
レジストラは入力されたPINおよび受信した値Aを用いて、エンローリと同じ所定のアルゴリズムに従った計算処理を行い、計算結果PKe’を算出する。レジストラは、自装置が算出したPKe’とエンローリから受信したPKeとが一致する場合、エンローリに通信パラメータを送信し、一致しない場合は通信パラメータを送信せず、エンローリにエラーを示す通知を送信する。レジストラとエンローリは、通信パラメータを共有すると、共有された通信パラメータを用いた無線通信を開始する。
なお、エンローリとレジストラとで同一のPINを用いて計算を行った場合は夫々の計算結果が一致するが、異なるPINを用いて計算を行った場合、夫々の計算結果は一致しないため、通信パラメータは共有されない。そのため、本実施形態では、エンローリとレジストラとが時刻同期用のPINを用いることで、時刻同期を目的とする通信装置のみがネットワーク104に参加することになる。
なお、エンローリは、時刻同期用のPINとは別に、時刻同期とは異なる目的のネットワークを構築するためのPINを保持していてもよい。レジストラもPINを保持している場合、エンローリと同様に時刻同期とは異なる目的のネットワークを構築するためのPINを保持していてもよい。エンローリおよびレジストラは、時刻同期とは異なる目的のネットワークを構築するためのPINを用いた通信パラメータ共有処理を行うことで、ネットワーク104とは異なるネットワークを構築し、例えば連動撮影等の処理を行ってもよい。
また、各通信装置は、WPS規格に準拠した通信パラメータ共有処理と、Wi-Fi DPP規格に準拠した通信パラメータ共有処理と、両方を実行可能な通信装置であってもよい。
次に、通信装置101と通信装置102、103とが時刻同期処理を行う際に実行する処理について、図7、図8、および図9を用いて説明する。図7は、通信装置101と通信装置102、103とが時刻同期処理を行う際に実行される処理を示すシーケンス図である。また、図8は通信装置101が記憶部203に記憶されたコンピュータプログラムを制御部202に読み出し、実行することで実現される処理を示すフローチャートである。また、図9は、通信装置102、103が記憶部203に記憶されたコンピュータプログラムを制御部202に読み出し、実行することで実現される処理を示すフローチャートである。
本実施形態では、通信装置101および通信装置102、103は、時刻同期のプロトコルとしてIEEE802.11vに規定されているTiming Measurement Protocol(以下、TMプロトコルとする)を利用する。本実施形態では通信装置101をマスタ端末、通信装置102、103をスレーブ端末として時刻同期処理を行うが、通信装置102、103の何れかがマスタ端末となってもよい。この場合、通信装置101はスレーブ端末となる。
まず、図7を用いてTMプロトコルの手順について説明する。
マスタ端末はスレーブ端末へ、IEEE802.11シリーズ規格で規定されるActionフレームを送信する(ステップS701)。本フレームを送信する際に、マスタ端末は該Actionフレームの送信時刻T1を記憶しておく。
ステップS701で送信されたActionフレームを受信したスレーブ端末は、該Actionフレームを受信した受信時刻T2を記憶する。続いてスレーブ端末は、該Actionフレームに対する応答としてACKフレームを送信する(ステップS702)。このとき、スレーブ端末は、ACKフレームの送信時刻T3を記憶しておく。
マスタ端末はACKフレームを受信すると、その受信時刻T4を記憶し、スレーブ端末へActionフレームを送信する(ステップS703)。本ステップで送信されるActionフレームには、T1とT4の情報が含まれている。なお、ステップS703でActionフレームを送信する際に、マスタ端末は送信時刻T´1の時刻を記憶しておく。
ステップS703で送信されたActionフレームを受信したスレーブ端末は、受信時刻T´2を記憶し、マスタ端末にACKフレームを送信する(ステップS704)。このとき、スレーブ端末はACKを送信した送信時刻T´3を記憶する。
ステップS704で送信されたACKフレームを受信したマスタ端末は、受信時刻T´4を記憶する。図7には記載していないが、ステップS704の次にマスタ端末がActionフレームを送信する際は、T´1とT´4の時刻を含める。このような処理を定期的に繰り返すことでスレーブ端末はT1、T2、T3、T4(またはT´1、T´2、T´3、T´4)が取得できるので、マスタ端末間との遅延時間Tdを計算可能となる。遅延時間は、マスタ端末からスレーブ端末へのフレームの送信にかかる時間と、スレーブ端末からマスタ端末へのフレームの送信にかかる時間とで同じであると仮定すると、次の式により求められる。
Td=((T4―T1)―(T3-T2))/2 (1)
また、マスタ端末とスレーブ端末との時刻のずれToは下記により求められる。
To=T2-(T1+Td) (2)
スレーブ端末は自身の時刻にToを加算することにより、マスタ端末との時刻同期を実現できる。
なお、TMプロトコルでのT1~T4の時刻は32ビット、1ビットは10ナノ秒で定義されており、マスタ端末とスレーブ端末のシステム時刻(年月日を含む時刻情報)の同期はできない。そのため、Actionフレーム送信時にはVendor Specific ID領域にシステム時刻(たとえば、64ビットで1ビットは1ナノ秒を表す)を追加することで、年月日の同期も実現する。
本実施形態では、32ビットの時刻情報と、64ビットの時刻情報の両方を使うことで、マスタ端末とスレーブ端末の時刻同期を行う。具体的には64ビットの時刻情報を使うことで年月日といった単位の大きな時刻を同期し、更に32ビットの時刻情報によって単位の小さい時刻の同期を行う。
なお、TMプロトコルを利用して時刻同期を行う場合、マスタ端末とスレーブ端末は、ステップS701でActionフレームが送信される前に、TMプロトコルに対応しているかを端末間で確認することができる。本実施形態のように、マスタ端末とスレーブ端末との両方がTMプロトコルに対応していることを前提としている場合、TMプロトコルへの対応の確認を省略してもよい。TMプロトコルへの対応を確認する場合、マスタ端末およびスレーブ端末は、確認を行ってから図7のシーケンスを開始する。
なお、本実施形態においてマスタ端末とスレーブ端末とは、時刻同期のプロトコルとしてTMプロトコルを利用したが、これに限らず、NTPやPTPを利用してもよい。NTPは、Network Time Protocolの、PTPはPrecision Time Protocolの略である。TMプロトコル以外のプロトコルを利用する場合であっても、マスタ端末とスレーブ端末とは、マスタ端末の時刻にスレーブ端末が合わせることで時刻同期を行うものとする。
図8は、図7の時刻同期シーケンスにおけるマスタ端末の動作の一例を示すフローチャートである。本実施形態では、通信装置101がマスタ端末であるので、通信装置101は図4のステップS406として本フローチャートの処理を行う。また、図9は図7の時刻同期シーケンスにおけるスレーブ端末の動作の一例を示すフローチャートである。本実施形態では、通信装置102、103がスレーブ端末であるので、通信装置102、103は図5のステップS504として本フローチャートの処理を行う。
マスタ端末はスレーブ端末へ時刻同期のActionフレームを送信し、そのときの送信時刻を記憶する(ステップS801)。このとき、マスタ端末は32ビットの時刻だけでなく、システム時刻(64ビット)も記憶する。
スレーブ端末は、マスタ端末からActionフレームを受信したかを判定する(ステップS901)。スレーブ端末は、Actionフレームを受信していないと判定すると(ステップS901のNo)、再度ステップS901の処理を行う。一方、Actionフレームを受信したと判定すると(ステップS901のYes)、スレーブ端末はActionフレームの受信時刻T2を記憶し、ステップS902の処理を行う。このとき、マスタ端末は32ビットの時刻だけでなく、システム時刻(64ビット)も記憶する。
Actionフレームを受信したスレーブ端末は、マスタ端末にACKを送信する(ステップS902)。このとき、スレーブ端末はACKの送信時刻T3を記憶する。このとき、スレーブ端末は32ビットの時刻と64ビットのシステム時刻との両方を記憶する。
一方、ステップS801でActionフレームを送信したマスタ端末は、スレーブ端末からACKを受信したかを判定する(ステップS802)。マスタ端末は、ACKを受信していないと判定すると(ステップS802のNo)、再度ステップS802の処理を行う。一方、ACKを受信したと判定すると(ステップS802のYes)、マスタ端末は受信時刻T4を記憶し、ステップS803の処理を行う。このとき、マスタ端末は32ビットの時刻と64ビットのシステム時刻との両方を記憶する。
一方、ステップS902の処理を行ったスレーブ端末は、TdとToの計算を行う(ステップS903)。しかし、マスタ端末から時刻T1、T4の情報が入ったActionフレームを受信していない場合、スレーブ端末はTdおよびToの計算を行うことができないので、本ステップをスキップする。
続いて、スレーブ端末は時刻同期の終了条件を満たしているかを判定する(ステップS904)。今回は、ステップS903でTdおよびToを計算できていないので、スレーブ端末はNoと判定し、再度ステップS901の判定を行う。
一方、ステップS802の処理を行ったマスタ端末は、記憶した時刻T1およびT4を含めたActionフレームをスレーブ端末に送信する(ステップS803)。マスタ端末は、時刻T1およびT4の両方について、32ビットの時刻と、64ビットのシステム時刻との両方を送信する。また、マスタ端末はステップS803でActionフレームを送信する際に、送信時刻T´1について32ビットの時刻と64ビットのシステム時刻とを記憶する。
スレーブ端末は、マスタフレームからのActionフレームを受信すると、ステップ901でYesと判定し、受信時刻T´2を記憶する。スレーブ端末は、32ビットの時刻および64ビットのシステム時刻を記憶する。
次にスレーブ端末は、ステップS902の処理を行い、マスタ端末にACKを送信する。このとき、スレーブ端末は送信時刻T´3を記憶する。スレーブ端末は時刻T´2と同様に、32ビットの時刻だけでなく、64ビットのシステム時刻も記憶する。
一方、ステップS803でActionフレームを送信したマスタ端末は、スレーブ端末からACKを受信したかを判定する(ステップS804)。ACKを受信していない場合(ステップS804のNo)、マスタ端末はステップS804の処理を再度行う。一方、ACKを受信した場合(ステップS804のYes)、マスタ端末はステップS805の処理を行う。
スレーブ端末はステップS902の処理を行うと、TdおよびToを計算する(ステップS903)。マスタ端末から時刻T1および時刻T4を受信しているため、スレーブ端末は本ステップにおける計算を実行できる。
スレーブ端末は、TdとToの計算を行うと、時刻同期の終了条件を満たしているかを判定する(ステップS904)。具体的には、TdとToを所定の回数以上計算した場合はYesと判定し、TdとToの計算回数が所定の回数より少ない場合はNoと判定する。あるいは、本ステップの判定方法としては、計算結果の統計処理による遅延時間Tdの収束性の確認などが挙げられる。この場合、スレーブ端末は、遅延時刻Tdの収束性が十分である場合にYesと判定し、十分であると確認できなかった場合にNoと判定する。スレーブ端末は、ステップS904でNoと判定した場合には、ステップS901の処理を行う。一方、ステップS904でYesと判定した場合、スレーブ端末はステップS905の処理を行う。
スレーブ端末は、ステップS903で計算したTdとToを用いて自装置の時刻を補正する(ステップS905)。なお、本ステップにおいて用いられるTdやToは、夫々の計算結果の平均値や統計値であってもよい。
スレーブ端末は、自装置の時刻の補正を行うと、時刻同期の終了要求をマスタ端末に送信する(ステップS906)。終了要求とは、時刻同期処理の終了をマスタ端末に要求するフレームであって、具体的にはIEEE802.11シリーズ規格に規定されるTM Request Frameのトリガーフィールドが「0」にセットされたものである。あるいは、DeauthenticationフレームやDisassociationフレームといったネットワークの切断要求のフレームであってもよい。
マスタ端末は、ステップS804でYesと判定された場合、スレーブ端末から時刻同期の終了要求を受信したかを判定する(ステップS805)。時刻同期の終了要求を受信していないと判定した場合(ステップS805のNo)、マスタ端末は再度ステップS803の処理を行う。一方、時刻同期の終了要求を受信したと判定した場合(ステップS805のYes)、マスタ端末はステップS806の処理を行う。
マスタ端末は、受信した終了要求に対する応答として、スレーブ端末にACKを送信し(ステップS806)、図8のフローチャートのフローを終了する。
一方、スレーブ端末は、ステップS906の処理を行うと、マスタ端末からACKを受信したかを判定する(ステップS907)。スレーブ端末は、マスタ端末からのACKを受信していないと判定すると(ステップS907のNo)、再度ステップS907の処理を行う。一方、マスタ端末からのACKを受信したと判定すると(ステップS907のYes)、スレーブ端末は図9のフローチャートのフローを終了する。
なお、マスタ端末はスレーブ端末が複数ある場合、各スレーブ端末との時刻同期処理を並行して行ってもよい。具体的には、第一のスレーブ端末に対してステップS701のAction Frameを送信した後、第二のスレーブ端末に対してステップS701のAction Frameを送信してもよい。
以上、図7、図8、および図9には、通信装置101と通信装置102、103とが時刻同期処理を行う際に実行する処理を示した。
なお、図8のステップS801およびステップS803においてマスタ端末が送信するActionフレームが、ブロードキャストで送信される場合、既に時刻同期処理を完了しているスレーブ端末もマスタ端末にACKを返すようにする。
また、マスタ端末とスレーブ端末とが時刻同期処理を行っている間に、スレーブ端末が無線接続の切断要求(Deauthentication)を送信してきた場合、マスタ端末は該スレーブ端末との時刻同期処理をエラーとして終了する。また、マスタ端末は、図4のステップS404でカウントした接続端末数から、切断要求を送信してきたスレーブ端末を削除する。
なお、マスタ端末は、図8のステップS801のActionフレームの送信を行ってから所定の時間が経過してもスレーブ端末から時刻同期の終了要求を受信しなかった場合、当該スレーブ端末との時刻同期処理をエラーとして終了する。また、マスタ端末は、図4のステップS404でカウントした接続端末数から、切断要求を送信してきたスレーブ端末を削除する。
また、時刻同期処理を実行している間、マスタ端末はスレーブ端末に対して、所定の時間毎に生存確認のパケットを送信してもよい。マスタ端末は、送信した生存確認パケットに対する応答をスレーブ端末から受信した場合、該スレーブ端末との時刻同期処理を継続する。一方、生存確認パケットを送信してから所定の時間が経過するまでに、スレーブ端末から応答を受信しなかった場合、マスタ端末は該スレーブ端末との時刻同期処理をエラーとして終了する。また、マスタ端末は、図4のステップS404でカウントした接続端末数から、切断要求を送信してきたスレーブ端末を削除する。
あるいは、時刻同期処理が開始してから所定の時間が経過する毎に、スレーブ端末から生存確認のパケットが送信されるようにしてもよい。この場合、マスタ端末は、スレーブ端末から生存確認パケットを受信したことに基づいて、該スレーブ端末との時刻同期処理を継続する。また、時刻同期処理を開始してから、あるいは前回生存確認パケットを受信してから所定の時間が経過するまでに、スレーブ端末から生存確認パケットを受信しなかった場合、該スレーブ端末との時刻同期処理をエラーとして終了する。また、マスタ端末は、図4のステップS404でカウントした接続端末数から、切断要求を送信してきたスレーブ端末を削除する。なお、時刻同期処理を開始してから所定の時間が経過するまでとは、マスタ端末が図8のステップS801でActionフレームを送信してから所定の時間が経過するまでのことである。
なお、マスタ端末およびスレーブ端末は、時刻同期処理がエラーとして終了した場合に、エラーが発生したことを示す表示を行うことで、ユーザにエラーを通知してもよい。また、マスタ端末は、どのスレーブ端末との時刻同期処理がエラーとして終了したかを示す表示を行ってもよい。これにより、ユーザは時刻同期処理が正常に完了しなかったスレーブ端末を認識することができる。
なお、図4、図5、図8、および図9に示した通信装置101、102、103のフローチャートの少なくとも一部または全部をハードウェアにより実現してもよい。ハードウェアにより実現する場合、例えば、所定のコンパイラを用いることで、各ステップを実現するためのコンピュータプログラムからFPGA上に専用回路を生成し、これを利用すればよい。FPGAとは、Field Programmable Gate Arrayの略である。また、FPGAと同様にしてGate Array回路を形成し、ハードウェアとして実現するようにしてもよい。また、ASIC(Application Specific Integrated Circuit)により実現するようにしてもよい。また、図4、図5、図8、および図9に示したフローチャートの各ステップを不図示の複数のCPUもしくは装置で分散して行うようにしてもよい。図6、図7のシーケンスについても同様である。
以上、実施形態を詳述したが、本発明は例えば、システム、装置、方法、プログラム若しくは記録媒体(記憶媒体)などとしての実施態様をとることが可能である。具体的には、複数の機器(例えば、ホストコンピュータ、インタフェース機器、撮像装置、webアプリケーションなど)から構成されるシステムに適用してもよいし、また、一つの機器からなる装置に適用してもよい。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。