RSAではなくED25519

ssh keyを生成しようと参考にしたgithubのhelpページで以下のように鍵を生成するよう書かれていた。

ssh-keygen -t ed25519 -C "your_email@example.com"

https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

大抵ssh keyを作る場合は前回から年単位で時間が経っているため、rsaのbits長の目安を知るためにgithubのヘルプを見るようにしていた。そうしたところ今回はそもそもrsaじゃないタイプを使うよう書かれていたのでメモ。

まずED25519とは

エドワーズ曲線デジタル署名アルゴリズム - Wikipedia

ではEdDSAやRSAの違いは何か、についてはこちらが簡潔で概要がわかりやすかった

SSHの公開鍵暗号には「RSA」「DSA」「ECDSA」「EdDSA」のどれを使えばよいのか? - GIGAZINE

また、もう少し具体的な部分についての話だとこちらのqiitaの解説があった

電子署名EdDSA(ed25519)の数的構造 - Qiita

RSA

  • 大きな素数因数分解が困難であることを利用
  • 古くからあり最も広く使われており種々の言語でライブラリが用意されている
  • セキュリティ確保のために鍵長を長くする必要がありパフォーマンスがよいわけではない
  • 特定の整数を効率よく素因数分解するためのアルゴリズムが存在するためそのような数にあたってしまうとセキュリティ上よくない

DSA

  • 離散対数問題の困難性を利用
  • 比較的古くライブラリは充実している
  • 鍵生成時に乱数を生成しそれを秘匿する必要があることがセキュリティ上ネック
    • 質のよい乱数を生成することは難しく、実装ミスで法則を持った乱数になってしまうとその乱数の解析で暗号を突破される恐れがある
  • そのためOpenSSH7.0からはデフォルトで無効化されている

EdDSA

  • 楕円曲線上の点に対する離散対数問題を利用
  • 比較的新しい暗号であるため実装がない言語などもある
  • DSAにおける秘匿すべき乱数を、乱数として生成するのではなくハッシュとして生成することでDSAの問題を克服しセキュリティ向上
  • エドワーズ曲線を用いることで鍵長が小さく済み高速

ということでまとめると

  • RSAに比べて新しい分普及度は低いものの
  • 鍵長が短くセキュリティ的にも向上している比較的新しい暗号であるEdDSA
  • の一種であるEd25519がgithubでも推奨されるようになった

ということだとわかった。

ちなみに話題的に関連しているので紹介だが、そもそもの入門として公開鍵暗号についてはこちらの本がとてもわかりやすい。

タイトルの通り9つの社会に影響を与えたアルゴリズムについて紹介している本で、数学的な部分は比喩で説明してありアルゴリズムの全体像把握から計算手法まで大変わかりやすく解説されていた。会社で新卒におすすめの本(技術書)はと聞かれたら思い浮かぶものの一つ。