|

2023-10-05

Tips

気付けばssh-keygen -t の後にrsaでなくed25519と打つことが推奨されていた

SSH暗号化

いつのまにかSSH鍵生成時のデファクトスタンダードが変わっていた

気付いた発端

実は前回の記事「Vertex AI WorkbenchとGitHubの繋ぎ込み」を書いている時に、GitHubのドキュメント「新しい SSH キーを生成して ssh-agent に追加する」を参照していたら、気になる記載が…

  Untitled

 

ssh-keygen -t rsa なんてもう皆が何でも無いときにでも打ってしまうようなフレーズだと思っていたらいつのまにか ed25519 なるものが推奨されていたという衝撃。

調べて見るとここ数年はRSAよりEd25519のほうが強固だからそっちを使おう、みたいな話がたくさんヒットしてきて完全に乗り遅れていたことがバレてしまいました…

 

せっかくなので、本記事では rsaEd25519 で何が違うかについて調べながら書いてみます。

 

ssh鍵生成の方式

とりあえずマニュアルで全方式を確認する

とりあえず黙って man コマンドでマニュアルを参照します。

man ssh-keygen

 

鍵の方式の -t オプションのマニュアルを参照します

-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa Specifies the type of key to create. The possible values are “dsa”, “ecdsa”, “ecdsa-sk”, “ed25519”, “ed25519-sk”, or “rsa”. This flag may also be used to specify the desired signature type when signing certificates using an RSA CA key. The available RSA signature variants are “ssh-rsa” (SHA1 signatures, not recommended), “rsa-sha2-256”, and “rsa-sha2-512” (the default).

というわけで、 dsa ecdsa ecdsa-sk ed25519 ed25519-sk rsa の6つのオプションがあります。

 

-sk はSecurity Keyのことで、物理的な FIDO/U2F がサポートされたOpenSSH 8.2で登場しているようです。これだけでもう勉強になりました。いつかYubiKeyに鍵を保存してみたいですね。

(参考: OpenSSH 8.2のリリース文書)

 

ということで、鍵の方式としては実質的に

  • dsa

  • ecdsa

  • ed25519

  • rsa

の4オプションが標準で用意されていることになります。

 

DSA

DSAはDigital Sginature Algorithmの略で、最もレガシーと言えるのではないでしょうか。

速度面とセキュリティ面から非推奨とされていることが多く、実際、GitHubでは2021年9月にサポート打ち切りとされています。(参考: GitHubのImproving Git protocol security on GitHubの記事)

 

RSA

言わずと知れた長らくのデファクトスタンダードであり、多くの人が息を吸うように指定するであろう方式です。

セキュアにするためには「キーサイズ」を大きくする必要がありますが、そうすると計算に時間が掛かる…というトレードオフが当たり前ながらあったり、実装におけるスキームによっては脆弱性が見つけられたりで完璧ではない…という認識です。

そこで登場したのが以下の楕円曲線ベースのアルゴリズムになります。

 

ECDSA

EC(Elliptic Curve)=楕円曲線を使うことにより効率的に処理できるアルゴリズムとなります。詳しい解説は楕円曲線DSAのWikipediaを参照されると良いかと思いますが、なかでもポイントは、DSAで1024bitの公開鍵が必要なセキュリティレベルをECDSAなら160bitで足るというところかと思います。

ということで、署名生成/検証においても効率的に行うことが出来る…ということになります。

 

Ed25519

Ed25519は同様に楕円曲線を使ったアルゴリズムですが、より高速かつセキュア…という認識です。

セキュアという面では、ECDSAが署名生成のたびに乱数を必要とするのに対し、Ed25519は乱数を必要としないことがポイントの一つのようです。実装もシンプルです。

名前の構成ですが…Edはエドワーズ曲線(Edwards-curve)からきており、25519はCurve25519からきています。(参考: Curve25591のWikipedia)

さらにいうと、25519って何やねん、というところで、これは有限体 F_p の素数p= 2^255-19 で定義されるモンゴメリ曲線…ということです。 2^255 の255と、 -19 の19からとって、25519ということですね… 覚えやすい!!

ちなみにCurve448というものを用いたEd448という方式もありますが、こちらは素数として 2^448-2^224-1 を選択しているものらしいです…

 

とりあえず完全理解が難しい小市民としては、Ed25519という文字列を覚えておけば問題なさそうです。

 

まとめ

今回はSSHの鍵方式について、ちょっと気になったので調べた結果をまとめてみました。

いざ調べてみると知らないことだらけですね。色々な方がわかりやすく解説しているので、興味を持った方はぜひ調べてみるとよいかと思います。

普段何気なく -t rsa で済ませていましたが、調べると非常に奥の深い世界で時間が溶けていく感じがしました。

こういったアルゴリズムの世界は世の中で一番数学が役に立っている場所なんじゃないか…と思ったりします。

 

老害認定されないよう、定期的に情報のアップデートを行っていこうと強く思わされました。

Ed25519 ももう覚えたので忘れません!

皆さんも頑張って覚えましょう。(もう常識かもしれませんが…)

 


この記事の著者

プロフィール画像

伴 拓也

朝日放送グループホールディングス株式会社 DX・メディアデザイン局 デジタル・メディアチーム

アプリケーションからインフラ、ネットワーク、データエンジニアリングまで幅広い守備範囲が売り。最近はデータ基盤の構築まわりに力を入れて取り組む。 主な実績として、M-1グランプリ敗者復活戦投票システムのマルチクラウド化等。