21CTO社区导读:
密码与加密技术,在一般人的眼里是一个比较难理解的话题。它有不少数学公式,证明。除非我们是去开发密码学系统,其实大部分的复杂性没有必要去证明和理解。
如果你想创建下一代HTTPS协议,希望在本文中获得灵感,那我很抱歉的说,鸽子的故事还远远不够。看来您已做好心理准备了哈,冲一杯咖啡,来享用文章~
爱丽丝,鲍勃与鸽子
你在互联网上做任何的行为,包括阅读这篇文章,在Amazon上买东西,上传宠物猫图片等,归根结底都是发送与接送来自服务器的消息。
这似乎有些抽象,我们把这些信息想象是由信鸽来传递的。HTTPS的工作方式也和这一样,虽然速度要快很多。
我们不谈服务器,客户端和黑客,我们一起讨论三个人:爱丽丝、鲍勃和马洛里的故事。如果你不是第一次理解密码学概念,那么我们将会一起认识和了解这些名字,因为它们在技术文献中被广泛使用。
第一次通信
如果爱丽丝希望发消息给鲍勃先生,她将写好的信绑在信鸽的腿上,让它带给鲍勃。鲍勃收到信,打开信很开心,这一切是多么美好!
但是马洛里是个好奇分子,在鸽子飞行过程拦截了它,拆开了信,看完还篡改了内容。鲍勃收到的信,也许五味杂陈,他不知道爱丽丝的信已经在中途被人为修改。
这个故事映射了HTTP 协议的工作原理,是不是有点可怕的权限? 我肯定不会通过HTTP发送我的银行帐号,也不应该如此。
加密算法
如今,爱丽丝与鲍勃聪明了很多。
他们之间彼此同意使用密码来写信息。他们将每个英文字符在字母表后移3位。例如 D→A,E→B,F→C,例如“secret message”按此规则写就的内容就是:“pbzobq jbppxdb”。
现在,马洛里这个家伙再次拦截信鸽,他看不懂文中的内容,也就没办法来篡改成其他文字。
鲍勃同学知道加密规则,可以非常容易的将代码反向解密,A→D,B→E,C→F,密文被解密为“secret message”。
成功了!
这就是我们常说的“对称密钥”加密,即我们知道如何加密一个信息,也知道如何解密它。
我在上面描述的代码,通常被称为凯撒密码(Caesar cipher)。在现实生活中,我们使用更复杂的代码,但思想是一致的。
我们如何确定密钥
如果除了发送者和接收者之外,没有其它人知道使用了什么密钥,那么,对称密钥和密码是非常安全的。在凯撒密码中, 关键是我们将每个字母移动了多少个字母。 在我们的例子中,我们使用了3个字符的偏移量,当然也可以使用4或12位。
如果爱丽丝和鲍勃同学在用信使之前并没有见过面,彼此并不认识,他们之间就无法安全建立密钥。 如果把密钥放在消息信体中,马洛里拦截后会发现这个密钥,他就可以顺利解密,阅读完信息,按照自己的意愿篡改消息中的内容。
这种情况被称为中间人攻击的典型例子,避免被攻击的唯一方法就是把加密系统全部重写。
信鸽携带一只盒子
爱丽丝和鲍勃同学一起重构了新的通信系统。 当爱立丝想要给鲍勃发消息时,她们按照下列步骤操作:
第一. 爱丽丝不发任何消息,只向鲍勃放飞信鸽;
第二. 鲍勃见到鸽子,再把一个已经打开的盒子交给鸽子带回给爱丽丝,但是盒子的钥匙在自己的手里;
第三. 爱丽丝收到开锁的箱子,把信息放在盒子里,锁上箱子,叫信鸽带给鲍勃;
第四. 鲍勃收到盒子,用钥匙开锁后阅读爱丽丝的信件。
这样,马洛里这个家伙再拦截鸽子,第一次毫无所获,第二次是个加锁的盒子,他也没办法打开,因为他没有钥匙。
当鲍勃想给爱丽丝发信的时候,也遵循同样的过程。
爱丽丝和鲍勃就是使用了密码学中所说的“不对称密钥”加密技术。
为什么叫不对称? 就是即使你加密了一个消息(给盒子加锁),你也不能解密它(打不开一个已经上锁的盒子)。
在技术术语中,这个箱子被称为“公钥”,打开它的钥匙被称为“私钥”。
我如何信任这个盒子
可能你也注意到,这套系统仍然存在安全问题。
当鲍勃收到那个开放的盒子时,他怎么确定它一定来自爱丽丝。马洛里在拦截时,可以把盒子替换成自己的,返给鲍勃的信也可以被马洛里所篡改。
于是,爱丽丝决定在盒子上加上自己的签名,这样鲍勃在收到盒子时,先检查签名,确定是爱丽丝发送了盒子。
各位看官中一些人可能会想到,鲍勃如何识别爱丽丝的签名? 这是个好问题。
爱丽丝和鲍勃也意识到这个情况,于是他们决定,不再使用爱丽丝签名的盒子,而转而使用泰德签名的盒子。
泰德是何方神圣? 这是一位非常有名,值得依赖的长者。 泰德先生为每个人提供签名服务,人们都相信他只会给正直合法的人签名。
泰德确定爱丽丝要求签名,他只签署一个爱丽丝的盒子。 马洛里这厮如果替换由泰德签名的艾丽丝盒子,鲍勃会知道这是一个欺诈的盒子。泰德先生会验证两个人的身份才会给他们提供签名。
泰德长者在技术上通常被称为“证书颁发机构”,各位正在阅读本文的浏览器就附带着很多证书颁发机构的签名。
盒子有点沉
现在,爱丽丝和鲍勃正在用一个可靠的系统进行通信。但是,他们发现携带盒子的信鸽比只携带信息的信鸽慢了不少。
于是他们决定将使用盒子的方法(非对称加密)换成选择一个密钥来使用对称加密消息(凯撒密码)。
这样,他们得到了两全齐美的收获:非对称加密的可靠性与对称加密的效率。
小结
在现实世界中,鸽子的速度并不会特别慢,使用非对称加密消息比用对称加密要慢,因此我们只有它来交换加密密钥。
现在,各位应该已经清晰HTTPS是如何工作的了。您的咖啡也应该准备好了,去喝它,享受我们的美好生活 :)
作者:Andrea Zanin。一名自学成长的程序员和数学爱好者。
编译:21CTO社区
来源:https://medium.freecodecamp.or … 93351
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/257154.html