(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0014】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一又は相当する部分には、同一符号を付している。実施の形態の説明において、同一又は相当する部分については、その説明を適宜省略又は簡略化する。
【0015】
実施の形態1.
本実施の形態では、高安全かつ効率的な秘匿部分一致検索技術を開示する。
以下、本実施の形態の概要について説明する。
図1は、本実施の形態に係る秘匿検索システム100の構成を示すブロック図である。
図1に示すように、秘匿検索システム100は、鍵生成装置200と、複数の登録装置300と、複数の検索装置400と、管理装置500とを備える。
【0016】
<***構成の説明***>
秘匿検索システム100は、複数の鍵生成装置200を備えていてもよい。秘匿検索システム100は、1つの登録装置300のみを備えていてもよい。秘匿検索システム100は、1つの検索装置400のみを備えていてもよい。秘匿検索システム100は、複数の管理装置500を備えていてもよい。秘匿検索システム100は、鍵生成装置200と、複数の登録装置300と、複数の検索装置400と、管理装置500とそれぞれインターネット101を経由して接続されず、同じ企業内に敷設されたLAN(Local・Area・Network)内に設置されていてもよい。インターネット101は、鍵生成装置200と、複数の登録装置300と、複数の検索装置400と、管理装置500とを接続する通信路である。インターネット101は、ネットワークの例である。インターネット101の代わりに、他の種類のネットワークが用いられてもよい。
【0017】
鍵生成装置200は、暗号化に利用する鍵を作成し、インターネット101を介して、複数の登録装置300と、複数の検索装置400とへ鍵を送信する。なお、この鍵は、インターネット101を介さず、郵送などで直接的に、複数の登録装置300と、複数の検索装置400とへ送信してもよい。
【0018】
登録装置300は、例えば、パーソナルコンピュータである。登録装置300は、保管暗号化データを管理装置500に登録する登録端末として動作するコンピュータである。登録装置300は、暗号化装置及び登録装置として機能する。即ち、登録装置300は、保管暗号化データを生成し、保管暗号化データの保管を管理装置500に要求する。登録装置300は、削除要求装置として機能する。即ち、登録装置300は、管理装置500に対して、保管されている保管暗号化データの削除を要求する。
【0019】
検索装置400は、例えば、パーソナルコンピュータである。検索装置400は、検索暗号化データを管理装置500に送信し、その後管理装置500から暗号化検索結果を受信し、暗号化検索結果を出力するコンピュータである。検索装置400は、検索要求装置として機能する。即ち、検索装置400は、暗号化検索データを管理装置500に送信して保管暗号化データと検索暗号化データの照合を要求する。検索装置400は、出力装置として機能する。即ち、検索装置400は、管理装置500から返信される検索結果を出力する。
【0020】
管理装置500は、登録装置300によって作成された保管暗号化データを保管する大容量の記録媒体を持つ装置である。管理装置500は、保管装置として機能する。即ち、管理装置500は、登録装置300から保管暗号化データの保管の要求があれば、保管暗号化データを保管する。管理装置500は、検索装置として機能する。即ち、管理装置500は、検索装置400からの検索の要求があれば、保管暗号化データと検索暗号化データを照合し、検索結果を検索装置400に送信する。管理装置500は、削除装置として機能する。即ち、管理装置500は、登録装置300から保管暗号化データの削除の要求があれば、保管している保管暗号化データを削除する。
なお、同じパーソナルコンピュータ内に、鍵生成装置200、登録装置300、検索装置400のいずれかが同時に含まれていてもよい。
なお、保管暗号化データ及び検索暗号化データは、いずれも暗号化されている。鍵を持たない登録装置300と検索装置400以外は、保管暗号化データや検索暗号化データから有益な情報を得ることは困難である。
【0021】
以下、本実施の形態の構成について説明する。
図1に示したように、秘匿検索システム100は、鍵生成装置200と、登録装置300と、検索装置400と、管理装置500とを備える。
以下では、鍵生成装置200の構成、登録装置300の構成、検索装置400の構成、管理装置500の構成について順番に説明する。
【0022】
図2は、鍵生成装置200の構成を示すブロック図である。
図2に示すように、鍵生成装置200は、鍵生成部201と、パラメーター生成部202と、送信部203とを備える。図示していないが、鍵生成装置200は、鍵生成装置200の各部で使用されるデータを記憶する記録媒体を備える。
【0023】
鍵生成部201は、データを暗号化や復号するための鍵Kを生成する。鍵Kは登録装置300と検索装置400とに保管される秘密情報であるため、厳重に生成される。なお、ここでは共通鍵暗号技術を用いて説明しているが、公開鍵暗号技術を用いてもよい。
パラメーター生成部202は、データの暗号化や、データの照合時に必要なパラメーターを生成する。例えば、パラメーターとして、登録データをいくつかの文字列に分割するときの最大長Lがそれにあたる。なお、Lは0より大きい整数である。また、Lは秘密情報ではないため、公に公開されていても構わない。
送信部203は、鍵生成部201で生成された鍵Kを、登録装置300と、検索装置400とへ送信し、また、パラメーター生成部で生成されたパラメーターLを、登録装置300と、管理装置500とへ送信する。
【0024】
図3は、登録装置300の構成を示すブロック図である。
図3に示すように、登録装置300は、受信部301と、鍵保管部302と、パラメーター保管部303と、入力部304と、データ分割部305と、部分文字列生成部306と、位置情報割当部307と、暗号化部308と、送信部309とを備える。図示していないが、登録装置300は、登録装置300の各部で使用されるデータを記憶する記録媒体を備える。
【0025】
受信部301は、鍵生成装置200から送信されてきた鍵KとパラメーターLとを受信する。鍵保管部302は、受信部301から受け取った鍵Kを保管する。パラメーター保管部303は、受信部301から受け取ったパラメーターLを保管する。
【0026】
入力部304は、データ登録者から入力された保管データとデータ名を受け取る。なお、本実施の形態では、保管データD、データ名をID(D)として説明する。もし、データ登録者からデータ名の入力がなければ、入力部304は、入力された保管データDのデータ名ID(D)に乱数を割り当ててもよいし、他の保管データのデータ名と重複しないように0より大きい整数の値を順に割り当ててもよい。データ名のID(D)は、保管データDを識別する識別子である。
また、入力部304は、データ登録者から削除したい保管暗号化データについての削除データ名を受け取る。削除データ名は、例えば、登録時に入力したデータ名や、登録した時刻、データ登録者の名前など、保管データを特定できるものなら何でもよい。
【0027】
データ分割部305は、パラメーター保管部303からパラメーターLを読み出し、入力部304から受け取った保管データDを(w
1,・・・,w
L)と分割する。
ただし、各wi(1≦i≦L)は、データを1文字や複数文字ずつ順に分割したものでもいいし、単語単位で分割してもよい。また、データDを(w
1,...,w
k)とk≦Lとなるようにデータ分割してもよい。もし、データをどのように分割しても分割数がL未満となってしまう場合は、L未満のままでもよいし、「*」やnullなどの特殊文字を使って足りない文字数を補って、長さをLとなるように調整しもよい。以降では、分割数がLとした時を説明するが、L未満でもほぼ同様な手順を実施すればよい。
【0028】
部分文字列生成部306は、データ分割部305から受け取った
分割データ(w
1,・・・,w
L)から、次のような集合Aを生成する。
A={{(w
1),(w
1w
2),・・・,(w
1・・・w
L)},{(w
2),(w
2w
3),・・・,(w
2・・・w
L)},・・・,{(w
L)}}。
以降では、集合Aを部分文字列集合と呼ぶことにする。
【0029】
位置情報割当部307は、部分文字列生成部306から受け取った部分文字列集合Aの中の各部分文字列に対して次のように位置情報を割り当てて、集合Bを生成する。
B={(1,w
1),(1,w
1w
2),・・・,(1,w
1・・・w
L)},{(2,w
2),(2,w
2w
3),・・・,(2,w
2・・・w
L)},・・・,{(L,w
L)}}。
ここで、以降では集合Bを位置情報付き部分文字列集合と呼ぶことにする。
【0030】
暗号化部308は、鍵保管部302から鍵Kを読み出し、位置情報割当部307から受け取った位置情報付き部分文字列集合Bの中の各位置情報付き部分文字列に対する暗号文Cを次のように生成する。位置情報と部分文字列の各ペア(p,w)に対して、
C=E(E(K,w),p,ID(D))
を生成する。
なお、Eは暗号化関数とする。例えば、AESのような共通鍵暗号方式やHMACのようなメッセージ認証符号、SHA−256のようなハッシュ関数がその一例である。
ここで、すべての(i,w)を暗号化した暗号文の集合をC(D)と書くことにする。
以降では、ペア(ID(D),C(D))を、
保管暗号化データ集合と呼ぶことにする。
【0031】
送信部309は、暗号化部308から受け取った保管暗号化データ集合(ID(D),C(D))を管理装置500へ送信する。また、送信部309は、入力部304から受け取った削除データ名を管理装置500へ送信する。
【0032】
図4は、検索装置400の構成を示すブロック図である。
図4に示すように、検索装置400は、受信部401と、鍵保管部402と、入力部403と、暗号化部404と、送信部405と、出力部406とを備える。図示していないが、検索装置400は、検索装置400の各部で使用されるデータを記憶する記録媒体を備える。
【0033】
受信部401は、鍵生成装置200から送信されてきた鍵K、または管理装置500から送信されてきた検索結果を受信する。鍵保管部402は、受信部401から受け取った鍵Kを保管する。入力部403は、データ検索者から入力された検索データsを受け取る。また、入力部403は、データ検索者から、検索データと同時に、その検索データと検索したい保管暗号化データ集合を指定するような保管データ名も複数受けとってもよい。
【0034】
暗号化部404は、鍵保管部402から鍵Kを読み出し、入力部403から受け取った検索データsに対して鍵Kを用いて、次のように暗号文tを生成する。
t=E(K,s)。
以降では、このtを検索暗号化データと呼ぶ。
【0035】
送信部405は、暗号化部404から受け取った検索暗号化データtを管理装置500へ送信する。もし、データ検索者から検索データと同時に保管データ名も入力されていた場合は、検索暗号化データと保管データ名の両方を管理装置500へ送信する。
出力部406は、受信部401から受け取った検索結果に基づき、検索結果をデータ検索者に対して出力する。もし、検索結果が暗号化されていた場合は、鍵保管部402に保管されている鍵Kなどを用いて検索結果を復号して出力する。
【0036】
図5は、管理装置500の構成を示すブロック図である。
図5に示すように、管理装置500は、受信部501と、パラメーター保管部502と、データ保管部503と、照合部504と、送信部505とを備える。図示していないが、管理装置500は、管理装置500の各部で使用されるデータを記憶する記録媒体を備える。
【0037】
受信部501は、鍵生成装置200から送信されてきたパラメーターL、登録装置300から送信されてきた保管暗号化データ集合(ID(D),C(D))や削除データ名、検索装置400から送信されてきた検索暗号化データtや保管データ名を受信する。
パラメーター保管部502は、受信部501から受け取ったパラメーターLを保管する。
データ保管部503は、受信部501から受け取った保管暗号化データ集合の(ID(D),C(D))を保管する。必要があれば、送信されてきた日時なども同時に保管してもよい。
また、データ保管部503は、受信部501から受け取った削除データ名に基づき、保管している保管暗号化データ集合を削除する。
【0038】
照合部504は、検索結果に関わる空集合Rを生成し、データ保管部503からすべての保管暗号化データ集合(ID(D),C(D))を読み出し、受信部501から受け取った検索暗号化データtに基づき、次のようにして照合を行うことや検索結果を生成する。
照合部504は、
T1=E(t,1,ID(D)),・・・,TL=E(t,L,ID(D))、
を計算し、各Tp(1≦p≦L)がC(D)に含まれているかを確認する。
もしTpがC(D)に含まれているならば、ペア(ID(D),p)をRに加える。
この(ID(D),p)は「ID(D)のp番目の位置に検索データが現れる」
を意味する。以降では、各Tpを照合データと呼び、
{T1,・・・,TL}
を照合データ集合と呼ぶことにする。
また、本処理の結果、最終的に生成される集合Rを検索結果と呼ぶことにする。
なお、照合部504は、受信部501が検索装置400から保管データ名も受信していれば、それに基づいてデータ保管部503から対象となる保管暗号化データ集合のみを読み出して、同様な処理を行う。
【0039】
送信部505は、照合部504から受け取った検索結果Rを検索装置400へ送信する。
【0040】
以下では、本実施の形態に係る、暗号化方法、検索方法に相当する、秘匿検索システム100の動作について説明する。
【0041】
図6は、秘匿検索システム100の鍵生成・保管処理を示すフローチャートである。
図6のステップS601〜ステップS612は、鍵生成装置200と、登録装置300と、検索装置400と、管理装置500とが実行する処理である。ステップS601〜ステップS605は鍵生成装置200に、ステップS606〜ステップS608は登録装置300に、ステップS609〜ステップS610は検索装置400に、ステップS611〜ステップS612は管理装置500によって実行される。
なお以下では、ステップS601等のステップ番号は、S601等と記す。
図7〜
図9、実施の形態の
図15〜
図17、及び実施の形態3の
図22〜
図24のステップ番号も同様である。
【0042】
S601において、鍵生成部201は、データを暗号化するための鍵Kを生成する。なお、本稿では共通鍵暗号技術を用いて説明しているが、公開鍵暗号技術を用いてもよい。その場合は、鍵生成部201は、公開鍵PKと秘密鍵SKのペアを鍵Kとして設定して、以降の処理を同じように実施すればよい。
S602において、パラメーター生成部202は、パラメーターLを生成する。なお、前述の通り、Lは保管データを分割したときに現れる文字列の最大数である。
S603において、送信部203は、S601で生成した鍵KとS602で生成したパラメーターLを、登録装置300へ送信する。
S604において、送信部203は、S601で生成した鍵Kを、検索装置400へ送信する。
S605において、送信部203は、S602で生成したパラメーターLを、管理装置500へ送信する。
【0043】
S606において、受信部301は、S603で送信された鍵KとパラメーターLを受信する。
S607において、鍵保管部302は、S606で受信した鍵Kを記憶媒体に保管する。
S608において、パラメーター保管部303は、S606で受信したパラメーターLを記憶媒体に保管する。
【0044】
S609において、受信部401は、S604で送信された鍵Kを受信する。
S610において、鍵保管部402は、S609で受信した鍵Kを記憶媒体に保管する。
【0045】
S611において、受信部501は、S605で送信されたパラメーターLを受信する。
S612において、パラメーター保管部502は、S611で受信したパラメーターLを記憶媒体に保管する。S612により、秘匿検索システム100の鍵生成・保管処理は終了する。なお、鍵Kは秘密情報であるため、鍵保管部302と、鍵保管部402とは、鍵Kが外部に漏れないように厳重に保管する必要がある。
【0046】
図7は、秘匿検索システム100の登録処理を示すフローチャートである。
図7のS701〜S708は、登録装置300と管理装置500とが実行する処理である。S701〜S706は登録装置300に、S707〜S708は管理装置500によって実行される処理である。
【0047】
S701において、入力部304は、データ登録者から入力された保管データDとデータ名ID(D)を受け取る。なお、前述の通り、データ登録者からデータ名の入力がなければ、入力部304は、入力された保管データDのデータ名ID(D)を乱数と割り当ててもよいし、他の保管データのデータ名と重複しないように0より大きい整数の値を順に割り当ててもよい。
【0048】
S702において、データ分割部305は、パラメーター保管部303からパラメーターLを読み出し、S701でデータ登録者から受け取った保管データDを(w
1,・・・,w
L)と分割する。
なお、前述の通り、各w
i(1≦i≦L)は、データを1文字や複数文字ずつ順に分割したものでもいいし、単語単位で分割してもよい。また、データDを(w
1,...,w
k)と
k≦Lとなるようにデータ分割してもよい。
もし、データをどのように分割しても分割数がL未満となってしまう場合は、L未満のままでもよいし、「*」やnullなどの特殊文字を使って足りない文字数を補ってもよい。
ここでw
iを要素データと呼ぶとすれば、データ分割部305は、文字列データである保管データDを、保管データDの始まりから終わりに向かうN個の要素データw
1,...,w
Nに分割する。NはL以下である。
以下のS703以降では、保管データDがL個に分割された場合を説明する。保管データDがN個に分割された場合は、以下の説明においてLをNに読み替えればよい。
【0049】
S703において、部分文字列生成部306は、S702で生成された分割データ(w
1,・・・,w
L)から、次のような部分文字列集合Aを生成する。
A={A
1,A
2,...,A
L}、
集合Aの要素A
1等をA
i(i=1,...,L)と記す。
集合Aの要素は、以下のようである。
集合Aの要素は、
A
1={(w
1),(w
1w
2),・・・,(w
1・・・w
L)}、
A
2={(w
2),(w
2w
3),・・・,(w
2・・・w
L)}、
...
A
L={(w
L)}、
である。
各要素は、
A
i={(w
i),(w
iw
i+1),・・・,(w
i・・・w
L)}、(i=1,...,L)
である。
以下では要素A
iの要素を、成分と呼ぶ場合がある。つまりA
iは、(L−i+1)個の成分である(w
i),(w
iw
i+1),・・・,(w
i・・・w
L)を持つ。
【0050】
S704において、位置情報割当部307は、S703で生成された部分文字列集合Aの中の各部分文字列に対して次のように位置情報を割り当て、位置情報付き部分文字列集合Bを生成する。
集合B={B
1,B
2,...,B
L}、
集合Bの要素B
i={(i,w
i),(i,w
iw
i+1),...,(i,w
iw
i+1...w
L)}、
である。
要素B
iは要素A
iの各成分に位置情報iを付加して生成される。ここで位置情報iにおける{i}は、要素A
iにおける添え字{i}である。
要素B
iを具体的に記載すれば、
B
1={(1,w
1),(1,w
1w
2),・・・,(1,w
1・・・w
L)}、
B
2={(2,w
2),(2,w
2w
3),・・・,(2,w
2・・・w
L)}、
....
B
L={(L,w
L)},
である。
集合Bの各要素は、
B
i={(i,w
i),(i,w
iw
i+1),・・・,(i,w
i・・・w
L)}、(i=1,...,L)である。
B
iの要素である(i,w
i),(i,w
iw
i+1),・・・,(i,w
i・・・w
L)、
を以下では成分と呼ぶ場合がある。
このように、位置情報割当部307は、集合Aの要素A
iの成分である(w
i),(w
iw
i+1),...,(w
iw
i+1...w
L)のそれぞれに位置情報iを対応させることにより、
要素B
i(i=1,...,L)を持つ、位置情報付き部分文字列集合Bを生成する。
【0051】
S705において、暗号化部308は、鍵保管部302から鍵Kを読み出し、S704で生成された位置情報付き部分文字列集合Bの中の各位置情報付き部分文字列の暗号文Cを次のように生成する。
位置情報と部分文字列の各ペア(p,w)に対して、
C=E(E(K,w),p,ID(D)) (式1)
を生成する。
ペア(p,w)とは、B
iで説明すれば、(i,w
i),(i,w
iw
i+1),・・・,(i,w
i・・・w
L)の、(L−i+1)個の各成分である。(i,w
i)の場合であれば、
p=i,w=w
i
である。
すべての(p,w)を暗号化した暗号文の集合をC(D)とし、保管暗号化データ集合(ID(D),C(D))を生成する。
つまりC(D)は、
B
1={(1,w
1),(1,w
1w
2),・・・,(1,w
1・・・w
L)}、
B
2={(2,w
2),(2,w
2w
3),・・・,(2,w
2・・・w
L)}、
...,
B
L={(L,w
L)},
の、すべての成分を暗号化した情報である。このように暗号化部308は、要素B
iに含まれる(i,w
i),(i,w
iw
i+1),...,(i,w
iw
i+1...w
L)のそれぞれを暗号化される。
なお、上記式1に示すように、暗号化部308は、要素B
iに含まれる各成分を暗号化する場合に、要素B
iに含まれる各成分を、文字列データである保管データDを識別する識別子のデータ名ID(D)と共に暗号化する。
また、前述の通り、Eは暗号化関数であり、例えば、AESのような共通鍵暗号方式やHMACのようなメッセージ認証符号、SHA−256のようなハッシュ関数がその一例である。
【0052】
S706において、送信部309は、S705で生成した保管暗号化データ集合(ID(D),C(D))を管理装置500へ送信する。
【0053】
S707において、受信部501は、S706で送信された保管暗号化データ集合(ID(D),C(D))を受信する。
【0054】
S708において、データ保管部503は、S707で受信した保管暗号化データ集合(ID(D),C(D))を保管する。
【0055】
S708により、秘匿検索システム100の登録処理は終了する。
【0056】
図8は、秘匿検索システム100の検索処理を示すフローチャートである。
図8のS801〜S810は、検索装置400と管理装置500とが実行する処理である。S801〜S803及びS809〜S810は検索装置400によって実行される処理であり、S804〜S808は管理装置500によって実行される処理である。
【0057】
S801において、入力部403は、データ検索者から入力された検索データsを受け取る。なお、複数の検索データを同時に受け取ってもよい。その場合は、以降の処理を各検索データに対して同じように実施すればよい。また、前述の通り、入力部403は、データ検索者から、検索データと同時に、その検索データと検索したい保管暗号化データを指定するような保管データ名も複数受けとってもよい。
S802において、暗号化部404は、鍵保管部402から鍵Kを読み出し、S801で受け取った検索データsに対して鍵Kを用いて、次のようにして検索暗号化データtを生成する。ここで、
t=E(K,s)
である。
S803において、送信部405は、S802で生成した検索暗号化データtを管理装置500へ送信する。もし、S801で保管データ名も入力されていれば、保管データ名も同時に送付する。
【0058】
S804において、受信部501は、S803で送信された検索暗号化データtを受信する。もし、S803で保管データ名も送信されていたら、保管データ名も受信する。
S805において、照合部504は、データ保管部503から保管暗号化データ集合(ID(D),C(D))を読み出す。なお、もしS804で保管データ名も受信していた場合は、その保管データ名に基づき、対象の保管暗号化データ集合のみを読み出す。もしS804で保管データ名を受信していなかった場合は、保管されているすべての保管暗号化データ集合を読み出す。
S806において、照合部504は、パラメーター保管部502からパラメーターLを読み出し、S805で読み出した保管暗号化データ集合(ID(D),C(D))のID(D)に基づき、S804で受信した検索暗号化データtからID(D)に対する各照合データTp(1≦p≦L)を生成する。
ここで各Tpは、
T1=E(t,1,ID(D)),・・・,TL=E(t,L,ID(D))
である。もし、S805で読み出した保管暗号化データ集合が複数の場合は、各ID(D)に対応した照合データを生成する。
S807において、照合部504は、検索結果に関わる空集合Rを生成し、S806で生成した各照合データTp(1≦p≦L)がC(D)に含まれているかを確認する。もしTpがC(D)に含まれているならば、ペア(ID(D),p)をRに加える。もし、S806で生成した照合データ集合が複数の場合も、同じRに上記の検索結果に関するペアを加える。
S808において、送信部505は、S807で生成した検索結果Rを検索装置400へ送信する。
【0059】
S809において、受信部401は、S808で送信された検索結果Rを受信する。
S810において、出力部406は、S809で受信した検索結果Rに対して、次のようにしてデータ検索者に対して出力する。検索結果Rに含まれている各(ID(D),p)に対して、「ID(D)のp番目の位置に検索データが現れる」と出力する。もしRが空集合だった場合は、「どのデータにも検索データは含まれなかった」と出力する。S810により、秘匿検索システム100の検索処理は終了する。
【0060】
図9は、秘匿検索システム100の削除処理を示すフローチャートである。
図9のS901〜S904は、登録装置300と管理装置500とが実行する処理である。S901〜S902は登録装置300に、S903〜S904は管理装置500によって実行される処理である。
【0061】
S901において、入力部304は、データ登録者から削除したい保管暗号化データ集合についての削除データ名を受け取る。なお、前述の通り、削除データ名は保管暗号化データ集合を特定できるものであれば何でもよい。
S902において、送信部309は、S901で入力された削除データ名を管理装置500へ送信する。
【0062】
S903において、受信部501は、S902で登録装置300から送信されてきた削除データ名を受信する。
S904において、データ保管部503は、S903で受信した削除データ名に基づき、保管している保管暗号化データ集合を削除する。
S904により、秘匿検索システム100の削除処理は終了する。
【0063】
<本実施の形態の動作具体例>
以下に、本実施の形態の動作の具体例を示す。
ここで、本実施の形態の動作を、
パラメーターL=3、
保管データをD1=ABC,
ID(D1)=1,
D2=BC,
ID(D2)=2、
検索データs=BC、
として説明する。
また暗号化関数Eは、ハッシュ関数を用いて説明する。
【0064】
まず、D1とD2の登録処理について説明する。
S702において、D1=(A,B,C),D2=(B,C)と分割される。
S703において、
A1={{(A),(AB),(ABC)},{(B),(BC)},{(C)}}及び
A2={{(B),(BC)},{(C)}}と生成される。
S704において、
B1={{(1,A),(1,AB),(1,ABC)},{(2,B),(2,BC)},{(3,C)}}及び
B2={{(1,B),(1,BC)},{(2,C)}}と生成される。
S705において、
C11=E(E(K,A),1,1),
C12=E(E(K,AB),1,1),
C13=E(E(K,ABC),1,1),
C14=E(E(K,B),2,1),
C15=E(E(K,BC),2,1),
C16=E(E(K,C),3,1)及び
C21=E(E(K,B),1,2),
C22=E(E(K,BC),1,2),
C23=E(E(K,C),2,2)
を生成し、
保管暗号化データ集合(ID(D)、C(D))として
保管暗号化データ集合(1,C(D1))
及び
保管暗号化データ集合(2,C(D2))
を生成する。
ただし、
C(D1)={C11,C12,C13,C14,C15,C16},
C(D2)={C21,C22,C23}とする。
ここで、
C=E(E(K,s),p,ID(D))に注意する。
S707及びS708により、上記の保管暗号化データ集合である(1,C(D1))と(2,C(D2))が、管理装置500に保管される。
【0065】
次に、検索データsをs=BCとした場合の検索処理について説明する。
S802において、暗号化データt=E(K,s)を計算する。
S805において、(1,C(D1))と(2,C(D2))を読み出す。
S806において、
T11=E(t,1,1),
T12=E(t,2,1),
T13=E(t,3,1)及び
T21=E(t,1,2),
T22=E(t,2,2),
T23=E(t,3,2)
を計算する。
S807において、T11,T12,T13がC(D1)に含まれているか,またT21,T22,T23がC(D2)に含まれているかを確認する。
実際、
T12はC(D1)に含まれ(C15と一致し)、
T21はC(D2)に含まれる(C22と一致する)。
よって、(ID(D),p)を要素とする集合の検索結果Rが、
検索結果R={(1,2),(2,1)}として生成される。
ここで、検索結果Rの要素は(ID(D),p)であることに注意する。
S810において、検索結果Rに基づき、
「保管データ名が“1”のデータの“2番目”の位置から検索データBCが現れる」、
「保管データ名が“2”のデータの“1番目”の位置から検索データBCが現れる」といった検索結果を出力する。
【0067】
図10は、実施の形態1における鍵生成装置200と、登録装置300と、検索装置400と、管理装置500とのハードウェア資源の一例を示す図である。
【0068】
図10において、鍵生成装置200と、登録装置300と、検索装置400と、管理装置500は、CPU1001(Central Processing Unit)を備えている。
【0069】
CPU1001は、バス1002を介してROM1003、RAM1004、通信ボード1005、ディスプレイ1011(表示装置)、キーボード1012、マウス1013、ドライブ1014、磁気ディスク装置1020などのハードウェアデバイスと接続され、これらのハードウェアデバイスを制御する。
【0070】
ドライブ1014は、FD(Flexible Disk Drive)、CD(Compact Disc)、DVD(Digital Versatile Disc)などの記憶媒体を読み書きする装置である。
【0071】
ROM1003、RAM1004、磁気ディスク装置1020およびドライブ1014は記憶装置の一例である。キーボード1012、マウス1013および通信ボード1005は入力装置の一例である。ディスプレイ1011および通信ボード1005は出力装置の一例である。
【0072】
通信ボード1005は、有線または無線で、LAN(Local Area Network)、インターネット、電話回線などの通信網に接続している。
【0073】
磁気ディスク装置1020には、OS1021(オペレーティングシステム)、プログラム群1022、ファイル群1023が記憶されている。プログラム群1022には、本実施の形態において「〜部」として説明する機能を実行するプログラムが含まれる。プログラム(例えば、暗号化プログラム、データ検索プログラム、データ登録プログラム)は、CPU1001により読み出され実行される。すなわち、プログラムは、「〜部」としてコンピュータを機能させるものであり、また「〜部」の手順や方法をコンピュータに実行させるものである。ファイル群1023には、本実施の形態において説明する「〜部」で使用される各種データ(入力、出力、判定結果、計算結果、処理結果など)が含まれる。
【0074】
本本実施の形態において構成図およびフローチャートに含まれている矢印は主としてデータや信号の入出力を示す。フローチャートなどに基づいて説明する本実施の形態の処理はCPU1001、記憶装置、入力装置、出力装置などのハードウェアを用いて実行される。本実施の形態において「〜部」として説明するものは「〜回路」、「〜装置」、「〜機器」、「サーキットリ」であってもよく、また「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ファームウェア、ソフトウェア、ハードウェアまたはこれらの組み合わせのいずれで実装されても構わない。
【0075】
<***実施の形態1の効果***>
本実施の形態は、例えば、以下のような効果を奏する。
(1)本実施の形態では、たとえ同じ保管データをサーバへ保管したとしても、位置情報や毎回異なるデータ名により、毎回必ず異なる保管暗号化データが生成されるため、頻度分析攻撃などが受けにくくなり、高い安全性を達成する秘匿部分一致検索を実現できる。
(2)本実施の形態では、保管データを暗号化して保管しているため、たとえ管理装置500から保管暗号化データが漏洩しても、保管データの中身を知られることはない。
(3)本実施の形態では、検索データのみならず保管データも暗号化したまま処理ができるため、検索暗号化データから検索データの中身を知られることはない。
(4)本実施の形態では、保管暗号化データと検索暗号化データから得られる検索結果にはデータ名と位置情報しか現れないため、サーバなどの鍵をもたないエンティティに対しては保管データや検索データの中身を知られることはない。
(5)本実施の形態では、検索結果には検索がヒットした事実に加えて、どの位置に検索データが現れるかについての位置情報もわかるため、柔軟な部分一致検索機能をもつ。
(6)本実施の形態では、検索暗号化データがただ一つの暗号文から構成されるため検索に用いるデータサイズが非常に小さく、また検索時にデータ検索者とサーバとのやりとりが1回しか発生しないため、効率的に秘匿部分一致検索することが可能である。
(7)本実施の形態では、共通鍵暗号技術からすべて構成できるため、効率的な秘匿部分一致検索を実現できる。
【0076】
実施の形態2.
次に、本実施の形態の秘匿検索システムについて説明する。実施の形態1では、過去に用いた検索暗号化データ(t=E(K,s))を、新しく追加した保管暗号化データ集合((ID(D),C(D)))に対して直ちに適用できた。
実施の形態2で開示する技術は、過去に用いた検索暗号化データtを、新しく追加した保管暗号化データ集合に対して適用できない。したがって、より高い安全性を達成できる。このようなことを達成するために、ハッシュ鎖などの多重暗号化を用いる方法を開示する。
【0077】
実施の形態2では、暗号化関数Eに対して
「E^M(K,w)」
と記載したときは、(K,M)を初期値として、暗号化関数EをM回計算(言い換えると、M回の多重暗号化を実施)することを表すとする。例えば、このような多重暗号化としてハッシュ鎖がよく知られている。
例えば、
E^M(K,w)
をM回目に保管したデータに対する検索暗号化データtとする。
ここで、M+1回目に保管したデータに対する検索暗号化データtを
t
M=E^(M−1)(K,w)とすると、
M+1回目の検索暗号化データt
M=E^(M−1)(K,w)
を再度暗号化することで、
M回目に保管したデータに対する検索暗号化データE^M(K,w)を生成できる。
一方で、E^M(K,w)からE^(M−1)(K,w)を計算することはハッシュ関数などの暗号化関数であれば一般的に困難である。
このため、過去に用いた検索暗号化データを新しく追加した保管暗号化データ集合に対して適用できず、より高い安全性を達成できる。
【0078】
本実施の形態の秘匿検索システム100は、実施の形態1とは一部異なっている。
【0079】
鍵生成装置200は鍵生成装置200aへ、登録装置300は登録装置300aへと、検索装置400は検索装置400aへと、管理装置500は管理装置500aへと変更されている。
【0080】
以下、本実施の形態の構成について説明する。以下では、鍵生成装置200aの構成、登録装置300aの構成、検索装置400aの構成、管理装置500aの構成について順番に説明する。
【0081】
図11は、鍵生成装置200aの構成を示すブロック図である。
図11に示すように、鍵生成装置200aは、鍵生成部201と、パラメーター生成部202aと、送信部203aとを備える。図示していないが、鍵生成装置200aは、鍵生成装置200aの各部で使用されるデータを記憶する記録媒体を備える。鍵生成部201の説明は、すでに述べたため省略する。
【0082】
パラメーター生成部202aは、前述のパラメーターLを生成すると同時に、多重暗号化の最大回数を表すパラメーターMを生成する。このMは、同じ鍵Kを用いて保管データを管理装置500aに保管できる保管暗号化データ集合の最大数を表す。もし、Mを超えて保管暗号化データ集合を保管したい場合は、新しい鍵K´とM´を生成すれば、新たにM´個登録できるようになる。なお、Mは1より大きい整数である。また、MはLと同様に秘密情報ではないため、公に公開されていても構わない。
【0083】
送信部203aは、鍵生成部201で生成された鍵Kを、登録装置300aと、検索装置400aとへ送信し、また、パラメーター生成部202aで生成されたパラメーター(L,M)を、登録装置300aと、検索装置400aと、管理装置500aとへ送信する。
【0084】
図12は、登録装置300aの構成を示すブロック図である。
図12に示すように、登録装置300aは、受信部301aと、鍵保管部302と、パラメーター保管部303aと、入力部304と、データ分割部305と、部分文字列生成部306と、位置情報割当部307と、多重暗号化部308aと、送信部309aとを備える。図示していないが、登録装置300aは、登録装置300aの各部で使用されるデータを記憶する記録媒体を備える。鍵保管部302と、入力部304と、データ分割部305と、部分文字列生成部306と、位置情報割当部307との説明は、すでに述べたため省略する。
【0085】
受信部301aは、鍵生成装置200aから送信されてきた鍵Kとパラメーター(L,M)を受信する。
【0086】
パラメーター保管部303aは、受信部301aから受け取ったパラメーター(L,M)を保管することや、鍵KとパラメーターMを使って暗号化された管理装置500aに保管されている保管暗号化データ集合の数を表すパラメーターmも保管する。
【0087】
多重暗号化部308aは、鍵保管部302から鍵Kを、パラメーター保管部303aからパラメーターmを読み出し、位置情報割当部307から受け取った位置情報付き部分文字列集合Bの中の各位置情報付き部分文字列に対する暗号文Cを次のように生成する。
位置情報と部分文字列の各ペア(p,w)に対して、
C=E(E^(M+1−m)(K,w),p,ID(D))
を生成する。
ここで、すべての(p,w)を暗号化した暗号文の集合をC(D)と書くことにする。 ここで、以降では
(ID(D),m,C(D))
を保管暗号化データ集合と呼ぶことにする。
なお、E^i(i≧1)を計算する場合、EがAESのような暗号化関数であればEを計算する度に鍵が必要となるため、例えば値がすべて0やすべて1など鍵を事前に決めてパラメーターとして保管しておくことや、すでに保管されているパラメーターのLやMなどを鍵として用いてもよい。もし、Eがハッシュ関数であれば、多重暗号化のためにそのような鍵は必要としない。
【0088】
送信部309aは、暗号化部308から受け取った保管暗号化データ集合(ID(D),m,C(D))を管理装置500aへ送信することや、またパラメーターmを検索装置400aへ送信する。また、送信部309aは、入力部304から受け取った削除データ名を管理装置500へ送信する。
【0089】
図13は、検索装置400aの構成を示すブロック図である。
図13に示すように、検索装置400aは、受信部401aと、鍵保管部402と、入力部403と、多重暗号化部404aと、送信部405と、出力部406と、パラメーター保管部407aとを備える。図示していないが、検索装置400aは、検索装置400aの各部で使用されるデータを記憶する記録媒体を備える。
【0090】
鍵保管部402と、入力部403と、送信部405と、出力部406の説明は、既に述べたため省略する。
【0091】
受信部401aは、鍵生成装置200aから送信されてきた鍵KとパラメーターMや、登録装置300aから送信されてきたパラメーターmや、管理装置500aから送信されてきた検索結果を受信する。
【0092】
多重暗号化部404aは、鍵保管部402から鍵Kを、パラメーター保管部407aからパラメーターmを読み出し、入力部403から受け取った検索データsに対して、鍵Kとパラメーターmを用いて、次のように暗号文tを生成する。
多重暗号化部404aは、
t=E^(M+1−m)(K,s)
を生成する。
以降では、このtを検索暗号化データと呼ぶ。
なお、前述の通り、E^i(i≧1)を計算する場合、EがAESのような暗号化関数であればEを計算する度に鍵が必要となるため、例えば値がすべて0やすべて1など鍵を事前に決めてパラメーターとして保管しておくことや、すでに保管されているパラメーターのLやMなどを鍵として用いてもよい。もし、Eがハッシュ関数であれば、多重暗号化のためにそのような鍵は必要としない。
【0093】
パラメーター保管部407aは、受信部401から受け取ったパラメーターMを保管する。また、受信部401から受け取ったパラメーターがペアmの場合、パラメーター保管部407aは、すでに保管されている(M,m)のmのパラメーターを更新する。
【0094】
図14は、管理装置500aの構成を示すブロック図である。
図14に示すように、管理装置500aは、受信部501aと、パラメーター保管部502aと、データ保管部503と、照合部504aと、送信部505と、多重暗号化部506aとを備える。図示していないが、管理装置500aは、管理装置500aの各部で使用されるデータを記憶する記録媒体を備える。
【0095】
データ保管部503と、送信部505の説明は、すでに述べたため省略する。
【0096】
受信部501aは、鍵生成装置200aから送信されてきたパラメーター(L,M)、登録装置300aから送信されてきた保管暗号化データ集合(ID(D),m,C(D))や削除データ名、検索装置400aから送信されてきた検索暗号化データtや保管データ名を受信する。
【0097】
パラメーター保管部502aは、受信部501aから受け取ったパラメーター(L,M)や、保管暗号化データ集合(ID(D),m,C(D))のmも合わせて保管する。
【0098】
照合部504aは、検索結果に関わる空集合Rを生成し、データ保管部503から、すべての保管暗号化データ集合(ID(Di),m,C(Di))(1≦i≦m)を読み出し、後述する多重暗号化部506aから受け取った多重暗号化データ集合
{(1,t1)、(2,t2),・・・,(m,tm)}
に基づき、次のようにして照合を行うことや検索結果を生成する。
照合部504aは、
各i(1≦i≦m)に対して、(ID(Di),i,C(Di))
となる保管暗号化データ集合を抽出し、
Xi={T1_i=E(ti,1,ID(Di)),・・・,TL_i=E(ti,L,ID(Di))}
を計算する。
その後、照合部504aは、各Tp_i(1≦p≦L)がC(Di)に含まれているかを確認する。もしTp_iがC(Di)に含まれているならば、ペア(ID(Di),p)をRに加える。この(ID(Di),p)は「ID(Di)のp番目の位置に検索データが現れる」を意味する。
以降では、各Tp_iをID(Di)に対する照合データと呼び、
{T1,・・・,TL}
をID(Di)に対する照合データ集合と呼ぶことにする。また、本処理の結果、最終的に生成される集合Rを検索結果と呼ぶことにする。
【0099】
なお、照合部504aは、受信部501aが検索装置400aから保管データ名も受信していれば、それに基づいてデータ保管部503から対象となる保管暗号化データ集合のみを読み出して、同様な処理を行う。
【0100】
多重暗号化部506aは、パラメーター保管部502aからパラメーターmを読み出し、受信部501から受け取った検索暗号化データtに基づき、次のような多重暗号化データを生成する。
t1=E^(m−1)(t),
t2=E^(m−2)(t),
・・・,
tm=E^0(t)=t。
以降、
集合{(1,t1)、(2,t2),・・・,(m,tm)}
を多重暗号化データ集合と呼ぶことにする。
なお、前述の通り、E^i(i≧1)を計算する場合、EがAESのような暗号化関数であればEを計算する度に鍵が必要となるため、例えば値がすべて0やすべて1など鍵を事前に決めてパラメーターとして保管しておくことや、すでに保管されているパラメーターのLやMなどを鍵として用いてもよい。もし、Eがハッシュ関数であれば、多重暗号化のためにそのような鍵は必要としない。
【0101】
以下では、本実施の形態に係る検索方法に相当する、秘匿検索システム100の動作について説明する。
図15は、本実施の形態における秘匿検索システム100の鍵生成・保管処理を示すフローチャートである。
図15のS601〜S612aは、鍵生成装置200aと、登録装置300aと、検索装置400aと、管理装置500aとが実行する処理である。S601〜S605aは鍵生成装置200aに、S606a〜S608aは登録装置300aに、S609a〜S610a2は検索装置400aに、S611a〜S612aは管理装置500aによって実行される処理である。
【0102】
なお、本検索処理におけるS601とS607とは、実施の形態1のそれぞれと同様の処理であるため、ここでは省略する。
【0103】
S602aにおいて、パラメーター生成部202aは、パラメーターL及びMを生成する。なお、前述の通り、Lは保管データを分割したときに現れる文字列の最大数であり、またMは同じ鍵Kを用いて保管データを管理装置500aに保管できる保管暗号化データ集合の最大数を表す。
S603aにおいて、送信部203aは、S601で生成した鍵Kと、S602aで生成したパラメーター(L,M)とを、登録装置300aへ送信する。
S604aにおいて、送信部203aは、S601で生成した鍵Kと、S602aで生成したパラメーター(L,M)とを、検索装置400aへ送信する。
S605aにおいて、送信部203aは、S602で生成したパラメーター(L,M)を、管理装置500aへ送信する。
【0104】
S606aにおいて、受信部301aは、S603aで送信された鍵Kと、パラメーター(L,M)とを受信する。
S608aにおいて、パラメーター保管部303aは、S606aで受信したパラメーター(L,M)を記憶媒体に保管する。
【0105】
S609aにおいて、受信部401aは、S604aで送信された鍵Kと、パラメーター(L,M)とを受信する。
S610a1において、鍵保管部402は、S609aで受信した鍵Kを記憶媒体に保管する。
S610a2において、パラメーター保管部407aは、S609aで受信したパラメーター(L,M)を記憶媒体に保管する。
【0106】
S611aにおいて、受信部501aは、S605aで送信されたパラメーター(L,M)を受信する。
S612aにおいて、パラメーター保管部502aは、S611aで受信したパラメーター(L,M)を記憶媒体に保管する。S612aにより、秘匿検索システム100の鍵生成・保管処理は終了する。
【0107】
図16は、実施の形態2の秘匿検索システム100の登録処理を示すフローチャートである。
図16のS701〜S712aは、登録装置300aと、検索装置400aと、管理装置500aとが実行する処理である。S701〜S706と、S709aと、S712aは登録装置300aに、S707〜S708a2は管理装置500aに、S710a〜S711aは検索装置400aによって実行される処理である。
【0108】
なお、本検索処理におけるS701〜S704と、S706〜S707とは、実施の形態1のそれぞれと同様の処理であるため、ここでは省略する。
【0109】
S705aにおいて、多重暗号化部308は、鍵保管部302から鍵Kを、パラメーター保管部303aからパラメーターmを読み出し、S704で生成された位置情報付き部分文字列集合Bの中の各位置情報付き部分文字列の暗号文Cを次のように生成する。
多重暗号化部308は、位置情報と部分文字列の各ペア(p,w)に対して、
C=E(E^(M+1−m)(K,w),p,ID(D))
と計算する。また、すべての(p,w)を暗号化した暗号文の集合をC(D)とし、保管暗号化データ集合(ID(D),m,C(D))を生成する。
【0110】
S708a1において、データ保管部503は、S707で受信した保管暗号化データ集合(ID(D),m,C(D))を保管する。
S708a2において、パラメーター保管部502aは、S707で受信した保管暗号化データ集合(ID(D),m,C(D))のmから保管されているmの値を更新する。
【0111】
S709aにおいて、送信部309aは、S705aで読み出したパラメーターmを検索装置400aへ送信する。
【0112】
S710aにおいて、受信部401aは、S710aで送信されたパラメーターmを受信する。
S711aにおいて、パラメーター保管部407aは、保管されているパラメーターmをS711aで受信したパラメーターmに置き換えて更新する。
【0113】
S712aにおいて、パラメーター保管部303aは、パラメーターmの値を1カウントアップしてmの値を更新する。S712aにより、秘匿検索システム100の登録処理は終了する。
【0114】
図17は、実施の形態2の秘匿検索システム100の検索処理を示すフローチャートである。
図17のS801〜S810は、検索装置400aと管理装置500aとが実行する処理である。S801〜S803及びS809〜S810は検索装置400aに、S804〜S808は管理装置500にaよって実行される処理である。
【0115】
なお、本検索処理におけるS801と、S803と、S804と、S808〜S810は、実施の形態1のそれぞれと同様の処理であるため、ここでは省略する。
【0116】
S802aにおいて、多重暗号化部404aは、鍵保管部402から鍵Kを、パラメーター保管部407aからパラメーターmを読み出し、S801で受け取った検索データsに対して鍵Kを用いて、次のようにして検索暗号化データtを生成する。
t=E^(M+1−m)(K,s)。
【0117】
S805a1において、多重暗号化部506aは、パラメーター保管部502aからパラメーターmを読み出し、S804で受信した検索暗号化データtに基づき、次のような多重暗号化データ集合
{(1,t1)、(2,t2),・・・,(m,tm)}を生成する。
ただし、
t1=E^(m−1)(t),t2=E^(m−2)(t),・・・,tm=E^0(t)=t
である。
S805a2において、照合部504aは、データ保管部503から保管暗号化データ集合(ID(D),C(D))を読み出す。なお、もしS804で保管データ名も受信していた場合は、その保管データ名に基づき、対象の保管暗号化データ集合のみを読み出す。もしS804で保管データ名を受信していなかった場合は、保管されているすべての保管暗号化データ集合を読み出す。ここで、読み出した複数の保管暗号化データ集合を
{(ID(D1),1,C(D1)),・・・,(ID(Dm),m,C(Dm))}
とする。
S806aにおいて、照合部504aは、パラメーター保管部502aからパラメーターLを読み出し、S805a2で読み出した各(ID(Di),i,C(Di))(1≦i≦m)に対して、S805a1で生成した多重暗号化データ(i,ti)に基づき、ID(Di)に対する照合データ集合Xi={T1_i,・・・,TL_i}を生成する。
ただし、
T1_i=E(ti,1,ID(Di)),・・・,TL_i=E(ti,L,ID(Di))である。
S807aにおいて、照合部504aは、検索結果に関わる空集合Rを生成し、
各p(1≦p≦L)に対して次のような処理を行う。
S806aで生成したID(Di)に対する各照合データTp_i(1≦p≦L)がC(Di)に含まれているかを確認する。もしTp_iがC(Di)に含まれているならば、ペア(ID(Di),p)をRに加える。
【0118】
S810により、秘匿検索システム100の検索処理は終了する。本実施の形態でも、実施の形態1と同様な削除処理を行うことにより、保管暗号化データ集合の削除が可能である。
【0119】
<本実施の形態の動作具体例>
ここで、本実施の形態の動作を、
パラメーターL=3、パラメーターM=2、
最初の保管データをD1=ABC,ID(D1)=1、
次の保管データをD2=BC,ID(D2)=2、
検索データを=BC、
として説明する。
また暗号化関数Eは、ハッシュ関数を用いて説明する。
【0120】
まず、D1の登録処理について説明する。
S702において、D1=(A,B,C)と分割される。
S703において、
A1={{(A),(AB),(ABC)},{(B),(BC)},{(C)}}
と生成される。
S704において、
B1={{(1,A),(1,AB),(1,ABC)},{(2,B),(2,BC)},{(3,C)}}と生成される。
S705aにおいて、m=1が読み出され、
C11=E(E^2(K,A),1,1),
C12=E(E^2(K,AB),1,1),
C13=E(E^2(K,ABC),1,1),
C14=E(E^2(K,B),2,1),
C15=E(E^2(K,BC),2,1),
C16=E(E^2(K,C),3,1)
を生成し,保管暗号化データ集合(1,C(D1))を生成する。
ただし、
C(D1)={C11,C12,C13,C14,C15,C16}
及び
M+1−m=2である。
S707及びS708a1により、保管暗号化データ集合(1,1,C(D1))が保管される。S708a2〜S712aにより、パラメーター保管部303aのパラメーターmが2に、パラメーター保管部407aとパラメーター保管部502aのパラメーターmが1に更新される。
【0121】
次に、D1に対してsを使った検索処理について説明する。
S802aにおいて、m=1を読み出し、t=E^2(K,s)を計算する。
ただし、M+1−m=2である。
S805a1において、m=1を読み出し、t1=tを計算し、
多重暗号化データ集合{(1,t1)}を生成する。
S805a2において、(1,1,C(D1))を読み出す。
S806aにおいて、
T1_1=E(t1,1,1),
T2_1=E(t1,2,1),
T3_1=E(t1,3,1)
を計算する。
S807aにおいて、T1_1,T2_1,T3_1がC(D1)に含まれているかを確認する。実際、T2_1はC(D1)に含まれる(C15と一致する)。
よって、検索結果R={(1,2)}が生成される。
S810において、Rに基づき、「保管データ名が“1”のデータの“2番目”の位置から検索データBCが現れる」といった検索結果を出力する。
【0122】
次に、D2の登録処理を行う。
S702において、D2=(B,C)と分割される。
S703において、A2={{(B),(BC)},{(C)}}と生成される。
S704において、B2={{(1,B),(1,BC)},{(2,C)}}と生成される。
S705aにおいて、m=2が読み出され、
C21=E(E^1(K,B),1,2),
C22=E(E^1(K,BC),1,2),
C23=E(E^1(K,C),2,2)
を生成し、保管暗号化データ集合(2,C(D2))
を生成する。
ただし、
C(D2)={C21,C22,C23}
及び
M+1−m=1である。
また、E^1=Eである。
S707及びS708a1により、保管暗号化データ集合(2,2,C(D2))が保管される。
S708a2〜S712aにより、パラメーター保管部303aのパラメーターmが3に、パラメーター保管部407aとパラメーター保管部502aのパラメーターmが2に更新される。
【0123】
次に、D1とD2に対して再度sを使った検索処理について説明する。
S802aにおいて、m=2を読み出し、t=E(K,s)を計算する。
ただし、M+1−m=1である。
S805a1において、m=2を読み出し、t1=E(t),t2=t,を計算し、多重暗号化データ集合{(1,t1)、(2,t2)}を生成する。
S805a2において、
(1,1,C(D1))と(2,2,C(D2))
を読み出す。
S806aにおいて、
T1_1=E(t1,1,1),
T2_1=E(t1,2,1),
T3_1=E(t1,3,1)及び
T1_2=E(t2,1,2),
T2_2=E(t2,2,2),
T3_2=E(t2,3,2)
を計算する。
S807aにおいて、T1_1,T2_1,T3_1がC(D1)に含まれているか、
またT1_2,T2_2,T3_2がC(D2)に含まれているかを確認する。
実際、
T2_1はC(D1)に含まれ(C15と一致し)、
T1_2はC(D2)に含まれる(C22と一致する)。
よって、検索結果R={(1,2),(2,1)}が生成される。
【0124】
S810において、Rに基づき、「保管データ名が“1”のデータの“2番目”の位置から検索データBCが現れる」、「保管データ名が“2”のデータの“1番目”の位置から検索データBCが現れる」といった検索結果を出力する。
なお、一度目に検索した検索データと二度目に検索した検索データは同一であるが(s=BC)、検索暗号化データはそれぞれE^2(K,s),E(K,s)であるため異なった値が生成されている。また、E(K,s)からE^2(K,s)は計算できるため、二度目に検索した検索暗号化データから一度目に検索した検索暗号化データが作れる。一方で、E^2(K,s)からE(K,s)を計算することは一般的に困難であるため、一度目に検索した検索暗号化データから二度目に検索した検索暗号化データを作ることは困難である。
【0126】
本実施の形態におけるハードウェア資源の一例は、実施の形態1と同様であるため省略する。本実施の形態は、例えば、以下のような効果を奏する。
【0127】
<***実施の形態2の効果***>
本実施の形態では、実施の形態1と同様な効果を得ることに加えて、ハッシュ鎖などの多重暗号化を用いることにより、過去に用いた検索暗号化データを、新しく追加した保管暗号化データ集合に対して適用できないため、より高い安全性を達成できる。
【0128】
実施の形態3.
次に、本実施の形態の秘匿検索システムについて説明する。
【0129】
実施の形態2では、ハッシュ鎖などの多重暗号化を用いることにより、より高い安全性を達成できたが、同じ鍵Kで生成や保管できる保管暗号化データ集合の数がパラメーターMと線型に依存するため、Mをある程度大きくとる必要がある。
一方で、Mを大きくとりすぎると、多重暗号化処理に時間がかかってしまう。
そこで、本実施の形態では、保管データを1つずつ保管することはせずに、複数の保管データをまとめて保管することによって、実施の形態2と同じMを選択しても、同じ鍵Kで暗号化や保管できる保管データの最大数を大きくすることや、かつ検索効率を向上できるような技術を開示する。
【0130】
本実施の形態では、保管データを1つずつ保管することはせずに、索引として複数の保管データを同時に保管する手法を開示する。
【0131】
本実施の形態の秘匿検索システム100は、実施の形態2とは一部異なっている。鍵生成装置200aは鍵生成装置200bへと、登録装置300aは登録装置300bへと、検索装置400aは検索装置400bへと、管理装置500aは管理装置500bへと変更されている。
【0132】
以下、本実施の形態の構成について説明する。以下では、鍵生成装置200bの構成、登録装置300bの構成、検索装置400bの構成、管理装置500bの構成について順番に説明する。
【0133】
図18は、鍵生成装置200bの構成を示すブロック図である。
図18に示すように、鍵生成装置200bは、鍵生成部201と、パラメーター生成部202bと、送信部203bとを備える。図示していないが、鍵生成装置200bは、鍵生成装置200bの各部で使用されるデータを記憶する記録媒体を備える。鍵生成部201の説明は、すでに述べたため省略する。
【0134】
パラメーター生成部202bは、前述のパラメーターL,Mを生成すると同時に、一度に保管できる保管データの最大数を表すパラメーターNを生成する。すなわち、各索引は最大N個の保管データに関する情報を保持することができる。もし、一度に保管する保管データ数がNを超える場合は、各索引を高々N個の保管データと対応づけるように複数の索引を生成する。なお、Nは1より大きい整数である。また、NはL,Mと同様に秘密情報ではないため、公に公開されていても構わない。
【0135】
送信部203bは、鍵生成部201で生成された鍵Kを、登録装置300bと、検索装置400bとへ送信し、また、パラメーター生成部202bで生成されたパラメーター(L,M,N)を、登録装置300bと、管理装置500bとへ送信し、またパラメーター(L,M)を検索装置400bへ送信する。
【0136】
図19は、登録装置300bの構成を示すブロック図である。
図19に示すように、登録装置300bは、受信部301bと、鍵保管部302と、パラメーター保管部303bと、入力部304bと、データ分割部305と、部分文字列生成部306と、位置情報割当部307と、多重暗号化部308bと、送信部309bと、集約部310bとを備える。図示していないが、登録装置300bは、登録装置300bの各部で使用されるデータを記憶する記録媒体を備える。
【0137】
鍵保管部302と、データ分割部305と、部分文字列生成部306と、位置情報割当部307との説明は、すでに述べたため省略する。
【0138】
受信部301bは、鍵生成装置200bから送信されてきた鍵Kとパラメーター(L,M,N)を受信する。
【0139】
パラメーター保管部303bは、受信部301bから受け取ったパラメーター(L,M,N)を保管することや、鍵KとパラメーターMを使って暗号化された管理装置500aに保管されている索引の数を表すパラメーターmも保管する。なお、mの初期値は1を表し、多重暗号化部308aからmが読み出されたら、mの値を1カウントアップしてmの値を更新する。
【0140】
入力部304bは、データ登録者から保管データ及び保管データ名の
ペアの集合{(ID(D1),D1),・・・,(ID(Dn),Dn)}、
また索引名ID(I)
を受け取る。
なお、保管データ及び保管データ名は集合ではなく、単一でもよい。
もしn>Nの場合は、n=n1+・・・+nkかつnj≦n(1≦j≦n)
となるように分割して、各njについて以下の処理をk回実行すればよい。
もし、データ登録者から索引名の入力がなければ、入力部304bは、ID(I)を乱数と割り当ててもよいし、他の索引名と重複しないように0より大きい整数の値を順に割り当ててもよい。
ここで、データ分割部305と、部分文字列生成部306と、位置情報割当部307とは、上記の
{(ID(D1),D1),・・・,(ID(Dn),Dn)}
に対して、次のように処理を行ったとする。
各データは
D1=(w
1_1,・・・,w
L_1),・・・,Dn=(w
1_n,・・・,w
L_n)
のように分割され、各位置情報付き部分文字列集合Bi(1≦i≦n)は、
{(1,w
1_i),(1,w
1_iw
2_i),・・・,(1,w
1_i・・・w
L_i)},
{(2,w
2_i),(2,w
2_iw
3_i),・・・,(2,w
2_i・・・w
L_i)},
・・・,
{(L,w
L_i)}}
のように生成されたとする。
【0141】
多重暗号化部308bは、後述する集約部310bから受け取った集約データ集合Yを受け取り、鍵保管部302から鍵Kを、パラメーター保管部303bからパラメーター(m,M,N)を読み出し、Yの各要素の暗号文及び集合Iを次のように生成する。
各要素(p,w,{ID(D_i1),・・・,ID(D_ik)},{ID(D_ik+1),・・・,ID(D_in)})に対して、
C1 =E(E^(M+1−m)(K,w,0),p,1, ID(I)),
・・・,
Ck =E(E^(M+1−m)(K,w,0),p,k, ID(I)),
Ck+1=E(E^(M+1−m)(K,w,1),p,k+1,ID(I)),
・・・,
Cn= E(E^(M+1−m)(K,w,1),p,n, ID(I))
と生成し、
集合I={(Cj,ID(D_ij))}
と置く。以降、この集合Iを索引と呼ぶことにする。
また、(ID(I),m,I)
を保管索引と呼ぶことにする。
【0142】
送信部309bは、多重暗号化部308bから受け取った保管索引(ID(I),m,I)を管理装置500bへ送信することや、また索引Iを生成したときに用いたパラメーターmを検索装置400bへ送信する。
【0143】
集約部310bは、位置情報割当部307から受け取ったB1,・・・Bnに対して、次のような集合Yを生成する。
集合Yの各要素は、
(p,w,{ID(D_i1),・・・,ID(D_ik)},{ID(D_ik+1),・・・,ID(D_in)})
は、
「(p,w)はBi1,・・・,Bikそれぞれに含まれるが、Bik+1,・・・,Binには含まれない」ことを意味する。
なお、このペア(p,w)は必ずB1,・・・,Bnのいずれかに含まれるとする。また、複数含まれてもよい。つまり、YはB1,・・・,Bnの要素を集約した集合とみなすことができる。また、
{ID(D_i1),・・・,ID(D_in)}={ID(D1),・・・,ID(Dn)}
である。以降では、Yを集約データ集合と呼ぶことにする。
【0144】
図20は、検索装置400bの構成を示すブロック図である。
図20に示すように、検索装置400bは、受信部401aと、鍵保管部402と、入力部403bと、多重暗号化部404bと、送信部405bと、出力部406と、パラメーター保管部407aとを備える。図示していないが、検索装置400bは、検索装置400bの各部で使用されるデータを記憶する記録媒体を備える。
【0145】
受信部401aと、鍵保管部402と、出力部406と、パラメーター保管部407aの説明は、既に述べたため省略する。
【0146】
入力部403bは、データ検索者から入力された検索データsを受け取る。また、入力部403bは、データ検索者から、検索データと同時に、その検索データと検索したい保管索引を指定するような保管索引名も複数受けとってもよい。
【0147】
多重暗号化部404bは、鍵保管部402から鍵Kを、パラメーター保管部407aからパラメーターmを読み出し、入力部403bから受け取った検索データsに対して、鍵Kとパラメーターmを用いて、次のように暗号文tを生成する。
多重暗号化部404bは、
t=E^(M+1−m)(K,s,0)
を生成する。
以降では、このtを検索暗号化データと呼ぶ。
【0148】
送信部405bは、多重暗号化部404bから受け取った検索暗号化データtを管理装置500bへ送信する。もし、データ検索者から検索データと同時に保管索引名も入力されていた場合は、検索暗号化データと保管索引名の両方を管理装置500bへ送信する。
【0149】
図21は、管理装置500bの構成を示すブロック図である。
図21に示すように、管理装置500bは、受信部501bと、パラメーター保管部502bと、データ保管部503bと、照合部504bと、送信部505と、多重暗号化部506aとを備える。図示していないが、管理装置500bは、管理装置500bの各部で使用されるデータを記憶する記録媒体を備える。
【0150】
送信部505と、多重暗号化部506aの説明は、すでに述べたため省略する。
【0151】
受信部501bは、鍵生成装置200bから送信されてきたパラメーター(L,M,N)、登録装置300bから送信されてきた保管暗号化データ集合(ID(I),m,I)や削除索引名、検索装置400bから送信されてきた検索暗号化データtや保管索引名を受信する。
【0152】
パラメーター保管部502bは、受信部501bから受け取ったパラメーター(L,M,N)や、保管索引(ID(I),m,I)のmも合わせて保管する。
【0153】
データ保管部503bは、受信部501bから受け取った保管索引(ID(I),m,I)を保管する。必要があれば、送信されてきた日時なども同時に保管してもよい。また、データ保管部503bは、受信部501bから受け取った削除索引名に基づき、保管している保管索引を削除する。
【0154】
照合部504bは、検索結果に関わる空集合Rを生成し、データ保管部503bからすべての保管索引(ID(I),m,I)を読み出し、多重暗号化部506aから受け取った多重暗号化データ集合{(1,t1)、(2,t2),・・・,(m,tm)}に基づき、次のようにして照合を行うことや検索結果を生成する。
照合部504bは、各i(1≦i≦m)に対して、(ID(I),i,I)となる保管索引を抽出し、次を繰り返し実行する。
照合部504bは、各p(1≦p≦L)及び各j(1≦j≦N)に対して、
C_pj=E(ti,p,j,ID(I))を計算し(全部でL×N個の計算)、
各C_pjが索引Iに含まれているかを確認し、もし含まれていればC_pjとペアで保管されているID(D)を抽出して(ID(D),p)を空集合Rに追加する。
なお、もしC_pjはIに含まれるが、
C_pj+1=E(ti,p,j+1,ID(I))
が索引Iに含まれない場合は、
E(ti,p,j+2,ID(I)),・・・,E(ti,p,N,ID(I))
も索引Iには含まれないため、これらの計算を省略して検索効率を高めることができる。
以降では、
各C_pj(1≦p≦L,1≦j≦N)
をID(I)に対する照合データと呼ぶことにする。また、本処理の結果、最終的に生成される集合Rを検索結果と呼ぶことにする。
【0155】
なお、照合部504bは、受信部501bが検索装置400bから保管索引名も受信していれば、それに基づいてデータ保管部503bから対象となる保管索引のみを読み出して、同様な処理を行う。
【0156】
以下では、本実施の形態に係る検索方法に相当する、秘匿検索システム100の動作について説明する。
【0157】
図22は、本実施の形態における秘匿検索システム100の鍵生成・保管処理を示すフローチャートである。
図22のS601〜S612bは、鍵生成装置200bと、登録装置300bと、検索装置400bと、管理装置500bとが実行する処理である。S601〜S605bは鍵生成装置200bに、S606b〜S608bは登録装置300bに、S609a〜S610a2は検索装置400bに、S611b〜S612bは管理装置500aによって実行される処理である。
【0158】
なお、本検索処理におけるS601と、S604a、S607と、S609a〜S610a2とは、実施の形態2のそれぞれと同様の処理であるため、ここでは省略する。
【0159】
S602bにおいて、パラメーター生成部202bは、パラメーターL、M、Nを生成する。なお、前述の通り、Lは保管データを分割したときに現れる文字列の最大数であり、Mは同じ鍵Kを用いて管理装置500bに保管できる保管索引の最大数を表し、Nは一度に登録できる保管データの最大数である。
S603bにおいて、送信部203bは、S601で生成した鍵Kと、S602bで生成したパラメーター(L,M,N)とを、登録装置300bへ送信する。
S605bにおいて、送信部203bは、S602bで生成したパラメーター(L,M,N)を、管理装置500bへ送信する。
【0160】
S606bにおいて、受信部301bは、S603bで送信された鍵Kと、パラメーター(L,M,N)とを受信する。
S608bにおいて、パラメーター保管部303bは、S606bで受信したパラメーター(L,M,N)を記憶媒体に保管する。
【0161】
S611bにおいて、受信部501bは、S605bで送信されたパラメーター(L,M,N)を受信する。
S612bにおいて、パラメーター保管部502bは、S611bで受信したパラメーター(L,M,N)を記憶媒体に保管する。
S612bにより、秘匿検索システム100の鍵生成・保管処理は終了する。
【0162】
図23は、秘匿検索システム100の登録処理を示すフローチャートである。
図23のS701〜S712aは、登録装置300bと、検索装置400bと、管理装置500bとが実行する処理である。S701〜S706bと、S709aと、S712aは登録装置300bに、S707b〜S708b2は管理装置500bに、S710a〜S711aは検索装置400bによって実行される処理である。
【0163】
なお、本検索処理におけるS701〜S704と、S709a2〜S712aとは、実施の形態2のそれぞれと同様の処理であるため、ここでは省略する。
【0164】
S705b1において、集約部310bは、S704で生成されたB1,・・・Bnに対して、集約データ集合Yを生成する。なお、前述の通り、Yの各要素は(p,w,{ID(D_i1),・・・,ID(D_ik)},{ID(D_ik+1),・・・,ID(D_in)})と表わされる。
S705b2において、多重暗号化部308bは、S705b1で生成された集約データ集合Yを受け取り、鍵保管部302から鍵Kを、パラメーター保管部303bからパラメーター(m,M,N)を読み出し、保管索引(ID(I),m,I)を生成する。
なお、前述の通り、索引IはI={(Cj,ID(D_ij))}と表わされ、またYの各要素
(p,w,{ID(D_i1),・・・,ID(D_ik)},{ID(D_ik+1),・・・,ID(D_in)})
におけるC1,・・・,Cnは
次のように表わされている。
C1=E(E^(M+1−m)(K,w,0),p,1,ID(I)),
・・・,
Ck=E(E^(M+1−m)(K,w,0),p,k,ID(I)),
Ck+1=E(E^(M+1−m)(K,w,1),p,k+1,ID(I)),
・・・,
Cn=E(E^(M+1−m)(K,w,1),p,n,ID(I))。
S706bにおいて、送信部309bは、S705b2で生成した保管索引(ID(I),m,I)を管理装置500bへ送信する。
【0165】
S707bにおいて、受信部501bは、S706bで送信された保管索引(ID(I),m,I)を受信する。
S708b1において、データ保管部503bは、S707bで受信した保管索引(ID(I),m,I)を保管する。
S708b2において、パラメーター保管部502bは、S707bで受信した保管索引(ID(I),m,I)のmから保管されているmの値を更新する。
S712aにより、秘匿検索システム100の登録処理は終了する。
【0166】
図24は、秘匿検索システム100の検索処理を示すフローチャートである。
図24のS801〜S810は、検索装置400bと管理装置500bとが実行する処理である。S801〜S803及びS809〜S810は検索装置400bに、S804〜S808は管理装置500にaよって実行される処理である。
【0167】
なお、本検索処理におけるS801と、S803と、S804〜S805a1と、S808〜S810は、実施の形態2のそれぞれと同様の処理であるため、ここでは省略する。
【0168】
S802bにおいて、多重暗号化部404bは、鍵保管部402から鍵Kを、パラメーター保管部407aからパラメーターmを読み出し、S801で受け取った検索データsに対して鍵Kを用いて、次のようにして検索暗号化データtを生成する。
t=E^(M+1−m)(K,s,0)。
【0169】
S805b2において、照合部504bは、データ保管部503bからすべての保管索引(ID(I),m,I)を読み出す。なお、もしS804で保管索引名も受信していた場合は、その保管索引名に基づき、対象の保管索引のみを読み出す。もしS804で保管索引名を受信していなかった場合は、保管されているすべての保管索引を読み出す。ここで、読み出した複数の保管暗号化データ集合を、
{(ID(I1),1,I1)),・・・,(ID(Im),m,Im)}
とする。
S806bにおいて、照合部504bは、パラメーター保管部502bからパラメーター(L,N)を読み出し、S805b2で読み出した各保管索引の(ID(Ii),i,Ii)(1≦i≦m)に対して、
S805a1で生成された多重暗号化データ(i,ti)に基づき、次のようにして各Iiに対する照合データ集合Xiを生成する。
各p(1≦p≦L)及び各j(1≦j≦N)に対して、
C_pj=E(ti,p,j,ID(Ii))を計算し、
このL×N個の照合データの集合をXiとする。なお、本ステップでは、照合データ集合X1,・・・,Xmが生成される。
S807bにおいて、照合部504bは、検索結果に関わる空集合Rを生成し、S806bで生成された各照合データ集合の
Xi={C_pj}(1≦i≦m,1≦p≦L,1≦j≦N)に対して、
次のようにして照合処理を行い、検索結果Rを生成する。
各C_pjがIiに含まれているかを確認し、
もし含まれていればC_pjとペアで保管されているID(D)を抽出して(ID(D),p)をRに追加する。
なお、前述の通り、もしC_pjはIiに含まれるが、
C_pj+1=E(ti,p,j+1,ID(I))
がIiに含まれない場合は、
E(ti,p,j+2,ID(I)),・・・,E(ti,p,N,ID(I))
もIiには含まれないため、これらの照合処理を省略して検索効率を高めることができる。
【0170】
S810により、秘匿検索システム100の検索処理は終了する。なお、S806bでは、各Iiに対する照合データ集合Xiにおいて、すべてのC_pj(1≦p≦L,1≦j≦N)を生成していたが、前述の通り、もしC_pjはIiに含まれるが、
C_pj+1=E(ti,p,j+1,ID(I))
がIiに含まれない場合は、
E(ti,p,j+2,ID(I)),・・・,E(ti,p,N,ID(I))
もIiには含まれないため、いくつかのC_pjの生成に関わる処理は省略することができる。具体的には、S806bとS807bのステップを完全に分割せず、各C_pjを生成した直後に照合処理を行うといったようにS806bとS807bを繰り返して処理すれば、この効率化は実現できる。
【0171】
本実施の形態でも、削除データ名を削除索引名と読み替えることによって、実施の形態1と同様な削除処理を行うことにより、保管索引の削除が可能である。
【0172】
<本実施の形態の動作具体例>
ここで、本実施の形態の動作を、
パラメーターL=3、パラメーターM=2、パラメーターN=3、
保管データをD1=ABC,ID(D1)=1、
及び保管データD2=BBC,ID(D2)=2、
索引名=3、検索データs=BC、
として説明する。
また暗号化関数Eは、ハッシュ関数を用いて説明する。
【0173】
まず、D1とD2の登録処理について説明する。
S702において、D1=(A,B,C),D2=(B,B,C)と分割される。
S703において、
A1={{(A),(AB),(ABC)},{(B),(BC)},{(C)}}
及び
A2={{(B),(BB),(BBC)},{(B),(BC)},{(C)}}
と生成される。
S704において、
B1={{(1,A),(1,AB),(1,ABC)},{(2,B),(2,BC)},{(3,C)}}及び
B2={{(1,B),(1,BB),(1,BBC)},{(2,B),(2,BC)},{(3,C)}}と生成される。
S705b1において、
次のように集約する。
(1,A,{1},{2}),
(1,AB,{1},{2}),
(1,ABC,{1},{2}),
(1,B,{2},{1}),
(1,BB,{2},{1}),
(1,BBC,{2},{1}),
(2,B,{1,2},{}),
(2,BC,{1,2},{}),
(3,C,{1,2},{})。
S705b2において、m=1が読み出され、
I=
{(C11,1),(C12,2),
(C21,1),(C22,2),
(C31,1),(C32,2),
(C41,2),(C42,1),
(C51,2),(C52,1),
(C61,2),(C62,1),
(C71,1),(C72,2),
(C81,1),(C82,2),
(C91,1),(C92,2)}
を生成し,保管索引(3,1,I)を生成する。
【0174】
ただし、
C11=E(E^2(K,A,0),1,1,3),
C12=E(E^2(K,A,1),1,2,3),
C21=E(E^2(K,AB,0),1,1,3),
C22=E(E^2(K,AB,1),1,2,3),
C31=E(E^2(K,ABC,0),1,1,3),
C32=E(E^2(K,ABC,1),1,2,3),
C41=E(E^2(K,B,0),1,1,3),
C42=E(E^2(K,B,1),1,2,3),
C51=E(E^2(K,BB,0),1,1,3),
C52=E(E^2(K,BB,1),1,2,3),
C61=E(E^2(K,BBC,0),1,1,3),
C62=E(E^2(K,BBC,1),1,2,3),
C71=E(E^2(K,B,0),2,1,3),
C72=E(E^2(K,B,0),2,2,3),
C81=E(E^2(K,BC,0),2,1,3),
C82=E(E^2(K,BC,0),2,2,3),
C91=E(E^2(K,C,0),3,1,3),
C92=E(E^2(K,C,0),3,2,3)、
またM+1−m=2である。
S707b及びS708b1により、保管索引(3,1,I)が保管される。
S708b2〜S712aにより、パラメーター保管部303aのパラメーターmが2に、パラメーター保管部407aとパラメーター保管部502aのパラメーターmが1に更新される。
【0175】
次に、s=BCの検索処理について説明する。
S802aにおいて、m=2を読み出し、
t=E^2(K,s,0)
を計算する。ただし、M+1−m=2である。
S805a1において、m=1を読み出し、t1=tとして、(1,t1)を生成する。
S805b2において、(3,1,I)を読み出す。
S806bにおいて、L=3及びN=3を読み出し、
C_11=E(t1,1,1,3),
C_12=E(t1,1,2,3),
C_13=E(t1,1,3,3),
C_21=E(t1,2,1,3),
C_22=E(t1,2,2,3),
C_23=E(t1,2,3,3),
C_31=E(t1,3,1,3),
C_32=E(t1,3,2,3),
C_33=E(t1,3,3,3)
を計算する。
S807bにおいて、C_11,・・・,C_33がIに含まれているかを確認する。
実際、
C_21
=E(t1,2,1,3)
=C81,C_22
=E(t1,2,2,3)
=C82
であることがわかり、
(C81,1)及び(C82,2)から検索結果R={(1,2),(2,2)}が生成される。
S810において、Rに基づき、
「保管データ名が“1”のデータの“2番目”の位置から検索データBCが現れる」、
「保管データ名が“2”のデータの“2番目”の位置から検索データBCが現れる」
といった検索結果を出力する。
なお、S806bにおいて、生成したC_11を直ちにS807bの照合処理を行うことによって、C_11はIに含まれないので、C_12及びC_13の生成を省略することができる。同様に、C_31もIに含まれないので、C_32及びC_33の生成を省略することができる。このようにして、検索効率を上げることが可能である。
【0177】
本実施の形態におけるハードウェア資源の一例は、実施の形態1と同様であるため省略する。
【0178】
<***実施の形態3の効果***>
本実施の形態は、例えば、以下のような効果を奏する。
本実施の形態では、保管データを1つずつ保管することはせずに、複数の保管データをまとめて保管することによって、実施の形態2と同じMを選択しても、同じ鍵Kで暗号化や保管できる保管データの最大数を大きくすることや、かつ検索効率を向上できる。
【0179】
以上、本発明の実施の形態について説明したが、これらの実施の形態のうち、2つ以上を組み合わせて実施しても構わない。あるいは、これらの実施の形態のうち、1つを部分的に実施しても構わない。あるいは、これらの実施の形態のうち、2つ以上を部分的に組み合わせて実施しても構わない。なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。