目录
一、公钥密码
- 是密码学一次伟大的革命
- 使用两个密钥:公密钥、私密钥
- 加解密的非对称性
- 利用数论的方法
- 是对对称密码的重要补充
1.1、公钥密码特点
1.2、公钥密码解决的问题
- 密钥交换
- 数字签名
1.3、公钥密码与私钥密码的区别
任何加密方法的安全性依赖于密钥的长度和破译密文所需要的计算量。从抗密码分析的角度看,原则上不能说传统密码优于公钥密码,也不能说公钥密码优于传统密码
由于现有的公钥密码方法所需的计算量大,所以取缔传统密码似乎不太可能。
使用公钥密码也需要某种形式的协议,该协议通常包含一个中心代理,并且它所包含的处理过程既不比传统密码中的那些过程更简单,也不比之更有效。
二、公钥密码原理
2.1、单向函数
若一个函数f:A→B为一单向(One-way)函数,则它满足:
1. 对所有x∈A,易于计算f(x)。
2. 对“几乎所有x∈A”,由f(x)求x“极为困难(对现有的计算资源和算法而言)”,以至于实际上不可能做到。
陷门单向函数(Trapdoor one-way function),是这样的单向函数:
2.2、RSA计算过程
2.2.1、RSA生成密钥
1.随机选择两个素数: p=17 & q=11 素数测试是重要的算法
2.计算密钥长度:n = pq =17×11=187 (秘钥长度为7bit)
3.计算 ø(n)=(p–1)(q-1)=16×10=160
4.选择e 使其gcd(e,160)=1,且e<160: 这里选择 e=7
5.解方程e·d=1 mod ø(N) 且 0≤d≤N确定 d: 由e求d要使用到扩展Euclid算法
要使e·d=1 mod 160 且d < 160
因为 23×7=161= 1×160+1 故取 d=23 d = (k*ø(n)+1)/e k=1,2,...一个一个试
6.公布公钥: KU={7,187} n分解为p*q是数学上“整数分解”难题,保障了RSA的安全性
7.保存私钥: KR={23,187}
2.2.2、RSA加解密
加密:
C = 88 7 mod 187
=(884 mod187)(882 mod187 ) (881mod187)
=11
解密:
M = 11 23 mod 187 = 88
2.3、公钥密码体制
保密公钥体制
具有保密与认证的公钥体制
三、RSA的安全性威胁
计算能力的不断增强和因子分解算法的不断改进,给大密钥的使用造成威胁。
因此我们在选择RSA的密钥大小时应谨慎小心。在现阶段,密钥大小取在1024到2048位是合适的。
3.1、强力穷举密钥
3.2、数学攻击 :实质上是对两个素数乘积的分解
- 分解 N=p.q, 因此可计算出ø(N),从而确定d
- 直接确定ø(N),然后找到d
- 直接确定d
3.3、时间攻击:依赖解密算法的运行时间
由密码分析家P.C.Kocher于1996年提出。被安全专家称为“有创意的攻击”
通过观察系统处理特定函数所花费的时间来寻找密文的信息
计时攻击不仅可以攻击RSA而且可以攻击其他的公钥密码系统
计时攻击的完全不可预知性以及它仅依赖于明文,所以它具有很大的威胁
如何避免时间攻击
尽管计时攻击会造成严重的威胁,但是有一些简单可行的解决办法,包括
1.不变的幂运算时间
保证所有的幂运算在返回结果前执行的时间都相同,这种方法简单,但会降低算法的性能。
2.随机延时
通过在求幂算法中加入随机延时来迷惑计时攻击者,可提高性能。
3.隐蔽
在执行幂运算之前先将密文乘上一个随机数,这一过程可使攻击者不知道计算机正在处理的是密文的哪些位,这样可防止攻击者一位一位的进行分析,而这种分析正是计时攻击的本质所在。
3.4、其他方法
迭代攻击、选择明文攻击、公共模攻击、低加密指数攻击等。
3.5、使用RSA需注意
1.p和q的长度应仅相差几位。这样对1024位的密钥而言,p和q都应约在1075到10100之间。
2.(p-1)和(q-1)都应有一个大的素因子。
3. gcd(p-1, q-1)应该比较小
另外,已经证明,若e<n,且d<n1/4,则d很容易被确定