(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-05
(45)【発行日】2024-11-13
(54)【発明の名称】秘密計算システム、装置、方法及びプログラム
(51)【国際特許分類】
G06F 21/71 20130101AFI20241106BHJP
G06F 16/2458 20190101ALI20241106BHJP
G06F 21/60 20130101ALI20241106BHJP
G09C 1/00 20060101ALI20241106BHJP
【FI】
G06F21/71
G06F16/2458
G06F21/60 320
G09C1/00 650Z
(21)【出願番号】P 2023532977
(86)(22)【出願日】2021-07-08
(86)【国際出願番号】 JP2021025769
(87)【国際公開番号】W WO2023281693
(87)【国際公開日】2023-01-12
【審査請求日】2023-12-14
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】100121706
【氏名又は名称】中尾 直樹
(74)【代理人】
【識別番号】100128705
【氏名又は名称】中村 幸雄
(74)【代理人】
【識別番号】100147773
【氏名又は名称】義村 宗洋
(72)【発明者】
【氏名】菊池 亮
(72)【発明者】
【氏名】五十嵐 大
(72)【発明者】
【氏名】須藤 弘貴
【審査官】中里 裕正
(56)【参考文献】
【文献】特開2014-164145(JP,A)
【文献】国際公開第2016/120975(WO,A1)
【文献】菊池亮 他,横断的動線分析を秘密計算でやってみよう,2020年 暗号と情報セキュリティシンポジウム予稿集,2020年01月,pp.1-8
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/71
G06F 21/60
G09C 1/00
G06F 16/2458
JSTPlus/JMEDPlus/JST7580(JDreamIII)
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
複数の秘密計算装置を含む秘密計算システムであって、
mはレコード数であり1以上の整数であり、k
→はキーのベクトルk
→=(k
1,…,k
m)であり、f
→はフラグのベクトルf
→=(f
1,…,f
m)であり、αを任意の値又は任意ベクトルとして[α]はαの暗号文であり、暗号文のままαを用いた所定の演算が可能であり、
前記複数の秘密計算装置は、
前記ベクトルf
→の暗号文[f
→]及び前記ベクトルk
→の暗号文[k
→]を用いて、前記ベクトルf
→の否定及び前記ベクトルk
→を結合したベクトルをキーとして、前記ベクトルf
→及び前記ベクトルk
→をそれぞれソートしたベクトルf’
→及びベクトルk’
→の暗号文[f’
→]及び暗号文[k’
→]を生成する複数の第一計算部と、
前記暗号文[f’
→]及び前記暗号文[k’
→]を用いて、i=1,…,m-1として、f’
i=1かつk’
i≠k’
i+1又はf’
i=1かつf’
i+1=0のときe’
i=0、それ以外のときe’
i=1となり、f’
m=1のときe’
m=0であり、それ以外のときe’
m=1であるようなe’
mの暗号文[e’
m]を生成することで、e
i(i=1,…,m)を要素とするベクトルe’
→の暗号文[e’
→]を生成する複数の第二計算部と、
前記mを少なくとも用いて、前記mからフラグが0のレコード数を減じたものをm’として、m’の暗号文[m’]を生成する複数の第三計算部と、
前記暗号文[e’
→]を用いて、i=1,…,mとして、前記ベクトルe
→の要素e
i=0である場合には値がiであり、前記ベクトルe
→の要素e
i=1である場合には値がm’であるx
iの暗号文[x
i]を生成することで、x
i(i=1,…,m)を要素とするベクトルx
→の暗号文[x
→]を生成する複数の第四計算部と、
前記暗号文[e’
→]、前記暗号文[x
→]及び前記暗号文[k’
→]を用いて、前記ベクトルe’
→をキーとして、前記ベクトルx
→、前記ベクトルk’
→及び前記ベクトルe’
→をそれぞれソートしたベクトルx’
→、前記ベクトルk’’
→及び前記ベクトルe’’
→の暗号文[x’
→],暗号文[k’’
→]及び暗号文[e’’
→]を求める複数の第五計算部と、
前記暗号文[x’
→]を用いて、前記ベクトルx’
→の要素x’
1の暗号文[x’
1]を暗号文[c
1]とし、i=2,…,mとして、前記ベクトルx’
→の要素x’
iから要素x’
i-1を減算した値であるc
iの暗号文[c
i]を生成することで、c
i(i=1,…,m)を要素とするベクトルc
→の暗号文[c
→]を生成する複数の第六計算部と、
前記暗号文[e’’
→]を用いて、前記ベクトルe’’
→の各要素を1から減算した値により構成されるベクトルe’’’
→の暗号文[e’’’
→]を計算する複数の第七計算部と、
を含む秘密計算システム。
【請求項2】
請求項1の秘密計算システムであって、
前記複数の秘密計算装置は、前記暗号文[k’’
→]、前記暗号文[c
→]及び前記暗号文[e’’’
→]を出力する複数の出力部を更に含む、
秘密計算システム。
【請求項3】
請求項1の秘密計算システムであって、
前記複数の秘密計算装置は、前記暗号文[k’’
→]、前記暗号文[c
→]及び前記暗号文[e’’’
→]を用いて、前記暗号文[k’’
→]及び前記暗号文[c
→]から、ベクトルe’’’
→の要素e
i’’’のうちダミーレコードを示す要素に対応する要素を削除したものを出力する複数の出力部を更に含む、
秘密計算システム。
【請求項4】
請求項1から3の何れかの秘密計算システムの秘密計算装置。
【請求項5】
mはレコード数であり1以上の整数であり、k
→はキーのベクトルk
→=(k
1,…,k
m)であり、f
→はフラグのベクトルf
→=(f
1,…,f
m)であり、αを任意の値又は任意ベクトルとして[α]はαの暗号文であり、暗号文のままαを用いた所定の演算が可能であり、
複数の第一計算部が、前記ベクトルf
→の暗号文[f
→]及び前記ベクトルk
→の暗号文[k
→]を用いて、前記ベクトルf
→の否定及び前記ベクトルk
→を結合したベクトルをキーとして、前記ベクトルf
→及び前記ベクトルk
→をそれぞれソートしたベクトルf’
→及びベクトルk’
→の暗号文[f’
→]及び暗号文[k’
→]を生成する第一計算ステップと、
複数の第二計算部が、前記暗号文[f’
→]及び前記暗号文[k’
→]を用いて、i=1,…,m-1として、f’
i=1かつk’
i≠k’
i+1又はf’
i=1かつf’
i+1=0のときe’
i=0、それ以外のときe’
i=1となり、f’
m=1のときe’
m=0であり、それ以外のときe’
m=1であるようなe’
mの暗号文[e’
m]を生成することで、e
i(i=1,…,m)を要素とするベクトルe’
→の暗号文[e’
→]を生成する第二計算ステップと、
複数の第三計算部が、前記mを少なくとも用いて、前記mからフラグが0のレコード数を減じたものをm’として、m’の暗号文[m’]を生成する第三計算ステップと、
複数の第四計算部が、前記暗号文[e’
→]を用いて、i=1,…,mとして、前記ベクトルe
→の要素e
i=0である場合には値がiであり、前記ベクトルe
→の要素e
i=1である場合には値がm’であるx
iの暗号文[x
i]を生成することで、x
i(i=1,…,m)を要素とするベクトルx
→の暗号文[x
→]を生成する第四計算ステップと、
複数の第五計算部が、前記暗号文[e’
→]、前記暗号文[x
→]及び前記暗号文[k’
→]を用いて、前記ベクトルe’
→をキーとして、前記ベクトルx
→、前記ベクトルk’
→及び前記ベクトルe’
→をそれぞれソートしたベクトルx’
→、前記ベクトルk’’
→及び前記ベクトルe’’
→の暗号文[x’
→],暗号文[k’’
→]及び暗号文[e’’
→]を求める第五計算ステップと、
複数の第六計算部が、前記暗号文[x’
→]を用いて、前記ベクトルx’
→の要素x’
1の暗号文[x’
1]を暗号文[c
1]とし、i=2,…,mとして、前記ベクトルx’
→の要素x’
iから要素x’
i-1を減算した値であるc
iの暗号文[c
i]を生成することで、c
i(i=1,…,m)を要素とするベクトルc
→の暗号文[c
→]を生成する第六計算ステップと、
複数の第七計算部が、前記暗号文[e’’
→]を用いて、前記ベクトルe’’
→の各要素を1から減算した値により構成されるベクトルe’’’
→の暗号文[e’’’
→]を計算する第七計算ステップと、
を含む秘密計算方法。
【請求項6】
請求項5の秘密計算方法の各ステップとしてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データを秘匿したままデータベース演算を行う技術に関する。
【背景技術】
【0002】
データを安全に扱うために、暗号化したまま分析する秘密計算という技術が研究されている。その中でも、暗号化したまま条件に合うデータの取り出しや集計値などを効率的に算出するために、暗号化データベース処理が考えられている。
【0003】
DB処理の一種であるgroup by演算とはグループ化処理であり、テーブルを入力とし、指定したカラムの値ごとにグループ化し、場合によってそのグループごとの統計値を計算してテーブル形式で出力するものである。
【0004】
group by演算を暗号化したまま行う方法は非特許文献1にて提案されている。ここで考えられている入出力は、通常のテーブルを、各要素ごとに暗号化したテーブルであった。
【0005】
一方、暗号化したままデータベース処理を行う場合、その入出力は、通常のテーブルとは異なり、あるレコードが本来の出力か否かを示すフラグが付与されていることが考えられる。
【0006】
k
→をキーのベクトルとし、v
→をバリューのベクトルとし、f
→をフラグのベクトルとし、[・]を暗号化したデータとして、
図7(a)に通常の暗号化されていないテーブルの例を、
図7(b)に非特許文献1における暗号化されたテーブルの例を、
図7(c)にフラグが追加されているテーブルの例を示す。
【0007】
図7において、“?”は何かしらの値が入っていることを示す。フラグが0の場合、そのレコードのバリューは無視されるため、この“?”のバリューの値は任意である。
【先行技術文献】
【非特許文献】
【0008】
【文献】菊池亮, 濱田浩気, 五十嵐大, 高橋元, 高橋克巳, 「横断的動線分析を秘密計算でやってみよう」, In SCIS,2020.
【発明の概要】
【発明が解決しようとする課題】
【0009】
図7(c)に例示するフラグが追加されているテーブルが入力される場合、非特許文献1で提案されたアルゴリズムは機能しない。なぜなら、入力の形式が異なることに加えて、今までは全てのレコードが意味のある値であることを想定していたため、例えば、使わないレコードをスキップして処理を行うことができておらず、無視すべき“?”の値が最終結果に影響してしまい、本来の結果を得ることができないためである。
【0010】
本発明は、フラグが追加されているテーブルに対してgroup by count演算を行う秘密計算システム、装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
この発明の一態様による秘密計算システムは、複数の秘密計算装置を含む秘密計算システムであって、mはレコード数であり1以上の整数であり、k→はキーのベクトルk→=(k1,…,km)であり、f→はフラグのベクトルf→=(f1,…,fm)であり、αを任意の値又は任意ベクトルとして[α]はαの暗号文であり、暗号文のままαを用いた所定の演算が可能であり、複数の秘密計算装置は、ベクトルf→の暗号文[f→]及びベクトルk→の暗号文[k→]を用いて、ベクトルf→の否定及びベクトルk→を結合したベクトルをキーとして、ベクトルf→及びベクトルk→をそれぞれソートしたベクトルf’→及びベクトルk’→の暗号文[f’→]及び暗号文[k’→]を生成する複数の第一計算部と、暗号文[f’→]及び暗号文[k’→]を用いて、i=1,…,m-1として、f’i=1かつk’i≠k’i+1又はf’i=1かつf’i+1=0のときe’i=0、それ以外のときe’i=1となり、f’m=1のときe’m=0であり、それ以外のときe’m=1であるようなe’mの暗号文[e’m]を生成することで、ei(i=1,…,m)を要素とするベクトルe’→の暗号文[e’→]を生成する複数の第二計算部と、mを少なくとも用いて、mからフラグが0のレコード数を減じたものをm’として、m’の暗号文[m’]を生成する複数の第三計算部と、暗号文[e’→]を用いて、i=1,…,mとして、ベクトルe→の要素ei=0である場合には値がiであり、ベクトルe→の要素ei=1である場合には値がm’であるxiの暗号文[xi]を生成することで、xi(i=1,…,m)を要素とするベクトルx→の暗号文[x→]を生成する複数の第四計算部と、暗号文[e’→]、暗号文[x→]及び暗号文[k’→]を用いて、ベクトルe’→をキーとして、ベクトルx→、ベクトルk’→及びベクトルe’→をそれぞれソートしたベクトルx’→、ベクトルk’’→及びベクトルe’’→の暗号文[x’→],暗号文[k’’→]及び暗号文[e’’→]を求める複数の第五計算部と、暗号文[x’→]を用いて、ベクトルx’→の要素x’1の暗号文[x’1]を暗号文[c1]とし、i=2,…,mとして、ベクトルx’→の要素x’iから要素x’i-1を減算した値であるciの暗号文[ci]を生成することで、ci(i=1,…,m)を要素とするベクトルc→の暗号文[c→]を生成する複数の第六計算部と、暗号文[e’’→]を用いて、ベクトルe’’→の各要素を1から減算した値により構成されるベクトルe’’’→の暗号文[e’’’→]を計算する複数の第七計算部と、を備えている。
【発明の効果】
【0012】
フラグが追加されているテーブルに対してgroup by count演算を行うことができる。
【図面の簡単な説明】
【0013】
【
図1】
図1は、秘密計算システムの機能構成の例を示す図である。
【
図2】
図2は、秘密計算装置の機能構成の例を示す図である。
【
図5】
図5は、入力の例と出力の例を説明するための図である。
【
図6】
図6は、秘密計算方法の処理手続きの例を示す図である。
【
図7】
図7は、背景技術を説明するための図である。
【
図8】
図8は、コンピュータの機能構成例を示す図である。
【発明を実施するための形態】
【0014】
以下、本発明の実施の形態について詳細に説明する。なお、図面中において同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【0015】
なお、文中で使用する記号「→」は、本来直後の文字の真上に記載されるべきものであるが、テキスト記法の制限により、当該文字の直後に記載する。
【0016】
暗号化されたデータを[x]と書き、ベクトルをx→=(x1,…,xn)と書き、[x→]=([x1],…,[xn])とする。
【0017】
暗号化は、秘密分散(例えば参考文献1)や準同型暗号(例えば参考文献2)など、暗号化したまま下記の演算が可能な方法で行われるとする。暗号文[・]の・がビット値である場合には、暗号文[・]を暗号文[[・]]と記述することがある。また、置換には<π>という記述を用いることがある。・は、任意の値、ベクトルである。格納する値に対して異なる暗号化を用いてもよい。すなわち、これらの暗号化は全て同じものであっても、そうでなくてもよい。
【0018】
すなわち、αを任意の値又は任意ベクトルとして[α]はαの暗号文であり、βを任意の置換として<β>はβの暗号文である。
【0019】
<参考文献1>Dai Ikarashi, Ryo Kikuchi, Koki Hamada, and Koji Chida. Actively private and correct MPC scheme in t < n/2 from passively secure schemes with small overhead. IACR Cryptology ePrint Archive, Vol. 2014, p. 304, 2014.
<参考文献2>Zvika Brakerski, Craig Gentry, and Vinod Vaikuntanathan. Fully homomorphic encryption without bootstrapping. Electronic Colloquium on Computational Complexity (ECCC), Vol. 18, p. 111, 2011.
加減算、定数倍に関して、秘密分散と準同型暗号はサポートされているとする。すなわち、c[a]±[b] ±d=[ca±b±d]の関係が成立しているとする。
【0020】
乗算は、秘密分散であれば参考文献1に記載された方法で、準同型暗号であれば準同型演算で計算可能である。乗算を、[c]←Mult([a],[b])と記述する。ここで、c=abである。
【0021】
安定ソートは、入力[x→]=([x1],…,[xn])を、i∈{1,…,n-1}について、xi’≦xi+1’であるような[x’→]=([x1’],…,[xn’])に並び替える処理である。ただし、xi’=xi+1’であるとき元々のx→の並び順が優先されるものとする。
【0022】
安定ソートは、より具体的には2個のアルゴリズム(GENPERM,SORT)からなる。
【0023】
GENPERMは、x→を並び替える置換πを暗号化したものを出力する関数である。GENPERMは、<π>←GENPERM([x→])と記述される。
【0024】
SORTは、πをx→に適用し並び替えたものx’→を暗号化したまま計算する関数である。SORTは、例えば[x→’]←SORT(<π>,[x→])と記述される。
【0025】
記載の簡略化のため、複数のベクトルのそれぞれを同じ置換でソートする際には、SORTは、例えば([x’→],[y’→])←SORT(<π>,([x→],[y→]))と記述される。
【0026】
SORTの自明な構成方法は、ソーティングネットワークを用いる方法である。また、秘密分散であれば、参考文献3に記載された方法により効率よくSORTを行うことができる。
【0027】
<参考文献3>Koji Chida, Koki Hamada, Dai Ikarashi, Ryo Kikuchi, Naoto Kiribuchi, and Benny Pinkas. An efficient secure three-party sorting protocol with an honest majority. IACR Cryptology ePrint Archive, Vol. 2019, p. 695, 2019.
等号判定EQは、[x],[y]を入力として、x=yならば1、x≠yならば0となるようなeの暗号文[e]を出力する関数である。EQは、例えば[e]←EQ([x],[y])と記述される。ここで、eはx=yならば1、x≠yならば0である。
【0028】
複数の要素の等号判定を行う場合、EQは、例えば[e]←EQ(([a],[b]),([c],[d]))と記述される。ここで、eは、a=cかつb=dならば1、そうでないならば0である。
【0029】
一般にビット表現でデータが暗号化されているならば、[x-y]の各ビットが0かどうかを回路計算することにより、等号判定を行うことができる。回路計算は、加減算と乗算で計算可能である。
【0030】
整数表現で暗号化されている場合であれば、ビット分解(例えば、参考文献4参照。)を用いてビット表現に変更して同様に回路計算することにより、等号判定を行うことができる。
【0031】
<参考文献4>Ryo Kikuchi, Dai Ikarashi, Takahiro Matsuda, Koki Hamada, and Koji Chida. Efficient bitdecomposition and modulus-conversion protocols with an honest majority. In ACISP 2018, pp.64-82, 2018.
他にもmod p上で暗号化されているのであれば、[(x-y)p-1]を乗算を使って計算しても、等号判定を行うことができる。
【0032】
IFTHENは、フラグ[f](ただしf∈{0,1})と[x],[y]を入力として、f=1ならば[x]を、f=0ならば[y]を出力する関数である。IFTHENは、例えば[e]←IFTHEN([f]:[x],[y])と記述される。ここで、eは、f=1ならばxであり、f=0ならばyである。
【0033】
IFTHENは、Mult([f],[x])+Mult([1-f],[y])などで例えば実現することができる。
【0034】
MODCONVは、ビット値の暗号化[[a]]を入力として、同じ値の暗号化ではあるが暗号文の形が違う[a]を生成する関数である。言い換えれば、MODCONVは、ビット値の暗号文[[a]]を入力として、aを整数表現した値の暗号文[a]を生成する関数である。MODCONVは、例えば[a]←MODCONV([[a]])と記述される。
【0035】
BITDECOMPは、整数値の暗号化[a]を入力として、aをビット表現した同じ値の暗号化ではあるが、暗号文の形が違う[[a]]を生成する関数である。言い換えれば、BITDECOMPは、整数値の暗号文[a]を入力として、aをビット表現した値の暗号文[[a]]を生成する関数である。BITDECOMPは、例えば[[k→]]←BITDECOMP([k→])と記述される。ただし、k→=(k1,k2,…,kL)としたとき,k=Σi=1
L2i-1kiである。
【0036】
秘密計算システム、装置、方法及びプログラムの処理の対象となるテーブルのレコード数はmである。このテーブルは、キーのベクトルk→の暗号文[k→]、フラグのベクトルf→の暗号文[f→]から少なくとも構成されているとする。暗号文[f→]の要素はビットの暗号文であるとする。もし、ビット出なかった場合はビット分解プロトコルでビットに変換する。
【0037】
秘密計算システム、装置、方法及びプログラムの処理の対象となるテーブルを、
図5(a)に例示する。group by count演算は、バリューを使わないため、
図5(a)に例示するテーブルでは、キーk
→の暗号文[k
→]とフラグf
→の暗号文[f
→]のみが記載されている。
【0038】
秘密計算システム、装置、方法及びプログラムによるgroup by count演算により、
図5(a)に示すテーブルから、例えば
図5(b)に示すテーブルが得られる。[k’’
→]はキーのベクトルk
→の要素を並び替えたベクトルk’’
→の暗号文である。[c
→]はカウント数から構成されるベクトルc
→の暗号文である。[[e’’
→]]はベクトルk’’
→に対応するフラグのベクトルe’’
→の暗号文である。
【0039】
図5(a)では、暗号文[k’’
→]の[1]のキーの数が2個であり、暗号文[k’’
→]の[2]のキーの数が1個であり、暗号文[k’’
→]の[3]のキーの数が4個である。
【0040】
このため、
図5(b)では、暗号文[k’’
→]の[1]に対応する暗号文[c
→]の要素が[2]となっており、暗号文[k’’
→]の[2]に対応する暗号文[c
→]の要素が[1]となっており、暗号文[k’’
→]の[4]に対応する暗号文[c
→]の要素が[2]となっている。
【0041】
図1を参照して、秘密計算システム及び方法の構成例を説明する。この秘密計算システム及び方法は、いわゆるgroup by count演算を秘密計算で行うものである。
【0042】
秘密計算システムは、N(≧2)台の秘密計算装置11,…,1Nを含む。本形態では、秘密計算装置11, …, 1Nのそれぞれは通信網2に接続されている。通信網2は、接続される各装置が相互に通信可能なように構成された回線交換方式もしくはパケット交換方式の通信網であり、例えばインターネットやLAN(Local Area Network)、WAN(Wide Area Network)などである。なお、各装置は必ずしも通信網2を介してオンラインで通信可能である必要はない。例えば、秘密計算装置11, …, 1Nへ入力する情報を磁気テープやUSBメモリなどの可搬型記録媒体に記憶し、その可搬型記録媒体から秘密計算装置11, …,1Nへオフラインで入力するように構成してもよい。
【0043】
図2を参照して、秘密計算システムに含まれる秘密計算装置1
n(n=1, …, N)の構成例を説明する。秘密計算システムの秘密計算装置1
nは、例えば、
図2に示すように、第一計算部11
n、第二計算部12
n、第三計算部13
n、第四計算部14
n、第五計算部15
n、第六計算部16
n、第七計算部17
n、出力部18
nnを備えている。
【0044】
秘密計算装置1
n(1≦n≦N)の各構成部が他の秘密計算装置1
n'(n'=1, …, N、ただしn≠n')の各構成部と協調しながら後述する及び
図6に例示する各ステップの処理を行うことにより実施形態の秘密計算が実現される。
【0045】
なお、各ステップの処理は、秘密計算により行われる。すなわち、秘密計算装置1nは、暗号文を復元することなく、言い換えれば暗号文の中身を知ることなく、各ステップの処理を行う。
【0046】
秘密計算装置1nは、例えば、中央演算処理装置(CPU: Central Processing Unit)、主記憶装置(RAM: Random Access Memory)などを有する公知又は専用のコンピュータに特別なプログラムが読み込まれて構成された特別な装置である。秘密計算装置1nは、例えば、中央演算処理装置の制御のもとで各処理を実行する。秘密計算装置1nに入力されたデータや各処理で得られたデータは、例えば、主記憶装置に格納され、主記憶装置に格納されたデータは必要に応じて中央演算処理装置へ読み出されて他の処理に利用される。秘密計算装置1nの各構成部は、少なくとも一部が集積回路等のハードウェアによって構成されていてもよい。
【0047】
<第一計算部111,…,11N>
複数の第一計算部111,…,11Nには、ベクトルf→の暗号文[f→]及びベクトルk→の暗号文[k→]が入力される。
【0048】
複数の第一計算部111,…,11Nは、ベクトルf→の暗号文[f→]及びベクトルk→の暗号文[k→]を用いて、ベクトルf→の否定及びベクトルk→を結合したベクトルをキーとして、ベクトルf→及びベクトルk→をそれぞれソートしたベクトルf’→及びベクトルk’→の暗号文[f’→]及び暗号文[k’→]を生成する(ステップS1)。
【0049】
この複数の第一計算部11
1,…,11
Nによる処理は、
図3の「1:」から「4:」の処理により例えば実現される。
【0050】
すなわち、複数の第一計算部111,…,11Nは、
1:[[k†→]]←BITDECOMP([k→])
2:[[f*→]]←1-[[f→]]
3:<π>←GENPERM([[f*→]],[[k†→]])
4:([[k’→]],[k’→],[[f’→]])←SORT(<π>,([[k†→]],[k→],[[f→]]))
という処理を例えば行う。
【0051】
図3の例では、暗号文[f’
→]として暗号文[[f’
→]]が生成されている。また、
図3の例では、暗号文[k’
→]として暗号文[[k’
→]]及び暗号文[k’
→]が生成されている。
【0052】
なお、GENPERM([[f*→]],[[k†→]])は、暗号文[[f*→]]及び暗号文[[k†→]]を用いて、ベクトルf*→及びベクトルk†→を要素ごとに結合したベクトルを安定ソートする置換πの暗号文<π>を生成する処理を意味する。
【0053】
<第二計算部121,…,12N>
複数の第二計算部121,…,12Nには、暗号文[f’→]及び暗号文[k’→]が入力される。
【0054】
複数の第二計算部121,…,12Nは、暗号文[f’→]及び暗号文[k’→]を用いて、i=1,…,m-1として、f’i=1かつk’i≠k’i+1又はf’i=1かつf’i+1=0のときe’i=0、それ以外のときe’i=1となり、f’m=1のときe’m=0であり、それ以外のときe’m=1であるようなe’mの暗号文[e’m]を生成することで、ei(i=1,…,m)を要素とするベクトルe’→の暗号文[e’→]を生成する(ステップS2)。
【0055】
この複数の第二計算部12
1,…,12
Nによる処理は、
図3の「5:」から「10:」の処理により例えば実現される。
【0056】
すなわち、複数の第二計算部121,…,12Nは、
5:each 1≦i≦m-1 do
6: [[ei]]←IFTHEN([[f’i]]:EQ([[k’i]],[[k’i+1]]),[[1]])
7: [[e’i]]←IFTHEN([[f’i]]XOR[[f’i+1]]:[[0]],[[ei]])
8: [e’i]←MODCONV([[e’i]])
9:[[e’m]]=1-[[fm]]
10:[e’m]←MODCONV([[e’m]])
という処理を例えば行う。
【0057】
<第三計算部131,…,13N>
複数の第三計算部131,…,13Nには、mが少なくとも入力される。
【0058】
複数の第三計算部131,…,13Nは、mを少なくとも用いて、mからフラグが0のレコード数を減じたものをm’として、m’の暗号文[m’]を生成する(ステップS3)。
【0059】
この複数の第三計算部13
1,…,13
Nによる処理は、
図3の「11:」から「12:」の処理により例えば実現される。
【0060】
すなわち、複数の第三計算部131,…,13Nは、
11:[f*]←MODCONV(1-[[f’→]])
12:[m’]=m - Σi=1
m[f*
i]
という処理を例えば行う。
【0061】
この例では、複数の第三計算部131,…,13Nに暗号文[[f’→]]が更に入力され、複数の第三計算部131,…,13Nは、この暗号文[[f’→]]を更に用いて、暗号文[m’]を生成している。
【0062】
なお、複数の第三計算部131,…,13Nは、暗号文[[f’→]]に代えて暗号文[f’→]を用いて、上記と同様にして、暗号文[m’]を生成してもよい。
【0063】
<第四計算部141,…,14N>
複数の第四計算部141,…,14Nには、暗号文[e’→]が入力される。
【0064】
複数の第四計算部141,…,14Nは、暗号文[e’→]を用いて、i=1,…,mとして、ベクトルe→の要素ei=0である場合には値がiであり、ベクトルe→の要素ei=1である場合には値がm’であるxiの暗号文[xi]を生成することで、xi(i=1,…,m)を要素とするベクトルx→の暗号文[x→]を生成する(ステップS4)。
【0065】
この複数の第四計算部14
1,…,14
Nによる処理は、
図3の「13:」から「14:」の処理により例えば実現される。
【0066】
すなわち、複数の第四計算部141,…,14Nは、
13:each 1≦i≦m do
14: [xi]←IFTHEN([e’i]:[m’],[i])
という処理を例えば行う。
【0067】
<第五計算部151,…,15N>
複数の第五計算部151,…,15Nには、暗号文[e’→]、暗号文[x→]及び暗号文[k’→]が入力される。
【0068】
複数の第五計算部151,…,15Nは、暗号文[e’→]、暗号文[x→]及び暗号文[k’→]を用いて、ベクトルe’→をキーとして、ベクトルx→、ベクトルk’→及びベクトルe’→をそれぞれソートしたベクトルx’→、ベクトルk’’→及びベクトルe’’→の暗号文[x’→],暗号文[k’’→]及び暗号文[e’’→]を生成する(ステップS5)。
【0069】
この複数の第五計算部15
1,…,15
Nによる処理は、
図3の「15:」から「16:」の処理により例えば実現される。
【0070】
すなわち、複数の第五計算部151,…,15Nは、
15:<π’>←GENPERM([[e’→]])
16:([x’→],[[e’’→]],[k’’→])←SORT(<π’>,([x→],[[e’→]],[k’→]))
という処理を例えば行う。
【0071】
図3の例では、暗号文[e’
→]として暗号文[[e’
→]]が用いられている。また、
図3の例では、暗号文[e’’
→]として暗号文[[e’’
→]]が生成されている。
【0072】
<第六計算部161,…,16N>
複数の第六計算部161,…,16Nには、暗号文[x’→]が入力される。
【0073】
複数の第六計算部161,…,16Nは、暗号文[x’→]を用いて、ベクトルx’→の要素x’1の暗号文[x’1]を暗号文[c1]とし、i=2,…,mとして、ベクトルx’→の要素x’iから要素x’i-1を減算した値であるciの暗号文[ci]を生成することで、ci(i=1,…,m)を要素とするベクトルc→の暗号文[c→]を生成する(ステップS6)。
【0074】
この複数の第六計算部16
1,…,16
Nによる処理は、
図3の「17:」から「19:」の処理により例えば実現される。
【0075】
すなわち、複数の第六計算部161,…,16Nは、
17:[c1]=[x’1]
18:each 2≦i≦m do
19: [ci]=[x’i]-[x’i-1]
という処理を例えば行う。
【0076】
<第七計算部171,…,17N>
複数の第七計算部171,…,17Nには、暗号文[e’’→]が入力される。
【0077】
複数の第七計算部171,…,17Nは、暗号文[e’’→]を用いて、ベクトルe’’→の各要素を1から減算した値により構成されるベクトルe’’’→の暗号文[e’’’→]を計算する(ステップS2)。
【0078】
この複数の第七計算部17
1,…,17
Nによる処理は、
図3の「20:」の処理により例えば実現される。
【0079】
すなわち、複数の第七計算部171,…,17Nは、
20:[[e’’’→]] =1-[[e’’→]]
という処理を例えば行う。
【0080】
図3の例では、暗号文[e’’
→]として暗号文[[e’’
→]]が用いられている。また、
図3の例では、暗号文[e’’’
→]として暗号文[[e’’’
→]]が生成されている。
【0081】
<出力部181,…,18N>
複数の出力部181,…,18Nには、暗号文[k’’→]、暗号文[c→]及び暗号文[e’’’→]が入力される。
【0082】
複数の出力部181,…,18Nは、暗号文[k’’→]、暗号文[c→]及び暗号文[e’’’→]を出力する出力を行う(ステップS8)。
【0083】
なお、複数の出力部181,…,18Nは、暗号文[k’’→]、暗号文[c→]及び暗号文[e’’’→]を用いて、暗号文[k’’→]及び暗号文[c→]から、ベクトルe’’’→の要素ei’’’のうちダミーレコードを示す要素に対応する要素を削除したものを出力してもよい。
【0084】
暗号文[k’’
→]、暗号文[c
→]及び暗号文[e’’’
→]が例えば
図5(b)に示されるものである場合には、複数の出力部18
1,…,18
Nは、暗号文[e’’’
→]の要素[1]に対応する、暗号文[k’’
→]及び暗号文[c
→]の要素のみを出力してもよい。なお、
図5(b)の暗号文[[e’’’
→]]は、暗号文[e’’’
→]に対応している。すなわち、この場合、複数の出力部18
1,…,18
Nは、暗号文[k’’
→]及び暗号文[c
→]の3番目までの要素を出力してもよい。
【0085】
このように、ダミーフラグの否定を最上位ビットに配置してソートすることでダミーレコードを最下位レコードとし、また、グループの境界判定ビットについて、フラグが0ならば境界にならないようなif文処理を加えることで、復号することなくgroup by countを達成することができる。
【0086】
なお、秘密計算装置1
1, …, 1
Nは、いわゆるnull処理を行ってもよい。このnull処理は、例えば、複数の第四計算部14
1,…,14
Nにより行われる、
図4の「14:」の2行目の処理により例えば実現される。
【0087】
すなわち、複数の第四計算部14
1,…,14
Nは、
13:each 1≦i≦m do
14: [x
i]←IFTHEN([e’
i]:[m’],[i])
[k’’
i]←IFTHEN([e’
i]:[null],[k’’
i])
という処理を例えば行ってもよい。これにより、例えば、
図5(b)に示すような暗号文[k’’
→]が生成される。
【0088】
なお、
図5(b)において暗号文[[e’’’
→]]が[[0]]となっているレコード、言い換えれば暗号文[k’’
→]が[null]となっているレコードがダミーレコードである。
【0089】
[変形例]
以上、本発明の実施の形態について説明したが、具体的な構成は、これらの実施の形態に限られるものではなく、本発明の趣旨を逸脱しない範囲で適宜設計の変更等があっても、本発明に含まれることはいうまでもない。
【0090】
実施の形態において説明した各種の処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【0091】
例えば、秘密計算装置の構成部間のデータのやり取りは直接行われてもよいし、図示していない記憶部を介して行われてもよい。
【0092】
[プログラム、記録媒体]
上述した各装置の各部の処理をコンピュータにより実現してもよく、この場合は各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムを
図8に示すコンピュータ1000の記憶部1020に読み込ませ、演算処理部1010、入力部1030、出力部1040などに動作させることにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【0093】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体は、例えば、非一時的な記録媒体であり、具体的には、磁気記録装置、光ディスク、等である。
【0094】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD-ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【0095】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の非一時的な記憶装置である補助記録部1050に格納する。そして、処理の実行時、このコンピュータは、自己の非一時的な記憶装置である補助記録部1050に格納されたプログラムを記憶部1020に読み込み、読み込んだプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを記憶部1020に読み込み、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの(コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等)を含むものとする。
【0096】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【0097】
その他、この発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。