添加密码后,macOS 私钥仍然看起来未加密

添加密码后,macOS 私钥仍然看起来未加密

我不确定这是否是在 macOS 上生成 ssh 密钥的一个怪癖,但是当我使用它ssh-keygen创建一对密钥,然后添加密码时,我可以抓取私钥,并且它没有写着 的标题ENCRYPTED

当我按照指南操作时,文件通常以如下方式开始:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED

如果它是加密的,但我的没有这样的标头。密钥立即开始。当我想将它添加到我的客户端时,系统会要求我输入密码,ssh-add但令我不安的是,ENCRYPTED 标头不存在。这是 macos 上的正常行为吗?

答案1

私钥文件有多种格式。它们都使用类似的封装(“BEGIN/END”和 Base64 编码),但只有其中一种格式(PEM)使用“Proc-Type”标头来存储加密信息;其他格式将其存储为二进制有效负载本身的一部分。

您阅读的教程演示了 OpenSSHssh-keygen当时使用的密钥格式。这并不意味着这是唯一的格式,也不意味着它将永远是相同的格式。

OpenSSH 以前使用过 PEM 密钥格式,但它在处理加密以及不同密钥算法方面存在各种限制。(例如,密钥派生方法很弱,并且该格式最初无法支持 Ed25519 密钥。)如果您看到(ECDSA 也是如此),则它采用的是 PEM 或 PKCS#1 或“OpenSSL”格式。BEGIN RSA PRIVATE KEY

TLS/SSL 相关软件(例如该openssl工具)现在更常使用 PKCS#8 格式,这种格式从外观上看非常相似,但将加密参数存储为主要 Base64 编码结构的一部分。如果您看到标头BEGIN PRIVATE KEY,则它采用 PKCS#8 格式,openssl asn1parse -i您可以检查它。

OpenSSH 的最新版本使用自定义“OpenSSH”密钥格式,其中的原因包括避免依赖 OpenSSL(以前用于读取/写入 PEM 和 PKCS#8 格式的密钥)以及支持 OpenSSL 当时不支持的密钥算法(当时,尚未指定 Ed25519 的 OID)。如果您看到标题,则它使用此格式。加密参数再次存储在密钥文件的主体中;如果您对其进行 Base64 解码,如果它已加密,您会看到“aes128-ctr bcrypt”字样,如果它未加密,则会看到“none none”。BEGIN OPENSSH PRIVATE KEY

相关内容