(1+n)n≡1+n·n≡1 mod n2
同態加密
1. 定義
一種加密算法E()和相應的解密算法D()。
⊕和⊙為某種數學運算。
如果加密算法滿足:E(x + y) = E(x) ⊕ E(y),我們將這種加密函數叫做加法同態 。
如果加密算法滿足:E(x * y) = E(x) ⊙ E(y),我們將這種加密函數叫做乘法同態 。
一個加密函數如果只滿足加法同態,就只能進行加減法運算;如果只滿足乘法同態,就只能進行乘除法運算;如果同時滿足加法同態和乘法同態,稱為完全同態。
2. 運用
將數據處理權與數據所有權分離,使得在不解密密文的情況對密文數據進行數學運算等同於對原文數據做運算。例如:某公司要計算員工平均新增,而員工薪資是隱私數據,以密文的形式存儲。利用同態加密技術可以在不解密數據的情況下計算員工平均薪資。
定義:E(x + y) = E(x) ⊕ E(y)
原數據 密文
x E(x)
+ ⊕
y E(y)
‖ ‖
x + y D(E(x)⊕E(y))
1
2
3
4
5
6
7
8
9
3. 一種實現:Paillier密碼體系
Paillier加密系統,是1999年Paillier發明的概率公鑰加密系統。基於復合剩余類的困難問題。該加密算法是一種同態加密,滿足加法和乘法同態。
3.1 秘鑰生成
隨機選擇兩個大質數p和q滿足gcd(pq,(p−1)(q−1)=1
gcd(pq,(p−1)(q−1)=1。 這個屬性是保證兩個質數長度相等。
計算 n=pq
n=pq和λ=lcm(p−1,q−1)
λ=lcm(p−1,q−1)。
選擇隨機整數g(g∈ℤ∗n2
g∈Zn2∗),使得滿足n整除g的階。
定義 L(x)=(x−1)n
L(x)=n(x−1)
計算Unexpected text node: ' '
μ=(L(gλmodn2))−1modn
公鑰為 (n,g)
(n,g)
私鑰為(λ,μ)
(λ,μ)
3.2 加密
m為原文(0≤m<n)
(0≤m<n)
選擇隨機數r(0<r<n,r∈ℤ∗n2
r∈Zn2∗),且gcd(r,n)=1
gcd(r,n)=1
加密:Unexpected text node: ' '
c=gm∗rnmodn2
3.3 解密
解密:Unexpected text node: ' '
m=L(cλmodn2)∗μmodn
3.4 同態屬性
加法同態(兩個密文的乘積將解密為它們相應的明文之和)
Unexpected text node: ' '
D(E(m1)∗E(m2)modn2)=m1+m2modn
同態倍增
Unexpected text node: ' '
D(E(m1)m2modn2)=m1m2modn
Unexpected text node: ' 'D(E(m2)m1modn2)=m1m2modn
————————————————
版權聲明:本文為CSDN博主「Danbu:)」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_33885461/java/article/details/86555560
https://www.cnblogs.com/sssssaylf/archive/2020/03/04/12398133.html
paillier加密算法是一種公鑰加密算法,基於復合剩余類的困難問題。滿足加法同態,即密文相乘等於明文相加:D(E(m1)·E(m2))=m1+m2。這里詳細介紹其加密解密是如何推導的,需要具備數論、代數系統、模運算的相關知識,同時理解起來可能需要多閱讀幾遍並加以思考。
先將密鑰生成和加解密過程羅列便於直觀看
截圖來源於:https://blog.csdn.net/sinianluoye/article/details/82855059
加密過程
在進行加解密之前,必須先產生可以用來加密的公鑰n和g。n是兩個大小相近的兩個大素數的乘積:n=p·q。g是ℤn2
中的半隨機數,同時g的階必須在ℤ∗n2中並且能被n整除。由於g必須符合一些特殊性質(我們將在解密部分提出)所以ℤ∗n2中會有很少一部分元素不能用作g,意味着g是一個半隨機數。為了簡單計算,我們先選取兩個小素數p=7,q=11計算得到n=p·q=77。從ℤ∗n2中選擇g(g的階必須是ℤ∗n2中元素並且是n的倍數。除此之外,g需要滿足的另一個性質將會在解密時詳細描述),在這里我們先選擇5652作為g。因為g模n2的階是2310且是77的倍數,並且在ℤ∗n2
中。那么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 ∈ ℤn2
,就像我們之前選作公鑰的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計算得到的值是ℤn2
中的一個元素,由卡邁克爾定理可知,該值 ≡ 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∈ℤ∗n2,g的階∈ℤ∗n2
,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→ℤ∗n2
εg(x,y)→gx∗ynmodn2
定義εg(m, r) 是使用隨機數對m進行加密的加密公式。回想一下在加密階段選擇g的時候,我們要求g模n2的階必須是n的倍數。如果g符合這個條件,則εg是雙射的。我們將引用下邊的引理來證明這個結論。
引理:兩個階相同的有限集A、B構成的函數f:A→
B是滿射的當且僅當這個函數是單射的。
定理:如果g的階是n的非零倍數,則對於 εg(x, y) ≡ gx·yn mod n2 來說εg是雙射的。
證明:假設g的階是n的非零倍數。我們知道|ℤ∗n2
|=φ(n2) = n·φ(n)=| ℤn x ℤ∗n|,意味着ℤ∗n2和 ℤ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。卡邁克爾定理表明ℤ∗n2
中的元素,取λ(n)次冪模n與1同余。該定理同時也表明ℤ∗n2中的元素,取n·λ(n)次冪模n2與1同余。y1和y2-1都是ℤ∗n2中的元素,所以他們的乘積y1/y2也是ℤ∗n2
中的元素,由此我們可以得到 (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。
這意味着,給出任何一個屬於ℤ∗n2
的元素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可以映射到ℤ∗n2
中所有元素,而且g本身也是ℤ∗n2中的一個元素,因此我們可以找到ℤ∗n2
中另一個階是n的非零倍數的元素t能夠通過相同計算得到g。
ℤn2中元素(1+n)的冪 |
基於(1+n)∈ℤ∗n2 |
: (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是它在ℤ∗n2
中的逆(表明(1+n)∈ℤ∗n2
)。(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∈ℤ∗n2
,由卡邁克爾定理可知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都是ℤ∗n2
中元素,,因此r1·r2也屬於ℤ∗n2
,並且具有相同的性質,所以此處的值是r1還是r2亦或是ri並不重要,c1·c2可以看作是m=m1+m2加密的密文,c1·c2的解密結果為m。
總結
以上原理的講解比較復雜與繁瑣,這里總結一下上文中加解密推導的主要思路。
1.參數選擇要求
2.加密實例
3.證明雙射的條件
4.繼而證明明文與密文是一一對應的
5.找到密文的原射,用以代入,可以推出一個解密得到的明文的表達式子
6.由於g也屬於密文空間內,找到g的原射,把g用原射表示代入
7.把g的原射表達式代入µ,得到µ的另一種表達式
8.用正常的解密方式把之前的各種代換代入,得到和之前第5步找到的解密明文表達方式相等,證明解密方式是正確的。