谈谈Alice和Bob之间的小秘密

来源:公众号“汽车信息与安全”
2020-08-12
1839

作者 | Vincent Yang

来源 | 汽车信息安全


天王盖地虎,宝塔镇河妖;

脸红什么? 精神焕发;

怎么又黄啦?防冷涂的蜡。

———题记


前言

在《林海雪原》里,杨子荣为了能够假装胡彪,打入虎穴,学习了些黑话,题记里杨子荣正跟土匪对着暗号,验明自己身份的合法性。这是在提到洋气的A和B之前,能想到密码学里身份校验的故事,当然前提是山寨里的人都没见过胡彪,只是有所耳闻,故事里土匪一直在想法设法试探杨子荣的身份,感兴趣大家可以看看《智取威虎山》中的电影片段。


话说回来,土匪和杨子荣的对话并不涉及加解密的过程,只是凭着行话,核验身份,与我们正常输入登录账号密码一样,那最多称之为口令,那什么是密码学呢?我们简单看下维基百科的定义。


Cryptography is about constructing and analyzing protocols that prevent third parties or the public from reading private messages. (密码学是关于构建和分析防止第三方或公众读取私人消息的方法体系)。





信息安全的属性

在密码学世界里有两个虚拟的人物Alice和Bob以拟人化A和B,假如Alice和Bob是同班同学且互有好感,有一天Alice终于鼓起勇气要以情书的形式向Bob表白,正常来讲他会有些担心,最理想的情况下,是情书安全的送到了Bob那里,万一情书被人发现,也没有关系,只有Bob能看懂,同时要确保Bob收到情书之后,还得确定是Bob发来的,不然搞错了对象也会很尴尬。


Alice确实是个心思缜密的人,他的担心涉及到了信息传递的几个安全属性。


机密性:自己的真实意图只能让Bob知道,不能让公众晓得,他可以把情书放到密码箱里,把钥匙给到Bob,或者也不怕别人看到,对于情书内容进行加密,也只有Bob知道密钥。


完整性:情书中途被人掉包,或者内容被篡改,明明是表白I love you 结果换成 I hate you那就坏了好事了。


真实性:Bob收到情书之后,得知道是Alice写的,当然写匿名情书搞暗恋又另说了。此时就需要Alice签字,或者做个人的特殊标记,比如加上自己的俄语一段话,因为班上只有Alice会俄语。


Alice的想法也是人之常情,不仅要有勇气将重要的信息传递出去,同时也要有足够的智慧保证信息的传递准确到位。其实在密码学在这里就可以派上用场了。





加密与解密

Alice可以将情书放到有密码锁的笔记本里,然后将本子和钥匙一起送给Bob,这也是一种方式,钥匙上锁和解锁的过程,暂且换上专业的说法,加密和解密,同时发送者和接受者用的同一把钥匙,也就是我们说的对称加密,当然密钥只有Alice和Bob知道,同时消息和密钥要同时发给对方。其逻辑如下:



在介绍加解密之前,简单普及下基础的概念,在现代的计算机和依赖计算机的设备里都用到了二进制,每个数字称为一个比特(bit),一个字节由8个比特构成,储存的数值范围为0-255。

既然二进制是计算机的语言,那么消息都必须得转化为二进制才能进行计算,很多问题就变成了数学问题,此时密码学就成功成了数学家的天地,这也是我们普通大众对密码学望而却步的原因。(顺便提一句,目前国内在密码学造诣最深的是山东大学数学系出身的王小云院士。)

再回到Alice和Bob的小秘密,经过仔细考虑,情书的关键信息如下:
                                I LOVE YOU
现在为了确保消息只有Bob看得懂,而别人看不懂,暂且假设只有Alice和Bob知道密钥,此时正常来说他三种操作方式.

首先是字母替换,每个字母按照制定规则逐一替换,此时Bob收到加密消息的同时,还会收到的字符关系表,逐个解密得出明文消息。正经的说,也就是利用预先设计的固定代替规则,对明文逐个进行替换,这个代替规则又称为代替函数,代替表或者代替函数,所以相同的明文字符组一定会产生相同的密文字符,此时可以采用频率分析基本可以得到找到对应关系。

然后是行移位,I LOVE YOU 按照26个字母顺序依次向后移一位,那么变化如下:
 I LOVE YOU-> J MPWF ZPV


如此解密时,J MPWF ZPV 各字母向前移动一位就解决问题,得到答案里。

最后就是加减密码,将明文逐个字符或逐字符组与乱数相加或相减的密码,在这里就不赘述了。






对称密钥

Alice和Bob的小秘密大部分情况下要通过密码技术来保证,顺着Alice面对安全威胁的担忧,接下来我们还是有必要整体介绍,密码学的常用要点。





在之前,其实我们简要介绍过了对称密钥,也就是加密和解密用的是同一套密钥。关于具体的对称密钥算法,还是有必要介绍AES, 一般会将明文分成128bit的明文块,密钥长度有128,192,256bit三种选择,对于128而言,加密轮数为10轮。分别用到了XOR运算,字母替换,行移位,列混淆一套组合拳,然后经过10轮加密计算得到密文。


听起来挺复杂的,其实逻辑很简单,通过一堆骚操作之后,让你看不懂密文,除非拿到密钥解密得到消息。但对于Alice想跟Bob表白这件事情来说,也最好不要这样,除非你确定Bob对密码学很感兴趣。即使Bob拿到了密钥,你手把手教他解密,把最后的I LOVE YOU的信息给解出来也不是件容易的事。




非对称密钥

对称密钥有个问题,情书发送的时候,要顺带把钥匙也给对方,不然对方是解不开的,此时不仅要保护情书不落入情敌手中,同时也要确保密钥的安全。也就是说对称密钥存在密钥配送的问题。


1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。


也就是我们经常提到的非对称加密,咋个理解法?在《图解密码技术》里面提了个非常有意思的说法解释公钥和私钥的关系。


假如Alice到超市购物要存包,先投一枚硬币,此后空箱子弹开,你放上你的私人物品后,合上寄存柜的门,然后自动弹出一个小纸条,那个小纸条你得拿好,上面的条形码是唯一的,到时拿着纸条对着扫码机扫一下,解锁后寄存柜打开,然后完成这个过程。



这样一套自动化系统成功的解决存包管理的问题,同时将寄存柜变成了公共设施,同时还能收一笔使用费用。其中硬币相当于公钥,谁都可以有,你有了一块钱就可以锁上柜子,然后你的柜子只有你自己的纸条能打开,相当于私钥。


也就是说公钥加密,私钥解密。非对称加密尽管增加了一套密钥分发系统,但是相对于对称加密每次都要随带密钥,不仅提高了安全性,还省了内存。


关于非对称密码的算法实现,不得不提到RSA,其逻辑如下:


 密文=明文^E mod N, 密文等于明文的E次方,然后除以N的余数。


 E和N构成公钥,D和N构成私钥,中间的数学算法在此就不细展开了,如果大家感兴趣查阅相关的资料。


不管是对称加密,还是非对称加密,解决的核心问题还是机密性,不希望别人看到个人的隐私信息,密钥本身也同等重要,比如利用随机数加密数据,也就是一次性密码,只是长度与明文一样长,保护明文与密钥成本相同,那就脱离加密本身的初衷,但那也是唯一无法破解的密码,不过没有实用的价值,此时说世界上没有绝对的安全,一点也不为过。





单向散列函数


如果加密和解密的渠道都是正常进行的,万一有人篡改了消息的内容,又该如何保证呢?


每次发来的文件消息数据量巨大,不可能挨个原文比对验证完整性,那工作量太大了。此时单向散列函数就出现了。


单向散列函数,首先是单向不可逆的,你无法通过散列值计算出明文,另外是压缩数据,不管多大的数据,都可以计算出固定长度的散列值。最后就是消息不同,散列值也不同,消息稍微有点变化,散列值本身就会有很大的变化。


如果说消息传递时空间的有效性,你可以通过安全传输协议来保证其安全,如果消息时间的有效性,你可以通过前后对比计算散列值得到结果,针对昨天和今天的校验值,你如何校验呢?此时计算消息的散列值,然后对比,这问题就可以解决了,其逻辑步骤如下:





消息认证码

Bob怎么确定发送者是Alice呢?这就要验证消息的合法性,刚才只是按照消息原文计算了散列值,比对内容是否有篡改,主要应用的是昨天跟今天消息的对比,不涉及到消息传输。今天Bob收到情书了,想确定是Alice发来的,此时就要考虑密钥问题了。


其实消息认证码就是一种与密钥相关联的单向散列函数,有了共享密钥的参与就可以验证消息来源的合法性了,共享密钥只有发送者和接收者知道,Alice和Bob的小秘密才足以捍卫。其工作流程如下:






数字签名

通过消息认证码可以识别消息是否被篡改或者发送者身份是否被伪装,也就可以校验消息的完整性,还可以对消息进行认证。如果Alice向Bob借了1000块钱,借钱过程都是合理合法,万一有天Alice否认没有找Bob借过钱呢?


对称加密里面,密钥是双方都知晓,非对称里面公钥是公开大家都知道的,私钥只有Bob知道,真正属于Alice的个人信息并没有,也就是内容没毛病,就是没有签字画押,对了抗抵赖性,此时数字签名就派上了用场。


在非对称密钥里面,公钥加密,私钥解密。


在数字签名里面,私钥签名,公钥验签,对于初学者来说容易弄混,但是从逻辑上可以这么理解,签名是具有个人属性独一无二的,当然得用Alice得私钥签名,而验签则是任何需要验签得人都可以持有。


验证签名就是检查该消息的签名是否真的属于Alice,验证的结果可以是成功或者失败,成功则以为着这个签名是属于Alice的,失败则意味着这个签名不是属于Alice的。




总结

密码学真是为了保护Alice 和Bob的小秘密操碎心,对称密钥只有一个密钥,加解密便捷快速,但密钥同消息一起传输又不太安全,非对称密钥解决了密钥管理的问题,可又担心别人篡改了Alice情书的内容,费尽心思设计单向散列函数实现了数据比对的轻量化,Bob担心Alice借钱不承认,特意设置了数字签名,真的是太难了。


安全的本质就是信任,当你不信任对方时,会千方百计的校验对方的身份,设置各种密码措施,如果不表白似乎就没这么多事了,但为了人类的繁衍的,科技的进步,你总归是要走下去的。


END



收藏
点赞
2000