加密是对消息进行编码的一种方法,这样可以保护消息的内容免遭他人窥视。一般有两种类型:
密钥加密secret-keyencryption使用相同的密钥进行加密和解密,而公钥加密public-keyencryption使用不同的密钥进行加密和解密。每种方法各有利弊。密钥加密速度更快,而公钥加密更安全,因为它解决了安全共享密钥的问题,将它们结合在一起可以最大限度地利用每种类型的优势。
公钥加密使用两组密钥,称为密钥对。一个是公钥,可以与你想要秘密通信的任何人自由共享。另一个是私钥,应该是一个秘密,永远不会共享。
公钥用于加密。如果某人想与你交流敏感信息,你可以将你的公钥发送给他们,他们可以使用公钥加密消息或文件,然后再将其发送给你。私钥用于解密。解密发件人加密的消息的唯一方法是使用私钥。因此,它们被称为“密钥对”,它们是相互关联的。
OpenSSL是一个了不起的工具,可以执行各种任务,例如加密文件。本文使用安装了OpenSSL的Fedora计算机。如果你的机器上没有,则可以使用软件包管理器进行安装:
要探索文件加密和解密,假如有两个用户Alice和Bob,他们想通过使用OpenSSL交换加密文件来相互通信。
在加密文件之前,你需要生成密钥对。你还需要一个密码短语passphrase,每当你使用OpenSSL时都必须使用该密码短语,因此务必记住它。
Alice使用以下命令生成她的一组密钥对:
此命令使用OpenSSL的genrsa命令生成一个1024位的公钥/私钥对。这是可以的,因为RSA算法是不对称的。它还使用了aes128对称密钥算法来加密Alice生成的私钥。
输入命令后,OpenSSL会提示Alice输入密码,每次使用密钥时,她都必须输入该密码:
Bob使用相同的步骤来创建他的密钥对:
如果你对密钥文件感到好奇,可以打开命令生成的.pem文件,但是你会看到屏幕上的一堆文本:
要查看密钥的详细信息,可以使用以下OpenSSL命令打开.pem文件并显示内容。你可能想知道在哪里可以找到另一个配对的密钥,因为这是单个文件。你观察的很细致,获取公钥的方法如下:
注意,公钥是你可以与他人自由共享的密钥,而你必须将私钥保密。因此,Alice必须提取她的公钥,并将其保存到文件中:
你可以使用与之前相同的方式查看公钥详细信息,但是这次,输入公钥.pem文件:
Bob可以按照相同的过程来提取他的公钥并将其保存到文件中:
这些公钥在Alice和Bob彼此交换之前没有太大用处。有几种共享公钥的方法,例如使用scp命令将密钥复制到彼此的工作站。
将Alice的公钥发送到Bob的工作站:
将Bob的公钥发送到Alice的工作站:
现在,Alice有了Bob的公钥,反之亦然:
假设Alice需要与Bob秘密交流。她将秘密信息写入文件中,并将其保存到top_secret.txt中。由于这是一个普通文件,因此任何人都可以打开它并查看其内容,这里并没有太多保护:
要加密此秘密消息,Alice需要使用openssls-encrypt命令。她需要为该工具提供三个输入:
加密后,原始文件仍然是可见的,而新创建的加密文件在屏幕上看起来像乱码。这样,你可以确定秘密消息已被加密:
删除秘密消息的原始文件是安全的,这样确保任何痕迹都没有:
现在,Alice需要再次使用scp命令将此加密文件通过网络发送给Bob的工作站。注意,即使文件被截获,其内容也会是加密的,因此内容不会被泄露:
如果Bob使用常规方法尝试打开并查看加密的消息,他将无法看懂该消息:
Bob需要使用OpenSSL来解密消息,但是这次使用的是-decrypt命令行参数。他需要向工具程序提供以下信息:
现在,Bob可以阅读Alice发送给他的秘密消息:
Bob需要回复Alice,因此他将秘密回复写在一个文件中:
为了发送消息,Bob采用和Alice相同的步骤,但是由于该消息是发送给Alice的,因此他需要使用Alice的公钥来加密文件:
Bob通过scp将加密的文件发送至Alice的工作站:
如果Alice尝试使用常规工具去阅读加密的文本,她将无法理解加密的文本:
所以,她使用OpenSSL解密消息,只不过这次她提供了自己的私钥并将输出保存到文件中: