如何规避中间人攻击——在老大哥眼皮底下交换密钥

【按】非常感谢来稿的朋友!本期来稿的朋友讲述的是反追踪的科学方式。如果您阅读过并还记得我们曾经发布过的《完美隐身》系列(这里是最后一集),您会熟悉这点,即:反追踪的主要思考方式就是,拖垮你的对手,将追踪者带入您设置的迷宫,耗尽他们的资源和精力,您就赢了。

本文是将这一技巧运用在密钥交换上的思考。

如您所知,IYP 的读者来稿通道主要支持解决方案的思考,即 根据您和您的周边人所面临的难题、困境,寻找可能的方法和措施。它可以是技术角度的、可以是思想角度的、可以是行动经验的延展、也可以是前所未有的创造力。唯一的期待是,实用价值。

我们在这里,随时恭候您的智慧。

black and silver skeleton key

如果你想要达到100%规避中间人攻击,这是不可能的,因为互联网本身就是一个庞大的中间人。但是,要达到 99.999%,则是可行的。

如果你把中间人想象成无所不能的,那么这个问题必然无解。但是他们并非无所不能,中间人可以分为三种:自动化的脚本、人工智能、和人类。这三种中间人都各有其缺陷,只需要一一击破即可。

对于自动化的脚本,只需要灵活的变动一下,它们就会失效。

对于人工智能,当前人工智能还远不及人类,它们过不了比较复杂的图灵测试,所以你需要把密钥的交换过程设计成人工智能无法处理的形式。

对于人类,而且是有限数量的人,你可以对自己进行一下评估,他们愿意在你身上花费多少成本?他们愿意雇佣一个人24小时监视你吗?他们会雇佣几个人监视你?对于大多数人来说,他们不会在你身上花费十分钟以上的工时,他们无法雇佣70多亿人去监视另外70亿人。

现在我们已经知道他们无法做到的事情了,你需要设计一种密钥交换方式,让他们无法跟上你。

如果你的密钥交换过程只能由人类来处理,而且非常耗费时间成本,对你进行中间人攻击的成本将会超过收益。

本文只会讲述如何设计密钥交换过程的想法,而不会告诉你如何做。因为如果多数人都使用同一种方式,那它就丧失了灵活性,他们会被自动化的脚本轻易的收拾掉。

正确的做法是每次都使用一种新的方式,越稀奇古怪越好。

接下来你会把中间人拉到和你同一水平线上,再用丰富的资源战胜他们。他们必须支付和你同等、甚至更多的时间才能对你进行中间人攻击。如果你坚信你是多数的一方,他们的时间一定是比你少的。时间是最难以压缩的成本,他们的金钱可以超过你们,他们的算力可以超过你们,他们拥有的节点也可以超过你们,他们的寿命加起来不能比你们的寿命加起来更多,他们的一天不能超过24个小时 ……

你的信息通道可以分为三种状态:无人监管、监视、篡改。

无人监管是最理想的状态,人们在无窃听器的密室里和朋友们谈话就是这种状态。

监视状态意味着你们的谈话将被记录。

篡改状态是最糟糕的,你发出的信息可能被完全篡改,或者部分的篡改,他们也有可能冒充你的朋友说话,冒充你讲话。阻断信息仍然是成本最低的 ,他们更乐意使用这种方式,因为冒充别人需要时间成本而且容易被发觉。

你正处于哪种状态?如果你和朋友可以正常交流,你们很有可能处于前两种状态:无人监管和监视。

即使你们处于无人监管状态,你们也无法得知是否已经摆脱监视,疑虑仍然存在。

如果你们处于被监视状态,这种监视在一些情况下可能会转变为篡改状态。比如当你发送你的gpg密钥,自动化的脚本检测到并介入,替换你的密钥对你进行中间人攻击。

如果你们处于被篡改状态,你可能会看到某些视频、图片、文字被屏蔽,别人可能完全看不到你发出的信息,这时你最好更换其他信息通道,至少让它处在前两种状态。

当一项聊天工具宣称自己是加密聊天、且注重隐私,这意味着他们可能不会篡改你的信息。这不意味着他们不会监视你,但只要能监视还是保留着篡改的权利。

你的目的是让你的信息通道从潜在的监视状态转换为无人监管状态。

以下是我认为你所设计的密钥交换方式应该具备的要素:

1.在密钥交换前,和你的朋友随便聊点什么。这是一次简易的图灵测试。在你们实施交换前的言语不要有明显的可识别标识,明显的标识会让脚本更容易检测到你们将要进行的事,从而让您的 “待遇”。从脚本或者AI适时地切换成人工服务,这样他们就可以用脚本+人工的方式提高工作效率。

  1. 把密钥分割成几块,每块通过不同的信息通道(或者说聊天工具)分散传递,用哈希值确保它的完整性。这样可以让网络服务提供商作为中间人的可能性变得很低。

3.把你的密钥打乱,不管用什么方式都可以,但是不要用成形的加密方式,我们的目的就是规避自动化加密和解密的缺陷,这个缺陷只能由人的随机性来弥补。

发挥你的创造力和想象力,如果你不知道怎么做,可以尝试从隐写术反审查技术中汲取灵感。不要遵从你的第一想法,因为你的第一想法别人也很容易想到,你可能会和很多人在用同样的方式,这样你们就更容易被自动化的脚本 “解决”。把还原密钥的步骤写下来,做好把它告诉你的朋友,以便他们可以更好地准备。

4.预估一下还原密钥所需要的时间,最好自己还原一遍,这样你可以精确的计算时间。

你和你的朋友对于密钥的交换过程都应该有清晰的认知,能够发现交换过程中的异常状况。将打乱分割后的密钥和还原方法交给你的朋友,还原密钥应该立刻进行,在最短时间内完成整个握手过程。

从你发出密钥和还原方式后计算时间,如果时间超出正常范围,则视为交换失败。

你的目的是让瞄准你的中间人必须时刻紧紧盯着你,如果你允许远超正常时间范围的交换过程,你的中间人就可以暂时截留你的密钥,等到他们的人员空出时间时处理,不要给他们这种喘息空间。你可以和你的朋友约定在接下来的一个月内的任意一个时间段实施密钥交换,时间的选定是即兴的,在开始前你也不知道什么时候会开始,你的中间人就必须在接下来的一个月内紧盯着你。

5.你完成了密钥交换,但这还没有结束。评估一下他们愿意为你花费的成本,你甩开他们了吗?你感到更安全了吗?不,因为你得不到反馈,当潜在的中间人被甩开时,他们不会说:”我走了,好好照顾自己”。如果他们不愿意在你身上花时间,你得到的密钥是纯净的概率可能是95%,如果他们派了一个人实时监视你,你得到的密钥纯净的概率可能是1%。

这个概率我们只能去猜,它达不到我们的要求,我们要的是99.9999%纯净的密钥。不管你所得到的密钥是否纯净,我们可以继续在它建立的新信道中交换新的密钥,我将这个过程称为 “增殖”。这是个生物学名词,因为我们接下来要做的和生物学家类似。

你将用一个密钥增殖多个密钥,如果新信道遭受了阻断,这意味着你的中间人替换了密钥,并且阻断了信息,你的通信状态从被监视状态转换为篡改状态,中间人已经露馅了,你应该抛弃这个信息通道。

只要你仍处于监视状态/无人监管状态,你就能不断地在前一代密钥所建立的信道中交换新密钥,也就是不断地让密钥 “增殖”。

中间人终归会犯错,是人就会犯错,他们要么会暴露自己的存在,要么会漏过纯净的密钥,一旦他们漏过一次,你就能甩开中间人。难点在如何将纯净的未遭到攻击的密钥从被替换过的密钥中筛选出来。

纯净的密钥相互之间能够彼此验证,被替换的密钥之间也能彼此验证,但是纯净的密钥和被替换过的密钥之间无法彼此验证。如果你发现了两批密钥,两批之间无法相互验证,也不要窃喜,因为中间人可能进行认知欺骗,伪造两批密钥无法彼此验证,让你以为其中一定有一批是纯净密钥。

你只需记住一点,如果一个密钥是纯净的,那么它的增殖一定是世世代代纯净的。你迫使中间人出错的可能越大,你得到纯净密钥的可能越大。然后你要像生物学家筛选果蝇一样,从多代增殖中筛选出带有纯净基因的密钥。

子代密钥如果是不纯净的,那么他们的父代也一定不纯净。如果一批密钥世世代代能够彼此验证,他们的数量越多,他们是纯净的概率越大。

6.动态地评估当前的状况,保持警觉。

感受到痛苦了吗?这就对了,你的中间人要比你痛苦十倍。这样你才能甩开他们,这是意志力的较量。⚪️

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据