TLS Perfect Forward Secrecy 之 DH/ECDHE
接着上一篇 TLS Perfect Forward Secrecy 之 RSA 缺陷 继续来看看 DH/ECDHE 如何解决这个问题。 前面提到 RSA 做密钥协商过程中,最关键的缺陷是客户端用公钥加密了 PreMaster Key,服务器用私钥解密 PreMaster Key。理想中更好的方法是 公钥/私钥只用来对证书签名,不参与到密钥协商的过程中来,换句话说,希望通信的双方能独立计算出对称加密的密钥。于是密码学家找到了尘封已久的,几乎与 RSA 同时出现的 DH 算法。 其实我一直有一个疑问:既然问题出在传送 PreMaster Key,那么客户端不发送 PreMaster Key 不就行了?握手的过程中已经有了 2 个随机数了,难道一定要 3 个随机数才能生成 master key 吗? 首先来看一下 DH 算法的数学基础。 +-------------------------------------------------------------------+ | Global Pulic Elements | | | | p prime number | | a prime number, a < p | +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ | User A Key Generation | | | | Select private Xa Xa < p | | Calculate public Ya Ya = a^Xa mod p | +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ | User B Key Generation | | | | Select private Xb Xb < p | | Calculate public Yb Yb = a^Xb mod p | +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ | Calculation of Secret Key by User A | | | | Secret Key K K = Yb^Xa mod p | +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ | Calculation of Secret Key by User B | | | | Secret Key K K = Ya^Xb mod p | +-------------------------------------------------------------------+ 上面一共出现了 a, p, Xa, Ya, Xb, Yb, K 共 7 个数,其中: ...