環境
Ubuntu20.4
はじめに
SSH接続をするときに利用する鍵(秘密鍵と公開鍵)を作るコマンド、ssh-keygenについての記事です。
内容
ssh-keygenコマンドで作る鍵は、公開鍵暗号方式で使われます。鍵を作るときにアルゴリズムを選択しますが、アルゴリズムを明示的に指定しなければ、デフォルトでRSAが選択されます。RSAが推奨されているため、RSAを選択して問題ないと思います。RSAの他にもDSAというアルゴリズムがありますが、DSAは鍵の長さが1024bitとなっており、RSAよりセキュリティが弱く、推奨されていません。他にも、ECDSAというアルゴリズムがありますが、こちらもDSA系であるため、セキュリティは弱くなります。その他、ED25519というアルゴリズムもあります。こちらは、RSAの代わりに選択しても悪くはありません。RSAの第二候補として挙げられるかと思います。ED25519はRSAと比べ、鍵の長さは短く設定されているが、短い割にはアルゴリズムが強いといった特長を持っています。鍵の長さが短い分、暗号化、復号化の処理が速いといった利点があります。
アルゴリズムにRSAを選択すると、鍵の長さはデフォルトで2048bitになります。2048bitはいくつかあるセキュリティ段階の中で、高強度に分類され、セキュリティは十分に満たしているといえます。しかし、更に、もっと強度な鍵を設定したい場合は、オプションbを使って、鍵の長さを指定することができます。RSAで設定できる最大の鍵の長さは4096bitです。4096bitは超高強度に分類されます。本当のそこまで必要なのかといった意見はあるかも分かりませんが、4096bitで設定すれば、デフォルト値よりもセキュリティはより強化になります。
$ssh-keygen -b 4096
アルゴリズムにED25519を採用する場合は、オプションtでアルゴリズム名を指定します。
$ssh-keygen -t ED25519
デフォルトで本当にRSAが指定されるのか不安な場合は、次のように明示的にRSAを指定すれば、確実にRSAで作成されます。
$ssh-keygen -t RSA
RSAにはバージョン1とバージョン2が存在します。普通に、-t RSAを指定した場合は、バージョン2が選択されます。バージョン1はセキュリティに問題があることが分かっており、既に非推奨となっているため、今後利用することはないと思いますが、バージョン1を指定する場合は、次のようにします。
$ssh-keygen -t RSA1
RSAで作られた鍵が、RSAバージョン1で作られたのか、バージョン2で作られたのかを、鍵の名前から判断することができます。
- 鍵の名前が、id_rsaであれば、バージョン2で作られています
- 鍵の名前が、identityであれば、バージョン1で作られています
あくまでもデフォルトで作成される名前であるため、鍵を作成した後、名前を変更していれば、判断することはできないということにはなります。
まとめ
ssh-keygenコマンドで鍵を作成するときは、次のコマンドで作ることが、今のところ、ベストエフォートだと言えるかと思います。
$ssh-keygen -t RSA -b 4096