1. 数据。
数据在计算机中,其实就是字节串。
将被加密的数据,分割成一定长度的数据块,每一块就是一个bit串。
将这个比特串,看成一个二进制整数——以d表示
2. 密钥
RSA算法是非对称算法,因此使用两个密钥:
一个是公钥,用于加密——以e表示,
一个是私钥,用于解密——以p表示。
另外,还需要用到一个整数N,他是算法中进行模数运算时的底数。
一般来说,为了保证安全性,密钥长度应在1024-bit以上。
总之,e、p、N,这三项数据,决定一次具体的加解密活动。
同被加密数据d一样,e、p、N,这三个东东,也都是整数。
e、N,是对外公开的。而p则不对外公开。
3. 加解密
a)加密
c = d^e mod N /* d的e次方模上N,得到c,即加密后的数据*/
b)解密
d = c^p mod N /* c的p次方模上N,得到d,即原始数据*/
4. 安全性
RSA算法的安全在于,e、p、N,是随机生成的。
知道e和N,想寻找p,在计算上是不可行的。
问题是,我们使用的软件工具,生成这些随机材料时,真的是“随机”的吗?
如果算法的提供者留下什么后门,或者提前做了什么准备工作,人家看到e和n,或许就能有办法得到p呢。
2、RSA加密算法的描述RSA算法是一个基于初等数论定理的公钥密码体制加密算法,它的实现过程为:选取2个大素数p与q,然后算出n=pq,φ(n)=n-p-q+1,再选取一个正整数e,使之满足(e,φ(n))=1,1《E《Φ(N);再求出正整数D,使之满足1《D,而密钥是。明文消息m满足0≤m
例 取2个质数p=11,q=13,p和q的乘积为n=p×q=143,算出φ(n)=n-p-q+1=120;再选取一个与φ(n)互质的数,例如e=7,则公开密钥=n,e=143,7.
对于这个e值,用欧几里德扩展算法可以算出其逆:d=103.因为e×d=7×103=721,满足e×d mod z =1;即721 mod 120=1成立。则秘密密钥=n,d=143,103,
设发送方需要发送机密信息(明文)m=85,发送方已经从公开媒体得到了接收方的公开密钥n,e=143,7,于是发送方算出加密后的密文c= me mod n=857 mod 143=123并发送给接收方。
接收方在收到密文c=123后,利用只有他自己知道的秘密密钥计算m= cd mod n =123103 mod 143=85,所以,接收方可以得到发送方发给他的真正信息m=85,实现了解密。
用RSA体制加密时,先将明文数字化再进行加密,在实际应用中m值的长度一般要远大于n的长度,因此实际加密消息m时,首先将它分成比n小的数据分组(采用二进制数,选取小于n的2的最大次幂),再每组单独加密和解密。比如说,选用的p和q为100位的素数,那么n将有200位,每个数据分组应小于200位长,但为保证安全性,每个数据的长度应尽量接近n的长度。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)