ssh で使っている鍵が RSA 2048 ビットでちょっと古くなってきているということもあり、 OpenSSH 6.5 で追加された ed25519 鍵に更新することにしました。
鍵の種類
GitHubでEd25519鍵をつかう の説明が詳しいですが、他のサイトでも調べた情報によると
- RSA の 2048 ビットが今の
ssh-keygen
でのデフォルトなので主流 - RSA や ECDSA は
ssh-keygen
に-b
でビット数が指定できる - ECDSA の 521 ビットは 512 の間違いではない
- ed25519はビット数が指定出来ない
- OpenSSH のssh-keygenは1024bitのDSA鍵しか作れない (GitHubユーザーのSSH鍵6万個を調べてみた)
- DSA 鍵は弱いので使うべきではない
- ed25519はECDSAより署名生成/検証のパフォーマンスが良い
などの情報がありました。
ビット数で悩まなくて良いのと、パフォーマンスが良いという情報があったので、 ed25519 を使うことにしました。
主な環境
OpenSSH のバージョンは ssh -V
で調べました。
- OS X El Captitan 10.11.6 の OpenSSH_6.9p1, LibreSSL 2.1.8
- Ubuntu 14.04.5 LTS (trusty) の OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8, OpenSSL 1.0.1f 6 Jan 2014
- Debian GNU/Linux 8.6 (jessie) の OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016
バージョン情報
Debian は https://packages.debian.org/openssh-server によると wheezy (oldstable) は 1:6.0p1-4+deb7u6 で対応してなさそう (wheezy-backports が 1:6.6p1-4~bpo70+1 なので backports を使えば対応できそう) で、 jessie (stable) は 1:6.7p1-5+deb8u3 なので、今の安定版以降なら問題なく ed25519 が使えそうです。
Ubuntu は http://packages.ubuntu.com/openssh-server によると precise (12.04LTS) が 1:5.9p1-5ubuntu1.10 で対応してなさそうでしたが、 trusty (14.04LTS) が 1:6.6p1-2ubuntu2.8 で、 現在主流のバージョンでは問題なく使えそうでした。
鍵生成
vagrant 環境で鍵を生成して比較してみたところ、 ed25519 は公開鍵が RSA と比べてかなり短いことがわかりました。 ついでに比較してみたところ、 ECDSA よりも短いということがわかりました。
% ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/vagrant/.ssh/id_ed25519.
Your public key has been saved in /home/vagrant/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:tlGs9kP67mLZzd9lh1/UJY2R/vZc1Q1GA9gyADsRGlw vagrant@yakkety64
The key's randomart image is:
+--[ED25519 256]--+
| ...Eo.. o.o+. |
| .o o .+ . += |
| . o oo oo.=|
| . o ..*|
| S . .+|
| o * o+|
| oooo .oB|
| +...o +*|
| . ++ .. o|
+----[SHA256]-----+
% cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGvN6KKrqsvbFOfLclK/fYIDye6Lms7NhOn0yYNkjMza vagrant@yakkety64
% ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_ecdsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/vagrant/.ssh/id_ecdsa.
Your public key has been saved in /home/vagrant/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:DebC1pOk6EEL5MVGP0PIziMdAmzgmqAYJl/C14DuSOM vagrant@yakkety64
The key's randomart image is:
+---[ECDSA 256]---+
|=..=+.. |
|.*o.*= |
|=+=*+.= + |
|B*o*=+ O + |
|Boo.+.= S . |
|.E.. o . . |
| . |
| |
| |
+----[SHA256]-----+
% cat ~/.ssh/id_ecdsa.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCQeG28rZh/SX9MBfKsnltv+hpr41CAT4CZZ9YsmsjVRdb3iKsYq4K4SNwfiVGNaIjKAcuDnaJbk50zOoa8V/Tc= vagrant@yakkety64
% ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/vagrant/.ssh/id_rsa.
Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:sR7WZK2npMgv8lRZrhofejURfuEs04VJv0quu3xtLiw vagrant@yakkety64
The key's randomart image is:
+---[RSA 2048]----+
| ..o |
| ..+.. |
| ..+=.o. |
| X=.= . |
| S ==o . |
| . = =o= . |
| = =..oo. |
| ...*.oE.+ o |
| o+oo == +. |
+----[SHA256]-----+
% cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnSyvz7oShBRgD8q91eG4WtdJ83cPJfQAtSKEiE8ELHhqRulL6liPz/jqqpMjQpp/3e3QS8OoxGnuXGgHdkly4cd2UdnWxqbz4oN6ig64rYK/ZshQp5FyKb5L3Ksr+3mkhzxPHQVbSZWa8YoaCEzbteVbdFTXUMO/HFPFTL9s2HHyJoDlzUT0XdyovN6WQ2SEbx6pLudsvhZiaiqrPEHLl4ltq33tGcIMFjeu8XvW3d8jTmuAw0KrL7U3bD20n0xsKj9XBigew9K0PjJQ6QKyNUpXXB94jWv+hpkatHlw0NJm/XUQiHDtWaMCTRB8KDSrFarRbYL5ErfHuCePmYerR vagrant@yakkety64
サービスに登録
二要素認証の時はちょっと楽しい面もありましたが、 ssh の鍵の変更は面倒なだけでした。
GitHub, BitBucket, Heroku など、試したところはすべて ed25519 の公開鍵に対応していました。
IdentityFile 更新
~/.ssh/config
で余計な鍵を試さないように
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa
のような設定を入れている場合は
IdentitiesOnly yes
IdentityFile ~/.ssh/id_ed25519
に変更する必要がありました。