公钥加密体制模型
- 发送方A查找接收方B的公钥;
- A采用公钥加密算法用B的公钥对明文进行加密;
- A通过不安全信道将密文发送给B;
- B收到密文后使用自己的私钥对密文解密还原出明文。
单向陷门函数
- 给定x,计算 y=f(x) 是容易的
- 给定y,计算 x 使得 y=f(x) 是困难的
- 存在δ,已知δ时,对给定的任何y,若相应的x存在,则计 算 x 使 y=f(x) 是容易。
注意:
- 仅满足(1)、(2)两条的称为单向函数;第(3)条称为陷门性,δ 称为陷门信 息。
- . 当用陷门函数f作为加密函数时,可将f公开,这相当于公开加密密钥。此时 加密密钥便称为公钥,记为Pk。 f函数的设计者将δ 保密,用作解密密钥,此时δ 称为私钥,记为Sk。由于加密函数是公开的,任何人都可以将信息x加密成y=f(x), 然后送给函数的设计者(当然可以通过不安全信道传送);由于设计者拥有Sk, 他自然可以解出
- 单向陷门函数的第(2)条性质表明窃听者由截获的密文y=f(x)推测x是不可行的
公钥体制基本原理(单向陷门函数)
- 正向计算很容易,如果知道公开秘钥和消息M容易计算:
- 在不知道私有秘钥的情况下,方向计算不可行。就算你知道加密后的消息C而不知道私有秘钥,也计算不出明文
- 在知道私有秘钥的情况下,反向计算很容易。有消息C和私有秘钥,容易计算 。相当于陷门,它和公开密钥配对使用。
RSA加密算法
在Diffie和Hellman提出公钥密码体制的设想两年后,先后 有MH背包公钥密码,Rivest、Shamir、Adleman联合提出 的RSA公钥密码算法,这是目前应用最广的一种公钥密码
RSA的理论基础是欧拉定理,其安全性依赖于大整数的素 因子分解的困难性
基本知识
欧拉定理
- 欧拉函数φ(m):当 m > 1时,φ(m)表示比m小且与m互素的正整数的个数。比如:m = 4,互为素数的数有1,3。φ(m)=2特别强调1要算进去。
- m是素数时:φ(m) = m-1
- m = pq,且p和q都是素数时:
- 对于任何互素的两个整数a和n,有:
- 当n = p时,是费马定理,其中 P 是质数,
模基本运算规则
- 结合律
- 交换律
- 分配律
欧拉函数应用举例
算法描述——密钥生成
- 选取两个互异大素数p,q
- 计算n=pq和欧拉函数值
- 选一个整数e,1<e<,使得gcd(φ(n),e)=1
- 在模φ(n)下,计算e的逆元d,使得ed≡ 1mod φ(n)
我们以(n,e)为公钥,d为密钥,p,q不再需要可以销毁.
在第一步中有素性检测,第四步有欧几里得算法:
具体算法描述
加密:
将明文分组,各组对应十进制数 m<n,计算
解密:
m = D© ≡
注意:
“≡”是数论中表示同余的符号(注意!!这个不是恒等号),
同余的定义是这样的:
给定一个正整数n,如果两个整数a和b满足a-b能被n整除,即(a-b)modn=0,
那么就称整数a与b对模n同余,记作a≡b(modn),同时可成立amodn=b。
也就是相当于a被n整除余数等于b的意思。
RSA算法解密过程的正确性
RSA举例:
准备好草稿本溜一圈儿,或许你没懂!!!
那么请问d是怎么来的?
逆元d的求解
- 用扩展的欧几里德算法(辗转相除法)
求乘法逆元e=1234,φ(n)=11111,求d?
RSA算法的一些计算问题
- 如何计算 ?
- 如何判定一个给定的整数是素数?
- 如何找到足够大的素数p,q?
计算 :
- (a b) mod n = [(a mod n) x (b mod n)] mod n]
算法归纳
- 选择两个大素数p和q,通常要求每个均大于。
计算n=p,q和z=φ(n)=(p-1)(q-1)。
找到一个和z互素的e,把它作为公钥。
找到一个d满足ed=1 (mod z)。 - 选好这些参数后,将明文划分成块,使得每个明文报文 P长度m满足0<m<n。加密P时,计算C=,解 密C时计算P=。由于模运算的对称性,可以 证明,在确定的范围内,加密和解密函数是互逆的。
- 为实现加密,需要公开(e, n),为实现解密需要(d, n)。