Tor在建立虚电路以后,需要与路径上的节点商量密钥用于后续分组(packet)内容的多层加密。
使用对称加密算法时,密钥交换是个大难题,因此Tor采用的是Deffie-Hellman 密钥交换算法
。
先对Deffie-Hellman 密钥交换算法做了简单介绍以及应用场景的介绍,然后介绍了该算法的原理,举了一个例子进行说明。
Deffie-Hellman 密钥交换算法是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
– wikipedia
Deffie-Hellman 密钥交换算法是一种密钥交换算法。也就是说两个节点可以通过该算法交换密钥,但是后续的消息加密要用其他的算法来进行。
Deffie-Hellman 密钥交换算法基于一个数学难题:离散对数问题。简单的说:
A = g a m o d p A=g^a \ mod \ p A=ga mod p, 已知 g , a , p g,a,p g,a,p ,求 A A A的话容易,直接代入计算即可。但如果要从 A , g , p A, g, p A,g,p反向推导出 a a a的话则很难。Deffie-Hellman 密钥交换算法中,密钥就是这里的 a a a。
假设现在Alice和Bob在通信前需要交换密钥,用于后续数据包的加密。
Alice: 选取大素数 P a P_a Pa,公开
Bob: 选取大素数 P b , P b < P a P_b, P_b
Alice:
Bob:
Alice的密钥: K a = Y b X a m o d P a Ka = Y_b^{Xa} \ mod \ P_a Ka=YbXa mod Pa
Bob的密钥: K b = Y a X b m o d P a Kb = Y_a^{Xb} \ mod \ P_a Kb=YaXb mod Pa
K a = Y b X a m o d P a = ( P b X b m o d P a ) a X m o d P a = P b ( X a ∗ X b ) m o d P a = ( P b X a m o d P a ) X b m o d P a = Y a X b m o d P a Ka = Y_b^{Xa} \ mod \ P_a \\= (P_b^{Xb} \ mod \ P_a)^X_a \ mod \ P_a \\= P_b^{(X_a * X_b)} \ mod \ P_a \\= (P_b^{X_a} \ mod \ P_a)^{X_b} \ mod \ P_a \\= Y_a^{X_b} \ mod \ P_a Ka=YbXa mod Pa=(PbXb mod Pa)aX mod Pa=Pb(Xa∗Xb) mod Pa=(PbXa mod Pa)Xb mod Pa=YaXb mod Pa
公开的: P a , P b , Y a , Y b P_a, P_b, Y_a, Y_b Pa,Pb,Ya,Yb
保密的: X a , X b , K X_a, X_b, K Xa,Xb,K
优点:
缺点:
尽管有一些缺点,但是由于该算法能在透明的信道中安全地交换密钥,因此Tor网络中需要交换密钥的时候采用的是该算法。