1.简介
对称密钥交换是一种方法,其中一个人(通常称为Bob)将共享密钥S发送给他希望用于加密数据通信线路的另一个人(通常称为Alice)。
经典解决方案采用函数f,通常是具有以下属性的XOR函数:
f(f(A,B),A)= B和f(f(A,B),B)= A
Bob可以使用私钥B编码S到f(B,S)并将其发送给Alice。
爱丽丝现在使用私钥A编码f(B,S)到f(f(B,S),A)并将其返回给Bob
Bob现在使用f(f(f(B(S,S),A),B)= f(A,S)删除其私钥并将其发送给Alice
爱丽丝使用f(f(A,S),A)= S删除私钥,并拥有共享密钥。
2.问题
在不安全的连接上,可以通过监听Bob和Alice之间的通信来执行中间人攻击。 黑客知道f(B,S),f(f(B,S),A)和f(A,S)。
通过计算f(f(f(B(S,A),f)(B,S)),黑客确定A。然后通过计算f(f(f(A(S,S),A)),他可以确定S,然后侦听在加密的连接上。
3.解决方案
如果我们可以找到另一个函数g,对于某些或全部x,f(x)!= g(x)但具有相同的性质g(g(A,B),A)= B且g(g(A, B),B)= A,我们可以在f和g之间随机选择,因此黑客不知道是使用f还是g,这使得中间人攻击无法使用。
我们发现此函数是具有特殊属性A XAND B = NOT(A XOR B)和A XOR B = NOT(A XAND B)的XAND函数。 因此,这是XOR的反函数。
现在,我们可以使用漂亮的逻辑属性。
令f为XOR或XAND函数。
令g为XOR或XAND的函数。
现在我们有公理f(g(f(B,S),A),B)= g(A,S)。 在我们的握手中,鲍勃只需要f,而爱丽丝只需要g。 因为对方不需要知道f或g是什么,所以他们可以将其保密,从而使黑客无法确定使用了哪个。 现在,通过对每个比特随机使用XOR或XAND来完成加密。
4.实施
鲍勃想将随机密钥S发送给爱丽丝。
Bob和Alice创建私钥B和A。
现在,鲍勃和爱丽丝创建了第二个私钥,其长度与A和B相同,鲍勃Q则为鲍勃,R为爱丽丝。
鲍勃计算E = B XORS。
对于E中的每个位,我们查看Q中相同位置的位,如果为1,则翻转E中的位,使这些位使用XAND函数。 然后,我们将E发送给爱丽丝。
爱丽丝计算F = A XOR E,如果R中的对应位为1,则翻转F的位,然后将F发送给Bob。
现在,鲍勃计算G = F XOR B,如果Q中的位为1,则再次翻转G中的所有对应位,然后将G发送给Alice。
爱丽丝现在计算T = G XOR A,并翻转T中的相应位,其中R中的位为1。
T现在等于S,我们可以建立一个编码的通信。
黑客现在只能确定R(B,S)或Q(A,S),但不知道R,B,Q和A,因此不可能确定S。
5.例子
鲍勃·爱丽丝
共享密钥10011101 S
私钥10110001 B 00111001 A
专用功能键00110101 R 11001111 Q
Bob-> Alice:R(B,S)Alice-> Bob:Q(A,R(B,S))= Q(A,E)
B 10110001 A 00111001
S 10011101 E 00011001
-------------- XOR -------------- XOR
X 00101100 X 00100000
R 00110101 Q 11001111
--------------如果R = 1则翻转X ---------------如果Q = 1则翻转X
E 00011001 F 11101111
Bob-> Alice:R(B,Q(A,R(B,S)))= R(B,F)Alice:Q(A,R(B,Q(A,R(B,S)))) )= Q(A,G)
B 10110001 A 00111001
传真11101111 G 01101011
-------------- XOR -------------- XOR
X 01011110 X 01010010
R 00110101 Q 11001111
--------------如果R = 1则翻转X ---------------如果Q = 1则翻转X
G 01101011 T 10011101
S 10011101发送成功。
From: https://bytes.com/topic/security/insights/972526-secure-symmetric-key-exchange