前言

本文是根据我小组内部分享的文档改编而成,希望能够通过本文简要说明几个主要密码学算法的独特作用,逐层递进地呈现一个清晰的脉络。
本文只能作为对密码算法没有概念的新人的敲门砖,如想要深入了解,还请阅读相关的文献。

那么,让我们开始密码学算法的故事吧!

杨白劳想告诉外地打工的喜儿黄世仁欺压自己的事实,当然是不想让黄世仁及其手下知道的,杨白劳只会写汉语拼音,不会写汉字,他的信息是:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
huang shi reng qi ren tai shen xi er kuai hui lai jiu ba ba ba ba xian zai hen ji
黄世仁欺人太甚,喜儿快回来救爸爸,爸爸现在很急

他有以下方法可以把信息送出去,

1、掩耳盗铃法

直接写在纸张上,放在信里密封好,托人递给喜儿。

别人拆了信就能看到信息,基本没防护。

2、字母偏移法

和喜儿之间有个字母偏移的约定,比如今天是7月3号,当月第3天,则abcd字母依次偏移3位,成为defg。对原来的信息进行字母偏移后,信息变得面目全非,看上去很安全。

杨白劳黄世仁密码算法发展史 算法 第1张

原文:huang shi ren qi ren tai shen xi er kuai hui lai jiu ba ba ba ba xian zai hen ji
密文:KXDQJ VKL ....

这里的3其实就是秘钥。
只要耐心的黄世仁及他的家丁,将25种平移方法都尝试一遍,原信息就水落石出了。

顺便说下,这就是历史上赫赫有名的凯撒密码。
黄世仁的破解方法就是暴力破解(brute-force attack)法,由于密钥种类太少,他只是用了一点点暴力就解决问题了。

3、字母映射法

你也可以叫它简单替换密码。

和喜儿之间还有另一个字母映射的约定,比如a->W,b->Y,c->H,d->F,26个字母都有不重复的映射关系,对原信息相应处理,这次似乎很安全了。
杨白劳黄世仁密码算法发展史 算法 第2张

然而狡猾的黄世仁依然通过通过特殊手段破解了密码,他是怎么做到的呢?他是通过词频攻击实现破解的。比如因为爸爸写给女儿的信,那么爸爸这个词出现的频率就会高一点(还有女儿),根据上面的映射关系,可以看到密文里有很多sd组合,可以得出sd->ba,即s->d,d->a。这样就有两个字母被破解了,使用该手法可以逐渐破解所有密文。

注意: 词频攻击破解手法,前提是密文样本量要充足,可以根据词频推出字母映射关系。如果密文只有短短的如下信息

TAJ VJW

你能看出来密文里写的是"hui jia(回家)"吗?
因此,我们可以认为如果密文很短的话,杨白劳可以把信息安全传给喜儿。

4、黑科技字母映射法

心灵手巧的杨白劳制造出了一台密码机器,取名“恩尼格玛”。(别问我为什么他能造出密码机,还要种地)这也是一台字母映射的机器。当键盘上的某个键被按下时,这个字母被加密后的密文字母所对应的小灯泡就亮了起来。如果只是简单的映射,那么和前面的方法二三并没有什么区别,这次杨白劳做了几重防护:
杨白劳黄世仁密码算法发展史 算法 第3张

  • 由于每天初始化密码机的时候,都要根据一张表设定很多参数,当然这些参数每天都不一样。所以今天按下a,d亮起来了,明天就可能换成q亮起来。
  • 每次按下按键后,机器中的转子就会转一圈,映射关系又会发生变化。所以,第一次按键按下a,d亮起来了,再按下a,就换成q亮起来了。
    杨白劳黄世仁密码算法发展史 算法 第4张

神通广大的黄世仁家丁,通过国际友人的帮助还是破解了这台看上去无懈可击的“恩尼格玛”,具体怎么破解的,请大家移步这个链接。这台“恩尼格玛”其实是二战德国设计的密码机器,原理远比我上面说的复杂,破解功臣就有赫赫有名的图灵,有一部电影讲了这个破解的故事——《模仿游戏》。

5、对称加密算法

杨白劳苦心孤诣,研究出了对称加密算法。他将信息和加密密钥一起经过特殊加密算法处理后,使其变成很复杂的加密密文发送出去。喜儿收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。

对称加密算法使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

黄世仁这次真的没辙了,是杨白劳棋高一着。一切似乎很完美,然而似乎哪里不对?

是的,问题来了,杨白劳怎么把密钥安全送出去呢?放在信封里吗?一切似乎又回到了原点...
有人可能会说,喜儿和杨白劳见一面把密钥拿到了不就好了吗?是的,那再想想我们寄信是为了什么呢?

6、非对称加密算法

杨白劳绝不认输,呕心沥血研究出了终极级大杀器,非对称加密算法。

这种算法需要两个密钥:公开密钥(publickey)私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

整个过程如下:

  • 喜儿生成一对密钥,并将其中的一把作为公用密钥向杨白劳公开;
  • 杨白劳使用该密钥对信息进行加密后再发送给喜儿;
  • 喜儿再用自己保存的另一把专用密钥对加密后的信息进行解密。

由于公钥是公开的,所以寄送公钥的纸张连信封都不用装,甚至可以抄送黄世仁一份!

其实有点像喜儿有很多带锁的箱子(公钥),还有一把能开这些箱子的“万能钥匙”(私钥),她把箱子发给杨白劳甚至黄世仁,杨白劳可以把信放在箱子里,只有喜儿可以开.

事情到了这里似乎终于圆满了,杨白劳终于可以通过非对称加密给喜儿说点悄悄话了。然后,还是有一个很大的问题没有解决,不知道你发现了没有?

黄世仁冒充杨白劳写信咋办?

公钥谁都可以得到,狡诈的黄世仁写了这样一封信给喜儿(偷懒,汉语拼音部分省去)

喜儿,我在家里很好,宅心仁厚黄世仁成天来我家送温暖,你在外安心。
就是最近猪圈翻新,需要点钱,我没有银行卡,你打到黄世仁卡上。
卡号:6323998XXXXXXXX

在损失了一笔血汗钱后,杨白劳痛定思痛,又想出了一个大杀器:

7、数字签名

杨白劳想到刚刚发明的非对称加密还有另一种妙用:
首先,杨白劳用自己的私钥对一段无关紧要的信息加密(比如自己的名字“杨白劳”),然后把密文和明文发送给喜儿,喜儿使用杨白劳的公钥解密,如果能够成功解密,且解密的内容和明文一样,就可以证明信息确实是杨白劳发出的。

后来杨白劳发现数字签名还可以用于和黄世仁之间的交易,黄世仁数字签名的交易,他是无法抵赖的。

从恶如流的黄世仁并没善罢甘休,他又想出了新的坏点子:

黄世仁篡改信息咋办?

黄世仁懒得破解杨白劳的密文,他用喜儿的公钥重新加密了一条诈骗信息,然后加上真实的杨白劳的签名,发出去了。一件惨案,又要发生了。

8、哈希算法

惨痛的损失再次教做人。杨白劳真的快变成白劳了。魔高一尺,道高一丈,他又想出了一个妙招。
哈希算法。

他想出一种将所发信息生成摘要的方法,即无论多长的信息,最后都会很快变成256个字节的摘要。而且就算黄世仁得到了这256个字节,反向去推原信息也是不可能的。

配合上面所发明的签名算法使用,这次终于安全了。

  • 杨白劳先用喜儿的公钥将将明文加密,生成密文
  • 杨白劳再将密文用哈希算法生成摘要,将摘要用自己的私钥加密,生成摘要的密文,与密文一起传送给喜儿。
  • 喜儿用杨白劳的公钥才能解密摘要的密文,然后用HASH函数对收到的密文产生一个摘要信息,与解密的摘要信息对比。
  • 如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
  • 确认完整性后,喜儿再用自己的密钥解密密文就好了!

过程比较复杂,我们通过一张图来展示:
杨白劳黄世仁密码算法发展史 算法 第5张

万事大吉!!
杨白劳黄世仁密码算法发展史 算法 第6张

一张图讲解上述密码学演化过程:

杨白劳黄世仁密码算法发展史 算法 第7张

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄