原文连接:https://www.howtogeek.com/howto/33949/htg-explains-what-is-encryption-and-how-does-it-work/
加密技术的历史十分悠久,最早可以追溯到古希腊人和罗马人通过替换只能用密钥破译的字母发送秘密信息。 接下来咱们要快速回顾一遍加密的历史,让李了解有关加密如何工作的更多信息。
早期的加密技术
古希腊人使用一种名为Scytale的工具来帮助他们快速地使用转置密码加密他们的消息 – 他们只需将羊皮纸条包裹在一个圆柱体周围,写出信息,然后解开时羊皮纸上的文字就失去了可读性。
比如下面这段文字是围绕着圆柱体上的羊皮纸上写的,写的是:‘WE ARE DISCOVERED. FLEE AT ONCE’(我们被发现了,马上逃),但是在羊皮纸上是这样书写的(顺时针书写):
W . . . E . . . C . . . R . . . L . . . T . . . E
. E . R . D . S . O . E . E . F . E . A . O . C .
. . A . . . I . . . V . . . D . . . E . . . N . .
如此一来实际上呈现的是:
WECRL TEERD SOEEF EAOCA IVDEN
当然,这种加密方法可能很容易被破解,但它是实际在现实世界中使用的第一个加密示例之一。它之所以是不安全的,因为犯了密码学的一个大忌:security through obscurity意思是通过隐藏加密的机制来起到安全的作用,而且这个例子是只靠这一点保障信息安全。这意味着只要有任何人知道这个机制都能完全破解秘密。而安全的加密是假定对方知道一切除了密钥之外的内容,对方仍然不发破译或者难以破译。
Julius Caesar在他的时代使用了一种类似的方法,将字母表中的每个字母向右或向左移动了许多位置 – 一种称为Caesar密码的加密技术。 例如,使用下面的示例密码,将“GEEK”写为“JHHN”。
明文: ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文: DEFGHIJKLMNOPQRSTUVWXYZABC
由于只有消息的预期接收者知道密码,因此下一个人难以解码消息,这看起来像是胡言乱语,但拥有该密码的人可以很容易地解码和读取它。
但是这样的加密方式因为密钥的所有可能性实在太少,因此也非常容易被破解,毕竟一共才17种密钥。可能这也是历史上最早的暴力破解密码的案例。
像Polybius方块表这样的其他简单加密密码使用了一对多的字母密码,它将字母按照某种顺序排成方块儿,为了说明方便假设是按照字母表顺序从左至右从上至下排列。当然因为字母有26个,而方块表只能容纳25个字母,有时候规定两个字母共用一个位置,比如I和J。然后所有字母在表格中都有一个位置,比如第一行第四个是什么字母。于是咱们用字母的位置替代字母本身。如图:
比如,在这样的加密机制下,“die”可以表示为:
14 24 15
不过考虑到直接按照字母表的顺序在表格中排列字母实在太过于简单,可以先对字母表进行随机排序,然后再按照新的次序重新依次在方块种排列。不过即便是随机排序也无法保证安全,因为有频率分析的办法。
值得一提的是,因为加密方式足够简单,而且密文是按照一对数字的形式出现,因此在一些监狱里面囚犯会通过敲击墙壁的方式向隔壁房间的犯人传递讯息。
在第二次世界大战期间,德国人使用Enigma机器来回传递加密传输军事情报,直到数年以后波兰破译了Enigma的加密机制,并为盟军提供了解决方案,这对盟军的胜利起了至关重要的作用。
现代加密技术
让我们面对现实吧:现代加密技术可能是一个非常无聊的主题(数学部分更难了),所以我们不是仅用文字解释它们而是采用漫画的方式介绍现代密码学的历史。
在过去的那些日子里,人们没有一种好的加密方法来保护他们的电子通信。
Lucifer是由Horst Feistel及其IBM同事开发的几种最早的民用分组密码的名称。
数据加密标准(DES)是一种分组密码(一种共享秘密加密形式),由美国国家标准局于1976年选择作为美国的官方联邦信息处理标准(FIPS),随后广泛传播为世界各地所使用。
对安全性的担忧以及DES在软件中相对较慢的运行促使研究人员提出了各种替代分组密码设计,这些设计开始出现在20世纪80年代末和90年代初期:例如RC5,Blowfish,IDEA,NewDES,SAFER,CAST5和FEAL
美国国家标准与技术研究院(NIST)在五年内研究和评价了15个备选算法后于2001年宣布选定Rijindael加密算法为美国高级加密标准(FIPS197)
加密算法的表现
存在许多加密算法,它们都适用于不同的目的 -使得一种加密算法不同于另一种加密算法的是加密算法的两个主要特征:它的安全性以及效率。
作为不同类型加密之间速度差异的一个很好的例子,您可以使用VeraCrypt的卷创建向导中内置的基准测试程序 – 如图所见,AES是迄今为止最快的强加密类型。
有更慢和更快的加密方法,它们都适用于不同的目的。 如果你只是经常尝试解密一小块数据,那么你就可以负担得起使用最强大的加密,甚至可以使用不同类型的加密对其进行两次加密。 如果你需要速度,你可能想要使用AES。
有关对不同类型加密进行基准测试的更多信息,请查看华盛顿圣路易斯大学的报告,在那里他们对不同的例程进行了大量测试,并在一篇非常geek的文章中对其进行了解释。
现代加密算法的类型
所有的现代密码都可以袋子归为两种类型:
- 对称加密:加密和解密用同一把密钥。
- 非对称加密:加密和解密用不同的密钥。
对称加密
为了解释这个概念,我们将使用维基百科中描述的邮政服务比喻来理解对称密钥算法的工作原理。
爱丽丝把她的秘密信息放在一个盒子里,然后用一把钥匙把挂锁锁在盒子里。 然后,她通过普通邮寄的方式把邮箱发送给鲍勃。 当Bob接收到该邮箱时,他使用相同的Alice的密钥副本(他之前以某种方式获得,可能通过面对面会议)打开该邮箱,并阅读该消息。 然后Bob可以使用相同的挂锁发送他的秘密回复Alice。这期间邮差如果没有钥匙并不能阅读邮箱中的信件。
对称密钥算法还可分为流密码和分组密码 – 流密码一次加密一个比特大小的消息,而分组密码占用多个比特,通常一次以64比特的块为单位,并将它们加密为 一个单位。 这里有多种不同的算法可以选择,备受推崇的对称算法包括Twofish,Serpent,AES(Rijndael),Blowfish,CAST5,RC4,TDES和IDEA。
非对称加密
非对称加密可以考虑有这样一把锁,上锁和解锁各需要不同的钥匙,咱们把加密的锁称之为公钥,解密的锁称之为公钥。之所以叫这样的名字和这个加密解密的过程分不开。
假设Bob需要向Alice传递一封密件,首先他要要求Alice把她的邮箱以及Alice的邮箱的加密密钥邮寄过来。然后Bob把写好的邮件放入Alice寄送过来的邮箱里面,并用送来的加密密钥上锁,然后邮寄回给Alice。Alice收到由自己的加密密钥上锁的邮箱,于是用自己的解密密钥解开它,得到Bob的邮件。
如果Alice要回复Bob,她首先需要要求Bob把他的邮箱连同加密密钥一起邮寄过来。
正因为这种加密机制下,自己邮箱的加密密钥需要送出去公开被对方以及第三方邮差得到,所以称之为公钥,但是任何人得到公钥只能加密上锁却不能解锁,而解锁的密钥不能交给任何人否则对方就能直到你的秘密,所以称之为私钥。
加密如何保护网络通讯安全
多年来,SSL(现在被TLS替代)协议一直在使用Web浏览器和Web服务器之间的加密来保护网络数据传输,从而保护你免受可能在中间窥探网络的任何人的攻击。
SSL本身在概念上非常简单。 它从浏览器请求安全页面开始(通常是https:// 注意你浏览器网址这部分的开头 )
Web服务器使用其证书发送其公钥。
浏览器检查证书是否由受信任方(通常是受信任的根CA)颁发,证书仍然有效以及证书与所联系的站点相关。
然后,浏览器使用公钥来加密随机生成的对称加密密钥,并将自己的http请求用对称加密的方式加密。
web server 用自己的私钥解开浏览器发来的第一部分的密文,得到对称密钥的信息。然后用对称密钥解密浏览器的http请求。之后服务器加密浏览器需要的那部分数据,并发送会给浏览器。