HTTPS简介(一):对称加密

房东的猫 提交于 2020-02-02 13:30:38

密码学可能是一个难以理解的主题。它充满了数学证明。除非你真的需要开发密码系统,否则,如果你只想从宏观的角度了解密码学,你并不需要理解这些复杂的内容。

如果你抱着能够创建下一个 HTTPS 协议的期望打开这篇文章,我不得不遗憾地表示只有信鸽是不够的。否则,煮一些咖啡,享受这篇文章吧。

Alice,Bob 和信鸽?

你在互联网上的任何活动(阅读这篇文章,在亚马逊上买东西,上传猫咪的图片)都归结为向服务器发送消息和从服务器接收消息。

这么讲听起来可能有点抽象,因此,我们不妨假设这些信息是通过信鸽传递的。我明白这么假设显得很随意,但请相信我:HTTPS 的工作原理就是这样的,只是快得多。

本文中我们并不会使用,服务器,客户端和黑客这样的术语,取而代之的是,我们会依次使用人名 Alice、 Bob 和 Mallory来代替它们。如果你不是第一次尝试理解密码概念,你可以认出这些名字,因为它们被广泛用于技术文献中。

一次简单的通讯

如果 Alice 想要给 Bob 传递一条信息,她将信息绑在信鸽的腿上,然后让信鸽传给 Bob。Bob 收到信息,读取信息。一切都正常。

但要是 Mallory 途中拦截了 Alice 的信鸽,并且改变了信息的内容?Bob 无法知道 Alice 发送的信息在传递途中被修改了。

这就是 HTTP 的工作原理。挺可怕的,对吧?我不会通过 HTTP 协议来发送我的银行凭证,你也不应该这么做。

一个密令

那如果 Alice 和 Bob 都很机灵呢。他们同意将使用密令来写信息。他们将字母表中的每个字母偏移 3 个位置。比如:D -> A, E -> B, F -> C。明文“secret message”将转换成“pbzobq jbppxdb”。

现在,如果 Mallory 拦截了信鸽,她既不能把信息改变成一些有意义的信息,也不能明白信息里说的内容,因为她不知道密令。但是Bob可以简单地反向应用密令(A -> D, B -> E, C -> F)将信息解密。密文“pbzobq jbppxdb”将被解密回“secret message”。

大功告成!

这被称为对称密钥密码术,因为当你知道如何加密一条信息,你也知道如何给信息解密。

我在上面介绍的密令通常被称为凯撒密码。在现实生活中,我们使用更高级和复杂的密令,但是主要思路是相同的。

openssl的对称加密

openssl 中集合了大部分的加解密算法,用openssl 来模拟对称加密的过程,假设Alice 写的一封信件放在 plain.txt

root@ubuntu:~/openssl_ca/enc# cat plain.txt 
hello

使用openssldesplain.txt 进行加密,

openssl enc -e -des -in plain.txt -out encrypt.txt -pass pass:12345678

使用密码 12345678 进行加密,输出到文件encrypt.txt 中。

查看 encrypt.txt 中的内容:

root@ubuntu:~/openssl_ca/enc# cat encrypt.txt 
Salted__ 򰬮DDѷb@麹

加密后的文件不是原来的内容了。

当收信人Bob 接到这封信的使用同样的使用密码 12345678 对加密的文件也就是他手里拿到的信,进行解密,

openssl enc -d -des -in encrypt.txt -out plain.encrypt.txt -pass pass:12345678

解密后的文件放在plain.encrypt.txt 中,查看plain.encrypt.txt 的内容:

root@ubuntu:~/openssl_ca/enc# cat plain.encrypt.txt 
hello

因为Mallory 即使截获信鸽并不知道我们使用密码是12345678 ,使用的加密算法是 -des ,因此解不开这封信,比如使用 密码122对加密的文件进行解密,他无法得到原来的内容。

root@ubuntu:~/openssl_ca/enc# openssl enc -d -des -in encrypt.txt -out plain.encrypt.txt -pass pass:122
bad decrypt
140173114889880:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:529:

提示解密失败。

这是一次完整的对称加密过程。所谓的对称加密,可以这样来理解,写信人Alice 和收信人Bob ,知道大家使用的加密方式和加密的密码。


转载请标明来之:大家来编程go2code.com

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!