crypto4c-ch09-公钥密码学和RSA
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有何缺点?
B
一个有趣的案例
• 兄弟俩为设计简单又安全的协议而争论不休。哥哥提出如下 双方通信协议:假设用户A要将消息M发送给用户B,传输的 消息形式为(发送方的标识,消息正文,接收方的标识)。 1、A将(A, E(PUb, [M, A]), B)发送给B。 2、B发送应答(B, E(PUa, [M, B]), A)给A。 • 弟弟认为该协议不够简单,存在一些冗余,可简化为: 1、A将(A, E(PUb, M), B)发送给B。 2、B发送应答(B, E(PUa, M), A)给A。 • 弟弟的协议确实比较简单,但不如哥哥的协议安全,容易受 到某种形式的攻击。若攻击者X也是该网络中的用户,有自己 的公钥PUx,并能截获A,B之间传输的信息,则攻击者可以 通过某个过程得到A发给B的消息M。他是如何做到的?
•
B
公钥算法用来认证图示
•
私钥 公钥
B
公钥算法用来认证
• 如果你有用户A的公钥Ke,则可鉴别A的身份 • 取随机秘密消息P加密 C = E(P,Ke) • 把密文C交给所谓的”A”,请A来解密
– 除非”A”拥有Kd,否则不能解开
D(C,Kd)=P • 比较A解出的明文P是否正确 • 如果A能正确解密,则”A”是所声称的A
i
bi
c f
9
1
1 7
8
0
2 49
7
0
4
6
0
8
5
1
17
4
1
35
3
0
70
2
0
1
0
67
0
0
1
140 280 560
157 526 160 241 298 166
B
快速模幂算法举例
计算 f = 7^560 mod 561
» 560 表示为 1000110000
f = (f×f) mod n; c = 2×c if bi = 1 then f = (f×a) mod n; c = c+1
B
公钥密码体制的应用
• 加密/解密:如RSA,椭圆曲线密码 • 数字签名:如RSA,椭圆曲线密码,DSS • 密钥交换:如RSA,DH
B
构造公钥算法的考虑
• 对称算法
– 代换 – 置换
• 基于某些数学特性
– 从公钥推导私钥理论可能,但计算困难 (从私钥到公钥容易)
• 单向函数(one-way function)
0
1
0
67
0
0
1
140 280 560
157 526 160 241 298 166
B
快速模幂算法举例
计算 f = 7^560 mod 561
» 560 表示为 1000110000
f = (f×f) mod n; c = 2×c if bi = 1 then f = (f×a) mod n; c = c+1
• 加密 – 明文分组M作为整数须小于n C = Me mod n ed ≡ 1 modφ(n) • 解密 M = Cd mod n = Med mod n • 满足条件 – 存在e, d, n,使得 M = Med mod n 成立; – 计算 Me mod n 和 Cd mod n 是容易的; – 由 e, n 确定 d 是不可行的。
B
公钥算法用来认证
• 如果你(Bob)已经公布自己的公钥Ke,则他人 可鉴别你发出的消息(及你的身份) • 对于消息P,使用你的私钥加密 C = E(P,Kd) • 他人可把密文C用你的公钥解密 D(C,Ke)= P • 可以确信P必然是由你加密成C的,因为加密 需要的私钥只有你有。
B
公钥算法用来认证概念图示
B
快速模幂算法举例
计算 f = 7^560 mod 561
» 560 表示为 1000110000
f = (f×f) mod n; c = 2×c if bi = 1 then f = (f×a) mod n; c = c+1
i
bi
c f
9
1
1 7
8
0
2 49
7
0
4
6
0
8
5
1
17
4
1
35
3
0
70
2
B
RSA算法参数建立
• 找素数 – 选取两个大素数p和q • 计算模数n和欧拉函数φ(n) – n = pq – φ(n) = (p-1)(q-1) • 找 ed ≡ 1 modφ(n) – 选取数e,用扩展的欧几里德算法求数d • 发布 – 发布(e, n),这是公钥 ke – d保密,(d, n)是私钥 kd
i
bi
c f
9
1
1 7
8
0
2 49
7
0
4
6
0
8
5
1
17
4
1
35
3
0
70
2
0
1
0
67
0
0
1
140 280 560
157 526 160 241 298 166
B
快速模幂算法举例
计算 f = 7^560 mod 561
» 560 表示为 1000110000
f = (f×f) mod n; c = 2×c if bi = 1 then f = (f×a) mod n; c = c+1
B
公钥密码算法的思路
• 对称算法的缺陷
– 为事先获得密钥,需另外的安全信道或KDC – 不能满足签名的需求
• 公钥算法(6个组成部分)
密钥 K =(Kd,Ke),Kd即私钥 Ke即公钥 加密:E(P,Ke)= C 解密:D(C,Kd)= P 要求从Ke Kd
• 理论上能够
实际上因需要计算量太大因而难以实施
B
公钥算法加密
• 加密(如果有人要给用户A发送消息P)
– 他先获得该用户的公钥Ke – 加密
C = E(P,Ke) D(C,Kd)= P
• 传输 • 解密
– 除非拥有Kd,像用户A,否则不能解密
* 一般用于传输会话密钥(和签名及认证)
B
公钥算法用来加密概念图示
•
B
公钥算法用来加密图示
•
公钥
私钥
• 解密 C=66
M=Cd mod n = 6677 mod 119=19
B
a^b mod n 模幂运算
• 97221 mod 2003 (都在模2003意义下) 97221 = 97128+64+16+8+4+1 = 97128 9764 9716 978 974 971 • 依次计算971、 972、 974、 978、 9716… 97128
• 举例
– 魔方的置乱/恢复
• 如果有口诀,就能很快恢复
– 加密/解密
B
单向散列函数
• 单向散列函数
m 任意长度,h 定长 – 有的散列函数并不满足单向(抗冲突)性质 – 密码学上用的散列函数都是指单向散列函数
h = H(m),其中
• 抗冲突性质
– 给定h,找 m 满足 H(m)=h 很难 – 给定m,找 m’ 满足 H(m’)=H(m) 很难 – 直接找 m1和m2 满足 H(m1)=H(m2) 很难
B
9.1 公钥密码体制的基本原理
• 公钥算法的思路的提出本身就是一个进步。 遵从公钥体制能够简化密钥管理,能够实现 数字签名等安全特性。 • 和DES等对称算法不同,公钥体制的形式和 结构导致公钥算法必须使用某种数学结构, 而不能再使用代换和置换等初等方法。 • 从形式上看,公钥算法将比对称算法更简洁 和易于理解。
B
RSA 计算实例
• 选 p=7,q=17
则 n=pq=119 且φ(n)=(p-1)(q-1)=6×16=96
• 取 e=5
则 d=77 (5×77=385=4×96+1≡1 mod 96)
• 公钥(5,119),私钥(77,119) • 加密 M=19
则 C=Me mod n = 195 mod 119 = 66
B
消息来源鉴别和数字签名
• 假设使用加解密操作对称的算法如RSA • 对消息H签名(整条消息或部分):
S = Sig(H,Kd)
• 接收方对消息H验证:
Ver(C,Ke) ?= H • 消息H必然是Kd的持有人签署的
B
结合使用加密和签名
• 有消息要发给对方,要署名且保密传递 • 发送方:先用自己的私钥签名 • 发送方:再用对方的公钥加密 • 发送 • 接收方:先用自己的私钥解密 • 接收方:再用对方的公钥验证签名是否有效
i
bi
c f
9
1
1 7
8
0
2 49
7
0
4
6
0
8
5
1
17
ห้องสมุดไป่ตู้
4
1
35
3
0
70
2
0
1
0
67
0
0
1
140 280 560
157 526 160 241 298 166
B
32
66
77
mod 119 66
1 4 8 32 32
mod 119 ( 66 67 86 86 86 ) mod 119 19
B
快速模幂算法
计算 f = a^b mod n f = 1; c = 0 For each bit of b = bkbk-1…b0 f = (f×f) mod n; c = 2×c if bi = 1 then f = (f×a) mod n; c = c+1 End For
• 单向性 • 单向函数
– 函数值计算很容易:已知x,很容易计算y = f(x) – 逆计算是不可行的:已知y,很难计算x = f-1(y) • 困难程度
• 举例
– 打碎/拼接、平方/开方、乘法/分解
* 单向函数是否存在
– 尚无严格的数学证明
B
单向陷门函数
• 单向陷门函数
– 如果知道某个陷门(秘诀),就能容易恢复x – (陷门即为私钥)
B
公钥算法参数建立
• 每个用户生成密钥对(Ke、Kd)
– Ke或Kd是一个数(大数)
• 而不是随机比特(对称算法中)
– Ke需要公开 – Kd得自己秘密保留(本地产生,不需要传输) (公钥 public key 私钥private key 密钥 secret key)
• 公钥的发布
– 从Ke推导Kd的困难性使Ke不怕被公开 – 公钥Ke要在专门机构(CA)登记
B
第9章 公钥密码学和RSA
• 9.1 公钥密码体制的基本原理
– 公钥密码体制的基本概念 – 公钥密码体制的应用 – 对公钥密码的要求
• 9.2 RSA算法
B
密码学的重要进步
• 从Rotor到DES
– 都是基于代换和置换等初等方法
• 密码学的新方向
• Whitfield Diffie, Hellman 1976
B
对公钥算法的要求
• 公钥算法应满足以下条件:
– 产生密钥对在计算上容易 – 使用公钥加密在计算上容易 – 使用私钥解密在计算上容易 – 已知公钥确定私钥在计算上不可行 – 已知公钥和密文恢复明文在计算上不可行 – 加密和解密对称
B
单向函数
• 单向函数 • 单向陷门函数
• 单向散列函数
B
单向函数
• 举例
– MD5、SHA1
B
9.2 RSA算法
• 作者
– 1977年,R, S, A
• Ron Rivest • Adi Shamir • Len Adleman
• 基本参数
– 分组密码算法 – 基于整数乘法 – 明/密文分组以及公/私钥被看作小于n的整数 – 加/解密是模幂运算
B
RSA 加解密
i
bi
c f
9
1
1 7
8
0
2 49
7
0
4
6
0
8
5
1
17
4
1
35
3
0
70
2
0
1
0
67
0
0
1
140 280 560
157 526 160 241 298 166
B
快速模幂算法举例
计算 f = 7^560 mod 561
» 560 表示为 1000110000
f = (f×f) mod n; c = 2×c if bi = 1 then f = (f×a) mod n; c = c+1
– 提出了公钥密码算法的概念和思路 – 提出了数字签名问题 – 提出了DH密钥交换协议
B
澄清误解
• 公钥算法更安全
– 不能简单比较
• 传统对称算法已经过时
– 事实上,现在使用的是混合密码体制
• 公钥体制避免了传统KDC带来的麻烦
– 事实上,证书体制有其优点但绝非简单
• 公钥算法就是RSA
– RSA只是当前最重要的公钥算法
B
一个有趣的问题
• 有人提出一种方法,可用来确认你的密钥是否与另 一人的相同。你首先产生一个与密钥等长的随机二 进制串P,并将其与密钥K1异或,然后把结果C发给 另一人。对方将收到的二进制串C与自己的密钥K2 异或,再将结果P’发回给你。你将P’与P进行核对, 就可以知道两个密钥K1和K2是否相同,在整个过程 中没有发送真正的密钥。 • 这种方法中有一个缺点,你看出来了吗? • 攻击者可以截获传输的信息C和P’,当两个密钥K1和 K2相同时,C = P⊕K1,P’ = C⊕K2 = C⊕K1 = P, 则攻击者得到 K1 = K2 = C⊕P。
66 mod 119 66
1
66 66
2
mod 119 72 mod 119 ( 72 72 ) mod 119 67
4
66 mod 119 ( 67 67 ) mod 119 86
8
66 66
16
mod 119 ( 86 86 ) mod 119 18 mod 119 (18 18 ) mod 119 86