RSA算法论证和TLS1.2

RSA算法

欧拉函数和欧拉定理被广泛用于模运算,之前的帖子有过相关OJ题目,
https://blog.csdn.net/u013032097/article/details/91537467
https://blog.csdn.net/u013032097/article/details/91534872
因为RSA算法也是基于欧拉定理,参考网文证了一下RSA,吐血……

RSA被用于非对称加密,关于非对称加密,来自百度百科,对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

理论

  • 欧拉函数(φ):
    小于n的正整数中与n互质的数的数目,对于质数n,φ(n) = n - 1;
  • 欧拉定理:
    若n和a为整数,且a和n互质,则a ^ φ(n) ≡ 1 (mod n);
  • 模反元素:
    如果两个正整数a和n互质,那么一定可以找到整数b,使得 a * b - 1 被n整除,或者说ab被n除的余数是1。这时,b就叫做a的“模反元素”。
  • 取模运算
    (a * b) % p = (a % p * b % p) % p
    a ^ b % p = ((a % p) ^ b) % p

私钥和公钥

取质数p和q,N = p * q,计算欧拉函数r = φ(N) = φ§ * φ(q) = (p - 1) * (q - 1);
取整数e,满足1 < e < r,且e和r互质,则e为公钥;
取整数d,满足e * d % r = 1,即求e关于r的模反元素,则d为私钥;

加密和解密

加密:对于传输的数m,计算m ^ e % N = c,则c为加密后传输的内容;
解密:对于接收的数c,计算c ^ d % N = m,则m为解密的原始内容。

可靠性

对于已知e和N,想要求解d,则需要求出 φ(N),而 φ(N) = (p - 1) * (q - 1),所以 φ(N)的求解依赖于p和q,而N = p * q,所以最终的问题变为N的质因数分解,所以,RSA的可靠性依赖于大数的质因数分解非常困难,除了暴力破解还没有其他办法。如果有一天大数的质因数分解可以快速求得,那么RSA也将不再可靠。

论证

下面来验证加密函数(m ^ e % N = c)和解密函数(c ^ d % N = m)的可靠性。

(1) m ^ e % N) = c % N
(2) (m ^ e % N) ^ d = (c % N) ^ d
(3) (m ^ e % N) ^ d % N= (c % N) ^ d % N
(4) m ^ (ed) % N = c ^ d % N

如果m和N互质

m ^ (1 + r的整数倍) % N = c ^ d % N
m * ((m ^ r) * (m ^ r) * … * (m ^ r)) % N = c ^ d % N
由欧拉定理得,m ^ r ≡ 1 (mod N),则c ^ d % N = m。

如果m和N不互质

因为N唯一的两个因子是p和q,若m和N不互质,则m存在因子p或q,则m等于kp或kq,k为正整数,这里设m = kp。
因为kp和q互质,根据欧拉定理,
kp ^ φ(q) % q = 1
kp ^ (q - 1) % q = 1
(kp ^ (q - 1) % q) ^ (h(p - 1)) = 1
kp ^ h(p - 1)(q - 1) % q = 1
kp ^ h(p - 1)(q - 1) % q * (kp % q) = kp % q
kp ^ (h(p - 1)(q - 1) + 1) % q = kp % q
kp ^ (hr + 1) % q = kp % q
kp ^ ed % q = kp % q 即 kp ^ ed ≡ kp (mod q)
所以kp ^ ed = tq + kp,这里的t和k为正整数,因为等式左边一定能被p整除,所以等式右边的tq一定含因子p,所以m ^ ed = xpq + kp = xN + m. m ^ ed ≡m (mod N),带入(4),则c ^ d % N = m。

TLS1.2流程

RSA算法论证和TLS1.2_第1张图片

  1. Alice传递随机数(Client_Random),以及客户端支持的加密套件(Cipher_Suites);

  2. Bob确认后续使用的加密套件,并传递服务端随机数(Server_Random),以及Server证书;

  3. Server证书中包含用于非对称加密的Server公钥以及验证证书完整性的签名。Server对证书进行校验,并对生成的Pre-master Secret用Server公钥进行加密;

    关于证书的签名,CA颁发Server证书时,会使用哈希+CA私钥加密的方式对Server证书生成签名;当Alice收到证书后,使用CA证书(存在于本机)中的CA公钥对签名进行解密生成哈希值,同时计算证书哈希值,将生成的哈希值和计算的哈希值进行对比,以确认证书的完整性。

  4. Alice传递Server公钥加密后的Pre-master Secret;

  5. Bob使用Client Random、Server Random和Pre-master Secret生成用于对称加密的密钥session key;

  6. Bob会在 new_session_ticket 数据中携带加密的 session_ticket信息,如果客户端再次需要和该服务器建立连接,则在 client_hello 中扩展字段 session_ticket 中携带加密信息,一起发送给服务器,如果服务端解密成功,则不需重新协商密钥;

  7. 后续数据报文通过session key加密传输。

你可能感兴趣的:(算法)