公钥签名算法在信息安全领域中扮演着至关重要的角色,它们用于验证数据的完整性和真实性。
比如最常用的场景就是ssh的免密登录情况,我们需要生成私钥、公钥,以前我们使用的比较多的算法是RSA,但是最近发现新的VPS系统中使用了新的算法,叫做ed25519。查了一下相关的资料,原来这个算法针对intel的CPU还做了优化,可以提供更快、更安全的加解密。
Ed25519 算法
Ed25519 是一种基于椭圆曲线密码学的公钥签名算法。它使用 Curve25519 曲线,是由丹麦密码学家 Daniel J. Bernstein 提出的一种高效安全的算法。
RSA 算法
RSA 算法是一种基于大整数因子分解的公钥加密算法。它由 Ron Rivest、Adi Shamir 和 Leonard Adleman 三位数学家于 1977 年提出,至今仍然被广泛应用。RSA 算法在安全性上有一定优势,但在性能方面相对较低。
Ed25519 与 RSA 的比较
安全性:
Ed25519 基于椭圆曲线密码学,其密钥长度较短但安全性较高,抵抗量子计算攻击的能力强。
RSA 则基于大整数因子分解,其密钥长度需相对较长才能保证较高的安全性,且在量子计算攻击面前相对脆弱。
性能:
Ed25519 在签名和验证过程中通常比 RSA 更快速,尤其在移动设备等资源受限环境下性能表现更为突出。
RSA 的加解密速度相对较慢,特别是在处理长文本时性能下降更为明显。
使用 Ed25519 生成密钥对
Ed25519 算法的工具集中包含了生成密钥对的功能。以下是使用 openssl
工具生成 Ed25519 密钥对的示例命令:
openssl genpkey -algorithm ED25519 -out private_key.pem
openssl pkey -in private_key.pem -pubout -out public_key.pem
这将生成一个私钥文件 private_key.pem
和一个相应的公钥文件 public_key.pem
。
如果是使用ssh-keygen
工具的话,示例如下:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "[email protected]"
好奇去查了一下Ed25519 名字的由来,为什么是25519呢?
原来"Ed" 表示这个算法是由 Daniel J. Bernstein 设计的,"25519" 则表示 Curve25519 曲线中的素数的位数 p = 2255-19 。
评论区