OpenSSH 密钥和 PuTTY 密钥有什么区别?

Yar*_*nux 55 ssh putty openssh

我发现ssh-keygen("ssh" package) 从puttygen(" putty " package)产生不同的密钥。

如果我使用ssh-keygen某些 SSH 服务器创建公钥和私钥将不接受我的密钥。如果我puttygen只使用一台服务器创建密钥,则接受它。

为什么 Linux 存储库不为它提出一些通用的解决方案(包)?

我发现了另一个包ssh-3.2.9.1,它创建了与 PuTTY 一​​起使用的密钥。但是为什么 SSH 中没有任何方便的解决方案呢?

Gil*_*il' 55

OpenSSH 是 SSH 协议事实上的标准实现。如果 PuTTY 和 OpenSSH 不同,那么 PuTTY 就是不兼容的那个。

如果您使用ssh-keygen默认选项通过 OpenSSH 生成密钥,它将适用于几乎所有服务器。不接受这样的密钥的服务器将是古董,使用不同的 SSH 实现,或者以奇怪的限制方式配置。某些服务器可能不支持非默认类型的密钥。特别是,ECDSA 密钥使会话建立速度稍微快一些,但只有最新版本的 OpenSSH 支持它们。

PuTTY 使用不同的密钥文件格式。它带有工具来在它自己的格式和 OpenSSH 的格式之间进行转换.ppk

您找到的这个 ssh-3.2.9.1 是一个商业产品,它有自己不同的私钥格式。没有任何理由使用它代替 OpenSSH。它的兼容性较差,需要付费,而且关于如何使用它的教程几乎为零。

  • 某些东西被广泛使用或占主导地位并不*不*意味着它是好的。 (2认同)
  • 专有和晦涩的东西_不_意味着它更好。- 酒吧 :-) (2认同)

slm*_*slm 29

大多数 Linux 发行版都有putty适用于 Linux 的PuTTY(包名)。您可以在 Linux 端安装 PuTTY 并用于puttygen将 .ppk 文件转换为常规ssh样式的密钥文件(称为 PEM 文件 - 即使它们的文件名中没有 .pem)。

puttygen id_dsa.ppk -O private-openssh -o id_dsa
Run Code Online (Sandbox Code Playgroud)

注意:您还可以使用puttygenssh样式 PEM 文件重新导入 PuTTY。

PuTTY 的作者选择了简单性,因此构成 PuTTY/ SSH-2密钥身份验证使用的底层安全性的公钥和私钥存储在一个专有的 .ppk 文件中。通常,这些密钥由ssh.

在 Linux 上,密钥文件通常保存在.ssh目录中。

在题为“将 PEM 转换为 PPK 文件格式”的 Stack Overflow 问题中,对转换过程进行了很好的概述。

PuTTY 的作者还在PuTTY 用户手册中讨论了他使用 .ppk 文件的理由。您可以在此处阅读第 8.2.12 节中的内容。


小智 17

它们都存储一个“RSA密钥对SSH协议的版本2”,并且可以转换互换; 但是,关于实际存储的格式差异:

来自https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/key-formats-natively.html

PuTTY 密钥格式的优点是:

  • 公钥的一半存储在纯文本中OpenSSH 的私钥格式对整个密钥文件进行加密因此客户端必须先询问您的密码,然后才能对密钥执行任何操作。特别是,这意味着它必须先询问您的密码,然后才能将公钥提供给服务器进行身份验证。PuTTY 的格式以明文形式存储公钥,只对私钥进行加密,这意味着它可以自动将公钥发送到服务器并确定服务器是否愿意接受使用该密钥的身份验证,并且它只会要求一个如果确实需要,请输入密码。

    我认为 OpenSSH 会读取一个.pub为此目的,如果它出现在私钥文件旁边,但这是一个混淆的根源,因为它经常方便(我见过人们替换一个私钥文件并.pub在它旁边留下一个过时的文件,然后非常对由此产生的 SSH 身份验证过程感到困惑!)。
  • 钥匙是完全防篡改的。以明文形式存储公钥的密钥格式可能容易受到篡改攻击,在这种攻击中,密钥的公共部分被修改,使得使用篡改密钥生成的签名泄露有关私人部分的信息。出于这个原因,PuTTY 的密钥格式包含一个 MAC(消息验证码),关闭了密码短语,并覆盖了密钥的公共部分和私人部分。因此,我们提供了以明文形式提供公钥的便利,但我们也立即检测到任何篡改攻击的尝试,提供安全性和便利性的组合,我认为这是在任何其他密钥格式中找不到的。作为附带的好处,MAC 还涵盖了密钥的注释,防止有人交换两个密钥并交换注释时可能发生的任何可能的恶作剧。

    OpenSSH 保持公钥加密的方法可能还提供了一些针对此类攻击的安全性,但尚不清楚它是否提供了适当的保护:为机密性而设计的加密通常会留下攻击者可以有效修改加密数据的方式。对于真正的完整性保护,您需要一个真正的专用 MAC,它的设计正是为了做到这一点。

[强调]