隐私计算相关密码学知识

一些数论知识

1、欧拉函数:对于正整数 n n n φ ( n ) φ(n) φ(n) 代表「小于 n n n 的正整数中和 n n n 互质的数」的个数,这个函数被称为欧拉函数

2、欧拉定理:若 m m m n n n互质,那么 m φ ( n )   m o d   n = 1 m^{φ(n)} \bmod n = 1 mφ(n)modn=1。(互质是公约数只有1的两个整数,也称互素)

性质:

1) n n n m m m互质时,满足 φ ( n m ) = φ ( n ) φ ( m ) φ(nm)= φ(n) φ(m) φ(nm)=φ(n)φ(m)

2)对于质数 p p p ,它的欧拉函数值 φ ( p ) = p − 1 φ(p)=p-1 φ(p)=p1

证明:因为p为质数,所以比它小的数都和它互质,即在1~p中有p-1个数和它互质。

3、同余式

设m是大于1的正整数,a,b是整数,如果m|(a-b),则称a与b关于模m同余,记作 a ≡ b (   m o d   m ) a \equiv b(\bmod m) ab(modm),读作a同余于b模m。

性质:
1)若 a ≡ b (   m o d   m ) a ≡ b(\bmod m) ab(modm) c ≡ d (   m o d   m ) c ≡ d(\bmod m) cd(modm),则 a + c ≡ b + d (   m o d   m ) a+c ≡ b+d(\bmod m) a+cb+d(modm)
2)若 a ≡ b (   m o d   m ) a ≡ b(\bmod m) ab(modm) c ≡ d (   m o d   m ) c ≡ d(\bmod m) cd(modm),则 a ∗ c ≡ b ∗ d (   m o d   m ) a*c ≡ b*d(\bmod m) acbd(modm)

4、乘法逆元

如果 a b ≡ 1 (   m o d   m ) ab ≡ 1(\bmod m) ab1(modm),则称a和b为关于m互为乘法逆元。

5、

a ∗ b ∗ c   m o d   n = [ ( a   m o d   n ) ( b   m o d   n ) ( c   m o d   n ) ]   m o d   n a*b*c \bmod n = [ (a \bmod n) (b \bmod n) (c \bmod n) ] \bmod n abcmodn=[(amodn)(bmodn)(cmodn)]modn

注:目前已知512bit的非对称密钥可以被破解,通常选择非常大的素数

RSA

RSA加密算法的安全性是基于对极大整数做因数分解的困难

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥(公钥,私钥),使用公钥加密,私钥解密。公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。

1、密钥生成

1)选两个大质数p, q,越大越安全
2)计算 n = p ∗ q n=p*q n=pq
3)计算 n 的欧拉函数: φ ( n ) = ( p − 1 ) ( q − 1 ) φ(n)=(p-1)(q-1) φ(n)=(p1)(q1)
4)随机选择一个整数 e,条件是 1 < e < φ ( n ) 1< e < φ(n) 1<e<φ(n),且 e 与 φ ( n ) φ(n) φ(n) 互质
5)计算 e 对于 φ ( n ) φ(n) φ(n)的模反元素d, ( e ∗ d − 1 )   m o d   φ ( n ) = 0 (e*d-1) \bmod φ(n) = 0 (ed1)modφ(n)=0,且 1 < d < φ ( n ) 1<d<φ(n) 1<d<φ(n)
6)公钥(n,e),私钥(n,d)

2、加解密

将明文比特串分组,使得每个分组对应的十进制数 小于n ,即分组长度小于 log2n 。

c:密文
m:明文

加密: c = m e   m o d   n c = m^e \bmod n c=memodn
解密: m = c d   m o d   n m = c^d \bmod n m=cdmodn

3、正确性证明

m = c d   m o d   n = ( m e   m o d   n ) d   m o d   n = m e d   m o d   n = m k φ ( n ) + 1   m o d   n = [ ( m   m o d   n ) ( m φ ( n )   m o d   n ) k ]   m o d   n m = c^d \bmod n = (m^e \bmod n)^d \bmod n =m^{ed} \bmod n = m^{kφ(n)+1} \bmod n = [(m \bmod n) (m^{φ(n)} \bmod n)^k] \bmod n m=cdmodn=(memodn)dmodn=medmodn=mkφ(n)+1modn=[(mmodn)(mφ(n)modn)k]modn

1)若m和n互质
m φ ( n )   m o d   n = 1 m^{φ(n)} \bmod n = 1 mφ(n)modn=1
m = m   m o d   n m = m \bmod n m=mmodn

2)若m和n不互质
那么,明文m应该为p或者q的倍数,但不能同时是p,q的倍数,因为m<n。
假设 m = t p m=tp m=tp,则m与q应该互质,则有:
m φ ( q ) ≡ 1 (   m o d   q ) m^{φ(q)} ≡ 1 (\bmod q) mφ(q)1(modq)

等式两边同时取 k φ ( p ) kφ(p) kφ(p)的幂次方,则等式依然成立,即:
m k φ ( p ) φ ( q ) ≡ 1 (   m o d   q ) m^{kφ(p)φ(q)} ≡ 1 (\bmod q) mkφ(p)φ(q)1(modq)
m k φ ( n ) ≡ 1 (   m o d   q ) m^{kφ(n)} ≡ 1 (\bmod q) mkφ(n)1(modq)
m k φ ( n ) = 1 + i ∗ q m^{kφ(n)} = 1 + i*q mkφ(n)=1+iq

两边同时乘m,又 m = t p m=tp m=tp
m k φ ( n ) + 1 = m + i ∗ q ∗ t ∗ p = m + i ∗ t ∗ n m^{kφ(n)+1} = m + i*q*t*p = m + i*t*n mkφ(n)+1=m+iqtp=m+itn

两边对n取模
m k φ ( n ) + 1   m o d   n = ( m + i ∗ t ∗ n )   m o d   n = m m^{kφ(n)+1} \bmod n = (m + i*t*n) \bmod n = m mkφ(n)+1modn=(m+itn)modn=m

例题:在使用RSA的公钥体制中,已截获发给某用户的密文c=10,该用户的公钥e=5,n=35,那么明文m=多少?

同态加密

1、RSA乘法同态

密钥生成同上RSA
公钥 ( n , e ) (n, e) (n,e), 私钥 ( n , d ) (n, d) (n,d) n = p ∗ q n = p*q n=pq

加密

E n c ( m ) = m e   m o d   n Enc(m) = m^e \bmod n Enc(m)=memodn

乘法同态

E n c ( m 1 ) ∗ E n c ( m 2 ) = ( m 1 ∗ m 2 ) e   m o d   n = E n c ( m 1 ∗ m 2 ) Enc(m_1) * Enc(m_2) = (m_1 * m_2)^e \bmod n = Enc(m_1 * m_2) Enc(m1)Enc(m2)=(m1m2)emodn=Enc(m1m2)

2、paillier加法同态

密钥生成

1)选择两个大质数p, q
2)计算 n = p ∗ q n=p*q n=pq λ = l c m ( p − 1 , q − 1 ) λ=lcm(p-1, q-1) λ=lcm(p1,q1)
3)选择随机整数 g(一般选择 g = n + 1 g=n+1 g=n+1
4)定义函数 L ( x ) = x − 1 n L(x)=\frac{x-1}{n} L(x)=nx1(解空间),计算模反元素 μ = ( L ( g λ   m o d   n 2 ) ) − 1   m o d   n μ=(L(g^λ \bmod n^2))^{-1} \bmod n μ=(L(gλmodn2))1modn
5)公钥 ( n , g ) (n, g) (n,g),私钥 ( λ , μ ) (λ, μ) (λ,μ)

加解密

0 < = m < n 0 <= m < n 0<=m<n
选择一个随机数 r r r, 满足 0 < r < n 0 < r < n 0<r<n

c = ( g m ∗ r n )   m o d   n 2 c = (g^m * r^n) \bmod n^2 c=(gmrn)modn2

m = ( L ( c λ   m o d   n 2 ) ∗ μ )   m o d   n m = (L(c^λ \bmod n^2) * μ) \bmod n m=(L(cλmodn2)μ)modn

加法同态

E n c ( m 1 ) ∗ E n c ( m 2 ) = ( g m 1 + m 2 ∗ ( r 1 ∗ r 2 ) n )   m o d   n 2 = E n c ( m 1 + m 2 ) Enc(m_1) * Enc(m_2) = (g^{m_1 + m_2} * (r_1 * r_2)^n) \bmod n^2 = Enc(m_1 + m_2) Enc(m1)Enc(m2)=(gm1+m2(r1r2)n)modn2=Enc(m1+m2)

正确性证明
卡米切尔定理(Carmichael’s function): r n λ ≡ 1   m o d   n 2 r^{nλ} ≡ 1 \bmod n^2 r1modn2
泰勒展开: ( 1 + n ) x = 1 + n x (1+n)^x = 1+nx (1+n)x=1+nx

μ = ( L ( g λ   m o d   n 2 ) ) − 1   m o d   n μ=(L(g^λ \bmod n^2))^{-1} \bmod n μ=(L(gλmodn2))1modn

m = ( L ( c λ   m o d   n 2 ) ∗ μ )   m o d   n m = (L(c^λ \bmod n^2) * μ) \bmod n m=(L(cλmodn2)μ)modn

c λ   m o d   n 2 = ( ( g m ∗ r n )   m o d   n 2 ) λ   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 = ( 1 + n ∗ m ∗ λ )   m o d   n 2 c^λ \bmod n^2 = ((g^m * r^n) \bmod n^2)^λ \bmod n^2 = (g^{mλ} * r^{nλ}) \bmod n^2 = g^{mλ} \bmod n^2 = (1+n)^{mλ} \bmod n^2 = (1+n*m*λ) \bmod n^2 cλmodn2=((gmrn)modn2)λmodn2=(gr)modn2=gmodn2=(1+n)modn2=(1+nmλ)modn2

g λ   m o d   n 2 = ( 1 + n ) λ   m o d   n 2 = ( 1 + n ∗ λ )   m o d   n 2 g^λ \bmod n^2 = (1+n)^λ \bmod n^2 = (1+n*λ) \bmod n^2 gλmodn2=(1+n)λmodn2=(1+nλ)modn2

m = L ( c λ   m o d   n 2 ) L ( g λ   m o d   n 2 )   m o d   n 2 = m ∗ λ   m o d   n 2 λ   m o d   n 2 = m m = \frac{L(c^λ \bmod n^2)}{L(g^λ \bmod n^2)} \bmod n^2 = \frac{m*λ \bmod n^2}{λ \bmod n^2} = m m=L(gλmodn2)L(cλmodn2)modn2=λmodn2mλmodn2=m

模指数优化
一个大代数空间 Z n \mathbb{Z}_n Zn 可以被分解为 2 个小代数空间 Z p , Z q \mathbb{Z}_p, \mathbb{Z}_q Zp,Zq ,且大空间与 2 个小空间有一一映射。具体而言, n = p ∗ q n = p*q n=pq ,且 p 与 q 互素,存在同构 Z n ≃ Z p ∗ Z q \mathbb{Z}_n \simeq \mathbb{Z}_p * \mathbb{Z}_q ZnZpZq,使得在 Z n \mathbb{Z}_n Zn 空间的运算等价转换 ( Z p , Z q ) (\mathbb{Z}_p, \mathbb{Z}_q) (Zp,Zq)空间的并行运算。

例:解决百万富翁问题
两方安全计算
1)Alice:生成非对称密钥对 ( p k , s k ) (pk, sk) (pk,sk),使用公钥 p k pk pk对其财富值 v 0 v_0 v0进行加密 C 0 = E n c p k ( v 0 ) C_0=Enc_{pk}(v_0) C0=Encpk(v0),发送密文 C 0 C_0 C0和公钥 p k pk pk

2)Bob:接收密文 C 0 C_0 C0和公钥 p k pk pk。选择两个随机数 b 0 , b 1 b_0, b_1 b0,b1,计算 C ′ = E n c p k ( b 0 ) C'=Enc_{pk}(b_0) C=Encpk(b0),然后计算 C 1 = C 0 b 1 ∗ C ′ = E n c p k ( b 1 v 0 ) ∗ E n c p k ( b 0 ) = E n c p k ( b 1 v 0 + b 0 ) C_1=C_0^{b_1}*C' = Enc_{pk}(b_1v_0)*Enc_{pk}(b_0)=Enc_{pk}(b_1v_0+b_0) C1=C0b1C=Encpk(b1v0)Encpk(b0)=Encpk(b1v0+b0)
使用公钥 p k pk pk对其财富值 v 1 v_1 v1进行加密 C 2 = E n c p k ( b 1 v 1 + b 0 ) C_2=Enc_{pk}(b_1v_1+b_0) C2=Encpk(b1v1+b0)。发送密文 C 1 C_1 C1 C 2 C_2 C2

3)Alice:接收密文 C 1 C_1 C1 C 2 C_2 C2。使用私钥 s k sk sk从密文 C 1 C_1 C1中获得Alice财富的掩盖值 b 1 v 0 + b 0 b_1v_0+b_0 b1v0+b0,从密文 C 2 C_2 C2中获得Bob财富的掩盖值 b 1 v 1 + b 0 b_1v_1+b_0 b1v1+b0
比较两个的掩盖值的大小,将结果告诉Bob,而不会泄露两方的财富值。

椭圆曲线

椭圆曲线 E = { ( x , y ) ∣ y 2 + A 1 y = x 3 + A 2 x 2 + A 3 x + A 4 } E=\{(x,y)| y^2+A_1y=x^3+A_2x^2+A_3x+A_4\} E={(x,y)y2+A1y=x3+A2x2+A3x+A4}
常用的简化形式: E = { ( x , y ) ∣ y 2 = x 3 + a x + b } E=\{(x,y)| y^2=x^3+ax+b\} E={(x,y)y2=x3+ax+b}

点加法
圆曲线上经过 P P P Q Q Q 两个点的直线与椭圆曲线的交点记作 R = P ⋄ Q R=P \diamond Q R=PQ,根据定义有 P ⋄ Q = Q ⋄ P P \diamond Q=Q \diamond P PQ=QP 以及 O ⋄ ( O ⋄ P ) = P O \diamond (O \diamond P)=P O(OP)=P。继而定义椭圆曲线点加法: P ⊕ Q = O ⋄ ( P ⋄ Q ) P \oplus Q=O \diamond (P \diamond Q) PQ=O(PQ),即加法结果是经过点 P ⋄ Q P \diamond Q PQ 且与 X 轴垂直的直线与椭圆曲线的另外一个交点,简单来说,就是交点 R R R 关于 X 轴的对称点。
在这里插入图片描述
代数加法
P , Q ∈ E p ( a , b ) P, Q \in E_p(a,b) P,QEp(a,b),则
1) P + O = P P+O=P P+O=P
2)如果 P = ( x , y ) P=(x,y) P=(x,y),那么 ( x , y ) + ( x , − y ) = O (x,y)+(x,-y)=O (x,y)+(x,y)=O,即 ( x , − y ) (x,-y) (x,y) P P P的加法逆元,即 − P -P P
3)设 P = ( x 1 , y 2 ) , Q = ( x 2 , y 2 ) P=(x_1,y_2),Q=(x_2,y_2) P=(x1,y2),Q=(x2,y2),则 P + Q = ( x 3 , y 3 ) P+Q=(x_3,y_3) P+Q=(x3,y3)由以下确定
x 3 = λ 2 − x 1 − x 2 (   m o d   p ) x_3=λ^2-x_1-x_2 (\bmod p) x3=λ2x1x2(modp)
y 3 = λ ( x 1 − x 3 ) − y 1 (   m o d   p ) y_3=λ(x_1-x_3)-y_1 (\bmod p) y3=λ(x1x3)y1(modp)
P ≠ Q P\neq Q P=Q时, λ = y 2 − y 1 x 2 − x 1 λ=\frac{y_2-y_1}{x_2-x_1} λ=x2x1y2y1
P = Q P=Q P=Q时, λ = 3 X 1 2 + a 2 y 1 λ=\frac{3X_1^2+a}{2y_1} λ=2y13X12+a

公私钥生成
(1)选择一条椭圆曲线 E p ( a , b ) E_p(a,b) Ep(a,b),并取曲线上一点 P P P作为基点。
(2)选定一个大数 k k k作为私钥,并生成公钥 Q = k P Q=kP Q=kP
加解密
(1)选择随机数 r r r
(2)加密: c = ( r P , m + r Q ) c=(rP, m+rQ) c=(rP,m+rQ)
(3)解密: m + r Q − k ( r P ) = m + r ( k P ) − k ( r P ) = m m+rQ - k(rP) = m + r(kP) - k(rP) = m m+rQk(rP)=m+r(kP)k(rP)=m

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值