这是一个我无法解决的面试问题:
您有客户端和服务器。客户端可以将文件发送到服务器,服务器执行该文件。这是通信协议:
HELLO
命令
第三方可以拦截通信并更改消息。作为第三方,您的工作拦截通信并发送不同的文件,但您不知道哈希算法。
这里有哪些可能的解决方案?
我想到的是尝试学习哈希算法,但他们说这太复杂了,并且有一种更简单的方法。
答案 0 :(得分:3)
如果你可以捕获两个连接(同时或连续),那么你的行为如下:
在第一次连接期间,MITM将其假文件作为挑战发送给客户端。客户端返回伪文件的哈希值。现在必须中断连接以避免服务器或客户端日志中的不必要条目(如果让过程继续,则会发生这种情况)。
由于我们中断了第一次连接,客户端将重新连接。在这个阶段,MITM让客户端获得真正的挑战,并将新的挑战,其哈希和客户端文件及其哈希发送给MITM。 MITM将文件及其哈希值替换为第一次尝试时获取的伪文件和假哈希,并将所有内容发送到服务器。
此方案要求(a)客户端可以处理大文件作为质询(即,它没有固定大小的缓冲区或长度检查),(b)如果客户端将重新连接,则客户端将重新连接第一个连接被删除,(c)我们可以让有关已断开连接的条目进入服务器或客户端日志。
要求" a"似乎非常严重,在现实环境中,输入参数(例如挑战)的有效性检查是强制性的。