1. 程式人生 > >paillier加密演算法原理詳解

paillier加密演算法原理詳解

  paillier加密演算法是一種公鑰加密演算法,基於複合剩餘類的困難問題。滿足加法同態,即密文相乘等於明文相加:D(E(m1)·E(m2))=m1+m2。這裡詳細介紹其加密解密是如何推導的,需要具備數論、代數系統、模運算的相關知識,同時理解起來可能需要多閱讀幾遍並加以思考。

先將金鑰生成和加解密過程羅列便於直觀看

  截圖來源於:https://blog.csdn.net/sinianluoye/article/details/82855059

 

加密過程

  在進行加解密之前,必須先產生可以用來加密的公鑰n和g。n是兩個大小相近的兩個大素數的乘積:n=p·q。g是$ℤ_{n^{2}}$中的半隨機數,同時g的階必須在$ℤ^{*}_{n^{2}}$中並且能被n整除。由於g必須符合一些特殊性質(我們將在解密部分提出)所以$ℤ^{*}_{n^{2}}$中會有很少一部分元素不能用作g,意味著g是一個半隨機數。為了簡單計算,我們先選取兩個小素數p=7,q=11計算得到n=p·q=77。從$ℤ^{*}_{n^{2}}$中選擇g(g的階必須是$ℤ^{*}_{n^{2}}$中元素並且是n的倍數。除此之外,g需要滿足的另一個性質將會在解密時詳細描述),在這裡我們先選擇5652作為g。因為g模n2

的階是2310且是77的倍數,並且在$ℤ^{*}_{n^{2}}$中。那麼g所需要的包括未清楚定義的所有性質將會被滿足。至此,我們找到了用來實際加解密運算過程的公鑰(n,g)。隨著公鑰釋出,任何人都能使用公鑰加密資料並將密文傳給私鑰持有者。整個過程可用圖一表示。

計算例項

公式

明文m=42

隨機數r=23

c ≡ (5652)42·(23)77mod 5929 

 ≡ (4019)(606) ≡ 4624 mod 5929

建立明文訊息m,m∈ℤn

隨機選擇非零整數 r∈$ℤ^{*}_{n}$

計算密文c ≡ gm·rn mod n2

 

圖1:n = 77, g = 5652時paillier系統加密

c是加密資訊,私鑰持有者解密時無需瞭解r的值。

解密過程

  在已知p,q和g的情況下,任何人都可以將收到的加密訊息c解密。我們注意到在已知p,q的情況下,卡邁克爾公式λ(n) = lcm[(p – 1)(q – 1)]很容易計算。我們也注意到,如果g ∈ $ℤ_{n^{2}}$,就像我們之前選作公鑰的g,卡邁克爾定理保證gλ(n) ≡ 1 mod n成立。卡邁克爾定理表明如果兩個整數a和n互質,那麼關係式 aλ(n)

≡ 1 mod n。因為g是模n2的單元,顯然與n2互質,意味著g與n也是互質的。在這個基礎上,卡邁克爾定理成立。解密時,忽略密文c的值,對於所有使用公鑰對(n, g)進行的解密,計算gλ(n)mod n2都是必要的。gλ(n) mod n2計算得到的值是$ℤ_{n^{2}}$中的一個元素,由卡邁克爾定理可知,該值 ≡ 1 mod n。如果我們從結果值中減1得到的值可以被n整除。計算過程如圖2。

計算例項

公式

λ(77) = lcm(6, 10) = 30 

L(565230mod 5929) = L(3928)

L(3928) = (3928 – 1)/77 = 3927/77 = 51

定義 L(u) = (u – 1)/n 

計算L(gλ(n)mod n2)= k

圖2:已知n2=5926,g=5652計算L(gλ(n) mod n2)

gλ(n) mod n2的結果可以看作一個大於等於0,嚴格小於n2的數,因此 gλ(n) mod n-1 除以n之後的結果k大於等於0,嚴格小於n,也就是說k∈Zn。因為n=p·q,只要k mod n的結果不是p或q的倍數,k會有逆,所以k∈$ℤ^{*}_{n}$。這個性質是之前在加密階段提到的g需要符和未定義的性質。如果 gλ(n) mod n2的結果模n的值k是p或q的倍數,這個g必須被丟棄。在釋出g之前先檢查g是否符合要求,如果不符合就捨棄重新選擇。現在我們假設隨機選擇的g符合條件即g∈$ℤ^{*}_{n^{2}}$,g的階∈$ℤ^{*}_{n^{2}}$,k不是p或q的倍數(k存在模n的逆),接下來就可以計算µ ≡ k-1mod n,如圖3所示。在解密過程中,公鑰(n, g)相同的情況下,計算得到的µ值總是相同的,也是必不可少的。

計算例項

公式

µ ≡ 51-1≡74 mod 77

計算 µ ≡ k-1mod n

圖3:µ,L(gλ(n) mod n2)在$ℤ^{*}_{n}$中的逆在

解密過程中非常重要。這裡n=77,L(gλ(n) mod n2)

所有人在解密過程中必須計算m ≡ L(gλ(n) mod n2)·µ mod n,如圖4所示。

計算例項

公式

m ≡ L(462430≡ 4852mod 5929)·74 mod 77 

m ≡ 63·74 ≡ 4662 ≡ 42 mod 77

m ≡ L(cλ(n) mod n2)·µ mod n

圖4:paillier加密系統解密過程。

 這裡n = 77, c ≡ 4624 mod n,µ ≡ 74 mod n

加解密中的數學原理

  為了理解解密過程,我們首先介紹一個公式

$ε_{g}:ℤ_{n} * ℤ^{*}_{n}\rightarrow ℤ^{*}_{n^{2}}$

$ε_{g}(x, y)\rightarrow g^{x}*y^{n} mod n^{2}$

定義εg(m, r) 是使用隨機數對m進行加密的加密公式。回想一下在加密階段選擇g的時候,我們要求g模n2的階必須是n的倍數。如果g符合這個條件,則εg是雙射的。我們將引用下邊的引理來證明這個結論。

  引理:兩個階相同的有限集A、B構成的函式f:A$\rightarrow$ B是滿射的當且僅當這個函式是單射的。

  定理:如果g的階是n的非零倍數,則對於 εg(x, y) ≡ gx·ymod n來說εg是雙射的。

  證明:假設g的階是n的非零倍數。我們知道|$ℤ^{*}_{n^{2}}$|=φ(n2) = n·φ(n)=| ℤn x $ℤ^{*}_{n}$|,意味著$ℤ^{*}_{n^{2}}$和 ℤn x $ℤ^{*}_{n}$擁有相同個數。基於上邊的引理如果εg是單射的,它也是滿射的。因此,我們證明了εg是單射的可以充分的證明它也是雙射的。

  假設 gx1·y1n≡gx2·y2n·mod n2。我們可以得到 gx1-x2·(y1/y2)≡ 1·mod n2。等式兩邊同時取λ(n)次冪,得到 gλ(n)·(x1-x2)·(y1/y2)n·λ(n) ≡ 1·mod n2。卡邁克爾定理表明$ℤ^{*}_{n^{2}}$中的元素,取λ(n)次冪模n與1同餘。該定理同時也表明$ℤ^{*}_{n^{2}}$中的元素,取n·λ(n)次冪模n2與1同餘。y1和y2-1都是$ℤ^{*}_{n^{2}}$中的元素,所以他們的乘積y1/y2也是$ℤ^{*}_{n^{2}}$中的元素,由此我們可以得到 (y1/y2)n·λ(n) ≡ 1·mod n2,所以 gλ(n)·(x1-x2)·(y1/y2)n·λ(n) ≡ gλ(n)·(x1-x2≡ 1·mod n2

以上證明表示 λ(n)·(x1-x2) 是g的階的倍數。最開始的時候我們已經假設g的階是n的非零倍數,所以 λ(n)·(x1-x2) 也是n的倍數。由於 λ(n)·(x1-x2) 可以被n整除,並且GCD(λ(n), n)=1,我們可以得出n整除x1-x2或者說x1-x2模n與0同餘。而且x1和x2是 ℤn中的元素,它們的模n同餘可以保證他們是相等的。

讓我們再回到方程式 gx1-x2·(y1/y2)≡ 1·mod n2,當x1=x2時,我們得到 (y1/y2)≡ 1·mod n2,繼而y1n≡y2n。當y1與y2模n同餘時,上式成立。

所以根據y1,y2 ∈ $ℤ^{*}_{n}$,我們得到了x1=x2

  這意味著,給出任何一個屬於$ℤ^{*}_{n^{2}}$的元素w,當n選定之後,選擇一個符合要求的g,加密結果εg(x, y)≡w mod n2是獨一無二的。為了便於標註,我們指定εg(x, y) ≡ gx·yn≡ w mod n2,定義[w]g為ℤn中唯一與之對應的元素x, 即[w]g =x。

  因為εg可以對映到$ℤ^{*}_{n^{2}}$中所有元素,而且g本身也是$ℤ^{*}_{n^{2}}$中的一個元素,因此我們可以找到$ℤ^{*}_{n^{2}}$中另一個階是n的非零倍數的元素t能夠通過相同計算得到g。

n2中元素(1+n)的冪

基於(1+n)∈$ℤ^{*}_{n^{2}}$:        (1+n)2≡1+2n+n2≡1+2n mod n2

                            (1+n)3≡1+3n+n3≡1+3n mod n2

                                  (1+n)v≡1+v·n+[n的高次冪]≡1+v·n mod n2

   

圖5:(1+n)v和1+v·n模n同餘

如圖5所示,(1+n)n≡1+n·n≡1 mod n2。很明顯,n本身是n的一倍,也是(1+n)的階,並且(1+n)n-1是它在$ℤ^{*}_{n^{2}}$中的逆(表明(1+n)∈$ℤ^{*}_{n^{2}}$)。(1+n)符合t要求的性質,所以我們可以計算[g](1+n)。也就是說g≡ε(1+n)(t,z)≡(1+n)t·zmod n2,t=[g](1+n)

當我們加密資訊m時,密文 c≡εg(m, r) ≡ gm·rn mod n2,我們之前剛剛證明g可以表示為g≡ε(1+n)([g](1+n),z)≡(1+n)[g](1+n)·zmod n2。使用g的表示式來代替g,我們可以得到:

   c≡gm·rn≡[(1+n)[g](1+n)·zn]m·rn mod n2

≡(1+n)m[g](1+n)·zmn·rmod n2

≡(1+n)m[g](1+n)·(zm·r)n mod n2

由z∈$ℤ^{*}_{n}$, 可知zm∈$ℤ^{*}_{n}$,由r∈$ℤ^{*}_{n}$,可知zm·r∈$ℤ^{*}_{n}$,所以

c≡ε(1+n)(m·[g](1+n), zm·r) mod n2

c可以表示為[c](1+n)≡m·[g](1+n),即m≡[c](1+n)·{[g](1+n)}-1 mod n([c](1+n)是ℤn中元素,所以模n2與模n同餘)。

由上述結果可知,無論c為何值,[g](1+n)的逆是一個定值。解密c需要計算[c](1+n),並將結果與定值[g](1+n)的逆相乘並模n。在解密時,我們計算了µ ≡ L(gλ(n)mod n2)-1 mod n,並宣告這是一個和m,c或者r都無關的對於解密來說很必要的定值。結合上述證明我們有了µ的另一種形式 µ≡(L(gλ(n) mod n2)-1 ≡ {λ(n)·[g](1+n)}-1 mod n。現在讓我們看看密文如何回到明文。

gλ(n) mod n2

gλ(n) ≡ [(1+n)[g](1+n)·zn]λ(n)·znλ(n) mod n2

因為z∈$ℤ^{*}_{n^{2}}$,由卡邁克爾定理可知znλ(n) ≡ 1 mod n2。可得:

gλ(n) ≡ (1+n)λ(n)[g](1+n) mod n2

          ≡1+λ(n)·[g](1+n)·n+[n的高次冪] mod n2

    ≡1+λ(n)·[g](1+n)·n mod n2

現在將gλ(n) mod n代入L(u)(L(u)=(u-1)/n):

L(gλ(n) mod n2)≡L(1+λ(n)·[g](1+n)·n)mod n

        ≡{1+λ(n)·[g](1+n)·n-1}/n mod n

      ≡{λ(n)·[g](1+n)·n}/n mod n

   ≡λ(n)·[g](1+n) mod n

所以 L(gλ(n)mod n2) ≡ λ(n)·[g](1+n) mod n,µ ≡ L(gλ(n) mod n2)-1 ≡ {λ(n)·[g](1+n)}-1 mod n,我們同樣可以用卡邁克爾定理簡化L(cλ(n)mod n2):

cλ(n) mod n2:

  cλ(n)≡[(1+n)[c](1+n)·dn]λ(n) mod n2

     ≡[(1+n)[c](1+n)·dnλ(n) mod n2

≡(1+n)[c](1+n) mod n2

         ≡1+λ(n)·[c](1+n)·n+[n的高次冪] mod n2

   ≡1+λ(n)·[c](1+n)·n mod n2

所以:

L(cλ(n) mod n2)≡L(1+λ(n)·[c](1+n)·n) mod n

        ≡{1+λ(n)·[c](1+n)·n-1}/n mod n

      ≡{λ(n)·[c](1+n)·n}/n mod n

   ≡λ(n)·[c](1+n) mod n

可得:µ ≡ L(gλ(n) mod n2)-1 ≡ {λ(n)·[g](1+n) mod n,L(cλ(n) mod n2) ≡ λ(n)·[c](1+n) mod n。即L(cλ(n) mod n2)·µ ≡ λ(n)·[c](1+n)·λ(n)-1·[g](1+n)-1 ≡ [c](1+n)·[g](1+n)-1 ≡ m mod n。

我們注意到,對於給定公鑰(n,g),µ總是相等的,只需要計算一次。意味著解密過程包含一個指數冪模n2,和固定值L(µ)相乘的結果模n。使得解密變成一個計算複雜度是指數冪模n2相對簡單的過程。

paillier加密系統的加法同態

  通過paillier加密系統加密的兩個訊息相乘的結果解密後得到的是兩個訊息相加的結果。

兩個密文c1 ≡ gm1·r1n mod n2 , and c2 ≡ gm2·r2n mod n2

c1·c2≡ gm1·gm2·r1n ·r2n mod n2⇒ c1·c2 ≡gm1·gm2·r1n ·r2n ≡ gm1+m2·(r1·r2)nmod n2

r1和r2都是$ℤ^{*}_{n^{2}}$中元素,,因此r1·r2也屬於$ℤ^{*}_{n^{2}}$,並且具有相同的性質,所以此處的值是r1還是r2亦或是ri並不重要,c1·c2可以看作是m=m1+m2加密的密文,c1·c2的解密結果為m。

 

總結

以上原理的講解比較複雜與繁瑣,這裡總結一下上文中加解密推導的主要思路。

1.引數選擇要求

2.加密例項

3.證明雙射的條件

4.繼而證明明文與密文是一一對應的

5.找到密文的原射,用以代入,可以推出一個解密得到的明文的表示式子

6.由於g也屬於密文空間內,找到g的原射,把g用原射表示代入

7.把g的原射表示式代入µ,得到µ的另一種表示式

8.用正常的解密方式把之前的各種代換代入,得到和之前第5步找到的解密明文表達方式相等,證明解密方式是正確的。

 

如有我理解的不正確的地方,歡迎加以指