课堂上传纸条如何防范中间人攻击?

使用CN2/CN2GIA顶级线路,支持Shadowsocks/V2ray科学上网,支持支付宝付款,每月仅需 5 美元
## 加入品葱精选 Telegram Channel ##

知乎用户 Ivony​​ 发表

这个我比较有经验啊,,,,

首先第一种方案就是排除中间人,直接建立点对点连接,例如直接将纸条从空中抛送过去,顺便还能锻炼自己的投篮水平,为以后进入国家队作准备。缺点就是如果隔太远这种方式丢包率太大了。

第二种方案就是只使用可信网关连接,在自己与目标之间只请求自己信得过的哥们儿姐们儿进行传递。

如果必须在恶劣的情况下进行安全的数据传递,那么有如下几个技巧:

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 个节点传递之后仍然无法抵达目标,则应由该节点直接销毁。

声明:
以上出现的专有名词,仅为博君一乐,不代表此种技术真正的实现原理和方式
,切记切记。

转载保留原始地址和作者即可。

知乎用户 多子 发表

直接扔到老师脸上,一般老师都会直接把上面的话念给你想要告诉的人

知乎用户 秋翎​ 发表

很有意思的问题
通信协议已经确定了,是传纸条这种公开协议,每一个节点都有打开纸条的方法和权限,攻击者很容易充当节点——所以我们不信任任何节点
依赖于使用双方都事先沟通好的特殊的纸张(别人买不到这种纸,就像是模仿不到数据包的构造法)、特殊的笔迹(签名),可以做到完整性和不可抵赖性
但是,双方沟通密钥的形式一定要保证机密,如果你也用通信的方式来沟通密钥(甚至不加密),别人可以直接换一张纸和对方说,那种纸买不到了,我们以后换这种吧,以后你的所有包都拦下来丢掉,对方就被欺骗了
要做到保密性,只有用端对端加密,纸条从你手中出去,就是密文的,不靠协议头,不靠签名,内容就做对称加密,对方有解密密钥。
加密的方式有很多种,由于条件简陋,一般就是用「古典加密算法」。但是福尔摩斯用生动形象的故事告诉了我们,当中间人采集信息样本量越大的时候,有越大的机会破解你的加密算法。
于是一种高能的密文传输方式就来了:
明文写一些带有顺序的干扰信息,让他人看了无价值,却能让收件人知道该通信的序号。**密文用淀粉溶液写,对方使用碘液涂,显形后不可逆。**这种化学反应多彩多样,你们还可以定期用见面这种方式更换方程式,并校验序号。在密码被破解之前,同时具备了完整性、可用性、保密性、不可抵赖性。

知乎用户 玄子 发表

先解释一下什么叫中间人攻击,这是一个密码学上的名词。

中间人攻击,英文 Man-in-the-MiddleAttack,简称 MITM 攻击。

用密码学术语来说,是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方 直接对话,但事实上整个会话都被攻击者完全控制。

过程是这样:
1、客户端发送请求到服务端,请求被中间人截获。
2、服务器向客户端发送公钥。
3、中间人截获公钥,保留在自己手上。然后自己生成一个伪造公钥,发给客户端。
4、客户端收到伪造的公钥后,生成加密 hash 值发给服务器。
5、中间人获得加密 hash 值,用自己的私钥解密获得真秘钥。同时生成假的加密 hash 值,发给服务器。
6 、服务器用私钥解密获得假密钥。然后加密数据传输给客户端。

蒙圈的哈我翻译成大白话,就是李雷和韩梅梅传纸条,因为距离太远需要通过林涛经手。林涛每次接到纸条都看一下,李雷和韩梅梅还以为全过程瞒着林涛。

更有甚者,林涛两头伪造假纸条,李雷韩梅梅把林涛伪造的纸条当做对方的心意。
这是要坏事的,李雷最后没和韩梅梅在一起,我觉得跟这有关系。

如果李雷和韩梅梅看一些这本书,了解一下密码学的相关知识,结局或许能改变。

下面,我用这本书的知识,介绍一下如何避免中间人攻击
设置古典密码
先解释一下,什么叫密码和加密
密码和明码相对,例如明码 ABCDEFG 转换成密码 1234567,人为把明码经过特殊处理的过程就叫加密。

古典密码有两种最常见:移位密码代换密码
移位密码,举个例子,用数字指代英文字母
正常是
ABCGEFG
1234567
现在编制密码的人决定多加一个 0, 既密码和数字对应为
0123456
ABCDEF

Love 用密码表示为 11-16-21-4,比正常字母表多了一位,中间人前面多了一个 0,破译密码就上了难度。
移位密码设置起来不难,缺点是也它并没有那么难。

代换密码,简单来说,就是明码中的字符都被代换为暗号。
举个例子,《福尔摩斯探案集》中的 “跳舞小人”,这个密码,《名侦探柯南》也致敬过,就是用一些简单的图案替换 26 字母。

复杂一点的替换密码,需要设立一个密码本,例如,认为设置新华字典作为密码本。
用数字 1 或 2 代表左右栏,后面是页码,再后面是这页第几个字。
密码可以表达为 102538 212436
翻译时候翻字典 25 页左边第 28 个字,124 页右边第 36 个字,是不是很有意思。

代换密码还有一种极特殊的形式,就是利用一种鲜为人知的语言。在电影《风语者》中,美军为防止日军破译密码,招募纳瓦霍族人为通讯员,纳瓦霍人使用掌握人口极少的纳瓦霍语,及时用明码交流,日军也毫无对策。
为了保密,每一个纳瓦霍战士都被严密保护,如果纳瓦霍族战士不幸落入敌手,美军则可以枪杀被俘的纳瓦霍族战士。

在现实中,从工具上升级也比较常见。
例如,购买学校门口卖的保密笔,一面是隐色,然后用另一面涂抹颜色会显现,这个办法比较笨,领先一上午还是可以的,等下午大家都买了加密笔,加密笔也就不存在了。
历史上这种例子也有,德国在二战中用了 “恩尼格码” 机,起初靠 “恩尼格码” 的保密使得潜艇在大西洋屡屡得手。
后来恩尼格码被英国人掌握,潜艇狼群就不灵了。

差点忘了说,如果你不了解摩尔斯电码,也建议了解和掌握一下,摩尔斯电码算是密码学的基础,由于电流只有连接和断电两种模式,摩尔斯电码就只有 “—” 和“.”两种,26 字母都用这两个符号表示。在现实中,不妨设定为手掌拍桌子和关节敲桌子。

在微信满天飞的年代,传纸条绝对是移动互联网时代的浪漫。再加上对密码不舍的情怀,上面那本书里有网友集体破译密码助人为乐的故事,值得一看。

知乎用户 白喵黑咪 发表

高票答案根本和密码学一点关系也没有,为了防止大量知乎读者误入信息安全歧途,少说几句以正试听。(同样也是大年初一手机码字着实不易)。

第一个概念,必须理解解决目前信息安全的主要手段在于应用层,不在网络层,链路层和物理层。所以高票答案抖机灵都抖到了那几层,明显误导。

第二个概念,明确 man in the middle attack 中间人攻击到底有哪些攻击目标。基本可明确的有,(1)窃听,可理解内容,(2)伪造,制造原本不存在的内容,让对方信以为真(3)重放,搜集所有双方通信信息,通过在时间上和顺序上的虚假组合,让对方误认其身份,或者错误理解双方通信本意。

第三,针对这些攻击目标,可采取的防御措施。一般有几种(1)加密,保证数据传输中不可理解(2)签名,确保双方的身份(3)消息摘要,确保数据完整性(4)时间戳和随机数,防重放攻击(5)加盐,防止传输过程中通过消息格式获得额外攻击优势。

要把这五种手段(可能还没有想全)综合起来,基本可以达到基本的防中间人攻击的目标。但是如果考虑到实际应用,可能需要考虑的东西更多。这也是为啥,工程中的安全协议基本没几年都会被攻破的原因,因为刚开始的攻击方式和攻击目标没有考虑到。

上述五种安全手段,都可以找到相应的原始化技术手段加以模拟,先卖个关子,等我晚上拜年回来再更新。
============ 此处更新线 ========================

加密,纸条这个东西,
(1)用非对称密码也是可以,陷门函数一般可以比喻成一个带有锁和投递孔的盒子,所谓加密可以意味着 A 方先拿到 B 方一个带有锁和投递孔的盒子,然后把处理过的消息用投递孔塞到盒子里,把装有纸条的盒子传给 B 方。B 方用锁打开盒子,即可实现解密。
(2)用对称密码也可以,方法肯定不能用分组密码的方法,人没有办法计算,或者说太麻烦。流密码倒是容易得多,双方约定一本图书,表示从哪一页哪一行开始作为起始点,然后把纸条内容都写成拼音,和图书内容上的字母做加法取 26 位余,这个也是我曾经看过的一本著名的小说《蝴蝶梦》(也是恐怖大师希区柯克赴美首部电影哦)的谍战故事。
1942 年底,轴心国北非军团和反法西斯盟军在各自最高统帅隆美尔和蒙哥马利的指挥下,于埃及的阿拉曼地区展开决战,隆美尔战败,随后,德意军队被围歼于突尼斯。曾一路凯歌的德国非洲军团为何突然土崩瓦解了呢? 原来,这次名将对决的胜负早在此前的一场谍战中就已经注定了。蒙哥马利在阿拉曼战役中取得胜利,很大程度上是他通过谍报机构给隆美尔不断设计圈套的结果。
  《蝴蝶梦》中的密码
  “康多尔小组”是德国的一个间谍组织,1942 年 5 月到达开罗,负责人是约翰・厄普勒,在其行李箱中有一本英文版的《蝴蝶梦》,而 “康多尔小组” 的密码就是根据这本小说编成的。使用破译时根据日期和对应的页码来串联文字,这种方法使用简单而安全。
  厄普勒落脚之后,马上开始寻找当地能信任的朋友。他在一家酒吧里认识了埃及的阿拉伯反英分子、舞女法赫米,她很快就透露,她的情人是在英国总司令部工作的史密斯少校,而她常常趁史密斯熟睡时,窃取他皮包里的机密文件。为方便联络,厄普勒在尼罗河岸边靠近法赫米住所的地方租了一艘游艇,并把工作地点搬到了游艇上。
  事情似乎异常顺利,此后一个月里,隆美尔收到了不少来自 “康多尔小组” 提供的有价值的情报,为此他赞扬了厄普勒。得意忘形的厄普勒于是试图寻找更多情报线索。
  1942 年 6 月中旬,厄普勒经常穿着英国上尉制服,到新闻记者经常进出的俱乐部和酒吧收集最新的英军情报。但他携带的埃及货币已经用完了,由于埃及仍然属于英国实质上的殖民地,因此他认为英镑仍是合法货币,就用英镑结账 (商家可以到英国军需处用英镑兑换埃及货币)。接着,厄普勒结识了一个自称为叶维特的酒吧姑娘,还用英镑给她买了大量高级的香槟酒,然后把她带回游艇。
  厄普勒犯了两个致命的错误:首先是大量使用英镑,这在平时或许并不会引人注意,可在战时的紧张时刻,这样做无疑留下了致命的线索――普通人此时弄不到这么多英镑;其次是那个叫叶维特的姑娘,她实际上是为英国情报局工作的犹太间谍,通过厄普勒的德国口音和多得惊人的钞票推断他很可能是条 “大鱼”。
  几天后,趁厄普勒和助手蒙卡斯特尔呼呼大睡,叶维特在一个小房间里发现了一张书桌,上面有一本《蝴蝶梦》,旁边还有一些便条,上面是方格和 6 个字母组成的字组。作为间谍,她意识到这可能是某种形式的密码,于是她打开书,把 “用过” 的页码和便条纸上每一行的第一组密码抄下来,然后迅速离开了游艇。
  破解《蝴蝶梦》
  与此同时,隆美尔的无线电情报连遭英军袭击,幸存的两名情报兵被俘并被送到埃及开罗,在他们的帆布包里有一本《蝴蝶梦》,这立即引起了审讯者的怀疑:一个德国人读一本英文书干什么? 经审查发现,这本书是在葡萄牙买的,上面还残留着铅笔痕迹的葡萄牙文,虽然已被橡皮擦去,但仍然隐约可见。
  于是,驻开罗的英国情报人员打电报给英国情报局葡萄牙里斯本分部,查询最近是否有人在那里的书店里买了两本或两本以上《蝴蝶梦》。因为葡萄牙只有几家英文书店,所以查访起来相当容易,一星期之内便查明:德国助理武官的妻子不久前在一家书店买了 6 本《蝴蝶梦》。显然,《蝴蝶梦》正被作为一种密码使用。但是谁在使用呢? 俘虏怎么也不肯开口。
  此时,英国军需官提供了另一个线索:他在兑换货币时发现,一名 “英国上尉” 在埃及塔尔夫俱乐部付酒钱,用的英镑是德国精心制作的假钞,这名 “英国上尉” 正是厄普勒。英国情报人员经过多次跟踪,找到了厄普勒和他的助手蒙卡斯特尔所在的游艇。
  8 月 10 日下午,英国人包围了游艇。厄普勒和助手蒙卡斯特尔都在船上,他们对意外似乎早有准备。当英国人从甲板上冲过来时,厄普勒把袜子卷为球状,扔向试图冲上甲板的士兵,英国人以为是手榴弹。于是趴下来躲避。这使蒙卡斯特尔有了充足的时间,他潜入舱底,打开暗门,把一架收发报机、一本《蝴蝶梦》和所有电报底稿都扔到尼罗河里,然后跃进尼罗河,企图水遁。
  不过蒙卡斯特尔并没能逃走,当他浮出水面时,被守候多时的英国人抓住了,而厄普勒也在游艇上束手就擒。
  而前面提到的犹太女间谍叶维特向英国情报部门提供了她抄下的页码,还有厄普勒和蒙卡斯特尔发报用的主要密码组。她的笔记尽管不完全,但足以使英国情报人员破译《蝴蝶梦》的密码。至此,英国人掌握了 “康多尔小组” 发报的全部材料,并 “恢复” 向德国情报机关发报。这样一来,隆美尔的重要秘密情报来源被英军控制了,而不知情的他却依然信任来自开罗的情报。事实证明,这场谍战的结果改变了北非战争的进程。
  美梦正酣,隆美尔中计
  此时的隆美尔正准备发动对英军的攻势,他认为英军在埃及精心构筑的阿拉曼防线南端兵力薄弱,正是一个突破口。于是,他决定在此冲破英军防线,然后迂回消灭英军主力。计划好后,隆美尔开始偷偷把军队向南部集结,并在北面留下了一些假坦克和卡车,以迷惑英军的空中侦察。
  这个计划着实巧妙,可是隆美尔并不知道,此时德军密电码系统已经被盟国掌握,隆美尔发出的电报希特勒还没收到,就已经摆在蒙哥马利的办公桌上了。而德国人之前破译的英美密电码却已被更换,源源不断得到的其实是假情报。
  蒙哥马利通过情报部门得知隆美尔的战略意图后,决定将计就计,引诱隆美尔上钩,但不是要阻止他发动攻势,而是尽量鼓励他在阿拉曼防线南端发动攻势,使其装甲部队完全陷入埃及南部沙漠中。为此,蒙哥马利让英国情报人员以 “康多尔小组” 的名义给隆美尔发了一封电报,说在阿拉曼防线南端的拉吉尔地区,英军防守薄弱,正在等待援军,正是突破英军整个阿拉曼防线的最佳地点。
  为了使隆美尔坚定进攻计划,蒙哥马利还命令绘图员绘制了一张假地图,上面标明拉吉尔地区是一片 “硬地”,便于装甲部队行动,然后设法将假地图送到德国人手里。隆美尔获得地图后,深信不疑,终于在作战地图上注明了拉吉尔地区的“硬地” 符号,将此选为主攻路线。
  梦醒时分,折戟北非
  1942 年 8 月 30 日深夜,隆美尔下令进攻,试图通过突袭,一举突破英军防线。但是,在德军进攻的道路上,到处都是新布设的地雷。当德军工兵进入雷区,为装甲部队扫清道路时,英国空军又来了,一颗接一颗的照明弹将隆美尔一长串的装甲部队照得通亮,紧接着,大批轰炸机向德军坦克部队投下了雨点般的高爆炸弹。
  德军付出了巨大的代价才突破了英军的雷区。第二天,德、英两国的装甲部队展开了激烈交火。隆美尔逐渐发现,英军的装甲部队居然是原来的 3 倍! 而地图上的 “硬地” 实际上是一大片沙漠,且流动性极大,变幻莫测。德军的几十辆坦克、装甲车、半履带车、卡车在流沙中东倒西歪地挣扎前进。当车上的人下来,想去推动车辆时,英国皇家空军的几个中队的战斗机飞来,毫不留情地轰炸和扫射他们。
  夜幕降临时,沙漠里到处都是被烧毁的德国车辆。乌黑的油烟像长长的柱子直上云天,玫瑰色落日笼罩下的沙漠漫无边际――德军已完全没有藏身之地。
  9 月 4 日,损失惨重、后援被断的隆美尔被迫下达了总撤退的命令。此役德军共伤亡 4800 人,损失 50 辆坦克和 78 门大炮。这些损失对于隆美尔是非常严重的,因为隆美尔在消耗战中不能像英国人那样很快得到增援,这也意味着他失去了在非洲取胜的最后筹码。事后,隆美尔沮丧地说:“英国统帅部早就知道了我们的作战意图。”与此同时,蒙哥马利早已甩开隆美尔,回到了自己的司令部,准备之后的反攻去了,因为他相信自己的假情报已经让 “沙漠之狐” 乖乖就范了。

(3)古典密码
古典密码最常见的是凯撒密码,完全没有办法应对词频攻击,一点也不好玩。好玩的是
Scytale,我不清楚别人怎么叫,我一直都叫它棍子加密法。具体解释可参见维基百科:Scytale

这个东西需要保证通信双方的棍子粗细长度完全一致,才能够得到一致的结果。A 方 B 方买根限量版的一对棍状物体,纸条那么一卷啊,偷看都不怕。

签名
在纸条这种介质上面,重新用陷门函数对纸条内容做签名,人真没有办法做。能够借鉴的是中国古代的虎符制度。可参考百度百科:虎符(中国古代调兵兵符)
虎符为中国古代帝王授予臣属兵权和调发军队的信物。铜制、虎形、分左右两半,有子母口可以相合。右符留存中央,左符在将领之手。王若派人前往调动军队,就需带上右符,持符验合,军将才能听命而动,军队不执行执皇帝金符节者行兵令,除皇帝亲临现场调兵。它盛行于战国、秦、汉时期。但历史上也有很多没有虎符而成功发兵的情况,尤其是西汉前期的藩国最为猖獗,刘邦灭诸异姓王后制定的藩国须有汉朝虎符才能发兵的制度对藩王们的兵权限制作用甚小。例如西汉吕太后死后齐王刘襄的起兵叛乱 [1],汉文帝时济北王刘兴居的起兵叛乱 [2],以及汉景帝时吴楚七国之乱 [3],养兵练兵者皆为藩王,故藩王们都能轻松发兵。传世的有秦新郭虎符等。

我们只能在纸条介质上想办法,比如每次通信用的纸条,是某页作业纸的一半,另外一半保留在接收方手上,A 用纸条发了消息,B 除了看消息,还需要比对发来的纸条是不是能和自己手上保留的另外半页纸严丝合缝的对在一起,是的话,才能验证 A 的身份。

============= 先更新的这儿,还要给孩子讲故事 ============================

时间戳或者随机数,我个人更加倾向于时间戳。很简单的应用就是,每次纸条后要附加有消息发送时的年月日小时分钟信息,这样做的好处就是防止中间人复制了昨天的纸条内容,来欺骗今天的通信双方。

加盐,因为很有可能 A 男和 B 女通信,无非就是情感上那点事情。如果中间人有背景知识,发现 A 男 B 女已经眉来眼去一大堆,突然 A 男神色忐忑给 B 女发个纸条,即使内容完全不知道,也能猜出和表白有关。那 B 女传回来的纸条,如果同意了,往往是 “郎有情妾有意” 之类一长段一长段的衷肠倾诉,如果不同意,一个字 “滚” 就可以结束对话。那么中间人通过纸条长度,也能明白表白是否成功。所以,必须在纸条内容上加盐,保证纸条长度一定要超过一定长度,如果长度不够,可以加上一大堆一大堆的废话,这些废话就可以看成是加盐。但是,必须保证每次说的废话完全不一样,否则加盐操作也失败了。Enigma 机被破译,也和傻逼德国通信员每天有固定的废话,给了英国人密码分析的可能。WEP 协议被破译,也和消息头内容固定有关系。

消息摘要,密码学中是用单向函数,这个在纸条里面没法用。有一种简单方法,类似于这种单向函数。就是一段话中,比如 “白日依山尽,黄河入海流”,统计每个字声母出现的个数,做完的摘要大致为 B1H3J1L1R2S1Y1。

当然,在防止中间人攻击的实际纸条设计中,还涉及到另外一种应用。就是所有上述内容的编码。必须保证所有的数据采用一种方式编码,有统一的方法和格式,使得通信双方理解数据格式的类型和内容。如果出现了控制位和数据位的混叠,可能还需要使用光传输或以太网传输中的透明传输的概念。

好了,说了这么多,如果要进行一次成功的防中间人攻击纸条传输,最简单的方式是如下:

编码格式:中文汉字无标点符号,格式为:“正文”+“盐”+“加盐数据”+“时”“时间戳”+“摘”+“消息摘要”
信息正文:白日依山尽,黄河入海流。
加盐数据:王大妈家里有条狗
时间戳:大年初二下午十四点三十七分
消息摘要:是对 “白日依山尽黄河入海流盐王大妈家里有条狗时大年初二下午十四点三十七分摘” 的消息摘要,结果为白一吃一大三福一贵一火三角二柳二梦一糯一曲一软三神六腾一我二小一意三正一(用相对应声母字代替所选声母)。
那么完整要发送的消息是:
白日依山尽黄河入海流盐王大妈家里有条狗时大年初二下午十四点三十七分摘白一吃一大三福一贵一火三角二柳二梦一糯一曲一软三神六腾一我二小一意三正一

接下来,把完整的消息写在事先已经撕好的纸条上——纸别忘了是一人一半,接下来好比对哦。

接着,发送方拉出预先接收方给他的,已经上了锁的带投递孔的盒子,把纸条塞进盒子里,然后把盒子让任何人送给接收方,基本上常见的中间人攻击方式都能够防御了。

但是细想起来,还有各种中间人的攻击方式在上述通信中无法防御:

拒绝服务攻击:中间人给盒子加把锁,盒子无法打开,相当于纸条传情业务中断。
暴力破解攻击:盒子和锁的强度是有限制的,把锁撬开很容易,或者暴力破坏盒子很容易。当然这种方法也可以很容易防御,换更坚固的盒子和锁。移到加密领域,就是更换算法或者提高密钥长度。
权威攻击:传个小纸条弄出个大盒子传来递去,老师和家长不参与进来才算见了鬼了。就算他们看不到纸条中的内容,但是这事情还不会上纲上线使劲批判一下,就算没事情也按有事情先清理整顿一下,这对通信双方的杀伤力都是极其巨大的。

码字不易,也让我想起三年前给学生上的网络安全课。这段文字要按课程讲清楚,大致需要 20 个课时以上,且写且珍惜。

知乎用户 无鬼 发表

  1. Alice 把纸条存进盒子,挂上一把自己的锁,经 Bob 的手传给 Carol。

  2. Bob 和 Carol 都打不开。

  3. Carol 给盒子也挂上一把自己的锁,经过 Bob 传回 Alice。

  4. Bob 和 Alice 都打不开。

  5. 但是 Alice 随即解开自己的锁,再次经 Bob 传给 Carol。

  6. Bob 打不开。

  7. 但是 Carol 解开了自己的锁,打开盒子,最后收到了纸条。

上述传纸条的流程,每次都经过中间人 Bob 但他无法拦截信息。
是不是简 (ma) 单(fan)易 (si) 懂(le)?

知乎用户 Rix Tox 发表

蟹妖。

如果不借助电子计算手段,手算 RSA 加密的方式其实很不现实,只要 key length 稍微长一点,你手算一节课也未必能把密文算出来;但是如果 key length 太短别人只要借助计算机做个质因数分解就能破解了。非对称加密算法的安全性都是依赖于计算机对非多项式时间复杂度计算能力的不足而起到作用的。然而对于我们人类而言,纯粹的计算已经非常困难,手动用计算机算法进行加密通讯简直就是天方夜谭,所以我们完全可以另辟蹊径。

既然题主强调了以传纸条为通讯方式,那么我们的媒介就用该回归到最传统的纸张。其实这个问题在很早以前就已经有了解决方法,最安全有效的方式大家都应该有所了解——封口蜡

这个方法很古老,虽然咱不可能在课堂上点根蜡烛装信封,但是却很有启发意义。被蜡粘上的纸张不易被完好的揭下,如果直接撕开会损坏纸张,这样收信人就能从信封的完好程度察觉出来。当然有种方式可以完好的揭下纸张——加热。为了防止这种攻击,人们在蜡上面盖章,加热后蜡会变形,如果没有授权的印章则无法重塑一个封口蜡,收件人也可以通过对印章的合法性检验中察觉到泄密的可能。

那么如何在课堂上用类似的方法给纸条进行密封呢?我想到了一个方法,但是应该还有更好的,欢迎补充。你需要一卷单面胶或双面胶和一个信封,胶纸一定要用粘性大的,信封如果没有现成的话可以叠一个。我在一些精品店见到过一些纸牌大小的信封,很适合传纸条用,也很便宜。

首先用胶纸把装好信件的信封封口:
(双面胶)

(单面胶)

完后你只要再优雅地在封口处签上你的大名即可:

这样你的信件基本上就很安全了。如果你打算长期用这种方式的话我建议你可以买一些封口贴:

你可以事先在每张贴纸上签好名字,然后你就可以重复使用一个信封,每次传递就用一个贴纸封口,收件人每次又会把贴纸撕开,但是互不影响,又比较节省。

=====2 Feb 2014 Update=====

@劉嘯宇

的评论让我对这个方法进行了一些反思。
这个方法如果从加密的角度来说,并不是一个非对称秘钥交换的过程,相反,这是一个对称加密方法。由于是在真实的生活环境中,秘钥的交换可以在下课后私下进行,没有如互联网这样的中间媒介的潜在安全威胁。这个私钥正是签名、贴纸的特征,而且这些特征的现实时空唯一性——在同学们共同上课的一定时间地点范围内无法进行有效的模仿和复制。通过将这些特征加入信任链,在课堂上拥有中间媒介(同学 A 君, B 酱, C 萌…)的情况下通过加密(贴纸)和签名(真的签名),能够做到身份验证的信任机制。

知乎用户 卡戎​ 发表

瞒天过海:先传大量的数学公式纸条过去,等到中间人觉得你们是在讨论学习的时候,再传暧昧纸条

围魏救赵:用英语写纸条,叫个学渣来传

借刀杀人:叫自己的同桌写纸条并传过去

以逸待劳:叫接小纸条的人自己走过来拿

趁火打劫:在大家忙着备考的时候传纸条

声东击西:往反方向传纸条,绕地球一圈后到达

无中生有:告诉中间人你有个黑社会大哥,要是看了纸条会被砍

暗度陈仓:把纸条夹在黄书里传,即使被抓到也不会被认为在传纸条

隔岸观火:收到别人的纸条之后扔掉不传,下课后看他们吵架

笑里藏刀:在纸条外面包一个纸条,上面写一个冷笑话

李代桃僵:写上别人的署名

顺手牵羊:抄袭别人的小纸条

打草惊蛇:大声念出自己的小纸条,让他人失去兴趣

借尸还魂:转到别的班去传小纸条

调虎离山:告诉中间人老师叫你上去做题,趁着他手忙脚乱的时候把纸条递过去

欲擒故纵:告诉中间人纸条随便看,想看多少看多少

抛砖引玉:在知乎上提问 “课堂上传纸条如何防范中间人攻击?”

擒贼擒王:把校长揍一顿,让他不要管学生传纸条

釜底抽薪:不传纸条,在 QQ 上发消息

浑水摸鱼:在闹哄哄的自修课传纸条

金蝉脱壳:传完纸条马上早退离开教室

关门捉贼:派自己的基友盯着中间人

远交近攻:接上条,敢偷看就打一顿

假道伐虢:告诉中间人纸条里面是在请教题目

偷梁换柱:给中间人看小纸条上的题目,然后偷偷换成暧昧纸条传过去

指桑骂槐:纸条上写着给甲,然后告诉中间人要给乙

假痴不癫:给基友传小纸条,让别人以为你是个 gay

上屋抽梯:传过去之后把所有中间人都毙了

树上开花:中间人是个美女,偷看了你的小纸条喜欢上你了

反客为主:被发现后质问老师为什么侵犯隐私

美人计:嗲嗲的告诉中间人 “☆这是个秘密哦☆~”

空城计:用柠檬水写小纸条,用火烤才能看见

反间计:问中间人对方有没有给别人传过纸条

苦肉计:和好兄弟上床,让别人彻底相信你是个 gay

连环计:在纸条上写 “把把纸条传给你的人弄死”

走为上计:一但被发现直接退学以避免社死

知乎用户 sniperbaby 发表

so easy~ 我记得我小学时候是这样办的,找两块纸板,在相同位置上分散扣上许多洞洞。想传纸条的时候在纸板后边垫张白纸,在洞洞里写内容,然后拿走纸板,这时候白纸上分散写有你的内容了,在空白处随便写点什么,使语句不通顺,传过去后,对面人拿纸板盖住,洞洞里就是内容了。剪短点,用我们软工的话来说就是加密和解码算法是固定的。

知乎用户 武杰​ 发表

这个需要的作为专业人士登场了,清清嗓子,嗯!

首先,反对目前排名前几名的答案,尤其是 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 传小纸条,结果你的好基友 / 小伙伴 C 居然偷看你们的文字内容,甚至伪造你们传递的纸条,比如你给 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 之类的非对称加密方法,在这个 “课堂,学生,有限条件,有限知识” 的情况下几乎是不可能办到的,单单汉字转编码这一步就足够了..

我居然已经这么一本正经的回答了这么多了!!

知乎用户 萝魏紫​​ 发表

初级:全文加密,以全密文写在纸条上,以防止中间人篡改其中数据。

中间人采取缓存分析技术获取加密算法,看了足够多纸条以后,分析出算法。

升级全文加密加动态密钥。每次传纸条先发起一次握手,不传输具体内容,仅仅获得一个 token,在本地以此次 token 作为密钥的一部分加密全文,并传输。

中间人采取 DDOS 覆盖攻击:一次过来三亿个纸团,其中只有一个是真的。

升级采取随机中间人策略,设置五个中间人,每次都通过这五个中间人传五份纸条,但只有其中一个中间人是有效中间人。

中间人升级为全链路恶意中间人,所有中间人都进行恶意攻击放大。

升级中间人链路从并行升级为串行或者环形,以消耗中间人资源逼迫其回到一进一出。

中间人升级为丢包模式以中断会话使会话无意义化。

升级为有序包,每一个纸团按照序号编码,如果有丢包就重新发送。

中间人升级为服务延迟模式以降低会话单位信息量。

升级为授信中间人,要求中间人签署授信协议,并在每个纸团上签署。

中间人升级为代理中间人攻击,即使本人授信,仍然将恶意中间人作为下游进行发送。

升级为绝对公信中间人,既把纸团贴在老师的背后,等老师走过去再摘下来。

知乎用户 于小葵​ 发表

我上学那时候,传的是带密码锁的日记本。

知乎用户 Snake 发表

反对楼上观点。
还绕过中间人,还抛物线。

依稀记得那是一个晴朗的下午,老师集体备课。

纸条写好,揉成一团儿,用力向目标进军,在空中真的划了一道完美的抛物线。

忽听身后有人敲门窗,是校长!

他直直的看着我说:来,小伙儿,你出来

知乎用户 斯人若彩虹 发表

这题我会。

在很久很久以前,上课的时候除了书本,任何事情都显得非常有意思,我们班也开始流行传递小纸条这一原始信息传递活动。

这其中大部分都是小女生和闺蜜之间以及班级小情侣之间的通信,这是由于**这一阶段的男生的需要传递的信息量较少,只需要通过简单的手语就可以传递 “下课去不去打篮球” 或者 “去不去吃饭” 之类的信息,**而闺蜜之间、情侣之间的交流信息则更为复杂,需要借助有效的信息传递通道来进行。

此外,不大的课堂在同一时间可能有多条通讯建立,甚至会出现一台主机并发地向不同的地址传递信息的情况。

由于大部分通信都是远程传输,即使是在**同一局域网下(同桌或者前后桌),**为了安全考虑(交头接耳容易被老师发现),也需要用纸条作为载体进行信息传输。

在信息传递的过程中,为了防止中间人攻击,可爱的同学们想出了巧妙的方法——在纸条传递之前,发送方需要让收信方知道信息已发出,随后双方先建立眼神连接,发信方将信息传出,双方共同监督信息传递的过程直到信息安全抵达收信方。

实现这一需求的技术就是在信息准备发送的时候,发送方用事先约定好的特殊声音提醒收信方准备开始接收信息,这个特殊的声音可能是咳嗽声弹舌声甚至是屁声,每个信道都对应专门的特殊声音,也就是固定的 IP 地址。

总之,需要通过这个信号先吸引收信方的注意并建立可靠的眼神通信连接,收信方则需要从课堂一开始便保持端口为长期可连接状态,一旦接收到特殊信号,通过这个特定声音信号所对应的 IP 地址开始与接收方进行通讯,眼神连接建立起安全信道,来监督通信的安全传递。

在一段时间内,除了老师感觉到班里感冒和吃坏肚子的人特别多的异常之外,通信保持得十分顺畅。

但这种情况在班级恋情与塑料闺蜜情增多时出现了巨大的危机。

众所周知,简单的特殊声音往往容易撞车,也就是账号密码重复。当要建立的通信需求明显增多时,便有可能出现两个信道同时用屁声作为 IP 地址而导致信息传递冲突的的情况一个屁可能导致多方同时试图进行眼神连接,当然,在发现自己建立了无效的眼神连接之后,大家也顾不上三次握手四次挥手,只想给发假信号的人挥一个大嘴巴子。

在这种背景下,通信各方需要达成一定的协议,来保证自己 IP 地址的唯一性。于是,在某一个午后课间举行的多方会谈中,大家开始商讨方便大家正常通讯的规范。

这个规范很简单,就是每一条通讯线路都声明自己的唯一信号,避免与别人撞车。根据这个协议,大家只要遵守约定,只发起自己特定的声音请求,就可以保证信息的有效传输。但是,最简单的特殊信号(我们称之为靓号 IP 地址)已经被班级里最有势力的人牢牢掌握,其他人只能在此基础上对简单信号进行排列组合形成复杂密码,这就不可避免的导致了复杂信号的出现。在这一阶段,产生了咳嗽声与响指声、屁声与打嗝声的组合密码。也有一部分聪明的同学惊奇地发现,人类的声带可以发出不同音色与声调的咳嗽声,通过不同速率的几声连续低咳或者加上简单的 bbox 技巧便可传递原本需要手掌或者臀部配合发出的组合信息,从而减低自己身体发送信号的负担

由于这个协议避免了大家放出错误的屁信号,对用户非常友好非常体贴,闪耀着人类智慧的光芒,于是大家把它称之为 HTTP(很体贴屁)协议。

一时间,课堂远程通讯技术达到了新的繁荣时期。

这种繁荣大概持续了两天。

某一天,当副科老师正在上课时,班主任偷偷从后门进了教室,听到了教室中两岸猿声啼不住,处处都是此起彼伏的口技声。多年的黑客经验班主任迅速锁定了信道多方建立的眼神连接,当场截获了多条非法信息。

经审讯,通信多方对作案细节供认不讳。自从以后,班主任设立了专门的网络监管机构(纪律委员)来监督通信的合法性,并赐给该机构一本微小的姓名簿,任何不符合班规的通信都会被夹断,记录在薄子上。

从此,课间开始流传微簿与夹总的故事。到这里,曾经风光无限的文艺复兴年代逐步衰落。

然而道高一尺,魔高一丈。在人民群众的迫切需求下,不久之后,2G 科技革命正式到来,科学技术成为了第一生产力。随着按键手机的市场持有率逐渐提高以及操作者对 9 键盲打技巧的不断精进,课堂通信正式进入了电气时代。

当然,这都是后话了。

知乎用户 匿名用户 发表

来个跑题的回答。。。
我有俩逗比朋友,明明就坐在一起,还要传纸条! 这都不是关键,关键是她们传的纸条上什么都不写!! 就学微信的语音画三撇,打个红点! 然后传过去,看着对方戳一下红点。就特么自动语音播放了╮(╯▽╰)╭完了,还把播放过的用黑笔涂了。得多特么无聊的人才能做出这种事啊!!!

知乎用户 Bob Lee 发表

初二的时候泡同班 MM 我一直觉得自己很聪明,因为我是用方言传纸条的。
一来让 MM 觉得我很高大上(我用这种方法结果有很多女生要求主动跟我传纸条),二来别人拿到也看不懂。

嘿嘿,很厉害吧?
……………

毛线!这根本就是脑残!
自己花半天时间思考方言怎么写,结果全班都是本地人,谁都看的懂。
那些比我高比我帅比我有钱的学去之后我就再也泡不到 MM 了。

从此我知道了没技术壁垒的创新不能干,传纸条也是…=_=

知乎用户 车小胖​​ 发表

上课期间,小明的心又蠢蠢欲动了,想和小美说点悄悄话,但是小明与小美相隔很远,只能给小美传纸条以解相思之情。

如果字条赤裸裸地写着 “我爱你,就像老鼠爱大米!” 之类,中间传纸条的同学会偷看到,甚至有恶作剧的同学会把小明的纸条扔掉,重新写一张“狐狸精,今日绝交,再也不理你了!”,转交给小美,小美气的发抖,转头狠狠地瞪了小明一眼,小明却一脸无辜,小美写好了纸条:哼,懒得理你!

中途又被替换掉了,到小明手中已经变成:猪头三,有多远滚多远!

小明一下子从梦中惊醒,惊出一身冷汗,第二天小明送给了小美一本密码本,上面有汉字与代码的对照表,“亲爱的,以后给你传纸条,我用代码写,你查密码本,这样就没有人知道我们在聊些什么了好吗?” ,小美捶了小明一下:坏蛋,就你鬼点子多!

密码本
我 6743
爱 12BC
你 65DA
就 A123
像 7312
老 8356
鼠 89FD
爱 12BC
大 2276
米 98EB

小明用右边的代码写纸条,小美收到纸条查密码本,会显示成左边的汉字。

恶作剧的同学不明所以,无法下手,即使重新写一张纸条,也用代码模仿写,不一定有意义,比如只篡改最后一个字:

我 6743
爱 12BC
你 65DA
就 A123
像 7312
老 8356
鼠 89FD
爱 12BC
大 2276
炮 9036

想必老鼠是不会爱大炮的,小美很容易知道这不符合逻辑,肯定假纸条。

这里的关键是密码本,一旦密码本泄露,恶作剧的同学就可以破译并篡改纸条。

中间人攻击
二战期间,英美联军为了破译德国的军事情报,一直监听德军电台,发现每天某个时刻总有固定长度的消息(加密)从德军军事基地发出,后来抓到了德军俘虏得知那是天气预报,于是情报部门根据当天的天气实际情况,然后在对照截获的天气预报消息,得到了部分密码,当德军使用同样密码本再加密其他军事情报时,可以根据已知的部分密码,解密军事情报。

如果小明写的情话里有小美、小明落款时,

小 0045
美 2233
明 6677

那么别人就会推理出这个对应关系,然后用这个对应关系来解密其他部分消息。

应对措施
**密码本只使用一次!**这是目前最安全的加密方式,但意味着有多少字节的数据,就要有多少字节的密码本,密码本太庞大了,目前常用的加密密钥是尽可能随机,但无法完全避免密钥重复使用的情况。

知乎用户 SydneyCarton​ 发表

你以为点对点就能保证安全了吗?
上高中时,我跟死党 a 一直想坐同桌,但班主任一直没应允。
a 上课时给我递来一张条:
“我爱你!万水千山也不能阻挡我追赶你的脚步。”
我俩都是直男,只是都酷爱恶搞。
我看了一眼条,想都不想,就递给了旁边一位女生 “a 给你的”——客观来说,她长得不差,只是体重是我们加一起的两倍。
该女生大喜过望,不断向 a 抛媚眼,a 独自在风中凌乱……

知乎用户 风释命 发表

从情景开始分析吧。

防止中间人攻击(man in the middle)

Alice: 今天吃啥 ?
Bob: 吃宫保鸡丁.
Bob(Eve): 吃 shit.

假设 Bob 发出第二种信息时,视为被攻击。

Alice,Bob 中间必然有一个 Eve,作为中间人,也就是说,Alice 和 Bob 之间的通信,Eve 是知道的,而且它还具备路由的功能。

那实际上的情况和网络上的情况有什么不同?

实际上的情况,课堂上传字条是明文传输,看似是 p2p 通信,实际上是聊天室通信。

(Alice:) 今天天气很好
(Ceasar:) 天气也就一般
(Dva:) 今天天气好得可以开机甲
(Bob:) 我觉得天气不错

使用 () 的目的是,表示这个信息在纸条上其实是不显示的,纸条上的内容只有信息。

Alice 和 Bob 之间的通信,其实随时可以被中间的人参与,这就与数据包的传输其实有一些区别。

任何处于 Alice 和 Bob 之间的人都可以参与进去。

所以首先规范聊天室的声明格式,要求所有的信息都包含,说话人的名称与说话人的信息。

也就是 Name: Information 格式。

Alice: 今天天气很好
Ceasar: 天气也就一般
Dva: 今天天气好得可以开机甲
Bob: 我觉得天气不错

那么问题就来了,Ceasar 和 Dva 作为中间人,可以进行信息篡改,也可以进行欺骗,比如

Alice: 今天天气很好
Ceasar: 天气也就一般
Dva: 今天天气好得可以开机甲
Bob(Dva): yashila,Alice

这是典型的欺骗攻击,而且这个攻击在明文聊天室下的成功的可能性非常高,因为 Alice 和 Bob 之间的 Dva 是中间人,她可以伪造所有的关于 Bob 的信息,甚至 Bob 都可能收不到聊天室信息。

那么我们就需要一种方式,让每个人自己说得话没有办法被伪造,或者说,如果你说过了这句话,就没有办法抵赖。

这里引入公钥密码学。

签名 (signature) 可以对 CIA 中的 I(integrity)和 A(Authenticity)进行保护。

私钥是自己持有的密钥,公钥是公开的密钥。

通过签名设置一个最简单的验证机制。

Alice: 今天天气很好

我们将上述消息设置为 m,如果这个消息过长,可能会影响计算,所以我们这里继续引入一个概念,哈希函数。

下面是哈希函数维基词条

https://zh.wikipedia.org/wiki/%E6%95%A3%E5%88%97%E5%87%BD%E6%95%B8

简言之,哈希函数可以保证消息的长度为一个固定的长度,哈希函数也具有不可逆的性质,也就是说,如果我们知道 hash(m),很难通过 hash(m) 得到 m。

基于大素因数分解问题设计的签名体系下,在理论上只要私钥不泄露,就算是明文传输,对方也没有办法伪造你的身份,最多只能扰乱你们的通信,当然,直接拒绝接受就是另外一回事了,那就涉及到路由的问题了。

回到签名,我们首先 hash 一下,得到了一串乱七八糟的东西,简称 H,然后通过 H 我们使用自己的私钥对它进行加密,得到了另外一串乱七八糟的东西,简称 MAC(message authentication code).

那如何保证不被欺骗呢?

我们需要重新规范消息格式。

Name: Information. MAC

在原来的消息后另附 MAC。

比如 Ceasar 在收到了上述的伪造消息

Alice: 今天天气很好
Ceasar: 天气也就一般
Dva: 今天天气好得可以开机甲
Bob(Dva): yashila,Alice

之后,他会在更新的消息进行一次判断,首先是 Dva 的消息,Dva 使用了自己的私钥签名了自己的消息,所以 Ceasar 使用 Dva 的公钥进行验证, 得到了 H,然后再对明文消息,也就是

Dva: 今天天气好得可以开机甲

进行 hash,如果两个值对的上,就认为这条消息是 Dva 说的,反之,就遭受了攻击。

然而,在实际运用中,这却不是最好的方法。因为在课堂上传字条,部分同学脑容量不够,算力有限,可能一节课也就算出一条信息。

所以最好的方式,是使用未公布的替代密码。

虽然香农提到了 the enemy knows the system, 然而,在实际运用中,为了方便,我们往往不需要设计出绝对安全的密码,或者很长时间内计算上安全的密码,我们只需要这一堂课上,对方无法对我们进行攻击。

古典密码的破译往往基于统计学,而统计学能够运用意味着样本是丰富的,而一堂课中,一张纸条上能够写下 200 个字就已经很困难了,想要通过这个方式来猜解 Alice 和 Bob 之间预设的算法以及密钥,毫无疑问对于一个正常人来说是不可能的。

除非你冒着被老师发现的风险大胆使用电脑,当然,这样做的话你很可能失去作为中间人的权力,被迫站在教室外面听课。

当然,这是预设在了教室这个情景,如果是其他的情景,方式自然也就不同了,安全固然很重要,但更重要的是方便和结合现实。

-——————————————

7 月 16 日更新

在签名以及哈希上, 在与小老板聊完之后, 又有了新的想法, 虽然不是很大的补充, 但是也对自己当时没有立刻想到有些惭愧.

这里提出另外一个思路, 使用共享秘密 (shared secret) 和明文共同哈希的方式实现防篡改.

H(shared secret, plaintext), 例如这个共享秘密是 Alice 和 Ceasar 之间的秘密, 那么对于 Alice 发给 Ceasar 的信息, 可以用以下的形式

Alice: Information. Hash(shared secret between Alice and Ceasar, whole plaintext)

这样的好处在于, shared secret 其实是 Alice 和 Ceasar 双方共有的, 其他人想要伪造很难做到, 除非通过碰撞的方式, 但碰撞 sha256 这种攻击对于现在的普通计算机而言还是过早了.

通过这种方式, 同样可以保证信息不被篡改, 那和上面所说的通过私钥签名有哪些异同点呢?

首先是考虑是否可以防篡改, 通过共享秘密的方式的安全性是基于 hash 的单向性, 同样是基于数学问题, 碰撞 SHA256 这方面我研究不多, 不太清楚有没有关于这方面的选择明文攻击, 毕竟有部分明文是公开的. 之后有时间我会在这方面进行调研. 然后是签名的安全性, 基于大素因数分解的数字签名理论上现在也只能通过暴力猜解 (除非有严重漏洞), 想要破解密钥实在是太难了.

老实说, 计算 MAC 的方式显然比纯哈希的计算量要大得多, 但是签名的方式好处也更多.

从上面的例子来看, Alice 和 Ceasar 共享了秘密, 所以只有 Alice 和 Ceasar 可以验证信息的真伪, 但同样的, 也只有 Alice 和 Ceasar 可以进行篡改, 也就是说, Ceasar 必须对 Alice 完全可信 (这在传纸条的情景下可以如此设定). 否则利用这一点,Ceasar 可以伪造 Alice 说过的话,当需要验证的时候,可能会存在为了追究到底是谁的责任,将秘密公开来进行验证。

假设共享的秘密存在第三方可信机构监控,Ceasar 无法伪造一个新的秘密,所以也就不存在 Alice 和 Ceasar 的秘密对不上这种情况。

Ceasar 完全可以通过伪装成 Alice 的方式实现欺骗,因为他知道 Alice 追加的秘密,明文就可以任由 Ceasar 设定,然后再进行一次哈希就可以了。

所以这种方式存在一个极大的限制,那就是如果不是所有的人都可以验证说话人的身份,那么相对于可以验证说话人身份的人,这些人的信任问题十分重要。所以,如果 Alice 和 Ceasar 之间是绝对可信的,那么这种方式是相对不错的,至少在计算量上是十分优秀的。

但不管怎么说, 通过 hash 加共享秘密的方式在彻底公开秘密之前是无法实现不可抵赖性 (non-repudiation) 的,而且还需要依赖于其他用户或者权威机构,这无疑增加了信任成本. 而签名的方式却可以, 任何人都可以通过公钥对对方的签名进行验证, 不但可以防止伪造, 也可以防止说话人抵赖.

知乎用户 水浒李元霸 发表

用反切,现在的人西化,很多都有密码的概念,还热衷于解密,但很少有人知道中国古代的反切拼音。 反切都是汉字。看上去并不让人怀疑,也没有解密的兴趣。

知乎用户 n1Nami 发表

不谈了,字丑,自带加密

知乎用户 骑木马的哥哥 发表

在网络安全中,解决中间人的方法是加密。

所以,,你可以和接收方共同协商打造一个密码本,这个东西只有你们双方手上有,你发消息的时候按照密码本加密。这样即使被中间人打开看到,也无法读取明文信息。然后再由接收方解密即可。

不过呢,这样效率肯定会很低。在网络安全中,还有个解决方案就是绑定双方的 IP 和 MAC 来杜绝中间人。所以,就不要传纸条了,直接发短信吧。。。

知乎用户 贡临渊 发表

你们就不能充话费送手机,然后装个微信么?

知乎用户 黄软软​ 发表

有件事印象非常深刻

高三一堂自习课,班主任数学老师坐镇,我个高坐最后一排,写了个纸条,上面写着一个不理解的问题,是化学题目,写着不会就往前传,当时我成绩还不错,啊我记得特别清楚,我这一列上有两个不太偏科的课代表,一个语文还有一个啥课代表来着,有一个同桌是数学课代表,成绩都特别好,其他的几乎没有一个成绩差的,所以心里想着总有一个人会吧

结果就是,班主任接到了纸条,给化学老师打了个电话,化学老师过来针对这个问题上了半节课…………

我讲这个是想告诉你们,身正不怕影子斜

知乎用户 Haochen Liu 发表

赵兄托你帮我办点事

知乎用户 enzyme 发表

学一门小语种。。

知乎用户 来须苍真​​ 发表

初二的时候为了传纸条专门自创了一套文字。

这套文字只有四个人知道如何使用。

如图:

知乎用户 一大坨​ 发表

知乎用户 八里土人 发表

就信息、密亿码学机制来看,

从根本上来说,双向通信,防范中间人攻击,必须在两端预先共享一个或一组秘亿密。这个秘亿密只有两端知道,其他人都不知道。

没有这个条件,所有防止中间人攻击的技术从理论上就是不可实现的。因为你不知道谁是对端,任何人伪冒都是可能的。

对于单向的通信,可以通过公私钥对,只需一端持有秘亿密即可证明消息来自他,可以把公钥公开给所有人。纸条属于这一类单向通信。同样,这个秘亿密也只有他一个人知道。

对于纸条,来源真实,防伪冒简单用笔迹就可以了。

对于完整性(防止剪断、删安除、重组之类的),恐怕要引入其他的机制了,例如,写一行字,用一个红笔横着画条曲里拐弯的线。

完整性还包括新鲜性(把昨天的消息今天送过来)、防乱序和保证送达、防重放。对于新鲜性,用时间戳来实现。对于送达(不被中间人截取不转)和防重放,引入序列号,每个消息加一个连续的号码。注意,这些信息都要被那条线画过。

对于机一密性,这个话题谁都能答,这里就不多说了。

知乎用户 晚河 发表

核心人员人手准备一份密码本,涵盖所有与课程无关的核心词句(不推荐使用单字密码,编译时间过长,不适合用于四十分钟的课堂)。例如:放学、别走、你大爷等等。

现在我们要传递一个信息,在纸条上写 R23、T2、H12、A10,通过节点传递或直接空投皆可。注意存在被其他核心人员截获信息的风险,可以定时小范围更新密码本加以规避信息泄漏,不同的圈子采用不一样的密码本,也便于塑造你绝对核心(老枪)的地位。

于是当妹子收到你的纸条,一核对密码本:

今晚要不要来我家写作业?

知乎用户 鬼半只 发表

让学霸帮你传,因为他们没时间看你的纸条

知乎用户 张韬 发表

发挥想象力吧骚年
1 利用象形文字,这个小学生挺流行的,像爸爸去哪里那样,优点是两人之间的默契高后,可以十分抽象,缺点是画起来费劲,如果没默契就完了

2 像九宫格输入法那样做密码 把对应按键的数字写出来,比如,我喜欢你

码文 91,63,92,43,42,82,21,62,62,43
原文 w o x i h u a n n i

3 以前有拿两张纸,第一张纸写字,第二张纸上就有痕迹,传纸条传第 2 张,缺点是仔细看可以认出来,可以放在角落,然后用写在别的地方的伪装正文分散注意力

4 拆字音,比如 放学后去哪 这几个字 fangxuehouquna 写成拼音可以认出来,但是房雪猴去拿,或者进一步 f 昂 xue 厚群啊,应该不好认

5 如果经常使用的词汇,可以建立一个双方都知道的密码词典,比如有人这样作弊,交答卷的时候骂:哎呀这逼题哎呀我操逼题大爷的操操 翻译过来 ABACDCC

6 藏头诗,或者藏位诗,需要一定文采,如果没啥文采就别写古诗了,写成现代的,表白的时候慎用,写不好会适得其反,例如下面是某人写给他同学武婷婷的表白诗:
武大郎!
停下!
停下!
我要买烧饼!
爱!好咧!
你要几个!

知乎用户 bb aa 发表

不知道题主打算保护 confidentiality 还是 integrity。
如果是保密性。让接收方 MM 手算任何复杂的加密解密都是不人道的,所以应该使用可信任节点来进行通信。可以仿照 tor 的反向加密原理,将纸条层层打包,路径中的每个节点打开最外面一层纸条,从而知道下一步将纸条传给哪个节点。而 MM 回信的时候可以使用另外一条通信线路。这样即使一个节点被 compromised,敌方也只能得到一半信息。
如果是完整性加保密性,假设 MM 英文很好,使用最简单的平移字母加密,和 MM 事先约定好一个简单的 hash 算法和 seed,利用 hash chain 来生成不同的 key。大大增加破解难度。

知乎用户 wanlan zhou 发表

楼主问这个问题,应该知道中间人攻击了。贴主的问题在于如何保护消息不被中间人窃取。
为描述方面,将问题中的三个人分为 通信双方和中间人。
中间人窃取有两种方式,(一)冒充,诱使你把中间人当成会话对象进行通信,(二)破解,破解你们对消息的保护。
然而由于任何通信数据都会被中间人获取,意味着除了通信双方会话的密文之外,协商的保护方法(加密方法,解密方法)、身份鉴别数据(含鉴别方法)也会被中间人获取,并且中间人可以实施篡改、伪造。
所以要找到一个无法篡改、无法伪造假冒、并且无法解密的方法。

首先说要防止篡改,只要使用哈希函数计算每条消息的哈希值,附在每条消息后面,收到的时候将收到的消息同样计算哈希值与收到的哈希值比对,就可以防止篡改。

然后说无法解密,
现在使用的加密算法的安全性都是基于密钥的,纵使加解密方法公开,只要不知道密钥,密文就是安全的。所以需要在协商保护方法的过程中,让中间人无法获得解密密钥。
这个可以选择非对称加密,解密密钥私有,将加密密钥告知对方。这样纵使在告知过程中被中间人获取,中间人也无法完成对密文的解密。(考虑加解密速度的话,可以使用对称加密保护通信安全,但通信开始前,对称加密的密钥需要告诉对方,为防止中间人获得密钥,密钥需要通过非对称加密算法加密以后传输给对方)

最后说无法假冒
由于中间人可以截获数据,篡改之后发送,通讯中任何鉴别数据都可以被篡改,因此身份鉴别工作需要额外的信息,这些信息应该是不受中间人控制的情况下获取的。比如仅有通信双方才知道的某个特定信息,比如某 CA 给双方签发的身份证书和 CA 的根证书。互联网中使用后者来鉴别身份。

知乎用户 王峰 发表

把中间人变成机器,比如遥控汽车。

知乎用户 罗康 发表

題註,侞淉伱褦看嘚懂這段呅牸,涐罙罙哋建議您甪吙煋呅,佬師絕対看卟懂。榊馬亽肉 RSA 啥の嘟媞浮雲。
附带:火星文_火星文转换器

【update】童鞋们你们太逗了。。哈哈
@铁柱:
老师淡淡一笑:“涐の低調卟媞伱娤逼の澬夲”

@William Ho:
︶ㄣ. ァ簩師洅芐弌盤很ナ的ポ其。︶ㄣ

知乎用户 onion red 发表

你们真的不用手机吗?

知乎用户 北野荒草 发表

密码学中间关于密文涉及一个叫 “加密协议” 的东西。也就是说,加密方与解密方都应该知道这个协议。这个协议是完整的就能保证识别出是否被篡改或者及时识别出密文的完整与残缺。

举个例子,你写了一句话在纸条上,与接收方约定,第二、第五个字是互换的,并且这两个字组合在一起,是对方的名字。这就是一个协议。如果对方接收到,能够按照这个协议进行辨识,那么则可以认为这个纸条 OK,否则就认为不是你俩约定的东西。

我举的例子特别简单,你可以理解精神。我这里所说的加密方和解秘方,现实中可能是人,也可能是一对程序。但是无论如何,这就是辨识的机理。有人攻击首先要破解你这个协议,如果不能破解,那么都是徒劳的。而你为了不被人识破这个协议,就要把这个协议设计好。

可以说,加密就是设计这个协议,并且对明文进行封装的过程。解密就是按照预知的协议进行分析和检查的过程。

有一本书,叫《应用密码学》是美国人 bruce schneier 写的,建议题主看看。可以说这本书是迄今为止非常权威的密码学书籍。对什么是加密协议讲得比较透。其中涉及对称加密与非对称加密的内容,都有。


以上说的是加密,还有一种,就是 “密写”。这个与加密不同。加密是可以让人知道传递的东西里有密,但是没法理解。可是密写是让人不知道里边有密。这是更高一个级别的隐藏术。古时候的密写药水就是很原始的应用。现在很多把信息藏在图画或者声音里的多媒体水印技术,就是数字密写术。但是实际上也不局限在水印技术领域。密写的关键在于把机密信息藏在一段日常信息里。让人以为那就是日常信息,从而明明看到了,也不知道那是秘密。这与加密是不同的。这个国内有书籍介绍。但是不多。多数公开的应用都用于版权保护领域。但也不是不能用于机密行业。

我以为现实中多数是将密写与加密混合使用的。这样一来就更加难以被击破了。

知乎用户 I 老蔡 发表

密钥对 + 签名 ?

安全性是有保障了, 估计一节课的时间也就够算一次通讯的吧.

还挺费草稿纸的.

知乎用户 夜月一帘幽梦 发表

我跟基友都是用手势交流的,手势越交流越多,到现在基本可以无阻碍通话了。缺点就是经常被老师以为手抽筋了

知乎用户 郑维 发表

那就传一本书好了,越旧越好,涂鸦越多越好。

具体在哪页上写了内容,只有 Alice 和 Carol 知道。
累死想知道内容的 Bob 丫的。

知乎用户 阿虚 发表

我高中时用的方法是用两张纸,在纸上挖许多洞,洞与洞之间以完全随机的顺序画线连接。

把这个蒙版蒙在要传递的纸上,透过洞按照约定好的顺序写上要传递的内容。然后,拿掉蒙版,在空白的地方补写上与传递内容完全无关的话,在中间人看来纸上就是一堆的非感觉(nonsense)。

把相同的蒙版蒙在纸上,就能揭晓通信的内容。

优点是,解读方的操作简便。缺点则是发送方需要写大量废话掩护通信内容,操作相对繁杂。

知乎用户 Luice Liu​ 发表

小学毕业就开始用五笔,感觉当时全校都没有几个学生用五笔的。初中传纸条时用上了。其实跟本说不上是 “密码”,只是换了个表示方法。但对初中生来讲,足够用了。

提前跟妹子约定好这种加解密方式:用五笔键位码代替字母。除 z 外,二十五个字母与两位 1-5 的数字一一对应,自己定义 01 表示 z。熟悉键位的话不用看表,我当时给了她一张表方便她使用。

中间人只看到一堆数字,只能无耐。(初中生,加上课堂上手头没有工具,这种加密足够防止中间人攻击了)

知乎用户 双人份 发表

找 3 张方格纸,其中 2 张贴一起随意扣掉一些洞,然后一人一张。盖在第 3 张纸上,在空格处填入你要写的字。然后拿下来,人工补全整张纸。传给小伙伴,他把纸盖上去就看懂了。然后只有手持这 2 个 key 的你们可以看懂,不怕中间人。

知乎用户 JerryDing 发表

双拼或许是个好方法。

比如自然码双拼,“vshwrfmngshego”,意思是 “中华人民共和国”,有几个能看懂的。

如果为了便于阅读,还可以试着加入音调。

vs1hw2rf2mn2gs4he2go2,看着更乱了,但收到纸条的反而更容易读了。

知乎用户 斯大王 发表

高中的时候,我直接搞了一个全民传条本,其实就是个 BBS 或者聊天室,甚至有小编负责每天写天气预报,每周抄歌曲榜单,还有连载小说。

在这上面注册的用户多了,字体很容易辨认。这种传条本如果被篡改,也很容易看出来。

知乎用户 okstar 发表

首先,要传纸条的双方,在开始通讯之前,必须要用一个绝对可靠的方式交换双方的密钥。注意这个密钥必须要满足要求:a. 双方不能抵赖。b. 中间人无法模仿。

其次,要防范中间人录制 - 重放攻击。固定密码的方式太容易被录制重放了,因此双方通讯时每一次的加密密文必须是真随机无规律的,并且,新的一次通讯密文必须依赖上一次通讯的密文。

再次,考虑到通讯的过程中,双方无法再次交换密钥,因此双方的加密方式以及密钥体系要有足够的容量支持一节课 45 分钟的通讯需求。

因为题目需求只是检测中间人是否发生了攻击,因此下面协议没有考虑通讯内容对中间人保密。具体加密协议如下:

1、双方在中间人不在场的情况下,用足够可靠的方式交换对方的一字一密乱码本。(每天晚上饭堂碰头,双方交换对方密码本)。密码是 4 位一组的真随机数字。(如果用伪随机数字,也有可能被攻击)

2、因为对全部传输内容加密的话,对乱码本的容量要求较高,折衷的办法是对正文进行数字摘要计算后,进行加密并形成正文,与正文一起传输。

3、具体方式可以:

a. 约定一个 4 位数的同余计算式。例如 1314 。注:双方的同余式可以不一样,在交换密钥的时候同时交换对方的同余式。同余式最好使用质数。

b. 在正文中随机插入标点,确保一句话标点超过 4 个。取每个标点之前的字数。

c. 约定一个通讯报文序号,从 1 开始,无限增长。

对明文进行数字摘要计算,例如下列正文:

今天晚上,一起去看电影怎么样?我先去买票,你十分种后到。

上述可以转化为数字序列 4 9 5 6 ,加上序号 1,得到数字串:

14956,除以 1314 得余数:502,前面补 0,确保是 4 位数。

d. 用一字一密乱码本对 0502 进行加密,假设得 5287 。

e. 以 5287 为开头,接着上面的正文,实际在纸条上写入的是:

5287 今天晚上,一起去看电影怎么样?我先去买票,你十分种后到。

在此方案下,中间人由于:

1、不知道数字摘要算法。

2、不知道一字一密的乱码本。

因此无法伪造数字摘要签名,也无法伪造正文。同时,由于报文有顺序号,因此也无法进行录制重放攻击。(有两重机制防止录制重放攻击:1、加密使用了一字一密乱码本,因此密钥实际上每次都不同,2、报文有序号并且参与了数字摘要)

复杂一点,可以每一次都使用随机的同余值,把自己这一方下一次使用的同余值,以同样使用一字一密加密后,连接在数字摘要中进行传输。例如:

下一次使用 9527 作为同余值,一字一密加密后得 3270,则传输的报文变为:

52873270 今天晚上,一起去看电影怎么样?我先去买票,你十分种后到。

对方用前 4 位以及上一个同余值验证报文,并解出 9527 作为下一个报文的验证同余值。

风险:这个协议的风险在于数字摘要算法,要足够简单(因为要消耗计算时间),又要防止对方猜到,上面的例子以字数进行摘要,是非常容易破解的。为了避免这种情况,每次更换标点符号位置是必要的。

知乎用户 MR.Z​ 发表

人肉 RSA 是个好办法,唯一的问题在于你需要想办法确定私钥的持有者会不会泄露。

比如老师直接劫持了对面同学,然后 call 那个同学帮他解密。

知乎用户 dading12345 发表

写个密码本 一式两份 每用完一页密码本就撕掉一页 不仅能防止中间人 还能防止重放 不过也有缺点 大量密文被劫可能能推断出加密算法 再使用已知密文攻击 时间越久 越容易爆破出来

知乎用户 赤毛鼠 发表

迪菲 - 赫尔曼密钥交换算法可以在不安全的通信信道下商定一个密钥(前提是中间人只能看,不能改)。先用这个算法约定密钥,之后用这个对称密钥加密沟通就可以了,无需事先约定任何密钥,这应该是最简单方便的了。

知乎用户 小书虫 发表

这种场景不需要防范中间人攻击啊,完全可以在课堂下面对面交换密钥,课堂上加密传输,中间人有什么办法尽管想去好了。

知乎用户 橙寒 发表

先做点自保把…..

比如说挂一个动态 ip。

知乎用户 匿名用户 发表

#include 〈windows.h〉
#include 〈math.h〉

LRESULT CALLBACK WindowProc (HWND, UINT, WPARAM, LPARAM);

int r=100;
const double pi=3.1415926;

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdline,
int nCmdShow)

{
HWND hwnd;
MSG messages;
WNDCLASS wincl;

char lpszClassName[ ] = “Polygon”;
char lpszTitleName[ ] = “心型线”;

wincl.hInstance = hThisInstance;
wincl.lpszClassName = lpszClassName;
wincl.lpfnWndProc = WindowProc;
wincl.style = 0;
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = CreateSolidBrush(RGB(250,250,250));

if (!RegisterClass (&wincl))
return 0;

hwnd = CreateWindow (
lpszClassName,
lpszTitleName,
WS_OVERLAPPEDWINDOW,
100,
0,
600,
600,
NULL,
NULL,
hThisInstance,
NULL
);

ShowWindow (hwnd, nCmdShow);
UpdateWindow(hwnd);

while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}

return messages.wParam;
}

LRESULT CALLBACK WindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
HPEN hp;
PAINTSTRUCT pstr;
double R,i;
POINT point[10000];
int j;
switch (message)
{

case WM_PAINT :
hdc=BeginPaint(hwnd,&pstr);
hp=CreatePen(PS_SOLID,3,RGB(255,0,0));
SelectObject(hdc,hp);
j=1;
point[0].x=300;
point[0].y=200;
for( i=-pi; i{
R=r*(1+cos(i));
point[j].y=point[0].y+int(R*cos(i));
point[j].x=point[0].x+int(R*sin(i));
++j;
}
Polygon(hdc,point,j);
DeleteObject(hp);
EndPaint(hwnd,&pstr);
break;
case WM_DESTROY :
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}
非原創,輕噴。

知乎用户 我从不轻易改名 发表

想要防范中间人的攻击,有三个最直接的方向:

1. 优化链路,从根源上无法发现纸条的存在。

2. 隐藏信息,即便发现了纸条本身也无法意识到它是信息载体。

3. 加密内容,在以上两点都失效的情况下,无法识别纸条所附带的有效信息。

第一个方向主要是技术手段的问题,比方说抛纸条就比滚纸条危险性高。

不同的技术手段在不同的实际应用场景中各有其利弊,需要题主随机应变。

第二个方向的骚操作就很多了,主要分为 “稀释信息”、“转移注意” 和“表现形式”三大类。

啥是 “稀释信息” 呢?就是用一大堆无用信息把真正的讯息掩盖住,并且接收方可以根据某种特定方式提炼出来。比方说讯息的每个字中间塞上固定数量的字符,解读的时候跳着读。

“转移注意” 是利用人的思维惯性,采用一种信息载体为另一种信息载体打掩护。我曾经试过在两张 A4 纸上打一堆无意义的草稿然后钉起来,利用订书钉的不同角度组合打旗语拼成句子。(当然这操作很费钉子)

“表现形式” 就是另一个技术手段的问题了。比方说用蜡写字,接着接收方削点有色粉笔末抖在纸上之类的,网上一搜教程大把。

第三个方向我也没什么好给其他信息安全的大佬作补充的,但我认为理想的情况是可以把文本信息数据化再进行加密;数据化又有两个方向供你选择:编号和坐标。

编号就是把汉字、拼音甚至笔顺赋予一个指代,需要时用指代表述出来,接收方在解读时也需要相应的对照。麻烦之处在于汉字特别多(笔顺你又写不对),建议还是采用拼音。

坐标则需要密码本,通常用字典这些字符涵盖广的书籍最为方便(最好用一些冷门、老版的字典,老师让买的字典人手一本,典容易被破解),利用页码和字数等坐标轴表达讯息。

在数据化的基础上,你就可以拿你能想到的一切方式加密它了,或者加个密码盘作为辅助工具也不是不可以。

什么?被破译了怎么办?

密码嘛,义如其名,赌的就是个信息差,玩的就是个心跳。没了信息差,再怎么精妙的情报系统都是透明的,还是认命吧……

知乎用户 黄金大亨 发表

这本质上是一个反间谍问题。

中间人攻击指的是:张三要传个字条给李四,中间找了王二麻子做传递人。

张三的字条上写的是 “今晚八点在电影院门口见,一起看电影”。

但王二麻子把内容改成了 “今晚八点在肯德基门口见,一起吃肯德基”,然后把改过的字条给了李四。

李四回了个字条,上面写的是 “好,那就八点见。”

王二麻子又把内容改成了 “今晚我有事,不去看电影了。”

结果,李四跑到肯德基门口白等了半天,张三自己去看的电影。

这对于反间谍人员来讲,实在是太好解决了。

只需要张三和李四之前做好约定:每次写字条时都故意把第五个字写成错别字。

如果收到的字条的第五个字不是错别字,那就说明被中间人篡改了。

还是上面的例子,张三在字条上写 “今晚八点再电影院门口见,一起看电影”—- 故意把“在” 写成“再”。

王二麻子以为只是普通的错误字现象,所以自己改写时不知道要把第五个字故意写成错别字。

李四看了后,自然知道王二麻子在中间动过手脚了。

甚至可以使用更加难以识别的暗号 —- 每次写字条时都在第五个字下面用笔点一个黑点。

王二麻子根本不会看得那么细。

只要李四在字条的第五个字下面看不到那个专门点过的黑点,就知道是王二麻子在中间动过手脚了。

这叫 Security check—- 安全检查暗号。

二战时英国情报机关 SOE 要求在敌后工作的特工人员每次发报时都故意把第三个字母打错。如果总部在收到电报时发现第三个字母没错,就说明要么发报的是敌人,要么是自己人是在敌人控制下发报:

知乎用户 小傅 Fox​ 发表

之前有一个男生和女生传纸条我就经常手欠附上自己的话。恩,后来这个女生来追我了。

… 正题…
可以使用加密算法,比如把字转换为拼音 + 音调 如 liang2 凉。然后把字母转换为数字,与音调间加个短竖线,两个字间加两个短竖线。标点直接写。
再者,把条夹到书里,约定好页码的规律,传递书。还可以避免老师抓到。

知乎用户 New life​ 发表

笑死,知乎 er 的脑洞总能给我惊喜。本人水平比较业余,简简单单来皮一下。

首先最简单的解决方式就是建立无第三方或有可信第三方的端到端安全信道,也就是说在双方监视的情况下直接扔到对方桌子上或你特别信任(不会背叛、使坏)的死党帮你扔到对方桌子上。

接下来就要讨论基于非可信第三方的信息传递的情况。要防范中间人对信息进行拦截或篡改,就需要对信息进行加密。鉴于问题背景 “课堂上”,我们默认双方算力有限,因此加密方式需要满足三个条件:一是满足 kerckhoff 假设,二是双方有能够加解密信息的密钥或私钥(如果没有的话需要先进行密钥分发,内容太长这里写不开),三是需要做到身份互认证。

可以选择用拼音或者英文作为明文,选择已经提前约定好的密钥进行恺撒加密(密钥可能会被聪明的第三方或勤奋的第三方给破解)或维吉尼亚加密(安全性较高,推荐试一下)。如果双方比较闲的话,也可以试试低轮数的 DES 或流密码,当然轮密钥和种子密钥是要在下课就已经提前约定好的。更复杂的加密方式比如 RSA 怕你没算完就已经下课了。。。

为了防止内容被篡改,可以在加密前的明文中加入校验位,比如汉明码或 CRC 冗余校验。(其实这是数据链路层和网络层的工作,但由于没有网络层,只能应用层代劳)

另外还要防止信息被伪造。解决这个问题的工具在密码学中叫身份认证码和数字签名。你需要一个能证明双方身份的 “证书”,比如双方的字迹或其他证明身份的东西。

最后,上课不要传纸条!认真听讲!

知乎用户 王博虎 发表

发送大量的无意义信息,使路由器系统崩溃,进入默认的交换机模式,然后发送有意义信息。当然要注意一下路由器的不应期和烧毁的可能性。

知乎用户 杨霏霏 发表

传量子纸条啊!
一旦被探测,纸条的原有态就会被破坏,接收方接受的信息不完整,就会意识到这个中间人不可靠,下次就换个中间人咯。

知乎用户 齐云飞​ 发表

我小时候学了一套打电话写信时的密码,据说是早年盲流使用的。高中的时候教给了一个同学。后来这个同学就用这套密码写纸条给我,还用这个方法写过信。从那时起就发现她是个语言天才。后来她果然读了外语系,自己办学校教语言,现在跑日本研究语言去了。

知乎用户 萧公子 发表

当年 2 到爆,上大课的先天在课桌下钉了俩滑轮,上课时间拉滑轮传纸条泡妞,结果还是被老师骂了一顿

知乎用户 Sean Go 发表

推荐一本书 《密码全攻略》 数学和计算机密码学这部分理论这本书一带而过,很适合传纸。好好练练能够达到二战时期的特工水平。
给儿子买了一本,经常睡觉前给他念一段,跟他做些小练习,后来他就上课传纸条,后来给大队长写了封密信,破解完之后是 I LIKE YOU 之类的,不过有点地方写错了,我说你还是别让她破译了,丢人,还是好好学英语吧。这个假期逼着他背书背单词什么的。
儿子三年级,这本书他基本能懂。(本来就是少儿科普书,逃了……
-————————————————————————————–
我对密码学只是粗浅了解,但是最高票还是要反对,理由是

@Ivony

的回答大部分是建立在分包,分片,以及自主选择安全路由,但事实上,路由是你没有办法控制的,就连你们家的 WIFI 里是否有后门你都不知道的。即使能够自己建立安全通道,也会因为动作太大引起老师以及别人的注意,最终摧毁这个系统——或许你的通道是安全的,但是这个系统是不安全的。上课传纸条,首先你就要尽量不让人发现你要传纸条!
还要反对大多数答案,没理解什么是中间人攻击,你们让题主失望了。
这是维基百科中间人攻击词条,我搬运过来你们感受一下!全文在这里:
http://zh.wikipedia.org/zh-cn/%E4%B8%AD%E9%97%B4%E4%BA%BA%E6%94%BB%E5%87%BB
中间人攻击Man-in-the-middle attack,通常缩写为 MITM )是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被 攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。
防御攻击

许多抵御中间人攻击的技术基于以下认证技术:

  • 公钥基础建设
  • 更强壮的相互认证
  • 延迟测试
  • 第二(安全的)通道的校验
  • 一次性密码本可以对中间人攻击免疫,这是在对一次密码本的安全性和信任上创建的。

中间人攻击的取证分析

从被怀疑是中间人攻击的链接中捕捉网络数据包并进行分析可以确定是否存在中间人攻击。 在进行网络分析并对可疑的 SSL 中间人攻击进行取证时,重要的分析证据包括:

  • 远程服务器的 IP 地址
  • DNS 域名解析服务器
  • X.509 证书服务器

其他的非加密的中间人攻击

一个著名的非加密中间人攻击的例子是贝尔金无线路由器 2003 年的某一个版本所造成的。

另一个典型的非加密中间人攻击的例子是 “ 图灵色情农场”。

知乎用户 杨智宁 发表

只有中间人攻击的教室简直是天堂。

来想一想如果有个站在教室中间,选择性的将纸条扔掉,并将传纸条的同学记在小本本上请家长的老师,你们要如何传纸条。

解决了这个问题,你们就是我国的希望。

知乎用户 匿名用户 发表

蜡封。

知乎用户 Troy​ 发表

五笔

准确,适用范围较小,需要双方均会五笔。

原文:鄙人爱你
密文:KFLB WWWW EPDC WQJY

如果发送方或接受方中至少有一方不会五笔,可以使用九宫格输入法进行加密。

九宫格输入法

密文较长,适用范围较大,会使用九宫格输入法即可。

原文:放学别走
密文:33216241 928232 224332 946382

以上是我经常使用的两种较为简便的方法。

知乎用户 匿名用户 发表

小时候干过这种事。
用《新华字典》做密码本,以 4 位数表示页码、2 位数表示行号、2 位数表示列号,以列、行、页的顺序合成一个 8 位数的编码,对应字典上的一个字符。
然后选择一个 4 位数作为本次通信的偏移量,明文写在最前面。偏移量与当天的日期相间形成密钥,比如偏移量是 1234,今天是 4 月 20 日,密钥就是 10243240,密钥和编码两个 8 位数的值相加,得到密文。首位控制尽量不要进位,进位在前面加逗号,通信中的所有符号一律用编码。
这样即使中间人有同样的一本《新华字典》,面对这种查表法 + 凯撒位移法加密的密文,也很难解密。首先他要知道密码本是《新华字典》,其次他要知道字符的编码格式,第三他要知道密钥的构成。因为密钥是动态变化的,他很难收集足够的样本。

知乎用户 匿名用户 发表

来说说传纸条要注意那些方面:
1、传递方法:这个不用说了吧?
2、隐蔽性:被老师发现了?走好。
3、可信度:传纸条时内容很可能被篡改。
4、隐私性:毕竟总会有不想让别人知道的东西啦……
下面说说我的经验:
1、传递方法:看你的人际关系咯。
很不幸,我班里每周都要换位,很幸运,我们班很团结,虽然一些节点不可信,但不管怎样是可以传递到收件人手里的,而且我从没有遇到过那个节点不干活的情况(不论男生女生学霸学渣,都很敬业)。
2、隐蔽性:这就看你的传递路线怎样咯。
我们班传纸条(尤其是给比较远的地方的)时哪怕绕远路,也要现给最后面的同学,然后在传到前面。因为后面是三不管,穿个纸条老师也不管的,所以…… 哪里最安全。
3、可信度:
首先要有自己专属的字体,我的字…… 几乎没有几个人可以模仿。然后,我写纸条是汉语 + 日语(我不会日语,只是稍微夹杂了一些助词),语序是 SOV(主宾谓),举个栗子:今晚吃什么?= 今晚什么を吃?
然后写一个问题,下次受纸条时上面必须有这个问题的答案(至于怎么加密答案下面再说)。
举个栗子:
原文:第十九题答案是 A
密文:
第十九题は A 是。(这部分是密文)
我上次给了你什么?(这部分是给出的问题)
10(这里回答的上一个纸条的问题)
如果可以,还可以用双面胶封住口,这样有没有被看一目了然。
4、隐私性:
让墨文,拉丁化新文字,IPA,你值得拥有。
也可以学学世界语,然后用凯撒……
也可以用方言。
我家乡话是冀鲁官话,跟普通话很像,但是用 IPA 写出来…… 估计没几个看得懂。

然后说一下我们班考试时是怎么运作的:
这是座次表:
黑板
01 02 03 04 05
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
就现这么看吧,实际人更多。
05 想知道 14 题的答案,写纸条往后一直传到 45
45 在传给 41、42、43、44
然后他们在向前传,这样,有人要 14 题答案的事全班都知道了。
然后会有几个人吧答案写纸条上,传给最后排,最后排在给 05.

完美~

知乎用户 汪慎独 发表

= = … 什么新华字典也好,跟朋友说好你把纸条夹在哪一页,然后让同学给你传一下字典…. 反正厚一点的教科书都 OK… 提高安全性,你直接写上面吧… 这种伪装方式嗯被同学发现和被老师发现都降低风险…. 我猜你同学也不会对你的新华字典突然来兴趣,就算来兴趣… 好吧,能找到那么薄的纸条…. 小概率事件… 当然,行动最好隐秘一点,不要让别人知道你行为的动机,即使被老师截获,也可以说,只是传一下工具书而已嘛,以上那些费脑解密的答案对于动一下脑就死亿万脑细胞的朋友实在是鸡肋了点….

知乎用户 风起兮 发表

我能说初中那会儿实在烦了我前后的两人总让我帮着传纸条,然后有节课就每次传的时候稍微改一点内容,最后他们吵起来了吗…

知乎用户 Kogic 发表

在物理层从根本解决问题,拿个带锁的盒子把纸条锁上。

咳咳,不抖机灵了。

想要避免中间人攻击,有两种方式:

  1. 干掉中间人
  2. 使得中间人无法达成其目的

第一种选择,具体方式都在《刑法》里,这里就不过多阐述了,好奇的可以去问问

@罗翔说刑法

第二种选择, 这里参照了一下

@存樱

的回答(略作修改,未经授权,侵删)。

1. 破坏信息的机密性,纸条中某些内容被罗老师看到了。

2. 破坏信息的完整性,纸条的内容被篡改和伪造。篡改的话比如本来张三说 “我爱罗老师”,结果被中间人李四改成了 “我爱吴签”。伪造就比如张三说 “王五借我一支铅笔”,结果李四把这个纸条抄了 10 遍传给王五(重放攻击),导致王五失去了铅笔自由。

3. 破坏信息的可用性,纸条直接被拦下了,不管啥内容我都把你给扔了。比如张三对王五说今晚学校去嫖娼不给钱,结果这个纸条直接被李四给扔到了垃圾桶里,王五没有去赴约,张三一个人去还被抓了,导致他很生气。

而对于这几种攻击行为,可以有以下解决办法。

  1. 保护信息的机密性方法。

张三和李四约定一个编码表,最方便记忆的就是拼音的 a-z 对应 1-26。

即 你好 -> ni hao -> 14-9 8-1-15

2. 保护信息完整性的方法。

完整性要保证王五收到的纸条和内容确实是张三发过来的,没有被篡改,也不是伪造的。这个不难办到,只要用对称加密即可。双方指定一个 interval(间隔),每隔开 interval 个字才是一个有用的信息,无效信息用随机数填充。

例如:14-9 8-1-15,在 interval=2 时为 14-9 18-14 12-26 8-1-15 12-2-16-24-17 8-2

3. 保护信息可用性的方法。
这个目前没有想到较好的保护方式,最笨的办法就是复制多份纸条给不同的人传(灾备)

于是,李四想要得知通讯内容,必须先知道 interval,想要爆破 interval,他需要先把所有内容解码,把数字挨个转换为字母,这其中的工作量是巨大的,特别是当 interval 的值较大的时候。

(顺带提一句,我小学和同学传纸条还真是这么写的,事实证明,熟练使用后效果远高于其它加密方式)

受到

@武杰

的回答的启发。

开头可以先不用 interval 加密,询问对方以下内容:

请回复我两个数字:

  1. 我们的门牌号的乘积
  2. 0 或 1,如果是 0,则使用我们门牌号的差值(大减小)的正序作为 interval,从左到右按位依次轮流使用,1 则使用倒序。

这里假设张三和李四的门牌号分别是 3 和 15。

张三询问后获得的回复是 “45, 1”,45=3*15,于是可以推断出中间人没有攻击,那么就可以使用 12(15-3)作为 interval。这一轮通讯在验证非中间人回复的同时交换了 interval。

这样可以免去课间交换 interval 的过程。

解释一下 “从左到右按位依次轮流使用”:即第 1, 2 个有效数据中间隔了 1 个无效数字,第 2, 3 个有效数据中间隔了 2 个无效数字,按此循环。

写了一段 Python 代码来描述这个过程,这里没有写上述的询问交换密钥和不固定 interval。(先给大家道个歉,代码是凌晨的时候写的,脑子不太好使,有些地方逻辑比较混乱,一会用字符串一会用列表的,各位将就着看吧,我也懒得再去改了(除非破 1k 赞哈哈哈哈哈))

from typing import List
from pypinyin import lazy\_pinyin
from random import randint


def encode(text: List\[str\]) -> str:
    """编码
    转码过程:
        将文本按照a-z对应1-26的编码表转换,每个字的拼音转换后的数字间用连字符连接,每个字后加上一个空格,末尾无空格
    例:
        \["ni", "hao"\] -> "14-9 8-1-15"
    """
    result = ""
    for word in text:
        for letter in word:
            result += str(ord(letter) - 96) + "-"
        result = result.rstrip("-")
        result += " "
    result = result.rstrip(" ")
    return result


def decode(codes: str) -> List\[str\]:
    """解码
    encode的逆操作
    """
    result = \[\]
    word\_codes = codes.split(" ")
    for word\_code in word\_codes:
        letter\_codes = word\_code.split("-")
        word = ""
        for letter\_code in letter\_codes:
            word += chr(int(letter\_code) + 96)
        result.append(word)
    return result


class Paper:
    """纸条"""

    def \_\_init\_\_(self) -> None:
        self.content: List\[str\] = \[\]

    def write(self, msg: str) -> None:
        """在纸条上写下一条消息"""
        self.content.append(msg)


class Person:
    """人(传纸条的每个人都属于Person,可以看作节点)"""

    def \_\_init\_\_(self, paper: Paper, interval: int) -> None:
        self.paper = paper
        self.interval = interval

    def transfer(self, obj):
        """递交纸条给另一人"""
        obj.paper = self.paper
        self.paper = None

    def encrypted\_write(self, text: str):
        self.paper.write(self.simple\_encrypt(self.process\_text(text)))

    @staticmethod
    def process\_text(value: str) -> str:
        """处理文本
        将文本转换为无音调的拼音,然后进行编码
        """
        text\_pinyin = lazy\_pinyin(value)
        codes = encode(text\_pinyin)
        return codes

    def simple\_encrypt(self, processed\_text: str) -> str:
        """
        对处理过的文本进行简易的加密
        加密原理:
            每间隔一个interval才是真正有效的文字,中间用随机数填充
        例:
            interval = 2
            "14-9 8-1-15" -> "14-9 11-22 15-12-25 8-1-15"
        """
        words = processed\_text.split(" ")
        result = \[\]
        for word in words:
            result.append(word)
            for j in range(self.interval):
                random\_word\_code = ""
                for x in range(randint(2, 5)):
                    random\_word\_code += str(randint(1, 26)) + "-"
                random\_word\_code = random\_word\_code.rstrip("-")
                result.append(random\_word\_code)

        return "".join(\[word + " " for word in result\]).rstrip(" ")

    def simple\_decrypt(self, text: str) -> str:
        words = text.split(" ")
        return "".join(\[word + " " for word in words\[:: self.interval + 1\]\]).rstrip(" ")


if \_\_name\_\_ == "\_\_main\_\_":
    # 初始化
    interval = 2
    text = "你好"
    paper = Paper()
    zhangsan = Person(paper, interval)
    lisi = Person(None, None)
    wangwu = Person(None, interval)
    # 开始传纸条
    # 通信双方协定好interval
    # 张三写下根据interval加密后的文本
    zhangsan.encrypted\_write(text)
    # 张三传给李四
    zhangsan.transfer(lisi)
    # 李四传给王五
    lisi.transfer(wangwu)
    # 王五根据interval进行解读
    msg = decode(wangwu.simple\_decrypt(paper.content\[-1\]))
    print(msg)  # \['ni', 'hao'\]
    # 王五写下根据interval加密后的文本
    wangwu.encrypted\_write(text)
    # 王五传给李四
    wangwu.transfer(lisi)
    # 李四动了歪心思,他看了一眼纸条,但是搞不懂内容是什么
    print(
        lisi.paper.content
    )  # \['14-9 18-14 12-26 8-1-15 12-2-16-24-17 8-2', '14-9 4-5 25-5-19-13 8-1-15 25-3 7-3-12-13-1'\]
    # 李四尝试解密,但是他没有interval,想要暴力破解,需要先全文decode(即interval越大,爆破难度越大)
    # lisi.simple\_decrypt()
    # 李四看出了拼音转码的编码方式,用自定义的interval写入自己的内容
    lisi.interval = 3
    lisi.paper.content\[-1\] += "" + lisi.simple\_encrypt(lisi.process\_text("小可爱"))
    # 李四传给张三
    lisi.transfer(zhangsan)
    # 张三根据interval进行解读时发现不通顺,就可以推断出有中间人攻击
    msg = decode(zhangsan.simple\_decrypt(paper.content\[-1\]))
    print(msg) # \['ni', 'hao', 'db', 'ke', 'xfdco', 'owf'\]
    # 当然,这个方式也有不够安全的地方,如果李四的自定义interval正好是张三和王五约定的,那么王五不能推断出有中间人攻击
    # 如下
    zhangsan.encrypted\_write("今天天气真好")
    zhangsan.transfer(lisi)
    lisi.interval = 2
    lisi.paper.content\[-1\] += " " + lisi.simple\_encrypt(lisi.process\_text("啊小可爱"))
    lisi.transfer(wangwu)
    msg = decode(wangwu.simple\_decrypt(paper.content\[-1\]))
    print(msg) # \['jin', 'tian', 'tian', 'qi', 'zhen', 'hao', 'a', 'xiao', 'ke', 'ai'\]

知乎用户 匿名用户 发表

想起那个时候收到的纸条只有每个字的首字母,我居然也能秒懂。
例如,我收到的第一张居然是这样的:NXBXHW

知乎用户 法库滚子王​ 发表

为了避免中间人知道我们纸条的内容,我们都是直接喊…

知乎用户 橙子 发表

RSA public key 加密 private key 解密

知乎用户 林轩 发表

秘码

用软件扫描身边任意的条形码,输入要说的话。然后让对方也扫描这个条形码,就可以看到你写下的留言咯~

本人没下载 盗了下最美应用的图

突然想到题主的需求。。上课传纸条…… 拿个手机和条形码扫来扫去是求没收的节奏吗。

题主再问个问题,上课玩手机怎么防范老师的攻击。

知乎用户 公子谬 发表

传统方法比加密更靠谱,加密都有漏洞的

—— 固定纸张规格,固定格式间距,数字繁体大写,规避歧义和易增简笔画篡改的文字,每张都标明页码和总页数 + 笔迹认证

知乎用户 在路上 发表

这里我们请出本片的主人公 Alice 和 Bob,当然还有一个对我们 Alice 女神觊觎很久的痴汉 Carol。
上面 Ivony 给出了通过介质和协议防范中间人攻击的方式,下面我们来探讨一下用密码学的知识来防范中间人攻击。
Alice 和 Bob 各拥有自己的公私钥对,(Ap,Ar),(Bp,Br)。Alice 用自己的私钥加密明文,再用 Bob 的公钥加密刚才的结果,即 E(E(M,Ar),Bp),Carol 拿到纸条后,由于没有 Bob 的私钥,所以无法解密内容,所以避免了完整的破坏。但是痴心的 Carol 并不甘心,他想假冒 Alice 的名义写一封分手信给 Bob,但是问题来了,一层加密用的是 Alice 的私钥 Ar,而 Carol 并不知晓,若强行用其他秘钥加密,Bob 解密会得出乱码,从而发现中间有人搞鬼。
Bob 在收到消息后先用自己的私钥 Br 解密密文,再用 Alice 的公钥 Ap 解密结果,得出明文。至此,不仅消息的内容仅 Alice 和 Bob 可见,保证了机密性,且可以保证该消息确系 Alice 所发 (Alice 用自己的私钥加密的过程也是签名的过程),过程具备了抗抵赖性。
考虑实际应用场景,相应的加密算法用 RSA 或 Rijndael 不现实。具体算法有待明天继续设计。

大家为了 Alice 和 Bob 操碎了心啊。

知乎用户 hhhhhhhhh 发表

以下都是假设你们用英文传,汉字转码太麻烦了。

这是一个很难得问题,难点在于不能事先沟通(如果能事先沟通的话一发 aes 就完事了。。。
其实就算能事先沟通,以上的那么简单的 matrix code(甚至于还有一对一 code)如果对方有电脑的话破译就是十分钟的事,遍历,然后做一个 spell check,基本上你们传五六次收到的就是假的了。。。

如果不能事先沟通,其实,只要保证密钥能够顺利传递就好了。
现在通常常用的是 rsa 做签名,elliptical curve df 做密钥交换,aes 做加密。

如果试图攻击你的中间人很少的话,可以选择多个较短的路径同时进行传递,这样保证多个路径都经过恶意中间人的概率比较小,这样对方收到的大部分纸条会是真实信息。

如果试图攻击的比较多,但是是无组织的的话,我们可以利用他们伪造的内容很可能是互不相同的,我们仍然可以通过以上的方法,不过路径需要更短一些。但是仍然很 resource consuming。

如果是有组织的,而且攻击者很多,我们基本可以假设我们两个人之间的通信完全被中间人控制,这个时候应该是无解的,因为根本交换不了密钥,这个时候时间戳都是没用的,因为时间戳是可以被伪造的。
中间人对 alice 来说和 bob 是完全一样的,中间人对 bob 来说和 alice 也是完全一样的。

知乎用户 邹扒皮 发表

纸条被劫持是常态,班级也没有 pki 体系值得信赖,
建议直接用微信。

要不是真爱谁他妈天天跟你做加密解密。

知乎用户 Helloworld 发表

参见《上课小动作》

知乎用户 存樱​ 发表

在课堂这个场景中,信息被写在纸条里,纸条的传输载体是人力。

Alice 想给 Bob 传一个纸条,纸条在被扔出之后有两种情况。一是 Bob 离 Alice 比较近,Alice 的力气足以让纸条直接飞到 Bob 桌子上;二是 Bob 离 Alice 有一定的距离,需要中间单位来接力。

中间人攻击的前提是中间人可以接触到信息。在第一个场景中,排除有人故意蹲守从而在纸条飞行过程中一跃而起抓住纸条的情况(一般传纸条都是在课堂中,所以这种情况忽略不计),纸条在传输过程中没有中间人参与,所以前提不成立,不存在中间人攻击。

在第二种场景中,参与到纸条接力的单位都有可能发起中间人攻击,为了讨论方便我们假设只有一个单位会发起中间人攻击。而中间人攻击无非就以下几种目的:

  1. 破坏信息的机密性,纸条中羞羞的内容被第三方看到了。
  2. 破坏信息的完整性,纸条的内容被篡改和伪造。篡改的话比如本来 Alice 说 “Bob 我喜欢你”,结果被中间人 Evelyn 改成了 “Bob 我不喜欢你”。伪造就比如 Alice 说 “Bob 借我一支铅笔”,结果 Evelyn 把这个纸条抄了 10 遍,或者说自己写纸条发给 Bob,导致 Bob 失去了铅笔自由。
  3. 破坏信息的可用性,纸条直接被拦下了,不管啥内容我都把你给扔了。比如 Alice 对 Bob 说今晚学校后山见面,结果这个纸条直接被 Evelyn 给扔到了垃圾桶里,Bob 没有去赴约 Alice 很生气。

而对于这几种攻击行为,可以有以下解决办法。

  1. 保护信息的机密性方法。

Alice 肯定不能用大家都看得懂的大白话来写纸条了,可以与 Bob 约定一个暗号系统,用暗号交流。或者是提前约定用语文课本中(页码,第几个)的方式,把大白话转换为数字来交流,除此之外还可以约定把这个页码加上几减去几之类的。总而言之就是对纸条内容进行可逆的置换或者变换,让 Bob 和 Alice 之外的人看不懂就行啦。

2. 保护信息完整性的方法。

完整性要保证 Bob 收到的纸条和内容确实是 Alice 发过来的,没有被篡改,也不是伪造的。保证不被篡改可以这样,Alice 在写完纸条后,把纸条用信封封好,然后封口处用 Alice 独一无二的印章盖个章。当 Bob 收到信封后只要检查下封口处印章是不是 Alice 的,以及信封是否没有破损就可以啦。

3. 保护信息可用性的方法。

好像这个没法比较好的保护。如参与传递纸条的人想把纸条给扔了,似乎没有比较好的非强制的方法杜绝此攻击。这里 Alice 可以找好姐妹(没有好到不担心她偷看以及绿自己的程度,所以保密性和完整性措施依然要用)帮忙传递,保证纸条可以顺利传递。

欢迎补充

知乎用户 ClSlaid 发表

关于信道编码的解决方案,前人之述备矣。不过除开在信息中加密,还可以辅助使用明修栈道暗度陈仓的方法进行防范。

我们可以将小纸条夹带在课本、文具中进行传递。中间的路由节点在发现你传递的是这种正常流量的时候,大概率会直接让你通过;缺点是传递过于频繁,会让喜欢偷窥的中间人起疑——这时其他答主的加密方法就派上用场了。

此种方法类似于利用扩频码将自己的信号伪装成宽带噪声,并在某些窄带信号的频点上发射,达到掩护的目的,常用于军事通信领域(瞎掰);也可以类比成将网络流量特征伪装成合法流量规避网络审计。

中间人实在是不靠谱的话,我们也可以跳过中间人;通过使用纸团或纸飞机将自己的信息直接传递到对方或者可靠的中继上,可以减少中间人攻击的可能性;不过性能最好的还是利用弹弓将纸团直接发射出去,发射的动量可以保证不规则的纸团有更大的概率到达你的目标。

知乎用户 杨荣钊 发表

看看《模仿游戏》里图灵和他基友传纸条时就是用凯撒移位的

知乎用户 Moro 发表

然后入侵者把这台计算机模拟一台或两台原始计算机,使中心人能够与原始计算机建立活动衔接并答应其读取或篡改传递的信息,可是两个原始计算机用户却认为他们是在相互通讯,因此这种进犯方法并不很简单被发现。所以中心人进犯很早就成为了黑客常用的一种陈旧的进犯手法,而且一直到今日还具有极大的扩展空间。   在网络安全方面 ,MITM 进犯的使用是很广泛的,曾经猖獗一时的 SMB 会话劫持、DNS 诈骗等技术都是典型的 MITM 进犯手法。现在,在黑客技术越来越多的运用于以获取经济利益为目标的情况下时,MITM 进犯成为对网银、网游、网上交易等最有要挟而且最具破坏性的一种进犯方法。   1、信息篡改   当主机 A、和机 B 通讯时,都由主机 C 来为其转发,而 A、B 之间并没有真实意思上的直接通讯,他们之间的信息传递同 C 作为中介来完成,可是 A、B 却不会意识到,而认为它们之间是在直接通讯。这样进犯主机在中心成为了一个转发器,C 能够不仅窃听 A、B 的通讯还能够对信息进行篡改再传给对方,C 便能够将歹意信息传递给 A、B 以到达自己的意图。   2、信息盗取   当 A、B 通讯时,C 不自动去为其转发,仅仅把他们的传输的数据备份,以获取用户网络的活动,包含账户、暗码等灵敏信息,这是被迫进犯也是十分难被发现的。   施行中心人进犯时,进犯者常考虑的方法是 ARP 诈骗或 DNS 诈骗等,将会话两边的通讯流私自改动,而这种改动关于会话两边来说是彻底通明的。以常见的 DNS 诈骗为例,目标将其 DNS 恳求发送到进犯者这儿,然后进犯者假造 DNS 呼应,将正确的 IP 地址替换为其他 IP,之后你就登陆了这个进犯者指定的 IP,而进犯者早就在这个 IP 中组织好了一个假造的网站如某银行网站,然后骗得用户输入他们想得到的信息,如银行账号及暗码等,这能够看作一种网络垂钓进犯的一种方法。重新配置最快, 看说明书

知乎用户 灶堂米香 发表

找个语文课本生物课本什么约定好做解码词典,内有词汇量肯定够用。
然后纸条只写段落,句子,词,字的约定好的索引。
这不就成了。

知乎用户 牛花花​ 发表

简单的想了下,防范传纸条中间人攻击,方法可以非对称加密算法加密信息,或者为每条信息生成特征值,生成特征值算法保密。
加密实在太慢,很难想象妹子和你传纸条,还要忍受加解密的漫长等待!用户体验太差,排除!
所以,不如简单约定一个根据汉字首字母生成特征值的算法来得快。

知乎用户 he landao 发表

不是有精灵语嘛,想那么多

知乎用户 匿名用户 发表

俩人掌握一门冷门小语种,比如清真语,然后,就没人敢惹你们了

知乎用户 「已注销」 发表

使用点对点认证的 https(传的纸条使用密文)
建立骨干网络(可信任同学)
设置 TTL,数据包(纸条)超过一定时间,就自毁(涂些白磷怎么样~)
最后的 TTL 生存时间,也可以考虑采用经过转发设备的数量(同学)

知乎用户 karl Hu 发表

与通讯方约定好一套简单的编码方式,进行信息加密处理。

知乎用户 羽高 发表

要么内容加密, 要么去除中间节点.

知乎用户 快到春天的冬树桑​​ 发表

你 tm 传个纸条还要上天呢

知乎用户 王浩宇 发表

传纸条估计古典密码就够用了吧
要只是怕被中间人秒看懂 用 栅栏密码 凯撒移位 就行
要是怕被老师收到后仔细研究 就用维吉尼亚密码

知乎用户 神楽坂喵 发表

果然还是直接带本 CJK 表然后手算 Base64 吧

知乎用户 窦文飞 发表

让老师帮你传

知乎用户 Uucky 发表

说一个有点跑题的答案。
题主可以培养默契,尝试用哑语 + 口型传递消息,此法绝妙,不可暴力破解,沟通无极限。

我高中和 EX 就是这么做的,不用担心拦截或者消息延迟…… 可惜现在是我单传的独技 (-。-;

知乎用户 Senmart 神马 发表

什么年代了还传纸条?我们班上直接用手机发 QQ

知乎用户 许大木 发表

下课到我办公室来!

知乎用户 jun lee 发表

拆三份发出去

知乎用户 匿名用户 发表

https

知乎用户 匿名用户 发表

作为一个上课写过纸条并且帮别人传过纸条的人,表示没用碰到过中间人攻击这种事,毕竟不偷看篡改别人纸条是大家都自觉遵守的;而且一般要上课来传纸条说的事情都是比较紧急或者重要的,没人无聊到去改动这种东西的。
还有,都是一个班上的人,能传纸条说明关系不错,那字迹怎么可能会认不出来,还有说话的语气。
如果是小情侣之间的对话的话,有什么事完全可以下了课再说吧,要实在有什么话想说的话一般就是直接换座位坐同桌,方便各种秀恩爱。
楼上所提供的各种密码真是不敢恭维,怎么感觉弄得像地下组织接头一样。

知乎用户 小树 发表

其实最简单的方法就是不写小纸条。当然开玩笑的,用扔的。

知乎用户 匿名用户 发表

现代密码学认为,隐秘安全性是不可靠的。设计应该公开透明,而秘密应该被集中在密匙里。
建议使用 RSA 加密。具体实现使用原理可参考《穿越千年的 RSA 算法》

知乎用户 wlgcdancer 发表

这个个人觉得在纸条中加密就可以解决

知乎用户 Sakuya 发表

公钥私钥分开传

知乎用户 沉默大多数 发表

1. 使用密码本,使中间人看不懂你们写了啥?那就无法修改了。
2. 建立专用通道,不经过他人的手或者找到可靠的第三方。
3. 使用签名,使他人无法伪造。
balabala 忘了……╮(╯_╰)╭

知乎用户 Saer 发表

这个很有意思,立马想到很多以往学的知识。
一、先来个阈下信道吧,流程如下,双方事先共享密钥。
1.A 产生无害信息,并在其嵌入自己的签名和阈下信息
2. 通过第三方校验无疑以后,第三方转交给 B
3.B 去掉其无害信息,提取签名并验证,验证通过够,才进一步获取阈下信息

二、添加数字签名
这个数字签名并非真正的指 hash 算法得到数值,而是根据实际情况,在整个信息里面添加一些 “废话”,并且这个废话具有校验功能,以致对方接受时可以利用这个废话来进行信息完整性的验证。

三、自设计协议
我们假定采用 tcpip 协议的性质,只需要在其中将具有完整意义的信息分割成无意义的信息,而且信息有上下文的依赖,一定程度下。中间人就算拿到这手消息,在短时间不一定能解析出意思,保证信息安全持续性。

知乎用户 Hover Dust 发表

中间人的话,我理解的是不想让它知道信息的那些人。

但是呢,传纸条这个事情,就是人来做加解密,决定了计算量不可能太大。
于是,我想出来的就是既然容易被破解,那索性发一个普通的话,比如你们搞得这个啊。

因为发送人对目标人有认知,也就是知道双方可能在哪些地方有共同语言,那就用这个知识,被别人截获了也就是按照普通文本理解。

或者说,这叫黑话??

知乎用户 杨治 发表

不怕老师的话 签名就好了

知乎用户 匿名用户 发表

说个以前用过的方法吧
将文本随机分成多份 分批次传送同时每一批次抵达(收件人示意后)再送下一份

举个例子

你要传这段文字

先写好

然后用刀割成多份

(没剪刀美工刀割坏了几个字只能分两份)
就大致是这样

然后分批传

知乎用户 荏芷​ 发表

鉴于是课堂上传纸条,被中间人攻击,理解为如下情况(如图):

A 将写好的明文转化为密文 m1,想要发给 B。A 和 B 之前很熟,共用一套,密钥。

然而不幸发生了,我们小 H 截获了密文 m1

1. 小 H 智商高,设备好,长期模仿小 A 笔迹,经过长时间分析两人的纸条解出了他们用的密码,解开了密文:

晚上十点在学校西门见面。

小黑心里那个气啊,女神就这样被别人约走了?于是他用这套密码篡改了密文,形成密文 m2:

晚上十点在学校东门见面。

然后发给小 B,晚上十点准时在东门出现。

2. 小 H 智商不高,设备不好,但是也猜出了啥事,他把密文乱改一通,形成密文 m2,然后发给小 B。

解决方法:

  1. 防止小 H 破解出明文:加强自己和小 B 的密钥长度,并定期更改密钥。更改时间根据目前市场上破解效率最高的设备和算法来定;
  2. 当小 H 更改密文时小 B 能够识别:(嗯,但就传纸条来说,一旦小 H 重新模仿了一张纸条,小 B 根本没法确认她所看的纸条是否是期待的纸条啊。求高见,合适采纳)

附:

如何使用密钥加密不再中间人攻击的知识点范围内,恕不做比喻。

知乎用户 匿名用户 发表

题主在上课前,应配一对儿能算 RSA 的计算器 ==

知乎用户 常用网名 发表

丢准一点…

知乎用户 文言 发表

肚里没货,楼上膜拜大神们回答,请允许我抖个机灵。

其实终极的解决方法是,你下课走到你想要传纸条的人旁边,悄悄在 Ta 耳边说你想要传的话就行了。

利益相关:本人在英国,自出国之后还没遭遇过中间人攻击,不存在的网站上的很 6。

知乎用户 小美 发表

用密码!上课前先给对方一本密码,上课开始传!每天一换!

知乎用户 Duke​ 发表

我想想怎么脑补出来一个类似于 VPN 的场景……

知乎用户 新人李 发表

有一种东西叫魔笔。
中性笔明文问题,密文等她收到了拿钢笔涂出来。

知乎用户 匿名用户 发表

当年直接用挂钩和线弄了条传送带,算不算局域网直连 ( ̄▽ ̄)

知乎用户 匿名用户 发表

以我上学时经常帮人传纸条的经验来说,最有效的是用一张稍微大点儿的纸写好对折对折再对折,再用订书机贯穿订好,这样就比较好。

知乎用户 zeus 发表

直接扔啊,当年就是这样传的

知乎用户 THIS 发表

你们约好做个不显眼的标记不就行了?

知乎用户 吃货改变世界 发表

其实很简单,买个密码锁,锁住一个能装纸条的盒子。密码锁的密码是只有两个人知道的。那么攻击者将无法窃听, 伪造盒子内的纸条。至于重放攻击,因为通信方式是轮流一人发一次收一次,且无法物理复制并存储盒子,因此无法重放。好了,中间人攻击就这么解决了。至于密钥的强度,那是另外一个问题。我想一个六位密码锁在课堂上被暴力破解的可能性不大。可以每天晚上睡觉前电话协商新密钥。

知乎用户 一本天文 发表

因为没手机。

知乎用户 匿名用户 发表

看到如此多的高票回答,我高中的确发明了一种上课传纸条专用密码,而且密码本也是随机更换。其实也就是类似于潜伏里面那种密码本,只不过当时是哪节课用哪本书,一时间在班上广为流传,老师好几次发现纸条都以无聊结束。结果,没过一个月,大家就抛弃了,因为翻译太困难了,而且英语课用英语书不太好。

知乎用户 郭宇 发表

加密码,约定偶数位子为真,小学这样玩过

知乎用户 逻辑 发表

因为存在一个可信信道(课间面对面悄悄话),所以密钥交换变得可靠,只要用拼音传输,稍微复杂一点点的对称加密都可以很容易防范中间人,确保 40 分钟内不被破解,例如字母交换矩阵(多个)、有公式解的函数、密码本等等。

知乎用户 何寂寥​ 发表

有点怀念诺基亚时代的袖里乾坤,全触屏盲打做不到啊。

知乎用户 vincent 发表

突然想起读高中的时候班里盛行用便利贴转纸条,下课后妹子们都会把纸条揉一团扔到垃圾桶里(附近)。我们萌萌的班主任就会趁着眼保健操或者午睡前后偷偷拆纸条读内容。当时我坐最后一排,正义感强烈的我认识到这种行为是错误的,就用左手写了几张 “谁看谁傻逼” 扔垃圾桶边上,好像班主任又看了几天就不看了:)

知乎用户 frssegsg 发表

知道古代传达书信时会怎么办嘛?用红色的封泥放在封口处再在泥上盖上专用章,这样如果被打开就会被知道了。

作为一个学生,你可以用对折后用胶棒涂上一道,外人无法轻易打开,作为同学是很少会有偷看小纸条的习惯的,即使想看,看见胶封也会自讨没趣放弃。

即使被打开也能发觉,就像量子通讯,知道被窃取后就会停止接下来的传输,或者换一种路径。

知乎用户 王伟 发表

有才,不过现在手机比纸条好用多了吧

知乎用户 Ran He 发表

挨着坐

知乎用户 蘭萱菀 发表

传小本子,直接从地上滑过去。

知乎用户 火奥口音饶诹 发表

我一般画图。

幸好是画图,一次被老师截取,画图没被认出字迹,不然这题要抄 100 遍。

知乎用户 可乐没气 发表

上 TLS 加密啊

知乎用户 江霖凡 发表

哈哈…

【存在感存在感…】

使暗号啊~(•̀∀•́)

知乎用户 Balluck Wei 发表

好麻烦, 换个座位吃顿饭不就结了.

知乎用户 何大真话 发表

你们忘记罗马人那个加密方案了吗,木棒绕纸条 应该是课堂上最容易实现的方法了 当然 绕纸条的木棒要精心挑选下 不要烂大街的尺寸

知乎用户 说不出的叹息 发表

开启蓝牙
配置蓝牙密码
这样就可以通过蓝牙密码传纸条啦

知乎用户 Joyce 发表

让老师帮你传递

知乎用户 twoVie 发表

把自己的手机蓝牙改名字,然后对方搜,适合群聊以及考试有屏蔽的时候交换答案

知乎用户 初生牛犊 发表

一个很有趣的问题,在我上小学的时候也曾经研究过这一点。

人脑的容量和运算量有限,把一个信息 “手工加密解密” 需要的操作不应该太复杂,因此我们对抗中间人攻击的方法不再是依靠运算量取得优势,而是通过 “以一种中间人无法知晓的方式” 传递消息,用信息差保证加密的可靠性。

对于汉字消息加密,我们可以使用把汉字变成码点,然后直接书写码点,解码人还原成汉字。如何编码汉字呢?在抗战时期的熟练的电报员可以背诵几乎所有常用汉字的编码,但是作为学生的你没有那么多精力,我在这里分享一个把汉字(的读音)编码的好办法。(这里的加密不存在密码,严格来说只是 “混淆”)

每个汉字都有一个读音,如果把读音发送过去也可以让对方快速解码。那么我们可以直接凯撒加密读音序列(数字表示音调),比如明文 “我喜欢你” 编码之后变为“wo3xi3huan1ni3”,凯撒加密一下,“xp3yj3ivbo1oj3”,这个密码对于大多数人来讲就比较难以破译了。甚至更绝的,你可以用依次升位的凯撒密码,等等。注意,你使用的编码越复杂,破译成本也就越高。

还有一种更加有趣的方法,那就是使用数字直接编码汉子读音序列。对于 26 个字母来说,每个字母都有其在字母表中的编号,比如 i=09,a=01,z=26。那么 “我喜欢你” 就可以编码成“231532409308210114114093”。注意每个字母是固定的两位,声调为一位。这种编码易于编码也易于解码,解码的时候可以很方便的辨别出哪些码点是音调,哪些码点是字母,经过简单训练就可以做到快速的编解码。

对于后一种方法,可以有更进一步的加密:把一个数字码点扩展为三个符号码点,每个符号对应 1-9,三个符号之和为一个数字,代表一个字母,另外需要五个特殊符号表示声调。这种编码复杂度和灵活度都已经达到了很高的水平,已经远远超出了课堂传递纸条所要求的标准加密安全等级了。

对于简单的消息,要求最基本的加密,可以使用 “透视书写法”,将消息内容写在纸张的正反两面,每一面的内容仅仅是一部分偏旁部首。阅读的人需要将纸条对光,才能获得完整的信息。

最后和大家玩个小游戏,请解码消息 “453752321648203736293204323430273643521364293736296202742943374”

知乎用户 Sic 酱 发表

猪舍密码,凯撒移位,维吉纳的正方形对称加密

知乎用户 蔴球视频 发表

你刻一个印章,内容为你自己喜欢的东西就行了。

写入信息,然后用你买的印章反复在文字按下,最后折叠时候盖上骑缝章即可。

此方法仅限于防止篡改,其他情况不适用如延迟传送、截胡的情况。

知乎用户 风中劲草​ 发表

无论如何都需要一个认证机构,就是你们同时信任的人,保证他不会出卖你,然后只需要互相知道对方的名字,那么纸条秘密对话就可以实施了

知乎用户 梦见未来 发表

首先, 我们抽出来一张草稿纸

你以为我要传的内容在文字里头? 搞点拙劣的文字游戏?

No No No

首先我们把这张草稿纸做傅里叶变换, 得到频域信息, 然后将我们要说的话也同样做傅里叶变换, 加载在高频域上, 然后逆变换转换为正常的图片, 长这样

好了, 哪位大神能看出里面写了啥? 中间如果被老师看到了, 或者哪位好事者想传播你们见不得人的秘密? 来, 你看看能看出啥, 让老师帮忙递过去都没有问题

当然, 成功收到纸条的妹子只需要反着来一遍, 在约定好的频域上取出纸条的内容, 就可以得到信息

这种传纸条方法, 即使纸条被收走, 不是一般水平也发现不了, 即使纸条破损了, 被踩了一脚, 甚至额外画点啥, 也不影响解密, 并且只有妹子知道频域信息, 安全的 1b

唯一的缺点, 就是得数学好

还有, 就是别当码农, 废头发

知乎用户 张 ben 发表

投胎的时候,选择校长家

或者,长得魁梧一点

知乎用户 周瑜真不是气死的 发表

就是你上课传纸条?放学后来我办公室一趟!

知乎用户 快乐 41 灵​ 发表

上课就上课,传什么纸条啊,哪个学校的,报上名来

知乎用户 匿名用户 发表

以前有个搞笑事件 我们班之前小语种 一部分人学英语 一部分人学法语 一部分人学德语

当时在排练艺术节 要表演节目 有个学英语的男生 a 想要和另一个学英语的女生 b 搭档演男女主角(其实就是想泡那个女生) 但是不敢下课当面说 只好上课写纸条给女生

但是纸条会先传给女生的同桌—一个学法语的男生 c,a 想 不行啊 不能让男生 c 看到 于是就灵机一动 用英语写

“Can you be my partner in the art festival? I write it in English because I don’t want mike to understand it” (你能做我艺术节搭档吗?我用英语写是不想让 mike 知道)

你猜为什么男生 c 的昵称叫 mike… 因为他的全名是 x 迈克 那为什么叫 x 迈克 因为他从小就是美国出生的 在美国读的幼儿园…

再说了 我们是市第一的中学 到高二了 这段话还会有看不懂的? 还是一个美国长大的托福 110 以上的同学 怎么可能看不懂…

那个男生本来根本不感兴趣 看到这个纸条愣住了… 后来回了一条 “sorry I can’t understand English”

不知道传过去的时候男生 a 觉不觉得尴尬哈

知乎用户 勃乱说 发表

假设中间人没有能力伪造字迹可事先做如下约定:

1. 不得涂改,不给中间人删改的机会。

2. 一个字紧挨着一个字,不给中间人往当中插字的机会。

3. 将整则讯息写在一个括号中。不给中间人在首尾进行补充的机会。

知乎用户 匿名用户 发表

我在吃饭,等上菜,胡乱答吧。

可以提前弄个 “密码本”,有几组不同的规则,用手势约定字母漂移量。

然后把加密过的字母写在纸条上,传过去。被 “老师 / 同学” 截获了,也是一组乱码。

再或者直接学哑语手势吧~ 一般人应该不会吧~别说你是聋哑学校。

上菜真慢~

知乎用户 弈駲​ 发表

  1. 用英语通讯
  2. 转译为 ascii 字符集代码。
  3. 此处可以实行对称加密。
  4. 找到一个双射函数,计算结果。可以将每个字符的 ascii 代码计算,中间用空格隔开。
  5. 这样你就得到了一个数组。
  6. 传递数组,进行逆运算,获得 ascii 字符串。凭借人类语义理解大概就可以判断是否有中间人劫持。

知乎用户 vrdams 发表

很简单,用 share secret 作密钥就可以了

知乎用户 alis 发表

假如你是消息发送者,使用你的 rsa 私钥签名消息,和原消息一起发送。消息接收者用你的公钥验证签名。这样就能确保你发送的消息的准确性和不可否认性。如果要加密消息,就在签名前用消息接受者的公钥加密消息。

知乎用户 Izumi 发表

如果双方没有共同信任的 CA 那只能靠事先交换信息了,总之就是走 SSL 那套。

知乎用户 窦你玩 发表

别让老师发现就行啊

知乎用户 白羽衣紬 发表

这就要用到一个反人类的黑科技了

来一起猜猜这是什么

_

_

_

这是纸团吧

不对喔,这个是子弹,‘气枪’的子弹

靠这玩意把纸团吹出去,人力吹,灵感来源于古代武器‘吹箭’

纸团 / 子弹的直径是精心设计过的,和枪管内径差不多,能保证吹气效率最高

靠‘吐气’在短时间内爆发强大的口气 (ಡωಡ)

如果卯足了劲这玩意能吹 20 米远,而且精度可靠,可以算是超远距离传纸条了

别说教室里传,就算传到对面一栋教学楼都不成问题

你甚至可以在纸团上绑点奇怪的东西

别!对!着!人!吹!

它的杀伤力还是有点强的,近距离打肿打红是肯定的,5 米内穿透 2 层 A4 纸也没问题

说了这么多也不现实,上课总不可能扛着 120 厘米长枪去吧

没错我就是想炫耀一下 hhh

说正经的,简单点,用吸管或者笔筒把纸条吹出去就行了

距离和速度达到了,可以算是双赢

不过这种方法有个很要命的缺点

就是声音特别大

理论上来说吸管越长,声音越小(大家可以试一试,短吸管声音尖,长吸管基本上没声音,我的气枪 130 厘米长吸管,空吹几乎没有声音)

但是纸团冲出吸管口的时候,那种迸发出的声音能久久回荡在教室

上晚自习的时候可以用,但这就不叫传纸条了

这叫现代战争

支持多人游戏喔 (ಡωಡ)

靠橡皮筋弹的方法容易误伤无辜,这里不谈

好多方法其他答主都说过了,似乎也没什么新鲜方法

你可以试着以‘借笔’,‘借书’为理由把字写在里面,再让同学传过去

如果中间人早知道你们要传纸条,就光明正大给他吧,不过可能要换一种方式记录文字了

不用我多说,自己看

中间的是摩斯码,右边的是银河通用文字

你可以用拼音,英文,甚至日语罗马文注音的方式把这些奇怪的字符写上去

其他人也很难看懂吧

或者把纸剪成栅栏式,两张拼在一起,再写

查理九世的解密卡见过吧,就是那个原理,不放图了

到时候把两张纸分开传就是了,上一个答主说过了

似乎就这么多方法…

写这么多发现跑题了哈哈

如果我被折叠了,也无所谓,就没人发现这些秘密的文字了 (ಡωಡ)

知乎用户 生物危险 发表

你直接加密得了,对称加密,分公钥和私钥,解密加密出来已经下课了

知乎用户 风卷云开 发表

简单明了容易实现的话:

和对方约定一个随机数表,传纸条时附加一段数字。

加密的话就…… 提前约定特定语句的内容好了,直接发暗号

知乎用户 FhtMj​ 发表

异或加密,两份分别从两个信道传输

知乎用户 dawnbreaker 发表

我做过那个中间人哈哈哈!

高中自习课的时候恶作剧,冒充一个男生 R 写纸条给女生 L,说晚上要请她吃饭。那个女生 L 欣然答应,在纸条上回复之后,把纸条发给男生 R。纸条会在半路被我拦截下来。我会继续冒充男生 R 与女生闲聊。

反复几次对话后,话题越扯越远,纸条快要写满了。我觉得时机成熟了,就送了女生一张空白的纸。然后销毁了那张旧纸条。此后不再拦截,真正的男生 R 和女生 L 用纸条继续闲聊。

后来听到这两个人吵了起来。女生说:“你不是要请我吃饭吗?” 男生说:“谁说要请你吃饭了?!”

知乎用户 Secret 发表

很简单可以使用对称加密来进行传纸条。

双方先制定好公钥私钥,使用拼音交流,把拼音单词与字母表顺序一一对应,a 代表 1,b 代表 2。。。拼音都转换成数字。

这样再用自己的私钥加密把密文传过去,中间人就算知道公钥也无法在有生之年破解。

但是对方只需要加上自己的私钥就可以直接解密。

这样只要保证你个对方都不泄露是很安全的不会被中间人攻击。

或者还可以直接把汉字转换成字典的页数+行列

知乎用户 阿月浑子 发表

别问,问就是多转几个中间人

知乎用户 King Bom 发表

直接越过中间人扔过去不就行了

知乎用户 寡人要杨妃 发表

没有中间人自然不存在攻击。把草稿纸卷成口径大概 1cm 的吹管,把纸团吹出去,直达目标。我自习课试过,射程远,可以从教室前面吹到后面,精准度极高,而且纸团在空中时间短,不容易被看见。

缺点:若吹得太用力,纸团 “出膛” 时会发出 “嘭” 的一声

知乎用户 A2LIE 发表

我们当年 是有一套密码,用汉语拼音,不过字母都是变形了的只有我们自己才认识,加上一些辅助符合谈情说爱荤段子 顺便穿 老师收了也没事看不懂啊看不懂。

知乎用户 专撩范大大 发表

直接和他周围人换座

知乎用户 叶晓阳 发表

只写汉字拼音的第一个字母,初中时候这样做过,解码成功率挺高的。 例如:FXHCSM?(放学后吃什么?)

知乎用户 dustbin1415 发表

更换协议,使用手机

知乎用户 匿名用户 发表

1、一方创建蓝牙。
2、连接蓝牙(需要知道双方手机蓝牙名)。
3、确保双方手机有 document to go 完整版(上网下)。
4、使用蓝牙传送 doc 文档,记得哦,每次在这个文档上回复就行了。

知乎用户 一只小 xx 发表

建议使用摩斯密码

知乎用户 匿名用户 发表

方法有很多
1、减少经手人,直接扔,一对一。
2、加密,别人看了也不知道。
3、能不能识别并 kill 掉其他有可能攻击的同学?交给信任的人?杀毒~

知乎用户 苏晓 发表

自制密钥 密电往来

知乎用户 朕乃明帝 发表

直接 p2p

知乎用户 威威威不是喂喂喂​ 发表

建议二进制交流,回家路上商议密钥本(随机二进制比特串),课堂上直接一次一密传输,进行异或加密 – 这可是完美安全。

知乎用户 匿名用户 发表

这个问题在于签名而不是加密

知乎用户 星火燎原 发表

去掉中间人,与主直接对决(划掉)直接把信息传给目标

可以直接把纸团扔过去、采用密码手势通信等方式

知乎用户 未知的 发表

如果能解决中继器罢工问题。其他都好说。

只保证数据不被篡改,加个 md5 就行。

还要保证数据隐秘性,看看各种加密算法就成,多数都能达到你的要求。

只要你能有手算 md5 和 rsa 的能力(其实是可以手算的,不至于超过人类能力极限)

知乎用户 啊布里斯托死塔 发表

我首先排除加密,因为加解密算法太麻烦了

对称秘钥不安全 (容易被别人研究出来,还得算)

公钥算法没可信机构存公钥 (总不能让班主任给公钥吧?)

通过哈希判断完整性实现不了 (缠几圈胶带纸)

主要还是太难算了,用笔解密得好久才能通信

所以我建议搞区块链去中心化

和小伙伴们一人准备一个小本本,你们每次传纸条都给所有人传,然后每个人都把内容记录在小本本上,下课核对看看中间有没有被人篡改

知乎用户 清风拂柳 发表

卷起来!

知乎用户 左公民 发表

方法一

明文加签,加密选择提可以搞转换表

方法 2

设计一种折纸条方式,保证二次打包后容易被发现

方法三

使用双方约定的颜色笔

知乎用户 匿名用户 发表

哈哈,这个有意思。可以尝试着对你纸条的内容加密,诸如键盘密码,培根密码,摩斯密码,猪圈密码这样类似的密码。双手备一个密码本,就跟当时的间谍一样。哈哈

知乎用户 任我行 发表

这个问题的黑客标签是怎么加上去的?

知乎用户 匿名用户 发表

初中的时候每天晚上夜自修最大的欢乐就是传纸条了,一般是揉成团在空中抛,但我们发明了另一种方法,大大提高了命中率。
那就是在纸条里包一块方形磁铁,向目标所在的金属课桌发射,可以准确的到达桌子侧面的铁板上。

知乎用户 五角 发表

进行 Base64 加密…(你们在传些什么东西←_←)

知乎用户 张春华 发表

dh 协议交换一下密钥…

知乎用户 哆啦梅度三世 发表

背《切韵》声韵

(我错了,这玩意有几个能背下来啊,还是老老实实用注音符号吧

知乎用户 0xff 发表

双方确定好一个对应的密码。

然后约定前多少位是它的 hash 值。(hash 计算方法可以易于手算)

然后用某种适合手算的方式加密信息直接传。

中间人由于没有密码,所以看不懂信息,也无法加密新的信息传给接受者进行 MITM。

接收者可以用 hash 值校验密码是否正确。

(虽然这种方法从密码学上看应该是**不堪一击**的,但是日常传纸条足够了)

(一个大问题是中间人篡改 hash 值,使得无法确认信息是否正确,或者中间人直接选择丢包…)

仅供娱乐。

知乎用户 王少明 发表

用当前上课用的课本当密码本。
然后发送的内容是 54 56 32 89 65 。。。。。。。。拿到以后去解吧。

知乎用户 王卡里 发表

其实这一个简单的问题就牵扯了密码学的几个最经典需求:
1 机密性:只想让发收两方知道,约 p 的时间地点保密
2 完整性:要求信息完整可靠的传递没有错误,
3 认证性:确保信息是发方过来的,他不能抵赖
4 新鲜性:不是陈芝麻烂谷子的事情,或者别人复制以前的条子

知乎用户 杨正宇很蠢 发表

让老师帮你传

知乎用户 小胖 KKang 发表

首先,防范中间人攻击的本质不是加密, 而是要防范篡改。其次,传纸条其实已经包含了至少一种以上的 “防范中间人攻击” 的 “加密方式”。

首先是 “笔迹”, 和计算机传输不同的是, 笔迹是与个人手书习惯有关的一种几何特征。, 正是笔迹具有的特征,使签名可以作为有效法律依据。
其次 “传输时间和超时丢包”—– 如果你过长时间对纸条持有, 会引起发送和接受方的不满, 就像各类协议在过长时间没有收到确认返回的包后, 会进行丢包处理. 而上课传纸条一般是在视野范围内进行传递, 所以返回确认包的速度是 “光速”.
还有一点, 就是选择可信的管道 — 比如管道是可信任的人, 也是增加安全的一种方式.

知乎用户 李冰 发表

密码吧,Caesar cipher 就行,用不着 RSA,累死你

知乎用户 斯兔基 发表

26 个字母和 0 到 9 用两位数字乱序表示,然后用英语写

知乎用户 dodo 发表

这个嘛,小时候写日记设计过一套加密方法。
把 26 个字母排序,分别用数字代替(阿拉伯数字) 声调用罗马数字表示,拿一个固定版本的字典或者词典当作基准。根据前面的拼音找到字典中对应的字,然后按顺序排列,用汉字一二三四表示顺序,这样就可以确定一个字。

比如 “啊” 字。表示出来应该是 1Ⅲ3。(新华字典 2004 版)

知乎用户 匿名用户 发表

装到糖纸里,或者橡皮里面,总之伪装的不像纸条,比如你要传的人坐在第一排,你在第五排,就若无其事的拍拍前桌的肩膀,把东西给他,说,往前传,传到第一排,这样一来谁也不知道是谁传过来的了,亲测。

知乎用户 QQQQ 发表

你们是没用过密码本么 反正我初中时候很流行 就是上密码的日记本
最后一本很有纪念意义

知乎用户 老魏 发表

以前读书时办法: 比较重要或不方便让人知道内容的纸条,折好用订书机订好再请别人传。不怎么重要的内容比如吃什么之类的直接揉成团了扔。

知乎用户 包子强行 发表

直接拿张大纸条来回传…
纸条传回来的时候,可以直接看到自己上一次所写的内容,中间人要是搞鬼的话一下子不就看出来了嘛→_→

知乎用户 About 艾青 发表

关系好就不用担心。。。

知乎用户 滚滚滚滚君 发表

一楼的必定骗人啦,二楼说得倒不错,但是用 HASH 的话,就失去了 DH 的一大优势,也就是双方不必 KEEP 着密钥,可随机生成揭露量再交换。 能够考虑找可信任的第三方做个证书,前提要信得过,且有他的公钥你来错地方了,就算我知道,也不告诉你,忘了,刚刚我才攻击了一个路由,4 分钟就死机了,谁叫他路由难 PIN. 应该不是你。不要骂我,我有光纤,PJ 仅仅我的业余爱好,我想再 PJ3 条光纤,叠加个 100M,看看是什么感觉。假如你不是光纤,你就让他蹭一下嘛,他觉得网速慢了,天然就不会要你的网了。假如你是 10M 以上的光纤,让他用一下嘛,横竖你也用不完,浪费了。 查看原帖 »

知乎用户 路灯瓜 发表

不传写字的纸条,传下边有痕迹的那一张,中间人要想看只能拿起来对光 (会被老师发现批一顿),收件人用铅笔在纸上扫一扫就能看出写的什么。当然这也不怎么安全,只是在大信息量下加大了中间人攻击了难度,实际上我们还是比较相信中间人的,毕竟本身也要作为对方的节点,一损俱损,这种社会化网络认证还是有一定可靠性的。

知乎用户 Miles​ 发表

如果是英文环境的话是否可以考虑使用凯撒移位来对内容进行加密。。。?

比如事先约定好是向后 3 位,那么比如这样:

原句:The answer of No. Three is A

加密后:Wkh dqvzhu ri Qr. Wkuhh lv d

那么这样是否就可以避免了呢….?

知乎用户 图理深 发表

很多原始的加密方式都可以。除了

@Ivony

说的外,还有以下的:
1、藏头诗或句子。先把要写的话写在每行开头或特定格。然后把其他文字补上,是否通顺无关系。
2、埃及密码。准备一张窄字条,足够长,宽仅一字。把字条绕在木棒上,然后横着把文字写上,写好后字条与木棒分开传递。收到字条的人必须绕在同样的木棒上才能看到原来的文字顺序。
3、索引密码,或叫一字性密码。把要写的文字,在某本书中找到对应位置。如 “我” 字在书中第三页,第 5 行,第 6 字。就对应写成 3,5,6. 如此类推。字条送到后,再告知对方要通过哪本书中解密。

第一种方法效果最差,基本有经验的人留心点就能发现。
第二种如果对方用了穷举法,又或者文字不多情况下也是会破解的。当然拉丁字母比汉字的解密难度高很多。
第三种最强,不亚于世上任何一种加密算法。除非是当事人泄露,否则无解。

知乎用户 bo yan​ 发表

当年传纸条的时候的亲身经历,最后改为高抛型,算好老师转身的时间,抛物线距离和高度,完美到达目的地。不易用低抛,使劲过大容易造成响动。

知乎用户 Damook 单身一直爽 发表

【水印】每个月 1 号 15 号晚上 7 点在马鞍山东站本侧公交站几秒钟如果活着的话一定要坚持下去如果东站迁移了就每年 3 月 5 月 7 月 10 月第一个安息日早上 8 点半 9 点在采石矶唯一入口下午 3 点半四点在采石矶唯一出口 4 月 6 月 8 月 12 月 1 月 2 月第一个主日晚上 8 点在市图书馆唯一正门口路过几秒钟 打算 202 * 以后开始 现在还没太严重 被精神病还能走出去已经很不错了 我这忒惨估计走出去很难

以下正文:

我懂 但我不明白这种行为存在的意义

你这么问的话 下课说呗 传什么纸条 你传纸条扰乱课堂纪律自以为牛逼 但不知道无公害沟通更牛逼

紧急的话请个假出去就是了 传什么纸条 这什么魔鬼逻辑

知乎用户 每天要上几把知乎 发表

点对点传输:跳过中间人,直接丢纸条。

固定 key 的加密解密:丢纸条的和收纸条的人约定好加密解密的方法和固定解密的 key。

变化 key 的加密解密:丢纸条的和收纸条的人约定好加密解密的方法并采用某种特殊的变化规则作为解密的 key,比如数学课时的 key 为 10,语文课时的 key 就改为 11。

不能解密的密码对照表:双方事先掌握一套密码对照表,纸条上的文字无法被解密,收纸条的人拿到纸条后根据对照表来翻译出正确的明文。

寻找可信的中间人:寻找关系较好的中间人,或以威逼利诱、抓住把柄等方式寻找可信的中间人来传递纸条。

知乎用户 少侠疼不 发表

没手机吗?

知乎用户 ample 发表

中心人进犯(Man-in-the-Middle Attack,简称 “MITM 进犯”)是一种“直接” 的入侵进犯, 这种进犯形式是经过各种技能手法将受入侵者控制的一台计算机虚拟放置在网络衔接中的两台通讯计算机之间,这台计算机就称为 “中心人”。然后入侵者把这台计算机模仿一台或两台原始计算机,使“中心人” 能够与原始计算机树立活动衔接并答应其读取或篡改传递的信息,可是两个原始计算机用户却认为他们是在相互通讯,因此这种进犯办法并不很容易被发现。所以中心人进犯很早就成为了黑客常用的一种陈旧的进犯手法,而且一直到今天还具有极大的扩展空间。   在网络安全方面 ,MITM 进犯的运用是很广泛的,从前猖獗一时的 SMB 会话绑架、DNS 诈骗等技能都是典型的 MITM 进犯手法。现在,在黑客技能越来越多的运用于以获取经济利益为方针的情况下时,MITM 进犯成为对网银、网游、网上交易等最有要挟而且最具破坏性的一种进犯办法。     1、信息篡改   当主机 A、和机 B 通讯时,都由主机 C 来为其“转发”,如图一,而 A、B 之间并没有真实意思上的直接通讯,他们之间的信息传递同 C 作为中介来完结,可是 A、B 却不会意识到,而认为它们之间是在直接通讯。这样进犯主机在中心成为了一个转发器,C 能够不只偷听 A、B 的通讯还能够对信息进行篡改再传给对方,C 便能够将歹意信息传递给 A、B 以到达自己的意图。   2、信息窃取   当 A、B 通讯时,C 不自动去为其“转发”,仅仅把他们的传输的数据备份,以获取用户网络的活动,包括账户、暗码等灵敏信息,这是被迫进犯也是十分难被发现的。   施行中心人进犯时,进犯者常考虑的办法是 ARP 诈骗或 DNS 诈骗等,将会话两边的通讯流私自改动,而这种改动关于会话两边来说是彻底通明的。以常见的 DNS 诈骗为例,方针将其 DNS 恳求发送到进犯者这儿,然后进犯者假造 DNS 响应,将正确的 IP 地址替换为其他 IP,之后你就登陆了这个进犯者指定的 IP,而进犯者早就在这个 IP 中组织好了一个假造的网站如某银行网站,然后骗得用户输入他们想得到的信息,如银行账号及暗码等,这能够看作一种网络垂钓进犯的一种办法。关于个人用户来说,要防备 DNS 绑架应该注意不点击不明的衔接、不去来历不明的网站、不要在小网站进行网上交易,最重要的一点是记清你想去网站的域名,当然,你还能够把你常去的一些涉及到秘要信息提交的网站的 IP 地址记下来,需求时直接输入 IP 地址登录。    防备 MITM 进犯,咱们能够将一些秘要信息进行加密后再传输,这样即便被 “中心人” 截取也难以破解,别的,有一些认证办法能够检测到 MITM 进犯。比方设备或 IP 反常检测:假如用户曾经从未运用某个设备或 IP 拜访体系,则体系会采纳办法。还有设备或 IP 频率检测:假如单一的设备或 IP 一起拜访很多的用户帐号,体系也会采纳办法。更有用防备 MITM 进犯的办法是进行带外认证,具体进程是:体系进行实时的自动电话回叫,将二次 PIN 码发送至 SMS(短信网关),短信网关再转发给用户,用户收到后,再将二次 PIN 码发送到短信网关,以承认是否是真的用户。带外认证供给了多种不同的认证办法及认证途径,它的优点是:一切的认证进程都不会被 MITM 进犯者接触到。例如 MITM 是经过中心的假网站来截获灵敏信息的,相关的 “带外认证” 就是指经过电话认证或短信认证等办法承认用户的真实性,而 MITM 进犯者却不能得到任何信息。当然,这种办法费事些。重新配置最快, 看说明书

知乎用户 EESpencer 发表

用一种其他人看不懂的语言来写 + 加密。班上有一半人学小语种,然后,小语种的很团结且讨厌英语班的人,如果要传纸条的话他们就用移位转换 + 混在一起的德 / 法 / 西语来写,最后搞得英语班一些人只要收到了纸条直接就扔了。

知乎用户 忍者 发表

上课传纸条这是个贱毛病。。。。。。。

最简单好用的 VPS,没有之一,注册立得 100 美金
comments powered by Disqus

See Also

量子通信卫星解决的安全问题没有想象的大

量子通信卫星解决的安全问题没有想象的大 作者:米粒之猪 刚刚发射的“墨子号”量子通信卫星,使命主要有三项:进行星地量子保密通信实验、星地双向量子纠缠分发实验和地星量子隐形传态试验。赛先生8月16日刊载的,由中科院量子信息与量子科技前沿卓越创 …

夜空为什么是黑暗的

Dreaming as the summers die Eager eye and willing ear to guide No thought of me shall find a place Golden afternoon we …

语言密码

本科上数论课,讲到密码学,具体数学细节都忘了,只记得老师讲过一个核心机制,就是找到一种正过程与逆过程完全不对等的运算。例如我们最早学习的加法与减法,在运算性质上几乎是同质的,而幂与开方,难度就不那么对称了。 当然,这样的难度差距来建立高级密 …

2000 名微博监督员:工作内容是什么?有哪些奖励?

8 月 26 日,新浪微博监督员 @Shine 季浩洋(下称「季浩洋」)发文指,一位声称母亲因接种北京生物疫苗而去世的网友 @tomo 酱酱 涉嫌捏造故事、博取同情以进行非法诈骗,散播疫苗问题对国家造成了不利影响,对其微博进行封号,其本人也 …

如何评价沈志华?

知乎用户 月影君​ 发表 很厉害的人。档案狂人,治学严谨。 在看了他《中苏同盟条约》《中苏同盟破裂的原因》《朝鲜战争》三场讲座以及其他的几场讲座之后,趁着双十一一口气买了三本书: 《一个大国的崛起与崩溃:苏联历史专题研 …