Pages

Monday, 17 February 2014

课堂上传纸条如何防范中间人攻击?(这是广义的“翻墙术”)

首先第一种方案就是排除中间人,直接建立点对点连接,例如直接将纸条从空中抛送过去,顺便还能锻炼自己的投篮水平,为以后进入国家队作准备。缺点就是如果隔太远这种方式丢包率太大了。
第二种方案就是只使用可信网关连接,在自己与目标之间只请求自己信得过的哥们儿姐们儿进行传递。
如果必须在恶劣的情况下进行安全的数据传递,那么有如下几个技巧:
1、CDMA(码分多址),将一段信息拆分成两份,再从不同渠道传递,这是非常简单的一种加密方式。例如把要说的话写成一行,再从中间横向撕开。目 标收到两份信息后,再拼接起来进行解密。其具有加密解密简便易行的优点。但是有一些字即使从中间撕开通过上下文也能判断出来大致意思。所以这还需要其他辅 助加密方式,后面谈到。
请注意CDMA技术完全不是这个意思,仅为搞笑
2、TD-SCDMA(时分同步码分多址),将一份信息拆分传递时,应当等目标安全收到一半信息后,再进行第二次传输。这样老师截获完整信息的可能性将大大降低。
请注意TD-SCDMA技术完全不是这个意思,仅为搞笑
3、Scrambler(随机扰码),在字里行间插入一些不可解读的字符,例如原文是:
放学后到学校后面的小树林等我,加入随机扰码后:
放魅学后蒙到学赞校后翠面的小澧树林等齷我
由于随机扰码的存在,即使得到一半的纸条,也很难通过上下文推测出原文。
4、跳板技术,有时候为了避免老师发现通信链路的存在,不应建立直接的链路,例如你要传到左上角的女孩手里,则应先向右传,通过多级代理跳板,让老师无法发现通信的源头和目标。
5、Token-Ring(令牌环网),事实上由于跳板技术需要很多人参与,有时候你无法说服所有人,这时候可以组成令牌环网,把需要传递纸条的男 女同学组成一个令牌环网,按照既定的环路,有序的传输,例如一个典型的令牌环网像是这样,你是A需要传递消息给G,A-B-C-D-E-F-G,也就是你 先传给B,然后B给C,如此。同时F也有消息要传递给B,则采用环路的形式,F-G-H-I-A-B,也就是说F的纸条传递给G,G再传递给H,H传给 I,I传给你,你再将它给B。这样整个令牌环网的每个节点都可以获益于环网的信息传递,老师完全无法得知纸条的源和目节点。
此处仅利用了令牌环网的拓扑结构
6、MultiLink(多重链路),有时候链路的节点可能会临时性瘫痪(被老师叫起来回答问题)或者变得非常不安全(老师站在旁边),所以建立网络时任何两个节点之间不能只有唯一的链路,需要有多个备选的链路方案。
7、TTL(存活时间),在长时间的传输过程中,纸条被老师发现的可能性将增大。所以可以约定纸条如果在N个节点传递之后仍然无法抵达目标,则应由该节点直接销毁。
声明:
以上出现的专有名词,仅为博君一乐,不代表此种技术真正的实现原理和方式,切记切记。
—-
通信协议已经确定了,是传纸条这种公开协议,每一个节点都有打开纸条的方法和权限,攻击者很容易充当节点——所以我们不信任任何节点
依赖于使用双方都事先沟通好的特殊的纸张(别人买不到这种纸,就像是模仿不到数据包的构造法)、特殊的笔迹(签名),可以做到完整性和不可抵赖性
但是,双方沟通密钥的形式一定要保证机密,如果你也用通信的方式来沟通密钥(甚至不加密),别人可以直接换一张纸和对方说,那种纸买不到了,我们以后换这种吧,以后你的所有包都拦下来丢掉,对方就被欺骗了
要做到保密性,只有用端对端加密,纸条从你手中出去,就是密文的,不靠协议头,不靠签名,内容就做对称加密,对方有解密密钥。
加密的方式有很多种,由于条件简陋,一般就是用「古典加密算法」。但是福尔摩斯用生动形象的故事告诉了我们,当中间人采集信息样本量越大的时候,有越大的机会破解你的加密算法。
于是一种高能的密文传输方式就来了:
明文写一些带有顺序的干扰信息,让他人看了无价值,却能让收件人知道该通信的序号。密文用淀粉溶液写,对方使用碘液涂,显形后不可逆。这种化学反应多彩多 样,你们还可以定期用见面这种方式更换方程式,并校验序号。在密码被破解之前,同时具备了完整性、可用性、保密性、不可抵赖性。

这个需要的作为专业人士登场了,清清嗓子,嗯!
首先,反对目前排名前几名的答案,尤其是lovny同学以及Rix tox 同学的方法(注:为了提高B格)
作为一个当年专注上课传纸条并且后来大学投身信息安全方向的孩子,很有必要向大家想进行一些科(zhuang)普(bi)教(zhi)育(dao)
在搞清楚怎么办之前,有几个问题是首先要搞清楚的
1 什么是中间人攻击?
当主机A、和机B通信时,都由主机C来为其“转发”,如图一,而A、B之间并没有真正意思上的直接通信,他们之间的信息传递同C作为中介来完成,但是A、 B却不会意识到,而以为它们之间是在直接通信。这样攻击主机在中间成为了一个转发器,C可以不仅窃听A、B的通信还可以对信息进行篡改再传给对方,C便可 以将恶意信息传递给A、B以达到自己的目的。
通俗点儿说,就是你A通过你的好基友/小伙伴C向你的早恋对象B传小纸条,结果你的好基友/小伙伴B居然偷看你们的文字内容,甚至伪造你们传递的纸条,比如你给B写了一张纸条:
放学一块走,我们一起去吃麻辣烫,然后散会儿步回家,千万别给老师看见了
然后C获取了你的消息之后写了这样的一张小纸条转发给B的:
放学我去玩PS2,你自己回家吧
然后你的小女友B看了之后自然很伤心,回复:
你不是答应过我要陪我回家的吗,为什么要自己去玩游戏
结果C却自己重新写了一张小纸条给你:
不,我要和小明一起去吃饭!
于是,你的伤心欲绝,你的小女友也是,你们之间产生了深刻的误会却双方改不知情,最后你的小伙伴成功横刀夺爱,你却一无所知。
好的,看来你应该对什么是中间人攻击已经有了一个大概的了解了。
2 课堂上你具有什么样的条件?
所以什么回答封口蜡的同学可以退下了,你要是在课堂上又是点火又是玩蜡烛的,妥妥要被请家长的啊
回答直接传递的同学也可以退下了,要知道距离稍微远一点儿的情况下,直接抛投带来的风险就远大于中间人攻击带来的风险了!
不过,计算器还是可以有的!毕竟搞搞数学运算一般还是比较安全的在课堂上。
好的,下面开始正式的【小纸条防中间人攻击教程】
其实,这个问题分为两个部分
1 确认对方身份,同时交换密钥,也就是确认文字内容的确是发自发纸条的人而不是中间人
2 加密解密,也就是让纸条的内容中间人看不懂,而对方却能解密后看懂
针对1 确认身份,有几个方法
1 也就是最简单的——通过字体和签名来判断。也就是数字签名
不过这个在实际的操作上有个难点,也就是有的时候字对于非专业人士不是非常好识别,尤其是如果字比较丑,丑得又比较平庸的话…
2 特征值
找一个双方都知道且第三方不知道的问题作为识别码
当然,为了防止中间人攻击,你需要有点儿技巧。
栗子1
你知道她的生日是6(a)月20(b)日你的生日手机5(c)月3(d)日,【而中间人不知道至少是不完全知道】
然后你的第一张纸条就可以这样提问了:
请回复我两个数字
第一个数
你的生日的月份数乘上我的生日日期数加上你的生日日期数乘上她的生日月月份数(ad+bc)
第二个数
回复1-4这四个数中的一个x,我们就取abcd中第x大的数作为我们的密码(对称通信密钥)
好的,如果你最后收到的第一个数字是118话那你就可以肯定身份了,同时也获得了第二个数字2,也就是加密密钥6,这样即使中间人看到了所有的内容,依然无法知道你们通讯的密钥是什么,而如果他篡改了当中的信息,则会立刻被识破
栗子2
你家的门牌号是83她家的门牌号是62,,【而中间人完全不知道】
类似的,第一个纸条你可以这样写
请回复我两个数字
第一个数
请回复我们的门牌号的乘积
第二个数
回复1或者是0中的一个数,如果是0的话则以这两个数字中的偶数为加密密钥,如果是1的话则以奇数为加密密钥。
推断也同上,一个数字用于身份判断,一个数字用户密钥交换
当然,值得注意的是,有一个原则务必在上课前确定好,那就是无论如何不能将密钥在纸面上写出来,这样防止中间人通过更改表达方式的途径来骗取密钥。
2 好的,现在你们已经拥有了一个安全密钥了,现在你所需要做的就是利用这个安全密钥来加密解密了。
这里的加密解密实际上就是一个算法。
有很多很多算法可以用来借鉴,为了方便考虑,举几个安全性相对而言不是那么高的但是课堂上传纸条绝对够用的栗子:
栗子1 简单易懂间隔取字法
放学一块走,我们一起去吃麻辣烫(请原谅我偷懒缩短一下内容…)
使用的加密密钥是6
于是我们从头开始每6取一个字(包括符号),同时在原句中划掉。到头后循环回来。
大致的过程应该是
原文:放学一块走,我们一起去吃麻辣烫
密文:,
原文:放学一块走我们一起去吃麻辣烫
密文:,吃
原文:放学一块走我们一起去麻辣烫
密文:,吃一
原文:放学块走我们一起去麻辣烫
…..
于是,你最后得到的密文就成为了:
,吃一起学一块烫麻去辣走放们我
解密方法反推之就可以
栗子2 万能的二进制选字法
放学一块走,我们一起去吃麻辣烫,然后散会儿步回家,千万别给老师看见了
使用的加密密钥为你家的门牌号83
首先,将门牌号转化为二进制
1010011
然后,加密开始,汉字和二进制数字分列两行,一一对应,然后1就取,0就不取
为了方便演示,我在word里面排了一下版截了个图放上来,其实在纸上做这些运算还是蛮方便的
于是你最后得到了密文:放一,我学走起去块一辣烫们麻吃
解密的方法也就是按照加密方法逆推
如果还想增加加密强度,还可以考虑对密文再进行一轮加密,当然解密的难度也会随之有所提高。
考虑到实际的情况,以上的加密方法都没有将汉字转化为诸如二进制编码之类进行处理,基本上都是基于汉字的排序变化
无论如何加密,对于短文字的加密效果都是很糟糕的,因为很容易通过汉字本身去拼凑内容!
比如如果你的纸条内容是 好的呀 ,无论怎么改变汉字排序,别人都会轻易的知道被加密的内容。但是这样的加密方法对于长原文而言在限定的条件下还是可行的。
密码学,或者说是信息安全领域当中有个基本原则——信息的生存周期小于破译周期,对于一堂课来说一个50字左右的密文针对没有专业计算设备的用户已经完全可以达到加密效果了。
同时这样的加密价值还体现在针对有一定长度的文字上面,尤其是具有一定的判断语句上面。比如说“今天放学我们一起吃饭,然后一起写作业,不去打球也不去玩游戏了了。”通过加密之后就无法获取准确信息了!
—————————2月2日补充-增加校验机制———————————
感谢 @朱晋玄 的提醒,在之前的方法都只是针对信息传输的安全性,也就是不会被破译,但是可能存在有中间人在不知道真实信息的情况下让传输的信息产生变化从而达到干扰信 息的目的,比如将早上的早改成晚上的晚,比如把数字9改成数字8等。对于这样的问题,就需要使用到密码学中的另外一个知识了:效验码。
这里给出两个类型的可以用于这种条件的校验码方案,只做例子,当中的具体参数都是可以用于配制的
1 通过拼音声调设置校验码
我们决定将第一声对应数字1,第二声对应数字2,第三声对应数字3,第四声对应数字4,轻声对应数字0,将每3个字(标点符号不算)设为一个最小单元,计 算小单元总对于数字的综合写在每第三个字后面,作为效验码【数字同理,如69理解为 六九两个汉字标注音调,为了方便区分校验码和数字之间的区别,可以考虑采用一定的特殊写法区分,本文的示例为增加下划线】
增加了效验码之后的原文就变成了
放学一7块走,我10们一起7去吃麻7辣烫
然后再对新的原文进行加密
加密之后改变任意一个字,只要音调改变了验证码就会不相符
如果想要提高检验的精度还可以增加验证码的取的频率
这个的缺点就是如果攻击者发现了验证的方法可以通过修改为相同声调的字来实现躲避验证码,因此从安全性的角度而言比较推荐下面的验证方法
2 通过笔画数置校验码
其实很简单,就是上面的验证逻辑从声调改为了字的笔画数,如果是数字的话就直接取数字本事作为笔画数。
这样的好处是很难被攻击(因为相同笔画的汉字毕竟找起来还是很麻烦的),坏处是….数笔画还是有点儿麻烦的,以至于我决定不在这里放栗子了!
以上两种方法都可以视作抛砖引玉,希望大家主要还是领会精神,尤其是这个效验码的思想
——————————-2月2日补充完毕—————————————-
总结:
课堂上传纸条防中间人共计约等于在不安全的通信网络上确认对方身份同时进行安全的信息传输,几个重要的点是
1 确认对方的身份(使用的方法:身份认证机制,数字签名方法)
2 在不可靠的网络上传输可靠密钥(参考方法:Diffie-Hellman_百度百科)
3 使用密钥进行加密解密
2月2日补充,这里的加密解密严格来说包括两个方面,一个是保障传输内容的安全性(即不被破译),另外一个是保障传输内容的有效性(即不被篡改)
关于题主在题目中补充的 RSA 之类的非对称加密方法,在这个“课堂,学生,有限条件,有限知识”的情况下几乎是不可能办到的,单单汉字转编码这一步就足够了..
我居然已经这么一本正经的回答了这么多了!!
—-
可以事先约定算法(如MD5,哈希,CRC等),将当前课本的第几页的第几行的第几个字转化为十六进数,再用这些数字为最终值逆向运算,排列出一系列数字,这样就算中间人劫取到纸条也无法破译内容。
为了确保双方传输正常,可采用类似传输控制协议的做法,在之前写入的一系列数字的特定位写为特定字节,在对方回复消息时修改该位(例传出时第2位写为0×81,对方发出时改为0×82),如果对不上,说明纸条异常,停止传递。