在我仍然很少从事信息安全领域的实践中,我不得不面对一些密码学问题,或者说是加密问题,我很难找到明确的答案。 因此,我决定写一篇关于使用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实用程序创建密钥和数据加密时加密的工作方式。
稍后,我将描述块对称密码的加密模式。