对称加密
加密和解密使用相同密钥
非对称加密
非对称加密要用到两个密钥,一个叫做“公钥”(pub),一个叫做“私钥”(pri)。
公钥和私钥是配对的,没有规定哪个用来加密,哪个用来解密。
非对称加密依赖于一些数学难题,这些难题在当前计算能力下很难解决,使得加密数据很难被破解。常见的非对称加密算法包括:
- RSA(Rivest-Shamir-Adleman):基于大整数分解问题。
- DSA(Digital Signature Algorithm):基于离散对数问题。
- ECC(Elliptic Curve Cryptography):基于椭圆曲线离散对数问题。
公钥和私钥
RSA算法中的公钥和私钥
在RSA算法中,公钥和私钥是成对生成的,分别用于加密和解密。生成过程如下:
- 选择两个大质数 p p p 和 q q q。
- 计算 n = p × q n = p \times q n=p×q,这是模数。
- 计算 ϕ ( n ) = ( p − 1 ) × ( q − 1 ) \phi(n) = (p-1) \times (q-1) ϕ(n)=(p−1)×(q−1)。
- 选择一个整数 e e e,满足 1 < e < ϕ ( n ) 1 < e < \phi(n) 1<e<ϕ(n) 且 gcd ( e , ϕ ( n ) ) = 1 \gcd(e, \phi(n)) = 1 gcd(e,ϕ(n))=1,这是公钥的指数。
- 计算e的逆元 d d d,使得 d × e ≡ 1 ( m o d ϕ ( n ) ) d \times e \equiv 1 \pmod{\phi(n)} d×e≡1(modϕ(n)),这是私钥的指数。
欧拉定理
当 a a a, n n n为两个互质的正整数时,有:$ a ^{\phi ( n )} ≡ 1 \pmod{n} $
由 e ∗ d ≡ 1 ( m o d ϕ ( n ) ) e*d \equiv 1\pmod{\phi(n)} e∗d≡1(modϕ(n))得, e ∗ d = 1 + k ϕ ( n ) e*d=1+k\phi(n) e∗d=1+kϕ(n)
-
对于满足 g c d ( x , n ) = 1 gcd(x,n)=1 gcd(x,n)=1的 x x x, x e d = x 1 + k ϕ ( n ) = x ∗ ( x ϕ ( n ) ) k = x ( m o d n ) x^{ed}=x^{1+k\phi(n)}=x*(x^{\phi(n)})^k=x \pmod{n} xed=x1+kϕ(n)=x∗(xϕ(n))k=x(modn)
-
不满足时,设 x = r p x=rp x=rp,则 g c d ( x , q ) = 1 , x ϕ ( p ) ≡ 1 ( m o d p ) , x p − 1 ≡ 1 ( m o d p ) gcd(x,q)=1,x ^{\phi ( p )} ≡ 1 \pmod{p},x ^{p-1} ≡ 1 \pmod{p} gcd(x,q)=1,xϕ(p)≡1(modp),xp−1≡1(modp);
x e d = x 1 + k ϕ ( n ) = x ∗ ( x ( q − 1 ) ) k ∗ ( p − 1 ) = x ∗ ( 1 + u ∗ p ) = x + u ∗ p ∗ x = x + u ∗ p ∗ r ∗ q = x ( m o d n ) x^{ed}=x^{1+k\phi(n)}=x*(x^{(q-1)})^{k*(p-1)}=x*(1+u*p)=x+u*p*x=x+u*p*r*q=x \pmod{n} xed=x1+kϕ(n)=x∗(x(q−1))k∗(p−1)=x∗(1+u∗p)=x+u∗p∗x=x+u∗p∗r∗q=x(modn)
所以 m e d m o d n = m m^{ed} \mod n=m medmodn=m
使用公钥和私钥进行加密和解密
-
加密:使用公钥 ( e , n ) (e, n) (e,n) 对消息 m m m 进行加密,得到密文 c c c:
c = m e m o d n c = m^e \mod n c=memodn -
解密:使用私钥 ( d , n ) (d, n) (d,n) 对密文 c c c 进行解密,得到原始消息 m m m:
m = c d m o d n m = c^d \mod n m=cdmodn
可靠性
在已知 ( e , n ) (e,n) (e,n)的情况下要得到 d d d,先要得到 ϕ ( n ) \phi (n) ϕ(n),正向求 ϕ ( n ) \phi (n) ϕ(n)要因式分解求出 p , q p,q p,q只能试除出来。
随机的p,q
用很大的随机数去通过素性测试,错误概率很小,费马小定理是质数测试的理论基础之一,不会去测试因子,所以对求n的因子没有作用。
费马小定理:
如果 p p p 是一个质数,并且 a a a 是一个整数,那么 a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1 \pmod{p} ap−1≡1(modp)。
https中的非对称加密和对称加密
客户端和服务器的业务数据传输,仍然是使用对称加密的方式(对称加密速度快,成本低)。只不过,为了保证对称密钥能够安全到达服务器,这才引入非对称密钥,来保护对称密钥。在对称密钥传输完成后,就不用非对称密钥,改用对称密钥了。
但传递公钥时可能会被中间人攻击
**中间人攻击,破解的关键在于让客户端能够信任公钥!!这就需要权威机构(CA)了。**验证公钥的可信性。
非对称加密和对称加密在HTTPS中的实现
- 握手阶段(Handshake):
- 客户端问候(Client Hello): 客户端向服务器发送问候消息,其中包含客户端支持的加密算法、协议版本和一个随机数。
- 服务器问候(Server Hello): 服务器回应客户端,选择一种加密算法,发送服务器的证书(包含公钥)以及一个随机数。
- 密钥交换(Key Exchange):
- 生成会话密钥:
- 客户端生成一个称为“预主密钥”(pre-master secret)的随机数。
- 使用服务器的公钥加密预主密钥,并将其发送给服务器。
- 计算会话密钥:
- 服务器使用私钥解密预主密钥。
- 客户端和服务器使用预主密钥以及之前交换的两个随机数,计算出相同的会话密钥(对称密钥)。
- 生成会话密钥:
- 加密通信:
- 对称加密数据传输:
- 之后的所有数据传输都使用会话密钥进行对称加密。
- 常用的对称加密算法包括 AES(Advanced Encryption Standard)、DES(Data Encryption Standard)等。
- 数据完整性和认证:
- 使用消息认证码(MAC)或哈希函数(如 HMAC)来确保数据的完整性和真实性。
- 对称加密数据传输:
具体的对称加密过程
在握手阶段成功建立会话密钥后,客户端和服务器都使用该会话密钥进行对称加密和解密。对称加密的具体过程如下:
-
加密: 客户端或服务器使用会话密钥和选定的对称加密算法(例如 AES)对要传输的数据进行加密。加密后的数据称为密文。
密文 = 对称加密算法 ( 原文 , 会话密钥 ) \text{密文} = \text{对称加密算法}(\text{原文}, \text{会话密钥}) 密文=对称加密算法(原文,会话密钥) -
解密: 接收方使用相同的会话密钥和对称加密算法对密文进行解密,恢复原文。
原文 = 对称加密算法 − 1 ( 密文 , 会话密钥 ) \text{原文} = \text{对称加密算法}^{-1}(\text{密文}, \text{会话密钥}) 原文=对称加密算法−1(密文,会话密钥)