Answers:
在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,但不直接加密消息)。
openssl
命令行工具是不同命令的混合。一些证书(大多数是操纵证书的证书)可能有用,但由于其语法和参数古怪,因此很难正确使用。某些工具(例如rsautl
)很好,但不提供有用的功能,它们只是公开原始的加密原语,例如RSA加密几乎只用于加密对称密钥以进行混合加密。像这样的某些工具enc
很难安全使用,如果不存在,世界会变得更好。
首先,如果您只想进行良好的加密,则应查看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这样的键哈希 这需要知识的秘密才能生成,从而提供完整性以外的数据真实性。
在下面,请注意,您可以指定所需的任何算法,无论是列出的算法还是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 <you@youraddress.com>' \
-to 'Her Fullname <her@heraddress.com>' \
-subject 'My encrypted reply' |\
sendmail her@heraddress.com
如何签名S / MIME消息?
如果您不需要对整个邮件进行加密,但您确实希望对其进行签名,以确保收件人可以确定邮件的完整性,则该方法与加密方法相似。主要区别在于您需要拥有自己的密钥和证书,因为您无法使用收件人的证书进行任何签名。
openssl smime \
-sign \
-signer /path/to/your-cert.pem \
-in my-message.txt \
-from 'Your Fullname <you@youraddress.com>' \
-to 'Her Fullname <her@heraddress.com>' \
-subject 'My signed reply' |\
sendmail her@heraddress.com
(来自http://www.madboa.com/geek/openssl/)
(er ...所有这些反斜杠-应该反斜杠转义。不知道发生了什么,因为它在我的编辑框中可以正常显示!
openssl enc
因为enc
它仅用于对称加密。是的,openssl的选项组织得不太好。非对称算法有其自己的命令:rsa
/ dsa
/ dh
操纵密钥,rsautl
/ dsautl
加密/解密/验证/签名,和genrsa
/ gendsa
/ gendh
生成密钥。
openssl
?