ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

经典同态加密算法(加法与乘法)

2022-01-14 11:59:29  阅读:468  来源: 互联网

标签:同态 ed varphi 素数 kp 加法 modn2 加密算法 mod


加法同态 - Paillier算法

      Pailier算法是法国密码学家Paillier于1999年欧密会上发表,该算法基于复合剩余类的困难问题,是一种满足加法的同态加密算法。
数学知识
1、Carmichael函数,当a与n互素时, a λ ( n ) a^{λ(n)} aλ(n) = 1 mod n
      卡迈克尔函数定义:当 n 为 1、2、4、奇素数的次幂、奇素数的次幂的两倍时为欧拉函数,当 n 为 2、4 以外的 2 的次幂时为欧拉函数的一半。
      如果n可写为素数的积,即 n = p 1 a 1 p 2 a 2 . . . p n a n n=p_1^{a1}p_2^{a2}...p_n^{an} n=p1a1​p2a2​...pnan​,则λ(n)=lcm( λ ( p 1 a 1 ) , λ ( p 2 a 2 ) , . . . , λ ( p n a n ) λ(p_1^{a1}),λ(p_2^{a2}),...,λ(p_n^{an}) λ(p1a1​),λ(p2a2​),...,λ(pnan​))

2、泰勒展开式,y= ( 1 + n ) x {(1+n)^x} (1+n)x= ∑ k = 0 x ∑^x_{k=0} ∑k=0x​ C x k C^k_x Cxk​ n k n^ k nk = 1+nx+ C x 2 C^2_x Cx2​ n 2 n^2 n2+ … ;从 n 2 n^2 n2开始后面的项均可以被 n 2 n^2 n2整数,因此 y = 1+nx mod n 2 n^2 n2 ,根据同余定理并同除n,可得x = ( y − 1 ) n \frac{(y-1)}{n} n(y−1)​ mod n

3、欧拉函数:计算不大于n且与n互素得正整数得个数,用 φ \varphi φ(n)表示这些正整数的集合并记为 Z n ∗ Z^*_n Zn∗​

4、计算带幂次素数的欧拉函数:若p为素数,且有 n = p r n=p^r n=pr,则 φ \varphi φ(n)= φ \varphi φ( p r p^r pr) = p r − 1 φ ( p − 1 ) p^{r-1}\varphi(p-1) pr−1φ(p−1)

5、设m=pq,若p和q互素且大于1,则 φ ( m ) = φ ( p ) φ ( q ) \varphi(m)=\varphi(p)\varphi(q) φ(m)=φ(p)φ(q)

6、欧拉定理,a∈ Z n Z_n Zn​( Z n Z_n Zn​表示小于Z的所有正整数的集合),且a与n互素,即a∈ Z n ∗ Z_n^* Zn∗​,则 a φ ( n ) a^{\varphi(n )} aφ(n) = 1 mod n

密钥生成
1、随机选择大素数p、q,且满足gcd(pq,(p-1)(q-1)) = 1,gcd()函数是求最大公因数
2、计算 n = pq, λ= lcm(p-1,q-1)
3、随机选取 g∈ Z n 2 ∗ Z^*_{n^2} Zn2∗​,且满足g的阶(mod n 2 n^2 n2)是n的非零倍数
4、公钥(n,g),私钥为 λ

选择素数 p=7,q=11
计算n=77,λ=30
选择 g=5652
因此,公钥为(77,5652),私钥为30

加密算法
1、选择 r∈ Z n ∗ Z^*_{n} Zn∗​,因此 r∈ Z n 2 ∗ Z^*_{n^2} Zn2∗​
2、计算密文 C = g m r n g^mr^n gmrn mod n 2 {n^2} n2

选择明文 m=42,随机数 r=23
C = 565 2 42 2 3 77 5652^{42}23^{77} 5652422377mod 5929
    = 4624

解密算法
1、令函数L(x)= x − 1 n \frac{x-1}{n} nx−1​
2、计算明文 m = L ( c λ m o d n 2 ) L ( g λ m o d n 2 \frac{L(c^λmod n^2)}{L(g^λmod n^2} L(gλmodn2L(cλmodn2)​ mod n

m = L ( 462 4 30 m o d 5929 ) L ( 565 2 30 m o d 5929 ) \frac{L(4624^{30}mod 5929)}{L(5652^{30}mod 5929)} L(565230mod5929)L(462430mod5929)​
m = L ( 4852 ) L ( 3928 ) \frac{L(4852)}{L(3928)} L(3928)L(4852)​ mod 77
m = 63 51 \frac{63}{51} 5163​ mod 77
m = 63* 5 1 − 1 51^{-1} 51−1 mod 77
m = 63*74 mod 77
m = 42

求逆元的正确性
m = a b \frac{a}{b} ba​ mod n
mb = a mod n
mb b − 1 b^{-1} b−1 = a b − 1 b^{-1} b−1 mod n
因为b b − 1 b^{-1} b−1 mod n = 1
m = a b − 1 b^{-1} b−1 mod n

加解密正确性证明
c λ m o d n 2 = g m λ r n λ m o d n 2 = g m λ m o d n 2 = ( 1 + n ) m λ m o d n 2 c^λmod n^2 = g^{mλ}r^{nλ} mod n^2 = g^{mλ} modn^2 = (1+n)^{mλ} mod n^2 cλmodn2=gmλrnλmodn2=gmλmodn2=(1+n)mλmodn2
         =(1 + nmλ) mod n 2 n^2 n2 (由泰勒展开式得)

证明 r n λ m o d n 2 r^{nλ} mod n^2 rnλmodn2 = 1
由卡迈克尔函数得
λ ( n 2 ) λ(n^2) λ(n2) = l c m ( λ ( p 2 ) , λ ( q 2 ) ) lcm(λ(p^2),λ(q^2)) lcm(λ(p2),λ(q2))
           = l c m ( p ( p − 1 ) , q ( q − 1 ) ) lcm(p(p-1),q(q-1)) lcm(p(p−1),q(q−1))
           = n ∗ λ ( n ) n*λ(n) n∗λ(n)
由卡迈克尔函数可知,p,q都是素数
a λ ( n ) = 1 m o d n a^{λ(n)} =1mod n aλ(n)=1modn
a n λ ( n ) = 1 m o d n 2 a^{nλ(n)} =1mod n^2 anλ(n)=1modn2

同理可得: g λ m o d n 2 = ( 1 + n λ ) m o d n 2 g^λ mod n^2 = (1 + nλ) mod n^2 gλmodn2=(1+nλ)modn2
L ( c λ m o d n 2 ) L(c^λmod n^2) L(cλmodn2) = ( 1 + n m λ − 1 ) m o d n 2 n = m λ m o d n 2 \frac{(1 + nmλ - 1 )mod n^2}{n} = mλ mod n^2 n(1+nmλ−1)modn2​=mλmodn2
L ( g λ m o d n 2 ) L(g^λmod n^2) L(gλmodn2) = ( 1 + n λ − 1 ) m o d n 2 n = λ m o d n 2 \frac{(1 + nλ - 1 )mod n^2}{n} = λ mod n^2 n(1+nλ−1)modn2​=λmodn2
故明文 m = L ( c λ m o d n 2 ) L ( g λ m o d n 2 ) \frac{L(c^λmod n^2)}{L(g^λmod n^2)} L(gλmodn2)L(cλmodn2)​ = m λ λ \frac{mλ}{λ} λmλ​ = m

加法同态
E(a) * E(b)
= ( g a r 1 n m o d n 2 ) ∗ ( g b r 2 n m o d n 2 ) (g^ar_1^n mod n^2) * (g^br_2^n mod n^2) (gar1n​modn2)∗(gbr2n​modn2)
= g a + b ( r 1 ∗ r 2 ) n m o d n 2 g^{a+b}(r_1 * r_2)^n mod n^2 ga+b(r1​∗r2​)nmodn2
= E(a +b)
因此,Piallier算法支持加法同态,即密文相乘等于明文相加

乘法同态 - RSA算法

      RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。RSA的安全性依赖于大数分解,为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。RSA算法的保密强度随其密钥的长度增加而增强。但是,密钥越长,其加解密所耗用的时间也越长

密钥生成
1、选择两个大素数 p,q
2、计算 n = p * q,
3、计算欧拉函数 φ ( n ) \varphi(n) φ(n)
             φ ( n ) \varphi(n) φ(n) = (p - 1)(q - 1)
4、计算公钥 e
            e 满足的条件:① 1 < e < φ ( n ) \varphi(n) φ(n);② e 与 φ ( n ) \varphi(n) φ(n)互素
5、计算私钥 d
            e * d = 1 mod( φ ( n ) \varphi(n) φ(n))

加密算法
    设明文为 A且小于n,密文为 B
    B = A e A^e Ae mod n

解密算法
    A = B d B^d Bd mod n

乘法同态
    假设密文为 B 1 B_1 B1​, B 2 B_2 B2​
     B 1 B_1 B1​* B 2 B_2 B2​ = A 1 e 1 ∗ A 2 e 2 A_1^{e1}*A_2^{e2} A1e1​∗A2e2​ mod n
                 = ( A 1 ∗ A 2 ) e (A_1*A_2)^e (A1​∗A2​)e mod n
    因此,RSA算法满足乘法同态性,密文乘法等于明文乘法

加解密正确性证明
由解密可得,须证明 A e d A^{ed} Aed = A mod n
ed = 1 mod φ ( n ) \varphi(n) φ(n)
ed -1 = k φ ( n ) \varphi(n) φ(n),ed = k φ ( n ) \varphi(n) φ(n) + 1
即得 A k φ ( n ) + 1 A^{k\varphi(n)+1} Akφ(n)+1 = A mod n,并对 A 分两种情况讨论
当 A 与 n 互素时
    由欧拉定理可得: A φ ( n ) A^{\varphi(n)} Aφ(n) = 1 mod n
     A e d A^{ed} Aed mod n = A k φ ( n ) + 1 A^{k\varphi(n)+1} Akφ(n)+1 mod n = A ∗ A k φ ( n ) A*A^{k\varphi(n)} A∗Akφ(n) mod n = A mod n
    由于 A < n,因此加解密正确
A 与 n 不互素
条件有:A与n不互素,n=pq,p,q均为素数,且 A < n
因此 A=kp 或 kq;举例说明,p=3,q=5,n=15,由于A与n不互素,因此A={3,5,6,9,10,12},任取A必为q或p的倍数
令A=kp,则 1 < k < q
因为 k < q,且 q是素数,因此 k 与 q 互素
k与q互素,p与q互素,则kq不能被q整除
所有由费马小定理得: ( k p ) q − 1 (kp)^{q-1} (kp)q−1 = 1 mod q
由同余乘法性质得: ( k p ) ( q − 1 ) ∗ ( p − 1 ) ∗ k ∗ k p = ( k p ) m o d q (kp)^{(q-1)*(p-1)*k}*kp = (kp) mod q (kp)(q−1)∗(p−1)∗k∗kp=(kp)modq,对于mod q,1的k(p-1)次方依然为1
φ ( n ) \varphi(n) φ(n) = (p-1)(q-1),ed = k φ ( n ) \varphi(n) φ(n) + 1
所以 ( k p ) e d = ( k p ) m o d q (kp)^{ed} = (kp) mod q (kp)ed=(kp)modq
( k p ) e d − ( k p ) = t q (kp)^{ed} - (kp) = tq (kp)ed−(kp)=tq
k p ( ( k p ) e d − 1 − 1 ) = t q kp((kp)^{ed-1} - 1) = tq kp((kp)ed−1−1)=tq
所以kp能整除tq,而q是素数,因此 t 是 p的倍数
则令 t = t 1 p t_1p t1​p
而 ( k p ) e d = t q + k p (kp)^{ed} = tq + kp (kp)ed=tq+kp
即 ( k p ) e d = t 1 p q + k p (kp)^{ed} = t_1pq + kp (kp)ed=t1​pq+kp
即 A e d = t 1 n + A A^{ed} = t_1n + A Aed=t1​n+A
所以原式 A e d A^{ed} Aed mod n = t 1 n + A t_1n+A t1​n+A mod n = A A A
因此,加解密正确

乘法同态 - ElGamal算法

密钥生成
1、随机选择大素数p,且要求 p-1 有大素数因子;在选择一个模 p 的本原元 α \alpha α
2、从{1,2,3,…,p-1}中随机选择一个数 d
3、计算 β = α d m o d p \beta = \alpha^d mod p β=αdmodp
4、公钥为(p, β , α \beta,\alpha β,α),私钥为 d

加密算法
1、从{1,2,3,…,p-1}中选择一个随机数 k,令 m 为明文
2、计算密文 C 1 = α k m o d p C_1=\alpha^k mod p C1​=αkmodp
3、计算密文 C 2 = m ∗ β k m o d p C_2=m*\beta^k mod p C2​=m∗βkmodp
4、传输密文( C 1 , C 2 C_1,C_2 C1​,C2​)

解密算法
1、计算明文 m = C 2 ( C 1 d ) − 1 m o d p m = C_2(C_1^d)^{-1} mod p m=C2​(C1d​)−1modp
2、 ( C 1 d ) − 1 (C_1^d)^{-1} (C1d​)−1为求 C 1 d 模 p 的 逆 元 C_1^d模p的逆元 C1d​模p的逆元

加解密正确性证明
m = C 2 ( C 1 d ) − 1 m o d p C_2(C_1^d)^{-1} mod p C2​(C1d​)−1modp
    = m ∗ β k ∗ ( α k d ) − 1 m o d p m*\beta^k*(\alpha^{kd})^{-1} mod p m∗βk∗(αkd)−1modp
    = m ∗ β k ∗ ( β k ) − 1 m o d p m*\beta^k*(\beta^{k})^{-1} mod p m∗βk∗(βk)−1modp (因为 β = α d m o d p \beta = \alpha^d mod p β=αdmodp)
    = m

标签:同态,ed,varphi,素数,kp,加法,modn2,加密算法,mod
来源: https://blog.csdn.net/qq_43707926/article/details/122490897

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有