公公公公 公 体 公公公公公公公公 公公公公公公公公
Mar 15, 2016
公钥密码体系杭州电子科技大学
计算机安全与保密
对称算法的不足 密钥必须通过某一信道协商,对这个信道的安全性的要求比正常的传送消息的信道的安全性要高
1. 公钥密码背景A用户 加密
公钥空间
密码分析
解密
私钥空间
用户B明文M1( , )C E M k密文
1k 2k2( , )M D C k
公钥密码体制的特点:1. 加密密钥与解密密钥在本质上是不同的,即已知一个密钥并不能轻易地求出另一个密钥。2. 不需要增加分发密钥的额外信道。
公钥密码体制的要求:1.1. 产生一对密钥是计算可行的产生一对密钥是计算可行的2.2. 已知公钥和明文,产生密文是计算可行的已知公钥和明文,产生密文是计算可行的3.3. 接收方利用私钥来解密密文是计算可行的接收方利用私钥来解密密文是计算可行的4.4. 对于攻击者,利用公钥来推断私钥是计算不可行的对于攻击者,利用公钥来推断私钥是计算不可行的5.5. 已知公钥和密文,恢复明文是计算已知公钥和密文,恢复明文是计算不可行的不可行的6.6. (( 可选可选 )) 加密和解密的顺序可交换加密和解密的顺序可交换
公钥密码的安全性依赖于从已知的公钥,加密算法和密文中无法求出明文或秘钥。 Diffie 和 Hellman 提出了一种陷门单向函数概念,为建立公钥密码体制找到了一种途径。
单向函数 函数 f 若满足下列条件 1)对任意给定的 x ,容易计算 f(X)=y 2)对任意给定的 y ,求出 x 使得 f(x)=y是困难的。
求离散对数问题y=gx mod p若给出 p,g,y 求 x 称为求离散对数问题 因子分解问题n=pq若给定 n, 求 p,q 称为因子分解问题 背包问题给定一个有限个自然数序列集合 B=(b1,b2,……,bn) 及二进制数序列 x=(x1,x2,……,xn) , S= x1 b1 + x2 b2 +…… + xn bn给定 B , S ,求 x 序列,称为求背包问题
单向陷门函数:单向陷门函数是满足下列条件的函数 f :1. 给定 x ,计算 y=f(x) 是容易的;2. 给定 y, 计算 x 使 x=f-1(y) 是不可行的;3. 存在陷门 t ,已知 t 时,对给定的任何 y ,若相应的原象 x 存在,则计算 x 是容易的。
通过陷门单向函数建立公钥密码 f(x) 是单向陷门函数,陷门为 t 。 那 么设计公钥密码系统时 f(x) 作为公钥,陷门 t 作为私钥,任何人都可将明文 m利用公钥 f(x) 加密得到密文 y=f(m) ,而任何人不知道私钥即陷门,由密文 y 都无法求出 m ,因为 f(x) 是单向的,但拥有私钥,便可容易求出 m
RSA 公钥密码体制1 、 1977 年由 Rivest、Shamir和 Adleman发
明并于 1978 年公布。2 、明文和密文在 0~n-1 之间 ,n 是一个正整数3 、应用最广泛的公钥密码算法4 、只在美国申请专利,且已于 2000 年 9 月到期
欧拉函数 ( )n
[1, ])
n n nn
在 中,不大于 而且与 互素的正整数的个数,记作 (
欧拉函数 ( )n
1
1 ) 1
2 ) ( 1)k k
p p p
p p p p
、 为素数, ( =、 为素数, (
[1, ]k kp p计数: 中与 互素的数的个数
1
1
1
[1, ]
, , [1, ]
k k
k k
k
k k k
p p p
p p p p p p
p
p p p
除去 中 的倍数,剩下的都与 互素
, 2 是 中所有 的倍数,共有
个。
所以与 互素的数的个数有 - 个
1 2 1 2 1 23 ( , ) 1 ( ) ( ) ( )m m mm m m 、若 ,则
欧拉函数 ( )n
1
1 ) 1
2 ) ( 1)k k
p p p
p p p p
、 为素数, ( =、 为素数, (
1 2 1 2 1 23 ( , ) 1 ( ) ( ) ( )m m mm m m 、若 ,则
1, ( ) ?n n
欧拉函数1
1 ) 1
2 ) ( 1)k k
p p p
p p p p
、 为素数, ( =、 为素数, (
1 2 1 2 1 23 ( , ) 1 ( ) ( ) ( )m m mm m m 、若 ,则
1 2
1 2 1 2
1 2
1 2
1 2 1 2
11 11 1 2 2
1, ( ) ?
( ) ( ) ( ) ( ) ( )
( 1) ( 1) ( 1)
m
m m
m
ee em
e ee e e em m
ee em m
n n n p p p
n p p p p p p
p p p p p p
欧拉函数(300) ? 练习:
2 2 2 2(300) (2 5 3) (2 ) (5 ) (3)2(2 1)5(5 1)(3 1) 80
, ( ) ?p q pq 为素数,
( ) ( ) ( ) ( 1)( 1)pq p q p q
一. RSA 密码体制的描述1. 密钥生成算法:每个用户执行以下操作
①随机生成两个不同大素数 p,q;②计算 n=pq,(n)=(p-1)(q-1);③随机选取整数 e,1<e<(n), 满足 (e,(n))=1;④利用扩展欧基里德算法求出满足 ed=1 mod((n)) 的整数 d;⑤公开 (n,e) ,保密 (p,q,(n),d) 。其中 e就是加密密钥,而 d就是解密密钥, n 称为模数。
例如取 p=7,q=17, 则n=pq=7×17=119(n)=(7-1)(17-1)=6 × 16=96任取 e=5 ,则 d=77.注意 5 × 77=385=1 mod96
2. RSA 加解密:若 B 要利用 A 的公钥进行加密,则 B执行① 获得 A 可信的公钥 (n,e) ;② 把消息按分组的方式表示为区间 [0,n-1]之间的整数 m ;③ 计算 c=Ee(m)=me mod n;④ 将密文 c发送给 A ;解密:为从 c中恢复明文 m , A 利用解密密钥 d ,计算
m=cd mod n
例如在上面的例子中,假设 m=19 ,则c=195
=19 ×(192)2=19 × 3612=19 × 42 mod 119 =304=66 mod 119因此密文为 c=66
对于密文 c=66,其解密过程如下m=6677=(662)38 × 66 mod 119 =7238 × 66 mod 119 =4738 × 66 mod 119 =6719 × 66 mod 119 =(672)9 × 67 × 66 mod 119 =869 × 19 mod 119 =(862)4 × 86 × 19 mod 119 =184 × 87 mod 119 =18 × 87 mod 119 =19 mod 119
解密的正确性:1. 费马小定理:
若 (a,n)=1, 则 a(n)=1 mod n2. 推论 1 :若 n=pq , p≠q 都是素数, k是任意整数,则
m(n)+1=m(p-1)(q-1)+1=m mod n3. 推论2:
mk(p-1)(q-1)+1=m mod n由于 ed=1 mod(n) ,则存在整数 k, 满足
ed=1+k(n)=1+k(p-1)(q-1)因此cd=med=mk(p-1)(q-1)+1=m mod n
所以解密成功。
加密函数E(x)=xe mod n
是一个单向函数,所以对攻击的人来说求逆计算不可行。而 A 能解密的陷门是由分解 n=pq ,知(n)=(p-1)(q-1)
从而用欧氏算法解出解密私钥 d. 所以如果能够分解 n ,那么就可以完成解密。
RSA 体制的陷门单向函数
RSA 的安全性 RSA 的安全性是基于大整数的因子分解的困难性猜想:攻破 RSA 与分解 n 是多项式等价的。然而,这个猜想至今没有给出可信的证明!!!
(1)素因子 p,q 应当是强素数,p 是强素数:存在大素数 p1 , p1|p-1, 同时 r1 , r2是大素数, r1 | p1 -1 ,r2| p1 -1.选择强素数的目的是因为选择的 p,q如果 p-1,q-1 的素因子都很小,则 n=pq 存在 p-1 或p+1 分解法
(2) 因子 p,q 的差必须足够大。如果 p,q 比较接近,则由 p,q 的平均值可得
2p qQ pq n
再利用2 2
2
2 2p q p q n Q n
可得2
2
2
p q Q
p q Q n
进而求出 p,q
2
101, 103, 10403
101.995
102, 102 10403 1
1022
12
p q n
n
Qp q
p q
例如则
取 而 ,因此
(3)RSA的加解密密钥不能太小,存在低指数攻击 已经证明了当 d 的二进制长度小于模数 n长度的 1/4 时,可以利用连分数法在多项式时间内求解 n 。
如果解密指数 d被泄露,则就可以分解出 n ,因此就必须重新选取 n ,而不能只是重新选取 e,d.
RSA 的实现
可供选择的大素数是否多 随机选择大素数是否容易 模幂运算能否快速实现
模幂运算3 2 3 2
3 2 1 0 3 02 1
2 13 02 1
3 02 1
3 02 1
3
2
3 23 2 1 0 2 3 2 1 0
2 2 2 2 2 2
2 2 2
2 2 2
2 2 2 2
2
2
mod , ( ) 2 2 2
mod
( ) mod
(( ) ) mod
(((1 ) ) ) mod1 1
2 mod
3 m
c
c c c c c cc cc
c cc c
c cc c
c cc c
c
c
m N c c c c c c c c c
m m m m m m N
m m m m N
m m m m N
m m m m NStep z
Step z z m N
Step z z m
1
0
2
2
od
4 mod
5 mod
c
c
N
Step z z m N
Step z z m N
模幂运算
3
2
1
0
13 3 23 2 1 0 2
2 2 1
2 2 1
2 2 0
2 2 1
13
15 mod53, ( ) (1101) 2 2 1
1 1
2 mod 1 15 mod 53 15
3 mod 15 15 mod53 36
4 mod 36 15 mod53 24
5 mod 24 15 mod53 1
15 mo
c
c
c
c
c c c c c
Step z
Step z z m N z
Step z z m N z
Step z z m N z
Step z z m N z
d53 1
模幂运算-平方和乘算法1
1 2 1 0 20
mod , ( ) 2
1
mod1 mod
}
kc i
k k ii
m N c c c c c c
zfor
Nthen N
return
2
i
i =k-1 downto 0{ z=z i f c z=z*m
(z)
平方和乘算法的复杂度:执行次数至少要 k 次模乘,最多需要2k次模乘
素数分布
74
lim 1
512
3.25 10
x
512512
512
256 255256 255
256 255
(素数定理)设(x)为不大于x的素数个数,则l nx (x) x
x(x) l nx
2长度小于 位的数中素数的个数(2 ) l n22 2长度为256位的数中素数的个数(2 )-(2 ) ,l n2 l n2
可计算出在所有的256位的数中有0. 56%的数是素数由此可见,大素数的分布是相当多的
素数判定 确定性素数判定:判定结果一定正确 概率性素数判定:判定结果在某个概率上是正确的。 概率性素数判定算法内部使用了一个随机数,在复杂度理论中也称此类算法为随机算法
Miller-Rabin素数判定算法2
45
2 1 20 0 ,
1mod
,0 1mod
91,91 1 2 45
9 1mod9191 9
r
s
m
m
n n m sm b n
b n
r r s b nn bn
定义 设 是一个奇数,设 ,其中 是非负整数,是奇数,设 如果
或者存在一个 ,使得则称 是以 为基的强伪素数例:
是以 为基的强伪素数
强伪素数判定算法 输入 n,b 输出 n 是以 b 为其的强伪素数,输出 true,否则输出 false
2
( , ){
, , 2
mod1 1
1 1
mod1
}
s
m
test n b
m s m n
z b nif z or z n
return truefor i to s
z z nif z nreturn true
return
计算出 使得
{
f al se}
Miller-Rabin素数判定算法Prime_test(n){ b=rand(); if test(n,b)=false return false;// 输出 n 不是素数 return true;// 输出 n 是素数}
Miller-Rabin素数判定算法正确概率
定理 设p>2是一个素数,对于任意整数b>0,如果(b, p)=1则p一定是b为基的强伪素数
这个定理说明了Mi l l er-Rabi n算法如果输入的n是素数,正确的输出判定n是素数
定理 如果n为一奇合数,则在[0, n]中,至多有1/4个b [0, n]满足n是b为基的强伪素数
这个定理说明了Mi l l er-Rabi n算法如果输入的n是合数,但输出判定n是素数的概率最多是25%
总之,Mi l l er-Rabi n算法判定n是素数的正确概率至少为75%
Miller-Rabin素数判定算法Prime_test(n){For i=0 to 50{ b=rand(); if test(n,b)=false return false;//输出 n 不是素数} return true;//输出 n 是素数}
P-1 分解法0 ,1 22
mod3 gcd( 1, )4 (1 )
j
Step input n BStep aStep B
a a nStep d a nStep if d n
d nelse
f or j =2 to
是 的一个因子 分解失败
2 3 4 5 6
1333 6
2 2 mod1333, 838(838 1,1333) 31
31 1333
n B
Step a a
,
后,
所以 是 的一个因子,1333=31 43
!
!
1
| 1( 1) | !
2 2 mod
2 mod
2 1mod( 1) | !
1mod| 1
| , | ( 1, )( 1, ) 1, ( 1, )
B
B
p
p n q p qq B p B
Step a np n p n
a p
pp Ba pp a
p n p a na n d a n
假设 是 的一个素因子,并且对每个满足 的素数幂 都有,则必有
在算法 循环结束时
假设 是 的一个素因子, |
又而
即又因为 所以如果 就是n的非平凡因子