ed25519 をさらっと理解する
発端
GitHub による認証の一環として新しい SSH キーを作成する必要があり、そのさいドキュメントを読んでいて、ssh-keygen -t ed25519 -C "your_email@example.com"
というコマンドが出てきたが、ed25519 がなんなのかよくわからなかったので簡単に調べて、まとめようと思っていたら、まったく同じような流れで素晴らしい記事を書いている先人がいたので、私の書くことがなくなりました。おしまい。https://tech.asahi.co.jp/posts/20231005-bbf6
というわけにもいかないので、上記の記事も参考にさせていただきつつ、自分なりに整理してみます。
ssh-keygen
で使える暗号化方式と、その概要
オプションで指定できる暗号化方式は以下の4つ。
- dsa
- rsa
- ecdsa
- ed25519
DSA は脆弱なので、現在のGitHubでは使えないようになっています。(参考)
Removing support for all DSA keys
また 2025 年には OpenSSH からも削除される予定らしいです。(参考)
OpenSSH announced that DSA is scheduled to be removed in 2025.[13]
RSA もハッシュ関数として使える SHA-1 が脆弱だったり、セキュアにするために鍵を長くすると計算コストの問題が発生したりで、現在ではあまり推奨されていないようです。
代わりに ECDSA とか Ed25519 などを使ってね、というのが OpenSSH のリリースノートには書かれています。(参考)
We recommend enabling RSA/SHA1 only as a stopgap measure until legacy implementations can be upgraded or reconfigured with another key type (such as ECDSA or Ed25519).
RSA と Ed25519 の比較
Ed25519 の公式には以下のようにありました。
High security level. This system has a 2^128 security target; breaking it has similar difficulty to breaking NIST P-256, RSA with ~3000-bit keys, strong 128-bit block ciphers, etc. The best attacks known actually cost more than 2^140 bit operations on average, and degrade quadratically in success probability as the number of bit operations drops.
私なりの解釈(という名の ChatGPT 先生の解釈)ですが、
- Ed25519 は、128 ビットのセキュリティレベルを提供しており、これには、2^128 の計算量が必要
- Ed25519 と同等のセキュリティレベルを達成するために必要な RSA の鍵長は、約 3000 ビットになる
つまり、Ed25519 は RSA に比べてより少ないリソースで同等かそれ以上のセキュリティレベルを提供してくれるということのようです。
ECDSA と Ed25519 の違い
どちらも楕円曲線(Elliptic Curve) を利用したアルゴリズムです。手始めに ChatGPT に相談してみたのですが、何やら難しいことを言っていたので深入りしないことにしました。タイトルのとおり「さらっと理解」ということで。
一応回答だけ貼っておきます。難しいことはわからないので未検証です。
ECDSA: ECDSAは任意の楕円曲線を使用することができますが、標準的にはNISTが策定した曲線 (例: P-256, P-384, P-521) が使用されます。これらの曲線は広く採用されていますが、設計に関してNSAの影響があった可能性があり、一部の専門家からは不信感を持たれています。
Ed25519: Ed25519は、Curve25519という特定の楕円曲線を使用しています。この曲線は、Dan Bernsteinらによって安全性とパフォーマンスのバランスが良いように設計されており、セキュリティや実装の簡潔さが強調されています。
まとめ
途中にも書きましたが、Ed25519 は RSA に比べてより少ないリソースで同等以上のセキュリティレベルを提供してくれるので、これからは ssh-keygen -t ed25519
を使おう!!
Discussion