[実施の形態1]
本実施の形態では、図2に示すように、性別、年齢及び年収という複数の属性の属性値を含む複数のレコードが秘匿化された状態で、男性の平均年収、20代の平均年収といったように、「年収」という集計すべき属性とは異なる属性「性別」や「年齢」の集計単位(例えば「男」や「女」、「20歳代」「30歳代」など)毎に集計を行う。集計単位は、「20代男性」といったように複数の属性の属性値の組み合わせである場合もある。
これを実現するためのフレームワークを図3に示す。本実施の形態でも、ローカル環境において、(1)データの暗号化及び(3)暗号化された集計結果の復号化を実施する。これらの処理は1又は複数のコンピュータにより実行される。また、暗号化されたデータの保管(例えばデータベース(DB)への蓄積)及び(2)暗号化されたデータに対する準同型加算処理については、クラウドで行う。クラウド側でも、1又は複数のコンピュータによって、データの保管及び準同型加算処理を実施する。
(1)データの暗号化の前に、レコードに含まれる複数の属性を、集計対象の属性と、集計単位を設定する属性とに分類する。図3の例では、年収が集計対象の属性であり、性別が集計単位を設定する属性である。集計単位は「男」及び「女」である。
そして、(1)データの暗号化を行う場合には、暗号化対象のレコードにおいて集計単位が設定されている属性の属性値に応じて集計単位を特定し、当該集計単位に応じた準同型暗号処理を、公開鍵を用いて集計対象の属性の属性値に対して実施する。例えば、性別「男」であれば性別「男」に応じた準同型暗号処理を年収「312」又は「277」に対して実施し、性別「女」であれば性別「女」に応じた準同型暗号処理を年収「451」に対して実施する。この準同型暗号処理の詳細については、後に述べる。なお、集計対象の属性以外の属性の属性値については、準同型暗号を用いなくても良いが、用いても良い。暗号方式は、一般的な確率的暗号方式であってもよい。公開鍵方式であってもよいし共通鍵方式であっても良い。
このようにして暗号化されたデータは、クラウドに送信されてクラウドのDBで保管される。その後、ローカル環境におけるユーザなどから指示があると、(2)準同型加算処理を実施する。本実施の形態では、DBに蓄積されている暗号化データについて、通常どおりの準同型暗号の加算演算を実施することで暗号化演算結果を生成して、要求元のローカル環境に送信する。
そして、ローカル環境では、(3)暗号化演算結果の復号化を秘密鍵を用いて実施する。この復号化においては、クラウドから受信した暗号化演算結果に対して、例えばローカル環境におけるユーザが指定した特定の集計単位に応じた、準同型暗号の復号化処理を実施し、特定の集計単位についての、集計対象の属性値の集計結果を抽出する。例えば集計単位である性別「男」を指定した場合には、性別「男」に応じた、準同型暗号の復号化処理を実施して、集計対象の属性である年収の値を抽出する。図3の例では「589」が得られる。ここで男の人数が分かれば、男の平均年収を算出することも可能である。準同型暗号の復号化処理の詳細については、後に詳しく述べる。
次に、本実施の形態で用いられる準同型暗号の暗号処理及び復号処理について説明する。なお、本実施の形態では2種類の手法を採用でき、それぞれについて説明する。
[Elgamalベースの手法]
(A)鍵のセットアップ
前処理として鍵のセットアップを実施する。秘密鍵sを、0<s<n−1(nは素数の法)を満たす乱数により生成する。また、秘密鍵として、集計単位の個数bに対応する素数pa(a=1,2,..,b)を生成する。
さらに、公開鍵として、素数の法nと、法n上の原始元である元gと、暗号化鍵y=gs(mod n)と、b個の集計単位に対応するb個の元gaと、互いに異なる素数pa(a=1,2,..,b)とを生成する。
また、paに対応する逆元ha=pa -1(mod p1,..pa-1pa+1,..,pb)を生成する場合もある。
なお、素数paは、集計単位aで集計した結果である集計値の最大値として設定する。集計単位aに対応する元gaは、ga(mod n)=1を満たすように設定される。
さらに、素数nは、秘密鍵である素数paを用いてn=p1×p2×・・・pb×q×k+1の形で表される。なお、qは十分大きな素数(80ビットから128ビット)であり、kは任意の偶数である。
(B)暗号化処理
ローカル環境に、例えば図4に示すような暗号化処理装置100を設ける。暗号化処理装置100は、データ入力部101と、送信部102と、データ格納部103と、公開鍵格納部104と、元選択部105と、暗号文生成部106と、乱数生成部107とを有する。
データ入力部101は、ユーザからの入力又はローカル環境における他のコンピュータなどから暗号化すべき平文データを取得してデータ格納部103に格納する。送信部102は、データ格納部103に格納され且つ暗号化されたデータをクラウド環境に送信する。公開鍵格納部104は、公開鍵のデータを格納する。乱数生成部107は、公開鍵に含まれる法nに従って、乱数を発生させ、暗号文生成部106に出力する。元選択部105は、データ格納部103に格納されているデータに含まれ且つ集計単位が設定されている属性の属性値に応じて、公開鍵格納部104に格納されている元を選択して、暗号文生成部106に出力する。暗号文生成部106は、元選択部105からの元と、公開鍵格納部104に格納されている他の公開鍵のデータを用いて、暗号文生成のための処理を実施し、データ格納部103に格納する。
このような暗号化処理装置100の処理内容を図5を用いて説明する。例えば、データ入力部101は、複数の属性の属性値を含む平文mを取得して、データ格納部103に格納する(ステップS1)。また、暗号文生成部106は、この平文mに応じて、乱数生成部107に対して乱数rを生成するように指示し、これに対して乱数生成部107は、0<r<n−1を満たす乱数rを生成し、暗号文生成部106に出力する(ステップS3)。
そして、暗号文生成部106は、暗号文1としてc=gr(mod n)を生成し、データ格納部103に格納する(ステップS5)。また、元選択部105は、平文mにおいて集計単位が設定されている特定の属性の属性値に応じて集計単位iを特定し、当該集計単位iに対応する元giを選択し、当該元giを暗号文生成部106に出力する(ステップS7)。
そして、暗号文生成部106は、公開鍵に含まれる暗号化鍵yと法nと乱数rと平文mと元giとから、暗号文2であるd=yrgi m(mod n)を生成し、データ格納部103に格納する(ステップS9)。そうすると、送信部102は、データ格納部103に格納されている暗号文(c,d)を、クラウド環境の所定のコンピュータ宛に送信する(ステップS11)。
以上のような処理を実施することで、以下で説明するように、集計単位毎の集計を実施することができるようになる。
なお、クラウド環境において実施すべき準同型加算演算については、従来のElgamal暗号において行われる準同型暗号処理と全く同じ演算であるから、詳しい説明を省略する。但し、通常のElgamalでは、C=1及びD=1を初期値として、C=C×ci(mod n2)及びD=D×di(mod n)(iはデータの暗号文のインデックス)を繰り返すと、Dにおいて同じ元gのべき数として平文miの集計値が与えられるようになる。しかしながら、本実施の形態では、元が集計単位毎に異なるので、同じ演算を実施すると、以下のようになる。
C=gr1+r2+...rt(mod n)
D=yr1+r2+...+rtg1 M1g2 M2・・・gt Mt(mod n)
なお、gs(mod n)=yである。また、M1乃至Mtは、集計単位1乃至tの各々について集計対象属性の属性値を加算した結果である。
(C)復号化処理
ローカル環境に、例えば図6に示すような復号化処理装置120を設ける。
復号化処理装置120は、入力部121と、通信部122と、データ格納部123と、鍵格納部124と、素数選択部125と、復号演算部126と、BSGS処理部127とを有する。
入力部121は、ローカル環境のユーザなどからの指示を受け付け、通信部122、素数選択部125及び復号演算部126等に処理を指示する。また、通信部122は、例えば集計要求をクラウドに送信して、その応答として暗号化演算結果を受信し、データ格納部123に格納する。鍵格納部124は、公開鍵及び秘密鍵を格納している。また、素数選択部125は、入力部121から指定される集計単位wに応じて、復号演算部126で用いられる素数を抽出し、復号演算部126に出力する。復号演算部126は、暗号化演算結果に対して、鍵格納部124に格納されている鍵のデータ及び素数選択部125により選択された素数のデータを用いて、復号処理のための演算を実施し、処理結果をデータ格納部123に格納する。また、復号演算部126から指示を受けたBSGS処理部127は、データ格納部123に格納された復号演算結果に対して、周知のBSGS法にて集計結果を抽出する処理を実施し、データ格納部123に格納する。
次に、図7を用いて復号化処理装置120の処理内容について説明する。入力部121は、ユーザなどから集計単位wの指定を含む集計指示を受け付けると、通信部122に対して集計要求をクラウドに送信するように指示する。そうすると、通信部122は、クラウドに対して集計要求を送信し、クラウドから集計要求の応答として暗号化演算結果(暗号文(C,D)とも呼ぶ。)を受信し、データ格納部123に格納する。また、入力部121は、指定された集計単位wのデータを素数選択部125に出力する(ステップS31)。なお、集計単位t個あるものとする。また、入力部121は、復号演算部126に処理を指示する。
復号演算部126は、鍵格納部124に格納されている秘密鍵s及び法nから、U=Cs(mod n)を算出し、例えばメインメモリなどの記憶装置に格納する(ステップS33)。これによってys*(r1+r2+..+rt)(mod n)=gr1+r2+..+rt(mod n)が得られる。
また、復号演算部126は、V=D×U-1=g1 M1g2 M2・・・gt Mt(mod n)を算出し、例えばメインメモリ等の記憶装置に格納する(ステップS35)。
また、素数選択部125は、指定された集計単位wのデータから、wを除く各集計単位についての素数pi(その逆元鍵hi=1/piも)を鍵格納部124から読み出し、復号演算部126に出力する。そして、復号演算部126は、wを除く各集計単位i=1,2,...,w−1,w+1,...,tについて、以下の演算を繰り返し行い、データ格納部124に格納する(ステップS37)。
Z=Vpi(mod n)
V=Z1/pi(mod n)
これは上で述べたga pa(mod n)=1であることを用いている。すなわち、i=1であればZ=Vp1(mod n)=g1 M1*p1g2 M2*p1・・・gt Mt*p1(mod n)=1M1×g2 M2*p1・・・gt Mt*p1(mod n)となる。従って、Z1/pi(mod n)を算出すれば、V=g2 M2・・・gt Mt(mod n)が得られ、集計単位1の元g1のべき乗部分が消去されることになる。これを繰り返して集計結果w以外の集計単位についてその元のべき乗部分を消去すれば、最終的に集計結果wの元gwのべき乗gw Mw(mod n)がVとして得られる。この演算が終了すると、復号演算部126は、BSGS処理部127に処理開始を指示する。
BSGS処理部127は、データ格納部123に格納されている、ステップS37の最終計算結果V=gw Mw(mod n)の値から、BSGS法を用いて集計単位wの集計結果Mwを算出し、データ格納部123に格納する(ステップS39)。
また、例えばBSGS処理部127は、集計単位wの集計結果Mwを、表示装置や印刷装置その他の出力装置又は他のコンピュータに出力する(ステップS41)。
以上のような処理を実施することで、例えば性別「男」の年収集計値を算出することができる。
なお、従来のElgamal暗号との差異について纏めておく。
(α)集計単位の数tと同数の元g1、g2,...gtを用意する点
性別「男」及び「女」に分けて集計すればよいのであれば、2つの元g1及びg2を生成する。また、年齢を「20歳以下」「20歳超から60歳以下」「60歳超」の3つに分類し、性別を「男」及び「女」の2つに分類して、合計6つに分類する場合には、6種類の元g1乃至g6を生成して用いる。
(β)集計単位i毎にその集計単位iでの集計値の最大値を互いに異なる素数piとして設定し、各素数piがgi pi(mod n)=1を満たすように設定する点
例えば、個人の年収を1万円単位で取り扱う場合、piには32ビットの素数を設定すれば十分である。例えば、平均年収が1000万円を超えず、且つ最大登録個人数を400万とすると、年収値を1000万円/1万円は、10ビット数値として表現でき、個人の総数400万は22ビット数値なので、すべての個人年収値を合計しても、32ビットの範囲に収まる。すなわち、個人年収値の合計値の最大値として、32ビット素数を用いるのが適切である。ただし、これらの素数piは、互いに異なる値に設定するものとする。
(γ)素数pi(i=1,2,...,t)に対応する逆元鍵として、hi=pi -1 (mod p1,...,pi-1pi+1,...,pt)を計算する点
(δ)素数の法nを、n=p1×p2×・・・×pt×q×k+1として与える点。
但し、qは十分大きな素数(80ビットから128ビット)であり、kは任意の偶数である。
上記(α)乃至(γ)は、集計単位毎に集計結果を得るための工夫である。元g1に「男」を、元g2に「女」を対応付ける場合、「男」に対応付けられている他の属性の属性値はg1の指数部のみに集積され、「女」に対応付けられている他の属性の属性値はg2の指数部のみに蓄積される。すなわち、「男」と「女」で異なる元の下に暗号化を行うことで、数値が属性に対応した元の指数部として振り分けられるため、これらの結果を集計することで、属性値ごとの集計値の分離を行うことができる。すなわち、準同型加算を行った結果は、上でも述べたように、
C=gr1+r2+...rt(mod n)
D=yr1+r2+...+rtg1 M1g2 M2・・・gt Mt(mod n)
が得られるようになる。すなわち、M=M1+M2+...Mtであり、Mが集計単位に拘わらず集計対象の属性の属性値を合計した値であり、M1は集計単位1の集計結果、M2は集計単位2の集計結果、Mtは集計単位tの集計結果である。このように集計単位に応じて元を使い分ければ、集計単位の集計結果が各元に振り分けられる。
なお、(β)は、(δ)と組み合わされて、復号処理において正しい結果を得る、という効果をもたらす。例えば、「男」と「女」にそれぞれ対応した2つの元g1及びg2を用いる場合、
C=gr1+r2(mod n)
D=yr1+r2g1 M1g2 M2(mod n)
上で述べたように、U=Cs(mod n)=gs(r1+r2)(mod n)=yr1+r2(mod n)が得られる。そして、V=D×U-1(mod n)=g1 M1g2 M2(mod n)が算出される。よって、「男」の年収集計値を算出する場合には、Z=Vp2=g1 M1×p2g2 M2×p2(mod n)=g1 M1×p2(mod n)が算出される。ここでp2を除去するため、(γ)から、V=Zh2=g1 M1×p2×h2(mod n)=g1 M1(mod n)が得られる。なお、(α)より、元g1の指数の周期はp1、すなわちg1 p1=1(mod n)である。元g1の指数の周期はp1であるため、「男」の年収の集計値M1の値がp1を超えたら、計算結果がオーバーフローするため正しい結果を保証できない。よって、p1は、「男」の年収の集計の最大値として与えられる定数であり、p2は「女」の年収の集計の最大値として与えらえる定数である。よって、集計単位aに該当する数値の合計値が素数paを超えない限り、復号処理により正しい結果を得ることを保証できる。これらの効果は(β)及び(γ)によりもたらされるものである。
さらに、(δ)は、本実施の形態の安全性保証及び制約条件を示すものである。nが素数であるため、全ての元g、g1、...gtの、法nに関するべき乗剰余演算における指数の周期は、n−1もしくはn−1の約数である(このこと自体は一般的に知られた性質である)。(δ)に示されるように、nを、n=p1×p2×・・・×pt×q×k+1と設定することで、(β)に示されたga pa=1(mod n)(全てのa=1乃至t)を満たす全てのgaを容易に設定できる。なぜなら、
ga=gp1×p2×...×p(a-1)×p(a+1)..×pt×q×k(mod n)
と設定することで、
ga pa(mod n)=gp1×p2×...×p(a-1)×pa×p(a+1)..×pt×q×k(mod n)=gn-1(mod n)=1
だからである。
n−1=p1×p2×・・・×pt×q×kは、十分大きな素数q(80ビットから128ビット)と任意の偶数kを用いて算出される。素数qは、ElGamal暗号の安全性を保証するために用いられる。なぜなら、ElGamal暗号の安全性は、n−1を素因数分解した値の最大の素数値であることが一般的に知られている。p1,...ptは集計の最大値であり、30ビット程度が適切であるため大きくできない。さらに、kは任意の偶数であり、最小値は2である。これらを考慮すると、素数qを十分大きな値にしないと安全性が担保できない。qのビット長の設定はnのビット長に依存する。nが1024ビットの場合、ElGamal暗号の解読に必要な計算量は280であるため、qを80ビットの素数に設定するのが適切である。nが2048ビットの場合、ElGamal暗号の解読に必要な計算量は2112であるため、qを112ビットの素数に設定するのが適切である。nの値が素数でありさえすれば、kは任意の小さな偶数値でよく、最小の場合k=2となる。すなわち、(δ)は、本実施の形態を安全に実行するためのnの設定法を示している。
また、この条件は本実施の形態の制約条件を表している。例えば、nが1024ビット、qが80ビット、k=2の場合、
n=2×p1×p2×・・・×pt×q+1
である。
すなわち、p1×p2×・・・×pt=(n−1)/2qである。(n−1)/2qのビット長は、1024−80−1=943ビットであることを考慮すると、p1×p2×・・・×ptが、943ビットの範囲に収まる必要があることを意味している。p1,...ptは、集計単位における集計結果の最大値であるが、全ての値を30ビットに設定した場合、tの最大値は31となる。すなわち、扱える属性値は、最大31とおりとなる。一般化すると、以下のように表される。
(集計結果の最大値のビット長)×(集計単位の数)≦(nのビット長)−(q,kのビット長の合計)
よって、(δ)は、本実施の形態における制約条件を示している。
このように、(α)乃至(δ)の相違点は、本実施の形態の目的である「集計単位毎の加算」を実現するために生じたものである。
[Pallierベースの方法]
(A)鍵のセットアップ
秘密鍵として素数p及びqを生成し、sをp−1とq−1の最小公倍数として生成する。
公開鍵として、合成数n=p×qと、法n2と、元g(gn=1(mod n2)を満たす)、定数e1,e2,..,et+1を生成する。但し、e1,e2,..,etは、t個の集計単位に対応したビットシフト量ei(i=1,2,..,t)であり、e1<e2<...<etであり、且つetはnのビット長未満である。また、et+1はnのビット長となる。また、ei+1−eiは、集計単位iについての集計値の最大値のビット長を表すように設定する。
(B)暗号化
ローカル環境に、例えば図8に示すような暗号化処理装置140を設ける。暗号化処理装置140は、データ入力部141と、送信部142と、データ格納部143と、公開鍵格納部144と、乱数生成部145と、シフト処理部146と、暗号文生成部147とを有する。
データ入力部141は、ユーザからの入力又はローカル環境における他のコンピュータなどから暗号化すべき平文データを取得してデータ格納部143に格納する。送信部142は、データ格納部143に格納され且つ暗号化されたデータをクラウド環境に送信する。公開鍵格納部144は、公開鍵のデータを格納する。乱数生成部145は、公開鍵に含まれる法nに従って、乱数を発生させ、暗号文生成部147に出力する。シフト処理部146は、データ格納部143に格納されているデータに含まれ且つ集計単位が設定されている属性の属性値に応じて、公開鍵格納部144に格納されているビットシフト量を特定し、集計対象の属性の属性値を当該ビットシフト量で左シフトさせる処理を実施し、処理結果を暗号文生成部147に出力する。暗号文生成部147は、乱数生成部145からの乱数と、公開鍵格納部144に格納されている公開鍵とを用いて、シフト処理部146からのシフト処理結果を暗号化する処理を実施し、処理結果をデータ格納部143に格納する。
このような暗号化処理装置140の処理内容を図9を用いて説明する。
データ入力部141は、複数の属性の属性値を含む平文mを取得して、データ格納部143に格納する(ステップS51)。また、暗号文生成部147は、この平文mに応じて、乱数生成部145に対して乱数rを生成するように指示し、これに対して乱数生成部145は、0<r<n−1を満たす乱数rを生成し、暗号文生成部147に出力する(ステップS53)。
そして、暗号文生成部147が、シフト処理部146に対して平文mに対してシフト処理を実施するように要求すると、シフト処理部146は、平文mにおいて集計単位が設定されている特定の属性の属性値に応じて集計単位iを特定し、当該集計単位iに対応するビットシフト量の定数eiを公開鍵格納部144から読み出して、データ格納部143に格納されている平文mをeiだけ左シフトさせる処理を実施し、処理結果を暗号文生成部147に出力する(ステップS55)。なお、シフト処理後の平文をmbと表すものとする。
そして、暗号文生成部147は、公開鍵格納部144から法n2とnとを読み出して、暗号文としてc=rngmb(mod n2)を生成し、データ格納部143に格納する(ステップS57)。
その後、送信部142は、データ格納部143に格納されている暗号文cを、クラウド環境の所定のコンピュータ宛に送信する(ステップS59)。
以上のような処理を実施することで、以下で説明するように、集計単位毎の集計を実施することができるようになる。
なお、クラウド環境において実施すべき準同型加算演算については、従来のPailler暗号において行われる準同型暗号処理と全く同じ演算であるから、詳しい説明を省略する。すなわち、C=1として、C=C×ci(mod n2)を繰り返せば、C=(r1×r2×・・・rt)n×gM1+M2+...Mt(mod n2)が得られる。但し、元gのべき数については、集計単位毎に使用されるビット範囲が決まっている。例えば1024ビットのうち、性別「男」という集計単位に0から511ビットが割り当てられ、性別「女」という集計単位に512から1023ビットを割り当てるものとする。そうすると、集計処理を実施する場合、性別「男」の年収はビットシフト量0でべき数の0から511ビットの桁範囲で加算されてゆく。一方、性別「女」の年収はビットシフト量512ビットでべき数の512乃至1023ビットの桁範囲で加算されて行く。
より簡単にするために、性別「男」のデータの出現頻度をビットシフト量0でべき数の0から7ビットの桁範囲で加算し、性別「女」のデータの出現頻度をビットシフト量8でべき数の8から15ビットの桁範囲で加算する場合を想定する。例えば、性別「男」のデータが4回出現すると、以下のような演算(べき数のみ)が実施される。「|」は説明の便宜上、桁範囲を分かり易くするために示す。
(1)00000000|00000001
(2)00000000|00000010
(3)00000000|00000011
(4)00000000|00000100
ここで性別「女」のデータが2回出現し、性別「男」のデータが1回出現すれば、以下のような演算(べき数のみ)が実施される。
(5)00000001|00000100
(6)00000010|00000100
(7)00000010|00000101
このように桁あふれが生じないようにビットシフト量を設定しておけば、べき数のビットの桁範囲において、各集計単位の集計値が保持されるようになる。
(C)復号化処理
ローカル環境に、例えば図10に示すような復号化処理装置160を設ける。
復号化処理装置160は、入力部161と、通信部162と、データ格納部163と、鍵格納部164と、ビット抽出部165と、復号演算部166とを有する。
入力部161は、ローカル環境のユーザなどからの指示を受け付け、通信部162、ビット抽出部165及び復号演算部126等に処理を指示する。また、通信部162は、例えば集計要求をクラウドに送信して、その応答として暗号化演算結果を受信し、データ格納部163に格納する。鍵格納部164は、公開鍵及び秘密鍵を格納している。復号演算部166は、データ格納部163に格納されている暗号化演算結果に対して、鍵格納部164に格納されている秘密鍵及び公開鍵を用いて復号演算を実施して、復号演算結果をビット抽出部165に出力する。ビット抽出部165は、入力部161から指定される集計対象wに応じて、鍵格納部164からビットシフト量を特定し、復号演算部166からの復号演算結果から、当該ビットシフト量に対応するビット範囲のデータを抽出して、データ格納部163に格納する。
次に、図11を用いて復号化処理装置160の処理内容について説明する。入力部161は、ユーザなどから集計単位wの指定を含む集計指示を受け付けると、通信部162に対して集計要求をクラウドに送信するように指示する。そうすると、通信部162は、クラウドに対して集計要求を送信し、クラウドから集計要求の応答として暗号化演算結果(暗号文cとも呼ぶ。)を受信し、データ格納部163に格納する。また、入力部161は、指定された集計単位wのデータをビット抽出部165に出力する(ステップS71)。なお、集計単位t個あるものとする。また、入力部161は、復号演算部166に処理を指示する。
そうすると、復号演算部166は、鍵格納部164に格納されている秘密鍵s、n、法n2及び元gを用いて、暗号文cに対する復号演算結果Mを以下の式にて算出し、復号演算結果Mをビット抽出部165に出力する(ステップS73)。
M=L(cs(mod n2))/L(gs(mod n2))(mod n2)
なお、L(x)=(x−1)/nという関数である。この演算は従来と同じである。
そして、ビット抽出部165は、入力部161から指定された集計単位wに対応するビットシフト量を表す定数ew及び集計単位w+1に対応するビットシフト量を表す定数ew+1を鍵格納部164から読み出して、復号演算結果Mのew+1−1ビットからewビットの値を、集計単位wの集計結果Mwとして復号演算結果Mから抽出し、データ格納部163に格納する(ステップS75)。本ステップが、従来とは異なるステップである。そして、例えばビット抽出部165は集計結果Mwを出力する(ステップS77)。
上で述べた例で性別「男」(w=1)の出現頻度を抽出する場合には、e2=8であり、e1=0であるから、7(=8−1)ビットから0ビットまでの値を、復号演算結果M「0000001000000101」から抽出すると、「00000101」が得られるようになる。
上で述べたように従来のPailler暗号とは異なり、暗号化の時点で集計単位iに応じた定数ei(i=1,2,...,t)による右シフト処理を実行する。右シフトによる桁ずらしを行うことで、異なる集計単位の集計値が分離されるため、復号化処理によって特定の集計単位の集計値を抽出することができるようになる。
この定数eiは、鍵セットアップ時に設定される。このeiの設定を行う際には、以下の制約に従うことになる。
(制約1)e1<e2<・・・<et且つetはnのビット長未満であり、et+1はnのビット長である。
(制約2)et+1をnのビット長としたとき、ew+1−ewが集計単位wに対応する集計値の最大値のビット長を表す。
制約1は、異なる属性間の集計結果が混同されないようにするための制約である。例えば、上で述べたように、集計単位が性別「男」及び「女」であるとすると、1023ビットから512ビットを「女」の集計値に割り当て、511ビットから0ビットを「男」の集計値に割り当てる。そうすると、集計単位「男」に対応するビットシフト量である定数e1=0であり、集計単位「女」に対応するビットシフト量である定数e2=512である。
すなわち、集計単位「男」及び「女」の2つの集計単位で集計を行う場合には、最大512ビットの数値までの加算処理を実行することができる。ElGamal暗号ベースの方法と異なり、nのビット桁全てを加算処理の数値として扱うことができるが、法nの2乗値n2の計算を行うので、ElGamal暗号の2倍のビット長を用いることになる。すなわち、準同型暗号処理において、ElGamal暗号ベースの方法の2倍の計算量となる。具体的には、ビット長が2倍となるため乗算剰余処理の計算量が4倍となり、全体で4×1/2=2倍の計算量となる。
制約2は、全ての加算結果をnの範囲内に収めつつ、異なる集計単位の集計結果が分離されているために必要な条件である。「男」「女」の2つの属性を扱う先ほどの例では、nが1024ビットであったとしても、例えばe1=0、e2=10のようなパラメータをセットした場合、「男」に割り当てられているビット桁は9ビットから0ビットであるため、「男」に関する集計結果が10ビット=1024を超えることはできない。この範囲を超えた場合、「女」の集計結果に影響を及ぼすのは明らかである。制約2は、ElGamalベースの方法と同様に、本実施の形態における集計条件の限界を表しており、(集計結果の最大値のビット長)×(集計単位の数)≦(nのビット長)である。すなわち、nを1024ビット、集計値の最大値のビット長を30ビットとすると、集計単位の数は最大34となる。
以上述べた適切なパラメータ設定下で、復号処理を実行した復号演算結果Mに対し、集計単位wであれば、ewの右ビットシフトと、ew+1−ewビットのビットマスク処理を行うことで、異なる集計単位の集計値が混合することなく、正しい集計結果を得ることができる。
[実施の形態2]
本実施の形態では、ElGamalベースの方法を用いて、顧客の購入履歴データを秘匿化し、集計処理を実施する。購入履歴データのデータベースでは、顧客のデータ(顧客ID、年齢、性別)、購入毎のデータ(10円単位の購入額、商品ID及び購入年月)が蓄積される。そして、本実施の形態では、年齢及び性別という属性の属性値の組み合わせで集計単位が設定されるものとする。なお、顧客IDは、個人毎のユニークな値である。年齢は、20歳以下、20歳代、30歳代、40歳代、50歳代、60歳代、70歳代、80歳以上という8つの属性値が設定可能であり、性別は「男」及び「女」の2つの属性値が設定可能である。従って集計単位は16とおりとなる。
この場合、図12に示すようなシステム構成を採用する。図12に示すように、インターネットなどのネットワーク1を介してクラウド300とユーザシステム200とが接続されており、クラウド300には分析サーバ310とデータベース(DB)320とが設けられている。分析サーバ310は、ユーザシステム200からのリクエストに応じてDB320に格納されている暗号文に対して従来と同じ準同型加算処理を実施する。
ユーザシステム200は暗号化処理装置210を有しており、図13に示すように、暗号化処理装置210は、データ収集部211と、第1データ格納部212と、AES(Advanced Encryption Standard)暗号処理部213と、ハッシュ処理部214と、準同型暗号化処理部215と、第2データ格納部216と、送信部217とを有する。
データ収集部211は、例えばPOS(Point Of Sales)装置などから購入毎に購入履歴データを収集して、第1データ格納部212に格納する。上でも述べたように、購入履歴データには、顧客ID、年齢、性別、10円単位の購入額、商品ID及び購入年月が含まれる。
本実施の形態では、図14に示すように、顧客ID、年齢、性別、商品IDについては、AES暗号処理部213が例えば128ビットの暗号化鍵で暗号化する。例えば、これらの属性の属性値が32ビット値である場合には、AES暗号処理部213は、例えば96ビットの乱数を生成し、この乱数と属性値とのビット結合結果を暗号化鍵で暗号化処理を実施する。暗号化は、属性毎に行われる。また、AES暗号処理部213は、AESによる暗号文を、第2データ格納部216に格納する。
なお、これらの属性の属性値は、分析処理では用いられないが、クラウド300から暗号文をダウンロードして用いる場合には、同じ暗号化鍵で復号して乱数部分を削除すればこれらの属性の属性値を復元できる。
また、購入年月については、ハッシュ処理部214が、例えば128ビットのSalt値Sとビット結合した上で例えばSHA−256等のハッシュ関数でハッシュ値を算出し、第2データ格納部216に格納する。
準同型暗号化処理部215は、第1の実施の形態におけるElgamalベースの方法で述べた処理を行う。すなわち、準同型暗号処理部215は、図15に示すような構成を有し、購入額に対して性別及び年齢による集計単位に応じて準同型暗号化処理を実施し、準同型暗号による暗号文を第2データ格納部216に格納する。
図15に、準同型暗号処理部215の構成を示す。準同型暗号処理部215は、データ入力部401と、出力部402と、第3データ格納部403と、公開鍵格納部404と、元選択部405と、暗号文生成部406と、乱数生成部407とを有する。
データ入力部401は、第1データ格納部212から、各レコードの集計対象属性の属性値及び集計単位が設定されている属性の属性値を読み出して、第3データ格納部403に格納する。出力部402は、第3データ格納部403に格納され且つ暗号化されたデータを第2データ格納部216に格納する。公開鍵格納部404は、公開鍵のデータを格納する。乱数生成部407は、公開鍵に含まれる法nに従って、乱数を発生させ、暗号文生成部406に出力する。元選択部405は、第3データ格納部403に格納されているデータに含まれ且つ集計単位が設定されている属性の属性値に応じて、公開鍵格納部404に格納されている元を選択して、暗号文生成部406に出力する。暗号文生成部406は、元選択部405からの元と、公開鍵格納部404に格納されている他の公開鍵のデータを用いて、暗号文生成のための処理を実施し、第3データ格納部403に格納する。
なお、第1データ格納部212に格納されているレコード毎に、AESによる暗号文、ハッシュ値及び準同型暗号による暗号文が生成される。
送信部217は、第2データ格納部216に格納されているAESによる暗号文、ハッシュ値及び準同型暗号による暗号文を、クラウド300に送信する。
クラウド300のサーバは、ユーザシステム200からデータを受信すると、DB320に蓄積する。
次に、本実施の形態で用いる鍵について説明する。図16には主要な鍵を示している。上でも述べたように、顧客ID、年齢、性別、商品IDの4属性については、128ビットのAES鍵Kを用いる。このAES鍵Kは乱数により生成する。
また、1024ビットの鍵(n,g,g1,..,g32,p1,...,p32,h1,...,h32,y,s)を生成する。本実施の形態では、上で述べたように集計単位は、2種類の性別と8種類の年齢区分とで16種類となる。このため、これだけで元g1,..,g16,素数p1,...,p16,逆元鍵h1,...,h16が用いられる。32ビット値を集計の最大値と設定すると、p1乃至p16を33ビット素数に設定すればよい。さらに、本実施の形態では、平均購入額を算出するため、各集計単位について該当する属性値の出現回数を計数するための元g17,..,g32、素数p17,...,p32及び逆元鍵h17,...,h32も用意する。これらの集計値の最大値が16ビットであれば、素数p17,...,p32は、17ビットあればよい。
なお、元g1,..,g32及び逆元鍵h1,...,h32の生成は、第1の実施の形態で述べた方法で行うことができる。秘密鍵s及び公開鍵yについても同様である。q及びkについては、鍵生成時には必要であるが、この処理が終了した後は用いないため消去してよい。
なお、128ビットSalt値Sについては、上でも述べたように、購入年月のハッシュ値を生成する際、出力値から入力値を推定されないようにするための128ビット乱数で生成する。
次に、準同型暗号処理部215の処理内容について図17を用いて説明する。
データ入力部401は、集計単位が設定されている属性の属性値及び購入額mi(iはレコード番号)を取得して、第3データ格納部403に格納する(ステップS101)。また、暗号文生成部406は、この購入額miに応じて、乱数生成部407に対して乱数riを生成するように指示し、これに対して乱数生成部407は、0<ri<n−1を満たす乱数riを生成し、暗号文生成部406に出力する(ステップS103)。
そして、暗号文生成部406は、暗号文1としてci=gri(mod n)を生成し、第3データ格納部403に格納する(ステップS105)。また、元選択部405は、購入額miについての集計単位が設定されている特定の属性の属性値に応じて集計単位aを特定し、当該集計単位aに対応する元ga及びga+16を選択し、当該元ga及びga+16を暗号文生成部406に出力する(ステップS107)。
そして、暗号文生成部406は、公開鍵に含まれる暗号化鍵yと法nと乱数riと購入額miと元ga及びga+16とから、暗号文2であるdi=yriga miga+16 1(mod n)を生成し、第3データ格納部403に格納する(ステップS109)。ga+16 1におけるべき数「1」は、集計単位aについての属性値が1回出現したことを表す。すなわち、準同型加算を行うことでga+16のべき数に、出現回数の総計が現れるようになる。
例えば、「20代の男性が5000円の商品」を購入すると、図16からすると集計単位a=2となり、元g2及びg18が特定される。そして、di=yrig2 500g18 1(mod n)が算出される。
そうすると、出力部402は、第3データ格納部403に格納されている暗号文(ci,di)を、第2データ格納部216に格納する(ステップS111)。
以上のような処理を実施することで、以下で説明するように、集計単位毎の集計を実施することができるようになる。
次に、分析時の処理について説明する。ユーザシステム200は分析支援装置220を有しており、図18に示すように、分析支援装置220は、復号化処理部221と、後処理部222と、出力部223とを有する。復号化処理部221は、クラウド300に対する要求を行って暗号化演算結果を取得すると共に、指定の集計単位についての集計値(購入額合計値及び出現回数総計(即ち購入人数合計))を算出し、後処理部222に出力する。後処理部222は、購入額合計値/出現回数総計によって平均購入額を算出し、出力部223に出力する。出力部223は、購入額合計、出現回数総計及び平均購入額を出力装置(表示装置や印刷装置など)や他のコンピュータに出力する。
復号化処理部221は、図19に示すように、入力部421と、通信部422と、第4データ格納部423と、鍵格納部424と、素数選択部425と、復号演算部426と、BSGS処理部427と、出力部428と、ハッシュ生成部429とを有する。
入力部421は、ユーザシステム200のユーザなどからの分析指示を受け付け、通信部422、素数選択部425及び復号演算部426等に処理を指示する。また、通信部422は、例えば集計条件を含む集計要求をクラウド300に送信して、その応答として暗号化演算結果を受信し、第4データ格納部423に格納する。集計条件は、例えばユーザから指定された購入年月とSalt値Sとに対してハッシュ生成部429が生成したハッシュ値が含まれる。すなわち、ハッシュ生成部429は、通信部422(又は入力部421)からの指示に応じてハッシュ値を算出して、通信部422に出力する。
鍵格納部424は、公開鍵及び秘密鍵を格納している。また、素数選択部425は、入力部421から指定される集計単位wに応じて、復号演算部426で用いられる素数を抽出し、復号演算部426に出力する。復号演算部426は、暗号化演算結果に対して、鍵格納部424に格納されている鍵のデータ及び素数選択部425により選択された素数のデータを用いて、復号処理のための演算を実施し、処理結果を第4データ格納部423に格納する。また、復号演算部426は、BSGS処理部427は、周知のBSGS法にて集計結果を抽出する処理を実施し、第4データ格納部423に格納する。出力部428は、第4データ格納部423に格納されている集計結果を、後処理部222に出力する。
次に、図20乃至図22を用いて、分析時の処理について説明する。入力部421は、ユーザシステム200のユーザなどから集計すべき「購入年月」及び集計単位wの入力を受け付ける(図20:ステップS121)。これに対して、入力部421は、入力された「購入年月」のデータを通信部422に出力する。通信部422は、ハッシュ生成部429に「購入年月」と鍵格納部424に格納されているSalt値Sとからハッシュ値を生成させ、当該「購入年月」のハッシュ値を含むリクエストをクラウド300に送信する(ステップS123)。
これに対してクラウド300の分析サーバ310は、ユーザシステム200から「購入年月」のハッシュ値を含むリクエストを受信する(図21:ステップS131)。そうすると、分析サーバ310は、DB320において、「購入年月」の値がリクエストに含まれるハッシュ値に一致するレコードの購入額の暗号文(ci,di)(iはレコードの識別子。i=1,2,...,t)を抽出する(ステップS133)。そして、分析サーバ310は、(C,D)=1に初期化し(ステップS135)、iを1に初期化する(ステップS137)。
その後、分析サーバ310は、(C,D)=(C×ci(mod n),D×di(mod n))を算出する(ステップS139)。この演算は従来と同じである。さらに、分析サーバ310は、iを1インクリメントし(ステップS141)、iがtを超えたか判断する(ステップS143)。iがt以下であれば、処理はステップS139に戻る。
iがtを超えた場合には、分析サーバ310は、暗号化演算結果(C,D)を要求元のユーザシステム200に返信する(ステップS145)。
これに対して、ユーザシステム200の通信部422は、クラウド300から暗号化演算結果(C,D)を受信し、第4データ格納部423に格納する(ステップS124)。その後、復号化処理部221は、暗号化演算結果(C,D)から、指定された集計単位wに対応する購入額合計値Mwを算出する(ステップS125)。さらに、復号化処理部221は、暗号化演算結果(C,D)から、指定された集計単位wからw=w+16と設定して合計人数Nwを算出する(ステップS126)。そして、出力部428は、第4データ格納部423に格納されている購入額合計値Mw及び合計人数Nw(出現回数又は購入回数とも呼ぶ)を、後処理部222に出力する(ステップS127)。後処理部222は、購入額合計値Mw/合計人数Nwにより平均購入額を算出し、購入額合計値Mw及び合計人数Nwと共に出力部223に出力する(ステップS128)。そして、出力部223は、購入額合計値Mw、合計人数Nw及び平均購入額を出力装置などに出力する(ステップS129)。
以上のような処理を実施することで、所望の集計単位について、秘匿性を保持しつつ、購入額合計値、合計人数及び平均購入額を得ることができるようになる。
なお、ステップS125及びS126についてはほぼ同様の処理であり、図22を用いて説明する。
入力部421は、ユーザからの指示に従って、指定された集計単位wのデータを素数選択部425に出力しておく。なお、集計単位t個あるものとする。従って、合計人数を集計単位毎に計数するので、元の数は2t個になる。
そして、通信部422が、暗号化演算結果(C,D)を第4データ格納部423に格納すると、復号演算部426は、鍵格納部424に格納されている秘密鍵s及び法nから、U=Cs(mod n)を算出し、例えばメインメモリなどの記憶装置に格納する(ステップS151)。これによってys*(r1+r2+..+r2t)(mod n)=gr1+r2+..+r2t(mod n)が得られる。
また、復号演算部426は、V=D×U-1=g1 M1g2 M2・・・g2t M2t(mod n)を算出し、例えばメインメモリ等の記憶装置に格納する(ステップS155)。
また、素数選択部425は、指定された集計単位wのデータから、wを除く各集計単位についての素数pw(その逆元鍵hw=1/pwも)を鍵格納部424から読み出し、復号演算部426に出力する。そして、復号演算部426は、wを除く各集計単位i=1,2,...,w−1,w+1,...,2tについて、以下の演算を繰り返し行い、第4データ格納部423に格納する(ステップS157)。
Z=Vpi(mod n)
V=Z1/pi(mod n)
これは上で述べたga pa(mod n)=1であることを用いている。すなわち、i=1であればZ=Vp1(mod n)=g1 M1*p1g2 M2*p1・・・g2t M2t*p1(mod n)=1M1×g2 M2*p1・・・g2t M2t*p1(mod n)となる。従って、Z1/pi(mod n)を算出すれば、V=g2 M2・・・g2t M2t(mod n)が得られ、集計単位1の元g1のべき乗部分が消去されることになる。これを繰り返して集計結果w以外の集計単位についてのその元のべき乗部分を消去すれば、最終的に集計結果wの元gwのべき乗gw Mw(mod n)がVとして得られる。この演算が終了すると、復号演算部426は、BSGS処理部427に処理開始を指示する。
BSGS処理部427は、第4データ格納部423に格納されている、ステップS157の最終計算結果V=gw Mw(mod n)の値から、BSGS法を用いて集計単位wの集計結果Mwを算出し、第4データ格納部423に格納する(ステップS159)。
また、出力部428は、第4データ格納部423に格納されている、集計単位wの集計結果Mwを、後処理部222に出力する(ステップS161)。
以上のような処理を実施することで、購入額合計値及び合計人数を復号することができるようになる。
[実施の形態3]
本実施の形態ではPaillerベースの方法を採用する。但し、購入履歴データを取り扱う点は第2の実施の形態と同じであり、購入履歴データに含まれる属性の種類及び集計単位が設定されている属性についても同様である。
さらに、図12に示したシステムの全体構成も第2の実施の形態と同様である。さらに、図13に示した暗号化処理装置210の構成、図18に示した分析支援装置220の構成も、第2の実施の形態と同様である。
一方、用いる暗号処理が異なるので、鍵の構成は異なる。本実施の形態では、図23に示すように、顧客ID、性別、商品IDについては、AES暗号処理部213が例えば128ビットの暗号化鍵で暗号化する。例えば、これらの属性の属性値が32ビット値である場合には、AES暗号処理部213は、例えば96ビットの乱数を生成し、この乱数と属性値とのビット結合結果を暗号化鍵で暗号化処理を実施する。暗号化は、属性毎に行われる。また、AES暗号処理部213は、AESによる暗号文を、第2データ格納部216に格納する。
なお、これらの属性の属性値は、分析処理では用いられないが、クラウド300から暗号文をダウンロードして用いる場合には、同じ暗号化鍵で復号して乱数部分を削除すればこれらの属性の属性値を復元できる。
また、本実施の形態では、集計は行われないが、年齢についても、準同型暗号処理の対象となっている。すなわち、元gのべき数の中に埋め込まれる。
また、購入年月については、ハッシュ処理部214が、例えば128ビットのSalt値Sとビット結合した上で例えばSHA−256等のハッシュ関数でハッシュ値を算出し、第2データ格納部216に格納する。
準同型暗号化処理部215b(第3の実施の形態では第2の実施の形態と区別するため215bとする)は、第1の実施の形態におけるPaillerベースの方法で述べた処理を行う。すなわち、準同型暗号処理部215bは、図24に示すような構成を有し、購入額に対して、性別及び年齢による集計単位に応じて準同型暗号化処理を実施し、準同型暗号による暗号文を第2データ格納部216に格納する。年齢の暗号化については、準同型加算処理を行わないので集計単位に応じた準同型暗号処理ではない。
図24に示すように、準同型暗号処理部215bは、データ入力部451と、出力部452と、第5データ格納部453と、公開鍵格納部454と、乱数生成部455と、シフト処理部456と、暗号文生成部457とを有する。
データ入力部451は、第1データ格納部212に格納されている平文データのうち準同型暗号処理の対象である属性の属性値及び集計単位が設定されている属性の属性値を取得して第5データ格納部453に格納する。出力部452は、第5データ格納部453に格納され且つ暗号化されたデータを第2データ格納部216に格納する。
公開鍵格納部454は、公開鍵のデータを格納する。乱数生成部455は、公開鍵に含まれる法nに従って、乱数を発生させ、暗号文生成部457に出力する。シフト処理部456は、第5データ格納部453に格納されているデータに含まれ且つ集計単位が設定されている属性の属性値に応じて、公開鍵格納部454に格納されているビットシフト量を特定し、集計対象の属性等(準同型加算処理の対象属性)の属性値を当該ビットシフト量で左シフトさせる処理を実施し、処理結果を暗号文生成部457に出力する。暗号文生成部457は、乱数生成部455からの乱数と、公開鍵格納部454に格納されている公開鍵とを用いて、シフト処理部456からのシフト処理結果を暗号化する処理を実施し、処理結果を第5データ格納部453に格納する。
第1データ格納部212に格納されているレコード毎に、AESによる暗号文、ハッシュ値及び準同型暗号による暗号文が生成される。
送信部217は、第2データ格納部216に格納されているAESによる暗号文、ハッシュ値及び準同型暗号による暗号文を、クラウド300に送信する。
クラウド300のサーバは、ユーザシステム200からデータを受信すると、DB320に蓄積する。
次に、本実施の形態で用いる鍵について説明する。上でも述べたように、顧客ID、性別、商品IDの3属性については、128ビットのAES鍵Kを用いる。このAES鍵Kは乱数により生成する。
また、上で述べたように集計単位は16種類であるから、ビットシフト量を表す定数e1乃至e16を設ける。さらに、各集計単位の出現回数(購入回数又は人数若しくは個人総数とも呼ぶ)についても別の暗号文で計数するため、同じビットシフト量を表す定数e1乃至e16を用いる。
さらに、本実施の形態では、「年齢」属性をも準同型暗号処理で暗号化するので、年齢そのものを暗号化するために用いるシフト定数e17を用いる。このように属性がビットシフト量に対応付けられている。
このように、図25に示すように、上限値を表すe18を含め合計18個の定数e1乃至e18を用いる。
図25に示すように定数e1乃至e16は、購入額の集計と個人総数の集計に用いられるが、前者の上限値は32ビット値であり、後者の上限値は16ビット値であるが、前者に合わせて32ビットである。従って、e1乃至e17で512ビットとなる。さらに年齢についても32ビットで十分であるから、e18=544ビットとなる。e18の値からは、nを545ビットに設定すれば十分であるが、Paillier暗号は、RSA(Rivest Shamir Adleman)暗号と同様に安全性が素因数分解に基づく暗号のため、2つの素数の積であるn=545はビット長として不十分であり、安全性確保のために、nには1024ビットが設定される。nのビット長を1024ビットとしたうえで、一般的なPaillier暗号の鍵セットアップ法に従い、合成数n, 公開法n2、秘密鍵s及び元gが設定される。
なお、128ビットSalt値Sについては、第1の実施の形態と同様に、購入年月のハッシュ値を生成する際、出力値から入力値を推定されないようにするための128ビット乱数で生成する。
次に、準同型暗号処理部215bの処理内容について図26A及び図26Bを用いて説明する。まず、図26Aを用いて購入額についての暗号文の生成処理について説明する。
データ入力部451は、集計単位が設定されている属性の属性値及び購入額mi,1(iはレコード番号を表す。1は暗号文の識別子を示す)を取得して、第5データ格納部453に格納する(ステップS201)。また、暗号文生成部457は、この購入額mi,1に応じて、乱数生成部455に対して乱数ri,1を生成するように指示し、これに対して乱数生成部455は、0<ri,1<n−1を満たす乱数ri,1を生成し、暗号文生成部457に出力する(ステップS203)。
そして、暗号文生成部457が、シフト処理部456に対して購入額mi,1に対してシフト処理を実施するように要求すると、シフト処理部456は、集計単位が設定されている属性の属性値に応じて集計単位aを特定し、当該集計単位aに対応するビットシフト量の定数eaを公開鍵格納部454から読み出して、第5データ格納部453に格納されている購入額mi,1をeaだけ左シフトさせる処理を実施し、処理結果を暗号文生成部457に出力する(ステップS205)。なお、シフト処理後の平文をmbi,1と表すものとする。
そして、暗号文生成部457は、公開鍵格納部454から法n2とnとを読み出して、暗号文1としてci,1=ri,1 ngmb(i,1)(mod n2)を生成し、第5データ格納部453に格納する(ステップS207)。
その後、出力部452は、第5データ格納部453に格納されている暗号文1であるci,1を、第2データ格納部216に格納する(ステップS209)。
以上のような処理を実施することで、購入額mi,1についての暗号文1が得られる。
次に、図26Bを用いて年齢及び人数についての暗号文の生成処理について説明する。
データ入力部451は、集計単位が設定されている属性の属性値及び年齢mi,2(iはレコード番号を表す。2は暗号文の識別子を示す)を取得して、第5データ格納部453に格納する(ステップS211)。また、暗号文生成部457は、この年齢mi,2に応じて、乱数生成部455に対して乱数ri,2を生成するように指示し、これに対して乱数生成部455は、0<ri,2<n−1を満たす乱数ri,2を生成し、暗号文生成部457に出力する(ステップS213)。
そして、暗号文生成部457が、シフト処理部456に対して年齢mi,2及び人数に対してシフト処理を実施するように要求すると、シフト処理部456は、集計単位が設定されている属性の属性値に応じて集計単位aを特定し、当該集計単位aに対応するビットシフト量の定数ea及び年齢属性に対応するビットシフト量の定数e17を公開鍵格納部454から読み出す。そして、シフト処理部456は、人数1をeaだけ左シフトさせると共に、第5データ格納部453に格納されている年齢mi,2をe17だけ左シフトさせる処理を実施し、2つのビット列を連結させた上で、処理結果mci,2を暗号文生成部457に出力する(ステップS215)。
例えば、「20歳代の男性」という集計単位であれば、図25からするとe2が特定される。従って、人数1はe2=32ビットだけ左シフトされる。また、年齢に対応するe17=512ビットであるから、年齢「20歳代」の「2」を512ビットだけ左シフトさせる。そして、ビット結合させると、以下のようになる。
mci,2=mi,2<<512 || 1<<32
=200...00(0が120個)0000000100000000
そして、暗号文生成部457は、公開鍵格納部454から法n2とnとを読み出して、暗号文2としてci,2=ri,2 ngmc(i,2)(mod n2)を生成し、第5データ格納部453に格納する(ステップS217)。
その後、出力部452は、第5データ格納部453に格納されている暗号文2であるci,2を、第2データ格納部216に格納する(ステップS219)。
以上のような処理を実施することで、年齢mi,2及び人数についての暗号文2が得られる。
次に、分析時の処理について説明する。ユーザシステム200は分析支援装置220を有している点、及び分析支援装置220の構成は、第2の実施の形態と同様である。
但し、復号化処理部221b(第2の実施の形態における復号化処理部221と区別するために本実施の形態では221bとする)は、図27に示すような構成を有する。
復号化処理部221bは、入力部461と、通信部462と、第6データ格納部463と、鍵格納部464と、ビット抽出部465と、復号演算部466と、出力部467と、ハッシュ生成部468とを有する。
入力部461は、ユーザシステム200のユーザなどからの指示を受け付け、通信部462、ビット抽出部465及び復号演算部466等に処理を指示する。また、通信部462は、例えば集計要求をクラウドに送信して、その応答として暗号化演算結果を受信し、第6データ格納部463に格納する。鍵格納部464は、公開鍵及び秘密鍵を格納している。復号演算部466は、第6データ格納部463に格納されている暗号化演算結果に対して、鍵格納部464に格納されている秘密鍵及び公開鍵を用いて復号演算を実施して、復号演算結果をビット抽出部465に出力する。ビット抽出部465は、入力部461から指定される集計単位wに応じて、鍵格納部464からビットシフト量を特定し、復号演算部466からの復号演算結果から、当該ビットシフト量に対応するビット範囲のデータを抽出して、第6データ格納部463に格納する。出力部467は、第6データ格納部463に格納されている集計結果を、後処理部226に出力する。
次に、図28乃至図30を用いて、分析時の処理について説明する。入力部461は、ユーザシステム200のユーザなどから集計すべき「購入年月」及び集計単位wの入力を受け付ける(図28:ステップS221)。これに対して、入力部461は、入力された「購入年月」のデータを通信部462に出力する。通信部462は、ハッシュ生成部468に「購入年月」と鍵格納部464に格納されているSalt値Sとからハッシュ値を生成させ、当該「購入年月」のハッシュ値を含むリクエストをクラウド300に送信する(ステップS223)。
これに対してクラウド300の分析サーバ310は、ユーザシステム200から「購入年月」のハッシュ値を含むリクエストを受信する(図29:ステップS241)。そうすると、分析サーバ310は、DB320において、「購入年月」の値がリクエストに含まれるハッシュ値に一致するレコードの購入額及び人数(年齢も含む)の暗号文(ci,1,ci,2)(iはレコードの識別子。i=1,2,...,t)を抽出する(ステップS243)。そして、分析サーバ310は、(C1,C2)=1に初期化し(ステップS245)、iを1に初期化する(ステップS247)。
その後、分析サーバ310は、C1=C1×ci,1(mod n2)及びC2=C2×ci,2(mod n2)を算出する(ステップS249)。この演算は従来と同じである。さらに、分析サーバ310は、iを1インクリメントし(ステップS251)、iがtを超えたか判断する(ステップS253)。iがt以下であれば、処理はステップS249に戻る。
iがtを超えた場合には、分析サーバ310は、暗号化演算結果C1及びC2を要求元のユーザシステム200に返信する(ステップS255)。
これに対して、ユーザシステム200の通信部462は、クラウド300から暗号化演算結果C1及びC2を受信し、第6データ格納部463に格納する(ステップS255)。
その後、復号演算部466は、暗号化演算結果C1から、指定された集計単位wに対応する購入額合計値Mwを算出する(ステップS227)。さらに、復号演算部466は、暗号化演算結果C2から、指定された集計単位wに対応する合計人数Nwを算出する(ステップS229)。そして、出力部467は、第6データ格納部463に格納されている購入額合計値Mw及び合計人数Nw(出現回数又は購入回数とも呼ぶ)を、後処理部222に出力する(ステップS231)。後処理部222は、購入額合計値Mw/合計人数Nwにより平均購入額を算出し、購入額合計値Mw及び合計人数Nwと共に出力部223に出力する(ステップS233)。そして、出力部223は、購入額合計値Mw、合計人数Nw及び平均購入額を出力装置などに出力する(ステップS235)。
以上のような処理を実施することで、所望の集計単位について、秘匿性を保持しつつ、購入額合計値、合計人数及び平均購入額を得ることができるようになる。
なお、ステップS227及びS229についてはほぼ同様の処理であり、図30を用いて説明する。
入力部461は、ユーザからの指示に従って、指定された集計単位wのデータをビット抽出部465に出力しておく。
そして、通信部462が、暗号化演算結果c(C1又はC2)を第6データ格納部463に格納すると、復号演算部466は、鍵格納部464に格納されている秘密鍵s、n、法n2及び元gを用いて、暗号文cに対する復号演算結果Mを以下の式にて算出し、復号演算結果Mをビット抽出部465に出力する(ステップS235)。
M=L(cs(mod n2))/L(gs(mod n2))(mod n2)
なお、L(x)=(x−1)/nという関数である。この演算は従来と同じである。
そして、ビット抽出部465は、入力部461から指定された集計単位wに対応するビットシフト量を表す定数ew及び集計単位w+1に対応するビットシフト量を表す定数ew+1を鍵格納部464から読み出して、復号演算結果Mのew+1−1ビットからewビットの値を、集計単位wの集計結果Mwとして復号演算結果Mから抽出し、第6データ格納部463に格納する(ステップS237)。本ステップが、従来とは異なるステップである。
その後、出力部467は、第6データ格納部463に格納されている復号演算結果Mw(購入額合計値Mw又は合計人数Nw)を、後処理部222に出力する(ステップS239)。
以上のような処理で、秘匿しつつ集計処理を実施して、その結果を復元できるようになる。
[実施の形態4]
本実施の形態では、第2の実施の形態において購入履歴データの属性として商品セグメントをも取り扱うことができるようにすることを考える。例えば、4種類の商品セグメント(例えば、本、家電、ソフトウエア、食品)を導入して、これらについても分析を行うことができるようにするためには、これまでの集計単位16種類×4種類=64の集計単位が設定されることになる。集計値の上限を32ビット値に設定した場合、32×64=2048ビットとなってしまう。nのビット長を増やすことで対応できるが、計算量が膨大となるので、代わりに暗号文の数を増加させることで、計算量の増加を抑えることとする。本実施の形態では、商品セグメント毎に暗号文を設けることにする。
そうすると、図31に示すように、商品セグメントをAES暗号で暗号化する点を除けば、第2の実施の形態と同様の鍵を用意すればよい。
従って、基本的な構成は第2の実施の形態と同じであるから、本実施の形態と異なる部分だけ説明する。なお、構成要素の参照符号については、「c」を付加することで区別するものとする。
そこで、準同型暗号処理部215cの処理内容について図32を用いて説明する。データ入力部401cは、集計単位が設定されている属性の属性値(商品セグメントの属性値も含む)及び購入額mi(iはレコード番号)を取得して、第3データ格納部403cに格納する(ステップS301)。また、データ入力部401cは、「商品セグメント」に応じた暗号文選択番号δ(例えば、本の場合δ=1、家電の場合δ=2、ソフトウエアの場合δ=3、食品の場合δ=4)を特定し、暗号文生成部406cに出力する(ステップS303)。
また、暗号文生成部406cは、暗号文のカウンタjをj=1に初期化する(ステップS305)。その後、暗号文生成部406cは、購入額miに応じて、乱数生成部407cに対して乱数ri,jを生成するように指示し、これに対して乱数生成部407cは、0<ri,j<n−1を満たす乱数ri,jを生成し、暗号文生成部406cに出力する(ステップS307)。
そして、暗号文生成部406cは、暗号文1としてci=gr(i,j)(mod n)を生成し、第3データ格納部403cに格納する(ステップS309)。また、暗号文生成部406cは、j=δであるか判断する(ステップS311)。j=δでなければ、暗号文生成部406cは、暗号文2jとして、di,j=yr(i,j)(mod n)を生成し、第3データ格納部403cに格納する(ステップS317)。ga 0=1であるから、この部分が省略されている。そして処理はステップS319に移行する。
一方、j=δであれば、元選択部405cは、購入額miに対する集計単位が設定されている特定の属性の属性値に応じて集計単位aを特定し、当該集計単位aに対応する元ga及びga+16を選択し、当該元ga及びga+16を暗号文生成部406cに出力する(ステップS313)。
そして、暗号文生成部406cは、公開鍵に含まれる暗号化鍵yと法nと乱数ri,jと購入額miと元ga及びga+16とから、暗号文2jであるdi,j=yr(i,j)ga miga+16 1(mod n)を生成し、第3データ格納部403cに格納する(ステップS315)。ga+16 1におけるべき数「1」は、集計単位aについての属性値が1回出現したことを表す。すなわち、準同型加算を行うことでga+16のべき数に、出現回数の総計が現れるようになる。処理は、ステップS319に移行する。
ステップS319では、暗号文生成部406cは、jを1インクリメントし(ステップS319)、jが4を超えたか判断する(ステップS321)。jが4以下であれば、ステップS307に戻る。一方、jが4を超えた場合には、出力部402cは、第3データ格納部403cに格納されている暗号文(ci,j,di,j)(jは1乃至4)を、第2データ格納部216cに格納する(ステップS323)。
以上のような処理を実施することで、商品セグメント毎に暗号文を分けた形で暗号文が生成されることになる。図33に模式的に示すように、例えば食品セグメントの商品をα1円購入した場合には、1回の購入履歴データを、商品セグメント「本」の購入額0円、商品セグメント「家電」0円、商品セグメント「ソフトウエア」0円、商品セグメント「食品」α1円というデータに変換した上で、それぞれのセグメントについて暗号文を生成している。
次に、図34及び図35を用いて、分析時の処理について説明する。入力部421cは、ユーザシステム200cのユーザなどから集計すべき「購入年月」、商品セグメントφ及び集計単位wの入力を受け付ける(図33:ステップS331)。これに対して、入力部421cは、入力された「購入年月」のデータを通信部422cに出力する。通信部422cは、ハッシュ生成部429cに「購入年月」と鍵格納部424cに格納されているSalt値Sとからハッシュ値を生成させ、当該「購入年月」のハッシュ値を含むリクエストをクラウド300cに送信する(ステップS333)。
これに対してクラウド300cの分析サーバ310cは、ユーザシステム200cから「購入年月」のハッシュ値を含むリクエストを受信する(図35:ステップS351)。そうすると、分析サーバ310cは、DB320cにおいて、「購入年月」の値がリクエストに含まれるハッシュ値に一致するレコードの購入額の暗号文(ci,j,di,j)(iはレコードの識別子。i=1,2,...,t。j=1,2,3,4)を抽出する(ステップS353)。そして、分析サーバ310cは、(Cj,Dj)=1に初期化し(ステップS355)、jを1に初期化する(ステップS357)。さらに分析サーバ310cは、iを1に初期化する(ステップS359)。
その後、分析サーバ310cは、(Cj,Dj)=(Cj×ci,j(mod n),Dj×di,j(mod n))を算出する(ステップS361)。さらに、分析サーバ310cは、iを1インクリメントし(ステップS363)、iがtを超えたか判断する(ステップS365)。iがt以下であれば、処理はステップS361に戻る。
iがtを超えた場合には、分析サーバ310cは、jを1インクリメントし(ステップS367)、jが4を超えたか判断する(ステップS369)。jが4以下であれば処理はステップS359に戻る。一方、jが4を超えた場合には、分析サーバ310cは、暗号化演算結果(Cj,Dj)(j=1,2,3,4)を要求元のユーザシステム200cに返信する(ステップS371)。
これに対して、ユーザシステム200cの通信部422cは、クラウド300cから暗号化演算結果(Cj,Dj)を受信し、第4データ格納部423cに格納する(ステップS335)。そして、復号化処理部221cは、入力部421cから受け取った商品セグメントφに対応する暗号化演算結果(Cφ,Dφ)を、第4データ格納部423cから抽出する(ステップS337)。
その後、復号化処理部221cは、暗号化演算結果(Cφ,Dφ)から、指定された集計単位wに対応する購入額合計値Mwを算出する(ステップS339)。さらに、復号化処理部221cは、暗号化演算結果(Cφ,Dφ)から、指定された集計単位wからw=w+16と設定して合計人数Nwを算出する(ステップS341)。そして、出力部428cは、第4データ格納部423cに格納されている購入額合計値Mw及び合計人数Nw(出現回数又は購入回数とも呼ぶ)を、後処理部222に出力する(ステップS343)。後処理部222は、購入額合計値Mw/合計人数Nwにより平均購入額を算出し、購入額合計値Mw及び合計人数Nwと共に出力部223に出力する(ステップS345)。そして、出力部223は、購入額合計値Mw、合計人数Nw及び平均購入額を出力装置などに出力する(ステップS347)。
以上のような処理を実施することで、所望の商品セグメント且つ所望の集計単位について、秘匿性を保持しつつ、購入額合計値、合計人数及び平均購入額を得ることができるようになる。
なお、ステップS339及びS341についてはほぼ同様の処理であり、図22で説明したとおりの処理であり、ここでは説明を省略する。
[実施の形態5]
本実施の形態は、第4の実施の形態と同様に、商品セグメントを導入するように第3の実施の形態を変形するものである。
すなわち、4種類の商品セグメント(例えば、本、家電、ソフトウエア、食品)を導入して、これらについても分析を行うことができるようにするためには、これまでの集計単位16種類×4種類=64の集計単位が設定されることになる。第4の実施の形態と同様に、第3の実施の形態をそのまま拡張するのでは計算量が膨大になってしまう。そこで、暗号文の数を増加させることで、計算量の増加を抑えることとする。本実施の形態でも、商品セグメント毎に暗号文を設けることにする。
そうすると、図36に示すように、商品セグメントをSalt値Sと共にハッシュ関数でハッシュ値に変換する点を除けば、第3の実施の形態と同様の鍵を用意すればよい。
従って、基本的な構成は第3の実施の形態と同じであるから、本実施の形態と異なる部分だけ説明する。なお、構成要素の参照符号については、「d」を付加することで区別するものとする。
次に、準同型暗号処理部215dの処理内容について図37及び図38を用いて説明する。まず、図37を用いて購入額についての暗号文の生成処理について説明する。
データ入力部451dは、集計単位が設定されている属性の属性値(商品セグメントの属性値も含む)及び購入額mi,1(iはレコード番号を表す。1は暗号文の識別子を示す)を取得して、第5データ格納部453dに格納する(ステップS401)。また、データ入力部451dは、「商品セグメント」に応じた暗号文選択番号δ(例えば、本の場合δ=1、家電の場合δ=2、ソフトウエアの場合δ=3、食品の場合δ=4)を特定し、暗号文生成部457dに出力する(ステップS402)。
そうすると、暗号文生成部457dは、暗号文選択のためのカウンタjを1に初期化する(ステップS403)。暗号文生成部457dは、この購入額mi,1に応じて、乱数生成部455dに対して乱数ri,j,1を生成するように指示し、これに対して乱数生成部455dは、0<ri,j,1<n−1を満たす乱数ri,j,1を生成し、暗号文生成部457dに出力する(ステップS405)。
そして、暗号文生成部457dは、jがδに一致するか判断する(ステップS407)。jがδに一致する場合には、暗号文生成部457dは、シフト処理部456dに対して購入額mi,1に対してシフト処理を実施するように要求すると、シフト処理部456dは、集計単位が設定されている属性の属性値に応じて集計単位aを特定し、当該集計単位aに対応するビットシフト量の定数eaを公開鍵格納部454dから読み出して、第5データ格納部453dに格納されている購入額mi,1をeaだけ左シフトさせる処理を実施し、処理結果を暗号文生成部457dに出力する(ステップS409)。なお、シフト処理後の平文をmbi,1と表すものとする。
そして、暗号文生成部457dは、公開鍵格納部454dから法n2とnとを読み出して、暗号文ci,j,1=ri,j,1 ngmb(i,1)(mod n2)を生成し、第5データ格納部453dに格納する(ステップS411)。その後処理はステップS415に移行する。
一方、jがδに一致しない場合には、暗号文生成部457dは、暗号文ci,j,1=ri,j,1 n(mod n2)を生成し、第3データ格納部403dに格納する(ステップS413)。g0=1であるから、この部分が省略されている。そして処理はステップS415に移行する。
ステップS415では、暗号文生成部457dは、jを1インクリメントし(ステップS415)、jが4を超えたか判断する(ステップS417)。jが4以下であれば、処理はステップS405に戻る。
一方、jが4を超えた場合には、出力部452dは、第5データ格納部453dに格納されている暗号文ci,j,1(j=1,2,3,4)を、第2データ格納部216dに格納する(ステップS419)。
以上のような処理を実施することで、購入額mi,1についての暗号文ci,j,1が得られる。
次に、図38を用いて年齢及び人数についての暗号文の生成処理について説明する。
データ入力部451dは、集計単位が設定されている属性の属性値及び年齢mi,2(iはレコード番号を表す。2は暗号文の識別子を示す)を取得して、第5データ格納部453dに格納する(ステップS421)。また、データ入力部451dは、「商品セグメント」に応じた暗号文選択番号δ(例えば、本の場合δ=1、家電の場合δ=2、ソフトウエアの場合δ=3、食品の場合δ=4)を特定し、暗号文生成部457dに出力する(ステップS422)。
また、暗号文生成部457dは、暗号文のカウンタjを1に初期化する(ステップS423)。そして、暗号文生成部457dは、この年齢mi,2に応じて、乱数生成部455dに対して乱数ri,j,2を生成するように指示し、これに対して乱数生成部455dは、0<ri,j,2<n−1を満たす乱数ri,j,2を生成し、暗号文生成部457dに出力する(ステップS425)。
その後、暗号文生成部457dは、j=δであるか判断する(ステップS427)。j=δであれば、暗号文生成部457dが、シフト処理部456dに対して年齢mi,2及び人数に対してシフト処理を実施するように要求すると、シフト処理部456dは、集計単位が設定されている属性の属性値に応じて集計単位aを特定し、当該集計単位aに対応するビットシフト量の定数ea及び年齢属性に対応するビットシフト量の定数e17を公開鍵格納部454dから読み出す。そして、シフト処理部456dは、人数1をeaだけ左シフトさせると共に、第5データ格納部453dに格納されている年齢mi,2をe17だけ左シフトさせる処理を実施し、2つのビット列を連結させた上で、処理結果mci,2を暗号文生成部457dに出力する(ステップS429)。そして、暗号文生成部457dは、公開鍵格納部454dから法n2とnとを読み出して、暗号文2としてci,2=ri,2 ngmc(i,2)(mod n2)を生成し、第5データ格納部453dに格納する(ステップS431)。そして処理はステップS435に移行する。
一方、j=δでない場合には、暗号文生成部457dは、暗号文ci,j,2=ri,j,2 n(mod n2)を生成し、第5データ格納部453dに格納する(ステップS433)。g0=1であるから、この部分が省略されている。そして処理はステップS435に移行する。
ステップS435では、暗号文生成部457dは、jを1インクリメントし(ステップS435)、jが4を超えたか判断する(ステップS437)。jが4以下であれば、処理はステップS425に戻る。
一方、jが4を超えた場合には、暗号文生成部457dは、公開鍵格納部454dから法n2とnとを読み出して、ci,j,2=ri,j,2 ngmc(i,2)(mod n2)を生成し、第5データ格納部453dに格納する(ステップS439)。
以上のような処理を実施することで、年齢mi,2及び人数についての暗号文ci,j,2が得られる。
次に、図39乃至図40を用いて、分析時の処理について説明する。入力部461dは、ユーザシステム200dのユーザなどから集計すべき「購入年月」、商品セグメントφ及び集計単位wの入力を受け付ける(図39:ステップS441)。
これに対して、入力部461dは、入力された「購入年月」及び商品セグメントφのデータを通信部462dに出力する。通信部462dは、ハッシュ生成部468dに「購入年月」及び商品セグメントφと鍵格納部464dに格納されているSalt値Sとから2つのハッシュ値を生成させ、当該「購入年月」のハッシュ値及び商品セグメントφのハッシュ値を含むリクエストをクラウド300dに送信する(ステップS443)。
これに対してクラウド300dの分析サーバ310dは、ユーザシステム200dから「購入年月」のハッシュ値及び商品セグメントφのハッシュ値を含むリクエストを受信する(図40:ステップS461)。そうすると、分析サーバ310dは、DB320dにおいて、「購入年月」の値がリクエストに含まれるハッシュ値に一致し且つ商品セグメントの値がリクエストに含まれるハッシュ値に一致するレコードの購入額及び人数(年齢も含む)の暗号文(ci,φ,1,ci,φ,2)(iはレコードの識別子。i=1,2,...,t)を抽出する(ステップS463)。そして、分析サーバ310dは、(C1,C2)=1に初期化し(ステップS465)、iを1に初期化する(ステップS467)。
その後、分析サーバ310dは、C1=C1×ci,φ,1(mod n2)及びC2=C2×ci,φ,2(mod n2)を算出する(ステップS469)。さらに、分析サーバ310dは、iを1インクリメントし(ステップS471)、iがtを超えたか判断する(ステップS473)。iがt以下であれば、処理はステップS469に戻る。
iがtを超えた場合には、分析サーバ310dは、暗号化演算結果C1及びC2を要求元のユーザシステム200dに返信する(ステップS475)。
これに対して、ユーザシステム200dの通信部462dは、クラウド300dから暗号化演算結果C1及びC2を受信し、第6データ格納部463dに格納する(ステップS445)。
その後、復号演算部466dは、暗号化演算結果C1から、指定された集計単位wに対応する購入額合計値Mwを算出する(ステップS447)。さらに、復号演算部466dは、暗号化演算結果C2から、指定された集計単位wに対応する合計人数Nwを算出する(ステップS448)。そして、出力部467dは、第6データ格納部463dに格納されている購入額合計値Mw及び合計人数Nw(出現回数又は購入回数とも呼ぶ)を、後処理部222に出力する(ステップS449)。後処理部222は、購入額合計値Mw/合計人数Nwにより平均購入額を算出し、購入額合計値Mw及び合計人数Nwと共に出力部223に出力する(ステップS451)。そして、出力部223は、購入額合計値Mw、合計人数Nw及び平均購入額を出力装置などに出力する(ステップS453)。
以上のような処理を実施することで、所望の集計単位について、秘匿性を保持しつつ、購入額合計値、合計人数及び平均購入額を得ることができるようになる。
なお、ステップS447及び448についてはほぼ同様の処理であり、図30で説明されているものと同様であるから説明を省略する。
以上、本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、処理の対象は購買履歴データに限定されるわけではない。また、上で述べた装置の機能ブロック構成は一例であって、必ずしも実際のプログラムモジュール構成と一致しない場合もある。処理フローについても、処理結果が変わらない限り、ステップの順番を入れ替えたり、ステップを並列実行するようにしても良い。
なお、上で述べた例では、第3及び第5の実施の形態では購入額と人数とを同一の元のべき数により集計する例は示されていないが、集計単位の数が少なかったり、上限値が小さいようであれば同一の元のべき数で集計するようにしても良い。
さらに、性別と年齢とに集計単位が設定されている場合でも、例えば性別だけの集計を行う場合には、全ての年齢区分を指定した上で集計結果を合計することで、「男」のみ又は「女」のみの集計結果を得ることも可能である。また、性別及び年齢の組み合わせで集計単位を定義した上で、さらに性別だけで集計単位を設定するようにしても良い。
なお、上で述べた各種装置は、コンピュータ装置であって、図41に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本実施の形態をまとめると、以下のようになる。
本実施の形態に係る暗号処理方法は、(A)複数の属性の各々について属性値を含むデータを格納するデータ格納部に格納されているデータについて、複数の属性のうち集計単位が予め設定されている第1の属性の属性値に応じて、集計単位を特定するステップと、特定された集計単位に応じた準同型暗号処理を、上記データに含まれる複数の属性のうち第1の属性以外の第2の属性の属性値に対して実施し、暗号化された第2の属性の属性値を、データ格納部に格納するステップとを含む。
このようにすれば、集計単位毎に異なる準同型暗号処理が行われるため、準同型暗号の加算処理においても集計単位毎に集計が行われるようになるため、秘匿性を保持しつつ集計単位毎に集計を実施できるようになる。
なお、上で述べた集計単位に応じた準同型暗号処理が、集計単位に応じて公開鍵に含まれる元を選択し、当該元を用いた準同型暗号処理を実施する処理である場合もある。このように元を集計単位毎に変更することで、同一集計単位の値は同一元のべき数に集積されるので、秘匿性を保持しつつ集計単位毎に集計を実施できるようになる。
また、上で述べた集計単位に応じた準同型暗号処理が、集計単位に応じてビットシフト量を特定し、特定されたビットシフト量だけ第2の属性の属性値を左ビットシフトさせた上で準同型暗号処理を実施する処理である場合もある。このようにすれば集計単位毎に、加算処理によって変更されるビットの桁範囲が異なるので、秘匿性を保持しつつ集計単位毎に集計が実施できるようになる。
なお、素数の法がnであり、0<s<n−1を満たす第1の乱数を秘密鍵sとし、第2の属性の属性値がmであり、法n上の原始元がgであり、暗号化鍵がy=gs (mod n)であり、選択された元がgaであるとすると、上で述べた準同型暗号処理が、(b1)0<r<n−1を満たす第2の乱数rを生成し、(b2)暗号文c=gr(mod n)を算出し、(b3)暗号文d=yrgam(mod n)を算出する処理を含むようにしても良い。このようにElgamalベースの方法を採用するようにしても良い。
また、特定されたビットシフト量だけ左ビットシフトさせた第2の属性の属性値をmとし、2つの素数の積がnであり、元をgとすると、上で述べた準同型暗号処理が、(b1)0<r<n−1を満たす乱数rを生成し、(b2)暗号文c=rngm(mod n2)を算出する処理を含むようにしても良い。このようにPaillerベースの方法を採用するようにしても良い。
なお、上で述べた集計単位に応じた準同型暗号処理が、集計単位に応じて、当該集計単位について第2の属性の属性値を集計するための第1の元及び当該集計単位の出現回数を計数するための第2の元を選択し、当該第1の元及び第2の元を用いた準同型暗号処理を実施する処理を含む場合もある。このようにすれば、集計単位毎に第2の属性の属性値を集計するだけではなく、集計単位の出現回数を計数できるようになるので、平均値を算出することもできるようになる。
また、上で述べた集計単位に応じた準同型暗号処理が、集計単位に応じて第1のビットシフト量を特定し、特定された第1のビットシフト量だけ第2の属性の属性値を左ビットシフトさせることで第1のビット列を生成し、集計単位に応じて当該集計単位の出現回数をカウントするために設定されている第2のビットシフト量を特定し、特定された第2のビットシフト量だけ1を左ビットシフトさせることで第2のビット列を生成し、第1のビット列と第2のビット列とを結合させたビット列に対して準同型暗号処理を実施する処理を含むようにしても良い。このようにすれば、集計単位毎に第2の属性の属性値を集計するだけではなく、集計単位の出現回数を計数することもできるようになる。従って、購入金額の平均値といった計算もできるようになる。
さらに、上で述べた集計単位に応じた準同型暗号処理が、集計単位に応じて当該集計単位の出現回数をカウントするための第2のビットシフト量を特定し、特定された第2のビットシフト量だけ1を左ビットシフトさせることで第2のビット列を生成し、第2のビット列に対して準同型暗号処理をさらに実施する処理を含むようにしても良い。このように集計単位毎に集計する暗号文と、集計単位の出現回数を表す暗号文とを別に設けるようにしても良い。
さらに、複数の属性のうち第1の属性及び第2の属性以外の第3の属性の属性値に応じて、第2の属性の属性値に対して用意されるべき複数の暗号文のうち特定の暗号文を選択し、複数の暗号文のうち特定の暗号文以外の暗号文を、0に対する準同型暗号処理を実施することで生成し、複数の暗号文のうち特定の暗号文を、特定された集計単位に応じた準同型暗号処理を第2の属性の属性値に対して実施することで生成するようにしても良い。このようにすれば、第3の属性の属性値と集計単位との組み合わせでも集計処理を実施することが可能となる。
また、本実施の形態に係る復号処理方法は、(A)平文データに含まれる第1の属性の属性値によって特定される集計単位に応じて異なる準同型暗号の暗号化処理を第2の属性の属性値に対して実施することで得られる暗号文について準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部に格納するステップと、(B)データ格納部に格納されている暗号化演算結果に対して、特定の集計単位に応じた、準同型暗号の復号化処理を実施し、特定の集計単位についての、第2の属性の属性値の集計結果を抽出し、データ格納部に格納するステップとを含む。
このようにすれば、秘匿化された集計結果である暗号化演算結果から、特定の集計単位についての集計結果を抽出できるようになる。
例えば、特定の集計単位に応じた、準同型暗号の復号処理が、特定の集計単位に対応する元以外の元のべき乗部分が1になるように、暗号化演算結果に対して演算を実施する処理を含むようにしても良い。集計単位毎に元が用意されている場合には、このように特定の集計単位に対応する元以外の元のべき乗部分が1となるようにすれば、特定の集計単位に対応する元のべき乗部分のみが残るため、べき乗部分に集計結果が含まれる場合には当該集計結果を抽出することができる。
また、特定の集計単位に応じた、準同型暗号の復号処理が、暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文のビット列を生成し、平文のビット列から、特定の集計単位に対応するビット範囲を抽出する処理を含むようにしても良い。このように集計単位毎に使用するビット範囲を異なるようにすれば、集計単位毎に集計値を1つのビット列内で分けて算出できるようになる。
さらに、素数の法がnであり、各集計単位aに対応する元gaについて、ga pa(mod n)=1を満たす素数paが用意されており、暗号化演算結果が、第1の暗号化演算結果C及び第2の暗号化演算結果Dを含み、秘密鍵がsであるとすると、特定の集計単位に応じた、準同型暗号の復号処理が、U=Cs(mod n)及びV=D×U-1(mod n)を算出し、特定の集計単位以外の各集計単位iに対応する素数piについて、Z=Vpi(mod n)及びV=Z1/pi(mod n)の演算を特定の集計単位以外の各集計単位iについて繰り返し行うようにしても良い。このようにすれば、Elgamalベースの方法において、特定の集計単位に対応する元のべき乗部分を抽出できるようになる。
さらに、2つの素数の積がnであり、元がgであり、暗号化演算結果が、第1の暗号化演算結果C及び第2の暗号化演算結果Dを含み、秘密鍵がsであり、L(x)は(x−1)/nという関数であるとすると、特定の集計単位に応じた、準同型暗号の復号処理が、M=L(Cs(mod n2))/L(gs(mod n2))(mod n2)を算出し、Mから、特定の集計単位に対応するビット範囲を抽出するようにしても良い。このようにすれば、Paillerベースの方法において、集計単位に対応するビット範囲に保持されている集計結果を抽出することができるようになる。
さらに、特定の集計単位に応じた、準同型暗号の復号処理が、特定の集計単位に対応する、第2の属性の属性値を集計するための元以外の元のべき乗部分が1になるように、暗号化演算結果に対して演算を実施する処理と、特定の集計単位の出現回数を計数するための元以外の元のべき乗部分が1になるように、暗号化演算結果に対して演算を実施する処理とを含むようにしても良い。このようにすれば、集計値と出現回数とが得られるので、集計値の平均値を算出することもできるようになる。
また、特定の集計単位に応じた、準同型暗号の復号処理が、暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文のビット列を生成し、平文のビット列から、特定の集計単位に対応し且つ第2の属性の属性値の集計のために設定されているビット範囲を抽出する処理と、平文のビット列から、特定の集計単位に対応し且つ特定の集計単位の出現回数を計数するために設定されているビット範囲を抽出する処理とを含むようにしても良い。このように同一ビット列に、集計値及び出現回数が保持されている場合であっても、それらの値を適切に抽出できるようになる。
また、上で述べた暗号化演算結果が、第2の属性の属性値の集計結果のための第1の暗号化演算結果と、集計単位の出現回数の計数結果のための第2の暗号化演算結果とを含む場合もある。この場合、特定の集計単位に応じた、準同型暗号の復号処理が、第1の暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文の第1のビット列を生成し、平文の第1のビット列から、特定の集計単位に対応するビット範囲を抽出し、第2の暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文の第2のビット列を生成し、平文の第2のビット列から、特定の集計単位に対応するビット範囲を抽出する処理を含むようにしても良い。このように暗号文を分ける場合においても、適切に集計値及び出現回数を抽出できるようになる。
さらに、第1の属性及び第2の属性以外の第3の属性の属性値に応じて第2の属性の属性値に対する準同型暗号の暗号処理の結果を複数種類の暗号文のうち第1の種類の暗号文に割り当て且つ残余の種類の暗号文については0に対する準同型暗号の暗号処理の結果を割り当てることで得られる上記複数種類の暗号文の種類毎に準同型暗号の加算演算を実施した結果である複数の暗号化演算結果を、上で述べた暗号化演算結果が含む場合もある。この場合には、複数の暗号化演算結果のうち第3の属性の特定の属性値に対応する暗号化演算結果を特定し、特定された暗号化演算結果に対して準同型暗号の復号処理を実施するようにしても良い。例えば、集計単位と第3の属性の属性値との組み合わせで集計を行う場合には、第3の属性の属性値に応じて暗号文を分けることで、計算量を減らすことができるようになる。
本実施の形態に係る暗号処理装置(図42)は、複数の属性の各々について属性値を含むデータを格納するデータ格納部(図42:3300)に格納されているデータについて、複数の属性のうち集計単位が予め設定されている第1の属性の属性値に応じて、集計単位を特定する特定部(図42:3100)と、特定された集計単位に応じた準同型暗号処理を、上記データに含まれる複数の属性のうち第1の属性以外の第2の属性の属性値に対して実施し、暗号化された第2の属性の属性値を、データ格納部に格納する処理部(図42:3200)とを有する。
本実施の形態に係る復号処理装置(図43)は、平文データに含まれる第1の属性の属性値によって特定される集計単位に応じて異なる準同型暗号の暗号化処理を第2の属性の属性値に対して実施することで得られる暗号文について準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部(図43:4300)に格納する受信部(図43:4100)と、データ格納部に格納されている暗号化演算結果に対して、特定の集計単位に応じた、準同型暗号の復号化処理を実施し、特定の集計単位についての、第2の属性の属性値の集計結果を抽出し、データ格納部に格納する処理部(図43:4200)とを有する。
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROMなどの光ディスク、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
複数の属性の各々について属性値を含むデータを格納するデータ格納部に格納されている前記データについて、前記複数の属性のうち集計単位が予め設定されている第1の属性の属性値に応じて、集計単位を特定するステップと、
特定された前記集計単位に応じた準同型暗号処理を、前記データに含まれる前記複数の属性のうち前記第1の属性以外の第2の属性の属性値に対して実施し、暗号化された前記第2の属性の属性値を、前記データ格納部に格納するステップと、
を含み、コンピュータにより実行される暗号処理方法。
(付記2)
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じて公開鍵に含まれる元を選択し、当該元を用いた準同型暗号処理を実施する処理である
付記1記載の暗号処理方法。
(付記3)
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じてビットシフト量を特定し、特定された前記ビットシフト量だけ前記第2の属性の属性値を左ビットシフトさせた上で準同型暗号処理を実施する処理である
付記1記載の暗号処理方法。
(付記4)
素数の法がnであり、
0<s<n−1を満たす第1の乱数を秘密鍵sとし、
前記第2の属性の属性値がmであり、
法n上の原始元がgであり、
暗号化鍵がy=gs (mod n)であり、
選択された前記元がgaであるとすると、
前記準同型暗号処理が、
0<r<n−1を満たす第2の乱数rを生成し、
暗号文c=gr(mod n)を算出し、
暗号文d=yrgam(mod n)を算出する
処理を含む
付記2記載の暗号処理方法。
(付記5)
特定された前記ビットシフト量だけ左ビットシフトさせた前記第2の属性の属性値をmとし、
2つの素数の積がnであり、
元をgとすると、
前記準同型暗号処理が、
0<r<n−1を満たす乱数rを生成し、
暗号文c=rngm(mod n2)を算出する
処理を含む
付記3記載の暗号処理方法。
(付記6)
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じて、当該集計単位について前記第2の属性の属性値を集計するための第1の元及び当該集計単位の出現回数を計数するための第2の元を選択し、当該第1の元及び第2の元を用いた準同型暗号処理を実施する処理を含む
付記1記載の暗号処理方法。
(付記7)
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じて第1のビットシフト量を特定し、特定された前記第1のビットシフト量だけ前記第2の属性の属性値を左ビットシフトさせることで第1のビット列を生成し、
前記集計単位に応じて当該集計単位の出現回数をカウントするために設定されている第2のビットシフト量を特定し、特定された前記第2のビットシフト量だけ1を左ビットシフトさせることで第2のビット列を生成し、
前記第1のビット列と前記第2のビット列とを結合させたビット列に対して準同型暗号処理を実施する処理を含む
付記1記載の暗号処理方法。
(付記8)
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じて当該集計単位の出現回数をカウントするための第2のビットシフト量を特定し、特定された前記第2のビットシフト量だけ1を左ビットシフトさせることで第2のビット列を生成し、前記第2のビット列に対して準同型暗号処理をさらに実施する処理を含む
付記3記載の暗号処理方法。
(付記9)
前記複数の属性のうち前記第1の属性及び前記第2の属性以外の第3の属性の属性値に応じて、前記第2の属性の属性値に対して用意されるべき複数の暗号文のうち特定の暗号文を選択し、
前記複数の暗号文のうち前記特定の暗号文以外の暗号文を、0に対する前記準同型暗号処理を実施することで生成し、
前記複数の暗号文のうち前記特定の暗号文を、特定された前記集計単位に応じた準同型暗号処理を前記第2の属性の属性値に対して実施することで生成する
付記1記載の暗号処理方法。
(付記10)
平文データに含まれる第1の属性の属性値によって特定される集計単位に応じて異なる準同型暗号の暗号化処理を第2の属性の属性値に対して実施することで得られる暗号文について前記準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部に格納するステップと、
前記データ格納部に格納されている前記暗号化演算結果に対して、特定の集計単位に応じた、前記準同型暗号の復号化処理を実施し、前記特定の集計単位についての、前記第2の属性の属性値の集計結果を抽出し、前記データ格納部に格納するステップと、
を含み、コンピュータにより実行される復号処理方法。
(付記11)
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記特定の集計単位に対応する元以外の元のべき乗部分が1になるように、前記暗号化演算結果に対して演算を実施する処理
を含む付記10記載の復号処理方法。
(付記12)
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文のビット列を生成し、
前記平文のビット列から、前記特定の集計単位に対応するビット範囲を抽出する処理
を含む付記10記載の復号処理方法。
(付記13)
素数の法がnであり、
各前記集計単位aに対応する元gaについて、ga pa(mod n)=1を満たす素数paが用意されており、
前記暗号化演算結果が、第1の暗号化演算結果C及び第2の暗号化演算結果Dを含み、
秘密鍵がsであるとすると、
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
U=Cs(mod n)及びV=D×U-1(mod n)を算出し、
前記特定の集計単位以外の各集計単位iに対応する素数piについて、Z=Vpi(mod n)及びV=Z1/pi(mod n)の演算を前記特定の集計単位以外の各集計単位iについて繰り返し行う
処理を含む付記10記載の復号処理方法。
(付記14)
2つの素数の積がnであり、
元がgであり、
前記暗号化演算結果が、第1の暗号化演算結果C及び第2の暗号化演算結果Dを含み、
秘密鍵がsであり、
L(x)は(x−1)/nという関数であるとすると、
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
M=L(Cs(mod n2))/L(gs(mod n2))(mod n2)を算出し、
前記Mから、前記特定の集計単位に対応するビット範囲を抽出する
処理を含む付記10記載の復号処理方法。
(付記15)
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記特定の集計単位に対応する、前記第2の属性の属性値を集計するための元以外の元のべき乗部分が1になるように、前記暗号化演算結果に対して演算を実施する処理と、
前記特定の集計単位の出現回数を計数するための元以外の元のべき乗部分が1になるように、前記暗号化演算結果に対して演算を実施する処理と、
を含む付記10記載の復号処理方法。
(付記16)
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文のビット列を生成し、
前記平文のビット列から、前記特定の集計単位に対応し且つ前記第2の属性の属性値の集計のために設定されているビット範囲を抽出する処理と、
前記平文のビット列から、前記特定の集計単位に対応し且つ前記特定の集計単位の出現回数を計数するために設定されているビット範囲を抽出する処理と、
を含む付記10記載の復号処理方法。
(付記17)
前記暗号化演算結果が、前記第2の属性の属性値の集計結果のための第1の暗号化演算結果と、前記集計単位の出現回数の計数結果のための第2の暗号化演算結果とを含み、
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記第1の暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文の第1のビット列を生成し、
前記平文の第1のビット列から、前記特定の集計単位に対応するビット範囲を抽出し、
前記第2の暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文の第2のビット列を生成し、
前記平文の第2のビット列から、前記特定の集計単位に対応するビット範囲を抽出する
処理を含む付記10記載の復号処理方法。
(付記18)
前記第1の属性及び前記第2の属性以外の第3の属性の属性値に応じて前記第2の属性の属性値に対する前記準同型暗号の暗号処理の結果を複数種類の暗号文のうち第1の種類の暗号文に割り当て且つ残余の種類の暗号文については0に対する前記準同型暗号の暗号処理の結果を割り当てることで得られる前記複数種類の暗号文の種類毎に前記準同型暗号の加算演算を実施した結果である複数の暗号化演算結果を、前記暗号化演算結果が含み、
前記複数の暗号化演算結果のうち前記第3の属性の特定の属性値に対応する暗号化演算結果を特定し、
特定された前記暗号化演算結果に対して前記準同型暗号の復号処理を実施する
付記10記載の復号処理方法。
(付記19)
複数の属性の各々について属性値を含むデータを格納するデータ格納部に格納されている前記データについて、前記複数の属性のうち集計単位が予め設定されている第1の属性の属性値に応じて、集計単位を特定するステップと、
特定された前記集計単位に応じた準同型暗号処理を、前記データに含まれる前記複数の属性のうち前記第1の属性以外の第2の属性の属性値に対して実施し、暗号化された前記第2の属性の属性値を、前記データ格納部に格納するステップと、
を、コンピュータに実行させるための暗号処理プログラム。
(付記20)
平文データに含まれる第1の属性の属性値によって特定される集計単位に応じて異なる準同型暗号の暗号化処理を第2の属性の属性値に対して実施することで得られる暗号文について前記準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部に格納するステップと、
前記データ格納部に格納されている前記暗号化演算結果に対して、特定の集計単位に応じた、前記準同型暗号の復号化処理を実施し、前記特定の集計単位についての、前記第2の属性の属性値の集計結果を抽出し、前記データ格納部に格納するステップと、
を、コンピュータに実行させるための復号処理プログラム。
(付記21)
複数の属性の各々について属性値を含むデータを格納するデータ格納部に格納されている前記データについて、前記複数の属性のうち集計単位が予め設定されている第1の属性の属性値に応じて、集計単位を特定する特定部と、
特定された前記集計単位に応じた準同型暗号処理を、前記データに含まれる前記複数の属性のうち前記第1の属性以外の第2の属性の属性値に対して実施し、暗号化された前記第2の属性の属性値を、前記データ格納部に格納する処理部と、
を有する暗号処理装置。
(付記22)
平文データに含まれる第1の属性の属性値によって特定される集計単位に応じて異なる準同型暗号の暗号化処理を第2の属性の属性値に対して実施することで得られる暗号文について前記準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部に格納する受信部と、
前記データ格納部に格納されている前記暗号化演算結果に対して、特定の集計単位に応じた、前記準同型暗号の復号化処理を実施し、前記特定の集計単位についての、前記第2の属性の属性値の集計結果を抽出し、前記データ格納部に格納する処理部と、
を有する復号処理装置。