gpt4 book ai didi

检查 SSH 私钥是否加密

转载 作者:行者123 更新时间:2023-12-05 00:13:54 25 4
gpt4 key购买 nike

使用 ssh-keygen 生成的 key 对在 macOS 上可以有不同的格式。

  • macOS 可读的标准 PEM ASN.1 对象 SecKey API
  • 带有文本标题的 PEM
  • OpenSSH key
  • OpenSSH 加密 key

  • OpenSSH/BSD 使用这种非标准化格式 here .

    现在我只需要能够检查私钥是否设置了密码,这样我就可以提示用户输入它,而不必处理不同 key 格式的复杂性。

    macOS 上是否有通过 Swift 或 C API 快速检查 key 是否设置了密码的方法?

    最佳答案

    未加密和加密的私钥之间的区别在于 key blob 是加密的。您需要先解密私钥 blob 数据,然后才能使用私钥 blob。所以一旦加密的私钥数据被解码,你就可以像对待未加密的私钥数据一样对待它。
    未加密的私钥 blob PEM 文件如下所示:

    —–BEGIN PRIVATE KEY—–
    {base64 private key blob)
    —–END PRIVATE KEY—–
    加密的 RSA 私钥 PEM 文件如下所示:
    —–BEGIN RSA PRIVATE KEY—–
    Proc-Type: 4,ENCRYPTED
    DEK-Info: {encryption algorithm},{salt}
    {base64 encrypted private key blob)
    —–END RSA PRIVATE KEY—–
    例如
    —–BEGIN RSA PRIVATE KEY—–
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-256-CBC,AB8E2B5B2D989271273F6730B6F9C687
    {base64 encrypted private key blob)
    —–END RSA PRIVATE KEY—–
    因此,要解码私钥数据,您需要:
  • 解析 DEK-Info加密算法和盐(确认第一行的好主意是:“Proc-Type : 4,ENCRYPTED”)。
  • 解码 base64 加密的私钥 blob。
  • 根据salt和密码生成加密算法“key”和“IV”
  • 解码加密的私钥 blob。

  • 完成后,解密的私钥 blob 可以像未编码的私钥 blob 一样对待。
    支持的加密算法的数量相当多,因此您可能希望支持算法的子集。例如“DES-EDE3-CBC”、“AES-xxx-CBC”等
    要生成 IV,您需要将 salt 字符串转换为二进制。 salt 字符串是一个十六进制编码的字符串,因此使用十六进制字符串字符到字节转换器将每两个字符串字符转换为一个字节。
    为了生成加密算法 key ,您需要 key 大小(例如 DES-EDE3-CBC 是 192 位,AES-256-CBC 是 256 位)。使用循环将 MD5 哈希结果附加到 key 来构建 key “位”,直到生成所需的所有 key 位。
    MD5 HASH 循环生成将包括:
  • First MD5 Hash:IV的前8个字节和Passphrase的MD5哈希
  • 所有其他 MD5 Hashes 是最后一个 MD5 哈希结果和 IV 的前 8 个字节和密码短语的 MD5 哈希

  • 请参阅 EVP_BytesToKey 的 openssl 源代码 key 位生成示例的方法。
    现在可以使用上面的 IV 和 KEY 构建使用所选的加密算法对加密的私钥 blob 进行解码。

    关于检查 SSH 私钥是否加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57655324/

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