一、颜料混色的秘密
想象一下,你和朋友各自有一罐私密的颜料 ,但你们想共同调出一种只有彼此知道的新颜色,而旁观者即使看到你们的操作也无法复现。奇怪的是,你们全程没有直接交换颜料,却能达成共识------这就是**迪菲-赫尔曼密钥交换(DH算法)**的绝妙比喻。
1976年,密码学家Whitfield Diffie和Martin Hellman提出了这一革命性的算法,解决了如何在公开信道安全交换密钥的难题。今天,它仍是HTTPS、VPN、SSH等协议的基石。但它的核心思想,竟与颜料混色有着异曲同工之妙。
假设Alice和Bob想协商一个共同的秘密颜色,但他们的通信被 eavesdropper(窃听者)Eve监视:
- 公开配方 :Alice和Bob先约定一种公共基础颜色(比如黄色),所有人都能看到。
- 私密调色 :
- Alice私下选择一种秘密颜料 (红色),混入公共黄色,得到橙红色,发给Bob。
- Bob也选择自己的秘密颜料 (蓝色),混入黄色,得到黄绿色,发给Alice。
- 最终混合 :
- Alice将收到的黄绿色,再混入自己的红色,得到棕褐色。
- Bob将收到的橙红色,混入自己的蓝色,同样得到棕褐色。
关键点:Eve全程看到了黄、橙红、黄绿色,但她无法分离出Alice的红色或Bob的蓝色,因此无法推导出最终的棕褐色。
二、迪菲-赫尔曼Diffie--Hellman 密钥交换
DH算法的核心是为了生成一个共享的秘钥,只有交流的双方知道这个秘钥,因此即使密文被截获也不用担心。
- 不直接传输密钥,而是通过数学计算让双方各自推导出相同的密钥。
- 即使攻击者截获所有交换的数据,也无法计算出共享密钥(除非能解决离散对数问题)。
- 仅用于密钥交换,不用于加密/解密消息(通常结合对称加密使用,如 AES)。
三、秘钥交换流程
假设 Alice 和 Bob 要在不安全的信道上协商一个共享密钥:
步骤 1:协商公共参数
Alice 和 Bob 公开协商:
- 一个大素数 P
- 一个生成元 G (通常是2或者5)
⚠️ 注意 :P 和 G 可以公开,但必须足够大(如 2048 位),否则可能被暴力破解。
步骤 2:双方生成自己的私钥和公钥
- Alice :
- 随机选择一个私钥 a a a(保密)
- 计算公钥 A = G a m o d P A=G^a \ mod P A=Ga mod P,并发送给 Bob
- Bob :
- 随机选择一个私钥 b b b(保密)
- 计算公钥 B = G b m o d P B=G^b \ mod P B=Gb mod P,并发送给 Alice
步骤 3:计算共享密钥
-
Alice 收到 B B B,计算:
K = B a m o d P = G a b m o d P K=B^a mod P= G ^ {ab} mod P K=Bamod P=Gabmod P
-
Bob 收到 A A A,计算:
K = A b m o d P = G a b m o d P K=A^b mod P= G ^ {ab} mod P K=Abmod P=Gabmod P
-
最终 ,Alice 和 Bob 得到相同的 K K K,可用于对称加密(如 AES)。
四、示例
公开P和G
P = 23 , G = 5 P=23,G=5 P=23,G=5
Alice
选择私钥 a = 6 a = 6 a=6,计算公钥 A = 5 6 m o d 23 = 8 A = 5 ^ 6 \ mod \ 23 = 8 A=56 mod 23=8
Bob
选择私钥 b = 15 b=15 b=15,计算公钥 B = 5 15 m o d 23 = 19 B = 5 ^ {15} \ mod \ 23 = 19 B=515 mod 23=19
Alice和Bob交换公钥
Alice计算共享秘钥 K = B a m o d P = 1 9 6 m o d 23 = 2 K = B^a \ mod \ P = 19 ^ 6 \ mod \ 23 = 2 K=Ba mod P=196 mod 23=2
Bob计算共享秘钥 K = A b m o d P = 8 15 m o d 23 = 2 K = A^b \ mod \ P = 8 ^ {15} \ mod \ 23 = 2 K=Ab mod P=815 mod 23=2
最终双方得到共享秘钥 K = 2 K=2 K=2,可用此秘钥加密双方信息。
五、为什么DH算法安全
离散对数问题
攻击者即使截获 P , G , A , B P,G,A,B P,G,A,B 也无法计算 a 或 b,因为: A = G a m o d P A=G^a \ mod \ P A=Ga mod P,求 a a a 是离散对数问题,目前没有高校的算法可以在合理的时间内计算 a a a,除非 p p p 太小。
前向保密
即使攻击者长期记录所有通信,并在未来破解了 a 或 b,也无法解密过去的会话,因为每次会话的 a 和 b 都是随机生成的。
六、存在的问题
DH 算法本身不提供身份认证,因此可能遭受 中间人攻击(攻击者冒充 Alice 或 Bob)