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

に変更する必要がありました。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published