【算法】RSA加密算法
来源:互联网 发布:四川广电网络招聘 编辑:程序博客网 时间:2024/06/08 10:20
1.历史
RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
2.公钥与密钥的产生
假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她可以用以下的方式来产生一个公钥和一个私钥:
- 随意选择两个大的质数p和q,p不等于q,计算N=pq。
- 根据欧拉函数,求得r = (p-1)(q-1)
- 选择一个小于 r 的整数 e,求得 e 关于模 r 的模反元素,命名为d。(模反元素存在,当且仅当e与r互质)
- 将 p 和 q 的记录销毁。
- (N,e)是公钥,(N,d)是私钥。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。
注:
- 模反元素指如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。b就叫做a的”模反元素”。
- 比如,3和11互质,那么3的模反元素就是4,因为 (3 × 4)-1 可以被11整除。显然,模反元素不止一个, 4加减11的整数倍都是3的模反元素 {…,-18,-7,4,15,26,…},即如果b是a的模反元素,则 b+kn 都是a的模反元素。
3.加密消息
假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。他使用起先与Alice约好的格式将m转换为一个小于N的整数n,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。用下面这个公式他可以将n加密为c:
ne ≡ c (mod N)
计算c并不复杂。Bob算出c后就可以将它传递给Alice。
4.解密消息
Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转换为n:
cd ≡ n (mod N)
得到n后,她可以将原来的信息m重新复原。
解码的原理是:
cd ≡ n e·d(mod N)
以及ed ≡ 1 (mod p-1)和ed ≡ 1 (mod q-1)。由费马小定理可证明(因为p和q是质数)
n e·d ≡ n (mod p) 和 n e·d ≡ n (mod q)
这说明(因为p和q是不同的质数,所以p和q互质)
n e·d ≡ n (mod pq)
5.签名消息
RSA也可以用来为一个消息署名。假如甲想给乙传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message digest),然后用她的密钥(private key)加密这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。乙获得这个消息后可以用甲的公钥解密这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么他就可以知道发信人持有甲的密钥,以及这个消息在传播路径上没有被篡改过。
6.RSA加密算法的缺点
产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密;
速度太慢:分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,
安全性,RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NP问题。
本人才疏学浅,若有错,请指出
谢谢!
参考资料:RSA算法原理—阮一峰的网络日志
- 加密算法之RSA算法
- 加密算法之RSA算法
- 加密算法之RSA算法
- 【算法】RSA加密算法
- [转帖]加密算法之RSA算法
- 非对称加密算法-RSA算法
- C#RSA非对称加密算法/数字签名算法
- JAVA加密算法- 数字签名算法(RSA、DSA)
- 什么是RSA加密算法?RSA加解密算法破解-Alasend
- RSA 加密算法
- RSA加密算法
- rsa加密算法
- RSA加密算法
- Rsa加密算法
- RSA加密算法
- RSA加密算法
- RSA加密算法
- rsa加密算法
- JavaScript-运算符&&(与、并且)判断一个数字是否是两位数
- this与super关键字
- lua解析json
- 内部类
- CNN的发展史
- 【算法】RSA加密算法
- USB连接到ubuntu主机设备名出现乱码
- 651. 4 Keys Keyboard
- Structs 启动服务器tomcat碰到的错误
- 构建最少节点的AVL树~
- D-Bus的几种用法
- 二分查找详解
- c++学习网站
- HTML img图片标签alt和title属性