加密算法[2]:RSA

 

 

 

 

正如DES作为对称算法的典范一样,RSA在非对称算法中一直处于主导地位。

RSA加密算法中,对明文的加密以及对于密文的解密分别使用不同的密钥,这也是非对称算法这个称呼的由来。我们把这两个不同的密钥叫做公钥Kpublic以及私钥Kprivate。公钥可以公开给任何人,而私钥则需要保存在一个秘密的地方,比如放在可以防止攻击的智能卡等类似的安全设备中。

RSA是三个发明这一算法的大师名字的缩写,在Google中随意搜索都可以知道,他们的名字是:Ronald L. Rivest, Adi Shamir, and Leonard Adleman。

RSA的基本原理是大整数分解的难题,其中涉及到一些数论的概念和定理,尤其是著名的尤拉定理。但是从应用的角度看,其实也很简单,也就是在知道两个整数的积的情况下,很难知道这个积究竟是哪两个整数相乘得到的。

首先看怎么设计密钥:

先找两个足够大的素数PQ(通常要大于1024位,而16位数据相当于十进制的6万多,那么1024位相当于64个6万相乘,必须用科学技术法才能表达出来了);

然后计算出n=P*Qz=(P-1)*(Q-1),其中我们把n叫做模数;

选择一个小于z的数e,要求ez之间没有公约数;

再找一个d,使得e*d-1可以被z整除,换句话说e*d除以z应该余1;

于是把(n,e)设定为公钥,把(n,d)设定为私钥。其中n叫做模数,e叫做公钥指数,d叫做私钥指数。

 

其中PQ是找出来的,必须要保密。但是n=P*Q是计算出来的,要公开;而e是找出来的,要公开,d是计算出来的要保密。

 

所以其中的关键点就是即使别人知道了ne但是不能因此推导出PQ以及d

 

假设明文是M密文是C,那么加密和解密的过程为:

C=Me mod n (加密过程)

M=Cd mod n (解密过程)

也可以表述为:M=(Me mod n)d mod n。其中的 mod表示为求模运算,说白了就是计算余数而已。从中可以看到d和e在计算中被用作指数来使用的,而n被用作模数。

 

我们可以通过一个简单的例子说明这个貌似复杂的过程:

任意找两个素数:P=3和Q=7(为了计算简单,就不用费劲去找1024位的大素数了);

计算n=P*Q=3*7=21,z=(P-1)*(Q-1)=2*6=12;

找一个小于12并且和12没有公约数的数,比如5,于是e=5;

找一个数d使得d*e除以12余1,比如d=17,这样17*5=85,而85除以12刚好余1。于是我们就得到了公开密钥(5,21)和私有密钥(17,21)。

 

我们对数据9加密,那么密文就是95 mod 21=59049 mod 21=18。

我们对于18进行解密,那么明文就是1817 mod 21=2185911559738696531968 mod 21=9。

当然被加密的数据一定要小于21,否则计算的出来的结果应该是模21之后的数据。比如如果对数据25进行加密,那么密文是255 mod 21=9765625 mod 21=16,而对16解密后得到的密文是1617 mod 21=295147905179352825856 mod 21=4,也就是25模21的结果,而不会是25

对于支持RSA算法的智能卡而言,可以实现密钥对的生成,以及RSA加密和解密的功能。根据智能卡性能的不同,密钥对生成所需要的时间也差别很大。在生成密钥对的时候通常会用到中国余数定理CRT,对于1024位的RSA密钥,通常在十几秒钟到数十秒钟不等,有些智能卡甚至要用几分钟的时间去生成密钥。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值