なぜ秘密鍵を作成する時に「ssh-keygen -t rsa -b 4096」コマンドを実行するのか調べてみた

スポンサーリンク
Linux
スポンサーリンク
スポンサーリンク
スポンサーリンク

ssh-keygen -t rsa -b 4096とは?

ssh-keygenコマンドは、ssh用の認証鍵の生成、管理、変換を行うコマンドです。手元のmacでmanコマンド(マニュアルを確認するコマンド)を実行して、ssh-keygenについて調べてみると、以下のように記されています。

ssh-keygen can create keys for use by SSH protocol version 2.

ssh-keygen は、SSH プロトコル バージョン 2 で使用するキーを作成することができます。SSH プロトコルにはバージョン 1とバージョン2がありますが、セキュリティと機能の面で改善されているバージョン2に対応しているそうです。

The type of key to be generated is specified with the-t option. If invoked without any arguments,ssh-keygen will generate anRSA key.

ssh用の認証鍵にはいろいろな種類がありますが、特にオプションを指定しなければ、RSA鍵が作成されるそうです。

ついでに、-tオプションで指定できる鍵の種類は以下の6種類となります。

-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa

また、サイズを指定する -bオプションについては以下のように説明されています。

-b bits
Specifies the number of bits in the key to create. For RSA keys, the minimum size is 1024 bits and the default is 3072
bits. Generally, 3072 bits is considered sufficient.

最小サイズは1024で、サイズを指定しなかった場合のデフォルトのサイズは3072となります。

つまり、「ssh-keygen -t rsa -b 4096」コマンドを実行すると、rsaの秘密鍵を4096bitsサイズで作成することになります。そして、この組み合わせによるコマンド実行は(少なくとも私の周りでは)多用されていますし、ネット上でも頻繁に見かけます。

ただ、このコマンドをコピー&ペーストして使用するたびに、心の中では「なぜ4096bitsなのだろうか?」という疑問が浮かんでいました。ネットで検索すると、「一般的な2048bitの2倍だから安全」という言説が主流のようです。素人考えでは、「4096bitsじゃなくて、それならさらに2倍した8190bitsでも16384bitsでも良くない?」と思っていました。

セキュリティと効率のバランスがベスト

なぜ「4096bits」なのか?という疑問を解決してくれるデータを見つけることができました。以下は、「Journal of Computer Science」に掲載された、RSA-key-genの生成時間に関する表です。

https://www.researchgate.net/figure/Fractal-and-RSA-key-generation-time_fig3_279064047

Al-Saidi, Nadia. (2011). Efficiency Analysis for Public Key Systems Based on Fractal Functions. Journal of Computer Science. 7. 526-532. 10.3844/jcssp.2011.526.532

4096bitsまでの範囲では生成時間に顕著な違いは見られませんが、8192bitsからは生成時間が増加し、16384bitsに達すると急激に生成時間が伸びていることが分かります。

一般的に、ビット数が大きいほど強力な鍵になりますので、この表から、生成時間と安全性のバランスがベストなrsa秘密鍵のサイズは「4096bits」である、ということが理解できました。

実際にコマンドを実行した時のタイム

4096bits、8192bits、16384bits、の秘密鍵を実際に作成した時の時間をtimeコマンドで測定してみました。

・4096bits

$ time ssh-keygen -t rsa -b 4096 -f 4096
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in 4096
Your public key has been saved in 4096.pub
The key fingerprint is:
SHA256:U0Hyh3DHp+7xxLEqWSrO/C6lXW4k/ZXPZ5vNGqJi4j4 ****@****MacBook.local
The key's randomart image is:
+---[RSA 4096]----+
|        o.+..    |
|         = +. .  |
|          + .o   |
|         . .. .  |
|        S  o . o.|
|         .o B +..|
|         + X.*.o.|
|      Eo* =.=.ooB|
|     oo=+*+o  .==|
+----[SHA256]-----+

real 0m3.588s
user 0m0.957s
sys 0m0.057s
・8192bits
$ time ssh-keygen -t rsa -b 8192 -f 8192
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in 8192
Your public key has been saved in 8192.pub
The key fingerprint is:
SHA256:OWxqHi4o7mupRfgI+xeewb1rxZpQj2KHOhRabNEovcw ****@****MacBook.local
The key's randomart image is:
+---[RSA 8192]----+
| . o             |
|. + .            |
| = o             |
| .E   .. .       |
|o+.o + +S        |
|o=. O +o+.       |
|o.+= B+=         |
|.=+ =+=.         |
|*=oo o+.         |
+----[SHA256]-----+

real 0m19.639s
user 0m17.984s
sys 0m0.159s
・16384bits
$ time ssh-keygen -t rsa -b 16384 -f 16384
Generating public/private rsa key pair.

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in 16384
Your public key has been saved in 16384.pub
The key fingerprint is:
SHA256:9het6EPXlVZtW02rDyBrCHQ8yQEr2XwXLhFBFp9pEos ****@****MacBook.local
The key's randomart image is:
+---[RSA 16384]---+
|     o=@*.     .+|
|    = ==* +     B|
|   o E =.O .   o=|
|    . o * o ...+.|
|       .So  .+o. |
|       ......o+  |
|         .o.o  . |
|         ...     |
|          ..     |
+----[SHA256]-----+

real 4m35.350s
user 4m5.447s
sys 0m1.778s
4096bitsでは3秒ほど、8192bitsでは20秒ほど、16384bitsでは4分ほどかかるという結果になりました。この結果からも、実際の構築・運用をスムーズに行える秘密鍵のサイズの限界は4096bitsであると考えられます。
Linux学んでみた
スポンサーリンク
スポンサーリンク
bond.motherをフォローする
スポンサーリンク
ProgrammingのMITA!

コメント

プロフィール

当ブログの管理者。主にインフラエンジニアとして仕事をしています。

bond.motherをフォローする
タイトルとURLをコピーしました