非对称加密的数学运算过程
RSA非对称加密:
密钥有一对
2个密钥相互可以解密另一个密钥的加密数
如签名验证运算过程:
那么从数学原理上是如何实现的,其实并不深奥:
基本知识:
质数:只能被1和自己整除的数
互质数:公因数只有1的2个或多个非0自然数
阿贝尔群:数字集合中的任何2个数,交换前后顺序进行某种运算的结果相同(如a,b是整数,则对于加法a+b=b+a),则此数字集合与运算一起构成了一个阿贝尔群(如(1,2,3)和加法运算构成了一个阿贝尔群)
阿贝乐有限群:数字集合大小有限的阿贝尔群
乘法取模运算的阿贝尔群:数字集合只能有自然数,运算是相乘后对数字n取模的阿贝尔群(数字集合中任意2个数字互换顺序后,相乘后对n取模的结果相同)。
RSA的运算方法如下:
1. 随机生成2个很大的质数(如2的1024次幂)p和q
2. 计算p和q的乘积n
3. 计算乘法取模(对n取模)阿贝尔群的大小 o
细节先不讲,如果p和q是质数,大小是(p-1)*(q-1)
4. 计算o的互质数r
5. 计算d,d乘r再与o取模等于1
6. r与n组成公钥, d与n组成私钥
7. 用公钥对数据加密
a.计算原文数字(或hash值)的r次幂 (非对称加密一般是对一个较大的数字加密,如签名运算时对消息的哈希值进行加密)
b.幂运算的结果对n取模,结果就是加密后的数字
8. 用私钥对加密的数据解密
a.计算密文数字(如签名结果)的d次幂
b.对幂运算的结果对n取模,结果就是解密后的数字。
以上是运算流程。
详细推导过程细节比较多,此篇文章不讲解。
参考资料:
算法导论第31章:Number-Theoretic Algorithms