在我的/etc/ssh/
目录中,我可以看到我有三种不同类型的 ssh 密钥:
-rw------- 1 root root 607 Oct 4 22:43 ssh_host_dsa_key
-rw-r--r-- 1 root root 623 Oct 4 22:43 ssh_host_dsa_key.pub
-rw------- 1 root root 241 Oct 4 22:43 ssh_host_ecdsa_key
-rw-r--r-- 1 root root 194 Oct 4 22:43 ssh_host_ecdsa_key.pub
-rw------- 1 root root 1602 Oct 4 22:43 ssh_host_rsa_key
-rw-r--r-- 1 root root 378 Oct 4 22:43 ssh_host_rsa_key.pub
ssh 的 RSA、DSA 和 ECDSA 密钥之间有什么区别?我是否需要这三个密钥?
答案1
你需要所有这些吗?
不,您的 ssh 服务器只需要一个,并且客户端只需要支持一种类型的密钥进行 ssh 连接。
RSA、DSA、ECDSA、EdDSA 和 Ed25519 都用于数字签名,但只有 RSA 可用于加密。
RSA(里维斯特–沙米尔–阿德曼) 是最早的公钥密码系统之一,被广泛用于安全数据传输。它的安全性依赖于整数分解,因此无需安全的 RNG(随机数生成器)。与 DSA 相比,RSA 的签名验证速度更快,但生成速度较慢。
数字减影动脉造影(数字签名算法)是用于数字签名的联邦信息处理标准。其安全性依赖于离散对数问题。与 RSA 相比,DSA 的签名生成速度更快,但验证速度较慢。安全性可能被破坏如果使用了错误的数字生成器。
椭圆曲线数字图像分析(椭圆曲线数字签名算法) 是 DSA(数字签名算法)的椭圆曲线实现。椭圆曲线加密能够以较小的密钥提供与 RSA 相当的安全级别。它还具有 DSA 的缺点,即对不良 RNG 敏感。
埃德萨(爱德华曲线数字签名算法)是一种使用变体的数字签名方案Schnorr 签名基于扭曲的爱德华兹曲线。在 EdDSA 中,签名创建是确定性的,其安全性基于某些离散对数问题的难解性,因此它比要求每个签名都具有高质量随机性的 DSA 和 ECDSA 更安全。
Ed25519, 是个EdDSA 签名方案,但是使用SHA-512/256和曲线25519; 它是安全椭圆曲线那提供更好的安全性比 DSA、ECDSA 和 EdDSA 具有更好的性能(人为无法察觉)。
其他说明
RSA 密钥使用最为广泛,因此似乎得到了最好的支持。
ECDSA(于OpenSSH v5.7) 在计算上比 DSA 要轻,但除非你的机器处理能力很低,否则这种差别并不明显。
作为OpenSSH 7.0,SSH 不再默认支持 DSA 密钥 (ssh-dss)。根据 SSH 标准 (RFC 4251 及后续版本),DSA 密钥过去在任何地方都可以使用。
Ed25519 于openSSH 6.5。
答案2
它们是使用不同加密算法生成的密钥。使用 SSH 时,您可以选择使用不同的加密形式,有点类似于为 WiFi 选择不同加密方法(WPA2、WPA、WEP 等)的能力。
SSH 使用公钥加密,这意味着当您连接到 SSH 服务器时,它会广播一个公钥,您可以使用该公钥加密要发送到该服务器的后续流量。如果服务器配置为使用 RSA,它将是 RSA 算法生成的密钥。
您的计算机从您在问题中列出的密钥文件中发回自己的 RSA 公钥。服务器需要此密钥才能与您建立连接并回复。
所有三个密钥都存在于您的计算机上,因为您连接的任何给定 SSH 服务器都可能配置为使用这些算法中的任何一种。您的计算机将发回一个与服务器使用的类型匹配的唯一密钥,您的密钥已通过相同的算法在您的计算机上生成。
以下是一些进一步的资源:
https://security.stackexchange.com/questions/5096/rsa-vs-dsa-for-ssh-authentication-keys
http://en.wikipedia.org/wiki/Public-key_cryptography
http://en.wikipedia.org/wiki/RSA_(算法)