假设我以前创建了私钥/公钥组合,并且当时决定不使用密码保护私钥。如果以后我决定提高安全性并改用受密码保护的私钥,是否需要生成一个新的私钥/公钥对,还是可以仅将密码添加到现有的私钥中?

也可能相反,我可以从现有私钥中“删除”密码吗?

#1 楼

请注意:如laverya的回答所述,openssl以某种方式(取决于您的威胁模型)可能不够用的方式加密密钥。


当然您可以添加/稍后删除密码。



添加一个密码(假设它是一个rsa密钥,否则使用dsa

openssl rsa -aes256 -in your.key -out your.encrypted.key
mv your.encrypted.key your.key
chmod 600 your.key


-aes256告诉openssl使用AES256加密密钥。

正如ArianFaurtosh正确指出的那样:对于加密算法,您可以使用aes128aes192aes256camellia128camellia192camellia256des(绝对应该避免),des3idea


将其删除

openssl rsa -in your.key -out your.open.key


您会被要求提供您的通过省略-aes256来最后一次设置密码短语,您告诉openssl不对输出进行加密。

mv your.open.key your.key
chmod 600 your.key




评论


这仅适用于OpenSSL及其兼容的东西,虽然相当多,但远非如此。正如laverya正确指出的那样,OpenSSL的“传统”私钥(PEM)加密使用了非常弱的PBKDF-MD5的一次迭代。使用pkcs8 -topk8 [-v2 $ cipher]可以做得更好(尽管不是最好),并在1.1.0+中添加-niter $ n,并且可以承受的计数最高(默认值,而在1.1.0之前是唯一值,是2048)。

–dave_thompson_085
19-2-12在2:28



@ dave_thompson_085这应该是一个答案。在现代版本的openssl中,openssl pkcs8 -topk8命令可以通过大量迭代来执行scrypt或bcrypt。即使在较旧的版本中,它也可以执行2048次迭代的pbkdf2。根据您的openssl版本,您可能会使用Triple-DES作为密码。

–布赖恩·明顿(Brian Minton)
19年5月17日在3:30

@BrianMinton:抱歉,我当时错过了这个,但是这个Q不知何故复活了。 1.1.0+支持scrypt,我之前没有注意到,但不支持bcrypt。 OTOH我不会忘记任何限于TDES的密码版本-我仍然可以运行的最旧版本,从2010年开始在VM上为0.98m,支持PBES2和AES,以及Blowfish CAST IDEA和DES DES3。 (与PBES1或PKCS12PBE相反,即使在最新的OpenSSL上,您也只能通过那些已过期的RFC中的方案定义将DES3或DES或RC2限制为现在都无用。)

–dave_thompson_085
20 Dec 25'5:14

#2 楼

尽管当时Guntbert的回答很好,但有点过时了。 openssl rsa -aes256使用密码的md5哈希作为加密密钥来创建加密文件,该加密文件比您期望的要弱-并取决于您的观点,实际上它可能比纯文本要差。 (如果您为ssh密钥和登录名使用相同的密码,破解md5哈希将比攻击速度快得多,但是系统存储了密码-禁止使用Windows XP)
现代的解决方案是使用ssh-keygen -p -o -f PRIVATEKEY ,这将允许您输入密码,然后使用加密版本覆盖现有私钥。这使用了bcrypt pbkdf,即使在默认的16个回合中运行,它也比md5慢FAR。在这种情况下,“慢得多”意味着在十分之一秒半之间,而不是一百万分之一秒–登录时不会注意到,而是在破解密码时有很大的区别。

评论


值得注意的是,openssh实现的内容与标准bcrypt有一些差异。最明显的变化是“回合”实际上是用sha512哈希密码,然后使用64回合导出密钥再用bcrypt再次哈希的次数,然后是对已知块进行64轮加密。标准bcrypt使用2个成本回合来导出密钥,然后使用64个回合对已知块进行加密。对于相当于14的普通bcrypt开销,它应该大致为2 ^ 14/128 = 128,尽管与openssh花费更多时间进行加密并不完全相同。

– AndrolGenhald
19年2月11日在20:06

如果您不想使用(更强的)新的openssh密钥格式,请删除-o。某些应用程序确实可以识别它。

– JohannSchwarz
20年7月29日在7:45

latacora.singles/2018/08/03/the-default-openssh.html是一个损坏的链接

–hanzo2001
20年8月6日在9:10

已更新为使用指向损坏的链接@ hanzo2001的archive.org-感谢您的参与!

– laverya
20年8月8日,0:38

@ Binarus + -o在7.8以下创建的OpenSSH“新”格式,默认情况下,因为根本不适用于OpenSSL。您可以使用ssh-keygen将其转换为与OpenSSL兼容的“旧”格式。 PuTTY的最新版本中的puttygen也可以处理它,并具有多个输出选项。

–dave_thompson_085
20 Dec 25'5:18



#3 楼

当私有文件受到“密码保护”时,它仅意味着存储在某处的密钥字节已使用源自密码的对称密钥进行了加密。私钥可以很容易地编码为字节序列,并且可以像任何文件一样进行复制,加密和解密。此处的重点是密码全部与存储有关:要使用私钥(例如,对某物进行签名)时,首先要在某些计算机的RAM中对其进行解密,然后再继续使用未加密的私钥。键。相应地,RSA密钥对没有什么特别之处,可以使其适合或不适合于密码保护。密码保护实际上是一个正交的问题。

当然,如果私钥曾经存储在某些物理介质(例如硬盘)上而没有任何额外的保护,那么它可能会留下可利用的痕迹那里。详细信息在很大程度上取决于实际用于私钥存储的系统。例如,Windows系统使用DPAPI来存储用户的私钥,而DPAPI做出了一些额外的努力,以使存储的密钥不泄漏(这些努力是否成功还有待证明)。

评论


我可以建议您在这种情况下解释“正交”的含义吗?

–冈伯特
2014年6月1日下午16:57

@guntbert,在这种情况下,“正交”可以定义为“相关但独立”。就是证书有效性和证书安全性的问题是相关的(因为它们都影响系统的安全性和功能),但是它们是不同的问题,它们的解决方案不能直接交互。

– Molomby
16-3-22在3:52



您的计算机可能受到了损害,攻击者可以读取您已安装的加密硬盘上的所有文件,但无法读取您的ram。在这种威胁模型中,加密私钥可为您提供额外的安全性。

–詹斯·蒂默曼(Jens Timmerman)
17/12/14在11:08