前端
小西-TSL之父

1. 起因

小西小美是情侣,一起住海边。现在小西要去远方普罗旺斯
这样不能面对面交流了,他们打算飞鸽传书来通讯
假设张三是小美前男友,并且想知道小西小美他们聊些什么,看看能不能从中破坏些什么让他们吵架分手
小西小美分别前打算商量好之后如何通讯

  • 计算机网络本身是不安全的,通讯很容易被窃听,被篡改。就像飞鸽被他人捕获或者替换了一样

2.  唯一的开锁钥匙

小西想了个办法: 到了普罗旺斯之后,他将制造一个能上锁的箱子,而钥匙就由他独自设计且只有一把,想要通讯的时候,他就把箱子让鸽子带到海边的小美。这样即便张三截获鸽子,拿到开着的箱子,也不知道有啥用。他跟小美说:你到时候就把想对我说的话放箱子里锁上,发给我就行了。这样张三截获了鸽子,也只能对着上了锁的箱子干瞪眼,小美说好

  • 话放入锁箱就等于给信息加密,中途截取也不能被识别:信息具有机密性。
    小西想的办法对应着非对称加密,唯一的开箱钥匙 = 私钥 ; 公开的锁箱 = 公钥:
    对话被放入锁箱 = 使用公钥对信息加密
    锁箱被钥匙解开 = 使用私钥对信息解密

3.   两边都有各自的开锁钥匙

小西出发了,一天夜里,小美收到了一个能上锁的箱子,小美就把想说的话放里头了:小西你的过年红包都放哪儿了?我找不到了。 把箱子锁上后,让飞鸽带走了。小西收到了箱子,用自己的钥匙打开了箱子,收到了消息,原来小美想找红包,应该是缺钱了。小西想回复她红包都在柜子里,这时恍然大悟,完了,小西只顾着让小美发消息,自己在普罗旺斯却只能飞鸽传书给小美,那万一被张三截获鸽子了,岂不是被别人知道了家底? 那不行, 小西决定回海边一趟,一是跟小美当面找红包,而是商量着之后如何能安全的双向通讯

小西回到了海边,跟小美商量着,能不能教小美也制造锁箱,这样的话小美想发小西的话,也可以找个飞鸽发个箱子到普罗旺斯,一是可以主动发消息了,二是保证了张三看不到想发的消息。小美说好,小美很聪明,也学会了制作办法。于是小西出发了,他们按原计划保持着通讯

小美给小西发了空箱子,小西收到了小美的空箱子,正好也有话想跟小美说,于是把话放小美空箱子里锁上发出了:我下周三回家,记得接我。接着用自己的空箱子发给了小美,飞鸽来了把两个子箱子绑上起飞。小美收到后,把自己的箱子用自己设计的钥匙解开,看到小西下周三要回来,很是开心。接着把想要说的话放小西空箱子里锁上发出了: 知道了,我给你买了芒果,有空回来吃哦

  • 双不对称加密保证来回的消息都有机密性:
    小美想对话放小西制造的锁箱里 = 小美得到公钥,加密发出,小西用私钥解密
    小西想对话放小美制造的锁箱里 = 小西得到公钥,加密发出,小美用私钥解密

4. 中间人攻击

日子就这么开开心心的过了,直到有一天,他们发现他们遇到了中间人攻击
小西从普罗旺斯回到了海边,问小美买龙眼了吗,小美疑惑的问,你让我买龙眼了吗?
小西说: 对啊,我收到你的箱子,发了消息说让你买龙眼呢
小美却说: 我收到了我的箱子,但是我解开看到的是你问你写给我的情书放哪里了,你忘记找不到让我帮找找啊
两人都用惊恐的眼神看着对方
什么?你确定吗? 小西回忆了当时小美发的话问: 你昨天下午说你下周想喝红糖水,让我回去给你煮
小美惊呆了! 连口否认说: 我没有说我要喝红糖水啊!我说我找到你的情书了, 放窗头柜里。
这下小西悟了,原来是有人模仿了小西在跟小美对话,在小西这也是有个‘中间人’模仿着小美给小西对话,这里面有一个关键的地方: 中间人也学会了制作锁箱
小西复盘了中间人的操作:
先截获小西和小美的空箱子,替换成自己制作的两个空箱子,把想套的信息发出比如: ‘我’的情书放哪儿了?  再用自己钥匙解开小美锁上的箱子: 放床头柜里。 接着另一方的模拟通讯:给小西发‘我要喝红糖水’...

  • 中间人攻击:攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制 = 中间人既冒充了小西,也冒充了小美
  1. 中间人事先制造了一份假小美锁箱和对应钥匙,准备好假消息【我的情书放哪了】 = 中间人制造了假私钥和假公钥以及假消息
  2. 小美想让小西发话,发出锁箱,中间人截获真锁箱,用假小美锁箱发出 = 小美发公钥,中间人捕获真公钥,替换并发出假公钥
  3. 小西把【买龙眼】放假小美锁箱发出,中间人截获,用假小美钥匙打开锁箱,把【我的情书放哪啦】,放真锁箱发出,小美以为小西想找情书 = 小西用假公钥上锁发出,中间人捕获,替换消息用真公钥发出,小美用私钥解锁获得以为是真的假消息
  • 反过来通讯同理

5.  签名

小西小美觉得家里已经不安全了,任何地方都给这个张三摸透了,所以他们决定搬家到内陆。
到了内陆,小西还是得去普罗旺斯出差。于是还得设计如何才能更安全的通讯
他缓缓分析:
现在这个中间人张三已经会模拟箱子了,我们还能用锁箱来沟通吗?
小西很聪明: 既然张三会模拟箱子,那我不给他机会来模拟不就行了吗? 我直接在箱子做一个独一无二的标记,能不能我自己来刻【小西】二字呢? 小美就反问了:那张三不是也可以在自己箱子刻【小西】二字?
这时小西想到了在警察局的好兄弟: 阿城
阿城听完小西的担忧,提出了一个最简单的办法: 签名
只要小西拿着他那独特的箱子去做警察局的官方认定,在箱子上用特殊的墨水印上警察局才有的公章印记,就能表示这个箱子就是小西的,除此之外阿城还给了小西一个特殊的放大镜,有且只有这个放大镜能认出在箱子上的印记。这样就完美的解决了小西的问题: 既标识了小西的箱子一定属于小西,也能用放大镜证明箱子一定属于小西。小西觉得这应该就万无一失了

  • 通过第三方权威机构(CA)实现身份认证: 警察局给锁箱盖公章
    阿城也运用了非对称加密的另一大作用:私钥‘加密’,公钥‘解密’
    私钥用于签名(也可叫加密),公钥用于验证(也可叫解密) =  警察局公章即是私钥,特殊放大镜即是公钥
    阿城用CA私钥给小西公钥签名,只有CA公钥能验证这种签名:阿城用警察局公章给锁箱做印记,有且只有特殊放大镜能认得出来这是小西去警察局做过印记

可以看出这两套公私钥都有一个关键前提: 私钥是唯一的且自己保留不公开(小西钥匙,警察局公章)


6.  完整了吗?加个摘要

小西小美高高兴兴的拎着箱子从警察局回来了。
这波认证让他们都踏实了。
一周又过去了,小西又去普罗旺斯出差了。这次他把警察局的放大镜放在内陆的新家,以方便验证箱子。
过了一天,小美收到了个空箱子,她先用警察局的放大镜去验证真伪,一验发现根本看不到墨水和印记,这说明是假货。这根本不是小西的箱子。于是她把箱子扔出了小区垃圾桶。小美自信的回头: 我就知道这不是小西的箱子,这才过去一天,他才没有那么想我,小美得意的回家了。
又过了一天,小美收到了个空箱子,这次用放大镜验出是可以看到墨水和印记的,ok确认无误了,小美便马上附上今日甜蜜的问候:怎么样小傻瓜,才两天就想我啦? 写完就锁上了箱子发出了

小西收到了锁箱后很高兴,立马解锁拆出看看小美说了什么,除了有一张纸写着【怎么样小傻瓜,才两天就想我啦?】以外,小西发现里面还有一张酒店黄色小卡片,上面还写着联系电话。这是怎么回事呢?小西没有理会,但应该还是过程除了点问题,等着下周回去当面问问
周五回家后,两人进行了复盘,小美表示卡片不是她放的,锁的过程也没有看到,这是怎么回事呢?
这到底是小西发空箱子的时候被别人截获,贴在内壁了?还是小美锁之前被人提前放进空箱子了?还是锁箱在运输的过程中被别人锯开小缝往里塞了小卡片再补上?
小美说: 会不会真的是我们不小心弄进去的?那能不能我们约定好只往箱子里放信纸,别的都不发,如果拆开看有别的东西,那那些东西都弃掉好了
小西分析: 这次是多了一张小卡片,那下次有没有可能是少了一张纸,或者换了一张纸呢?既然过程中小美无法保证哪些是小美要发的东西,那完全有可能是信纸都会被替换啊
小西打算重新设计通讯了,他想到了一个保证信纸完整性的好办法,他告诉小美:  下次你先把想说的话写在信纸上,然后就把想说的话的前三个字和中间三个字和尾巴三个字的拼音首字母连起来凑成一个摘要,比如【怎么样小傻瓜,才两天就想我啦?】的摘要就是【zmycltxwl】。然后写在信纸的最下方
这样我收到之后也同样对你的全文做个摘要,如果我的摘要跟你写在文下的摘要是一致的,那就说明信纸是完整的,没有篡改过
小美直呼小西你好棒啊! 好的下次我就写上这9个字母发你

  • 通过摘要算法实现完整性明文+摘要算法=摘要: 【怎么样小傻瓜,才两天就想我啦?】+ 【前三个字和中间三个字和尾巴三个字的拼音首字母连起来】 = 【zmycltxwl】在计算机的实现中,摘要是不可逆的,不能通过摘要推倒出明文 = 通过【zmycltxwl】无法猜测原文小西既拿到明文,也拿到摘要,此时对明文再做摘要,摘要相同说明信息完整
  • 其实阿城也是用摘要来给小西锁箱做印记的,如原文:小西的锁箱,摘要:xdx(分别为‘小’‘的’‘箱’拼音首字母)
  • 放大镜实际上就是小美观察到了xdx,xdx能代表就是小西的锁箱吗?还不够: 如果小美和小西提前协商好摘要算法就是【首中尾的首字母】,那么小美还得再对原文【小西的锁箱】做一次摘要,然后和xdx对比,才能知道眼前这个箱子真的是小西的锁箱。 这才算完整性校验

7.  改进

小西认为自己的设计是接近完美的
之后的几个月时间里,小西小美按照他们的设计安全的进行通讯,再没出现过小卡片了。
过年了,小西和小美回到了老家。小西也想跟父母平时也能飞鸽聊聊天,于是顺理成章的把制造锁箱的办法给父母说,小西想教会父母制作方式。但是父母年纪大了,想要学起这么复杂的箱子很困难了。小西看着父母,陷入了沉思。
原来小西设计的锁箱非常复杂,虽然普通人很难破解箱子,但实际用起来加解锁都比较耗时
其实小美每次开锁也是异常的困难,只是为了能通讯,一直在困难的解开一次次的通讯
小西想做一些改进了。有没有什么办法是简单好用的呢?
小西想从父母出发, 父母虽然年纪大了,但一直记得一些很重要的东西,比如小西的生日,比如他们的结婚纪念日。小西就想,能不能做一个密码锁,密码就是父母一些熟知的其他人不知道的数字,而且上锁,解锁都是这个密码,这样就足够简单了!
于是小西很快又设计了一种密码箱子,密码就是小西的生日+父母纪念日: 819520
这样再也不用复杂的锁箱了,只要父母想写信给小西,直接把话放密码箱里头,然后锁上发出,如果小西收到箱子用同样的密码能解锁,那说明就是父母寄来的
于是收假回到内陆后,小西就用这个密码锁箱跟父母进行着沟通
同样的跟小美也改用了这种密码锁箱的形式

  • 对称加密解决效率问题
    非对称加解密非常的耗时,对称加密更快: 小西设计的钥匙锁箱非常复杂
    对称加密:既能用同一个密钥加密,也能用同一个密钥解密: 密码箱子用这六位数字既能上锁,也能解锁
    双方都要保证密钥不泄露: 小西口头告知父母六位数字,其他人不可知

8.  能对所有人都用这种方式吗?

小西在东边有个好朋友叫小东,有一天来信说他准备结婚了,问小西能去参加他的婚礼吗?
小西想到了之前的经历,这种明文的飞鸽传书,会不会已经被别人截获篡改过了?会不会就有人想卖我猪仔?骗我去当地拐卖?
小西不能相信,于是想发回去试探一下: 好啊,还记得小时候读书那个澡堂里发生的事嘛? 记得的话就用这个时间当密码锁上箱子发给我
小西设计了【cuozao】这个密码,并把箱子回传给小东,不料等了一周了,已经没有回信了
原来真的是被篡改了的传书,因为对方不是真正的小东,不会知道小东帮小西搓过澡这件事。
小西这才意识到,现实中的飞鸽传书是有多不安全,他想设计一款能让全部朋友都能安全跟他通讯的办法
密码锁是个很好的办法,但因为不可能全部都去到东南北方向朋友的家里,小西是不能跟所有的朋友们商量用哪个密码的,何况朋友这么多,密码多了,小西也很难记住所有的密码。
他想设计一种临时生成的密码,这样就不用记住了。也就是说 他想跟远方的朋友每次通讯的时候,再一起协商这个密码,并且这个密码在双方确认不聊了之后就作废

  • 通过协商保证此次会话是临时性,随机性: 把密码交给每次沟通前,而不是每个人都记住固定值
    既保证他人无法复用,对通讯双方也省事儿了

9. 单方传递密码

小西打算把之前独一无二的钥匙锁箱用上,毕竟上面真的有警察局的印章。他打算用这个以示箱子是真的小西发的。
全国各地的朋友都可以去当地警察局领取针对小西箱子的放大镜。这样确实有点麻烦朋友了
小西想着再去警察局备案一次,再顺便把放大镜全部邮寄到他所有朋友家里就好了。
小西发完箱子,朋友验完箱子之后,可以开始协商密码了。既然是即兴发挥,朋友可以挑任意一串数字,可以是今天起床的时间点,可以是目标存款,可以是今天哼过得一曲小调和弦。
小西假设朋友选了个随机数:201331107089(类似学号),朋友将随机数用锁箱上锁,发回给小西,小西拿到解锁后,可以直接拿这个随机数当成密码锁箱的密码,于是第二次飞鸽传书的时候,把真正要交流的箱子换成了密码锁箱,把对话放密码锁箱发出。
至此他们可以安全快速的交流下去,直到最后一次朋友想结束对话: 好了小西,我困了,下次再聊吧。此次密码作废。小西收到后也知道了,如果不久后又收到箱子,如果还是旧密码能打开,也就不用看里面的内容了,直接可以丢弃了。

  • 通过事先安装CA公钥达到安全认证目的厂商通常会提前在所有电脑内置CA公钥 = 各地朋友去警察局领取放大镜CA公钥还有链条,从根(证书)开始,不仅可以验证小西服务器,还可以验证<验证小西服务器的警察局> = 放大镜不止一个, 还有验市警察局的放大镜,验省警察局的放大镜若当地警察局的放大镜验不出来,可以用更上一级更大的镜子验,直到验正为止 = 可以理解为小西下次是去市警察局盖印章的,所以只有级别更高的放大镜可以验
  • 通过非对称加密传递对称加密的密钥:
  1. 朋友将随机密钥用公钥加密发出,小西私钥解密获得密钥 = 朋友往锁箱放入【201331107089】(学号)发出,小西解密得密码
  2. 双方都拥有密钥,可发密文(明文+密钥) = 小西把【早安】放入密码锁箱用密码(学号)上锁,发出,朋友收到密码锁箱用密码(学号)解锁
  3. 最后一次通话后,双方删除密码(学号),结束通话,后续收到相同的锁箱直接丢弃。
  4. 下次对话前回到第1步,建立连接。

10.  根据槽点优化

小西和朋友们的飞鸽联系就这样进行了下去:
小西觉得这么多朋友都给我定这么个随机数,有的时候又太随意了,这个随机数时而长时而短,小西每次制作密码锁箱的顺序和设计都不同,开始埋怨了
小美在一旁安慰,并说出了一个很妙的办法: 既然他们这么随机,那你也可以制造随机数给他们啊,只要最后能凑成一个规定好的长度,不就行了?
小西一听,对哦,为什么这么密码都是他们说了算?我也要参与一部分,这样才可控! 小西和小美击掌,打算把这个计划跟朋友沟通。
朋友小东小南们一听此事,也纷纷表示理解小西制作密码锁箱的难度,他们打算跟小西分担这份责任,真正的友谊是相互理解相互帮助的。
这次小东小南们做出了分析: 既然制作密码锁箱这么难,那我们干脆就不要制作密码锁箱了,我们先利用各自的随机数各自计算出密码(比如直接串起来: 小西串小东: xiaoxixiaodong),然后我们直接将我们想说的话和这串密码联系起来,比如 【几点回来,我想你了】-》【x几i点a回o来x,i我x想i你a了odong】,然后把密文发出,密文到你手上再自己把密码抽出来,很快就能看到原文了。
这样的话飞鸽也不用每次驮着这么沉的箱子了,密文被中间人截获也不知道是啥,小西你觉得怎么样?小西连忙点头: 我怎么就没想到这点呢!我真是太笨了

  • 通过双方都出一个随机数(且对方认同)来保证此刻双方的链接是最紧密的: 此后合成的密码一定属于双方共同参与小西收到小东发来的随机数:xiaodong小东收到小西发来的随机数: xiaoxi双方都知道生成密码算法是小西串小东: xiaoxixiaodong
  • 虽然原理同是对称加密,但是用密码串明文比密码锁箱更简洁,节省流量: 【几点回来,我想你了】+ 【 xiaoxixiaodong】 = 【x几i点a回o来x,i我x想i你a了odong】在计算机网络的发展中,无论是对称加密还是非对称加密的算法,都是不断的改进和演变,只为更快更强。

11.  大东大南要求排头

小西按照小东小南的建议做出了自己满意的设计,远程通讯越来越快越来越好了
但是有一天,大东大南找上了门。
他们说按照之前计算出来的密码他们的是:
小西串大东: xiaoxidadong
小西串大南: xiaoxidanan
他们说按照当地的风俗规则,他们希望密码是按辈分的,也就是大东串小西: dadongxiaoxi
问小西能不能改掉规则,顺序调过来。
小西进行了从长计议: 如果下一次来大大东和大大南,说他们当地又是按从小到大的风俗排序的(也就是小西大大东:【xiaoxidadadong】),他们又希望密码再掉转过来,否则不够吉利。那时该怎么办?又调换一次?
小西想了想,这个问题可以临时决定,并不用规定死,只要协商一次排序就好了

  • 通过协商来挑选不同机器之间所支持的最优算法:
    协商过程可以都是明文,截获者获取也并没有实质意义: 如同问好一般,【你好,奶茶要大杯中杯?要中杯】,张三利用这个对话啥也做不了

12.  协商顺序

小西分析: 既然朋友的顺序有大有小,那只要在通讯前告诉我就好了
如果担心我会不会理解复杂的顺序,那发来一份【符合风格表格】来,我挑一个我理解得来的风格,再通知对方就好了
思来想去,小西做出了包容设计:
任何朋友若想发信息给小西,先给小西一份符合朋友的风格表格如:【1主在前, 2主在中, 3主在后】(主为朋友)则表明朋友希望他的位置可以放在前中后都可,小西根据难易程度(比如主在后最好记),选出【主在后】,发给朋友,然后朋友和小西都可以根据规则计算出密码: 【xiaoxipengyou】 往下就可以愉快的交流了: 最近怎么样? 【x最i近a怎o么x样i?pengyou】

  • 通过传递生成对称加密密钥的算法列表实现协商:
    建立通讯前,小西收到朋友的算法列表: 【1主在前, 2主在中, 3主在后】
    小西挑选其一,把应答结果返回:我选【主在后】
    双方根据协商算出:【xiaoxipengyou】

13. 协商插空几个密码?

没过几天,又来了两个朋友懒东和懒南来诉苦:你这个密码也太难抽取了(假设密码为xiaoxilandong)
我希望是能抽得轻松点,比如:  【我没钱了能借多少】  我想只抽3次就能还原: 【xiao我没钱了xilan能借多少dong】,这样可以吗?
小西沿用了协商顺序的讨论,心想我的朋友也想法也太多了,那就协商吧:
任何朋友若想发信息给小西,先给小西一份抽插办法如:【1间隔放1个,2 间隔放两个】则表明朋友希望他的密文可以间隔放一个,也可以放两个,小西根据难易程度(比如放两个),选出【2 间隔放两个】,发给朋友,然后朋友和小西都可以根据规则计算出密文: 【能借我点钱吗】 =》 【xi能ao借我xi点la钱nd吗ong】
懒东和懒南听完满意的离去

  • 通过传递密钥如何加密的算法列表实现协商:
    建立通讯前,小西收到朋友的算法列表: 【1间隔放1个,2 间隔放两个】
    小西挑选其一,把应答结果返回:我选【2 间隔放两个】
    双方根据协商:【能借我点钱吗】 =》 【xi能ao借我xi点la钱nd吗ong】

14. 美好的收尾

小西和朋友协商完【风格】和【插几个空】后,为了表明我们可以安全通讯了,必须告诉对方我密码造好了,一切都准备好了,我们开黑吧!
但是从朋友的角度而言,他即将收到的是【我们开黑吧】这句话,问题又出现了,万一这个不是小西发给朋友的呢? 朋友问到。小西蒙了: 你搁着套娃呢?
小西想到了完美的收尾:既然我刚刚才和你协商完,那我把协商的过程合起来,做个摘要发给你吧
《自身随机值xiaoxi,收到对方随机值:xiaodong,我选了【主在后】 密码是xiaoxixiaodong, 我选了【间隔放两个】》 做成摘要《xxxx》,发出
朋友小东自身也把协商过程做个摘要,跟摘要对比,若都是《xxxx》,则证明刚刚一直协商的的确是小西,若不是则丢弃,结束会话。

  • 通过对过程生成摘要实现通讯不可抵赖: 就是你要开黑的别跑!

15. 完整的流程

  • 小西去警察局备案,小城给钥匙锁箱盖章,并邮寄放大镜到亲朋好友手上
  • 小东想给小西还钱,开始协商密码顺序: 【在前,在后】;协商插空方式:【间隔放1个,间隔放2个】,把协商和一半随机数【666】直接发给小西(这部分是明文)
  • 小西发空锁箱和另一半随机数【777】以及【在前】和【间隔放一个】给小东,小东收到后用放大镜查看盖章,为真则造半份密码,为假则丢弃
  • 小东造半份密码:【888】,放入锁箱里,上锁,发出。运用【在前】算法算出密钥【666777888】。把几个要素放一起【666,777,888,666777888,在前,间隔放一个】,做成摘要【xxxx】。等待校对
  • 小西收到用钥匙打开锁箱,拿到半份密码【888】,运用【在前】算法算出密钥【666777888】
  • 小西把几个要素放一起【666,777,888,666777888,在前,间隔放一个】,做成摘要【xxxx】,发出
  • 小东用自己做的摘要和接受到的摘要对比,确认无误:不愧是你
  • 小东开始加密通话:今天还你100万: 【6今6天6还7你7170808万8】
  • 小西收到后解密

日期:2022-03-29 13:46 | 阅读:164 | 评论:2