以下、本発明の実施形態を説明する。
[原理]
まず、原理を説明する。以下では第1暗号文を第2暗号文に再暗号化する。第1暗号文を生成するための鍵を第1暗号化鍵と呼び、第1暗号文を復号するための鍵を第1復号鍵と呼ぶ。また、第2暗号文を生成するための鍵を第2暗号化鍵と呼び、第2暗号文を復号するための鍵を第2復号鍵と呼ぶ。すなわち、第1暗号化鍵は第1復号鍵に対応し、第2暗号化鍵は第2復号鍵に対応する。第1暗号文を第1復号鍵で復号して得られる復号結果(平文)は、第2暗号文を第2復号鍵で復号して得られる復号結果と等しい。第1暗号文および第2暗号文は、非対称暗号化方式(例えば、公開鍵暗号方式、IDベース暗号方式、関数暗号方式等)に則って暗号化された暗号文である。第1暗号文の暗号化方式と第2暗号文の暗号化方式とは互いに同一であってもよいし、互いに異なっていてもよい。非対称暗号化方式の例は準同型性暗号方式である。少なくとも、第2暗号文は準同型性暗号方式に則って得られた暗号文であり、準同型性を持つ。第1暗号文は同型性暗号方式に則って得られた暗号文であってもなくてもよい。例えば、第1暗号文および第2暗号文が格子暗号方式またはNTRU暗号方式に則った暗号文である。
鍵生成装置は、第1復号鍵および第2暗号化鍵を用い、第1暗号文を第2暗号文に変換するための基本変換鍵を得、第2暗号化鍵を用い、第2暗号化鍵をランダム化してランダム化鍵を得る。ただし、ランダム化鍵を用いて暗号化された暗号文が第2復号鍵で復号可能とされる。このように得られた基本変換鍵とランダム化鍵が、第1暗号文を第2暗号文に再暗号化するための変換鍵とされる。ランダム化鍵は第2暗号化鍵をランダム化して得られたものである。そのため、攻撃者等の第三者はランダム化鍵から第2暗号化鍵を特定することができない。これにより、変換鍵から変換先の情報が漏えいすることを抑制できる。
再暗号化装置は、第1暗号文を入力とし、変換鍵の基本変換鍵を用いて第1暗号文を第2暗号文に変換し、変換鍵のランダム化鍵を用いて第1値を暗号化して準同型性を持つ撹乱暗号文を得、第2暗号文と撹乱暗号文とに対して所定の「演算」を行って変形済暗号文を得る。ただし、任意の第2値と第1値とに当該「演算」を行って得られる値は第2値に等しい。例えば、「第1値」は当該「演算」が定義された集合の単位元である。この「演算」が加法演算である場合、「第1値」は加法単位元(零元)である。例えば、この「演算」が加算である場合(変形済暗号文=第2暗号文+撹乱暗号文)、「第1値」は0である。或いは、この「演算」が乗法演算である場合、「第1値」は乗法単位元である。例えば、この「演算」が乗算である場合(変形済暗号文=第2暗号文×撹乱暗号文)、「第1値」は1である。
第2暗号文および撹乱暗号文の準同型性により、変形済暗号文を第2復号鍵で復号して得られる値は、第2暗号文の復号結果と撹乱暗号文の復号結果に対して上記の「演算」を行って得られる値に等しい。上述のように第2暗号文も撹乱暗号文も共に第2復号鍵で復号可能であり、第2暗号文の復号結果は平文であり、撹乱暗号文の復号結果は第1値である。上記の「演算」の性質より、平文と第1値とに当該「演算」を行って得られる値は平文となる。すなわち、変形済暗号文は第1暗号文を再暗号化した暗号文となる。
[実施形態]
以下、図面を用いて実施形態を説明する。
<再変換可能暗号方式>
まず、再変換可能暗号方式π=(SU,G,E,D,RKG,Switch)を以下のように定義する。
SU:共通パラメータ生成アルゴリズムSUは、κを入力にとり、共通パラメータppを出力する確率的アルゴリズムである(pp←SU(1κ))。ただし、κはセキュリティパラメータ(正の整数)である。1κはκビットの1の列である。
G:鍵生成アルゴリズムGは、ppを入力にとり、暗号化鍵と復号鍵の組(ek,dk)を出力する確率的アルゴリズムである((ek,dk)←G(pp))。
E:暗号化アルゴリズムEは、pp,ek,平文μを入力にとり、乱数を内部発生させ、暗号文cを出力する確率的アルゴリズムである(c=E(pp,ek,μ))。ただし、暗号化アルゴリズムEは、準同型暗号である非対称暗号方式に則ったものであり、暗号文cは準同型性を持つ。
D:復号アルゴリズムDは、pp,dk,暗号文cを入力にとり、平文μ’を出力するアルゴリズムである(μ’←D(pp,dk,c))。
RKG:変換鍵生成アルゴリズムRKGは、pp,dkα,ekβを入力にとり、基本変換鍵rkα→βを出力する確率的アルゴリズムである(rkα→β←RKG(pp,dkα,ekβ))。ただし、dkαはユーザαに対して得られた復号鍵(ユーザαが復号を行うための復号鍵)であり、ekβはユーザβに対して得られた暗号化鍵(ユーザβが復号を行うことが可能な暗号文を生成するための暗号化鍵)である。何れの鍵も鍵生成アルゴリズムGによって得られたものである。基本変換鍵rkα→βは、復号鍵dkαに対応する暗号化鍵ekαを用いて生成された第1暗号文を、暗号化鍵ekβに対応する復号鍵dkβで復号可能な第2暗号文に変換するための鍵である。
RG:ランダム化鍵生成アルゴリズムRGは、pp,ekβを入力にとり、ランダム化鍵(rppβ,rekβ)を出力する確率的アルゴリズムである((rppβ,rekβ)←RG(pp,ekβ))。
Switch:変換アルゴリズムSwitchは、pp,rkα→β,暗号文cαを入力にとり、暗号文cβを出力する確率的アルゴリズムである(cβ←Switch(pp,rkα→β,cα))。ただし、暗号文cαはユーザαの復号鍵dkαで復号可能な暗号文であり、暗号文cβはユーザβの復号鍵dkβで復号可能な暗号文である。dkβは上述の暗号化鍵ekβに対応する。
<プロキシ再暗号化方式>
上記の再変換可能暗号方式πを用い、以下のように本形態のプロキシ再暗号化方式Π=(Setup,Gen,Enc1,Dec1,Enc2,Dec2,RekeyGen,ReEnc)を構成する。
Setup:アルゴリズムSetupは、κを入力としてpp←SU(1κ)を計算し、PP=ppを出力する。なお、「γ←η」は「ηによって得られた値をγとする(γ=η)」ことを意味する。
Geny:アルゴリズムGenyは、PP=ppを入力とし、ユーザy∈{α,β}に対応する、再暗号化前の暗号化鍵と復号鍵の組(ieky,idky)←G(pp)および再暗号化後の暗号化鍵と復号鍵の組(oeky,odky)←G(pp)を得てこれらを出力する。ただし、再暗号化後の暗号文をさらに再暗号化できる方式(マルチホップ再暗号化方式)の場合には、ieky=oekyかつidky=odkyでよく、(ieky,idky)←G(pp)で得られた組をそのまま(oeky,odky)とすればよい。
Enci:アルゴリズムEnciは、再暗号化前の暗号文を生成する。アルゴリズムEnciは、PP=pp,ieky,平文μを入力とし、icty=E(pp,ieky,μ)を計算し、ictyを暗号文として出力する。
Deci:アルゴリズムDeciは、再暗号化前の暗号文を復号する。アルゴリズムDeciは、PP=pp,idky,暗号文ictyを入力とし、μ’=D(pp,idky,icty)を計算し、μ’を平文として出力する。
Enco:アルゴリズムEncoは、再暗号化後の暗号文を生成する。アルゴリズムEncoは、PP=pp,oeky,平文μを入力とし、octy=E(pp,oeky,μ)を計算し、octyを暗号文として出力する。
Deco:アルゴリズムDecoは、再暗号化後の暗号文を復号する。アルゴリズムDecoは、PP=pp,odky,暗号文octyを入力とし、μ’=D(pp,odky,octy)を計算し、μ’を平文として出力する。
RekeyGen:アルゴリズムRekeyGenは、PP=pp,idkα(第1復号鍵),oekβ(第2暗号化鍵)を入力とし、rkα→β←RKG(pp,idkα,oekβ)を計算してrkα→βを基本変換鍵とし、(rppβ,rekβ)←RG(pp,oekβ)を計算して(rppβ,rekβ)をランダム化鍵とし、RKα→β=(rkα→β,rppβ,rekβ)を変換鍵として出力する。ただし、ランダム化鍵(rppβ,rekβ)を用いて暗号化された暗号文はodkβ(第2復号鍵)で復号可能である。
ReEnc:アルゴリズムReEncは、PP=pp,RKα→β=(rkα→β,rppβ,rekβ),ictα(第1暗号文)を入力とし、以下を計算する。ただし、ictα=E(pp,iekα,μ)である。
1)c’←Switch(pp,rkα→β,ictα)
2)c’’←E(rppβ,rekβ,0)
3)octβ←c’+c’’
アルゴリズムReEncは、octBを変換済暗号文として出力する。なお、この例は「第1値」が0であり、「所定の演算」が加算である場合のものである。
<構成>
図1に例示するように、本形態の再暗号化システム1は、管理装置11、鍵生成装置12,13、暗号化装置14、復号装置15,16、および再暗号化装置17を有する。図2に例示するように、本形態の鍵生成装置12は、入力部121、出力部122、記憶部123、鍵ペア生成部124、基本変換鍵生成部125、ランダム化鍵生成部126、および変換鍵合成部127を有する。また、図3に例示するように、本形態の再暗号化装置17は、入力部171、出力部172、記憶部173、基本変換部174、撹乱暗号化部175、および演算部176を有する。なお、各装置は、例えば、CPU(central processing unit)等のプロセッサ(ハードウェア・プロセッサ)やRAM(random-access memory)等のメモリ等を備える汎用または専用のコンピュータに、所定のプログラムが読み込まれて構成される装置である。CPUは電子回路(circuitry)の一種であるが、装置を構成する一部またはすべての処理部がその他の電子回路(circuitry)によって構成されていてもよい。また、各装置は情報のやり取りが可能なように構成されている。例えば、各装置はインターネット等のネットワークを通じて通信可能に構成されている。
<処理>
以下では、鍵生成装置12がユーザαに対応する鍵および変換鍵を生成し、鍵生成装置13がユーザβに対応する鍵を生成し、暗号化装置14がユーザαに対応する暗号化鍵を用いて暗号文を生成し、再暗号化装置17がこの暗号文をユーザβに対応する復号鍵で復号可能な変形済暗号文に変換する処理を例にとって説明する。
≪管理装置11の処理≫
管理装置11は、1κを入力としてアルゴリズムSetupを実行し、共通パラメータppを出力する。共通パラメータppは、再暗号化システム1を構成する各装置に送られる。
≪鍵生成装置13の鍵生成処理≫
鍵生成装置13は、ユーザβに対応する鍵を生成する。この鍵生成処理の前提として、上述の共通パラメータppが鍵生成装置13に入力され、鍵生成装置13の記憶部(図示せず)に格納されているものとする。鍵生成装置13は、記憶部から共通パラメータppを抽出し、アルゴリズムGenβを実行して、再暗号化前の暗号化鍵と復号鍵の組(iekβ,idkβ)および再暗号化後の暗号化鍵と復号鍵の組(oekβ,odkB)を得て出力する。ただし、マルチホップ再暗号化方式の場合にはiekβ=oekβとidkB=odkβを得ればよい。復号鍵idkβおよびodkβはユーザβの秘密情報であり、ユーザβが利用する復号装置15に安全に送られ、復号装置15に安全に格納される。一方、暗号化鍵iekβおよびoekβは公開情報であり、必要に応じて鍵生成装置13から出力されてもよいし、各装置がアクセス可能な装置に格納されてもよい。
≪鍵生成装置12の鍵生成処理≫
鍵生成装置12は、ユーザαに対応する鍵および変換鍵を生成する。図2および図4Aを用いて鍵生成装置12の鍵生成処理を説明する。この鍵生成処理の前提として、上述の共通パラメータppおよび暗号化鍵iekβおよびoekβが鍵生成装置12の入力部121に入力され、記憶部123に格納されているものとする。
鍵ペア生成部124は、共通パラメータppを入力とし、アルゴリズムGenαを実行して、再暗号化前の暗号化鍵と復号鍵の組(iekα,idkα)および再暗号化後の暗号化鍵と復号鍵の組(oekα,odkα)を得て出力する。ただし、マルチホップ再暗号化方式の場合にはiekα=oekαとidkα=odkαを得ればよい。鍵ペア生成部124から出力された(iekα,idkα)および(oekα,odkα)は記憶部123に格納される(ステップS124)。復号鍵idkαおよびodkαはユーザαの秘密情報である。復号鍵idkαおよびodkαは出力部122から出力され、ユーザαが利用する復号装置16に安全に送られ、復号装置16に安全に格納される。一方、暗号化鍵iekαおよびoekαは公開情報であり、必要に応じて鍵生成装置12の出力部122から出力されてもよいし、各装置がアクセス可能な装置に格納されてもよい。
基本変換鍵生成部125、ランダム化鍵生成部126、および変換鍵合成部127は、アルゴリズムRekeyGenを実行して変換鍵RKα→βを生成する。基本変換鍵生成部125は、共通パラメータpp、復号鍵idkα(第1復号鍵)、および暗号化鍵oekβ(第2暗号化鍵)を入力とし、復号鍵idkαに対応する暗号化鍵iekαを用いて得られた第1暗号文を、暗号化鍵oekβに対応する復号鍵odkβで復号可能な第2暗号文に変換するための基本変換鍵rkα→β←RKG(pp,idkα,oekβ)を得て出力する(ステップS125)。
ランダム化鍵生成部126は、共通パラメータppおよび暗号化鍵oekB(第2暗号化鍵)を入力とし、(rppβ,rekβ)←RG(pp,oekβ)によって暗号化鍵oekβをランダム化してランダム化鍵(rppβ,rekβ)を得て出力する。このランダム化は、ランダム化鍵(rppβ,rekβ)を用いて任意値を暗号化して得られた暗号文が復号鍵odkβで復号可能なように行われる(ステップS126)。
変換鍵合成部127は、基本変換鍵rkα→βおよびランダム化鍵(rppβ,rekβ)を入力とし、これらを含む変換鍵RKα→β=(rkα→β,rppβ,rekβ)を出力する。変換鍵RKα→βは出力部122に送られ、出力部122は変換鍵RKα→βを再暗号化装置17に送る(ステップS127)。
≪暗号化装置14での暗号化処理≫
暗号化装置14は、PP=pp,iekα,平文μを入力とし、アルゴリズムEnciを実行してictα=E(pp,iekα,μ)を計算し、ictαを第1暗号文として出力する。
≪復号装置16での復号処理≫
復号装置16が再暗号化前の第1暗号文ictαを復号する処理を説明する。復号装置16に第1暗号文ictαが入力された場合、復号装置16はPP=pp,idkα(第1暗号文を復号するための第1復号鍵),第1暗号文ictαを用い、アルゴリズムDeciを実行してμ’=D(pp,idkα,ictα)を計算し、μ’を平文として出力する。
≪再暗号化装置17での再暗号化処理≫
図3および図4Bを用い、再暗号化装置17が第1暗号文ictαを再暗号化する処理を説明する。この再暗号化処理の前提として、上述の共通パラメータpp、第1暗号文ictα、および変換鍵RKα→β=(rkα→β,rppβ,rekβ)が再暗号化装置17の入力部171に入力され、記憶部173に格納されているものとする。
基本変換部174は、PP=pp,rkα→β(基本変換鍵),第1暗号文ictαを入力とし、変換アルゴリズムSwitchを実行してc’←Switch(pp,rkα→β,ictα)を計算し、c’を第2暗号文として出力する。なお、第2暗号文c’は準同型性を持つ(ステップS174)。
撹乱暗号化部175は、rppβ(ランダム化鍵),rekβ(ランダム化鍵)を入力とし、暗号化アルゴリズムEを実行してc’’←E(rppβ,rekβ,0)を計算し、c’’を0(第1値)の暗号文である撹乱暗号文として出力する。なお、撹乱暗号文c’’は準同型性を持つ(ステップS175)。
演算部176は、第2暗号文c’および撹乱暗号文c’’を入力とし、octβ←c’+c’’を計算し、octβを変形済暗号文として出力する。なお、任意の第2値と0(第1値)との加算を行って得られる値(第2値+0)は第2値に等しい(ステップS176)。
≪復号装置15での復号処理≫
復号装置15が再暗号化後の変形済暗号文octβを復号する処理を説明する。復号装置15に変形済暗号文octβが入力された場合、復号装置15はPP=pp,odkβ(第2暗号文を復号するための第2復号鍵),変形済暗号文octβを用い、アルゴリズムDecoを実行してμ’=D(pp,odkβ,octβ)を計算し、μ’を平文として出力する。
以下では、上記の実施形態のプロキシ再暗号化方式Π=(Setup,Gen,Enc1,Dec1,Enc2,Dec2,RekeyGen,ReEnc)を構成可能な再変換可能暗号方式π=(SU,G,E,D,RKG,Switch)を具体的に説明する。実施例1から8では、非対称暗号化方式として格子暗号方式を用いる例を説明し、実施例9および10ではNTRU暗号方式を用いる例を説明する。格子暗号方式もNTRU暗号方式も公開鍵暗号方式であり、かつ、準同型性暗号方式である。なお、再暗号化システムの構成およびその処理も再変換可能暗号方式πが具体化されることによってプロキシ再暗号化方式Πが具体化される以外、上述の実施形態と同じである。そのため、以下では再変換可能暗号方式πおよびプロキシ再暗号化方式Πの具体的な構成を中心に説明する。
実施例1では、上述の実施形態に参考文献1(Zvika Brakerski, Craig Gentry, and Vinod Vaikuntanathan. (leveled) fully homomorphic encryption without bootstrapping, in Shafi Goldwasser, editor, ITCS 2012, pages 309-325. ACM, 2012.)の方式を適用する例を示す。
<確定的アルゴリズムBD,P2の定義>
参考文献1に記載された確定的アルゴリズムBD,P2を以下のように定義する。
1以上の整数p,δ,q(例えば、素数)についてpδ−1≦q<pδを満たすとする。すなわち、qはp進δ桁の数として表現可能である。
BD:アルゴリズムBDは、ベクトルx∈Z
q nを入力にとり、k=1,・・・,δについて、ベクトルu
k∈Z
p nを
を満たすように計算し、(u
1,・・・,u
δ)∈Z
p nδを出力する。ただし、Z
pは整数p(例えばp≧2)を法とした整数の剰余類の集合である。Z
pの例はpを法とした整数の剰余類の代表元の集合である。例えば、Z
pは整数zに対するz mod pの集合、すなわちZ
p={0,・・・,p−1}である。また、nは1以上の整数であり、x∈Z
p nはxがZ
pのn個の元からなることを意味する。
P2:アルゴリズムP2は、ベクトルs∈Z
q nを入力にとり、
を出力する。ただし、
は行列のクロネッカー積であり、[・]
Tは[・]の転置を表す。アルゴリズムP2は、サイズn×gの行列S=[s
1,・・・,s
g]∈Z
q n×gを入力にとる場合に、サイズnδ×gの行列[P(s
1),・・・,P(s
g)]∈Z
q nδ×gを出力する。ただし、gは1以上の整数であり、S∈Z
q n×gはサイズn×gの行列Sの各要素がZ
qの元であることを表す。これらのアルゴリズムの定義より、任意のベクトルx∈Z
q nおよび行列S∈Z
q n×gについて、BD(x)P2(S)=xS∈Z
q gを満たす。
<再変換可能暗号方式>
本実施例の再変換可能暗号方式π=(SU,G,E,D,RKG,Switch)を説明する。SU,G,E,D,Switchは参考文献1に基づいている。
SU:共通パラメータ生成アルゴリズムSUは、κを入力にとり、行列A∈Z
q m×nをランダムに選び、共通パラメータpp=(κ,1
n,q,m,g,χ,A)を出力する(pp←SU(1
κ))。ただし、n,m,gは1以上の整数である。また、平均0、分散σ
2のガウス分布N(0,σ
2)は実数上の密度関数
で定義される。ν∈(0,1)および整数q≧1について、ガウス分布N(0,ν
2/2π)に従って得られるサンプルxに対し、
で表される分布をχとする。ただし、(0,1)は0より大きく1より小さな閉区間{ν|0<ν<1}を表し、
は実数ωの天井関数を表し、実数ωに対してω以上の最小の整数を意味する。
G:鍵生成アルゴリズムGは、ppを入力にとり、行列S∈Zq n×gをランダムに選び、サイズm×gの行列X∈Zq m×gを分布χm×gに従って選ぶ。すなわち、行列Xの各要素は分布χに従う。鍵生成アルゴリズムGは、B=AS+X∈Zq m×gを計算し、ek=Bおよびdk=(S,B)とし、暗号化鍵と復号鍵の組(ek,dk)を出力する((ek,dk)←G(pp))。
E:暗号化アルゴリズムEは、pp,ek=B∈Z
q m×g,平文μ∈Z
p gを入力にとり、m個の要素からなるベクトルe∈{−1,+1}
mをランダムに選び、
を計算し、暗号文c=(U,C)∈Z
q n×Z
q gを出力する(c=E(pp,ek,μ))。
D:復号アルゴリズムDは、pp,dk=(S,B),暗号文c=(U,C)を入力にとり、d=C−US mod qを計算し、
を計算し、平文μ’∈Z
p gを出力する(μ’←D(pp,dk,c))。なお、ベクトルψ=(ψ
1,・・・,ψ
I)とすると、ψ mod θは(ψ
1 mod θ,・・・,ψ
I mod θ)を意味する。
RKG:変換鍵生成アルゴリズムRKGは、pp,dkα=(Sα,Bα),ekβ=Bβを入力とする。ただし、dkα=(Sα,Bα)はユーザαに対して得られた復号鍵であり、ekβ=Bβはユーザβに対して得られた暗号化鍵である。何れの鍵も鍵生成アルゴリズムGによって得られたものである。変換鍵生成アルゴリズムRKGは、サイズnδ×mの行列Y∈{−1,+1}nδ×mをランダムに選び、Mα→β=Y[A|Bβ]+[O|−P2(Sα)]∈Zq nδ×(n+g)を計算し、基本変換鍵rkα→β=Mα→β∈Zq nδ×(n+g)を出力する(rkα→β←RKG(pp,dkα,ekβ))。ただし、行列A∈Zq m×nおよび行列Bβ∈Zq m×gに対する[A|Bβ]∈Zq m×(n+g)は、行列Aのn個の列の後に行列Bβのg個の列を連結したサイズm×(n+g)の行列である。また、Oはサイズnδ×mの零行列O∈Zq nδ×mであり、すべての要素が0からなる。
RG:ランダム化鍵生成アルゴリズムRGは、pp,ekβ=Bβを入力にとり、サイズm×mの行列Y’∈{−1,+1}m×mをランダムに選び、[Tβ|Nβ]=Y’[A|Bβ]∈Zq m×(n+g)を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Zq m×n×Zq m×gを出力する((rppβ,rekβ)←RG(pp,ekβ))。
Switch:変換アルゴリズムSwitchは、pp,rkα→β=Mα→β∈Zq nδ×(n+g),暗号文cα=(Uα,Cα)∈Zq n×Zq gを入力にとる。ただし、暗号文cα=(Uα,Cα)はユーザαの復号鍵dkα=(Sα,Bα)で復号可能な暗号文であり、暗号文cβはユーザβの復号鍵dkβ=(Sβ,Bβ)で復号可能な暗号文である。dkβは上述の暗号化鍵ekβ=Bβに対応する。変換アルゴリズムSwitchは、ベクトルUα∈Zq nを入力としたアルゴリズムBDを実行してベクトルBD(Uα)∈Zq nδを得、U’|C’=BD(Uα)Mα→β∈Zq n+gとする。ただし、U’∈Zq nかつC’∈Zq gであり、U’の後にC’を結合したベクトルがBD(Uα)Mα→βとなる。変換アルゴリズムSwitchは、さらに(Uβ,Cβ)=(U’,C’+Cα)を計算し、暗号文cβ=(Uβ,Cβ)∈Zq n×Zq gを出力する(cβ←Switch(pp,rkα→β,cα))。
<プロキシ再暗号化方式>
上記の再変換可能暗号方式πの場合、プロキシ再暗号化方式Πは以下のようになる。
Setup:アルゴリズムSetupは、κを入力としてpp←SU(1κ)を計算し、PP=pp=(κ,1n,q,m,g,χ,A)を出力する。
Geny:アルゴリズムGeny(ただし、y∈{α,β})は、ppを入力にとり、行列Sy∈Zq n×gをランダムに選び、サイズm×gの行列Xy∈Zq m×gを分布χm×gに従って選ぶ。アルゴリズムGenyは、By=ASy+Xy∈Zq m×gを計算し、ieky=oeky=Byおよびidky=odky=(Sy,By)とし、暗号化鍵と復号鍵の組(ieky=oeky,idky=odky)を出力する。
Enci:アルゴリズムEnciは、再暗号化前の暗号文を生成する。ユーザy∈{α,β}に対応する暗号文を生成する場合、アルゴリズムEnciは、PP=pp,iek
y=B
y,平文μを入力とし、m個の要素からなるベクトルe
y∈{−1,+1}
mをランダムに選び、
を計算し、c
y=(U
y,C
y)∈Z
q n×Z
q gを暗号文ict
yとして出力する。
Deci:アルゴリズムDeciは、再暗号化前の暗号文を復号する。ユーザy∈{α,β}に対応する暗号文を復号する場合、アルゴリズムDeciは、PP=pp,idk
y=(S
y,B
y),暗号文ict
y=c
y=(U
y,C
y)を入力とし、d
y=C
y−U
yS
y mod qを計算し、
を計算し、平文μ’∈Z
p gを出力する。
Enco:アルゴリズムEncoは、再暗号化後の暗号文を生成する。本実施例のアルゴリズムEncoはアルゴリズムEnciと同じである。
Deco:アルゴリズムDecoは、再暗号化後の暗号文を復号する。本実施例のアルゴリズムDecoは、アルゴリズムDeciと同じである。
RekeyGen:アルゴリズムRekeyGenは、PP=pp,idkα=(Sα,Bα)(第1復号鍵),oekβ=Bβ(第2暗号化鍵)を入力とし、サイズnδ×mの行列Y∈{−1,+1}nδ×mをランダムに選び、Mα→β=Y[A|Bβ]+[O|−P2(Sα)]∈Zq nδ×(n+g)を計算し、基本変換鍵rkα→β=Mα→β∈Zq nδ×(n+g)を得る。アルゴリズムRekeyGenは、サイズm×mの行列Y’∈{−1,+1}m×mをランダムに選び、[Tβ|Nβ]=Y’[A|Bβ]∈Zq m×(n+g)を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Zq m×n×Zq m×gを得る。アルゴリズムRekeyGenは、RKα→β=(rkα→β,rppβ,rekβ)を変換鍵として出力する。
ReEnc:アルゴリズムReEncは、PP=pp,RKα→β=(rkα→β=Mα→β,rppβ,rekβ),ictα=cα=(Uα,Cα)(第1暗号文)を入力とし、以下を計算する。
1)U’|C’=BD(Uα)Mα→β∈Zq n+gを得、(Uβ,Cβ)=(U’,C’+Cα)を得、暗号文c’=(Uβ,Cβ)=(U’,C’+Cα)∈Zq n×Zq gを得る。
2)rppβ=Tβ,rekβ=Nβ,平文とする零元を入力とし、m個の要素からなるベクトルeβ∈{−1,+1}mをランダムに選び、暗号文c’’=(eβTβ,eβNβ)を得る。
3)octβ=(U’,C’+Cα)+(eβTβ,eβNβ)=(U’+eβTβ,C’+Cα+eβNβ)を変換済暗号文として出力する。
実施例2は実施例1の変形例である。本実施例で特記しない限り、記号の定義は実施例1と同じである。
<確定的アルゴリズムBD,P2の定義>
実施例1と同じである。
<再変換可能暗号方式>
本実施例の再変換可能暗号方式π=(SU,G,E,D,RKG,Switch)を説明する。
SU:共通パラメータ生成アルゴリズムSUは、κを入力にとり、行列A∈Zq m×nをランダムに選び、共通パラメータpp=(κ,1n,q,m,g,χ,A)を出力する(pp←SU(1κ))。
G:鍵生成アルゴリズムGは、ppを入力にとり、行列S∈Zq n×gをランダムに選び、サイズm×gの行列X∈Zq m×gを分布χm×gに従って選ぶ。行列Xの各要素は分布χに従う。鍵生成アルゴリズムGは、B=AS+pX∈Zq m×gを計算し、ek=Bおよびdk=(S,B)とし、暗号化鍵と復号鍵の組(ek,dk)を出力する((ek,dk)←G(pp))。
E:暗号化アルゴリズムEは、pp,ek=B∈Zq m×g,平文μ∈Zp gを入力にとり、m個の要素からなるベクトルe∈{−1,+1}mをランダムに選び、c=(U,C)=(eA,eB+μ)を計算し、暗号文c=(U,C)∈Zq n×Zq gを出力する(c=E(pp,ek,μ))。
D:復号アルゴリズムDは、pp,dk=(S,B),暗号文c=(U,C)を入力にとり、d=C−US mod qを計算し、μ’=d mod pを計算し、平文μ’∈Zp gを出力する(μ’←D(pp,dk,c))。
RKG:変換鍵生成アルゴリズムRKGは、pp,dkα=(Sα,Bα),ekβ=Bβを入力とする。変換鍵生成アルゴリズムRKGは、サイズnδ×mの行列Y∈{−1,+1}nδ×mをランダムに選び、Mα→β←Y[A|Bβ]+[O|−P2(Sα)]∈Zq nδ×(n+g)を計算し、基本変換鍵rkα→β=Mα→β∈Zq nδ×(n+g)を出力する(rkα→β←RKG(pp,dkα,ekβ))。
RG:ランダム化鍵生成アルゴリズムRGは、pp,ekβ=Bβを入力にとり、サイズm×mの行列Y’∈{−1,+1}m×mをランダムに選び、[Tβ|Nβ]=Y’[A|Bβ]∈Zq m×(n+g)を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Zq m×n×Zq m×gを出力する((rppβ,rekβ)←RG(pp,ekβ))。
Switch:変換アルゴリズムSwitchは、pp,rkα→β=Mα→β∈Zq nδ×(n+g),暗号文cα=(Uα,Cα)∈Zq n×Zq gを入力にとる。ただし、暗号文cα=(Uα,Cα)はユーザαの復号鍵dkα=(Sα,Bα)で復号可能な暗号文であり、暗号文cβはユーザβの復号鍵dkβ=(Sβ,Bβ)で復号可能な暗号文である。dkβは上述の暗号化鍵ekβ=Bβに対応する。変換アルゴリズムSwitchは、ベクトルUα∈Zq nを入力としたアルゴリズムBDを実行してベクトルBD(Uα)∈Zq nδを得、U’|C’←BD(Uα)Mα→β∈Zq n+gとする。ただし、U’∈Zq nかつC’∈Zq gであり、U’の後にC’を結合したベクトルがBD(Uα)Mα→βとなる。変換アルゴリズムSwitchは、さらに(Uβ,Cβ)=(U’,C’+Cα)を計算し、暗号文cβ=(Uβ,Cβ)∈Zq n×Zq gを出力する(cβ←Switch(pp,rkα→β,cα))。
<プロキシ再暗号化方式>
上記の再変換可能暗号方式πの場合、プロキシ再暗号化方式Πは以下のようになる。
Setup:アルゴリズムSetupは、κを入力としてpp←SU(1κ)を計算し、PP=pp=(κ,1n,q,m,g,χ,A)を出力する。
Geny:アルゴリズムGeny(ただし、y∈{α,β})は、ppを入力にとり、行列Sy∈Zq n×gをランダムに選び、サイズm×gの行列Xy∈Zq m×gを分布χm×gに従って選ぶ。アルゴリズムGenyは、By=ASy+pXy∈Zq m×gを計算し、ieky=oeky=Byおよびidky=odky=(Sy,By)とし、暗号化鍵と復号鍵の組(ieky=oeky,idky=odky)を出力する。
Enci:アルゴリズムEnciは、再暗号化前の暗号文を生成する。ユーザy∈{α,β}に対応する暗号文を生成する場合、アルゴリズムEnciは、PP=pp,ieky=By,平文μを入力とし、m個の要素からなるベクトルey∈{−1,+1}mをランダムに選び、cy=(Uy,Cy)=(eyA,eyBy+μ)を計算し、cy=(Uy,Cy)∈Zq n×Zq gを暗号文ictyとして出力する。
Deci:アルゴリズムDeciは、再暗号化前の暗号文を復号する。ユーザy∈{α,β}に対応する暗号文を復号する場合、アルゴリズムDeciは、PP=pp,idky=(Sy,By),暗号文icty=cy=(Uy,Cy)を入力とし、dy=Cy−UySy mod qを計算し、μ’=dy mod pを計算し、平文μ’∈Zp gを出力する。
Enco:アルゴリズムEncoは、再暗号化後の暗号文を生成する。本実施例のアルゴリズムEncoはアルゴリズムEnciと同じである。
Deco:アルゴリズムDecoは、再暗号化後の暗号文を復号する。本実施例のアルゴリズムDecoは、アルゴリズムDeciと同じである。
RekeyGen:実施例1と同じである。
ReEnc:実施例1と同じである。
実施例3も実施例1の変形例である。本実施例で特記しない限り、記号の定義は実施例1と同じである。
<確定的アルゴリズムBD,P2の定義>
実施例1と同じである。
<再変換可能暗号方式>
本実施例の再変換可能暗号方式π=(SU,G,E,D,RKG,Switch)を説明する。
SU:共通パラメータ生成アルゴリズムSUは、κを入力にとり、行列A∈Zq n×nをランダムに選び、共通パラメータpp=(κ,1n,q,g,χ,A)を出力する(pp←SU(1κ))。
G:鍵生成アルゴリズムGは、ppを入力にとり、サイズn×gの行列S∈Zq n×gを分布χn×gに従って選び、サイズn×gの行列X∈Zq n×gを分布χn×gに従って選ぶ。鍵生成アルゴリズムGは、B=AS+X∈Zq n×gを計算し、ek=Bおよびdk=(S,B)とし、暗号化鍵と復号鍵の組(ek,dk)を出力する((ek,dk)←G(pp))。
E:暗号化アルゴリズムEは、pp,ek=B∈Z
q n×g,平文μ∈Z
p gを入力にとり、n個の要素からなるベクトルe
1,e
2∈Z
q nおよびg個の要素からなるベクトルe
3∈Z
q gの各要素を分布χに従って選び、
を計算し、暗号文c=(U,C)∈Z
q n×Z
q gを出力する(c=E(pp,ek,μ))。
D:復号アルゴリズムDは、pp,dk=(S,B),暗号文c=(U,C)を入力にとり、d=C−US mod qを計算し、
を計算し、平文μ’∈Z
p gを出力する(μ’←D(pp,dk,c))。
RKG:変換鍵生成アルゴリズムRKGは、pp,dkα=(Sα,Bα),ekβ=Bβを入力とする。変換鍵生成アルゴリズムRKGは、サイズnδ×nの行列Y1,Y2∈Zq nδ×nおよびサイズサイズnδ×gの行列Y3∈Zq nδ×gの各要素を分布χに従って選び、Mα→β=Y1[A|Bβ]+[Y2|Y3]+[O|−P2(Sα)]∈Zq nδ×(n+g)を計算し、基本変換鍵rkα→β=Mα→β∈Zq nδ×(n+g)を出力する(rkα→β←RKG(pp,dkα,ekβ))。
RG:ランダム化鍵生成アルゴリズムRGは、pp,ekβ=Bβを入力にとり、サイズn×nの行列Y1’,Y2’∈Zq n×nおよびサイズn×gの行列Y3’∈Zq n×gの各要素を分布χに従って選び、[Tβ|Nβ]=Y1’[A|Bβ]+[Y2’|Y3’]∈Zq n×(n+g)を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Zq n×n×Zq n×gを出力する((rppβ,rekβ)←RG(pp,ekβ))。
Switch:変換アルゴリズムSwitchは、pp,rkα→β=Mα→β∈Zq nδ×(n+g),暗号文cα=(Uα,Cα)∈Zq n×Zq gを入力にとる。ただし、暗号文cα=(Uα,Cα)はユーザαの復号鍵dkα=(Sα,Bα)で復号可能な暗号文であり、暗号文cβはユーザβの復号鍵dkβ=(Sβ,Bβ)で復号可能な暗号文である。dkβは上述の暗号化鍵ekβ=Bβに対応する。変換アルゴリズムSwitchは、ベクトルUα∈Zq nを入力としたアルゴリズムBDを実行してベクトルBD(Uα)∈Zq nδを得、U’|C’=BD(Uα)Mα→β∈Zq n+gとする。ただし、U’∈Zq nかつC’∈Zq gであり、U’の後にC’を結合したベクトルがBD(Uα)Mα→βとなる。変換アルゴリズムSwitchは、さらに(Uβ,Cβ)=(U’,C’+Cα)を計算し、暗号文cβ=(Uβ,Cβ)∈Zq n×Zq gを出力する(cβ←Switch(pp,rkα→β,cα))。
<プロキシ再暗号化方式>
上記の再変換可能暗号方式πの場合、プロキシ再暗号化方式Πは以下のようになる。
Setup:アルゴリズムSetupは、κを入力としてpp←SU(1κ)を計算し、PP=pp=(κ,1n,q,g,χ,A)を出力する。
Geny:アルゴリズムGeny(ただし、y∈{α,β})は、ppを入力にとり、サイズn×gの行列Sy∈Zq n×gを分布χn×gに従って選び、サイズn×gの行列Xy∈Zq n×gを分布χn×gに従って選ぶ。アルゴリズムGenyは、By=ASy+Xy∈Zq n×gを計算し、ieky=oeky=Byおよびidky=odky=(Sy,By)とし、暗号化鍵と復号鍵の組(ieky=oeky,idky=odky)を出力する。
Enci:アルゴリズムEnciは、再暗号化前の暗号文を生成する。ユーザy∈{α,β}に対応する暗号文を生成する場合、アルゴリズムEnciは、PP=pp,iek
y=B
y,平文μを入力とし、n個の要素からなるベクトル
ye
1,
ye
2∈Z
q nおよびg個の要素からなるベクトル
ye
3∈Z
q gの各要素を分布χに従って選び、
を計算し、c
y=(U
y,C
y)∈Z
q n×Z
q gを暗号文ict
yとして出力する。
Deci:アルゴリズムDeciは、再暗号化前の暗号文を復号する。ユーザy∈{α,β}に対応する暗号文を復号する場合、アルゴリズムDeciは、PP=pp,idk
y=(S
y,B
y),暗号文ict
y=c
y=(U
y,C
y)を入力とし、d
y=C
y−U
yS
y mod qを計算し、
を計算し、平文μ’∈Z
p gを出力する。
Enco:アルゴリズムEncoは、再暗号化後の暗号文を生成する。本実施例のアルゴリズムEncoはアルゴリズムEnciと同じである。
Deco:アルゴリズムDecoは、再暗号化後の暗号文を復号する。本実施例のアルゴリズムDecoは、アルゴリズムDeciと同じである。
RekeyGen:アルゴリズムRekeyGenは、PP=pp,idkα=(Sα,Bα)(第1復号鍵),oekβ=Bβ(第2暗号化鍵)を入力とし、サイズnδ×nの行列Y1,Y2∈Zq nδ×nおよびサイズサイズnδ×gの行列Y3∈Zq nδ×gの各要素を分布χに従って選び、Mα→β=Y1[A|Bβ]+[Y2|Y3]+[O|−P2(Sα)]∈Zq nδ×(n+g)を計算し、基本変換鍵rkα→β=Mα→β∈Zq nδ×(n+g)を得る。アルゴリズムRekeyGenは、サイズn×nの行列Y1’,Y2’∈Zq n×nおよびサイズn×gの行列Y3’∈Zq n×gの各要素を分布χに従って選び、[Tβ|Nβ]=Y1’[A|Bβ]+[Y2’|Y3’]∈Zq n×(n+g)を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Zq n×n×Zq n×gを得る。アルゴリズムRekeyGenは、RKα→β=(rkα→β,rppβ,rekβ)を変換鍵として出力する。
ReEnc:アルゴリズムReEncは、PP=pp,RKα→β=(rkα→β=Mα→β,rppβ,rekβ),ictα=cα=(Uα,Cα)(第1暗号文)を入力とし、以下を計算する。
1)U’|C’=BD(Uα)Mα→β∈Zq n+gを得、(Uβ,Cβ)=(U’,C’+Cα)を得、暗号文c’=(Uβ,Cβ)=(U’,C’+Cα)∈Zq n×Zq gを得る。
2)rppβ=Tβ,rekβ=Nβ,平文とする零元を入力とし、n個の要素からなるベクトルe1,e2∈Zq nおよびg個の要素からなるベクトルe3∈Zq gの各要素を分布χに従って選び、c’’=(e1Tβ+e2,e1Nβ+e3)を得る。
3)octβ=(U’,C’+Cα)+(e1Tβ+e2,e1Nβ+e3)=(U’+e1Tβ+e2,C’+Cα+e1Nβ+e3)を変換済暗号文として出力する。
実施例4は実施例3の変形例である。本実施例で特記しない限り、記号の定義は実施例1と同じである。
<確定的アルゴリズムBD,P2の定義>
実施例1と同じである。
<再変換可能暗号方式>
本実施例の再変換可能暗号方式π=(SU,G,E,D,RKG,Switch)を説明する。
SU:共通パラメータ生成アルゴリズムSUは、κを入力にとり、行列A∈Zq n×nをランダムに選び、共通パラメータpp=(κ,1n,q,g,χ,A)を出力する(pp←SU(1κ))。
G:鍵生成アルゴリズムGは、ppを入力にとり、サイズn×gの行列Sy∈Zq n×gを分布χn×gに従って選び、行列S∈Zq n×gを分布χn×gに従って選ぶ。鍵生成アルゴリズムGは、B=AS+pX∈Zq n×gを計算し、ek=Bおよびdk=(S,B)とし、暗号化鍵と復号鍵の組(ek,dk)を出力する((ek,dk)←G(pp))。
E:暗号化アルゴリズムEは、pp,ek=B∈Zq n×g,平文μ∈Zp gを入力にとり、n個の要素からなるベクトルe1,e2∈Zq nおよびg個の要素からなるベクトルe3∈Zq gの各要素を分布χに従って選び、c=(U,C)=(e1A+pe2,e1B+e3+μ)を計算し、暗号文c=(U,C)∈Zq n×Zq gを出力する(c=E(pp,ek,μ))。
D:復号アルゴリズムDは、pp,dk=(S,B),暗号文c=(U,C)を入力にとり、d=C−US mod qを計算し、μ’=d mod pを計算し、平文μ’∈Zp gを出力する(μ’←D(pp,dk,c))。
RKG:変換鍵生成アルゴリズムRKGは、pp,dkα=(Sα,Bα),ekβ=Bβを入力とする。変換鍵生成アルゴリズムRKGは、サイズnδ×nの行列Y1,Y2∈Zq nδ×nおよびサイズサイズnδ×gの行列Y3∈Zq nδ×gの各要素を分布χに従って選び、Mα→β=Y1[A|Bβ]+p[Y2|Y3]+[O|−P2(Sα)]∈Zq nδ×(n+g)を計算し、基本変換鍵rkα→β=Mα→β∈Zq nδ×(n+g)を出力する(rkα→β←RKG(pp,dkα,ekβ))。
RG:ランダム化鍵生成アルゴリズムRGは、pp,ekβ=Bβを入力にとり、サイズn×nの行列Y1’,Y2’∈Zq n×nおよびサイズn×gの行列Y3’∈Zq n×gの各要素を分布χに従って選び、[Tβ|Nβ]=Y1’[A|Bβ]+p[Y2’|Y3’]∈Zq n×(n+g)を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Zq n×n×Zq n×gを出力する((rppβ,rekβ)←RG(pp,ekβ))。
Switch:変換アルゴリズムSwitchは、pp,rkα→β=Mα→β∈Zq nδ×(n+g),暗号文cα=(Uα,Cα)∈Zq n×Zq gを入力にとる。ただし、暗号文cα=(Uα,Cα)はユーザαの復号鍵dkα=(Sα,Bα)で復号可能な暗号文であり、暗号文cβはユーザβの復号鍵dkβ=(Sβ,Bβ)で復号可能な暗号文である。dkβは上述の暗号化鍵ekβ=Bβに対応する。変換アルゴリズムSwitchは、ベクトルUα∈Zq nを入力としたアルゴリズムBDを実行してベクトルBD(Uα)∈Zq nδを得、U’|C’=BD(Uα)Mα→β∈Zq n+gとする。変換アルゴリズムSwitchは、さらに(Uβ,Cβ)=(U’,C’+Cα)を計算し、暗号文cβ=(Uβ,Cβ)∈Zq n×Zq gを出力する(cβ←Switch(pp,rkα→β,cα))。
<プロキシ再暗号化方式>
上記の再変換可能暗号方式πの場合、プロキシ再暗号化方式Πは以下のようになる。
Setup:アルゴリズムSetupは、κを入力としてpp←SU(1κ)を計算し、PP=pp=(κ,1n,q,g,χ,A)を出力する。
Geny:アルゴリズムGeny(ただし、y∈{α,β})は、ppを入力にとり、サイズn×gの行列Sy∈Zq n×gを分布χn×gに従って選び、サイズn×gの行列Xy∈Zq n×gを分布χn×gに従って選ぶ。アルゴリズムGenyは、By=ASy+pXy∈Zq n×gを計算し、ieky=oeky=Byおよびidky=odky=(Sy,By)とし、暗号化鍵と復号鍵の組(ieky=oeky,idky=odky)を出力する。
Enci:アルゴリズムEnciは、再暗号化前の暗号文を生成する。ユーザy∈{α,β}に対応する暗号文を生成する場合、アルゴリズムEnciは、PP=pp,ieky=By,平文μを入力とし、n個の要素からなるベクトルye1,ye2∈Zq nおよびg個の要素からなるベクトルye3∈Zq gの各要素を分布χに従って選び、cy=(Uy,Cy)=(ye1A+p ye2,ye1 By+ye3+μ)を計算し、cy=(Uy,Cy)∈Zq n×Zq gを暗号文ictyとして出力する。
Deci:アルゴリズムDeciは、再暗号化前の暗号文を復号する。ユーザy∈{α,β}に対応する暗号文を復号する場合、アルゴリズムDeciは、PP=pp,idky=(Sy,By),暗号文icty=cy=(Uy,Cy)を入力とし、dy=Cy−UySy mod qを計算し、μ’=dy mod pを計算し、平文μ’∈Zp gを出力する。
Enco:アルゴリズムEncoは、再暗号化後の暗号文を生成する。本実施例のアルゴリズムEncoはアルゴリズムEnciと同じである。
Deco:アルゴリズムDecoは、再暗号化後の暗号文を復号する。本実施例のアルゴリズムDecoは、アルゴリズムDeciと同じである。
RekeyGen:アルゴリズムRekeyGenは、PP=pp,idkα=(Sα,Bα)(第1復号鍵),oekβ=Bβ(第2暗号化鍵)を入力とし、サイズnδ×nの行列Y1,Y2∈Zq nδ×nおよびサイズサイズnδ×gの行列Y3∈Zq nδ×gの各要素を分布χに従って選び、Mα→β=Y1[A|Bβ]+p[Y2|Y3]+[O|−P2(Sα)]∈Zq nδ×(n+g)を計算し、基本変換鍵rkα→β=Mα→β∈Zq nδ×(n+g)を得る。アルゴリズムRekeyGenは、サイズn×nの行列Y1’,Y2’∈Zq n×nおよびサイズn×gの行列Y3’∈Zq n×gの各要素を分布χに従って選び、[Tβ|Nβ]=Y1’[A|Bβ]+p[Y2’|Y3’]∈Zq n×(n+g)を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Zq n×n×Zq n×gを得る。アルゴリズムRekeyGenは、RKα→β=(rkα→β,rppβ,rekβ)を変換鍵として出力する。
ReEnc:アルゴリズムReEncは、PP=pp,RKα→β=(rkα→β=Mα→β,rppβ,rekβ),ictα=cα=(Uα,Cα)(第1暗号文)を入力とし、以下を計算する。
1)U’|C’=BD(Uα)Mα→β∈Zq n+gを得、(Uβ,Cβ)=(U’,C’+Cα)を得、暗号文c’=(Uβ,Cβ)=(U’,C’+Cα)∈Zq n×Zq gを得る。
2)rppβ=Tβ,rekβ=Nβ,平文とする零元を入力とし、n個の要素からなるベクトルe1,e2∈Zq nおよびg個の要素からなるベクトルe3∈Zq gの各要素を分布χに従って選び、c’’=(e1Tβ+pe2,e1Nβ+e3)を得る。
3)octβ=(U’,C’+Cα)+(e1Tβ+pe2,e1Nβ+e3)=(U’+e1Tβ+pe2,C’+Cα+e1Nβ+e3)を変換済暗号文として出力する。
実施例5では、実施例1と同様な構成を多項式環上で実現する。
<確定的アルゴリズムBD,P2の定義>
参考文献1に記載された確定的アルゴリズムBD,P2を以下のように定義する。
k(κ)を整数関数とし、n(κ)=2k(κ)とする。f(x)=xn+1とする。ただし、nは1以上の整数である。q(κ)を整数関数とし、q=q(κ)を素数とする。環R=Z[x]/(f(x))とし、Rq=R/qRとする。1以上の整数p,δについてpδ−1≦q<pδを満たすとする。
BD:アルゴリズムBDは、x∈R
qを入力にとり、k=1,・・・,δについて、u
k∈R
pを
を満たすように計算し、(u
1,・・・,u
δ)∈R
p δを出力する。(u
1,・・・,u
δ)∈R
p δは(u
1,・・・,u
δ)がδ個の環Rの元からなるとを意味する。
P2:アルゴリズムP2は、s∈R
qを入力にとり、
を出力する。これらのアルゴリズムの定義より、任意のx,s∈R
qについて、BD(x)P2(s)=xs∈R
qを満たす。
<再変換可能暗号方式>
本実施例の再変換可能暗号方式π=(SU,G,E,D,RKG,Switch)を説明する。SU,G,E,Dは参考文献1や参考文献2(Vadim Lyubashevsky, Chris Peikert, and Oded Regev, On ideal lattices and learning with errors over rings, in Henri Gilbert, editor, EUROCRYPT 2010, volume 6110 of LNCS, pages 1-23, Springer, Heidelberg, 2010.)に基づいている。Switchは参考文献1に基づいている。
SU:共通パラメータ生成アルゴリズムSUは、κを入力にとり、行列A∈Rq m×1をランダムに選び、共通パラメータpp=(κ,1n,q,m,g,χ,A)を出力する(pp←SU(1κ))。ただし、n,m,gは1以上の整数である。分布χおよび天井関数の定義は実施例1と同じである。
G:鍵生成アルゴリズムGは、ppを入力にとり、s∈Rqをランダムに選び、サイズm×1の行列X∈Rq m×1を分布χm×1に従って選ぶ。すなわち、行列Xの各要素は分布χに従う。鍵生成アルゴリズムGは、B=As+X∈Rq m×1を計算し、ek=Bおよびdk=(s,B)とし、暗号化鍵と復号鍵の組(ek,dk)を出力する((ek,dk)←G(pp))。
E:暗号化アルゴリズムEは、pp,ek=B∈R
q m×1,平文μ∈R
pを入力にとり、m個の要素からなるe∈R
q mをランダムに選び、
を計算し、暗号文c=(U,C)∈R
q×R
qを出力する(c=E(pp,ek,μ))。
D:復号アルゴリズムDは、pp,dk=(s,B),暗号文c=(U,C)を入力にとり、d=C−Us mod qを計算し、
を計算し、平文μ’∈R
pを出力する(μ’←D(pp,dk,c))。
RKG:変換鍵生成アルゴリズムRKGは、pp,dkα=(sα,Bα),ekβ=Bβを入力とする。ただし、dkα=(sα,Bα)はユーザαに対して得られた復号鍵であり、ekβ=Bβはユーザβに対して得られた暗号化鍵である。何れの鍵も鍵生成アルゴリズムGによって得られたものである。変換鍵生成アルゴリズムRKGは、サイズδ×mの行列Y∈R2 δ×mをランダムに選び、Mα→β=Y[A|Bβ]+[O|−P2(sα)]∈Rq δ×2を計算し、基本変換鍵rkα→β=Mα→β∈Rq δ×2を出力する(rkα→β←RKG(pp,dkα,ekβ))。ただし、行列A∈Rq m×1および行列Bβ∈Rq m×1に対する[A|Bβ]∈Rq m×2は、行列Aの1個の列の後に行列Bβの1個の列を連結したサイズm×2の行列である。また、Oはδ個の零要素からなる列O∈Rq δであり、すべての要素がRqの0からなる。
RG:ランダム化鍵生成アルゴリズムRGは、pp,ekβ=Bβを入力にとり、サイズm×mの行列Y’∈R2 m×mをランダムに選び、[Tβ|Nβ]=Y’[A|Bβ]∈Rq m×2を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Rq m×1×Rq m×1を出力する((rppβ,rekβ)←RG(pp,ekβ))。
Switch:変換アルゴリズムSwitchは、pp,rkα→β=Mα→β∈Rq δ×2,暗号文cα=(Uα,Cα)∈Rq×Rqを入力にとる。ただし、暗号文cα=(Uα,Cα)はユーザαの復号鍵dkα=(sα,Bα)で復号可能な暗号文であり、暗号文cβはユーザβの復号鍵dkβ=(sβ,Bβ)で復号可能な暗号文である。dkβは上述の暗号化鍵ekβ=Bβに対応する。変換アルゴリズムSwitchは、Uα∈Rqを入力としたアルゴリズムBDを実行してBD(Uα)∈Rq δを得、(U’,C’)=BD(Uα)Mα→β∈Rq×Rqとする。変換アルゴリズムSwitchは、さらに(Uβ,Cβ)=(U’,C’+Cα)を計算し、暗号文cβ=(Uβ,Cβ)∈Rq×Rqを出力する(cβ←Switch(pp,rkα→β,cα))。
<プロキシ再暗号化方式>
上記の再変換可能暗号方式πの場合、プロキシ再暗号化方式Πは以下のようになる。
Setup:アルゴリズムSetupは、κを入力としてpp←SU(1κ)を計算し、PP=pp=(κ,1n,q,m,g,χ,A)を出力する。
Geny:アルゴリズムGeny(ただし、y∈{α,β})は、ppを入力にとり、sy∈Rqをランダムに選び、サイズm×1の行列Xy∈Rq m×1を分布χm×1に従って選ぶ。アルゴリズムGenyは、By=Asy+Xy∈Rq m×1を計算し、ieky=oeky=Byおよびidky=odky=(sy,By)とし、暗号化鍵と復号鍵の組(ieky=oeky,idky=odky)を出力する。
Enci:アルゴリズムEnciは、再暗号化前の暗号文を生成する。ユーザy∈{α,β}に対応する暗号文を生成する場合、アルゴリズムEnciは、PP=pp,iek
y=B
y,平文μ∈R
pを入力とし、m個の要素からなるe
y∈R
q mをランダムに選び、
を計算し、c
y=(U
y,C
y)∈R
q×R
qを暗号文ict
yとして出力する。
Deci:アルゴリズムDeciは、再暗号化前の暗号文を復号する。ユーザy∈{α,β}に対応する暗号文を復号する場合、アルゴリズムDeciは、PP=pp,idk
y=(s
y,B
y),暗号文ict
y=c
y=(U
y,C
y)を入力とし、d
y=C
y−U
ys
y mod qを計算し、
を計算し、平文μ’∈R
pを出力する。
Enco:アルゴリズムEncoは、再暗号化後の暗号文を生成する。本実施例のアルゴリズムEncoはアルゴリズムEnciと同じである。
Deco:アルゴリズムDecoは、再暗号化後の暗号文を復号する。本実施例のアルゴリズムDecoは、アルゴリズムDeciと同じである。
RekeyGen:アルゴリズムRekeyGenは、PP=pp,idkα=(sα,Bα)(第1復号鍵),oekβ=Bβ(第2暗号化鍵)を入力とし、サイズδ×mの行列Y∈R2 δ×mをランダムに選び、Mα→β=Y[A|Bβ]+[O|−P2(sα)]∈Rq δ×2を計算し、基本変換鍵rkα→β=Mα→β∈Rq δ×2を得る。アルゴリズムRekeyGenは、サイズm×mの行列Y’∈R2 m×mをランダムに選び、(Tβ,Nβ)=Y’[A|Bβ]∈Rq m×1×Rq m×1を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Rq m×1×Rq m×1を得る。アルゴリズムRekeyGenは、RKα→β=(rkα→β,rppβ,rekβ)を変換鍵として出力する。
ReEnc:アルゴリズムReEncは、PP=pp,RKα→β=(rkα→β=Mα→β,rppβ,rekβ),ictα=cα=(Uα,Cα)(第1暗号文)を入力とし、以下を計算する。
1)(U’,C’)=BD(Uα)Mα→β∈Rq×Rqを得、(Uβ,Cβ)=(U’,C’+Cα)を得、暗号文c’=(Uβ,Cβ)=(U’,C’+Cα)∈Rq×Rqを得る。
2)rppβ=Tβ,rekβ=Nβ,平文とする零元を入力とし、m個の要素からなるeβ∈Rq mをランダムに選び、暗号文c’’=(eβTβ,eβNβ)∈Rq×Rqを得る。
3)octβ=(U’,C’+Cα)+(eβTβ,eβNβ)=(U’+eβTβ,C’+Cα+eβNβ)∈Rq×Rqを変換済暗号文として出力する。
実施例6は実施例5の変形例である。本実施例で特記しない限り、記号の定義は実施例5と同じである。
<確定的アルゴリズムBD,P2の定義>
実施例5と同じである。
<再変換可能暗号方式>
本実施例の再変換可能暗号方式π=(SU,G,E,D,RKG,Switch)を説明する。
SU:共通パラメータ生成アルゴリズムSUは、κを入力にとり、行列A∈Rq m×1をランダムに選び、共通パラメータpp=(κ,1n,q,m,g,χ,A)を出力する(pp←SU(1κ))。
G:鍵生成アルゴリズムGは、ppを入力にとり、s∈Rqをランダムに選び、サイズm×1の行列X∈Rq m×1を分布χm×1に従って選ぶ。鍵生成アルゴリズムGは、B=As+pX∈Rq m×1を計算し、ek=Bおよびdk=(s,B)とし、暗号化鍵と復号鍵の組(ek,dk)を出力する((ek,dk)←G(pp))。
E:暗号化アルゴリズムEは、pp,ek=B∈Rq m×1,平文μ∈Rpを入力にとり、m個の要素からなるe∈Rq mをランダムに選び、c=(U,C)=(eA,eB+μ)を計算し、暗号文c=(U,C)∈Rq×Rqを出力する(c=E(pp,ek,μ))。
D:復号アルゴリズムDは、pp,dk=(s,B),暗号文c=(U,C)を入力にとり、d=C−Us mod qを計算し、μ’=d mod pを計算し、平文μ’∈Rpを出力する(μ’←D(pp,dk,c))。
RKG:変換鍵生成アルゴリズムRKGは、pp,dkα=(sα,Bα),ekβ=Bβを入力とする。変換鍵生成アルゴリズムRKGは、サイズδ×mの行列Y∈R2 δ×mをランダムに選び、Mα→β=Y[A|Bβ]+[O|−P2(sα)]∈Rq δ×2を計算し、基本変換鍵rkα→β=Mα→β∈Rq δ×2を出力する(rkα→β←RKG(pp,dkα,ekβ))。
RG:ランダム化鍵生成アルゴリズムRGは、pp,ekβ=Bβを入力にとり、サイズm×mの行列Y’∈R2 m×mをランダムに選び、[Tβ|Nβ]=Y’[A|Bβ]∈Rq m×2を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Rq m×1×Rq m×1を出力する((rppβ,rekβ)←RG(pp,ekβ))。
Switch:変換アルゴリズムSwitchは、pp,rkα→β=Mα→β∈Rq δ×2,暗号文cα=(Uα,Cα)∈Rq×Rqを入力にとる。ただし、暗号文cα=(Uα,Cα)はユーザαの復号鍵dkα=(sα,Bα)で復号可能な暗号文であり、暗号文cβはユーザβの復号鍵dkβ=(sβ,Bβ)で復号可能な暗号文である。dkβは上述の暗号化鍵ekβ=Bβに対応する。変換アルゴリズムSwitchは、Uα∈Rqを入力としたアルゴリズムBDを実行してBD(Uα)∈Rq δを得、(U’,C’)=BD(Uα)Mα→β∈Rq×Rqとする。変換アルゴリズムSwitchは、さらに(Uβ,Cβ)=(U’,C’+Cα)を計算し、暗号文cβ=(Uβ,Cβ)∈Rq×Rqを出力する(cβ←Switch(pp,rkα→β,cα))。
<プロキシ再暗号化方式>
上記の再変換可能暗号方式πの場合、プロキシ再暗号化方式Πは以下のようになる。
Setup:アルゴリズムSetupは、κを入力としてpp←SU(1κ)を計算し、PP=pp=(κ,1n,q,m,g,χ,A)を出力する。
Geny:アルゴリズムGeny(ただし、y∈{α,β})は、ppを入力にとり、sy∈Rqをランダムに選び、サイズm×1の行列Xy∈Rq m×1を分布χm×1に従って選ぶ。アルゴリズムGenyは、By=Asy+pXy∈Rq m×1を計算し、ieky=oeky=Byおよびidky=odky=(sy,By)とし、暗号化鍵と復号鍵の組(ieky=oeky,idky=odky)を出力する。
Enci:アルゴリズムEnciは、再暗号化前の暗号文を生成する。ユーザy∈{α,β}に対応する暗号文を生成する場合、アルゴリズムEnciは、PP=pp,ieky=By,平文μを入力とし、m個の要素からなるey∈Rq mをランダムに選び、cy=(Uy,Cy)=(eyA,eyBy+μ)を計算し、cy=(Uy,Cy)∈Rq×Rqを暗号文ictyとして出力する。
Deci:アルゴリズムDeciは、再暗号化前の暗号文を復号する。ユーザy∈{α,β}に対応する暗号文を復号する場合、アルゴリズムDeciは、PP=pp,idky=(sy,By),暗号文icty=cy=(Uy,Cy)を入力とし、dy=Cy−Uysy mod qを計算し、μ’=dy mod pを計算し、平文μ’∈Rpを出力する。
Enco:アルゴリズムEncoは、再暗号化後の暗号文を生成する。本実施例のアルゴリズムEncoはアルゴリズムEnciと同じである。
Deco:アルゴリズムDecoは、再暗号化後の暗号文を復号する。本実施例のアルゴリズムDecoは、アルゴリズムDeciと同じである。
RekeyGen:実施例5と同じである。
ReEnc:実施例5と同じである。
実施例7のSU,G,E,Dは、参考文献2に基づき、Switchは参考文献3(Zvika Brakerski and Vinod Vaikuntanathan, Fully homomorphic encryption from ring-LWE and security for key dependent messages, in Phillip Rogaway, editor, CRYPTO 2011, volume 6841 of LNCS, pages 505-524, Springer, Heidelberg, 2011.)に基づく。本実施例で特記しない限り、記号の定義は実施例5と同じである。
<確定的アルゴリズムBD,P2の定義>
実施例5と同じである。
<再変換可能暗号方式>
SU:共通パラメータ生成アルゴリズムSUは、κを入力にとり、a∈Rqをランダムに選び、共通パラメータpp=(κ,n,q,χ,a)を出力する(pp←SU(1κ))。
G:鍵生成アルゴリズムGは、ppを入力にとり、s,x∈Rqを分布χに従って選ぶ。鍵生成アルゴリズムGは、b=as+x∈Rqを計算し、ek=bおよびdk=(s,b)とし、暗号化鍵と復号鍵の組(ek,dk)を出力する((ek,dk)←G(pp))。
E:暗号化アルゴリズムEは、pp,ek=b∈R
q,平文μ∈R
pを入力にとり、e
1,e
2,e
3∈R
qを分布χに従って選び、
を計算し、暗号文c=(U,C)∈R
q×R
qを出力する(c=E(pp,ek,μ))。
D:復号アルゴリズムDは、pp,dk=(s,b),暗号文c=(U,C)を入力にとり、d=C−Us mod qを計算し、
を計算し、平文μ’∈R
pを出力する(μ’←D(pp,dk,c))。
RKG:変換鍵生成アルゴリズムRKGは、pp,dkα=(sα,bα),ekβ=bβを入力とする。変換鍵生成アルゴリズムRKGは、Y1,Y2,Y3∈Rq 1×δを分布χ1×δに従って選び、Mα→β=Y1[a|bβ]+[Y2|Y3]+[O|−P2(sα)]∈Rq 2×δを計算し、基本変換鍵rkα→β=Mα→β∈Rq 2×δを出力する(rkα→β←RKG(pp,dkα,ekβ))。
RG:ランダム化鍵生成アルゴリズムRGは、pp,ekβ=bβを入力にとり、Y1’,Y2’,Y3’∈Rqを分布χに従って選び、(Tβ,Nβ)=Y1’[a|bβ]+[Y2’|Y3’]∈Rq 2を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Rq×Rqを出力する((rppβ,rekβ)←RG(pp,ekβ))。
Switch:変換アルゴリズムSwitchは、pp,rkα→β=Mα→β∈Rq δ×2,暗号文cα=(Uα,Cα)∈Rq×Rqを入力にとる。ただし、暗号文cα=(Uα,Cα)はユーザαの復号鍵dkα=(sα,bα)で復号可能な暗号文であり、暗号文cβはユーザβの復号鍵dkβ=(sβ,bβ)で復号可能な暗号文である。dkβは上述の暗号化鍵ekβ=bβに対応する。変換アルゴリズムSwitchは、Uα∈Rqを入力としたアルゴリズムBDを実行してBD(Uα)∈Rq δを得、(U’,C’)=BD(Uα)Mα→β∈Rq×Rqとする。変換アルゴリズムSwitchは、さらに(Uβ,Cβ)=(U’,C’+Cα)を計算し、暗号文cβ=(Uβ,Cβ)∈Rq×Rqを出力する(cβ←Switch(pp,rkα→β,cα))。
<プロキシ再暗号化方式>
上記の再変換可能暗号方式πの場合、プロキシ再暗号化方式Πは以下のようになる。
Setup:アルゴリズムSetupは、κを入力としてpp←SU(1κ)を計算し、PP=pp=(κ,n,q,χ,a)を出力する。
Geny:アルゴリズムGeny(ただし、y∈{α,β})は、ppを入力にとり、sy,xy∈Rqを分布χに従って選ぶ。アルゴリズムGenyは、by=asy+xy∈Rqを計算し、ieky=oeky=byおよびidky=odky=(sy,by)とし、暗号化鍵と復号鍵の組(ieky=oeky,idky=odky)を出力する。
Enci:アルゴリズムEnciは、再暗号化前の暗号文を生成する。ユーザy∈{α,β}に対応する暗号文を生成する場合、アルゴリズムEnciは、PP=pp,iek
y=b
y,平文μを入力とし、
ye
1,
ye
2,
ye
3∈R
qをランダムに選び、
を計算し、c
y=(U
y,C
y)∈R
q×R
qを暗号文ict
yとして出力する。
Deci:アルゴリズムDeciは、再暗号化前の暗号文を復号する。ユーザy∈{α,β}に対応する暗号文を復号する場合、アルゴリズムDeciは、PP=pp,idk
y=(s
y,b
y),暗号文ict
y=c
y=(U
y,C
y)を入力とし、d
y=C
y−U
ys
y mod qを計算し、
を計算し、平文μ’∈R
pを出力する。
Enco:アルゴリズムEncoは、再暗号化後の暗号文を生成する。本実施例のアルゴリズムEncoはアルゴリズムEnciと同じである。
Deco:アルゴリズムDecoは、再暗号化後の暗号文を復号する。本実施例のアルゴリズムDecoは、アルゴリズムDeciと同じである。
RekeyGen:アルゴリズムRekeyGenは、PP=pp,idkα=(sα,bα)(第1復号鍵),oekβ=bβ(第2暗号化鍵)を入力とし、Y1,Y2,Y3∈Rq 1×δを分布χ1×δに従って選び、Mα→β=Y1[a|bβ]+[Y2|Y3]+[O|−P2(sα)]∈Rq 2×δを計算し、基本変換鍵rkα→β=Mα→β∈Rq 2×δを得る。アルゴリズムRekeyGenは、Y1’,Y2’,Y3’∈Rqを分布χに従って選び、(Tβ,Nβ)=Y1’[a|bβ]+[Y2’|Y3’]∈Rq 2を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Rq m×Rq mを得る。アルゴリズムRekeyGenは、RKα→β=(rkα→β,rppβ,rekβ)を変換鍵として出力する。
ReEnc:アルゴリズムReEncは、PP=pp,RKα→β=(rkα→β=Mα→β,rppβ,rekβ),ictα=cα=(Uα,Cα)(第1暗号文)を入力とし、以下を計算する。
1)(U’,C’)=BD(Uα)Mα→β∈Rq×Rqを得、(Uβ,Cβ)=(U’,C’+Cα)を得、暗号文c’=(Uβ,Cβ)=(U’,C’+Cα)∈Rq×Rqを得る。
2)rppβ=Tβ,rekβ=Nβ,平文とする零元を入力とし、βe1,βe2,βe3∈Rqを分布χに従って選び、暗号文c’’=(Tβe1+βe2,Nβ βe1+βe3)∈Rq×Rqを得る。
3)octβ=(U’,C’+Cα)+(Tβe1+βe2,Nβ βe1+βe3)=(U’+ Tβe1+βe2,C’+Cα+Nβ βe1+βe3)∈Rq×Rqを変換済暗号文として出力する。
実施例8は実施例7の変形例である。本実施例で特記しない限り、記号の定義は実施例5と同じである。
<確定的アルゴリズムBD,P2の定義>
実施例5と同じである。
<再変換可能暗号方式>
SU:共通パラメータ生成アルゴリズムSUは、κを入力にとり、a∈Rqをランダムに選び、共通パラメータpp=(κ,n,q,χ,a)を出力する(pp←SU(1κ))。
G:鍵生成アルゴリズムGは、ppを入力にとり、s,x∈Rqを分布χに従って選ぶ。鍵生成アルゴリズムGは、b=as+px∈Rqを計算し、ek=bおよびdk=(s,b)とし、暗号化鍵と復号鍵の組(ek,dk)を出力する((ek,dk)←G(pp))。
E:暗号化アルゴリズムEは、pp,ek=b∈R
q,平文μ∈R
pを入力にとり、e
1,e
2,e
3∈R
qを分布χに従って選び、
を計算し、暗号文c=(U,C)∈R
q×R
qを出力する(c=E(pp,ek,μ))。
D:復号アルゴリズムDは、pp,dk=(s,b),暗号文c=(U,C)を入力にとり、d=C−Us mod qを計算し、μ’=d mod pを計算し、平文μ’∈Rpを出力する(μ’←D(pp,dk,c))。
RKG:変換鍵生成アルゴリズムRKGは、pp,dkα=(sα,bα),ekβ=bβを入力とする。変換鍵生成アルゴリズムRKGは、Y1,Y2,Y3∈Rq 1×δを分布χ1×δに従って選び、Mα→β=Y1[a|bβ]+p[Y2|Y3]+[O|−P2(sα)]∈Rq 2×δを計算し、基本変換鍵rkα→β=Mα→β∈Rq 2×δを出力する(rkα→β←RKG(pp,dkα,ekβ))。
RG:ランダム化鍵生成アルゴリズムRGは、pp,ekβ=bβを入力にとり、Y1’,Y2’,Y3’∈Rqを分布χに従って選び、(Tβ,Nβ)=Y1’[a|bβ]+p[Y2’|Y3’]∈Rq 2を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Rq×Rqを出力する((rppβ,rekβ)←RG(pp,ekβ))。
Switch:変換アルゴリズムSwitchは、pp,rkα→β=Mα→β∈Rq δ×2,暗号文cα=(Uα,Cα)∈Rq×Rqを入力にとる。ただし、暗号文cα=(Uα,Cα)はユーザαの復号鍵dkα=(sα,bα)で復号可能な暗号文であり、暗号文cβはユーザβの復号鍵dkβ=(sβ,bβ)で復号可能な暗号文である。dkβは上述の暗号化鍵ekβ=bβに対応する。変換アルゴリズムSwitchは、Uα∈Rqを入力としたアルゴリズムBDを実行してBD(Uα)∈Rq δを得、(U’,C’)=BD(Uα)Mα→β∈Rq×Rqとする。変換アルゴリズムSwitchは、さらに(Uβ,Cβ)=(U’,C’+Cα)を計算し、暗号文cβ=(Uβ,Cβ)∈Rq×Rqを出力する(cβ←Switch(pp,rkα→β,cα))。
<プロキシ再暗号化方式>
上記の再変換可能暗号方式πの場合、プロキシ再暗号化方式Πは以下のようになる。
Setup:アルゴリズムSetupは、κを入力としてpp←SU(1κ)を計算し、PP=pp=(κ,n,q,χ,a)を出力する。
Geny:アルゴリズムGeny(ただし、y∈{α,β})は、ppを入力にとり、sy,xy∈Rqを分布χに従って選ぶ。アルゴリズムGenyは、by=asy+pxy∈Rqを計算し、ieky=oeky=byおよびidky=odky=(sy,by)とし、暗号化鍵と復号鍵の組(ieky=oeky,idky=odky)を出力する。
Enci:アルゴリズムEnciは、再暗号化前の暗号文を生成する。ユーザy∈{α,β}に対応する暗号文を生成する場合、アルゴリズムEnciは、PP=pp,iek
y=b
y,平文μを入力とし、
ye
1,
ye
2,
ye
3∈R
qをランダムに選び、
を計算し、c
y=(U
y,C
y)∈R
q×R
qを暗号文ict
yとして出力する。
Deci:アルゴリズムDeciは、再暗号化前の暗号文を復号する。ユーザy∈{α,β}に対応する暗号文を復号する場合、アルゴリズムDeciは、PP=pp,idky=(sy,by),暗号文icty=cy=(Uy,Cy)を入力とし、dy=Cy−Uysy mod qを計算し、μ’=dy mod pを計算し、平文μ’∈Rpを出力する。
Enco:アルゴリズムEncoは、再暗号化後の暗号文を生成する。本実施例のアルゴリズムEncoはアルゴリズムEnciと同じである。
Deco:アルゴリズムDecoは、再暗号化後の暗号文を復号する。本実施例のアルゴリズムDecoは、アルゴリズムDeciと同じである。
RekeyGen:アルゴリズムRekeyGenは、PP=pp,idkα=(sα,bα)(第1復号鍵),oekβ=bβ(第2暗号化鍵)を入力とし、Y1,Y2,Y3∈Rq δを分布χδに従って選び、Mα→β=Y1[a|bβ]+p[Y2|Y3]+[O|−P2(sα)]∈Rq 2×δを計算し、基本変換鍵rkα→β=Mα→β∈Rq 2×δを得る。アルゴリズムRekeyGenは、Y1’,Y2’,Y3’∈Rqを分布χに従って選び、(Tβ,Nβ)=Y1’[a|bβ]+p[Y2’|Y3’]∈Rq 2を計算し、ランダム化鍵(rppβ,rekβ)=(Tβ,Nβ)∈Rq m×Rq mを得る。アルゴリズムRekeyGenは、RKα→β=(rkα→β,rppβ,rekβ)を変換鍵として出力する。
ReEnc:アルゴリズムReEncは、PP=pp,RKα→β=(rkα→β=Mα→β,rppβ,rekβ),ictα=cα=(Uα,Cα)(第1暗号文)を入力とし、以下を計算する。
1)(U’,C’)=BD(Uα)Mα→β∈Rq×Rqを得、(Uβ,Cβ)=(U’,C’+Cα)を得、暗号文c’=(Uβ,Cβ)=(U’,C’+Cα)∈Rq×Rqを得る。
2)rppβ=Tβ,rekβ=Nβ,平文とする零元を入力とし、βe1,βe2,βe3∈Rqを分布χに従って選び、暗号文c’’=(Tβe1+p βe2,Nβ βe1+βe3)∈Rq×Rqを得る。
3)octβ=(U’,C’+Cα)+(Tβe1+p βe2,Nβ βe1+βe3)=(U’+ Tβe1+pβe2,C’+Cα+Nβ βe1+βe3)∈Rq×Rqを変換済暗号文として出力する。
実施例9のSwitchは参考文献3に基づく。本実施例で特記しない限り、記号の定義は実施例5と同じである。
<確定的アルゴリズムBD,P2の定義>
実施例5と同じである。
<再変換可能暗号方式>
SU:共通パラメータ生成アルゴリズムSUは、κを入力にとり、共通パラメータpp=(κ,n,q,χ)を出力する(pp←SU(1κ))。
G:鍵生成アルゴリズムGは、ppを入力にとり、f’,g∈Rqを分布χに従って選び、f=pf’+1 mod qとする。ただし、fがRqで逆元を持たない場合には、f’∈Rqを選択し直して新たにfを計算する。このやり直しはfがRqで逆元を持つまで行われる。鍵生成アルゴリズムGは、Rqで逆元を持つfを用い、b=pgf−1 mod qを計算し、ek=bおよびdk=(f,b)とし、暗号化鍵と復号鍵の組(ek,dk)を出力する((ek,dk)←G(pp))。
E:暗号化アルゴリズムEは、pp,ek=b∈R
q,平文μ∈R
pを入力にとり、e
1,e
2∈R
qを分布χに従って選び、
を計算し、暗号文c=C∈R
qを出力する(c=E(pp,ek,μ))。
D:復号アルゴリズムDは、pp,dk=(f,b),暗号文c=Cを入力にとり、d=fC mod qを計算し、
を計算し、平文μ’∈R
pを出力する(μ’←D(pp,dk,c))。
RKG:変換鍵生成アルゴリズムRKGは、pp,dkα=(fα,bα),ekβ=bβを入力とする。変換鍵生成アルゴリズムRKGは、Y1,Y2∈Rq 1×δを分布χ1×δに従って選び、Mα→β=Y1bβ+Y2−P2(fα)∈Rq 1×δを計算し、基本変換鍵rkα→β=Mα→β∈Rq 1×δを出力する(rkα→β←RKG(pp,dkα,ekβ))。
RG:ランダム化鍵生成アルゴリズムRGは、pp,ekβ=bβを入力にとり、Y1’,Y2’∈Rqを分布χに従って選び、Nβ=Y1’bβ+Y2’を計算し、ランダム化鍵(rppβ,rekβ)=(pp,Nβ)を出力する((rppβ,rekβ)←RG(pp,ekβ))。
Switch:変換アルゴリズムSwitchは、pp,rkα→β=Mα→β∈Rq 1×δ,暗号文cα=Cα∈Rqを入力にとる。ただし、暗号文cα=Cαはユーザαの復号鍵dkα=(fα,bα)で復号可能な暗号文であり、暗号文cβはユーザβの復号鍵dkβ=(fβ,bβ)で復号可能な暗号文である。dkβは上述の暗号化鍵ekβ=bβに対応する。変換アルゴリズムSwitchは、Cα∈Rqを入力としたアルゴリズムBDを実行してBD(Cα)∈Rq δを得、C’=BD(Cα)Mα→β∈Rqとする。変換アルゴリズムSwitchは、暗号文cβ=C’∈Rqを出力する(cβ←Switch(pp,rkα→β,cα))。
<プロキシ再暗号化方式>
上記の再変換可能暗号方式πの場合、プロキシ再暗号化方式Πは以下のようになる。
Setup:アルゴリズムSetupは、κを入力としてpp←SU(1κ)を計算し、PP=pp=(κ,n,q,χ)を出力する。
Geny:アルゴリズムGeny(ただし、y∈{α,β})は、ppを入力にとり、fy’,gy∈Rqを分布χに従って選び、fy=pfy’+1 mod qとする。ただし、fyがRqで逆元を持たない場合には、fy’∈Rqを選択し直して新たにfyを計算する。このやり直しはfyがRqで逆元を持つまで行われる。アルゴリズムGenyは、Rqで逆元を持つfyを用い、by=pgyfy −1 mod qを計算し、ieky=oeky=byおよびidky=odky=(fy,by)とし、暗号化鍵と復号鍵の組(ieky=oeky,idky=odky)を出力する。
Enci:アルゴリズムEnciは、再暗号化前の暗号文を生成する。ユーザy∈{α,β}に対応する暗号文を生成する場合、アルゴリズムEnciは、PP=pp,iek
y=b
y,平文μを入力とし、
ye
1,
ye
2∈R
qを分布χに従って選び、
を計算し、c
y=C
y∈R
qを暗号文ict
yとして出力する。
Deci:アルゴリズムDeciは、再暗号化前の暗号文を復号する。ユーザy∈{α,β}に対応する暗号文を復号する場合、アルゴリズムDeciは、PP=pp,idk
y=(f
y,b
y),暗号文ict
y=c
y=C
yを入力とし、d
y=f
yC
y mod qを計算し、
を計算し、平文μ’∈R
pを出力する。
Enco:アルゴリズムEncoは、再暗号化後の暗号文を生成する。本実施例のアルゴリズムEncoはアルゴリズムEnciと同じである。
Deco:アルゴリズムDecoは、再暗号化後の暗号文を復号する。本実施例のアルゴリズムDecoは、アルゴリズムDeciと同じである。
RekeyGen:アルゴリズムRekeyGenは、PP=pp,idkα=(fα,bα)(第1復号鍵),oekβ=bβ(第2暗号化鍵)を入力とし、Y1,Y2∈Rq 1×δを分布χ1×δに従って選び、Mα→β=Y1bβ+Y2−P2(fα)∈Rq 1×δを計算し、基本変換鍵rkα→β=Mα→β∈Rq 1×δを得る。アルゴリズムRekeyGenは、Y1’,Y2’∈Rqを分布χに従って選び、Nβ=Y1’bβ+Y2’∈Rqを計算し、ランダム化鍵(rppβ,rekβ)=(pp,Nβ)を得る。アルゴリズムRekeyGenは、RKα→β=(rkα→β,rppβ,rekβ)を変換鍵として出力する。
ReEnc:アルゴリズムReEncは、PP=pp,RKα→β=(rkα→β=Mα→β,rppβ,rekβ),ictα=cα=Cα(第1暗号文)を入力とし、以下を計算する。
1)C’=BD(Cα)Mα→β∈Rqを得、暗号文c’=Cβ=C’∈Rqとする。
2)rppβ=pp,rekβ=Nβ,平文とする零元を入力とし、βe1,βe2∈Rqを分布χに従って選び、暗号文c’’=Nβ βe1+βe2∈Rqを得る。
3)octβ=C’+Nβ βe1+βe2∈Rqを変換済暗号文として出力する。
実施例10は実施例9の変形例である。本実施例で特記しない限り、記号の定義は実施例5と同じである。
<確定的アルゴリズムBD,P2の定義>
実施例5と同じである。
<再変換可能暗号方式>
SU:共通パラメータ生成アルゴリズムSUは、κを入力にとり、共通パラメータpp=(κ,n,q,χ)を出力する(pp←SU(1κ))。
G:鍵生成アルゴリズムGは、ppを入力にとり、f’,g∈Rqを分布χに従って選び、f=pf’+1 mod qとする。ただし、fがRqで逆元を持たない場合には、f’∈Rqを選択し直して新たにfを計算する。このやり直しはfがRqで逆元を持つまで行われる。鍵生成アルゴリズムGは、Rqで逆元を持つfを用い、b=pgf−1 mod qを計算し、ek=bおよびdk=(f,b)とし、暗号化鍵と復号鍵の組(ek,dk)を出力する((ek,dk)←G(pp))。
E:暗号化アルゴリズムEは、pp,ek=b∈Rq,平文μ∈Rpを入力にとり、e1,e2∈Rqを分布χに従って選び、c=C=be1+pe2+μを計算し、暗号文c=C∈Rqを出力する(c=E(pp,ek,μ))。
D:復号アルゴリズムDは、pp,dk=(f,b),暗号文c=Cを入力にとり、d=fC mod qを計算し、μ’=d mod pを計算し、平文μ’∈Rpを出力する(μ’←D(pp,dk,c))。
RKG:変換鍵生成アルゴリズムRKGは、pp,dkα=(fα,bα),ekβ=bβを入力とする。変換鍵生成アルゴリズムRKGは、Y1,Y2∈Rq 1×δを分布χ1×δに従って選び、Mα→β=Y1bβ+pY2−P2(fα)∈Rq 1×δを計算し、基本変換鍵rkα→β=Mα→β∈Rq 1×δを出力する(rkα→β←RKG(pp,dkα,ekβ))。
RG:ランダム化鍵生成アルゴリズムRGは、pp,ekβ=bβを入力にとり、Y1’,Y2’∈Rqを分布χに従って選び、Nβ=Y1’bβ+pY2’を計算し、ランダム化鍵(rppβ,rekβ)=(pp,Nβ)を出力する((rppβ,rekβ)←RG(pp,ekβ))。
Switch:変換アルゴリズムSwitchは、pp,rkα→β=Mα→β∈Rq 1×δ,暗号文cα=Cα∈Rqを入力にとる。ただし、暗号文cα=Cαはユーザαの復号鍵dkα=(fα,bα)で復号可能な暗号文であり、暗号文cβはユーザβの復号鍵dkβ=(fβ,bβ)で復号可能な暗号文である。dkβは上述の暗号化鍵ekβ=bβに対応する。変換アルゴリズムSwitchは、Cα∈Rqを入力としたアルゴリズムBDを実行してBD(Cα)∈Rq δを得、C’=BD(Cα)Mα→β∈Rqとする。変換アルゴリズムSwitchは、暗号文cβ=C’∈Rqを出力する(cβ←Switch(pp,rkα→β,cα))。
<プロキシ再暗号化方式>
上記の再変換可能暗号方式πの場合、プロキシ再暗号化方式Πは以下のようになる。
Setup:アルゴリズムSetupは、κを入力としてpp←SU(1κ)を計算し、PP=pp=(κ,n,q,χ)を出力する。
Geny:アルゴリズムGeny(ただし、y∈{α,β})は、ppを入力にとり、fy’,gy∈Rqを分布χに従って選び、fy=pfy’+1 mod qとする。ただし、fyがRqで逆元を持たない場合には、fy’∈Rqを選択し直して新たにfyを計算する。このやり直しはfyがRqで逆元を持つまで行われる。アルゴリズムGenyは、Rqで逆元を持つfyを用い、by=pgyfy −1 mod qを計算し、ieky=oeky=byおよびidky=odky=(fy,by)とし、暗号化鍵と復号鍵の組(ieky=oeky,idky=odky)を出力する。
Enci:アルゴリズムEnciは、再暗号化前の暗号文を生成する。ユーザy∈{α,β}に対応する暗号文を生成する場合、アルゴリズムEnciは、PP=pp,ieky=by,平文μを入力とし、ye1,ye2∈Rqを分布χに従って選び、cy=Cy=by ye1+pye2+μ
を計算し、cy=Cy∈Rqを暗号文ictyとして出力する。
Deci:アルゴリズムDeciは、再暗号化前の暗号文を復号する。ユーザy∈{α,β}に対応する暗号文を復号する場合、アルゴリズムDeciは、PP=pp,idky=(fy,by),暗号文icty=cy=Cyを入力とし、dy=fyCy mod qを計算し、μy’=dy mod pを計算し、平文μ’∈Rpを出力する。
Enco:アルゴリズムEncoは、再暗号化後の暗号文を生成する。本実施例のアルゴリズムEncoはアルゴリズムEnciと同じである。
Deco:アルゴリズムDecoは、再暗号化後の暗号文を復号する。本実施例のアルゴリズムDecoは、アルゴリズムDeciと同じである。
RekeyGen:アルゴリズムRekeyGenは、PP=pp,idkα=(fα,bα)(第1復号鍵),oekβ=bβ(第2暗号化鍵)を入力とし、Y1,Y2∈Rq 1×δを分布χ1×δに従って選び、Mα→β=Y1bβ+pY2−P2(fα)∈Rq 1×δを計算し、基本変換鍵rkα→β=Mα→β∈Rq 1×δを得る。アルゴリズムRekeyGenは、Y1’,Y2’∈Rqを分布χに従って選び、Nβ=Y1’bβ+pY2’∈Rqを計算し、ランダム化鍵(rppβ,rekβ)=(pp,Nβ)を得る。アルゴリズムRekeyGenは、RKα→β=(rkα→β,rppβ,rekβ)を変換鍵として出力する。
ReEnc:アルゴリズムReEncは、PP=pp,RKα→β=(rkα→β=Mα→β,rppβ,rekβ),ictα=cα=Cα(第1暗号文)を入力とし、以下を計算する。
1)C’=BD(Cα)Mα→β∈Rqを得、暗号文c’=Cβ=C’∈Rqとする。
2)rppβ=pp,rekβ=Nβ,平文とする零元を入力とし、βe1,βe2∈Rqを分布χに従って選び、暗号文c’’=Nβ βe1+pβe2∈Rqを得る。
3)octβ=C’+Nβ βe1+pβe2∈Rqを変換済暗号文として出力する。
[変形例等]
なお、本発明は上述の実施の形態に限定されるものではない。例えば、各装置がネットワークを通じて情報をやり取りするのではなく、少なくとも一部の組の装置が可搬型記録媒体を介して情報をやり取りしてもよい。或いは、少なくとも一部の組の装置が非可搬型の記録媒体を介して情報をやり取りしてもよい。すなわち、これらの装置の一部からなる組み合わせが、同一の装置であってもよい。例えば、復号装置15がさらに鍵生成装置13として機能する装置であってもよいし、復号装置16がさらに鍵生成装置12として機能する装置であってもよい。
上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体の例は、非一時的な(non-transitory)記録媒体である。このような記録媒体の例は、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等である。
このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD−ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。処理の実行時、このコンピュータは、自己の記録装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。
上記実施形態では、コンピュータ上で所定のプログラムを実行させて本装置の処理機能が実現されたが、これらの処理機能の少なくとも一部がハードウェアで実現されてもよい。