RSA 非对称加密(深入)


RSA加密算法生成公钥和私钥对步骤
1, 随机选择两个素数p, q
2, 计算它们的系统模N = p.q和欧拉函数ψ(N)=(p-1)(q-1)
3, 随机选择一个加密密钥e,且 1 < e < ψ(N), gcd(e, ψ(N)) = 1
4, 求解以下公式,找出解密密钥d:
e.d = 1 mod ψ(N) 且 0 ≤ d ≤ N
5, 发布公钥 KU = {e, N}
6, 发布私钥 KR = {d, N}


加密消息M, 公钥为{e, N}:
计算C = M**e mod N, 这里0 ≤ M < N


解密密文C, 私钥为{d, N}
计算M = C**d mod N


示例:
1, 选择素数p=17, q=11
2, 计算N=p.q=17×11=187
3, 计算ψ(N)=(p-1)(q-1)=16×10=160
4, 选择e, gcd(e, 160)=1,不妨选e=7
5, 计算d, 7×d = 1 mod 160, d = 23
6, 公钥KU = {7, 187}, 私钥KR = {23, 187}


对于消息M=88
加密C=88**7 mod 187 = 11
解密M=11**23 mod 187 = 88


现在存在一个问题:如何分发公钥,以便用户可以找到它并知道它是有效的。此问题的解决方案是使用<b>数字证书</b>。
数字证书是数字凭据,它提供有关实体标识的信息以及其他支持信息。数字证书是由称为证书颁发机构 (CA) 的权威机构颁发的。由于数字证书由证书权威机构颁发,因此由该权威机构担保


证书信息的有效性。此外,数字证书只在特定的时间段内有效。


<b>签名消息</b>

RSA也可以用来为一个消息署名。假如甲想给乙传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message digest),然后用她的密钥(private key)加密这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。乙获得这个消息后可以用甲的公钥解密这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么他就可以知道发信人持有甲的密钥,以及这个消息在传播路径上没有被篡改过。


另外,这里有两张图讲的比较好:

图1:



图2:



参考文献:

http://www.cfca.com.cn/zhishi/wz-012.htm
http://zh.wikipedia.org/zh-cn/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95
http://technet.microsoft.com/en-us/library/bb123848(v=exchg.65).aspx
http://netsecurity.51cto.com/art/201108/287971.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值