0%

入门到放弃之RSA的数学基础

公钥与私钥的产生

From wiki RSA加密算法

假设Alice想要通过一个不可靠的媒体接收Bob的一条私人消息。她可以用以下的方式来产生一个公钥和一个私钥:

  1. 随意选择两个大的质数 p 和 q, p不等于 q,计算 N=pq。
  2. 根据欧拉函数,求得totient function
  3. 选择一个小于 r 的整数 e,使 e 与 r 互质。并求得 e 关于 r 的模反元素,命名为 d(求 d令 mod )。(模反元素存在,当且仅当 e 与 r 互质)
  4. 将 p 和 q 的记录销毁。

(N,e)是公钥,(N,d)是私钥。Alice将她的公钥 (N,e)传给Bob,而将她的私钥 (N,d)藏起来。

加密、解密

加密计算公式: encryption

解密计算公式: decrypt

n 为等待加密数据, c 为加密后数据。
对于上面不认识的符号≡请看 同余

基础

欧拉函数
欧拉定理
模反元素
同余

上面是 RSA 所涉及到的数学基础。 慢慢啃吧,啃着啃着你就入门了,啃着啃着啃着你就放弃了。
先是看看 深入浅出密码学, 咦~好多数学基础,好吧,继续看看 数论概论,咦~我想干什么来着?

由加密公式怎么推导出解密公式呢?
加密公式

c ≡ n^e (mod N)

同余 有以下性质

a ≡ b (mod m) ------------> a^n ≡ b^n (mod m)

所以加密公式可以变形为

(1). c^d ≡ n^ed (mod N)

已知 ed ≡ (1 mod r), 即 ed = 1 + hφ(N)

(2). n^ed = n^(1 + hφ(N)) = n * (n^φ(N))^h

把(2)代入(1)得

n^ed (mod N) ≡ n * (n^φ(N))^h (mod N)

由欧拉定理 n^φ(N) ≡ 1 (mod N) 得

n * (n^φ(N))^h (mod N) ≡ n * 1^h (mod N) ≡ n (mod N)

上面懵逼了吧,相关关键字 模约简
最后

c^d ≡ n (mod N)

RSA的应用:数字证书

什么是数字证书?
我们先来看看 RSA 的逆向过程, 我们假设 c 为等待加密数据, n 为加密后数据。
根据:
‘解密’公式: decrypt
‘加密’公式: encryption
得到:
签名公式: n ≡ c^d (mod N)
验证公式: c ≡ n^e (mod N)
我们把‘解密’叫做签名,‘加密’叫做验证, c 为待签名数据, n 为签名后数据。

实际操作一般如下:
1.signature: (N, d)

c = hash(data)
n = sign© = c^d (mod N)
(n 就是签名)

2.send (data,n)
3.check: (N, e)

c = hash(data)
c == check(n) = n^e (mod N)

私钥永远是私有的,用私钥签名的数据只有对应的公钥才能校验成功,所以上面的过程可以用以校验你的数据是否被修改。
你的公钥在传输过程中可能被替换掉,那么剩下的问题就是如何证明你的公钥就是你的公钥呢?
CA(Certificate Authority)的工作就是证明你的公钥就是你的公钥, CA 的工作原理也是应用 RSA 的逆向过程,CA 也有公钥密钥。

数字证书:包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对这份文件的数字签名,以保证这个文件的整体内容正确无误

数字证书、CA、HTTPS:
服务器创建公钥私钥,然后去 CA 申请数字证书,其实就是把服务器的公钥与一些其他信息发送给 CA,CA 用她的私钥给你签名。
浏览器已安装了 CA 的公钥。
https 连接的建立: 服务器发送证书给浏览器,浏览器用 CA 的公钥验证证书,即证明你的公钥就是你的公钥。

细节可以阅读 wiki
CA
数字证书
HTTPS

最后

Amazing math!!!
万变不离其中,你看认识 RSA 后你可以了解到那么多扩展知识。