Paillier暗号のソースを表示
←
Paillier暗号
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
{{参照方法|date=2016年10月}} '''Paillier暗号'''<!-- カナ表記は無出典に記すと独自研究です! -->とは [[Pascal Paillier]] が1999年に提案した[[公開鍵暗号]]方式で、{{math|''m''{{sub|1}}}} の[[暗号文]]と {{math|''m''{{sub|2}}}} の暗号文から {{math|''m''{{sub|1}} + ''m''{{sub|2}}}} の暗号文を計算出来る('''加法準同型性''')という性質を満たす。 [[RSA暗号]]や[[ElGamal暗号]]など、{{math|''m''{{sub|1}}}} の暗号文と {{math|''m''{{sub|2}}}} の暗号文から積 {{math|''m''{{sub|1}}''m''{{sub|2}}}} の暗号文を計算できる('''乗法準同型性''')方式は数多いが、加法準同型性を満たす方式はPaillier暗号などごく少数しか知られていない。 {{mvar|N}} 次の冪乗剰余性を計算することは困難である(合成数剰余仮定)と信じられており、Paillier暗号の安全性はこの仮定に基づいている。 == 概要 == {{math|''p'', ''q''}} を[[素数]]とし、{{math|''N'' {{=}} ''pq''}} とする。 Paillier暗号は、次の性質が成り立つ事を利用している(証明は後述)。 {{Indent|<math>(1+N)^M = 1+MN \bmod N^2\,</math> …(1)}} 上の式で、右辺から {{math|1}} を引いて {{mvar|N}} で割れば {{mvar|M}} が求まる<ref>通常[[離散対数問題]]は困難であるが、以上の事実は、底が {{math|1 + ''N''}} である場合には離散対数問題のインスタンス {{math|(1 + ''N''){{sup|''M''}}}} が容易に解ける事を意味している</ref>。 そこで {{math|(1 + ''N''){{sup|''M''}}}} を乱数 {{mvar|R}} で[[マスク (情報工学)|マスク]]したデータ {{Indent|<math>C=(1+N)^MR \bmod N^2\,</math>}} を {{mvar|M}} の暗号文とみなせば、2つの暗号文 {{math|''C'' {{=}} (1 + ''N''){{sup|''M''}}''R'', ''C''′ {{=}} (1 + ''N''){{sup|''M''′}}''R''′}} の積は、 {{Indent|<math>CC'=\left((1+N)^MR\right)\cdot\left((1+N)^{M'}R'\right) = (1+N)^{M+M'}R'' \bmod N^2\,</math>}} となり、{{math|''M'' + ''M''′}} の暗号文と一致する。 ここで {{math|1=''R''′′ = ''RR''′}}。 すなわち、{{mvar|M}} の暗号文と {{math|''M''′}} の暗号文から {{math|''M'' + ''M''′}} の暗号文が求まった事になるので、加法準同型性が成り立つ。 しかし上の「暗号」は復号できないので、方式を改良する必要がある。ここで次の事実を使う(証明は後述)。 {{Indent|{{mvar|N}} の素因数 {{math|''p'', ''q''}} から求まる {{mvar|λ}} が存在し、任意の {{mvar|r}} に対し、{{math|1=(''r''{{sup|''N''}}){{sup|''λ''}} = 1 mod ''N''{{sup|2}}}} …(2)}} そこで前述の「暗号」の {{mvar|R}} を {{mvar|r{{sup|N}}}} に置き換えてできる暗号 {{Indent|<math>C=(1+N)^Mr^N \bmod N^2\,</math>}} を考え、これをPaillier暗号と呼ぶ。この暗号が加法準同型性を満たす事は前述と同様の方法で示せる。また {{mvar|N}} の[[素因数]] {{math|''p'', ''q''}}を知っていれば、{{math|''p'', ''q''}} から {{mvar|λ}} を計算し、 {{Indent|<math>C^{\lambda}=(1+N)^{M\lambda}(r^N)^\lambda = (1+N)^{M\lambda} \bmod N^2\,</math>}} を求める事ができる。右辺に式 (1) を適用する事で {{mvar|Mλ}} が求まるので、{{mvar|Mλ}} を {{mvar|λ}} で割る事で平文 {{mvar|M}} が復号できる。 Paillier暗号の安全性は以下の仮定('''DCR仮定''')のもと成り立つ。 {{Indent|{{math|''p'', ''q''}} を知らない場合、{{math|''r{{sup|N}}'' mod ''N''{{sup|2}}}} は {{math|'''Z'''{{sub|''N''{{sup|2}}}}}} 上の一様乱数と区別がつかない。}} 実際 {{math|''r{{sup|N}}'' mod ''N''{{sup|2}}}} が一様乱数と区別がつかないのであれば、{{math|''r{{sup|N}}'' mod ''N''{{sup|2}}}} によってマスクされている暗号文 {{math|1=''C'' = (1 + ''N''){{sup|''M''}}''r''{{sup|''N''}} mod ''N''{{sup|2}}}} も一様乱数と区別がつかず、{{mvar|M}} に関するいかなる情報も知る事はできない。 上では {{math|1 + ''N''}} をベースにして方式を作ったが、{{math|1 + ''N''}} の代わりに {{math|1 + ''kN''}} を使っても同様の方式を実現できる({{mvar|k}} は {{mvar|N}} と[[互いに素 (整数論)|互いに素]]な任意の定数)。この方式もPaillier暗号と呼ぶ。 ===<math>\mathbb{Z}^{*}_{n^{2}}</math>の構造=== Paillier暗号は[[群 (数学)|群]] <math>\mathbb{Z}^{*}_{n^{2}}</math> を利用するので、群 <math>\mathbb{Z}^{*}_{n^{2}}</math> の構造を調べる。<math>\mathbb{Z}^{*}_{n^{2}}</math> の位数 {{math|''φ''(''n''<sup>2</sup>)}} は、 : {{math|''φ''(''n''<sup>2</sup>) {{=}} ''n''{{sup|2}}(1 − 1/''p'')(1 − 1/''q'') {{=}} ''n''(''p'' − 1)(''q'' − 1)}} である。([[オイラーのφ関数]]参照。){{mvar|n}} と {{math|(''p'' − 1)(''q'' − 1)}} は互いに素なので、<math>\mathbb{Z}^{*}_{n^{2}}</math> には位数 {{mvar|n}} の部分群 {{mvar|G}} と位数 {{math|(''p'' − 1)(''q'' − 1)}} の部分群 {{mvar|H}} が存在し、<math>\mathbb{Z}^{*}_{n^{2}}=G\times H</math> である([[アーベル群の基本定理]]より)。 {{math|''λ'' {{=}} lcm(''p'' − 1, ''q'' − 1)}} とすると、{{mvar|n}} と互いに素な任意の {{mvar|a}} に対し、 :{{math|''a''{{sup|''λ''}} {{=}} 1 mod ''n'',}} :{{math|''a''{{sup|''nλ''}} {{=}} 1 mod ''n''{{sup|2}}}} が成立する([[フェルマーの小定理|カーマイケルの定理]])。すなわち、群 <math>\mathbb{Z}^{*}_{n},\,\mathbb{Z}^{*}_{n^{2}}</math> の各元の位数はそれぞれ {{math|''λ'', ''nλ''}} である。 <math>y,z\in\mathbb{Z}^{*}_{n^{2}}</math> が {{math|1=''z'' = ''y{{sup|n}}'' mod ''n''{{sup|2}}}} を満たしているとき、{{mvar|y}} を {{mvar|z}} の '''{{mvar|n}} 乗根'''という。またある <math>y\in\mathbb{Z}^{*}_{n^{2}}</math> が存在して {{math|1=''z'' = ''y{{sup|n}}'' mod ''n''{{sup|2}}}} となっているとき、<math>z\in\mathbb{Z}^{*}_{n^{2}}</math> は '''{{mvar|n}} 乗剰余'''であるという。 次の定理が成立する: '''定理1''' {{mvar|G}} は {{math|1}} の {{mvar|n}} 乗根全体の集合である。一方 {{mvar|H}} は {{mvar|n}} 乗剰余全体の集合と一致し、{{mvar|H}} の各元の位数は {{mvar|λ}} の[[約数]]である。 '''証明''' {{mvar|G}} の位数は {{mvar|n}} なので、{{mvar|G}} の[[元 (数学)|元]]を {{mvar|n}} 乗すると {{math|1}} になる。したがって {{mvar|G}} の元はいずれも {{math|1}} の {{mvar|n}} 乗根である。また <math>\mathbb{Z}^{*}_{n^{2}}=G\times H</math> で {{mvar|H}} の位数は {{mvar|n}} と互いに素なので、{{mvar|G}} 以外の元を {{mvar|n}} 乗しても {{math|1}} にならない。したがって {{mvar|G}} は {{math|1}} の {{mvar|n}} 乗根全体の集合と一致する。 {{mvar|b}} を {{mvar|H}} の任意の元とする。[[カーマイケルの定理]]より {{math|''b{{sup|nλ}}'' {{=}} 1 mod ''n''{{sup|2}}}} なので、{{mvar|b}} の位数は {{mvar|nλ}} の約数である。また {{mvar|b}} は {{mvar|H}} の元であり、しかも {{mvar|H}} の位数は {{math|(''p'' − 1)(''q'' − 1)}} なので、{{mvar|b}} の位数は {{math|(''p'' − 1)(''q'' − 1)}} の約数でもある。よって {{mvar|b}} の位数は {{mvar|nλ}} と {{math|(''p'' − 1)(''q'' − 1)}} の公約数である。{{mvar|n}} と {{math|(''p'' − 1)(''q'' − 1)}} は互いに素であり、しかも {{mvar|λ}} は {{math|(''p'' − 1)(''q'' − 1)}} の約数なので、{{mvar|nλ}} と {{math|(''p'' − 1)(''q'' − 1)}} の最大公約数は {{mvar|λ}} である。以上の議論より {{mvar|H}} の任意の元の位数は {{mvar|λ}} の約数である。 {{mvar|y}} を <math>\mathbb{Z}^{*}_{n^{2}}</math> の任意の元とするとき、<math>\mathbb{Z}^{*}_{n^{2}}=G\times H</math> なので、ある {{mvar|G}} の元 {{mvar|a}} とある {{mvar|H}} の元 {{mvar|b}} が存在し、{{math|''y'' {{=}} ''ab''}} となる。{{mvar|G}} の位数は {{mvar|n}} なので、{{math|1=''y''{{sup|''n''}} = (''ab''){{sup|''n''}} = ''b''{{sup|''n''}} ∈ ''H''}} となる。よって {{mvar|n}} 乗剰余は必ず {{mvar|H}} に属する。 次に {{mvar|b}} を {{mvar|H}} の任意の元とする。{{mvar|λ}} と {{mvar|n}} は互いに素なので、{{math|''m'' {{=}} ''n''{{sup|−1}} mod ''λ''}} が存在する。{{mvar|b}} の位数は {{mvar|λ}} の約数なので、{{math|(''b''{{sup|''m''}}){{sup|''n''}} {{=}} ''b''{{sup|''kλ''}} {{=}} 1 mod ''n''{{sup|2}} (''k'' ∈ '''R''')}}。よって {{mvar|H}} の任意の元 {{mvar|b}} は {{mvar|n}} 乗根 {{mvar|b{{sup|m}}}} を持つ。すなわち {{mvar|H}} の各元は {{mvar|n}} 乗剰余である。以上の議論より {{mvar|H}} は {{mvar|n}} 乗剰余全体の集合と一致する。 === {{mvar|G}} の構造=== {{mvar|k}} を任意の整数とするとき、 : <math>(1+n)^k = 1 + kn + \frac{k(k-1)}{2}n^2 + \cdots = 1 + kn + n^2\left(\frac{k(k-1)}{2}+\cdots\right) = 1+kn \mod n^2</math> が成立する。同様の議論で、 :<math>(1+ln)^k = 1+kln \mod n^2</math> が成立する事もわかる。 この事実から、次の定理が分かる。 '''定理2''' {{mvar|G}} は {{math|1 + ''n''}} を生成元とする位数 {{mvar|n}} の巡回群である。 '''証明''' {{mvar|G}} の位数が {{mvar|n}} であるのはすでに証明済みである。各 {{math|''k'' {{=}} 0, ..., ''n'' − 1}} に対し、{{math|(1 + ''kn''){{sup|''n''}} {{=}} 1 + ''kn''{{sup|2}} {{=}} 1 mod ''n''{{sup|2}}}} なので、{{math|1 + ''kn''}} は {{math|1}} の {{mvar|n}} 乗根である。しかも {{mvar|n}} 個の元 {{math|1 + 0''n'', ..., 1 + (''n'' − 1)''n''}} はいずれも相異なる。{{mvar|G}} の元の個数は {{mvar|n}} だったので、以上の議論より、{{math|1=''G'' = {1 + ''kn'' {{!}} ''k'' = 0, ..., ''n'' − 1}}} である。しかも {{math|(1 + ''n''){{sup|''k''}} {{=}} (1 + ''kn'') mod ''n''{{sup|2}}}} なので、{{math|1 + ''n''}} は {{mvar|G}} の生成元である。 各 {{math|''k'' {{=}} 0, ..., ''n'' − 1}} に対し、{{math|(1 + ''kn''){{sup|''n''}} {{=}} 1 + ''kn''{{sup|2}} {{=}} 1 mod ''n''{{sup|2}}}} なので、{{math|1 + ''kn''}} は {{math|1}} の {{mvar|n}} 乗根である。しかも {{mvar|n}} 個の元 {{math|1 + 0''n'', ..., 1 + (''n'' − 1)''n''}} はいずれも相異なる。したがって {{math|''G'' {{=}} {1 + ''kn'' {{!}} ''k'' {{=}} 0, ..., ''n'' − 1{{)}}}} である。しかも {{math|(1 + ''n''){{sup|''k''}} {{=}} (1 + ''kn'') mod ''n''{{sup|2}}}} なので、{{math|1 + ''n''}} は {{mvar|G}} の生成元である。 {{mvar|G}} の任意の元 {{mvar|g}} はある {{math|''k'' ∈ {{mset|0, ..., ''n'' − 1}}}} を用いて {{math|''g'' {{=}} 1 + ''kn'' mod ''n''{{sup|2}}}} と表現できる。そこで関数 {{math|''L'': ''G'' → '''Z'''{{sub|''n''}}}} を : <math>L \colon u \mapsto (u-1)/n</math> により定義すると、{{math|1=''L''(''g'') = ''k''}} であり、{{mvar|L}} が乗法群 {{mvar|G}} から加法群 {{math|'''Z'''{{sub|''n''}}}} への同型写像である事が分かる。 ==Paillier暗号== ===アイディア=== {{mvar|G}} の任意の元 {{math|''g'' {{=}} 1 + ''kn'' mod ''n''{{sup|2}}}} をひとつ固定し、{{math|''m'' ∈ '''Z'''{{sub|''n''}}}} の暗号文を : <math>c=g^mr^n \bmod n^2</math> で定義する。ここで {{mvar|r}} は <math>\mathbb{Z}^{*}_{n^{2}}</math> から選ばれた乱数である。 {{mvar|r{{sup|n}}}} は {{mvar|n}} 乗剰余であるので、{{mvar|H}} の元である。したがって {{mvar|r{{sup|n}}}} の位数は {{mvar|λ}} の約数である。そこで復号の際には秘密の情報 {{mvar|λ}} を用い、{{mvar|c{{sup|λ}}}} を計算すると、 :<math>c^{\lambda}=(g^mr^n)^{\lambda} =g^{\lambda m}=(1+kn)^{\lambda m} = 1+k \lambda mn \mod n^2\,</math> となる。よって {{math|''L''(''c''{{sup|''λ''}}) {{=}} ''λkm''}} である。同様の議論により {{math|''L''(''g''{{sup|''λ''}}) {{=}} ''λk''}} も示せるので、{{math|''L''(''c''{{sup|''λ''}})/''L''(''m''{{sup|''λ''}})}} により、平文 {{mvar|m}} を計算できる。 === 方式 === ==== 鍵生成 ==== # 二つの大きな[[素数]] {{math|''p'', ''q''}} をランダムに選び、{{math|''n'' {{=}} ''pq''}} とする。 # {{math|''k'' ∈ '''Z'''{{sub|''n''}}}} を任意に選び、{{math|1=''g'' = 1 + ''kn'' mod ''n''{{sup|2}}}} とする。 # [[公開鍵]] {{math|1=''pk'' = (''n'', ''g'')}} と[[秘密鍵]] {{math|1=''sk'' = (''p'', ''q'')}} を出力する。 ==== 暗号化 ==== {{math|'''Z'''{{sub|''n''}}}} の元 {{mvar|m}} を暗号化するには以下のようにする。 # <math>\mathbb{Z}^{*}_{n^2}</math> からランダムに {{mvar|r}} を選ぶ。 # <math>c=g^m \cdot r^n \bmod n^2 </math> が暗号文である。 ==== 復号 ==== 暗号文 <math>c\in \mathbb{Z}^{*}_{n^{2}} </math> を復号するには {{math|1=''λ'' = lcm(''p'' − 1, ''q'' − 1)}} とし、 * <math>m = L(c^{\lambda} \mod n^{2}) / L(g^{\lambda} \mod n^{2}) \bmod n</math> を出力する。 === 備考 === {{math|''λ'' {{=}} lcm(''p'' − 1, ''q'' − 1)}} および {{math|1=''L''(''g''{{sup|''λ''}} mod ''n''{{sup|2}})}} は事前計算可能であるので、[http://www.gemplus.com/smart/rd/publications/pdf/Pai99pai.pdf 元論文 (PDF)] に書かれているとおり、復号は[[法 (数学)|法]] {{math|''n''{{sup|2}}}} の元で1回の冪乗演算である。 === 準同型性 === Paillier暗号の特筆すべき点はその準同型性である。暗号化関数は加法的準同型性を持つ。公開鍵 {{mvar|pk}} と乱数 {{mvar|r}} を使って {{mvar|m}} を暗号化した暗号文を {{math|''E{{sub|pk}}''(''m''; ''r'')}} と表記する。 *'''平文の加法準同型性''' :二つの暗号文の積は、それらの平文の和の暗号文になる :: <math>E_{pk}(m_1;r_1)\cdot E(m_2;r_2)\mod n^2 = E_{pk}(m_1 + m_2;r_1r_2) \mod n^2. \, </math> また以下の性質を満たす: :: <math>E_{pk}(m_1;r)\cdot g^{m_2} \mod n^2 = E_{pk}(m_1 + m_2;r) \mod n^2, \, </math> :: <math>E_{pk}(m, r)^{k}\mod n^2 = E_{pk}(km;r^k) \mod n^2. \, </math> しかし、2つの暗号文だけを与えられた場合に、秘密鍵無しで平文の積の暗号文を計算する方法は知られていない。 === 安全性 === ランダムに選んだ {{mvar|n}} 乗剰余の分布が <math>\mathbb{Z}^{*}_{n^{2}}</math> 上の一様分布と計算量的識別不能である、という仮定を合成数剰余判定仮定 (DCRA) という。厳密には以下のとおり。 ;'''合成数剰余判定仮定 (DCRA)''': :任意の多項式時間機械Aに対し : <math>|Pr[y\gets\mathbb{Z}^{*}_{n^{2}}, z\gets y^n, b\gets A(z,n):b=1]-Pr[z\gets\mathbb{Z}^{*}_{n^{2}}, b\gets A(z,n):b=1]|</math> :は negligible である。 合成数剰余判定仮定 (DCRA) のもとでは、暗号文 {{math|1=''c'' = ''g{{sup|m}}'' ⋅ ''r{{sup|n}}'' mod ''n''{{sup|2}}}} 中にでてくる {{mvar|n}} 乗剰余 {{math|''r{{sup|n}}'' mod ''n''{{sup|2}}}} は乱数と区別がつかない。よって {{math|1=''c'' = ''g{{sup|m}}'' ⋅ ''r{{sup|n}}'' mod ''n''{{sup|2}}}} から {{mvar|m}} に関する情報を得る事はできず、Paillier暗号が[[IND-CPA]]安全である事が分かる。 Paillier暗号は加法準同型性を満たすので頑強性を持たず、従って[[IND-CCA2]]安全ではないという欠点を持つ。しかし加法準同型性は電子投票や閾値暗号系のような暗号プロトコルを構築するのに有益である。[[ランダムオラクル|ランダムオラクルモデル]]ではPaillier暗号に藤崎岡本パディングを用いる事でIND-CCA2安全性を達成できるが、パディングを適用した方式は加法準同型性を満たさない。<!--PaillierとPointchevalは平文 {{mvar|m}} と乱数 {{mvar|r}} を組み合わせたハッシュ値を用いてより安全性の高い暗号方式を提案している(パディング方式)。[[Cramer-Shoup暗号]]と同様に、[[ハッシュ関数]]を通すことで、{{mvar|c}} だけを与えられた攻撃者は {{mvar|m}} を意味あるように変更することが出来ない。--> === 応用 === ;電子投票 :可展性が必要とされる状況もある。上記の準同型性は安全な電子投票に役立つ。 :単純な賛成・反対の投票を考えよう。{{mvar|m}} を投票者の数とし、{{math|1}} で賛成の票を、{{math|0}} で反対の票を表すものとする。各投票者は各々の票を暗号化する。集票者は、投票者から集めた暗号化された {{mvar|m}} 個の票をすべて掛けあわせた後、復号する。その結果の値を {{mvar|n}} とすると、これは票に対応する数の和になっている。よって、集票者は {{mvar|n}} 人が賛成票を入れ、{{math|''m'' − ''n''}} 人が反対票を入れたことが分かる。 ;電子マネー :自己ブラインド性(論文で名付けられた)を持つ。これは、平文を変えることなくある暗号文を別の暗号文に作り替えることができることを指す。これは David Chaum によって提唱された電子マネー方式を構成する際に用いられる。 電子マネーおよび電子投票の目標は、誰のものであるかを明かすことなく紙幣や票が正規のものであることを保障することにある。 == 脚注 == {{reflist}} == 参考文献 == *[[岡本–内山暗号]]はPaillier暗号に先立って加法的準同型性を達成している。 *[[Damgaard-Jurik暗号]]はPaillier暗号の一般化である。 *[http://security.hsr.ch/msevote/paillier Paillier cryptosystem interactive simulator]では電子投票のデモを行っている。 * Pascal Paillier, [http://www.gemplus.com/smart/rd/publications/pdf/Pai99pai.pdf Public-Key Cryptosystems Based on Composite Degree Residuosity Classes], EUROCRYPT 1999, pp. 223–238. * Pascal Paillier, David Pointcheval, [http://www.gemplus.com/smart/rd/publications/pdf/PP99cca2.pdf Efficient Public-Key Cryptosystems Provably Secure Against Active Adversaries], ASIACRYPT 1999. * Pascal Paillier, [http://www.gemplus.com/smart/rd/publications/pdf/Pai99phd.pdf PhD Thesis], 1999. * Pascal Paillier, [http://www.rsasecurity.com/rsalabs/cryptobytes/CryptoBytes_January_2002_final.pdf Composite-Residuosity Based Cryptography: An Overview], CryptoBytes Vol. 5 No. 1, 2002. == 関連項目 == * [[暗号理論]] * [[公開鍵暗号]] {{cryptography navbox|public-key}} [[Category:暗号技術]] [[Category:関数]] [[Category:数学に関する記事]]
このページで使用されているテンプレート:
テンプレート:Cryptography navbox
(
ソースを閲覧
)
テンプレート:Indent
(
ソースを閲覧
)
テンプレート:Math
(
ソースを閲覧
)
テンプレート:Mvar
(
ソースを閲覧
)
テンプレート:Reflist
(
ソースを閲覧
)
テンプレート:参照方法
(
ソースを閲覧
)
Paillier暗号
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報