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 n2 -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·yn mod n2 來說ε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)n ≡ 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)n ≡ 1·mod n2,當x1=x2時,我們得到 (y1/y2)n ≡ 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·zn mod 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)·zn mod n2,使用g的運算式來代替g,我們可以得到:
c≡gm·rn≡[(1+n)[g](1+n)·zn]m·rn mod n2
≡(1+n)m[g](1+n)·zmn·rn mod 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 n2 代入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步找到的解密明文表達方式相等,證明解密方式是正確的,
如有我理解的不正確的地方,歡迎加以指正,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/43379.html
標籤:其他
下一篇:[求助] UIAUTOMATION editcontrol寫入的檔案名被WIN10提示無效,但手動輸入同樣的可以
