it-swarm.cn

如何使用RSA和OpenSSL加密消息/文本?

我有爱丽丝的公钥。我想向Alice发送RSA加密消息。如何使用openssl命令来完成?

消息是:

嗨,爱丽丝!请带晚饭吃!

29
LanceBaynes

openssl手册openssl手册页)中,搜索RSA,您会看到用于RSA加密的命令是rsautl。然后阅读 rsautl手册页 以查看其语法。

echo 'Hi Alice! Please bring malacpörkölt for dinner!' |
openssl rsautl -encrypt -pubin -inkey alice.pub >message.encrypted

默认 填充方案 是原始PKCS#1 v1.5(仍在许多协议中使用)。 openssl还支持OAEP(现在推荐)和原始加密(仅在特殊情况下有用)。

请注意,直接使用openssl通常是一种练习。实际上,您将使用 gpg 之类的工具(该工具使用RSA,但不直接加密消息)。

37

首先,如果您只想进行良好的加密,则应查看 GnuPG 。但是,如果您进行实验并且只是想学习其工作原理,则需要了解 [〜#〜] rsa [〜#〜] 是什么。 RSA并非旨在加密任意字符串,而是一种对整数进行加密的算法。具体来说,是0到n-1之间的整数,其中n是来自公共密钥的模数值。当您谈论一个1024位的RSA密钥时,这意味着需要1024位将模数存储在二进制文件中。这是原因之一,RSA与对称密钥密码结合使用,例如 [〜#〜] des [〜#〜][〜#〜] aes [〜# 〜] 。您可以为AES生成一个随机的256位密钥,并使用1024位RSA公共密钥对该密钥进行加密。然后,任何访问私钥的人都可以提取对称密钥并使用AES解码消息。 RSA的完整标准称为 PKCS#1

此外,DES和AES是块密码。它们仅加密特定大小的块中的数据。DES使用64位块,而AES使用128位要加密多个块,必须使用 操作模式 ,例如CBC或CTR。这些模式指定如何使用块模式密码对位流进行加密。

最后,确认收到的数据很重要。虽然攻击者可能无法读取传输中的数据,但如果没有完整性或真实性应用于数据流,则攻击者可能能够翻转位而不进行检测。攻击者可以轻易地猜测到端口443的SSL连接可能是以GET /开头的网页请求,并且他可以翻转位以将其更改为PUT /,而不会干扰其余的加密。一种简单的完整性方法是在末尾附加MD5或SHA-1总数,但这仅提供数据完整性,而不提供数据真实性。任何对数据流有全面了解的人都可以生成正确的总和,一种更安全的方法是使用 [〜#〜] hmac [〜#〜] 之类的密钥哈希,这需要了解以下内容:生成的密钥,从而提供完整性以外的数据真实性。

25
penguin359

在下面,请注意,您可以指定所需的任何算法,无论是列出的算法还是RSA(尽管我不知道OpenSSL用于RSA的确切名称)

使用“ openssl enc -help”获取系统上支持的密码列表,并将其作为参数传递。例如,“-aes256”

请注意,在我的系统上,我的选项中没有RSA-至少使用该名称。


如何加密S/MIME消息?

假设某人向您发送了她的公共证书,并要求您加密给她的邮件。您已将她的证书另存为her-cert.pem。您已将回复保存为my-message.txt。

要获得默认(尽管相当弱)的RC2-40加密,只需告诉openssl消息和证书位于何处。

openssl smime her-cert.pem -encrypt-在my-message.txt中

如果您确定自己的远程通讯员具有可靠的SSL工具包,则可以指定更强大的加密算法,例如三重DES:

openssl smime her-cert.pem -encrypt -des3-在my-message.txt中

默认情况下,加密的消息(包括邮件头)被发送到标准输出。使用-out选项或您的Shell将其重定向到文件。或者,更棘手的是,将输出直接传递到sendmail。

openssl smime her-cert.pem \
   -encrypt \
   -des3 \
   -in my-message.txt \
   -from 'Your Fullname <[email protected]>' \
   -to 'Her Fullname <[email protected]>' \
   -subject 'My encrypted reply' |\
 sendmail [email protected]

如何签名S/MIME消息?

如果您不需要对整个邮件进行加密,但您确实希望对其进行签名,以确保收件人可以确定邮件的完整性,则该方法与加密方法相似。主要区别在于您需要拥有自己的密钥和证书,因为您无法使用收件人的证书进行任何签名。

 openssl smime \
   -sign \
   -signer /path/to/your-cert.pem \
   -in my-message.txt \
   -from 'Your Fullname <[email protected]>' \
   -to 'Her Fullname <[email protected]>' \
   -subject 'My signed reply' |\
 sendmail [email protected]

(来自 http://www.madboa.com/geek/openssl/

(er ...所有这些反斜杠-应该反斜杠转义。不知道发生了什么,因为它在我的编辑框中可以正常显示!

5
draeath