RSA 私钥可能会被分配一个“口令”,据我所知,这个口令旨在提供一些次级安全性,以防有人带走私钥文件。
如何实现安全密码层?
口令只是一个密钥,用于使用对称密码(通常是 DES 或3DES)加密包含 RSA 密钥的文件。为了使用该密钥进行公钥加密,首先需要使用解密密钥对其文件进行解密。Ssh 通过询问您的密码短语自动完成此操作。
如果有人拿到了密钥的文件,除非他们知道用来加密文件的密码,否则就无法使用它。
存储在通用文件系统上的私钥(与防篡改、特殊用途的硬件令牌相反)如果没有保护,很容易被盗取。文件系统权限似乎已经足够,但是通常可以绕过它们,特别是如果攻击者具有对计算机的物理访问权限。
一个强对称密码,用一个好的密码键入,有助于防止这种情况。一个好的 RSA 私钥太长以至于记不住(至少对我来说) ,但是小得多的对称密钥可以提供相同级别的安全性。存储在大脑中的相对较短的对称密钥用于保护存储在磁盘上的大型私钥。
Ssh-keygen 使用 OpenSSL 生成 RSA 密钥并以 PEM 格式存储它。您正在讨论的加密是特定于 PEM 的。如果你看一下你的密钥文件,
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,5B01E932988DC66B EPESt4ZVIrxnQXxxWWVa7cCR+vgNZ/4vTu4mdq6pjaW7jMZoB8HV+mA745mQkQw7 i+YtdVs/JqOeyGiw/3McxYYKZTlhyh7MvfIr1n8ZdZmcjQz+oFqMxChFU3r8BGgA
“ DEK-Info”头有所有的信息,你需要解密的密钥,只要你知道密码短语。“ DES-EDE3-CBC”指三重 DES (在 EDE 模式下)。全血细胞计数是链接模式。十六进制数是 CBC 所需的初始矢量。
PEM 是一种非常古老的格式,因此它只支持 DES/TripleDES。后来添加了 AES 和 Blowfish,但并非所有实现都支持它们。我的 ssh (OpenSSH 5.2)只支持 DES 和 TripleDES。