当我跑步时:
ssh-keygen -t rsa
要在文件中生成公钥/私钥对,例如 id_rsa.pub 和 id_rsa,我的理解是公钥编码素数 p,私钥编码数字 pq。但是当我打开这些文件时,我看不到人类可读的数字,而是看到字符序列。所以我的问题很简单:我在看什么?这些字符是否可以直接映射到数字,如果可以,通过什么约定/算法/编码?
答案1
密钥 ssl
(私有和公共)通常存储在如此命名的PEM格式。
隐私增强邮件 (PEM) 是一种用于存储和发送加密密钥、证书和其他数据的事实上的文件格式,基于一组定义“隐私增强邮件”的 1993 年 IETF 标准。虽然最初的标准从未被广泛采用,并被 PGP 和 S/MIME 取代,但它们定义的文本编码变得非常流行。 PEM 格式最终由 IETF 在 RFC 7468 中正式确定。
这个格式其实就是header,那么64位基数编码的二进制数据和页脚。
Base64 是一组类似的二进制到文本的编码方案,通过将 ASCII 字符串格式的二进制数据转换为 radix-64 表示形式来表示二进制数据。术语 Base64 源自特定的 MIME 内容传输编码。每个 Base64 数字恰好代表 6 位数据。因此,三个 8 位字节(即总共 24 位)可以由四个 6 位 Base64 数字表示。
对于ssh
密钥,请查看以下 dave_thompson_085 评论:
注意 ssh-keygen 使用(几种)PEM 格式,但从来不使用 7468 中的格式。过去,对于 RSA,它默认使用 OpenSSL 的两种“传统”(又名“遗留”)格式,要么是未加密的,要么是 7468 类似的格式,除了包含PKCS1,或密码加密,与 Proc-type 和 DEK-Info 和加密 PKCS1 的 base64 类似 1421,但不是类似 7468。从 7.8 开始,它默认为 OpenSSH 自己的“新格式”(之前由选项 -o 调用),类似于 7468,但内容完全不同(XDR 样式而不是 ASN.1)。多个堆栈上已经有很多关于这些的问题。
OpenSSH 公钥格式从来都不是 PEM(尽管商业“SSH2”是这样),而只是 SSH 有线格式的 base64。最近有人提醒我这个问答相当彻底地涵盖了私钥格式