迪菲·赫尔曼密钥交换是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
假设 A 和 B 要交换密钥,迪菲·赫尔曼密钥交换的过程如下:
- 首先,A 公开一个质模数和一个生成元,假设分别是 17 和 3。注意:质模数是一个质数,而且这个数越大越好。
- A 和 B 分别选取一个随机数,分别记做 x a x_a xa 和 x b x_b xb,这个随机数只有自己知道,不对外公布,假设 x a = 15 x_a=15 xa=15, x b = 13 x_b=13 xb=13。
- 两人分别将 x a x_a xa 和 x b x_b xb 代入下式中的 x x x,求出 y y y: y = 3 x m o d 17 y=3^x \ mod \ 17 y=3x mod 17
- 我们将 A 求出来的 y y y 记做 y a y_a ya,将 B 求出来的 y y y 记做 y b y_b yb,不难算出, y a = 6 y_a=6 ya=6, y b = 12 y_b=12 yb=12,然后 A 和 B 公开交换 y a y_a ya 和 y b y_b yb。
- A 拿到 y b y_b yb 后,做如下计算: y s = y b x a m o d 17 = 1 2 15 m o d 17 = 10 y_s=y_b^{x_a} \ mod \ 17=12^{15} \ mod \ 17=10 ys=ybxa mod 17=1215 mod 17=10
- B 拿到 y a y_a ya 后,做如下计算: y s = y a x b m o d 17 = 6 13 m o d 17 = 10 y_s=y_a^{x_b} \ mod \ 17=6^{13} \ mod \ 17=10 ys=yaxb mod 17=613 mod 17=10
- 这时 A 和 B 拿到了相同的密钥——10,接下来 A、B双方就可以用这个密钥进行加密通信了。
在上述过程中,除了 A、B 自己选取的随机数外,其他信息都是公开的,即使被第三方获取到,只要质模数足够大,要想破解密钥几乎不可能。