更新SSH key为Ed25519

SSH key对于开发者来说并不陌生,不管是远程登录还是git提交代码,SSH key与使用账号密码相比,更加安全便捷。本文介绍目前最新的key格式 Ed25519。

SSH常见key格式

  • DSA 它是不安全的,OpenSSL从v7版本开始已放弃对其支持,如果你正在使用,请马上升级。
  • RSA 安全性依赖于key的大小,3072位或4096位的key是安全的,小于此大小的key可能需要升级一下,1024位的key已经被认为不安全。
  • ECDSA 安全性取决于你的计算机生成随机数的能力,该随机数将用于创建签名,ECDSA使用的NIST曲线也存在可信赖性问题。
  • Ed25519 是目前最推荐的公钥算法。

Ed25519的优势

OpenSSL 从6.5版本引入Ed25519,是使用Twisted Edwards curve的EdDSA实现。与DSA或ECDSA相比,它使用的是椭圆曲线加密技术可提供更好的安全性和性能。

RSA是目前使用最广泛的SSH key格式,但同Ed25519相比,RSA速度更慢,且当key小于2048位时是不安全的。

Ed25519公钥更为紧凑,仅68个字符。生成密钥和签名的过程都非常快,使用Ed25519进行批量签名验证也很快。它是为防碰撞而设计的,防哈希冲突。

生成Ed25519密钥

ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/id_ed25519 -C "john@example.com"

参数说明:

  • -o : 使用新的OpenSSH格式来存储私钥,当使用ed25519格式时,默认会启用此选项
  • -a : 进行几轮KDF。值越大则密码验证越慢,也能更好的抗暴力破解。
  • -t : 创建的key的类型,我们使用ed25519
  • -f : 生成的文件名
  • -C : 可选注释,通常写自己的邮箱

生成好后,就可以像以往一样使用了。

对于macOS用户,为了自动使用key并且把密码保存在keychain中,需要额外的设置 ~/.ssh/config

1
2
3
4
5
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
IdentityFile ~/.ssh/id_rsa # Keep any old key files if you want

然后将私钥添加到ssh agent:
ssh-add -K ~/.ssh/id_ed25519

也可以在ssh的时候自定义使用哪个key,

1
2
3
4
5
Host awesome
HostName 198.222.111.33
User john
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes

然后使用 ssh awesome 即可登录。

(完)
(原创文章,转载请注明出处)