基本概念
对称密钥缺陷
- 密钥分配
- 很难实现秘密的安全信道协商加密密钥。
- 密钥管理
- 任何两个用户之间都需要有共享的密钥。
- 用户量很大时,系统开销很大。
- 没有签名功能
- 当主体
A
收到主体B
的电子文档时,无法向第三方证明此文档来自B
。 - 单钥加密无法实现抗抵赖的需求。
- 当主体
公钥密码作用
- 公钥加密
- 用于加密任何消息。
- 任何人可以使用公钥加密消息,只有私钥拥有者可以解密。
- 数字签名
- 生成对某消息的数字签名。
- 私钥的拥有者生成数字签名,任何人可用公钥验证签名。
- 密钥分配
- 用于交换秘密信息,常用于协商对称密钥。
- 采用公钥加密的算法实现密钥分配。
- 可使用单独设计的密钥交换算法(
DH
密钥交换协议)。
- 理论基础
- 陷门单向函数
**单向函数:**已知
x
易求y=f(x)
;已知y
难求对应的x
。
**陷门单向函数:**在单向函数基础上,若知道陷门t
,易求y
对应的x
。
公钥密码体制
- 生成密钥对
- 公钥在系统被公开。
- 私钥由本人保管。
满足要求
- 接收方产生密钥对在计算上是容易的。
- 发送方对消息加密产生密文在计算上是容易的。
- 接收方用自己的私钥解密在计算上是容易的。
- 敌方由公钥求私钥在计算上是不可行的。
- 敌方由密文和公钥恢复明文在计算上是不可行的。
设计关键就是要找出合适的陷门单向函数。
困难问题
- 大整数分解问题
- 已知两个大素数
p
和q
,求n=pq
是容易的; - 而由
n
求p
和q
是困难的。
- 已知两个大素数
- 离散对数问题
- 大素数
p
,其中p-1
包含另一个大素数因子q
,可构造一个乘法群,它为p-1
阶循环群; g
是一个生成元(1<g<p-1
);- 已知
x
,求y=g^x mod p
是容易的; - 已知
y
、g
、p
,求x
是困难的。
- 大素数
- 多项式求根问题
- 已知系数序列
{a}
、p
、x
,求y
是容易的; - 已知系数序列
{a}
、y
,求x
是困难的。
y = f ( x ) = x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 ( m o d p ) y=f(x)=x^n+a_{n-1}x^{n-1}+...+a_1x+a_0\pmod p y=f(x)=xn+an−1xn−1+...+a1x+a0(modp)
- 已知系数序列
- 二次剩余问题
- 已知合数
n
和整数a
,判断a
是否为mod n
的二次剩余。
是 否 存 在 x , 使 得 x 2 ≡ a ( m o d n ) 是否存在x,使得x^2\equiv a\pmod n 是否存在x,使得x2≡a(modn)
- 已知合数
RSA
密钥产生
- 选取大素数
p
和q
(100-200
位十进制数字); - 计算
n=pq
,其欧拉函数为:
ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n)=(p-1)(q-1) ϕ(n)=(p−1)(q−1) - 随机选取一整数
e
,保证:
1 ≤ e < ϕ ( n ) , g c d ( ϕ ( n ) , e ) = 1 1 \leq e < \phi(n),gcd(\phi(n),e)=1 1≤e<ϕ(n),gcd(ϕ(n),e)=1 - 计算
e
的逆元d
:
d = e − 1 ( m o d ϕ ) ( n ) d=e^{-1}\pmod \phi(n) d=e−1(modϕ)(n) - 以
n
、e
为公钥,d
为私钥。
加解密
- 加密
c = m e ( m o d n ) c=m^e \pmod n c=me(modn) - 解密
m = c d ( m o d n ) m=c^d \pmod n m=cd(modn) - 解密正确性
c d ( m o d n ) ≡ m e d ( m o d n ) ≡ m k ϕ ( n ) + 1 ( m o d n ) c^d \pmod n \equiv m^{ed} \pmod n \equiv m^{k\phi(n)+1}\pmod{n} cd(modn)≡med(modn)≡mkϕ(n)+1(modn)
1.m
与n
互素,由欧拉定理得:
m ϕ ( n ) ≡ 1 ( m o d n ) m k ϕ ( n ) ≡ 1 ( m o d n ) m k ϕ ( n ) + 1 ≡ m ( m o d n ) ∴ c d ( m o d n ) ≡ m m^{\phi(n)}\equiv 1 \pmod{n}\\ m^{k\phi(n)}\equiv 1 \pmod{n}\\ m^{k\phi(n)+1}\equiv m \pmod{n}\\ \therefore c^d \pmod{n} \equiv m mϕ(n)≡1(modn)mkϕ(n)≡1(modn)mkϕ(n)+1≡m(modn)∴cd(modn)≡m
2.m
与n
不互素:
L e t m = c p , 1 ≤ m ≤ n , 1 ≤ c ≤ q ∵ g c d ( m , q ) = 1 a n d E u l e r t h e o r e m m ϕ ( q ) ≡ 1 ( m o d q ) [ m k ϕ ( q ) ] ϕ ( p ) ≡ ( m o d q ) m k ϕ ( n ) ≡ 1 ( m o d q ) T h e r e i s a n i n t e g e r r , l e t m k ϕ ( n ) = 1 + r q M u l t i p l y b o t h s i d e s b y m = c p m k ϕ ( n ) + 1 = m + r c p q = m + r c n m k ϕ ( n ) + 1 = m ( m o d n ) ∴ c d ( m o d n ) ≡ m Let\ m=cp,1\leq m \leq n,1 \leq c \leq q\\ \because gcd(m,q)=1\ and\ Euler\ theorem\\ m^{\phi(q)}\equiv 1\pmod q\\ [m^{k\phi(q)}]^{\phi(p)}\equiv \pmod q\\ m^{k\phi(n)}\equiv 1\pmod q\\ There\ is\ an\ integer\ r,let\ m^{k\phi(n)}=1+rq\\ Multiply\ both\ sides\ by\ m = cp\\ m^{k\phi(n)+1}=m+rcpq=m+rcn\\ m^{k\phi(n)+1}=m\pmod n\\ \therefore c^d \pmod n\equiv m Let m=cp,1≤m≤n,1≤c≤q∵gcd(m,q)=1 and Euler theoremmϕ(q)≡1(modq)[mkϕ(q)]ϕ(p)≡(modq)mkϕ(n)≡1(modq)There is an integer r,let mkϕ(n)=1+rqMultiply both sides by m=cpmkϕ(n)+1=m+rcpq=m+rcnmkϕ(n)+1=m(modn)∴cd(modn)≡m
安全性
|p-q|
要足够大。p
和q
的长度应该差不多。p-1
和q-1
应有大素因子。gcd(p-1,q-1)
应该很小。
攻击
- 共模攻击
- 设两个用户公钥为
e1
和e2
,且它俩互素。 - 敌手截获密文之后,利用扩展欧几里得算法求出满足
re1+se2=1
的整数r
和s
(其中r
为负数)。
c 1 = m e 1 ( m o d n ) c 2 = m e 2 ( m o d n ) c 1 r c 2 s = ( c 1 − 1 ) − r c 2 s ≡ m ( m o d n ) c_1=m^{e_1}\pmod n\\ c_2=m^{e_2}\pmod n\\ c^r_1c^s_2=(c_1^{-1})^{-r}c_2^s\equiv m \pmod n c1=me1(modn)c2=me2(modn)c1rc2s=(c1−1)−rc2s≡m(modn)
- 设两个用户公钥为
- 低指数攻击
- 每个用户的加密指数很小,且两两互素;
- 利用中国剩余定理可以求出
m^3(mod n1n2n3)
。
c 1 ≡ m 3 ( m o d n 1 ) c 2 ≡ m 3 ( m o d n 2 ) c 3 ≡ m 3 ( m o d n 3 ) c_1\equiv m^3\pmod{n_1}\\ c_2\equiv m^3\pmod {n_2}\\ c_3\equiv m^3\pmod {n_3} c1≡m3(modn1)c2≡m3(modn2)c3≡m3(modn3)
- 选择密文攻击
RSA
是确定性的加密算法,不能抵御*选择密文攻击。
G e t : c 1 = m 1 e ( m o d n ) M a k e : c 2 = c 1 m e ( m o d n ) S o l v e : c 2 = m 2 e ( m o d n ) C a l c u l a t e : m 1 = m 2 m − 1 ( m o d n ) Get:c_1=m_1^e\pmod n\\ Make:c_2=c_1m^e\pmod n\\ Solve:c_2=m_2^e\pmod n\\ Calculate:m_1=m_2m^{-1}\pmod n Get:c1=m1e(modn)Make:c2=c1me(modn)Solve:c2=m2e(modn)Calculate:m1=m2m−1(modn)
ElGamal
密钥生成
- 选择一素数
p
以及小于p
的随机数x
; g
是p
的原根,计算:
y ≡ g x ( m o d p ) y\equiv g^x\pmod p y≡gx(modp)
(y,g,p)
为公钥,x
为私钥。
加解密
- 加密
- 随机选取一个整数
k<p-1
,计算:
c 1 ≡ g k ( m o d p ) c 2 ≡ y k M ( m o d p ) c_1\equiv g^k\pmod p\\ c_2\equiv y^kM\pmod p c1≡gk(modp)c2≡ykM(modp)
- 随机选取一个整数
- 解密
M = c 2 ( c 1 x ) − 1 ( m o d n ) M=c_2(c_1^x)^{-1}\pmod n M=c2(c1x)−1(modn)
特点
- 安全性基于有限域上的离散对数的难解性。
- 加密算法是概率算法。
- 不能抵御选择密文攻击。
- 存在密文扩张。
安全性
- 参数要求
p
应为150
位以上的十进制数/500
位以上的二进制数,p-1
应该有大素因子。
- 密钥要求
- 密钥必须保密,且一次性。
- 选择密文攻击
F o r p l a i n t e x t m , g o t C = ( c 1 , c 2 ) S e l e c t m a n d c a l c u l a t e c ’ = ( c 1 , m c 2 ) D e c r y p t c ’ , g o t M ’ = m M C a c u l a t e M = M ’ / m For\ plaintext\ m, got\ C=(c_1,c_2)\\ Select\ m\ and\ calculate\ c’=(c_1,mc_2)\\ Decrypt\ c’,got\ M’=mM\\ Caculate\ M=M’/m For plaintext m,got C=(c1,c2)Select m and calculate c’=(c1,mc2)Decrypt c’,got M’=mMCaculate M=M’/m
ECC
算法概述
- 采用有限域上的椭圆曲线,即所有系数都是某一有限域
GF(p)
中的元素。 - 方程
Ep(a,b)
:
y 2 ≡ x 3 + a x + b ( m o d p ) a , b ∈ G F ( p ) , 4 a 3 + 27 b 2 ≠ 0 ( m o d p ) y^2\equiv x^3+ax+b\pmod{p}\\ a,b\in GF(p),4a^3+27b^2\neq 0\pmod{p} y2≡x3+ax+b(modp)a,b∈GF(p),4a3+27b2=0(modp)
加法运算
P
=
(
x
1
,
y
1
)
,
Q
=
(
x
2
,
y
2
)
,
P
≠
−
Q
,
P
+
Q
=
(
x
3
,
y
3
)
x
3
=
λ
2
−
x
1
−
x
2
y
3
=
λ
(
x
1
−
x
3
)
−
y
1
λ
=
{
y
2
−
y
1
x
2
−
x
1
,
P
≠
Q
3
x
1
2
+
a
2
y
1
,
P
=
Q
P=(x_1,y_1),Q=(x_2,y_2),P\neq -Q,P+Q=(x_3,y_3)\\ x_3=\lambda^2-x_1-x_2\\ y_3=\lambda(x_1-x_3)-y_1\\ \lambda = \left \{ \begin{aligned} \frac{y_2-y_1}{x_2-x_1},P\neq Q \\ \frac{3x_1^2+a}{2y_1},P=Q \end{aligned} \right.
P=(x1,y1),Q=(x2,y2),P=−Q,P+Q=(x3,y3)x3=λ2−x1−x2y3=λ(x1−x3)−y1λ=⎩⎪⎪⎨⎪⎪⎧x2−x1y2−y1,P=Q2y13x12+a,P=Q
椭圆曲线上的离散对数问题
P ∈ E p ( a , b ) Q = k P P\in E_p(a,b)\\ Q=kP P∈Ep(a,b)Q=kP
P
的阶n
是一个大素数;
P
的阶是满足nP=O
的最小正整数。
- 已知
k
和P
求Q
容易。 - 已知
P
和Q
求k
是困难的。
Diffie-Hellman
密钥交换和ElGamal
密码体制可推广到椭圆曲线来实现。
SM2
基本参数
SM2
基于素数域Fp
,其特征为m
比特长(通常为160
比特)的素数p
。- 长度不小于
192
比特的比特串SEED
。 Fp
上的2
个元素a
和b
,满足:
4 a 3 + 27 b 2 ≠ 0 E ( F p ) : y 2 = x 3 + a x + b ( m o d p ) 4a^3+27b^2\neq 0\\ E(F_p):y^2=x^3+ax+b\pmod p 4a3+27b2=0E(Fp):y2=x3+ax+b(modp)- 基点
G
:
G = ( x G , y G ) ∈ E ( F p ) , G ≠ O G=(x_G,y_G)\in E(F_p),G\neq O G=(xG,yG)∈E(Fp),G=O G
的阶n
为m
长比特的素数,且满足:
n > 2 191 且 n > 4 p n>2^{191}且n>4\sqrt{p} n>2191且n>4p- 余因子
h = ∣ E ( F p ) ∣ n ∣ E ( F p ) ∣ 是 曲 线 E ( F p ) 上 点 的 个 数 h=\frac{|E(F_p)|}{n}\\ |E(F_p)|是曲线E(F_p)上点的个数 h=n∣E(Fp)∣∣E(Fp)∣是曲线E(Fp)上点的个数
加密算法
R a n d o m n u m b e r k C 1 = k G = ( x 1 , y 1 ) S = k P B , P B i s p u b l i c k e y o f B ( x 2 , y 2 ) = k P B t = K D F ( x 2 ∣ ∣ y 2 , l ) , l i s t h e l e n g t h o f t h e p l a i n t e x t m t o s e n d C 2 = M ⊕ t C 3 = H a s h ( x 2 ∣ ∣ M ∣ ∣ y 2 ) O u t p u t C = ( C 1 , C 2 , C 3 ) Random\ number\ k\\ C_1=kG=(x_1,y_1)\\ S=kP_B,P_B\ is\ public\ key\ of\ B\\ (x_2,y_2)=kP_B\\ t=KDF(x_2||y_2,l),l\ is\ the\ length\ of\ the\ plaintext\ m\ to\ send\\ C_2=M\oplus t\\ C_3=Hash(x_2||M||y_2)\\ Output\ C=(C_1,C_2,C_3) Random number kC1=kG=(x1,y1)S=kPB,PB is public key of B(x2,y2)=kPBt=KDF(x2∣∣y2,l),l is the length of the plaintext m to sendC2=M⊕tC3=Hash(x2∣∣M∣∣y2)Output C=(C1,C2,C3)
SM2
用到的哈希函数都是SM3
。
解密算法
V a l i d a t i o n C 1 w h e t h e r t h e e l l i p t i c c u r v e e q u a t i o n i s s a t i s f i e d , o t h e r w i s e e x i t S = h C 1 d B C 1 = ( x 2 , y 2 ) , d B i s p r i v a t e k e y o f B t = K D F ( x 2 ∣ ∣ y 2 , l ) M ’ = C 2 ⊕ t u = H a s h ( x 2 ∣ ∣ M ’ ∣ ∣ y 2 ) I f u = = C 3 , t h e n M ’ = M Validation\ C_1\ whether\ the\ elliptic\ curve\\ equation\ is\ satisfied,\ otherwise\ exit\\ S=hC_1\\ d_BC_1=(x_2,y_2),d_B\ is\ private\ key\ of\ B\\ t=KDF(x_2||y_2,l)\\ M’=C_2\oplus t\\ u=Hash(x_2||M’||y_2)\\ If\ u==C_3,then\ M’=M Validation C1 whether the elliptic curveequation is satisfied, otherwise exitS=hC1dBC1=(x2,y2),dB is private key of Bt=KDF(x2∣∣y2,l)M’=C2⊕tu=Hash(x2∣∣M’∣∣y2)If u==C3,then M’=M
- 正确性
P B = d B G , C 1 = k G = ( x 2 , y 2 ) d B C 1 = d B k G = k ( d B G ) = k P B = ( x 2 , y 2 ) P_B=d_BG,C_1=kG=(x_2,y_2)\\ d_BC_1=d_BkG=k(d_BG)=kP_B=(x_2,y_2) PB=dBG,C1=kG=(x2,y2)dBC1=dBkG=k(dBG)=kPB=(x2,y2)