网络信息安全第三章-1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
n 1 n n 1
n 1
r 0
n 1
gcd( a , b ) r n
例:利用Euclid 算法求gcd(1694,917)
1694 917 1 777
917 777 1 140
777 140 5 77
140 77 1 63
77 631 14 63 14 4 7
公钥密码体制的基本原理
对称密码体制的缺点
• 密钥必须秘密地分配 • 如果密钥被损害了,攻击者就能解密所有消息,并可以假
装是其中一方。
• 密钥分配和管理
传统密钥管理两两分别用一对密钥时,则当用户量增大时密钥空
间急剧增大如: n=100 时C(100,2)=4,995 n=5000时C(5000,2)=12,497,500
• 计算Ø (n)=(p-1)(q-1)
• 选择e , 使它成为是Ø (n)的一个互质数
• 确定d , 使得d*e=1mod Ø (n),并且d< Ø (n)
d为私钥,e为公钥,p、q不再需要,丢弃。
RSA算法描述
2.加密
(1) 把m分成等长数据块m1、m2、…、mi 2s≤n,s要尽可能的大。 (2) 对应的密文是
困难的。
欧几里(Euclid )算法
gcd(a, b) ?
a bq r
1 1 2 1
用于求两个数 的最大公约数
1
0r b 0r r
2 3 1
b rq r
1 2 3
2
r rq r
3
0r r
2
r r q r
n2 n 1 n
n
0r r
n
n 1
r rq r
RSA的实用性
A的 公钥 明 文 密 文 A的 私钥 明 文 明 文
解密密钥Kd
明文m
加密算法E
解密算法D
明文m
公开,其他用户可以像查 找电话号码一样查到
若用户A想向用户B传送一条消息M
用户A M 用户B
对称密钥加密方法 C
用户A Ke
用户B Kd
公开密钥加密方法1
用户A
KeB
查找 找到KeB
C
用户B
KdB
A查到B的公开加密钥KeB,用它加密M后得到C,将C发 给B,B收到C以后,用自己保密的解密钥KdB解密C, 得到明文M
m= cd mod n =123103 mod 143=85,
所以,李先生可以得到张小姐发给他的真正的信息 m=85。
例题:
• 选择p=7,q=17 • N=pq=119, Ø (n)=(p-1)(q-1)=6*16=96 • 选择随机整数e=5,与96互素 • 找出d,使得d*e=1mod96,选择d=77 • 算法 C=Me mod n M=Cd mod n
③ p=p+2rs 直到p为素数。
高次幂的求模算法
C=Me mod p,已知M、e、p,
步骤如下: 将e用二进制表示, e=kt, kt-1, …, k0, ki∈{0, 1}, 0≤i≤t c=1 For i=t~0 C=C2 mod p 若ki=1,则C=C(M mod p) mod p
C?
例 ,求 117 mod 17
• 选择明文19,C=195mod119=66
• 密文66,M=6677mod119=19
RSA算法的安全性
• 对RSA算法的攻击实际上等效于对n的乘积分解。 – 由于M=Cd mod n, n公开,则需要求出d – 由于de=1mod Ø (n), e已知 – 需要求出Ø (n) – 由于Ø (n)=(p-1)(q-1),所以必须求出p,q
若已知两个大素数p, q,求n=p×q仅需一次乘法,但 已知n求p, q则是几千年来数论专家的一道难题。
4 菲-赫尔曼(Diffie-Hellman 给定素数p,可构造一乘群Z*p,令α为Z*p的生成元,
若已知αa, αb,求αab问题为菲-赫尔曼问题。
5 给定一个奇合数n和整数a,决定是否a为mod n平方
剩余问题。
几个典型的公开钥密码系统
• 菲-赫尔曼(Diffie-Hellman)密码系统 • RSA系统
• 背包系统
• 椭圆曲线密码体制
RSA 算法
• RSA公钥算法是由Rivest,Shamir Adleman在1978年提 出来的。 • 该算法的数学基础是初等数论中的Euler (欧拉)定理, 并建立在大整数因子的困难性之上。 • RSA算法起源
欧拉定理
若整数a和m互素,则
aφ(m)≡1
mod m
其中, φ (m)是比m小,且与m互素的正整数个数。
素数
一个大于1的整数,如果它的正因数只有1和它本身,就 叫做质数(素数),否则就叫做合数。
素因子分解
• 数n的因子分解是把它写成其它数的乘积 n=a × b × c • 素因子分解是把一个数写成素数的乘积形式 eg. 91=7×13 • 相对于把因子相乘得到一个数,进行一个数的因子分解是
, ke=1299, ye=1365, nc=1379, ry=2333, pt=2332,
例题:
设张小姐需要发送机密信息(明文)m=85给李先 生,她已经从公开媒体得到了李先生的公开密钥(n,
e)=(143,7),计算密文为:
c= me mod n=857 mod 143=123 并发送给李先生。 李先生在收到密文c=123后,利用只有他自己知道 的秘密密钥(d=103) , 计算:
初始的M。 例如, p=17, q=11, n=pq=187, e=7, m=123。 m1=123, 1237≡183 m2=183, 183+7≡72 m3=72, 72+7≡30 m4=30, 30+7≡123 mod 187 mod 187 mod 187 mod 187
安全素数
所谓安全素数p,应满足: (1) p是一个位数足够大的随机素数; (2) p-1含有一个大的素数因子r; (3) p+1含有一个大的素数因子; (4) r-1含有一个大的素数因子t
方法1缺点
• 任何人都能够冒充用户A给B发消息,B无法察觉
用户A 用户B
KdB
C
查找 此消息对用户A可 能不利 找到KeB
用户C
KeB
结论
方法1无法保证信息的真实性
公开密钥加密方法2用户A来自KdA查找 找到KeA
C
用户B
KeA
A用自己保密的密钥 KdA 加密 M,得到密文C,将C发给B, B收到C以后,查A的公开加密钥 KeA ,用 KeA 解密C后得 到明文 M 。
pu=1520, bl=0111, ic=0802, ke=1004, ye=2404, nc=1302,
ry=1724, pt=1519, io=0814, ns=1418。 利用 ci≡mei mod n ic=1410 io=1751, ns=1289。 加密得:pu=0095, bl=1648,
,块长s,其中
ci≡mei 3. 解密
m i C id
mod n
mod n
例3.2
p=43, q=59, n=pq=43×59=2537 φ(n)=42×58=2436, e=13
对明文public key encryptions,用RSA算法求密文。
(假定s=2)
解:利用Euclid算法求d,解方程
14 7 2 0
得 gcd(1694,917) = 7
RSA算法描述
1.生成RSA密钥
• 选择两个素数p,q,对外界保密 • 计算n=p*q
数字n应该为200位 或者是一个更大的 数字。这样,p和q 都至少在100位。 实际使用中,密钥 至少要1024位。对 于敏感信息,可以 考虑2048位或者以 上
d×e≡1 mod 2436。
2436 13187 5
1 3 2 1
3 (5 3)
13 5 2 3
5 31 2
3 2 1 1
3 2 5
(13 5 2) 2 5
2 1 2 0
13 2 5 5
方法2缺点
用户A KdA C 用户B
截获密文
用户C KeA
用户C获取了明文
查找
找到KeA
结论
方法2无法保证信息的秘密性
公开密钥加密方法3
用户A KeB KdA
查找 找到KeB
C
用户B KdB KeA
查找 找到KeA
用户A
用户B
A用自己保密的密钥KdA加密M, 得到中间密文S
S=D(M,KdA)
如何获得安全素数?
(1) 选择两个指定长度的奇数a, b (2) 在a附近产生随机素数s,在b附近产生随机素数t (3) 由t产生素数r ① r=1+2t; ② 若r非素数,则r=r+2直到r
(4) 由r, s生成p:
① p=(sr-1-rs-1) mod (rs); ② 若p为偶数, 则p=p+rs;
数字签名
公钥密码算法
• 用户选择一对密钥 Ke和 Kd,分别为公钥和私钥, 并构造加密算法 Ee 和解密算法 Ed • C = E(M,Ke) M = D(C,Kd)=D(E(M,Ke),Kd) • 用户公开Ke和Ee
注意: 密钥都是成对生成的,由一个公钥和一个私钥组成。
。
公钥密码的基本思想
加密密钥Ke
– n=pq,所以必须对n进行分解
大素数分解记录
最新纪录
2007年,瑞士洛桑理工学院的Arjen Lenstra宣称,他们 的分布式计算工程在经过11个月的努力后破解了一个307位的 RSA密钥,并且已经有能力在不久后破解700位,因此他警告 说,在五六年后,随着各种计算、破解技术的不断强大,也 许1024位的RSA加密都不能完全保险,人们必须寻求更安全 的加密技术。
单项函数
单向函数是满足下列条件的函数f
–(1)给定x,计算y=f(x)是容易的 –(2)给定y, 计算x使y=f(x)是困难的
(所谓计算x=f-1(Y)困难是指计算上相当复杂已无 实际意义)
用于构造公钥密码常用的单向函数
1 多项式求根 有限域GF(p) y=f(x)=(xn+an-1xn-1+…+a1x+a0) mod p
RSA
问题1. 如何选取大的素数?
若 n |( 2n-2 ),则n为素数。
若p为素数,则Mp=2p-1为素数
Fermat推测Fn=22
n
+1为素数, n为正整数
×
问题2. 有多少素数?
答案是有无穷多个。 素数在数轴上的分布情况是
x ( x) ln x
如x=10, π(x)=4, 该式所含的素数为2、3、5、7。
2 离散对数 如果p是一足够大的素数,a是{0, 1, 2, …, p-1}中与p互素
的数。 则已知p, a, x, 计算 y=f(x)=ax mod p并不困难; 若已 知p, a, y, 计算x=logby mod p,就很困难了。
3 大整数分解(Factorrization Problme)
B接收C
查到B的公开加密钥KeB
B用自己保密的密钥KdB解密C, 得到中间密文S D(C,KdB)=S
A用KeB加密S得到C C=E(S, KeB) A 发C 给B
查到A的公开加密钥KeA E(S,KeA)=M
结论
保证了数据的秘密性和真实性
用KeA解密S得到M
公钥密码应当满足的条件
• 加密算法和解密算法互逆,即对所有明文都有 D(E(M,Ke),Kd)=M • 计算上不能由Ke求出Kd • 算法E和D都是高效的 • E(D(M,Kd),Ke)=M
素数位数 64 bit 所含素数个数 2.05×1017
128 bit
256 bit
1.9×1036
3.25×1074
问题3. 如何产生一个素数?
①概率测试素数法
方法:对于一个给定的大正整数N,每进行一次检验,
给出yes:N 为素数的概率为 1/2,或者no:N不是素数,
若N通过r次检验,则N不是素数的概率为ε=2-r ,则N为 素数的概率为1-ε ,若r足够大(如r=100),则几乎认为
N是素数。
②确定性验证素数法
定理 令 pi+1=hipi+1,若满足下述条件,则pi+1必为素数。 (1) pi是奇素数;
(2) hi<4(pi+1), hi为偶数;
(3) 2
hi pi
1 mod pi1;
(4) 2hi 1 mod pi 1
幂剩余函数的特性
周期性
即反复运算 C=Me mod n 若干次后,将还原为最
13 2 5 (2436 13 187)
937 13 5 2436
左右同时模2436,即 937×13≡1
即取 e=13, d=937
mod
2436
加密
明文public key encryptions,先将明文按两个一组进行 分块,再将明文数字化,如按英文字母表的顺序得:
n 1
r 0
n 1
gcd( a , b ) r n
例:利用Euclid 算法求gcd(1694,917)
1694 917 1 777
917 777 1 140
777 140 5 77
140 77 1 63
77 631 14 63 14 4 7
公钥密码体制的基本原理
对称密码体制的缺点
• 密钥必须秘密地分配 • 如果密钥被损害了,攻击者就能解密所有消息,并可以假
装是其中一方。
• 密钥分配和管理
传统密钥管理两两分别用一对密钥时,则当用户量增大时密钥空
间急剧增大如: n=100 时C(100,2)=4,995 n=5000时C(5000,2)=12,497,500
• 计算Ø (n)=(p-1)(q-1)
• 选择e , 使它成为是Ø (n)的一个互质数
• 确定d , 使得d*e=1mod Ø (n),并且d< Ø (n)
d为私钥,e为公钥,p、q不再需要,丢弃。
RSA算法描述
2.加密
(1) 把m分成等长数据块m1、m2、…、mi 2s≤n,s要尽可能的大。 (2) 对应的密文是
困难的。
欧几里(Euclid )算法
gcd(a, b) ?
a bq r
1 1 2 1
用于求两个数 的最大公约数
1
0r b 0r r
2 3 1
b rq r
1 2 3
2
r rq r
3
0r r
2
r r q r
n2 n 1 n
n
0r r
n
n 1
r rq r
RSA的实用性
A的 公钥 明 文 密 文 A的 私钥 明 文 明 文
解密密钥Kd
明文m
加密算法E
解密算法D
明文m
公开,其他用户可以像查 找电话号码一样查到
若用户A想向用户B传送一条消息M
用户A M 用户B
对称密钥加密方法 C
用户A Ke
用户B Kd
公开密钥加密方法1
用户A
KeB
查找 找到KeB
C
用户B
KdB
A查到B的公开加密钥KeB,用它加密M后得到C,将C发 给B,B收到C以后,用自己保密的解密钥KdB解密C, 得到明文M
m= cd mod n =123103 mod 143=85,
所以,李先生可以得到张小姐发给他的真正的信息 m=85。
例题:
• 选择p=7,q=17 • N=pq=119, Ø (n)=(p-1)(q-1)=6*16=96 • 选择随机整数e=5,与96互素 • 找出d,使得d*e=1mod96,选择d=77 • 算法 C=Me mod n M=Cd mod n
③ p=p+2rs 直到p为素数。
高次幂的求模算法
C=Me mod p,已知M、e、p,
步骤如下: 将e用二进制表示, e=kt, kt-1, …, k0, ki∈{0, 1}, 0≤i≤t c=1 For i=t~0 C=C2 mod p 若ki=1,则C=C(M mod p) mod p
C?
例 ,求 117 mod 17
• 选择明文19,C=195mod119=66
• 密文66,M=6677mod119=19
RSA算法的安全性
• 对RSA算法的攻击实际上等效于对n的乘积分解。 – 由于M=Cd mod n, n公开,则需要求出d – 由于de=1mod Ø (n), e已知 – 需要求出Ø (n) – 由于Ø (n)=(p-1)(q-1),所以必须求出p,q
若已知两个大素数p, q,求n=p×q仅需一次乘法,但 已知n求p, q则是几千年来数论专家的一道难题。
4 菲-赫尔曼(Diffie-Hellman 给定素数p,可构造一乘群Z*p,令α为Z*p的生成元,
若已知αa, αb,求αab问题为菲-赫尔曼问题。
5 给定一个奇合数n和整数a,决定是否a为mod n平方
剩余问题。
几个典型的公开钥密码系统
• 菲-赫尔曼(Diffie-Hellman)密码系统 • RSA系统
• 背包系统
• 椭圆曲线密码体制
RSA 算法
• RSA公钥算法是由Rivest,Shamir Adleman在1978年提 出来的。 • 该算法的数学基础是初等数论中的Euler (欧拉)定理, 并建立在大整数因子的困难性之上。 • RSA算法起源
欧拉定理
若整数a和m互素,则
aφ(m)≡1
mod m
其中, φ (m)是比m小,且与m互素的正整数个数。
素数
一个大于1的整数,如果它的正因数只有1和它本身,就 叫做质数(素数),否则就叫做合数。
素因子分解
• 数n的因子分解是把它写成其它数的乘积 n=a × b × c • 素因子分解是把一个数写成素数的乘积形式 eg. 91=7×13 • 相对于把因子相乘得到一个数,进行一个数的因子分解是
, ke=1299, ye=1365, nc=1379, ry=2333, pt=2332,
例题:
设张小姐需要发送机密信息(明文)m=85给李先 生,她已经从公开媒体得到了李先生的公开密钥(n,
e)=(143,7),计算密文为:
c= me mod n=857 mod 143=123 并发送给李先生。 李先生在收到密文c=123后,利用只有他自己知道 的秘密密钥(d=103) , 计算:
初始的M。 例如, p=17, q=11, n=pq=187, e=7, m=123。 m1=123, 1237≡183 m2=183, 183+7≡72 m3=72, 72+7≡30 m4=30, 30+7≡123 mod 187 mod 187 mod 187 mod 187
安全素数
所谓安全素数p,应满足: (1) p是一个位数足够大的随机素数; (2) p-1含有一个大的素数因子r; (3) p+1含有一个大的素数因子; (4) r-1含有一个大的素数因子t
方法1缺点
• 任何人都能够冒充用户A给B发消息,B无法察觉
用户A 用户B
KdB
C
查找 此消息对用户A可 能不利 找到KeB
用户C
KeB
结论
方法1无法保证信息的真实性
公开密钥加密方法2用户A来自KdA查找 找到KeA
C
用户B
KeA
A用自己保密的密钥 KdA 加密 M,得到密文C,将C发给B, B收到C以后,查A的公开加密钥 KeA ,用 KeA 解密C后得 到明文 M 。
pu=1520, bl=0111, ic=0802, ke=1004, ye=2404, nc=1302,
ry=1724, pt=1519, io=0814, ns=1418。 利用 ci≡mei mod n ic=1410 io=1751, ns=1289。 加密得:pu=0095, bl=1648,
,块长s,其中
ci≡mei 3. 解密
m i C id
mod n
mod n
例3.2
p=43, q=59, n=pq=43×59=2537 φ(n)=42×58=2436, e=13
对明文public key encryptions,用RSA算法求密文。
(假定s=2)
解:利用Euclid算法求d,解方程
14 7 2 0
得 gcd(1694,917) = 7
RSA算法描述
1.生成RSA密钥
• 选择两个素数p,q,对外界保密 • 计算n=p*q
数字n应该为200位 或者是一个更大的 数字。这样,p和q 都至少在100位。 实际使用中,密钥 至少要1024位。对 于敏感信息,可以 考虑2048位或者以 上
d×e≡1 mod 2436。
2436 13187 5
1 3 2 1
3 (5 3)
13 5 2 3
5 31 2
3 2 1 1
3 2 5
(13 5 2) 2 5
2 1 2 0
13 2 5 5
方法2缺点
用户A KdA C 用户B
截获密文
用户C KeA
用户C获取了明文
查找
找到KeA
结论
方法2无法保证信息的秘密性
公开密钥加密方法3
用户A KeB KdA
查找 找到KeB
C
用户B KdB KeA
查找 找到KeA
用户A
用户B
A用自己保密的密钥KdA加密M, 得到中间密文S
S=D(M,KdA)
如何获得安全素数?
(1) 选择两个指定长度的奇数a, b (2) 在a附近产生随机素数s,在b附近产生随机素数t (3) 由t产生素数r ① r=1+2t; ② 若r非素数,则r=r+2直到r
(4) 由r, s生成p:
① p=(sr-1-rs-1) mod (rs); ② 若p为偶数, 则p=p+rs;
数字签名
公钥密码算法
• 用户选择一对密钥 Ke和 Kd,分别为公钥和私钥, 并构造加密算法 Ee 和解密算法 Ed • C = E(M,Ke) M = D(C,Kd)=D(E(M,Ke),Kd) • 用户公开Ke和Ee
注意: 密钥都是成对生成的,由一个公钥和一个私钥组成。
。
公钥密码的基本思想
加密密钥Ke
– n=pq,所以必须对n进行分解
大素数分解记录
最新纪录
2007年,瑞士洛桑理工学院的Arjen Lenstra宣称,他们 的分布式计算工程在经过11个月的努力后破解了一个307位的 RSA密钥,并且已经有能力在不久后破解700位,因此他警告 说,在五六年后,随着各种计算、破解技术的不断强大,也 许1024位的RSA加密都不能完全保险,人们必须寻求更安全 的加密技术。
单项函数
单向函数是满足下列条件的函数f
–(1)给定x,计算y=f(x)是容易的 –(2)给定y, 计算x使y=f(x)是困难的
(所谓计算x=f-1(Y)困难是指计算上相当复杂已无 实际意义)
用于构造公钥密码常用的单向函数
1 多项式求根 有限域GF(p) y=f(x)=(xn+an-1xn-1+…+a1x+a0) mod p
RSA
问题1. 如何选取大的素数?
若 n |( 2n-2 ),则n为素数。
若p为素数,则Mp=2p-1为素数
Fermat推测Fn=22
n
+1为素数, n为正整数
×
问题2. 有多少素数?
答案是有无穷多个。 素数在数轴上的分布情况是
x ( x) ln x
如x=10, π(x)=4, 该式所含的素数为2、3、5、7。
2 离散对数 如果p是一足够大的素数,a是{0, 1, 2, …, p-1}中与p互素
的数。 则已知p, a, x, 计算 y=f(x)=ax mod p并不困难; 若已 知p, a, y, 计算x=logby mod p,就很困难了。
3 大整数分解(Factorrization Problme)
B接收C
查到B的公开加密钥KeB
B用自己保密的密钥KdB解密C, 得到中间密文S D(C,KdB)=S
A用KeB加密S得到C C=E(S, KeB) A 发C 给B
查到A的公开加密钥KeA E(S,KeA)=M
结论
保证了数据的秘密性和真实性
用KeA解密S得到M
公钥密码应当满足的条件
• 加密算法和解密算法互逆,即对所有明文都有 D(E(M,Ke),Kd)=M • 计算上不能由Ke求出Kd • 算法E和D都是高效的 • E(D(M,Kd),Ke)=M
素数位数 64 bit 所含素数个数 2.05×1017
128 bit
256 bit
1.9×1036
3.25×1074
问题3. 如何产生一个素数?
①概率测试素数法
方法:对于一个给定的大正整数N,每进行一次检验,
给出yes:N 为素数的概率为 1/2,或者no:N不是素数,
若N通过r次检验,则N不是素数的概率为ε=2-r ,则N为 素数的概率为1-ε ,若r足够大(如r=100),则几乎认为
N是素数。
②确定性验证素数法
定理 令 pi+1=hipi+1,若满足下述条件,则pi+1必为素数。 (1) pi是奇素数;
(2) hi<4(pi+1), hi为偶数;
(3) 2
hi pi
1 mod pi1;
(4) 2hi 1 mod pi 1
幂剩余函数的特性
周期性
即反复运算 C=Me mod n 若干次后,将还原为最
13 2 5 (2436 13 187)
937 13 5 2436
左右同时模2436,即 937×13≡1
即取 e=13, d=937
mod
2436
加密
明文public key encryptions,先将明文按两个一组进行 分块,再将明文数字化,如按英文字母表的顺序得: