如何使用ssh-rsa公钥加密文本?


55

因此,场景是:假设我是Bob,我想为Alice加密一些消息。我唯一的公共密钥是她的ssh-rsaid_rsa.pub,如下所示:

SSH-RSA AAAAB3NzaC1yc2EAAAABIwAAAQEAyb + qaZLwgC7KAQJzYikf3XtOWuhlMXVv2mbTKa5dp0sHPRd2RaYnH8ZRkt7V8bjqct1IHGCuxI8xyoEp4at3FHe6j9RfWiarc1ldLUCmTtryI0GGpRs6Zpvqdtpcq / 1NCIYtUQAvsImyEFCtqmB2suDo1ZSllZQ0x9TCKHdCANYIOeaniuFzR57POgE3vxk / r6PO24oy8BIWqxvi29r0n1LUigVBJ7CmMHuzb4 / + i1v6PxV1Lqnj6osPP9GpXpsh8kLUCby / KcmcryWNdSP0esyCdDxkA5hlIuk8qL1vzsyPluUQuc0BEHu6nuw8WQlCF1mFFxcpJL + MhWEr01WIIw == sikachu@Sikachus-Notebook.local

因此,是否有一种方法可以使用此公钥加密字符串,以便她可以使用从id_rsa(生成自ssh-keygen)的私钥来解密邮件?

(我知道,如果您正在使用.pem密钥对文件,那是可能的。如果您可以向我展示如何将其转换为openssl支持的格式,那也很好!)

谢谢!


5
你和爱丽丝真的应该调查GPG ... gnupg.org ; D
天衣

4
哈哈哈,确实!但是,我这里ssh-rsa遇到的情况是我已经可以访问他们的公钥,并且我不想增加另一层复杂性(例如,要求接收者安装gpg等)
sikachu

Answers:


71

可以将ssh公钥转换为PEM格式(“ openssl rsautl”可以读取它):

例:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > id_rsa.pem.pub

假设“ myMessage.txt”是您的消息,应该使用公钥加密。

然后,只需像通常那样使用openssl rsautl和转换后的PEM公钥对消息进行加密即可:

openssl rsautl -encrypt -pubin -inkey id_rsa.pem.pub -ssl -in myMessage.txt -out myEncryptedMessage.txt

结果是您在“ myEncryptedMessage.txt”中的加密消息

要测试您的工作以使用Alice的私钥解密,请执行以下操作:

openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in myEncryptedMessage.txt -out myDecryptedMessage.txt

5
我将其包装在一个脚本中,该脚本从GitHub中提取用户的公共密钥。github.com/twe4ked/catacomb
twe4ked 2013年

这对我不起作用。我ssh-keygen没有-m选择。(我不知道如何向ssh-keygen索取它的版本。)替换-m-t作品,但随后openssl告诉我“无法加载公钥”。参见stackoverflow.com/questions/18285294/…
杰森·格罗斯

1
与Jason在MaxOS Mavericks上遇到的问题相同。用-t替换-m以启用密钥生成的密钥生成。
罗伯特·克里斯蒂安

8
请注意,这仅在文件足够小时起作用。例如200个字节。见stackoverflow.com/questions/7143514/...
h__

1
回应@hyh所说的,仅当输入文件较小时(行大约为254个字节,这才有效),否则它将提供“ rsa例程:RSA_padding_add_SSLv23:数据对于密钥大小而言太大:/SourceCache/OpenSSL098/OpenSSL098-52.20。 2 / SRC /加密/ RSA / rsa_ssl.c:73"的错误。
Devy

1

试用一下SSH-金库它使用ssh-RSA公共密钥加密“创建存储库”和SSH-RSA私钥解密“鉴于金库的内容”


-3

为什么不以不需要滚动自己的加密货币的超级明显的方式这样做呢?

Alice通过sftps发送到alice@bobserver.com,该站点设置为仅允许对帐户alice进行公钥身份验证。ssh的属性很好地确保了只有alice可以进行身份​​验证。即使是中间人攻击也失败了,因为(假设您禁用了ssh1并坚持正确的设置)使用DH进行的初始通信会创建一个值,该值对于alice和bob都是已知的,但对于中间人而言都不是已知的,并且可以用来进行身份验证没有回复或MITM攻击都无法看到通讯内容。

因此,让alice sftp进入您的盒子并下载文件。


9
使用openssl如何滚动自己的加密货币?
cmc 2014年

例如,由于消息大小,使用RSA加密1024个字符串将失败。为了克服此问题,实施者处于不稳定的状况,尤其是在消息重复的情况下。使用RSA加密不太可能重复的新对称密码和初始化矢量是更安全的,因此,为发送的所有消息生成唯一的密码文本,并获得对称密码速度,并减少密码和明文的数量攻击RSA密钥。希望有道理。:)
山姆

此方法要求Bob信任Alice或锁定bobserver.com,以使Alice不能做任何恶意的事情。
mwfearnley

从某种意义上讲,爱丽丝必须自己动手,而爱丽丝必须抛出大量异常操作才能解密,而不是从基础数学上自己动手。由于是从命令行实用程序而不是从API或理论角度来询问的,因此假设该人员实际上是想传递一些具体信息,而不是在ssh之上搭载新协议。因为实际上sftp似乎容易得多,是的,它确实需要查看服务器,信任Alice或随后清除服务器。
彼得·格德斯

在我看来,上一个实际上很容易受到某人拦截电子邮件的攻击,您可以在其中向alice确切解释她如何解密此异常消息,并提供一系列命令来安全地解密Charlie的MITM消息(openssl命令就像魔术一样)虽然大多数服务器都想尽办法),但服务器的构想却避免了所有这些,而是​​取而代之的是许多人都熟悉的标准命令,如果bob从计算机运行它,则无论如何他都会对其进行加密,并且无论如何都会信任它。显然,最佳答案取决于威胁模型,但是从q上下文来看,这可能会更好地为他们服务。
彼得·格德斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.