codecamp

密码学 RSA密码体制

RSA算法概述

RSA加密算法于1977年由美国麻省理工学院的Ronal Rivest,Adi Shamir和Len Adleman三位年轻教授提出,并以三人的姓氏Rivest,Shamir和Adleman命名为RSA算法。这三位科学家荣获2002年度图灵奖,以表彰他们在算法方面的突出贡献。该算法利用了数论领域的一个事实,那就是虽然把两个大质数相乘生成一个合数是件十分容易的事情,但要把一个合数分解为两个质数的乘积却十分困难。合数分解问题目前仍然是数学领域尚未解决的一大难题,至今没有任何高效的分解方法。它无须收发双方同时参与加密过程,既可以用于保密也可以用于签名,因而非常适合于电子邮件系统的加密,互连网和信用卡安全系统。

公私匙生成算法

RSA的公私钥生成算法十分简单,可以分为五步:

(1)随机地选择两个大素数p和q,而且保密;

(2)计算n=pq,将n公开;

(3)计算ф(n)=(p-1)(q-1),对ф(n)保密;

(4)随机地选择一个正整数e,1<e<ф(n)且(e,ф(n))=1,将e公开;

(5)根据ed=1 mod ф(n),求出d,并对d保密。

公开密钥是由(e,n)构成,私有密钥由(d,n)构成。

加密算法

实体B的操作如下:

(1)得到实体A的真实公钥(e,n);

(2)把消息表示成整数m,0<m≤n-1;

(3)使用平方-乘积算法,计算C = Ek(m) = me mod n;

(4)将密文C发送给实体A。

解密算法

实体A接收到密文C,使用自己的私钥d计算m = Dk(C) = Cd mod n。 我们选择p=3,q=11,得到n=33,ф(n)=(p-1)(q-1)=2×10=20。由于7和20互质,故设e=7。对于所选的e=7,解方程7×d=1 mod 20,可以得到d=3。因此公钥为(7,33),私钥为(3,33)。 在我们的例子中,由于所选的p和q太小,破译当然很容易,我们的例子只是用来说明此算法的原理。对于明文SUZANNE,RSA的加密和解密过程如下表所示。

密码学 欧几里得算法
密码学 RSA密码代码
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

第六章 公钥密码学和离散对数

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }