AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1477472
Accepted
jww
jww
Asked: 2019-09-01 02:48:46 +0800 CST2019-09-01 02:48:46 +0800 CST 2019-09-01 02:48:46 +0800 CST

OpenSSH 公钥文件格式?

  • 772

我在解析 OpenSSH 公钥文件时遇到问题。我相信(但我不确定)格式在 RFC 4253,安全外壳(SSH)传输层协议第 6.6 节,公钥算法中有详细说明。

对于 RSA 密钥,RFC 说:

“ssh-rsa”密钥格式具有以下特定编码:

string    "ssh-rsa"
mpint     e
mpint     n

这里的 'e' 和 'n' 参数形成签名密钥 blob。

这是问题开始的地方。该文档没有提供语法,也没有定义什么string和mpint是。这导致:

$ cat rsa.ssh.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSNM6RVVmwN3y0NurIQnmZgjcx5K5zzZu9nDqopW4J
In/mr8OYZI3heSJShnIM8EThvwVGXXXyyJVRQAvRHYFO4DxS6bufSNWr3BxBGaGYlYxI9mgvQnT6+MzE
3oZyEMdQNPlV5VfbileXlrPoAk1TkGdVdhwdLJMI2B4KUyMf+Q== jwalton@test

接着:

$ echo 'AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSNM6RVVmwN3y0NurIQnmZgjcx5K5zzZu9nDqopW4
JIn/mr8OYZI3heSJShnIM8EThvwVGXXXyyJVRQAvRHYFO4DxS6bufSNWr3BxBGaGYlYxI9mgvQnT6+M
zE3oZyEMdQNPlV5VfbileXlrPoAk1TkGdVdhwdLJMI2B4KUyMf+Q==' | base64 -d > rsa.bin

最后:

$ hexdump -C rsa.bin
00000000  00 00 00 07 73 73 68 2d  72 73 61 00 00 00 03 01  |....ssh-rsa.....|
00000010  00 01 00 00 00 81 00 d2  34 ce 91 55 59 b0 37 7c  |........4..UY.7||
00000020  b4 36 ea c8 42 79 99 82  37 31 e4 ae 73 cd 9b bd  |.6..By..71..s...|
00000030  9c 3a a8 a5 6e 09 22 7f  e6 af c3 98 64 8d e1 79  |.:..n.".....d..y|
00000040  22 52 86 72 0c f0 44 e1  bf 05 46 5d 75 f2 c8 95  |"R.r..D...F]u...|
00000050  51 40 0b d1 1d 81 4e e0  3c 52 e9 bb 9f 48 d5 ab  |[email protected].<R...H..|
00000060  dc 1c 41 19 a1 98 95 8c  48 f6 68 2f 42 74 fa f8  |..A.....H.h/Bt..|
00000070  cc c4 de 86 72 10 c7 50  34 f9 55 e5 57 db 8a 57  |....r..P4.U.W..W|
00000080  97 96 b3 e8 02 4d 53 90  67 55 76 1c 1d 2c 93 08  |.....MS.gUv..,..|
00000090  d8 1e 0a 53 23 1f f9                              |...S#..|
00000097

所以公钥文件中似乎有未记录的字段。RFC 似乎没有引用其他文档来定义字段。RFC 也未能记录私钥文件。我此刻停滞不前。

OpenSSH 在哪里定义其密钥文件中使用的字段?

public-key openssh
  • 1 1 个回答
  • 16448 Views

1 个回答

  • Voted
  1. Best Answer
    user1686
    2019-09-01T03:36:22+08:002019-09-01T03:36:22+08:00

    所以公钥文件中似乎有未记录的字段。RFC 似乎没有引用其他文档来定义字段。

    它们在 RFC 4251“安全外壳 (SSH) 协议体系结构”第 5 节中定义。

    RFC 也未能记录私钥文件。

    SSH 协议根本不记录任何文件格式。它仅在公钥作为 SSH 协议的一部分发送时定义序列化(例如,当客户端发送 SSH_MSG_USERAUTH 以提供其公钥时)。

    因此,由于私钥永远不会作为 SSH 协议的一部分通过网络发送,因此它的序列化也不需要成为规范的一部分——只有该密钥生成的签名需要具有定义的格式。

    OpenSSH 在哪里定义其密钥文件中使用的字段?

    对于公钥,OpenSSH 很可能选择重新使用相同的 RFC 4253 格式将它们存储在文件中,因为这是最方便的选择(即它已经有了序列化代码)。规范并不要求这样做,实际上大多数其他客户端都有自己的格式。

    因为 OpenSSH 使用 OpenSSL 作为加密代码(算法、密钥生成),以前版本的 OpenSSH 只是使用 OpenSSL 函数提供的任何格式存储私钥——这是 DER 序列化的 PKCS#1 'RSAPrivateKey' 格式(也通常称为 PEM 格式) 大多数时候。有关格式的 ASN.1 定义,请参见RFC 3447。

    (OpenSSL 本身现在更喜欢以 PKCS#8 格式存储私钥,这意味着 OpenSSH 也可以加载这些密钥,尽管它不编写它们。有关容器格式的 ASN.1 定义,请参见RFC 5208。 )

    您可以通过“BEGIN RSA PRIVATE KEY”标头识别 PKCS#1 格式,并通过“BEGIN PRIVATE KEY”标头识别 PKCS#8。您可以使用dumpasn1或openssl asn1parse调查其内容,以及openssl rsa和openssl pkey。

    最近版本的 OpenSSH 为私钥文件发明了一种新的自定义格式。容器格式记录在PROTOCOL.key中,各个密钥格式 [可能?] 与ssh-agent使用的相同,它记录在draft-miller-ssh-agent中。此格式使用 RFC 4251 数据类型。


    其他 SSH 软件通常有不同的格式。例如,PuTTY 使用“PPK”格式(我记得在某处有文档,但奇怪的是我找不到在哪里)来存储公钥和私钥。它的Public-Lines字段存储相同的 RFC 4253 公钥,而私有字段是自定义的。

    还有RFC 4716,它声称是“ SSH公钥格式”,但它通常不被认为是 SSH 的组成部分。(SSH.COM、SecureCRT 和可能的 MultiNet SSH 使用这种格式。)

    • 13

相关问题

  • 在SSH转发中,远程ssh-agent是否存储凭据?

  • 像scp一样使用sftp

  • 安装 OpenSSH Beta(失败)

  • 如何使用 ssh_config 匹配用户

  • 加载密钥“ec256.pem”:尝试从私钥生成公钥时抛出无效格式

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    Windows 10 服务称为 AarSvc_70f961。它是什么,我该如何禁用它?

    • 2 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Marko Smith

    ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1056)

    • 4 个回答
  • Marko Smith

    我如何知道 Windows 安装在哪个驱动器上?

    • 6 个回答
  • Martin Hope
    Albin 支持结束后如何激活 WindowsXP? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch Windows 10 删除大量小文件的速度非常慢。有什么办法可以加快速度吗? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Ctrl+C 和 Ctrl+V 是如何工作的? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve