(57)【特許請求の範囲】
【請求項１】
第１素数が第２素数の２倍に１を加えた数と等しくなるものとし、
１以上かつ前記第２素数未満の属性乱数を計算する属性乱数計算部と、
ｎを２以上の整数とし、
前記属性乱数の断片をｎ台の秘密計算装置間で分散保持する属性乱数断片分散保持部と、
秘密計算の素数パラメタを前記第２素数とし、
１以上かつ前記第２素数未満の乱数である中間乱数とその逆元の積が前記第２素数を除数として１を被除数とした剰余と等しくなり、前記逆元の断片が前記ｎ台の秘密計算装置間で分散保持されるものとし、
前記逆元と、前記属性乱数に基づき秘密計算によって検索乱数を求める検索乱数計算部と、
前記検索乱数の断片を前記ｎ台の秘密計算装置間で分散保持する検索乱数断片分散保持部と、
前記分散保持された検索乱数のデータ形式をビット情報に変換する形式変換部と、
秘密計算によって、前記検索乱数の各ビットにおける秘密計算の前記素数パラメタを前記第１素数に変換する素数パラメタ変換部と、
前記第１素数を除数とし、検索対象データに対して生成されたハッシュ値を前記中間乱数でべき乗した値を被除数とした剰余であるタグ生成引数と、前記検索乱数の各ビットの断片から、秘密計算によってタグを計算するタグ計算部を含む
秘密計算装置。
【請求項２】
ｎを２以上の整数とし、ｎ台の秘密計算装置と、データ登録装置とを含む秘匿検索システムであって、
前記秘密計算装置は、
第１素数が第２素数の２倍に１を加えた数と等しくなるものとし、
１以上かつ前記第２素数未満の属性乱数を計算する属性乱数計算部と、
前記属性乱数の断片を前記ｎ台の秘密計算装置間で分散保持する属性乱数断片分散保持部を含み、
前記データ登録装置は、
１以上かつ前記第２素数未満の中間乱数を生成する中間乱数生成部と、
前記中間乱数とその逆元の積が、前記第２素数を除数として１を被除数とした剰余と等しくなるように、前記逆元を計算する逆元計算部と、
前記逆元の断片を前記ｎ台の秘密計算装置間で分散保持する逆元断片分散保持部を含み、
前記秘密計算装置はさらに、
秘密計算の素数パラメタを前記第２素数とし、前記属性乱数と前記逆元に基づき、秘密計算によって検索乱数を求める検索乱数計算部と、
前記検索乱数の断片を前記ｎ台の秘密計算装置間で分散保持する検索乱数断片分散保持部と、
前記分散保持された検索乱数のデータ形式をビット情報に変換する形式変換部と、
秘密計算によって、前記検索乱数の各ビットにおける秘密計算の前記素数パラメタを前記第１素数に変換する素数パラメタ変換部を含み、
前記データ登録装置はさらに、
ハッシュ関数に基づいて検索対象データに対するハッシュ値を生成するハッシュ値生成部と、
前記第１素数を除数として、前記ハッシュ値を前記中間乱数でべき乗した値を被除数とした剰余をタグ生成引数として計算する引数計算部と、
前記タグ生成引数を前記ｎ台の秘密計算装置に送信する引数送信部を含み、
前記秘密計算装置はさらに、
前記タグ生成引数と前記検索乱数の各ビットの断片から、秘密計算によってタグを計算するタグ計算部を含む秘匿検索システム。
【請求項３】
第１素数が第２素数の２倍に１を加えた数と等しくなるものとし、
１以上かつ前記第２素数未満の属性乱数を計算する属性乱数計算ステップと、
ｎを２以上の整数とし、
前記属性乱数の断片をｎ台の秘密計算装置間で分散保持する属性乱数断片分散保持ステップと、
秘密計算の素数パラメタを前記第２素数とし、
１以上かつ前記第２素数未満の乱数である中間乱数とその逆元の積が前記第２素数を除数として１を被除数とした剰余と等しくなり、前記逆元の断片が前記ｎ台の秘密計算装置間で分散保持されるものとし、
前記逆元と、前記属性乱数に基づき秘密計算によって検索乱数を求める検索乱数計算ステップと、
前記検索乱数の断片を前記ｎ台の秘密計算装置間で分散保持する検索乱数断片分散保持ステップと、
前記分散保持された検索乱数のデータ形式をビット情報に変換する形式変換ステップと、
秘密計算によって、前記検索乱数の各ビットにおける秘密計算の前記素数パラメタを前記第１素数に変換する素数パラメタ変換ステップと、
前記第１素数を除数とし、検索対象データに対して生成されたハッシュ値を前記中間乱数でべき乗した値を被除数とした剰余であるタグ生成引数と、前記検索乱数の各ビットの断片から、秘密計算によってタグを計算するタグ計算ステップを含む
秘密計算方法。
【請求項４】
ｎを２以上の整数とし、ｎ台の秘密計算装置と、データ登録装置が実行する秘匿検索方法であって
前記秘密計算装置は、
第１素数が第２素数の２倍に１を加えた数と等しくなるものとし、
１以上かつ前記第２素数未満の属性乱数を計算する属性乱数計算ステップと、
前記属性乱数の断片を前記ｎ台の秘密計算装置間で分散保持する属性乱数断片分散保持ステップを実行し、
前記データ登録装置は、
１以上かつ前記第２素数未満の中間乱数を生成する中間乱数生成ステップと、
前記中間乱数とその逆元の積が、前記第２素数を除数として１を被除数とした剰余と等しくなるように、前記逆元を計算する逆元計算ステップと、
前記逆元の断片を前記ｎ台の秘密計算装置間で分散保持する逆元断片分散保持ステップを実行し、
前記秘密計算装置はさらに、
秘密計算の素数パラメタを前記第２素数とし、前記属性乱数と前記逆元に基づき、秘密計算によって検索乱数を求める検索乱数計算ステップと、
前記検索乱数の断片を前記ｎ台の秘密計算装置間で分散保持する検索乱数断片分散保持ステップと、
前記分散保持された検索乱数のデータ形式をビット情報に変換する形式変換ステップと、
秘密計算によって、前記検索乱数の各ビットにおける秘密計算の前記素数パラメタを前記第１素数に変換する素数パラメタ変換ステップを実行し、
前記データ登録装置はさらに、
ハッシュ関数に基づいて検索対象データに対するハッシュ値を生成するハッシュ値生成ステップと、
前記第１素数を除数として、前記ハッシュ値を前記中間乱数でべき乗した値を被除数とした剰余をタグ生成引数として計算する引数計算ステップと、
前記タグ生成引数を前記ｎ台の秘密計算装置に送信する引数送信ステップを実行し、
前記秘密計算装置はさらに、
前記タグ生成引数と前記検索乱数の各ビットの断片から、秘密計算によってタグを計算するタグ計算ステップを実行する秘匿検索方法。
【請求項５】
コンピュータを、請求項１に記載の秘密計算装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号応用技術に関し、特に入力データ（検索キーおよび検索対象のデータ）をデータの保管者に対して明かすことなく完全一致検索を行う秘密計算装置、秘匿検索システム、秘密計算方法、秘匿検索方法、プログラムに関する。
【背景技術】
【０００２】
暗号化されたデータを復元することなく演算結果を得る方法として、秘密計算と呼ばれる方法がある。この秘密計算は、例えば非特許文献１に開示されている。非特許文献１に記載された秘密計算では、まず、入力された数値を断片と呼ばれるデータに変換してｎ台の秘密計算装置に保持させる。この手順を、以下「断片を分散保持させる」と表現する。断片は、乱数によって秘密計算装置ごとに変わる値となっており、閾値以下の個数の断片からは元の数値を推測することができない。すなわち元の数値は断片に変換されているため、秘匿化されている。非特許文献１に開示された秘密計算では、さらに、入力された数値の断片を用いて、加減算、乗算、大小比較、データ形式変換（整数、二進数）の結果の断片を計算し、ｎ台の秘密計算装置に保持させることができる。ただしこれらの演算は、秘密計算のパラメタとして定められる素数をＰとして、有限体ＧＦ（Ｐ）の上で行われる。データベースのレコードを秘匿した状態で、完全一致検索および区間検索を実行する秘密計算を利用した方法として、特許文献１に記載された方法がある。特許文献１の方法では、まず、検索する属性について秘匿した状態でソートを行う。検索時には、ソート済みの秘匿化データに対して、秘密計算によるランダムスライドおよび大小比較を用いて二分探索を行う。データベースに蓄積されたレコード数をｍとするとき、ランダムスライドおよび二分探索に必要な秘密計算装置間の通信量は、それぞれＯ（ｍ）、Ｏ（ｌｏｇ（ｍ））である。ただし、秘密計算装置の台数ｎおよびレコードあたりのデータサイズを定数とする。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１５０７６４号公報
【非特許文献】
【０００４】
【非特許文献１】Ivan Damgard, Matthias Fitzi, Eike Kiltz, Jesper Buus Nielsen, and Thomas Toft, “Unconditionally Secure Constant-Rounds Multi-party Computation for Equality, Comparison, Bits and Exponentiation,” TCC 2006, LNCS 3876, pp. 285-304, 2006.
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来の技術では、データベースに蓄積されたレコード件数ｍが増えるにつれて、検索時に必要な秘密計算装置間の通信量が増加し、検索時間が増大する要因となっていた。従来の方式では、検索時に秘密計算を用いた二分探索を行うため、データベースのレコード数ｍに対して、秘密計算装置間の通信量がＯ（ｌｏｇ（ｍ））となり、データベースに蓄積されたレコード数ｍが増加するにつれて通信量が増大する。
【０００６】
そこで、本発明では、装置間の通信量が削減される秘密計算装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の秘密計算装置は、属性乱数計算部と、属性乱数断片分散保持部と、検索乱数計算部と、検索乱数断片分散保持部と、形式変換部と、素数パラメタ変換部と、タグ計算部を含む。
【０００８】
第１素数が第２素数の２倍に１を加えた数と等しくなるものとする。属性乱数計算部は、１以上かつ第２素数未満の属性乱数を計算する。属性乱数断片分散保持部は、ｎを２以上の整数とし、属性乱数の断片をｎ台の秘密計算装置間で分散保持する。秘密計算の素数パラメタを第２素数とし、１以上かつ第２素数未満の乱数である中間乱数とその逆元の積が第２素数を除数として１を被除数とした剰余と等しくなり、逆元の断片がｎ台の秘密計算装置間で分散保持されるものとする。検索乱数計算部は、逆元と、属性乱数に基づき秘密計算によって検索乱数を求める。検索乱数断片分散保持部は、検索乱数の断片をｎ台の秘密計算装置間で分散保持する。形式変換部は、分散保持された検索乱数のデータ形式をビット情報に変換する。素数パラメタ変換部は、秘密計算によって、検索乱数の各ビットにおける秘密計算の素数パラメタを第１素数に変換する。タグ計算部は、第１素数を除数とし、検索対象データに対して生成されたハッシュ値を中間乱数でべき乗した値を被除数とした剰余であるタグ生成引数と、検索乱数の各ビットの断片から、秘密計算によってタグを計算する。
【発明の効果】
【０００９】
本発明の秘密計算装置によれば、装置間の通信量が削減される。
【図面の簡単な説明】
【００１０】
【図１】実施例１の秘匿検索システムの概要を示すブロック図。
【図２】実施例１のデータ登録装置のデータ登録部の構成を示すブロック図。
【図３】実施例１のデータ検索装置のデータ検索部の構成を示すブロック図。
【図４】実施例１のデータ登録装置の第１検索乱数前処理部の構成を示すブロック図。
【図５】実施例１のデータ検索装置の第２検索乱数前処理部の構成を示すブロック図。
【図６】実施例１の秘密計算装置の属性乱数生成部の構成を示すブロック図。
【図７】実施例１の秘密計算装置の検索乱数生成部の構成を示すブロック図。
【図８】実施例１の秘密計算装置のタグ生成部の構成を示すブロック図。
【図９】実施例１の秘密計算装置の検索部の構成を示すブロック図。
【図１０】実施例１の秘匿検索システムの属性乱数生成動作を示すシーケンス図。
【図１１】実施例１の秘匿検索システムの検索乱数生成動作を示すシーケンス図。
【図１２】実施例１の秘匿検索システムの検索乱数生成動作を示すシーケンス図。
【図１３】実施例１の秘匿検索システムのデータ検索時のタグ計算動作を示すシーケンス図。
【図１４】実施例１の秘匿検索システムのデータ検索時のタグ計算動作を示すシーケンス図。
【図１５】実施例１の秘匿検索システムのデータ登録時のタグ計算動作を示すシーケンス図。
【図１６】実施例１の秘匿検索システムのデータ検索動作を示すシーケンス図。
【発明を実施するための形態】
【００１１】
本発明では、検索対象データの登録時に識別用のタグを付与し、タグをすべての秘密計算装置で共有する。検索時には、検索したいデータ（例えば「電話番号：１２３−４５６−７８９」など）からタグを生成し、予め付与されたタグと比較することで検索を実現する。タグの生成には秘密計算が必要であるが、タグは元のデータに対して一意に定まるため、予め付与されたタグとの比較には一般的な検索（例えばインデックスによる検索）を用いることができる。このように、生成されたタグと予め付与されたタグとの比較は一般的な検索で実現可能であるため、以下、本発明の実施例として、タグを生成するシステムについて具体的に説明する。なお、同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【実施例１】
【００１２】
以下、図１を参照して本発明の実施例１の秘匿検索システムの概要について説明する。図１は、実施例１の秘匿検索システム１０００の概要を示すブロック図である。図１に示すように、本実施例の秘匿検索システム１０００は、データ登録装置１と、ｎ台（ｎは２以上の整数）の秘密計算装置２−１、２−２、…、２−ｎと、データ検索装置３を含む。以下、秘密計算装置２−１、２−２、…、２−ｎを代表して表す時は、秘密計算装置２と表現し、秘密計算装置２について説明した事項は、秘密計算装置２−１、２−２、…、２−ｎの全てにおいて該当する事項であるものとする。データ登録装置１と、秘密計算装置２と、データ検索装置３はネットワーク９を通じて通信可能に無線、あるいは有線で接続されている。本実施例においては、データの登録をデータ登録装置１が実行し、データの検索をデータ検索装置３が実行するものとし、データの登録と検索を別々の装置で行う構成を示したが、登録と検索が同じ装置でも実現可能であり、それぞれ複数の装置があっても構わない。
【００１３】
データ登録装置１は、データ登録部１１、第１検索乱数前処理部１２を含む。秘密計算装置２−１、２−２、…、２−ｎは、属性乱数生成部２１と、検索乱数生成部２２と、タグ生成部２３と、保管部２４と、検索部２５を含む。データ検索装置３は、データ検索部３１と、第２検索乱数前処理部３２を含む。
【００１４】
図２、図３、図４、図５を参照して、データ登録装置１、データ検索装置３の構成の詳細について説明する。図２は本実施例のデータ登録装置１のデータ登録部１１の構成を示すブロック図である。図３は本実施例のデータ検索装置３のデータ検索部３１の構成を示すブロック図である。図４は本実施例のデータ登録装置１の第１検索乱数前処理部１２の構成を示すブロック図である。図５は本実施例のデータ検索装置３の第２検索乱数前処理部３２の構成を示すブロック図である。図２に示すようにデータ登録装置１のデータ登録部１１は、属性乱数生成要求部１１０と、第１検索乱数生成要求部１１１と、第１ハッシュ値生成部１１２と、第１引数計算部１１３と、第１引数送信部１１４と、登録データ断片生成部１１５と、登録データ断片送信部１１６を含む。図３に示すようにデータ検索装置３のデータ検索部３１は、第２検索乱数生成要求部３１１と、第２ハッシュ値生成部３１２と、第２引数計算部３１３と、第２引数送信部３１４を含む。図４に示すように、データ登録装置１の第１検索乱数前処理部１２は、第１中間乱数生成部１２１と、第１逆元計算部１２２と、第１逆元断片分散保持部１２３と、第１完了通知部１２４を含む。図５に示すように、データ検索装置３の第２検索乱数前処理部３２は、第２中間乱数生成部３２１と、第２逆元計算部３２２と、第２逆元断片分散保持部３２３と、第２完了通知部３２４を含む。
【００１５】
以下、図６、図７、図８、図９を参照して秘密計算装置２の構成の詳細について説明する。図６は本実施例の秘密計算装置２の属性乱数生成部２１の構成を示すブロック図である。図７は本実施例の秘密計算装置２の検索乱数生成部２２の構成を示すブロック図である。図８は本実施例の秘密計算装置２のタグ生成部２３の構成を示すブロック図である。図９は本実施例の秘密計算装置２の検索部２５の構成を示すブロック図である。図６に示すように秘密計算装置２の属性乱数生成部２１は、素数生成部２１１と、属性乱数計算部２１２と、属性乱数断片分散保持部２１３と、属性乱数生成完了通知部２１４を含む。図７に示すように秘密計算装置２の検索乱数生成部２２は、検索乱数計算部２２１と、検索乱数断片分散保持部２２２と、形式変換部２２３と、素数パラメタ変換部２２４と、検索乱数生成完了通知部２２５を含む。図８に示すように秘密計算装置２のタグ生成部２３は、タグ計算部２３１と、タグ保持部２３２と、タグ登録完了通知部２３３を含む。図９に示すように秘密計算装置２の検索部２５は、データ要求部２５１と、データ取得部２５２と、検索実行部２５３と、検索結果送信部２５４を含む。なお、本実施例では秘密計算装置２内に素数生成部２１１を含む構成としたが、これに限られず、素数生成部２１１は、データ登録装置１のデータ登録部１１内に含まれることとしてもよい。
【００１６】
タグの生成には、事前に二種類の乱数を準備する必要がある。以下、＜属性乱数生成動作＞、＜検索乱数生成動作＞、＜データ検索時のタグ計算動作＞、＜データ登録時のタグ計算動作（登録データの断片の分散保持）＞、＜データ検索動作＞について順に説明する。＜属性乱数生成動作＞については、検索対象の属性ごとに実行する必要がある。＜検索乱数生成動作＞については、一回のタグ生成ごとに必要になるが、予め検索乱数を生成して蓄積しておくことが可能である。予め検索乱数を蓄積しておけば、検索時に＜検索乱数生成動作＞の処理を省くことができるため、タグ生成時の効率を上げることができる。以下、ｎ＝３を例として上述の各動作について説明する。
【００１７】
＜属性乱数生成動作＞
図１０を参照して本実施例の秘匿検索システム１０００の属性乱数生成動作について説明する。図１０は本実施例の秘匿検索システム１０００の属性乱数生成動作を示すシーケンス図である。図１０に示すように、属性乱数が生成済みでない場合（図１０のＮＯの枠内参照）、データ登録装置１のデータ登録部１１の属性乱数生成要求部１１０は、ｎ台の秘密計算装置間２−１、２−２、…、２−ｎに属性乱数生成要求を送信する（Ｓ１１０）。秘密計算装置２の属性乱数生成部２１の素数生成部２１１は、第１素数ｐが第２素数ｑの２倍に１を加えた数と等しくなるように（ｐ＝２ｑ＋１）、第１素数ｐ、第２素数ｑを生成する（Ｓ２１１）。なお、素数生成部２１１が秘密計算装置２内ではなく、データ登録装置１のデータ登録部１１内に含まれる場合には、秘密計算装置２はステップＳ２１１を実行しない。この場合、秘密計算装置２の属性乱数生成部２１は、データ登録装置１のデータ登録部１１内の素数生成部２１１から第１素数ｐ、第２素数ｑを取得する。属性乱数生成部２１の属性乱数計算部２１２は、秘密計算により、１以上かつ第２素数ｑ未満の属性乱数ｒ（ｒは整数）を計算する（Ｓ２１２）。属性乱数生成部２１の属性乱数断片分散保持部２１３は、属性乱数ｒの断片をｎ台の秘密計算装置間で分散保持する（Ｓ２１３）。ステップＳ２１２、Ｓ２１３の具体的な方法は、例えば参考非特許文献１の２章（Joint Random Non-Zero Sharing）に開示されている。属性乱数生成部２１の属性乱数生成完了通知部２１４は、データ登録装置１のデータ登録部１１に属性乱数生成の完了通知を送信する（Ｓ２１４）。
（参考非特許文献１）Naoto Kiribuchi, Ryo Kato, Takashi Nishide, Tsukasa Endo, and Hiroshi Yoshiura, “Accelerating Multiparty Computation by Efficient Random Number Bitwise-Sharing Protocols,” WISA 2011, LNCS 7115, pp. 187-202, 2012.
【００１８】
＜検索乱数生成動作＞
図１１、図１２を参照して本実施例の秘匿検索システム１０００の検索乱数生成動作について説明する。図１１、図１２は本実施例の秘匿検索システム１０００の検索乱数生成動作を示すシーケンス図である。図１１に示すように、検索乱数が生成済みでない場合（図１１のＮＯの枠内参照）、データ登録装置１のデータ登録部１１の第１検索乱数生成要求部１１１は、第１検索乱数前処理部１２に検索乱数の生成要求を送信する（Ｓ１１１）。データ登録装置１の第１検索乱数前処理部１２の第１中間乱数生成部１２１は、１以上かつ第２素数ｑ未満の中間乱数Ｒを生成する（Ｓ１２１）。第１検索乱数前処理部１２の第１逆元計算部１２２は、中間乱数Ｒとその逆元Ｒ−１の積が、第２素数ｑを除数として１を被除数とした剰余と等しくなるように（Ｒ×Ｒ−１＝１  ｍｏｄ  ｑ）、中間乱数Ｒの逆元Ｒ−１を計算する（Ｓ１２２）。第１検索乱数前処理部１２の第１逆元断片分散保持部１２３は、逆元Ｒ−１の断片をｎ台の秘密計算装置間で分散保持する（Ｓ１２３）。
【００１９】
秘密計算装置２の検索乱数生成部２２の検索乱数計算部２２１は、秘密計算の素数パラメタＰを第２素数ｑとし、属性乱数ｒと前記逆元Ｒ−１に基づき、秘密計算によって検索乱数ｒ’＝ｒ×Ｒ−１を求める（Ｓ２２１）。検索乱数生成部２２の検索乱数断片分散保持部２２２は、検索乱数ｒ’の断片をｎ台の秘密計算装置間で分散保持する（Ｓ２２２）。検索乱数生成部２２の形式変換部２２３は、分散保持された検索乱数ｒ’のデータ形式を整数から二進数（ビット情報）に変換する（Ｓ２２３）。ステップＳ２２３の具体的な方法として、例えば非特許文献１の３章に記載された方法がある。検索乱数生成部２２の素数パラメタ変換部２２４は、秘密計算によって、検索乱数ｒ’の各ビットにおける秘密計算の素数パラメタＰを第２素数ｑから第１素数ｐに変換する（Ｓ２２４）。ステップＳ２２４の具体的な方法として、例えば参考非特許文献２の５．２節（Conversion between bit shares）に記載された方法がある。検索乱数生成部２２の検索乱数生成完了通知部２２５は、データ登録装置１の第１検索乱数前処理部１２に検索乱数生成の完了通知を送信する（Ｓ２２５）。データ登録装置１の第１検索乱数前処理部１２の第１完了通知部１２４は、検索乱数生成の完了通知を受信した場合に、データ登録部１１に検索乱数生成の完了通知を送信する（Ｓ１２４）。
（参考非特許文献２）Aleksandr Yampolskiy, “Efficient Cryptographic Tools for Secure Distributed Computing,” PhD Thesis, Yale University, 2006.
【００２０】
データ検索装置３における検索乱数生成動作は、前述同様である。図１２に示すように、検索乱数生成動作は図１１と同じように実行される。具体的には、データ検索部３１とデータ登録部１１の動作、第２検索乱数前処理部３２と第１検索乱数前処理部１２の動作がそれぞれ同じである。従って、第１検索乱数生成要求部１１１と第２検索乱数生成要求部３１１の動作、第１中間乱数生成部１２１と第２中間乱数生成部３２１の動作、第１逆元計算部１２２と第２逆元計算部３２２の動作、第１逆元断片分散保持部１２３と第２逆元断片分散保持部３２３の動作、第１完了通知部１２４と第２完了通知部３２４の動作がそれぞれ同じである。
【００２１】
＜データ検索時のタグ計算動作＞
図１３、図１４を参照して本実施例の秘匿検索システム１０００のデータ検索時のタグ計算動作について説明する。図１３、図１４は本実施例の秘匿検索システム１０００のデータ検索時のタグ計算動作を示すシーケンス図である。検索したいデータをｘと表す。
図１３に示すように、データ登録装置１のデータ登録部１１の第１ハッシュ値生成部１１２は、暗号学的ハッシュ関数、例えばＳＨＡ−２５６に基づいて検索対象データｘに対するハッシュ値ｗを生成する（Ｓ１１２）。データ登録部１１の第１引数計算部１１３は、第１素数ｐを除数として、ハッシュ値ｗを中間乱数Ｒでべき乗した値（ｗＲ）を被除数とした剰余をタグ生成引数ｃとして計算する（ｃ＝ｗＲ  ｍｏｄ  ｐ、Ｓ１１３）。データ登録部１１の第１引数送信部１１４は、タグ生成引数ｃをｎ台の秘密計算装置２−１、２−２、…、２−ｎに送信する（Ｓ１１４）。
【００２２】
秘密計算装置２のタグ生成部２３のタグ計算部２３１は、タグ生成引数ｃと検索乱数ｒ’の各ビットの断片から、秘密計算によってタグｙ＝ｃｒ’を計算する（Ｓ２３１）。具体的な方法として、例えば参考非特許文献２の５．６．１節に記載された方法がある。タグ生成部２３のタグ保持部２３２は、ｙをタグとして保管部２４に保持する（Ｓ２３２）。タグ生成部２３のタグ登録完了通知部２３３は、データ登録装置１のデータ登録部１１にタグ登録の完了通知を送信する（Ｓ２３３）。
【００２３】
データ検索装置３におけるデータ検索時のタグ計算動作は、前述同様である。図１４に示すように、データ検索時のタグ計算動作は図１３と同じように実行される。具体的には、データ検索部３１とデータ登録部１１の動作が同じである。従って、第１ハッシュ値生成部１１２と第２ハッシュ値生成部３１２の動作、第１引数計算部１１３と第２引数計算部３１３の動作、第１引数送信部１１４と第２引数送信部３１４の動作がそれぞれ同じである。
【００２４】
＜データ登録時のタグ計算動作（登録データの断片の分散保持）＞
データ登録時にも同じ方法によってタグを生成し、対応する断片にタグを付与する。図１５を参照して具体的に説明する。図１５は本実施例の秘匿検索システム１０００のデータ登録時のタグ計算動作を示すシーケンス図である。本明細書では本項が＜属性乱数生成動作＞の後に記載されているが、これに限らず、これらの実行の順序が逆になってもよい。図１５に示すように、データ登録装置１のデータ登録部１１の登録データ断片生成部１１５は、登録データの断片を生成する（Ｓ１１５）。データ登録部１１の登録データ断片送信部１１６は、登録データの断片をｎ台の秘密計算装置２−１、２−２、…、２−ｎに送信する（Ｓ１１６）。秘密計算装置２のタグ生成部２３のタグ計算部２３１は、前述同様にタグを計算する（Ｓ２３１Ａ）。タグ生成部２３のタグ保持部２３２は、前述同様、タグを保管部２４に保持する（Ｓ２３２Ａ）。タグ生成部２３のタグ登録完了通知部２３３は、前述同様、データ登録装置１のデータ登録部１１に断片登録の完了通知を送信する（Ｓ２３３Ａ）。「登録データの断片の分散保持」については、タグの生成とは別の処理であり、背景技術の欄で説明した秘密計算における「入力された数値を断片と呼ばれるデータに変換してｎ台の秘密計算装置に保持させる」部分を指す。
【００２５】
＜データ検索動作＞
検索時には、検索したいデータからタグを生成する。検索したいデータと登録したデータが同じならばタグも同じになるため、予め付与されたタグと検索時に生成したタグを比較し、一般的な検索（例えばハッシュ値探索）により検索が可能になる。図１６を参照して具体的に説明する。図１６は本実施例の秘匿検索システム１０００のデータ検索動作を示すシーケンス図である。図１６のシーケンスは、図１４のシーケンスに続けて実行される。図１６に示すように、秘密計算装置２の検索部２５のデータ要求部２５１は、タグｙを参照して、検索対象データの出力を保管部２４に要求する（Ｓ２５１）。検索部２５のデータ取得部２５２は、保管部２４から検索対象データを取得する（Ｓ２５２）。検索実行部２５３は、検索を実行する（Ｓ２５３）。検索部２５の検索結果送信部２５４は、検索結果をデータ検索装置３のデータ検索部３１に送信する（Ｓ２５４）。
【００２６】
本実施例の秘匿検索システム１０００、データ登録装置１、秘密計算装置２、データ検索装置３のいずれかによれば、検索時に必要な秘密計算装置間の通信がタグ生成に関する秘密計算部分だけであるため、従来Ｏ（ｌｏｇ（ｍ））であった通信量がレコード数ｍによらずＯ（１）に削減される。
【００２７】
上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【００２８】
また、上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。
【００２９】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【００３０】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【００３１】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。
【００３２】
なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【図１】
0005937556.tif 000002
【図２】
0005937556.tif 000003
【図３】
0005937556.tif 000004
【図４】
0005937556.tif 000005
【図５】
0005937556.tif 000006
【図６】
0005937556.tif 000007
【図７】
0005937556.tif 000008
【図８】
0005937556.tif 000009
【図９】
0005937556.tif 000010
【図１０】
0005937556.tif 000011
【図１１】
0005937556.tif 000012
【図１２】
0005937556.tif 000013
【図１３】
0005937556.tif 000014
【図１４】
0005937556.tif 000015
【図１５】
0005937556.tif 000016
【図１６】
0005937556.tif 000017