一些数论知识
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)=p−1。
证明:因为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) a≡b(modm),读作a同余于b模m。
性质:
1)若
a
≡
b
(
m
o
d
m
)
a ≡ b(\bmod m)
a≡b(modm)、
c
≡
d
(
m
o
d
m
)
c ≡ d(\bmod m)
c≡d(modm),则
a
+
c
≡
b
+
d
(
m
o
d
m
)
a+c ≡ b+d(\bmod m)
a+c≡b+d(modm)
2)若
a
≡
b
(
m
o
d
m
)
a ≡ b(\bmod m)
a≡b(modm)、
c
≡
d
(
m
o
d
m
)
c ≡ d(\bmod m)
c≡d(modm),则
a
∗
c
≡
b
∗
d
(
m
o
d
m
)
a*c ≡ b*d(\bmod m)
a∗c≡b∗d(modm)
4、乘法逆元
如果 a b ≡ 1 ( m o d m ) ab ≡ 1(\bmod m) ab≡1(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 a∗b∗cmodn=[(amodn)(bmodn)(cmodn)]modn
注:目前已知512bit的非对称密钥可以被破解,通常选择非常大的素数
RSA
RSA加密算法的安全性是基于对极大整数做因数分解的困难。
RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥(公钥,私钥),使用公钥加密,私钥解密。公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。
1、密钥生成
1)选两个大质数p, q,越大越安全
2)计算
n
=
p
∗
q
n=p*q
n=p∗q
3)计算 n 的欧拉函数:
φ
(
n
)
=
(
p
−
1
)
(
q
−
1
)
φ(n)=(p-1)(q-1)
φ(n)=(p−1)(q−1)
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
(e∗d−1)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+i∗q
两边同时乘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+i∗q∗t∗p=m+i∗t∗n
两边对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+i∗t∗n)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=p∗q
加密
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)=(m1∗m2)emodn=Enc(m1∗m2)
2、paillier加法同态
密钥生成
1)选择两个大质数p, q
2)计算
n
=
p
∗
q
n=p*q
n=p∗q,
λ
=
l
c
m
(
p
−
1
,
q
−
1
)
λ=lcm(p-1, q-1)
λ=lcm(p−1,q−1)
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)=nx−1(解空间),计算模反元素
μ
=
(
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=(gm∗rn)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∗(r1∗r2)n)modn2=Enc(m1+m2)
正确性证明
卡米切尔定理(Carmichael’s function):
r
n
λ
≡
1
m
o
d
n
2
r^{nλ} ≡ 1 \bmod n^2
rnλ≡1modn2
泰勒展开:
(
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=((gm∗rn)modn2)λmodn2=(gmλ∗rnλ)modn2=gmλmodn2=(1+n)mλmodn2=(1+n∗m∗λ)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=p∗q ,且 p 与 q 互素,存在同构
Z
n
≃
Z
p
∗
Z
q
\mathbb{Z}_n \simeq \mathbb{Z}_p * \mathbb{Z}_q
Zn≃Zp∗Zq,使得在
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=C0b1∗C′=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=P⋄Q,根据定义有
P
⋄
Q
=
Q
⋄
P
P \diamond Q=Q \diamond P
P⋄Q=Q⋄P 以及
O
⋄
(
O
⋄
P
)
=
P
O \diamond (O \diamond P)=P
O⋄(O⋄P)=P。继而定义椭圆曲线点加法:
P
⊕
Q
=
O
⋄
(
P
⋄
Q
)
P \oplus Q=O \diamond (P \diamond Q)
P⊕Q=O⋄(P⋄Q),即加法结果是经过点
P
⋄
Q
P \diamond Q
P⋄Q 且与 X 轴垂直的直线与椭圆曲线的另外一个交点,简单来说,就是交点
R
R
R 关于 X 轴的对称点。
代数加法
设
P
,
Q
∈
E
p
(
a
,
b
)
P, Q \in E_p(a,b)
P,Q∈Ep(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=λ2−x1−x2(modp)
y
3
=
λ
(
x
1
−
x
3
)
−
y
1
(
m
o
d
p
)
y_3=λ(x_1-x_3)-y_1 (\bmod p)
y3=λ(x1−x3)−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}
λ=x2−x1y2−y1
当
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+rQ−k(rP)=m+r(kP)−k(rP)=m