使用 ECDSA 与 Ed25519 公钥算法

Published: 2023-05-26

Tags: 笔记

本文总阅读量

前些天收到 Bitbucket 服务的邮件(详情),大意是说 June 20, 2023 的时候他们要更换其 RSA host key,并且不在支持 DSA host key,另外的事项是推荐大家使用 ECDSA 和 Ed25519 加密算法。

在这之前,我只用过 AES 和 DSA 类型的算法,本篇文章即对这两个算法进行了解,并在后续生成的 SSH Key 上使用他们。

以往我这样生成密钥,生成出的公密以 ssh-rsa 起始

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa

id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCx0Xbj3r9TGqMM5iumgMB41VQPajFxlpXMD/hMBMqHE6LgmGXsetB8SVPFGJ516UoVEDmn7V+Y/ZkhVo+CPIJLUzvQy4J6oOl1cAnfbXBDlKxoAL4vLSRpxFvBvBNMJc/afL2RJfedX0bjZ9KP3ohTHdLIP1tOlCbWSIrk9lRKmPDdv7D0b5SXgde7sq1Us2Y5txUXoB8KppWFh4WGCvdblOMvsQV5Q5cO4UE6gZPX1GHV49N4EcMt3Qw/L2x11e2dyOBZc6GY5MAzg/gP3NCdNeqYJrl54FA8J46M3T80wuaWyTjFJBe5XFnllaARHbu9qo3wXCgpVfd7w0Jell+BVN6ujiSUxI+xvTdQy8ejy+YDThqD8dhoAiF4ioppogDD5bazbyE/56Xqd/AlVd3W+ak4pB17suiQuZlQmZSdAblhw+nT42oX9CC8LF3wPmg+dMh6qUbtkRW3l8NqXL6u/4pJ18XzUa5bZXXLZIXaE2aKi0375DFd4l0Q4h21WcU= root@dc3

使用 ECDSA 和 Ed25519 算法只需要修改参数即可,其中 ECDSA 支持 -b 参数指定 521 也可以指定为 224256384,强度不同

生成 ECDSA 密钥

$ ssh-keygen -t ecdsa -b 521 -f ~/.ssh/id_ecdsa

id_ecdsa

ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAD/u4MgymZS3suOGBBkoVsh6NXkIwaMQW2GSrCX+bK8PzkZ6kBuWdKSqQCv1KXLQdpZIR+A71gI3ONFj3px13OYuABzsgfJAimdfSOOt3y6AAHSGeDErEV0H98GDf8yRbLhr2YKuYD2lXoEUH4jnefb//XJ3r6XubxswLqrAd0/yblEGg== root@dc3

生成 Ed25519 密钥

$ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519

id_ed25519

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICJIRRCW+ehwgzw2a/6DdRRMXgV1jeuUY/dminLXHy5R root@dc3

从结果看,id_ed25519 的共钥长度很短,这在传输和存储上更具优势。

四种加密算法的比较

RSA、DSA、ECDSA 和 Ed25519 是四种不同的加密算法,它们在原理、性能和安全性方面有所不同。以下是它们之间的一些主要区别

原理 RSA:基于大数因子分解问题,是一种广泛使用的非对称加密算法。 DSA:基于离散对数问题,是一种数字签名算法。 ECDSA:基于椭圆曲线密码学和离散对数问题,是一种椭圆曲线数字签名算法。 Ed25519:基于椭圆曲线密码学(特别是 Curve25519)和离散对数问题,是一种椭圆曲线数字签名算法。

性能 RSA:相对较慢,尤其是在签名和解密操作中。密钥和签名的大小也较大。 DSA:性能优于 RSA,但仍然不如基于椭圆曲线的算法。 ECDSA:性能于 RSA 和 DSA,密钥和签名的大小较小。 Ed25519:性能优于 ECDSA,密钥和签名的大小较小。

安全性 RSA:安全性取于密钥长度。随着计算能力的提高,需要更长的密钥以确保安全性 DSA:安全性取决密钥长度和参数选择。与 RSA 类似,需要更长的密钥以确保安全性。 ECDSA:安全性取决于椭圆曲线的选择和密钥长度。相对于 RSA 和 DSA,可以使用较短的密钥获得相同的安全级别。 Ed25519:安全性较高,抵抗侧信道攻击的能力较强。

兼容性 RSA:广泛支持,几乎所有的系统和应用都支持 RSA。 DSA:支持较广泛,但由于其性能和安全性限制,现在已经逐渐被 ECDSA 和 Ed25519 取代。 ECDSA:支持较广泛,许多现代系统和应用都支持 ECDSA。 Ed25519:相对较新,可能在一些较旧的系统中不受支持。

总的来说,RSA 和 DSA 是较早的加密算法,而 ECDSA 和 Ed25519 是基于椭圆曲线密码学的较新算法。 在性能和安全性方面,椭圆曲线算法(ECDSA 和 Ed25519)通常优于 RSA 和 DSA。

为什么不在推荐 DSA 算法?

  1. 密钥长度限制,推荐最长长度为 3072 位,但随着计算机性能的提升,可能无法提供足够的安全性。
  2. 性能问题,DSA 算法在签名时使用大量的模运算,性能可能较差。
  3. 随机数生成器如果质量不高或存在漏洞,很可能影响到 DSA 的安全。
  4. 长江后浪推前浪,ECDSA、EdDSA 等优秀算法的出现,更推荐使用新的算法。

EdDSA 是什么?

我在图中进行了标注,ECDSA 和 EdDSA 都是通用的方案,Ed25519 是 EdDSA 的特定实现。

如何选择

比较下来,Ed25519 是更为推荐的算法,安全性、大小、性能表现都很优秀,只有当老设备不支持时,依次考虑使用 ECDSA、RSA 算法。在使用 RSA 算法时也应使用至少 2048 位的 RSA 密钥。

使用免密登录服务器

我有一台机器还在使用密码登录。

Host dc3
  HostName 23.XX.XXX.154
  User root
  Port 29345

现在将共钥文件复制到服务器

$ ssh-copy-id -i ~/.ssh/id_ed25519.pub dc3

这个时候再次使用 ssh dc3 登录无需输入密码,ssh client 应该是默认使用了 id_ed25519 私钥文件进行认证。

用于 SCM 服务认证

Bitbucket 添加后推送代码进行测试

Github 也是支持 Ed25519