赞
踩
●1976年,美国斯坦福大学电气工程系的研究员Diffie和Hellman教授在奠基性论文“密码学的新方向”中提出公开密钥密码体制的概念,旨在解决网络通信的两大安全问题:保密与认证。
●公钥密码体制的基础,是计算复杂度理论(对称密码体制的基础是混淆和扩散)。其安全性主要取决于构造算法所依赖的数学难题。
单向函数/单向陷门函数
计算上困难问题/NP完全问题
(注意:这里的函数f必须是单向函数,否则由已知的函数结果K以及自己的公开密钥可以推出对方的私钥,这不是我们希望的结果)
用于构造双钥密码的单向函数:多项式求根、离散对数DL(Elgamal、DH)、大整数分解FAC(RSA、Rabin)、Diffie-Hellman问题(DHP)
公钥密码体制所基于的三大传统困难问题:有限域上的离散对数问题、大整数分解问题、椭圆曲线上的离散对数问题
单射
令函数f是集A到集B的映射,用f:A→B表示。若对于任意x1≠x2,x1,x2∈A,有f(x1)≠f(x2),则称f为单射,或1-1映射,或可逆的函数。
单向函数
一个可逆函数f:A→B,若它满足:
陷门单向函数
陷门单向函数是一类满足下述条件的单向函数:
fz:Az→Bz,z∈Z,Z是陷门信息集合。
区别:单向函数是求逆困难的函数,而陷门单向函数是在不知道陷门信息下求逆困难的函数。当知道陷门信息后,求逆易于实现。
注意:公钥加密都是基于数学难题产生的,计算开销特别大,因此只有在迫不得已的情况下才使用公钥加密,对于大批量的报文还是采用对称加密算法
混合模式
使用公钥加密进行对称密钥的分发,使用对称加密进行应用数据的保密通信。
每个用户都拥有两个密钥:公钥和私钥
公钥密钥体制解决了密钥的发布和管理问题
密钥分发
消息加密
数字签名
比如:https协议就是http协议加tls协议,tls协议是一个网络安全协议主要包括两个子协议——握手协议和记录协议,其中握手协议就在两个实体之间建立一个公共的密钥k,在记录协议阶段就可以凭借密钥k使用对称加密算法进行应用层数据的保密。
RSA是一种分组密码,其理论基础是一种特殊的可逆模指数运算,其安全性基于大整数分解的困难性;既可用于消息加密,也可用于数字签名;硬件实现时比DES慢约1000倍,软件实现时比DES慢约100倍;目前多使用RSA公司的PKCS系列标准;RSA-155(密钥长度为512bit)于1999年被破解。
密钥生成算法(选、算、选、算)
加解密算法
密钥选择
- 模数大于1024bit,p,q为大素数
- p - 1, q - 1有大的素因子
- p + 1, q + 1也要有大的素因子
- e不能太小,例如e值为3,17,65537,(216+1)(这些数字的二进制都只有两位1,在计算加密变换me可以通过快速幂加快计算速度;解密变换时解密方知道p和q,可以通过中国剩余定理加快计算速度)
- 注:这里的大素数选择,通常通过先产生伪随机数然后对产生的伪随机数判断是否是满足条件的素数,如果满足则采纳,如果不满足则再产生伪随机数进行判断。
使用
特点
RSA算法的安全性主要基于模n分解的困难性,即给定两个大素数p和q,p * q = n,计算它们的乘积n是简单的,但是由n分解出p和q是困难的,注意这里的困难程度与n的大小有关,这里的n必须足够大
常见的攻击方法
理论上,RSA的安全性取决于模n分解的困难性。
采用广义域筛所需计算机资源
密钥长(bit) | 所需MIPS年 |
---|---|
116 | 400 |
129 | 5000 |
512 | 30000 |
768 | 200 000 000 |
1024 | 300 000 000 000 |
2048 | 300 000 000 000 000 |
现代计算机的性能远超于MIPS(每秒百万条指令)数量级,一般选择1024bit长的密钥才能保证安全
单钥和双钥密码在相同安全性下的等价密钥长度
单钥体制 | RSA体制 |
---|---|
56 b | 384 b |
64 b | 512 b |
80 b | 768 b |
112 b | 1792 b |
128 b | 2304 b |
EIGamal于1985年基于离散对数问题提出了一个既可用于数字签名又可用于加密的密码体制;(此方案的修改版被NIST采纳为美国的数字签名标准DSS)
密钥生成算法
加密算法
解密算法
注意:加密方在每次加密时都会重新选择一个随机数k而不会重用之前的随机数,也就是说Elgamal每次加密相同信息时得到的结果是不同的
Elgamal在加密时会产生两个密文具有一个密文的扩张增加了通信的开销
有学者认为RSA是直线型的密码算法是一维的,Elgamal是平面型的密码算法是二维的,因为它需要发送方交互,即发送方也产生一部分密文信息(随机数k)来进行密码算法的完成,RSA算法则不需要发送方产生密文信息
D-H协议可以抵抗被动攻击,但不能抵抗中间人攻击。
中间人攻击:通过拦截正常的网络通信数据,对通信内容进行嗅探和篡改,在这一过程中,正常通信的双方往往毫不知情。
椭圆曲线作为代数几何中的重要问题已有一百多年的研究历史。1985年,N. Koblitz和V. Miller才将其独立引入密码学中,使其成为构造公钥密码体制的一个有力工具。
我们知道有限域上的椭圆曲线点集可以构成群,在此群上定义离散对数系统,可以构造出基于有限域上离散对数问题的公钥密码体制。
椭圆曲线密码体制的安全性基于ECC离散对数问题,目前尚未发现明显的弱点。在公钥密码的标准化过程中,IEEE P1363标准已经采用了ECC。
相比于RSA密码体制,椭圆曲线密码体制最大的优势在于可以使用比 RSA 更短的密钥来获得相同水平的安全性,从而使计算量大大减少。
ECC的密钥长度 | RSA的密钥长度 | MIPS年 | ECC:RSA密钥长度比 |
---|---|---|---|
106 | 512 | 104 | 1:5 |
132 | 768 | 108 | 1:6 |
160 | 1024 | 1011 | 1:7 |
210 | 2048 | 1020 | 1:10 |
600 | 21000 | 1078 | 1:35 |
因此,椭圆曲线适合于存储空间受限、通信能力受限的环境中:
实数域上的椭圆曲线可以定义为满足方程:y2 = x3 + ax + b的所有点(x, y)的集合。
注意:椭圆曲线并不是椭圆,只因为该方程与计算椭圆周长的方程相似。
可以证明:如果x3 + ax + b没有重复因子,或者满足4a3 + 27b2≠0,那么椭圆曲线上的点集E(a, b)可构成一个Abel群。
椭圆曲线群包括所有曲线上的点以及一个特殊的点,我们称其为无限远点O。
椭圆曲线实例
一、P + Q = R
P,Q都取一般点的计算,连接P,Q作延长线与曲线交于点-R,取交点-R与x轴的对称点R即可得到P+Q的值
二、P + (-P) = O
当Q取-P即P,Q连线与x轴垂直时,P + (-P)的结果是无穷远点
三、2P = P + P = R
当Q等于P时,做P点的切线,与曲线交于点-R,取-R关于x轴的对称点就是2P的结果R
有限域GF(p)上的椭圆曲线 y2 = x3 + ax+ b,其点集(x, y)构成有限域上的Abel群,记为Ep(a, b)。条件为:
4a3 + 27b2 ≠ 0 mod p
设P = (x1,y1),Q = (x2,y2), P + Q = (x3, y3)
计算公式与之前实数域上的相同,只需要再加一个模p
当P ≠ Q时:
λ = (
y
2
−
y
1
x
2
−
x
1
\frac{y_2-y_1}{x_2-x_1}
x2−x1y2−y1) mod p
x3 = (λ2 - x1 - x2) mod p
y3 = (λ(x1 - x3) - y1) mod p
当P = Q时:
λ = (
3
x
1
2
+
a
2
y
1
\frac{3x_1^2 + a}{2y_1}
2y13x12+a) mod p
x3 = (λ2 - x1 - x2) mod p
y3 = (λ(x1 - x3) - y1) mod p
(0,1) | (6,4) | (12,19) |
---|---|---|
(0,22) | (6,19) | (13,7) |
(1,7) | (7,11) | (13,16) |
(1,16) | (7,12) | (17,3) |
(3,10) | (9,7) | (17,20) |
(3,13) | (9,16) | (18,3) |
(4,0) | (11,2) | (18,20) |
(5,4) | (11,20) | (19,5) |
(5,19) | (12,4) | (19,18) |
y2 mod p = (x3 + ax + b) mod p (1)
系数满足: 4a3 + 27b2 ≠ 0 mod p (2)
说明:对于有限域GF(p)上的椭圆曲线,使用变元和系数均在0到p-1的整数集上取值的三次方程,其中p是大素数,所执行的运算均为模p运算。
例如: a=1,b=1,p=23, 椭圆曲线E23(1,1)系数可满足(2)式:
4 × 13 + 27 × 12 = 31 mod 23 ≠ 0
且x=9,y=7时,(1)式的两边分别为:
72 mod 23 = (93 + 9 + 1) mod 23
49 mod 23 = 739 mod 23
3 mod 23 = 3 mod 23 相等,所以(9,7)在曲线上
将表格中的点在图像上表示出来,可以看到曲线上的点都是离散分布的
例如: E23(1,1)为一椭圆曲线,设P=(3,10), Q=(9,7),则:
λ = (
y
2
−
y
1
x
2
−
x
1
\frac{y_2-y_1}{x_2-x_1}
x2−x1y2−y1) mod p
x3 = (λ2 - x1 - x2) mod p
y3 = (λ(x1 - x3) - y1) mod p
可以求出:
λ = (
7
−
10
9
−
3
\frac{7-10}{9-3}
9−37−10) mod 23 = (
−
1
2
\frac{-1}{2}
2−1) mod 23 = 11
x3 = (112 - 3 - 9) mod 23 = 109 mod 23 = 17
y3 = (11 × (3 - 17) - 10) mod 23 = -164 mod 23 = 20
所以:
P+Q=(17,20)
可以看出P+Q仍然为椭圆曲线E23(1,1)上的点
设P=(3,10),则2P的计算为:
λ = (
3
x
1
2
+
a
2
y
1
\frac{3x_1^2 + a}{2y_1}
2y13x12+a) mod p
x3 = (λ2 - x1 - x2) mod p
y3 = (λ(x1 - x3) - y1) mod p
可以求出:
x3 = 7,y3 = 12
所以:2P=(7,12)
可以看出: 2P仍然为椭圆曲线E23(1,1)上的点。
同理,我们可以求出: 4P=P+P+P+P
为了使用椭圆曲线构造公钥密码体制,需要找出椭圆曲线上的数学难题。
椭圆曲线上的离散对数问题——ECDLP
在椭圆曲线构成的Abel群Ep(a,b)上,考虑方程: Q=kP,
其中P,Q∈Ep(a,b),k<p
由 k 和 P 计算 Q 非常容易;
而由 P ,Q 计算 k 则非常困难。
由于Diffie-Hellman以及EIGamal是基于有限域上的离散对数问题构造的公钥体制,因此我们也可以采用椭圆曲线来构造它们。
至此,A和B共同拥有密钥K= nAnBG。攻击者如果想获得密钥K,他就必须由 PA和G求出nA ,或者由 PB和G求出nB , 而这等价于求椭圆曲线上的离散对数问题ECDLP,因此是不可行的。
举例说明
可见,此时A和B共享密钥是一对数据(161, 169)。如果在后续采用单钥体制加密时,可以简单地取其中的一个坐标,比如x坐标161,或x坐标的一个简单函数作为共享的密钥进行加密/解密运算
准备阶段
A选择一小于n的整数nA作为私钥,由PA=nAG产生Ep(a,b)上的一点作为公钥。
B选取自己的私钥nB,并计算自己的公钥PB=nBG。
加密阶段
若A要将消息m加密后发给B,则A选择一个随机数k, 计算: C={C1, C2}={ kG,m+ kPB}
解密阶段
B收到密文C后,需用C2减去C1与B的私钥之乘积得到消息m:
(m + kPB) - (nBkG) = m + k(nBG) - nBkG = m
举例说明
2010年12月17日,国家密码管理局颁布了中国商用公钥密码标准算法SM2。SM2是一组基于椭圆曲线的公钥密码算法。国家密码管理局公告(第21号)详细描述了SM2系列算法。
特点
SM2椭圆曲线公钥密码算法推荐使用256位素数域GF(p)上的椭圆曲线,椭圆曲线方程描述为:y2 = x3 + ax + b
曲线参数:
p=FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF
a=FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC
b=28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93
n=FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123
基点G(xG, yG):
xG=32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7
yG=BC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0
SM2椭圆曲线公钥加解密算法涉及3类辅助函数:
辅助函数的安全性直接影响加密算法的安全性。
因此,实际使用SM2加解密算法时应使用标准中指定的辅助函数。
用户A的密钥对包括其私钥d和公钥P,其中:
功能总结
部分其他公钥密码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。