(57)【特許請求の範囲】
【請求項１】
端末から電波を受信する複数の無線通信装置と、前記複数の無線通信装置と通信を行っ
て前記端末の数をカウントする集計装置とを備え、
前記複数の無線通信装置は、
端末から受信した電波から当該端末の端末識別子を取得し、
第１の識別子と前記端末識別子とを合わせたものを暗号化して暗号化端末識別子を作成
し、
第２の識別子と、前記第１の識別子を用いて作成した前記暗号化端末識別子とをひも付
けて、前記集計装置に送付し、
前記集計装置は、
前記複数の、無線通信装置から、前記ひも付けられた前記第２の識別子と、前記暗号化
端末識別子とを受信し、
当該受信した前記第２の識別子及び前記暗号化識別子に基づいて、前記複数の無線受信
装置が電波を受信した前記端末の数を、端末の重複を排除してカウントし、
前記第１の識別子と前記第２の識別子とが前記無線通信装置と前記集計装置とに共有さ
れているとともに、同じサイトに設置されている前記無線通信装置は、同じ前記第１の識別子を前記暗号化端末識別子の生成に用い、
前記第２の識別子は、前記第１の識別子を暗号化して作成され、かつ、前記無線通信装置が設置されるサイトと時刻に基づいて作成される
ことを特徴とする端末カウントシステム。
【請求項２】
請求項１において、
前記集計装置は、値が同じ前記暗号化端末識別子を排除して、前記暗号化端末識別子の
ユニーク値をカウントして端末の数とすることを特徴とする端末カウントシステム。
【請求項３】
請求項１または請求項２において、
前記暗号化端末識別子を作成する暗号化は、非可逆的に同じ暗号化前データから同じ暗
号化後データを作成する暗号化であることを特徴とする端末カウントシステム。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記無線通信装置及び前記集計装置は、それぞれ、前記第１の識別子または前記第２の
識別子の一方を通信により共有し、当該一方から、同じ方式により、他方を作成すること
で前記第１及び前記第２の識別子を共有することを特徴とする端末カウントシステム。
【請求項５】
請求項１乃至３のいずれかにおいて、
前記無線通信装置は、前記複数の無線通信装置間で共有された方式にて、前記暗号化端
末識別子を切り出し、前記第２の識別子にひも付けて前記集計装置に送付することを特徴
とする端末カウントシステム。
【請求項６】
請求項１乃至３において、
前記集計装置は、前記無線通信装置が設置されるサイトと時刻に基づいて、前記第１ま
たは第２の識別子を作成し、互いに同じサイトに設置された前記無線通信装置に送付する
ことを特徴とする端末カウントシステム。
【請求項７】
請求項１乃至３において、
前記第２の識別子は、時刻にかかる情報を含んでおり、
前記集計装置は、前記受信した第２の識別子に基づいて、同じサイトの異なる無線通信
装置から受信した前記暗号化端末識別子を合算するかどうかを判断する
ことを特徴とする端末カウントシステム。
【請求項８】
請求項１乃至３において、
前記第２の識別子には、前記無線通信装置の識別子が含まれており、
前記集計装置は、前記無線通信装置の識別子及び設置位置に基づいて、前記サイト内の
おける端末の分布を算出することを特徴とする端末カウントシステム。
【請求項９】
端末から電波を受信する複数の無線通信装置と通信を行って前記端末の数をカウントす
る集計装置であって、
前記集計装置は、
第１の識別子を前記複数の無線通信装置に送信し、
前記複数の無線通信装置から、それぞれ、前記第１の識別子と端末から取得した端末識
別子とを合わせたものを暗号化して暗号化端末識別子と、当該暗号化端末識別子にひもづ
けられた第２の識別子とを受信し、
当該受信した前記第２の識別子及び前記暗号化識別子に基づいて、前記複数の無線受信
装置が電波を受信した前記端末の数を、端末の重複を排除してカウントし、
前記第１の識別子と前記第２の識別子とが前記無線通信装置と前記集計装置とに共有さ
れているとともに、同じサイトに設置されている前記無線通信装置には、同じ前記第１の識別子を送信し、
前記第２の識別子は、前記第１の識別子を暗号化して作成され、かつ、前記無線通信装置が設置されるサイトと時刻に基づいて作成される
ことを特徴とする集計装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、無線機器の台数を数えるシステムに関するものである。
【背景技術】
【０００２】
イベント会場や観光地等、不特定多数の人が集まる場所において、現在の滞在者数を確認したいという需要が存在する。例えば、観光地を管轄する自治体が、滞在者数を鑑みて、当該観光地に向かわせる公営バスの便数を調整するといった状況や、大規模災害の発生時、災害対策本部が、避難所の滞在者数を鑑みて、当該避難所に送る救援物資の数量を調整するといった状況である。
【０００３】
滞在者数が数十名程度で、比較的狭い空間であれば、施設の職員等が目視等にて人手で確認することも容易であるが、数が数百名に達する場合や、比較的広大な施設の場合、もしくは、大規模災害の発生時等職員が忙殺されるような状況においては、集計を迅速かつ自動的に実施できる仕組みを利用できることが望ましい。
【０００４】
特許文献１では、ハブを介してネットワークに接続された機器の台数を、ネットワークを流れるパケットを傍受し、当該パケットに含まれる物理アドレス(ＭＡＣアドレス)の数により集計する方法が開示されている。この方式によれば、訪問者が、自身が保有する無線機器をネットワークに接続することが期待される環境において、訪問者の人数を推定できる。当該特許文献では、実施形態として、機器を有線で接続する方式が説明されているが、無線による接続でも同様の効果が得られる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平8-191326号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１で開示されている技術では、個人が所有する機器のＭＡＣアドレスがシステムに収集される。ＭＡＣアドレスそのものは、当該機器の製造元と、製造番号を表す6オクテットの数値であり、所有者個人の情報(氏名等)は含まないが、個人が持ち歩く機器(ノートパソコン、スマートフォン、携帯ゲーム機等)に、書き換えが困難な状態で記録されているため、万一、「個人の氏名」と、「当該個人が所有する機器のＭＡＣアドレス」の組が知られると、ＭＡＣアドレスは個人を識別しうる情報となる。すなわち、当該組が知られることとなった訪問者が、施設等を訪問すると、システムの管理者に、当該施設を訪問した事実を知られることとなる。
【０００７】
また、特許文献１では有線接続による形態が説明されているが、無線接続（例えば広く一般に普及しているＩＥＥＥ８０２．１１(以下「Ｗｉ−Ｆｉ方式(登録商標)」と記述する。)方式）の場合、電波法により空中線電力が１０ｍＷ以下に制限されていることから、施設全域を収集範囲に収めるために複数台の収集装置を設置する必要がある。このような形態では、複数の収集装置で、同一のＭＡＣアドレスを収集する可能性があり、各収集装置でのカウント数の合計から重複を検出し排除する必要が生ずる。
【０００８】
本発明は、以上の課題に鑑み、匿名性を維持しながら、複数の無線装置で機器台数をカウントする技術を提供することにある。
【課題を解決するための手段】
【０００９】
上記の課題を解決し目的を達成するために、本発明では、端末から電波を受信する複数の無線通信装置は、端末から受信した電波から当該端末の端末識別子を取得し、第１の識別子と端末識別子とを合わせたものを暗号化して暗号化端末識別子を作成し、第２の識別子と暗号化端末識別子とをひも付けて集計装置に送付し、集計装置は、複数の無線通信装置から第２の識別子と暗号化端末識別子とを受信し、受信した第２の識別子及び暗号化識別子に基づいて、複数の無線受信装置が電波を受信した端末の数を、端末の重複を排除してカウントし、第１の識別子と第２の識別子とが無線通信装置と集計装置とに共有されているとともに、同じサイトに設置されている無線通信装置は、同じ第一の識別子を暗号化端末識別子の生成に用いる。
【発明の効果】
【００１０】
本発明によれば、複数の無線通信装置を用いて、無線機器の匿名性を保ちながら、施設に存在する無線機器の台数を、重複を排除してカウントすることができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態による機器台数確認システムの構成例を示す機能ブロック及び動作例のシーケンスを示す図である。
【図２】図１中の無線傍受装置の構成例を示す図である。
【図３】図１中の集計サーバの構成例を示す図である。
【図４】図３中のＤＢのテーブル構成例を示す図である。
【図５】Ｐｒｏｂｅリクエストの電文の構成を示す図である。
【図６】図１中の動作例を示すシーケンス図における、処理S20の内容を詳説したフローチャートである。
【図７】本発明の他の実施の形態による機器台数確認システムの構成例を示す機能ブロック及び動作例のシーケンスを示す図である。
【図８】本発明の他の実施の形態による機器台数確認システムの構成例を示す機能ブロック及び動作例のシーケンスを示す図である。
【図９】（ａ）（ｂ）は、本発明の他の実施の形態による無線傍受装置の設置位置の平面図と、無線端末の位置との関係とを示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態を、図面を参照して説明する。なお、以下の説明において参照する各図では、他の図と同等部分は同一符号によって示す。
【実施例１】
【００１３】
本例の機器台数確認システムは、施設等(滞在者数の推定を実施したい場所)に存在する複数の無線端末３の台数(うち、後述する、Ｐｒｏｂｅリクエストを発信するもの)を数え、当該数をＤＢ２３に格納する。
【００１４】
（システム構成）
図１は、本発明の実施の形態による機器台数確認システムの構成例を示す機能ブロック及び動作例のシーケンスを示す図である。
【００１５】
本発明の実施の形態による機器台数確認システムは、滞在者数の推定を実施したい施設等に設置する、複数台の無線傍受装置１と、当該無線傍受装置１とネットワークで接続された集計サーバ２と、を備える。
【００１６】
無線傍受装置１と、集計サーバ２との通信方式は無線通信方式を利用してもよいほか、有線通信方式を利用することもできる。また、集計サーバ２は、施設内に設置してもよいほか、インターネット等を介し無線傍受装置１から通信可能なデータセンター等に設置してもよい。
【００１７】
無線端末３は、機器台数確認システムにて台数を数える対象となる機器である。本発明の実施の形態では、無線端末３は、Ｗｉ−Ｆｉ方式において、「ステーション」として規定され、かつＷｉ−Ｆｉ方式におけるアクセスポイント(以下「Ｗｉ−Ｆｉアクセスポイント」と記述する。)に対し、クライアントとして振る舞う機器(以下「Ｗｉ−Ｆｉクライアント」と記述する。)を想定する。例えば、スマートフォンや、モバイルＰＣが該当する。
【００１８】
無線端末３は、自身が接続可能なＷｉ−Ｆｉアクセスポイントを探知するため、Ｗｉ−Ｆｉ方式において「Ｐｒｏｂｅリクエスト」と呼ばれる種別の電波を、定期的に、周囲の空間に対し発信している。
【００１９】
Ｐｒｏｂｅリクエストには、発信元である無線端末３の、ＭＡＣアドレスが記載されている。具体的には、図５中の、Ａｄｄｒｅｓｓ２(Ｐ３４)に、ＭＡＣアドレスが、オクテット列として記載されている。
【００２０】
Ｗｉ−Ｆｉ方式では、Wired Equivalent Privacy(ＷＥＰ）、Wi-Fi Protected Access 2(ＷＰＡ２)といった方式により、Ｗｉ−ＦｉアクセスポイントとＷｉ−Ｆｉクライアント間の通信内容の暗号化が可能であるが、Ｐｒｏｂｅリクエストの電文において、ＭＡＣアドレスが記述された箇所(図５におけるＡｄｄｒｅｓｓ２(Ｐ３４))は、ＷＥＰ、およびＷＰＡ２の規格上、暗号化の対象範囲外であるので、無線端末３のＭＡＣアドレスは、可読である。
【００２１】
なお一般に、Ｗｉ−ＦｉクライアントがＷｉ−Ｆｉアクセスポイントと通信するにあたっては、事前に当該Ｗｉ−Ｆｉアクセスポイントが所属するネットワークの名称であるExtended Service Set ID(以下、「ＥＳＳＩＤ」と記述する。)や、ＷＥＰやＷＰＡ２に使用する暗号鍵といった情報を、Ｗｉ−Ｆｉクライアントに設定する必要がある。無線傍受装置１が、無線端末３のＰｒｏｂｅリクエストの送信対象として受信するのではなく、他を通信対象として発信されたものを傍受しＭＡＣアドレスを確認することのみが目的であれば、無線端末３にあらかじめ無線傍受装置１と通信することを前提とした設定を行う作業は不要である。
【００２２】
図２は、図１中の無線傍受装置１の構成例を示す図である。無線傍受装置１は、ＣＰＵ（Central Processing Unit）１０１と、メモリ１０２と、アンテナ部１０３と、入力装置１０４と、モニタ１０５と、通信ポート１０６と、を備える。CPU101は、プログラムを読み込んで稼働させることにより、MACアドレス抽出部１１、Salt取得部１２、MACハッシュ断片生成部１３として機能する。メモリ１０２は、半導体メモリなどの記憶装置で構成され、各種情報を記憶可能になっている。例えば、無線傍受装置１として、Ｗｉ−Ｆｉ方式に対応したノート型またはタブレット型パソコンやスマートフォン等に、サーバ（例えば集計サーバ２）からプログラムを供給しインストールして使用する形態が考えられる。
【００２３】
アンテナ部１０３は、ハードウェアとしての金属製導電体であるアンテナ（図示せず）とＣＰＵ１０１が実行するプログラムとの組合せであり、無線端末３が発信するＷｉ−Ｆｉ方式による電波を傍受（受信）し、その内容を、無線傍受装置１のＣＰＵ１０１が実行するプログラムが読み取り可能なオクテット値の列である電波ダンプ５２に変換し、当該電波ダンプ５２をメモリ１０２に保存する機能を有する。アンテナ部１０３は、後述するＳａｌｔ取得部１２からの指示により、電波の傍受を開始しまたは停止する。
【００２４】
なお、Ｗｉ−Ｆｉ方式では、複数の周波数帯の利用が許可されており、どの周波数帯で通信を行うかは、Ｗｉ−Ｆｉアクセスポイント、およびＷｉ−Ｆｉクライアントの設定、および通信開始前の両者の調停に委ねられている。このためアンテナ部１０３は、これらの周波数帯を順次傍受する機能を有してもよい。
【００２５】
例えば、ある1つの周波数帯を、１５秒間傍受し、その間に傍受したＰｒｏｂｅリクエストについて、電波ダンプ５２をメモリ１０２に保存し、次いで、異なる周波数帯の傍受に遷移する、といった機能である。
【００２６】
なお、アンテナ部１０３は、傍受する周波数帯を、本システムを運用する時点で、一般に流通しているＷｉ−Ｆｉ対応機器(特に、個人が持ち歩く機器である、携帯電話、スマートフォン等)の多くが使用している周波数帯を鑑みて決定してもよい。２０１４年６月の時点では、Ｗｉ−Ｆｉ方式のうちＩＥＥＥ８０２．１１ｂ方式およびＩＥＥＥ８０２．１１ｇ方式に対応したＷｉ−Ｆｉ機器が使用する2.412GHz±10MHzの範囲(第1チャネル)と、2.437GHz帯±10MHzの範囲(第6チャネル)と、2.462GHz±10MHzの範囲(第11チャネル)と、ＩＥＥＥ８０２．１１ａ方式、およびＩＥＥＥ８０２．１１ｎ方式に対応したＷｉ−Ｆｉ機器が使用する、5.15GHzから5.35GHzの範囲と、5.47GHzから5.725GHzの範囲とを傍受の対象とすることが、無線端末３として捕捉可能な機器の数を増大させる上で合理的と考えられる。
【００２７】
加えてアンテナ部１０３は、電波ダンプ５２のメモリ１０２へのデータ保存に先立ち、傍受した電波が確かにＷｉ−Ｆｉクライアントが発信したＰｒｏｂｅリクエストであるか否かを、電波ダンプ５２のオクテット列にＷｉ−Ｆｉ方式においてＰｒｏｂｅリクエストを識別するために割り当てられたビット列のパターンが含まれるかによって確認し、電文が、Ｐｒｏｂｅリクエストである場合にのみ当該電文に対応する電波ダンプ５２の保存を行う機能を有してもよい。
【００２８】
具体的には、電波ダンプ５２のオクテット列において、図５中の、Ｔｙｐｅ(Ｐ３１２)で示される部分のビット列が「００」であり、かつ、Ｓｕｂｔｙｐｅ(Ｐ３１３)で示される部分のビット列が「０１００」である場合にのみ、当該電波ダンプ５２を、メモリに保存する機能である。
【００２９】
これは、本システムの動作に必要の無い情報は、プライバシー保護の観点から、可能な限り本システムに保存しないようにするための措置である。
【００３０】
入力装置１０４は、人間の操作により、無線傍受装置１を起動したり、メモリに値を入力する機能を有する。例えば、キーボード等の装置が想定される。
【００３１】
モニタ１０５は、無線傍受装置１のメモリ１０２の内容等を、人間が目視可能な形式で表示する装置である。例えば、液晶ディスプレイ等の装置が想定される。入力装置１０４、およびモニタ１０５は、無線傍受装置１と同一の筐体に接続してもよいほか、ネットワーク上の他の場所に設置し、通信ポート１０６を介し、無線傍受装置１と、メモリ操作等に係る通信を実施する形態でもよい。
【００３２】
通信ポート１０６には、ネットワークケーブル等が接続され、ＣＰＵ１０１が実行するプログラムの求めに応じ、ネットワークに対し、電文の送受信を行う機能を有する。
【００３３】
図３は、図１中の集計サーバ２の構成例を示す図である。集計サーバ２は、ＣＰＵ２０１と、メモリ２０２と、入力装置２０４と、モニタ２０５と、通信ポート２０６と、を備える。CPU201は、プログラムを読み込んで稼働させることにより、Salt取得部２１、乱数生成部２２、ユニーク値カウント部２５として機能する。例えば、集計サーバ２として、無線傍受装置１と同一の拠点に設置したノート型パソコンを使用する形態や、インターネット上のデータセンター等に設置した、サーバ型コンピュータを使用する形態が考えられる。
【００３４】
入力装置２０４は、人間の操作により集計サーバ２を起動したりメモリ２０２に値を入力する機能を有する。例えば、キーボード等の装置が想定される。
【００３５】
モニタ２０５は、集計サーバ２のメモリ２０２の内容等を、人間が目視可能な形式で表示する装置である。例えば、液晶ディスプレイ等の装置が想定される。入力装置２０４、およびモニタ２０５は、集計サーバ２と同一の筐体に接続してもよいほか、ネットワーク上の他の場所に設置し、通信ポート２０６を介し、集計サーバ２と、メモリ操作等に係る通信を実施する形態でもよい。
【００３６】
通信ポート２０６には、ネットワークケーブル等が接続され、ＣＰＵ２０１が実行するプログラムの求めに応じ、ネットワークに対し、電文の送受信を行う機能を有する。
【００３７】
ＤＢ（Data Base）２３は、HDD(Hard Disk Drive)や半導体メモリなどの記憶装置で構成され、各種情報を記憶可能になっている。本DB２３は、集計サーバ２に内蔵されずに外付けでもよい。
【００３８】
図１に戻り、無線傍受装置１は、アンテナ部１０３が傍受したＰｒｏｂｅリクエストからＭＡＣアドレスを抽出する、ＭＡＣアドレス抽出部１１と、後述する集計サーバ２のＳａｌｔ応答部２１から、ランダムな数値(以下、「Ｓａｌｔ」と記述する。)を取得する、Ｓａｌｔ取得部１２と、ＭＡＣアドレスと、Ｓａｌｔから、ＭＡＣハッシュ断片を生成する、ＭＡＣハッシュ断片生成部１３と、前記ＭＡＣハッシュ断片を、集計サーバ２の、後述するデータ受信部２４に送信する、データ送信部１４と、を備える。
【００３９】
集計サーバ２は、後述する乱数生成部２２からＳａｌｔを受け取り、無線傍受装置１のＳａｌｔ取得部１２に、Ｓａｌｔを応答する、Ｓａｌｔ応答部２１と、前記Ｓａｌｔ応答部２１にＳａｌｔを応答する、乱数生成部２２と、リレーショナルデータベースであるＤＢ２３と、前記の無線傍受装置１のデータ送信部１４から、ＭＡＣハッシュ断片を受信する、データ受信部２４と、ＭＡＣハッシュ断片に含まれるユニークな値の数を数え、ＤＢ２３に記録する、ユニーク値カウント部２５と、を備える。
【００４０】
（機器台数確認システムの動作シーケンス例）
以下、本システムの動作シーケンスを説明する。図１に、動作シーケンス例を示す番号(S1〜S21)を記載している。 
Ｓａｌｔ取得部１２は、定期的に起動し、メモリ１０２から、無線傍受装置１が設置された場所を表す文字列である施設ＩＤ４１と、アンテナ部１０３が電波を傍受する時間長を表す数値である傍受時間５３と、を読み込み、集計サーバ２のＳａｌｔ応答部２１に対し、施設ＩＤ４１を含む電文を、ネットワークを介して送信する(S1)。
【００４１】
なお、施設ＩＤ４１と傍受時間５３とは、無線傍受装置１の設置時等に施設の管理者等が無線傍受装置１の入力装置１０４を用いて設定し、無線傍受装置１のメモリ１０２に保持されている。
【００４２】
一台の無線傍受装置１は、複数個の施設ＩＤ４１を同時に保持でき、Ｓａｌｔ応答部２１への通信処理(S1)乃至、後述するＳａｌｔ応答部２１から返却されたＳａｌｔ４３とビットマスク５０の保存処理(S7)は、保持する施設ＩＤ４１の数だけ繰り返し実施する。ただし、同じく後述する、アンテナ部１０３への起動指示(S8)、およびＭＡＣアドレス抽出部１１の起動処理(S9)は、保持する施設ＩＤ４１の数によらず、一度だけ実施する。
【００４３】
加えて、Ｓａｌｔ取得部１２の起動周期はあらかじめ施設の管理者等が無線傍受装置１の入力装置１０４を用いて設定し、Ｓａｌｔ取得部１２はこの設定に基づき定期的かつ自動的に処理を開始してもよいほか、ネットワーク経由で無線傍受装置１からアクセス可能な集計サーバ２内の領域に、「Ｓａｌｔ取得部１２に、処理S1の実行を指示するファイル等」を集計サーバ２の管理者等が作成して設置し、無線傍受装置１はこの領域に当該ファイルが設置されているか否かを定期的に確認し、設置されている場合に処理を開始する形態でもよい。
【００４４】
Ｓａｌｔ応答部２１は、無線傍受装置１のＳａｌｔ取得部１２が実施するS1の処理によって施設ＩＤ４１を受信するまで待機し、受信後、集計サーバ２のメモリから現在時刻４２とビットマスク５０と時刻粒度指定５４とを読み出す。
【００４５】
ここで、時刻粒度指定５４とは、Ｓａｌｔ応答部２１から受け取った現在時刻４２のどの単位(時、分、秒)より細かい部分を切り捨てるかをＳａｌｔ応答部２１に指示する文字列である。例えば、時刻粒度指定５４に「時より細かい部分を切り捨てる」旨の記述がなされており、現在時刻４２が「２０１４年６月２６日２０時３４分５６秒」であった場合、Ｓａｌｔ応答部２１は、現在時刻４２を、「２０１４年６月２６日２０時００分００秒」と見做すこととする。
【００４６】
このように、現在時刻４２の値の、特定の単位(時、分、秒)より細かい部分を切り捨てることにより、ある一つの施設に設置した、複数台の無線傍受装置１が、それぞれ処理S1を実行するタイミングが、正確に分や秒単位で同一でない場合でも、無線端末３の数を、重複なく集計することができ、本システムの信頼性を、一層向上させることができる。
【００４７】
すなわち、無線傍受装置１が処理S1を実行し後述の乱数生成部２２に施設ＩＤ４１が到達するタイミングは、無線傍受装置１と集計サーバ２との間のネットワークの混雑状況や、無線傍受装置１のＣＰＵの負荷により変動する可能性があり、その変動量は予測が困難である。このため、複数台の無線傍受装置１が、たとえ真に同時に処理S1を開始した場合でも、施設ＩＤ４１を含む電文が、Ｓａｌｔ応答部２１に到着する時刻は、少なくとも秒単位で異なる恐れがある。もし、現在時刻４２の、分未満の部分の切り捨てを行わなかった場合、後述する乱数生成部２２に、秒の部分が異なった、現在時刻４２の値が入力されることとなり、最終的に、後述するユニーク値カウント部２５に読み込まれる、ＳａｌｔＨａｓｈ４５の値が、送出元の無線傍受装置１ごとに異なる事態となり、処理S20において、「ＳａｌｔＨａｓｈ４５と、当該ＳａｌｔＨａｓｈ４５に紐付いた、1個以上のＭＡＣハッシュ断片４７との組」を、グループ化することができない。つまり、複数の無線傍受装置１が、同一の無線端末３(同一のＭＡＣアドレス４４)から傍受した電波が、Ｓａｌｔ４３が異なることでＭＡＣハッシュ断片４７も異なってしまって別な無線端末３からのものであると誤判定され、無線端末３の正確な総数を求めることができない。
【００４８】
以上の理由から、Ｓａｌｔ応答部２１は、時刻粒度指定５４に基づく現在時刻４２の切り捨て処理を実施後、当該施設ＩＤ４１と現在時刻４２(切り捨て後のもの)との組を乱数生成部２２に入力する(S2)。
【００４９】
なお現在時刻４２は、集計サーバ２のオペレーティングシステム等が、Ｓａｌｔ応答部２１の処理とは独立して1秒ごとに生成し、集計サーバ２のメモリ１０２上に保存する。また、ビットマスク５０と、時刻粒度指定５４とは、集計サーバ２の管理者等が、本システムの設置時等に、集計サーバ２のコンソールを用いて設定し、集計サーバ２のメモリ上に保存する。時刻粒度指定５４は、複数台の無線傍受装置１の間で発生しうる処理S1の実行タイミングの時差を踏まえ決定する。
【００５０】
乱数生成部２２は、Ｓａｌｔ応答部２１から施設ＩＤ４１と現在時刻４２との組が処理S2によって入力されるまで待機し、入力後、集計サーバ２のメモリから乱数シード５１を読み出す。乱数シード５１は、予測が困難なランダムな値である。
【００５１】
乱数シード５１は、集計サーバ２の管理者等が本システムの設置時等に集計サーバ２のコンソールを用いて設定し、集計サーバ２のメモリ上に保持されている。
【００５２】
次いで乱数生成部２２は、Ｓａｌｔ応答部２１から入力された施設ＩＤ４１と、現在時刻４２(時刻粒度指定５４に基づき細かい部分の切り捨てを行った後の値)と、乱数シード５１を結合したオクテット列を生成し、当該オクテット列の第1オクテットに対し、第2オクテット以降のオクテットを順に排他的論理和(ビット値同士のＥｘｃｌｕｓｉｖｅ ＯＲ)にて合算してゆき、最終的な第1オクテットの値を「入力値が同じであれば、同一の結果を返す疑似乱数生成関数」に入力し、結果をＳａｌｔ４３として取得し、当該Ｓａｌｔ４３をＳａｌｔ応答部２１に出力する(S3)。
【００５３】
ここでＳａｌｔとは、暗号化する文字列に付与することで、暗号のセキュリティを高めるものである。簡略な方法によってＳａｌｔを生成してもよいが、本実施例のようにＳａｌｔ４３を生成すれば、よりセキュリティを高めることができる。
【００５４】
なお、「入力値が同じであれば、同一の結果を返す疑似乱数生成関数」として、POSIX.1-2001規格におけるsrand関数等が挙げられる。疑似乱数生成関数は、一般的に、入力値が取り得る値の範囲が広ければ広いほど、出力値の推測が困難となる。このため、疑似乱数生成関数が、1オクテットより長い値を入力値として受け入れ可能な場合、前記処理は、第1オクテットに第2オクテット以降の値を順に適用してゆく形に代えて、先頭から複数オクテットの範囲に対し、後続する同じ長さの範囲のオクテット列を順に排他的論理和にて合算する形態とし、より一層、本システムのセキュリティレベルを向上させてもよい。
【００５５】
Ｓａｌｔ応答部２１は、乱数生成部２２からＳａｌｔ４３を受け取り(S3)、当該Ｓａｌｔ４３のハッシュ値であるＳａｌｔＨａｓｈ４８を計算し(S4)、当該ＳａｌｔＨａｓｈ４８を主キーとして、ＤＢ２３に、ＳａｌｔＨａｓｈ４８と施設ＩＤ４１と現在時刻４２とを記録する(S5)。ＤＢ２３には、図４に示すような情報が記録される。そして、Ｓａｌｔ４３とビットマスク５０との組を、無線傍受装置１のＳａｌｔ取得部１２に応答する(S6)。Ｓ４及びＳ５は、後述の集計（Ｓ２０）のためである。なおＤＢ２３は、リレーショナルデータベースであり、主キーに紐付いた複数個のデータを、他のプログラムからの求めに応じ保存または出力することができる。
【００５６】
処理S4の説明中の「ハッシュ値」とは、ある値を「ハッシュ関数」と呼ばれる関数に入力した結果得られる出力値である。ハッシュ関数の出力値、すなわちハッシュ値の長さ(オクテット数)は、入力値のオクテット数や値によらず一定という特性を有する。また、ハッシュ関数は、同じ入力値に対し必ず同じ値(ハッシュ値)を出力するという特性と、少しでも入力値が異なる場合まったく異なる値(ハッシュ値)を出力するという特性と、を有する。なお、ハッシュ値から入力値を復元することや、同じハッシュ値を持つ複数の入力値を推定することは、数学的に困難である。このような特徴を有するハッシュ関数は、複数個が知られているが、本実施形態ではSHA-256(Secure Ｈａｓｈ Algorithm 256)を使用する。SHA-256の出力値は、256ビット(32オクテット)である。本実施例では、ハッシュ関数を用いるが、暗号化後のデータから暗号化前のデータを復元できない非可逆的暗号化であり、同じ暗号化前データからはほぼ毎回同じ暗号化後データを作成する暗号化であれば、他の暗号化（データ変換）を用いてもよい。
【００５７】
次いでＳａｌｔ取得部１２は、Ｓａｌｔ応答部２１から、Ｓａｌｔ４３と、ビットマスク５０と、を受信し(S6)、当該Ｓａｌｔ４３と、ビットマスク５０と、を無線傍受装置１のメモリ上に保存し(S7)、無線傍受装置１のアンテナ部１０３に対しＷｉ−Ｆｉクライアントが発する電波の傍受の開始を指示し(S8)、当該傍受時間５３で示された時間待機した後に、アンテナ部１０３に対し電波の傍受の停止を指示し、ＭＡＣアドレス抽出部１１を起動する(S9)。
【００５８】
ＭＡＣアドレス抽出部１１は、Ｓａｌｔ取得部１２からの起動指示(S9)により起動する。
【００５９】
ＭＡＣアドレス抽出部１１は、無線傍受装置１のアンテナ部１０３が傍受し、メモリ１０２に保存した、Ｐｒｏｂｅリクエストの電文に基づき生成されたオクテット列である電波ダンプ５２を読み取り(S10)、当該オクテット列において、図５中のＴｙｐｅ(Ｐ３１２)で示される部分のビット列が「００」であり、かつ、Ｓｕｂｔｙｐｅ(Ｐ３１３)で示される部分のビット列が「０１００」である場合（すなわちＷｉ−Ｆｉ方式において、Ｐｒｏｂｅリクエストを表すビットパターンである場合に限り）、更に図５中の、Ａｄｄｒｅｓｓ２(Ｐ３４)で示される部分のオクテット列(6オクテット)を読み取る。Ｐ３４から読み取ったオクテット列は、無線端末３のＭＡＣアドレス４４である。読み込んだＭＡＣアドレス４４は、既に読み取ったＭＡＣアドレス４４と比較し、同じＭＡＣアドレスを２回以上読み込んでいる場合には２回目以降のものは削除して重複を防ぐ。
【００６０】
次いでＭＡＣアドレス抽出部１１は、読み取ったＭＡＣアドレス４４を引数として、ＭＡＣハッシュ断片生成部１３を起動する(S11)。
【００６１】
なお、無線端末３の台数や、無線端末３によるＰｒｏｂｅリクエストの発信のタイミング、アンテナ部１０３による傍受周波数帯の選択のタイミング、ならびに、アンテナ部１０３が、傍受に費やした時間(すなわち、傍受時間５３の値)の長短によっては、アンテナ部１０３は、複数回、無線端末３が発信した電波を傍受する可能性があり、その場合、複数個の電波ダンプ５２が、メモリ１０２に保存される。その場合、ＭＡＣアドレス抽出部１１は、メモリ１０２に保存された、すべての電波ダンプ５２について、ＭＡＣアドレス４４を読み取り、複数個のＭＡＣアドレス４４を引数として、一回だけ、ＭＡＣハッシュ断片生成部１３の起動(S11)を実施する。
【００６２】
以上の処理の完了後、ＭＡＣアドレス抽出部１１はメモリ１０２に保存された電波ダンプ５２をすべて削除してもよい。この削除処理は、電波ダンプ５２がもはや後段の処理で使用されないことを踏まえ、万一悪意のあるプログラムや管理者によって無線傍受装置１のメモリが窃視された場合に無線端末３の所有者のプライバシーが侵害されるリスクを低減するための措置である。
【００６３】
ＭＡＣハッシュ断片生成部１３は、ＭＡＣアドレス抽出部１１からの起動指示(S11)により起動する。起動の際、ＭＡＣアドレス抽出部１１から、引数として1個以上のＭＡＣアドレス４４を受け取り、Ｓａｌｔ取得部１２が無線傍受装置１のメモリ上に保存したＳａｌｔ４３とビットマスク５０との組を読み取る(S12)。
【００６４】
そして、当該Ｓａｌｔ４３のハッシュ値を計算する(S13)。このハッシュ値をＳａｌｔＨａｓｈ４５と記述する。このステップ１５は省略可能であり、ハッシュ値計算をする前のＳａｌt４３を使用することができる。しかし、不正に傍受した者が、Ｓａｌｔ４３と後述のＭＡＣハッシュ断片４７等を用いて解読するおそれがあり、本ステップ１３でハッシュ値化した方が、不正に傍受した者が解読する難易度が上がり、セキュリティが高くなる。
【００６５】
また、本ＳａｌtＨａｓｈ４５とＳａｌｔ４３は、集計サーバ２と無線傍受装置１間で共有できていればよいので、無線傍受装置１内でＳａｌt４３から作成するのではなく、集計サーバ２から無線傍受装置１から送信して共有してもよいし、その逆でもよい。
【００６６】
次いで、ＭＡＣハッシュ断片生成部１３は、ＭＡＣアドレス抽出部１１から引数として受け取ったＭＡＣアドレス４４とＳａｌｔ４３とを結合したオクテット列のハッシュ値を計算する(S14)。同じハッシュ値が生成されるのは、組合わせたＭＡＣアドレス４４とＳａｌｔ４３がともに同じ場合のみである。この計算の結果得られたハッシュ値(ＭＡＣＨａｓｈ４６)と、ビットマスク５０の論理積(ビット値同士のＡＮＤ)を計算する(S15)。このＳ１５は省略可能であり、ハッシュ値(ＭＡＣＨａｓｈ４６)を集計サーバ２に送ることもできるが（Ｓ６、Ｓ７及びＳ１２のビットマスク５０にかかる送信等も省略できる）、論理積であるＭＡＣハッシュ断片４７を送信した方が、それを不正に傍受した者が情報の復元が困難であり、セキュリティが高まる。
【００６７】
そして、計算した結果の値を、ＭＡＣハッシュ断片４７としてＳａｌｔＨａｓｈ４５と紐付けて組とし、当該組を引数としてデータ送信部１４を起動する(S16)。
【００６８】
なお、ＭＡＣアドレス抽出部１１から、複数個のＭＡＣアドレス４４を引数として受け取った場合、ＭＡＣハッシュ断片生成部１３は、それぞれのＭＡＣアドレス４４に対し、ＭＡＣハッシュ断片４７を導出する処理(S14、およびS15)を実施し、結果として、単一のＳａｌｔＨａｓｈ４５に、複数個のＭＡＣハッシュ断片４７が紐付いた組を生成し、この組を、データ送信部１４を起動する際の引数とする。
【００６９】
また、Ｓａｌｔ取得部１２が無線傍受装置１のメモリ上に保存したＳａｌｔ４３と、ビットマスク５０との組が複数個存在する場合(すなわち、施設ＩＤ４１が、複数個設定されており、もって処理S1乃至S7が、複数回、実施された場合)、ＭＡＣハッシュ断片生成部１３は、それぞれの組に対し、処理S13乃至S16を実施し、もって「Ｓａｌｔ４３と、ビットマスク５０との組」の数だけ、「単一のＳａｌｔＨａｓｈ４５に対し、複数個のＭＡＣハッシュ断片４７が紐付いた組」が生成される。ＭＡＣハッシュ断片生成部１３は、この複数個の組を引数として、データ送信部１４を、1回だけ起動して送信する(S16)。
【００７０】
なお、この場合、Ｓａｌｔ４３、およびＳａｌｔＨａｓｈ４５の値は、組により異なるが、処理S14に入力するＭＡＣアドレス４４の値はどの組についても同一である(すなわち、施設ＩＤ４１の数だけ、S14乃至S15を、繰り返し実行する。この繰り返しにおいてＳａｌｔ４３の値はその都度異なるが、ＭＡＣアドレス４４の組は、毎回同一である)。
【００７１】
以上の処理の完了後、ＭＡＣハッシュ断片生成部１３は、無線傍受装置１のメモリ１０２からＳａｌｔ４３とビットマスク５０とをすべて削除してもよい。この削除処理は、Ｓａｌｔ４３と、ビットマスク５０と、が、もはや後段の処理で使用されないことを踏まえ、万一、悪意のあるプログラムや管理者によって、無線傍受装置１のメモリが窃視された場合に、無線端末３の所有者のプライバシーが侵害されるリスクを低減するための措置である。
【００７２】
以上の実施形態で、処理S14乃至S15を実施する理由は、ＭＡＣアドレス４４を、元の値に復元が困難な値に変換することで、「特定のＭＡＣアドレス４４を持つ機器の保有者(個人)が、ある特定の時刻に、ある特定の場所(無線傍受装置１が設置された場所)に滞在していた」ことを、他者から推測困難とするためである。
【００７３】
以上の理由から、処理S14では、ＭＡＣアドレス４４に、Ｓａｌｔ４３を結合した値に対し、ハッシュ値を計算することとしている。
【００７４】
ただし、MACアドレスが理論上取り得る値は、約３２６９億通りである。これは、MACアドレスの上位３オクテットが取り得る１９，４８３通り(IEEE OUI, [online], [2014年6月20日検索], インターネット＜http://standards.ieee.org/develop/regauth/oui/oui.txt＞参照)に、下位３オクテットが取り得る２の２４乗を乗じた積である。よって、もしＳａｌｔ４３が攻撃者にとって公知であると、攻撃者は、「ＭＡＣアドレスが理論上取りうる約３２６９億通りのＭＡＣアドレス４４についてハッシュ値を計算する処理」に代わり、「約３２６９億通りのＭＡＣアドレス４４にそれぞれＳａｌｔ４３を結合した値についてハッシュ値を計算する処理」を実施すればよく、この場合、結果のハッシュ値の保存に必要な領域のサイズは変わらず、計算の所要時間のみＳａｌｔ４３のオクテット数に応じ等差級数的に伸びることとなる。仮にＳａｌｔ４３が、６オクテットの長さを持つ場合、ハッシュ値計算の対象オクテット数は2倍となり、所要時間も、約１，４００，０００秒(約３９０時間)と、前記の２倍となる。しかしながら、現在では数百台のコンピュータを個人で利用することも困難ではなく、それらのコンピュータをもって並列でハッシュ値の計算を行うことで、攻撃者はＳａｌｔ４３を追加したことによる計算量の増大を十分に吸収できる。一般的に、コンピュータの処理能力は、経年の、技術革新により、等比級数的に増大する傾向があるので、これに対抗するには、Ｓａｌｔ４３の長さも、等比級数的に増大させる必要があるが、そうした場合、本システム側でも、ハッシュ値の計算に係る計算能力、すなわち無線傍受装置１や集計サーバ２の計算能力を、等比級数的に増強する必要が生じ、本システムを導入する者にとって費用負担の原因となる。
【００７５】
以上の理由から、ＭＡＣハッシュ断片生成部１３は、Ｓａｌｔ４３を公知とするべきではなく、代わって処理S16において、Ｓａｌｔ４３ではなくそのハッシュ値であるＳａｌｔＨａｓｈ４５を出力することで、より一層本システムのセキュリティレベルを向上させることができる。なぜなら、ＳａｌｔＨａｓｈ４５のみ出力することで、攻撃者はＳａｌｔ４３の値を知ることができなくなり、たとえＭＡＣＨａｓｈ４６の値を知ることに成功した場合であっても、元のＭＡＣアドレス４４を知るには、Ｓａｌｔ４３が取り得るすべての値に対し、それぞれＭＡＣアドレス４４を結合し、処理S14と同様のハッシュ値を計算し、それがＭＡＣＨａｓｈ４６と一致するか、を検証する必要が生じ、この計算に要する時間は、Ｓａｌｔ４３の長さ(オクテット数)に応じ、等比級数的に増大するため、無線端末３の保持者のプライバシー保護の観点から好ましい。
【００７６】
なお、そもそもＳａｌｔＨａｓｈ４５を集計サーバ２に送信するデータに含める理由は、この値に基づいて後述のユニーク値カウント部２５にて同一の施設(同一の施設ＩＤ４１が設定された、複数台の無線傍受装置１)から送信されたＭＡＣハッシュ断片４７をグループ化するためである。その目的を達成できさえすれば、他の値をＳａｌｔＨａｓｈ４５に代わってＭＡＣハッシュ断片４７の紐付けに使用してもよい。例えば、処理S6において、Ｓａｌｔ応答部２１が、Ｓａｌｔ４３と、ビットマスク５０に加え、更にＳａｌｔ４３とは別の適当なランダム値(ただし、Ｓａｌｔ４３と同様に、施設ＩＤ４１と、現在時刻と、が同一であれば、同一の値となる)を、Ｓａｌｔ取得部１２に返信し、ＭＡＣハッシュ断片生成部１３は、当該ランダム値をＳａｌｔＨａｓｈ４５の代わりに処理S16にて使用してもよい。Ｓａｌｔ応答部２１はそのランダム値を適切な情報に対応付けてＤＢ２３に記憶しておけば、データ送信部１４から集計サーバ２にＭＡＣハッシュ断片にひもづけられたランダム値に基づいて、そのＭＡＣハッシュ断片のプロフィール(施設ＩＤ４１や、ＭＡＣアドレス取得を指示した時刻など)を知ることができる。
【００７７】
加えて、ＭＡＣＨａｓｈ４６とビットマスク５０との論理積演算(ビット同士のＡＮＤ)を、処理S15にて実施することにより、乱数シード５１を知りうる者、すなわち処理S3で、乱数生成部２２が返すＳａｌｔ４３の値を容易に検算できる者に対し、元のＭＡＣアドレス４４を隠蔽することができる。乱数シード５１を知りうる者には、集計サーバ２の管理者等が含まれる。
【００７８】
なぜなら、乱数生成部２２が使用する疑似乱数生成関数は仕様が公知であり、加えて施設ＩＤ４１と現在時刻４２とはＤＢ２３にて公開されうる情報であるから、攻撃者は、加えて乱数シード５１を知ることさえできれば、任意の時刻に施設ＩＤ４１を発信した無線傍受装置１に返送されるＳａｌｔ４３を容易に計算でき、ひいては前記のとおりＳａｌｔ４３のオクテット数に対し等差級数的にしか増大しない計算時間をもって、元のＭＡＣアドレス４４を導出できる。
【００７９】
但しここで、ＭＡＣＨａｓｈ４６の一部を消去(一部のビットの値を、強制的に０で上書き)することで、複数個の値が元のＭＡＣアドレス４４の候補たりうることとなる。つまり攻撃者は、ＭＡＣＨａｓｈ４６の元となったＭＡＣアドレス４４を一意に決定できなくなる。「元のＭＡＣアドレス４４たりうる値」の数は、２の「消去したビット数」乗個である。このように、処理S15を実施することで、無線端末３の保持者の匿名性を、本システムの管理者等、乱数シード５１を知りうる者に対しても担保でき、一層、本システムのセキュリティレベルを向上させることができる。
【００８０】
なお、ＭＡＣＨａｓｈ４６の一部を消去することで、当然、あるＳａｌｔ４３と、複数台の無線端末３から得られた、複数個の、それぞれ異なるＭＡＣアドレス４４とから、同一のＭＡＣハッシュ断片４７が、ＭＡＣハッシュ断片生成部１３により生成される場合がある。しかしながら、これはわずかな確率であり、一人一台無線端末３を所有していることを前提に人数をカウントすることによる誤差に比べれば、誤差として無視できる範囲と考えられる。
【００８１】
なお、例えば、公民館、体育館といった施設であれば、物理的に収容できる人数の最大値が、何百人程度であるか、もしくは何千人程度であるか、といった、大まかな推計は可能と考えられるため、本システムの管理者は、集計対象の施設の収容人数の規模を考慮し、ビットマスク５０の値(消去するビット数)を設定してもよい。また、Ｓａｌｔ応答部２１は、複数個のビットマスク５０を保持し、処理S6において、施設ＩＤ４１の値に応じ、異なるビットマスク５０を、Ｓａｌｔ取得部１２に返却してもよい。また、ビットマスク５０を使用する目的は、前述のとおり乱数シード５１を知りうる者に対し元のMACアドレス４４を推測困難とすることであるから、必ずしも集計サーバ２の管理者がビットマスク５０の値を設定し無線傍受装置１に対し提供する形態とする必要は無く、無線傍受装置１の管理者が無線傍受装置１にビットマスク５０の値を設定し、MACハッシュ断片生成部１３はその値を使用する形態としてもよい。
【００８２】
データ送信部１４は、ＭＡＣハッシュ断片生成部１３からの起動指示(S16)指示により起動する。起動の際、ＭＡＣハッシュ断片生成部１３から、引数として、1個以上の「単一のＳａｌｔＨａｓｈ４５に、一個以上のＭＡＣアドレス４４が紐付いた組」を受け取り(S16)、当該組を、集計サーバ２のデータ受信部２４に対し、ネットワークを介して送信する(S17)。なお前記ネットワークは、Ｓａｌｔ取得部１２が、処理S1にて、Ｓａｌｔ応答部２１との通信に使用したものを兼用できる。
【００８３】
集計サーバ２のデータ受信部２４は、無線傍受装置１のデータ送信部１４から、ＳａｌｔＨａｓｈ４５と、当該ＳａｌｔＨａｓｈ４５に紐付いた、1個以上のＭＡＣハッシュ断片４７との組、を受信するまで待機し、受信後、受信したＳａｌｔＨａｓｈ４５と、当該ＳａｌｔＨａｓｈ４５に紐付いた、1個以上のＭＡＣハッシュ断片４７との組、を、集計サーバ２のメモリに保存する(S18)。
【００８４】
ユニーク値カウント部２５は、データ受信部２４が、新たなＳａｌｔＨａｓｈ４５と、当該ＳａｌｔＨａｓｈ４５に紐付いた1個以上のＭＡＣハッシュ断片４７との組がメモリに保存されているかを、あらかじめ集計サーバ２の管理者等によって定められた周期で調べ、新たな組が保存されている場合、当該メモリ１０２に保存されている、「ＳａｌｔＨａｓｈ４５と、当該ＳａｌｔＨａｓｈ４５に紐付いた1個以上のＭＡＣハッシュ断片４７との組」をすべて読み込み(S19)、すべての組のうち同一のＳａｌｔＨａｓｈ４５を持つ組が含有する、すべてのＭＡＣハッシュ断片４７の集合の中に、ユニークな(一意な)値が、何個含まれているかを数える(S20)。以下、処理S20の動作の詳細を、図６を用いて説明する。
【００８５】
ユニーク値カウント部２５は、空の(データを何も含まない)連想配列Cを生成する(S20-1)。なお連想配列とは、プログラム言語における配列(データの集合)の一種である。
【００８６】
プログラム言語における配列は、通常添字により集合における何番目のデータであるかを指し示す。例えば、5個のデータを含む配列(仮に名称をAとする)の3番目のデータはA(3)のように表す。
【００８７】
一方で、連想配列は、連想配列内の個々のデータに紐付けられた「文字列」で、個々のデータを指し示す。例えば、1という数字(データ)を、文字列xに紐付けて記憶し、かつ2という数字(データ)を、文字列yに紐付けて記憶した連想配列(仮に、名称をCとする)では、2というデータは、C("y")のように表す。ここで、xやyのような文字列を、「キー」という。
【００８８】
連想配列の仕組みは、Ｊａｖａ(登録商標)、Ｐｅｒｌ(登録商標)、Ｃ＃(登録商標)等の、主要なプログラム言語に備えられている。
【００８９】
なお連想配列は、データとして、更に別の連想配列を格納でき、例えば、前記の連想配列C全体を、単一のデータの塊と見做し、"B"という文字をキーに、更に別の連想配列Pに格納したとすると、連想配列Cは、P("B")と表記でき、Cが含む、前記2というデータは、P("B")("y")のように表記できる。このような場合、連想配列Pを、親配列と呼び、連想配列Cを、子配列と呼ぶ。
【００９０】
次いでユニーク値カウント部２５は、「ＳａｌｔＨａｓｈ４５と、当該ＳａｌｔＨａｓｈ４５に紐付いた、1個以上のＭＡＣハッシュ断片４７との組」に対し、それぞれ、ループ処理S20-2を実施する。すなわち、ユニーク値カウント部２５は、当該組からＳａｌｔＨａｓｈ４５の値を読み出し、これを変数shに記憶し(S20-3)、連想配列Cにキーshを持つデータ、すなわちC("sh")が存在するか確認し(S20-4)、存在しない場合、連想配列Cに「空の連想配列」を、shをキーとするデータ、すなわちC("sh")として新規に作成し(S20-5)処理S20-6に進み、存在する場合、何もせず処理S20-6に進み、更に前記組が含むＭＡＣハッシュ断片４７の全てに対し、それぞれループ処理S20-6を実施する。すなわち、ＭＡＣハッシュ断片４７の値を読み出し、これを変数vに記憶し(S20-7)、値C("sh")、すなわち処理S20-5で作成した、子配列である空の連想配列に、1という数値を、キーvで作成する(S20-8)。言い換えると、C("sh")("v")に、値1を設定する。なお、既にC("sh")("v")に、値1が設定されていた場合、すなわち、既に同一の値を持つＭＡＣハッシュ断片４７に対し、処理S20-7乃至S20-8を実行済みの場合、S20-8を実施しないこととしてもよく、C("sh")("v")を、値1で、上書きしてもよい。以上で、ループ処理S20-6は終端する。
【００９１】
次いでユニーク値カウント部２５は、S20-2の完了後、当該組を、メモリ１０２から削除し、以上で、ループ処理S20-2は終端する。
【００９２】
次いでユニーク値カウント部２５は、Cの持つキーすべてに対し、以下のループ処理S20-10を実施する。すなわち、
ユニーク値カウント部２５は、キーshを、連想配列Cから読み(S20-11)、
値C("sh")、すなわち子配列である連想配列が持つ、キーの数を数え、当該数を、変数tに設定し(S20-12)、
ＤＢ２３に対し、「当該shの値を主キー(図４における、ＳａｌｔＨａｓｈ(T01))に持つ行の、ユニーク値の数を保存する項目(図４におけるT04)に、当該vの値を設定する」電文を送信する(S20-13)。なお、処理S20-13は、すなわち処理S21である。
【００９３】
以上で、ループ処理S20-10は終端する。
【００９４】
以上の処理の完了後、ＤＢ２３には、施設ＩＤ４１で示される施設毎に、ＭＡＣアドレス４４の重複を排除して、無線端末３の台数が記録される。
【００９５】
なお、施設によっては、施設管理者等が保有する、業務用携帯電話等が設置されている場合があり、これらの機器は、訪問者の数として計測したくない場合があると考えられる。このような場合に備え、ＤＢ２３には、補正数(図４におけるT05)という項目を設け、集計サーバ２の管理者等は、あらかじめこの項目に、施設ＩＤ４１ごとに、想定される、業務用携帯電話の台数等を登録しておき、ＤＢ２３が、無線端末３の台数として、ユニーク値の数(T04)から、補正数(T05)を除した値を返却できるようにしてもよい。
【００９６】
以上説明した通り、本実施例では、ＭＡＣアドレス４４にかかる情報を暗号化して集計装置２に渡して匿名性を保持するとともに、同じＭＡＣアドレス４４は暗号化後も同じデータとなるようにすることで、重複を排除して一意なユニーク値を数えることができる。
【実施例２】
【００９７】
図７を用いて、本発明の別の実施例を説明する。本実施例と実施例１との相違は、乱数生成部２２では、Ｓａｌｔ４３の生成に現在時刻４２を用いていないこと（Ｓ２、Ｓ３）、Ｓａｌｔ応答部２１はＳａｌｔＨａｓｈ５５の生成にＳａｌｔ４３と現在時刻４２を用いていること（Ｓ４）、Ｓａｌｔ応答部２１が生成したＳａｌｔＨａｓｈ５５が、無線傍受装置１のＳａｌｔ取得部１２やＭＡＣハッシュ断片生成部１３に送信されて、集計サーバ２と無線傍受装置１で共有されており、ＭＡＣハッシュ断片生成部１３は独自にＳａｌｔＨａｓｈ４５を作成しないことである。他は同様であり、詳細な説明は省略する。
【００９８】
本実施例では、Ｓａｌｔ４３は現在時刻４２を用いずに作成するので、無線傍受装置１ごとに異なる時刻にＳａｌｔ４３を作成しても、そのＭＡＣＨａｓｈ４６及びＭＡＣハッシュ断片４７は、ＭＡＣアドレス４４が同じならば同じになる。従って、異なる時刻に取得されたＭＡＣアドレスでも、ＭＡＣハッシュ断片４７の重複を検出でき、ユニーク値をカウントすることができる。ＭＡＣアドレス４４が取得された時刻はＳａｌｔＨａｓｈ５５とＤＢ２３内の現在時刻４２を対応させればわかる。集計サーバ２はその時刻に基づき、複数の無線傍受装置１から異なる時刻に取得されたＭＡＣアドレス４４による無線端末３を重複を排除してカウントするかどうかを決めることができる。実施例１でも、時間粒度指定５４により、どの程度まで時間差があってもカウント可能かは調整ができたが、その単位は、１時間や１分などに特定の値に限られていた。本実施例では、例えば差異が３時間以内ならば同じ時刻とみなして無線端末３数を集計するなど、自由に設定でき、無線傍受装置のＭＡＣアドレス取得周期が長い場合い有用である。
【実施例３】
【００９９】
図８、９を用いて、本発明の別の実施例を説明する。図８は、本実施例の構成例を示す機能ブロック及び動作例のシーケンスを示す図である。本実施例と実施例２との相違は、ＳａｌｔＨａｓｈ５６が、Ｓａｌｔ４３と現在時刻４２に加え無線傍受装置ＩＤ５７に基づいて作成されていることである。実施例１、２では、施設ＩＤまでしか用いていなかったため、その施設内のどの無線傍受装置１で取得したＭＡＣアドレス４４かわからなかった。しかしながら、本実施例では、どの無線傍受装置１で取得したかの情報がＳａｌｔＨａｓｈ５６に含まれているため、無線端末３のおおよその位置がわかる。ＤＢ２３には、ＳａｌｔＨａｓｈ５６の作成に用いた現在時刻４２や無線傍受装置ＩＤ５７がＳａｌｔＨａｓｈ５６にひも付けられて記憶されており、無線傍受装置１から送られてきたＳａｌｔＨａｓｈ５６をＤＢ２３に照合して、そのＭＡＣハッシュ断片４７にかかる無線傍受装置１や時刻を知ることができる。さらに、ＭＡＣアドレス４４の重複を検知することで、無線端末３の数のカウントに加えて、おおよその位置分布を算出することができる。他は同様であり、詳細な説明は省略する。
【０１００】
図９は、本実施例を説明するための図である。図９（ａ）は、無線傍受装置６１〜６３の無線傍受範囲を説明する施設内の平面図であり、図９（ｂ）は、ＭＡＣアドレスを取得した無線傍受装置と無線端末３の位置の関係を示す表である。
【０１０１】
各無線傍受装置６１〜６３の無線傍受範囲を示す円は、各装置６１〜６３を中心になるように描かれる。集計装置２のユニークカウント値は、無線傍受装置ＩＤを示唆するＳａｌｔＨａｓｈ５６によって判別できる。
【０１０２】
図９（ｂ）は、無線傍受装置６１〜６３が、あるＭＡＣハッシュ断片４７にかかるＭＡＣアドレス４４を受信できたかどうかを示す。○は受信可、×は受信不可を示し、「位置」は、そのＭＡＣアドレス４４にかかる無線端末３があると推定される図９（ａ）上の位置を示す。
【０１０３】
図９（ａ）において、無線傍受装置６１と６２に傍受され６３に傍受されないＭＡＣアドレスにかかる無線端末は、図９（ｂ）を参照してＢの領域付近に存在すると推定され、無線傍受装置６１〜６３のすべてに傍受されたＭＡＣアドレスにかかる無線端末は、同じくＧの領域付近に存在すると推定される。このようにＭＡＣアドレスを取得した無線傍受装置を集計サーバ２が取得しておき、その重複を検知可能にしておくことで、無線端末３の数に加えてその分布を算出することができる。
【符号の説明】
【０１０４】
１  無線傍受装置
１１  ＭＡＣアドレス抽出部
１２  Ｓａｌｔ取得部
１３  ＭＡＣハッシュ断片生成部
１４  データ送信部
２  集計サーバ
２１  Ｓａｌｔ応答部
２２  乱数生成部
２３  ＤＢ
２４  データ受信部
２５  ユニーク値カウント部
３  無線機器
４１  施設ＩＤ
４２  現在時刻
４３  Salt
４４  MACアドレス
４５  ＳａｌｔＨａｓｈ
４６  ＭＡＣＨａｓｈ
４７  MACハッシュ断片
４８  ＳａｌｔＨａｓｈ
５０  ビットマスク
５１  乱数シード
５２  電波ダンプ
５３  傍受時間
５４  時刻粒度指定
５５、５６  ＳａｌｔＨａｓｈ
【図１】
0006329841.tif 000002
【図２】
0006329841.tif 000003
【図３】
0006329841.tif 000004
【図４】
0006329841.tif 000005
【図５】
0006329841.tif 000006
【図６】
0006329841.tif 000007
【図７】
0006329841.tif 000008
【図８】
0006329841.tif 000009
【図９】
0006329841.tif 000010