gpt4 book ai didi

ssh - 使用 openssl libcrypto 解析新的 openssh-key-v1 格式

转载 作者:行者123 更新时间:2023-12-02 14:29:03 32 4
gpt4 key购买 nike

我需要解析一个 SSH 私钥 ~/.ssh/id_rsa使用 openssl (libcrypto) 进入 EVP_PKEY*RSA* key 。直到最近,该文件仍以易于解析的标准 PEM 或 PKCS1 格式存储。然而,openssh 已经切换到一种更复杂的新格式。

结构是defined here和 PEM 编码它看起来像这样(使用 ssh-keygen 生成)

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABAnG3jyNb
SKSG19wHPhx2U1AAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQDtmnNl2AFg
9faMuZ/U38tY3+pDrOa2yoiOLeXQI3044xNiMiGrRW03wzWsaNCcI8ZnEeSvzr2HUq0YFQ
QQ6MaQp8cZmoGkOSnwhLAscocZOaoZwoj85w2hybuSy9fc99FqKbJ201a0++2BhTw4Syhs
LT3AOs+Z0hHXZEVWAfBsOd4icLnChBdEAsIBzEObdGsZXHiOcVgvcbJ7UOuQCkiJV3RX+P
IvTzivPQ8IGmsgYUj5KSPjZg03/tr3ePItuFQZH2p85dQlbOLyhtMpx6M5ErCAesxuTN6z
kHKtfRNfYXoDOgd5EBIc9hLnmQtpn2EjfIk+yW+yTiv0pwNUhoeFAAAD0BHcM21NrYK7Pu
C4m79CfD3ZRMdKzG+hUqrV6bRC8qK/iTnt/E4GvEOIOqqoQMQp7PLRP5CkeWRp4Y0nmpsP
zoSlVLvpJ1o36pSSpF6ClmsviAXjujB4wqOp+vq9KqfQfJT+khq4u2EaKwzclpfwaUe2lT
t/UdUok4n8BGVZl6Hw3vF+a8XWpM3ZWxFJXNaQ1bklfYraKDR483I2KJX/hT1Y+Shrl7hd
faqfI8A71lV7qYwqyEMBgwsbNzDYUpICwAEGp00pbX7ahBgo3OIL8Ay1LTbVRyZqMZGGSy
Ay4+WD5cgzU1sb7Z7XnKeRdEWyYUezvzDLpwYsx5RjXIDECBOwbRexh0X0taJw9MIS1YtV
dXz+8PRelQSn7jMHTLa1ILhF95KQBBnqN8EAZEXPnX50b6tz1y7/U1PR/+OxaEGX960m25
2WoXfSRraA6lA2b28r4NT2/BWfYg+6RVu9AQOwdZNWs1fU4ZwnN3yf2w+xEJvvnrXFJrIv
Hy6riJOIB9kSFI314vqmipsMpm7eJK7S3TCi8O6npfkhKTsU1rK4MW+gYp3LKTa2/eUy9r
Rfdgg3dZfq4e51th/9g6SCfrLaDhqTVf7AThOSlmqIpW2A1+4WmuSqhplZhZV5QA0Dyg26
mPHMFTIKs6P2dzgqTkfFxpEici6BeTiSBuMjeKau2HI8r6VD8fcpkvcARPHncoZAdQbars
+e9FhyNMY+EVzun95FUjlbSAFCjGUN81/XPAd+PERTtg+Z1h+QEb1jlZO6l+L62SYXZQO7
jZa3euvFTUxh4GAuWMF4SM7HibTrnY3POD4y8pIWWFsS6xbDQPcy1BdgS4A4IeAXNFbFsX
U7xAwiA0QOnF2Qwc6rTIfR8KiDJ2pMPuSF3CsvuX1VuJZ4EvUFXImBAmet5ChXA2Gw2Gkf
vItgB70xjRVJUjqOE1FE8Qb61BWEvH9pQMIHt59ldrcnLycOFmBIvWiCLyEb5s+asMsqui
GoMowxdmaM+tkNsJIWFqKviaqHL51ZxzWfZ5C8RIrC1bBjCPdHd+T6iQifNS1vJhgEPuG/
iI9R2aFMdz69CVnWJzhtTEvJFsBNiM1rKTXXFm00rCZozKM6xVaiDodgL5s3FxVr17WTMH
FaFMCH7JNAJMCR7080IuABHFubE2UyeCV6WxUgDpeGzLGOLXmLlrpyB5DHbkuNa8OohIDm
qW5yZcK4RoN1Foi4+tAs7qCJQAJBKFmwTc+5y6mQnq9s9jHQqBbyweHmK8VTHwiRpHbBv/
BQ3FL3t8pTZxv6msYq0+PUUZ3L8+k=
-----END OPENSSH PRIVATE KEY-----

第一步是用 PEM_read_bio 解析文本这将剥离 PEM header 并对数据进行 base64 解码。但目前尚不清楚如何从规范中解析结构。

前 15 个字节固定为 openssh-key-v1\0但从那里还不清楚。

最佳答案

解析这些的最简单方法是避免自己解析它们,而是使用 ssh-keygen -p -m PEM -f ~/.ssh/id_rsa将 key 转换为 PEM 格式,然后正常使用 OpenSSL 对其进行解析。

但是,如果您非常希望自己动手,那么您链接到的协议(protocol)描述实际上会为您提供您需要了解的大部分内容。缺失信息的(关键)部分是:

  • 所有整数都是网络字节序;
  • int是 32 位;
  • 最关键的是,string type 是一个长度值元组,其中 lengthuint32指示有多少接下来的八位位组组成了字符串;和
  • 各种公钥类型(ssh-dssssh-rsaecdsa-sha2-* 等)的格式记录在各种 RFC 中,您可以在 IANA registry for SSH Public Key Algorithm Names 中找到引用。 .

  • 各种 key 类型的私钥部分的推断留给读者作为练习,因为我还没有弄清楚。在(不久的)将来,我的 openssl-additions gem将有一个基于 Ruby 的 SSH private key parsing 实现,因为我需要为我自己的项目弄清楚,所以你可以从中获取参数排序。

    关于ssh - 使用 openssl libcrypto 解析新的 openssh-key-v1 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55260550/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com