再次关于OpenSSL

在我仍然很少从事信息安全领域的实践中,我不得不面对一些密码学问题,或者说是加密问题,我很难找到明确的答案。 因此,我决定写一篇关于使用OpenSSL的基础知识的简短文章。

本文将讨论众所周知的密钥生成问题,以及鲜为人知的加密大文件大小的问题。 在这里,认证是不可能的。

让我们开始吧。 实际上,到目前为止,一切都很简单。

使用命令创建私钥。

openssl genrsa -out key.pem -aes-256-cfb -rand /var/log/messages 4096 



在这里:

genrsa-指示通过RSA加密算法创建密钥的参数。
out-在哪里创建密钥。
密钥长度为4096
通常,这足以创建密钥。 但是私钥最好加密。
aes-256-cfb-算法和加密模式。
rand / var / log / messages-任何文件夹中的随机值,最好记录日志,因为 使用/ dev / random或/ dev / urandom可以使所有内容挂紧,我拥有它。
创建密钥时,将要求输入密码。 密码是任何保护的基础,因此请尝试对其进行监听。 记住

我们有一把钥匙。 私人的 切勿根据神仙Koshchei的原则向任何人展示和隐藏。

以此为基础,我们将公开发布至少可以在额头上公开展示的内容。

 openssl rsa -in privatkey.pem -pubout -out publickey.pem 



现在我们有了一把钥匙。 您可以使用私钥将公共密钥上载到服务器以通过ssh连接到服务器。 或加密少量数据,例如令牌或密码等。

加密大文件的任务具有不同的解决方案。

为了加密大量数据,我们使用例如大小为1.8 MB的pdf文件。



使用对称加密算法(例如AES)对大量数据进行加密。 在这里,我们将使用非对称加密来传输对称密钥,并使用该密钥来加密文本。

让我们开始吧。

创建一个具有随机字符序列的对称会话(一次性)密钥,并将其写入base64表示形式的文件中。

 openssl rand -base64 32 > key.bin 

接下来,我们使用此密钥加密文件:

 openssl enc -aes-256-cfb -salt -in OWASP_Top_10-2017_\(en\).pdf -out OWASP_Top_10-2017_\(en\).pdf.enc -pass file:./key.bin 



aes-256-cfb-算法和加密模式。 在这里我不会谈论这些模式。 这是最好的。
-具有更大加密强度的盐。
传递文件:./ key.bin-加密密钥。

接下来,我们使用公共“非对称”密钥对对称密钥进行加密。

 openssl rsautl -encrypt -inkey publickey.pem -pubin -in key.bin -out key.bin.enc 



得到了一个加密的文件和一个对称密钥。 您可以将其发送给您的朋友进行解密。 但是我们会将其发送给我们自己,因为这是我们自己的作业。

现在删除原始的对称密钥! 这样没人会找到他。

 shred -u key.bin 

在下面的图片中,它不再存在。



现在,我们使用私有非对称密钥解密对称密钥。

 openssl rsautl -decrypt -inkey privatkey.pem -in key.bin.enc -out key.bin 

幸运的是,我们再次拥有一个对称密钥来解密仍被加密的文本。

图片再次在下面,再次有一个键。



现在,我们使用新加密的方法解密使用对称加密密码加密的文件,然后使用非对称加密密码对称密钥解密。

 openssl enc -d -aes-256-cfb -in OWASP_Top_10-2017_\(en\).pdf.enc -out OWASP_Top_10-2017_\(en\)decrypt.pdf -pass file:./key.bin 

下面的证明。



现在:为什么这么复杂? 为什么不采用非对称加密来做所有事情?

我们尝试,直接去耙;)
我们有!

文件和密钥。



我们加密。

 openssl rsautl -encrypt -inkey publickey.pem -pubin -in OWASP_Top_10-2017_\(en\).pdf -out OWASP_Top_10-2017_\(en\).pdf.enc 

POW-POW-POOOOOOOOOOOOH。 错误。 密钥大小的数据过多。 对于非对称加密,密钥大小必须大于或等于明文。
与处理恶魔一样,OpenSSL可以为您提供所需的内容,但不能满足您的需求。 是的,加密文件为空。



但是您可以加密比密钥小的文件。 让我们尝试一下。

创建一个小文件。

例如,我这样做:

 echo "hellow world my name is admin is a secret text nobody know it hahahahaahah" > text.txt 



我们将使用世界上每个人都知道的公共密钥对它进行加密!

 openssl rsautl -encrypt -inkey publickey.pem -pubin -in text.txt -out text.txt.enc 

如您在底部图片中所见,文件已加密。 不清楚! 谁知道你是谁?



现在,为了进行实验的纯净,我们已经解密了源文件,并对其进行了解密。

 openssl rsautl -decrypt -inkey privatkey.pem -in text.txt.enc -out text.txt 



我们有一个解密的文件。 一切都很好。

为了传输所有这些加密的商品,最好在base64中对后者进行编码。 因此,在解密之前,必须先解码。
编码。

 openssl enc -base64 -in text.txt.enc -out text.txt.bs64 



已解码。

 openssl enc -base64 -d -in text.txt.bs64 -out text.txt.enc 



再一次,我们有一个没人能理解的乞!! 如果您了解,那么本文档不适合您!

这是使用OpenSSL实用程序创建密钥和数据加密时加密的工作方式。

稍后,我将描述块对称密码的加密模式。

Source: https://habr.com/ru/post/zh-CN417069/


All Articles