使用`ssh-keygen -t rsa`时密钥使用什么编码?

Ana*_*dus 3 openssh ssl

当我运行时:

ssh-keygen -t rsa
Run Code Online (Sandbox Code Playgroud)

要在 id_rsa.pub 和 id_rsa 等文件中生成公钥/私钥对,我的理解是公钥编码素数 p,私钥编码数字 pq。但是当我打开这些文件时,我看不到人类可读的数字,我看到的是字符序列。所以我的问题很简单:我在看什么?这些字符是否可以直接映射到数字,如果可以,通过什么约定/算法/编码?

Rom*_*nov 5

ssl密钥(私有和公有)通常存储在如此命名PEM格式

隐私增强邮件 (PEM) 是一种基于 1993 年定义“隐私增强邮件”的 IETF 标准集,用于存储和发送加密密钥、证书和其他数据的事实上的文件格式。虽然原始标准从未被广泛采用,并被 PGP 和 S/MIME 所取代,但它们定义的文本编码变得非常流行。PEM 格式最终由 IETF 在 RFC 7468 中正式化。

这种格式实际上是header,然后base64编码的二进制数据和footer。

Base64 是一组类似的二进制到文本编码方案,通过将二进制数据转换为基数 64 表示,以 ASCII 字符串格式表示二进制数据。术语 Base64 源自特定的 MIME 内容传输编码。每个 Base64 数字正好代表 6 位数据。因此,三个 8 位字节(即总共 24 位)可以由四个 6 位 Base64 数字表示。

对于ssh密钥,请从 dave_thompson_085 评论中查看以下内容:

注意 ssh-keygen 使用(几种)PEM 格式,但从不使用 7468 中的那种格式。过去对于 RSA,它默认为 OpenSSL 的两种“传统”(又名“遗留”)格式,未加密的 whcih 是 7468 格式,除了包含PKCS1,或密码加密,类似于 1421,具有 Proc-type 和 DEK-Info 以及加密 PKCS1 的 base64,但不是 7468-like。从 7.8 开始,它默认为 OpenSSH 自己的“新格式”(以前由选项 -o 调用),类似于 7468,但内容完全不同(XDR 样式而不是 ASN.1)。在几个堆栈上已经有很多关于这些的问题。

OpenSSH 公钥格式从不是 PEM(尽管商业 'SSH2' 类型是),只是 SSH 有线格式的 base64。最近有人提醒我这个 Q/A非常彻底地涵盖了私钥格式