公開鍵認証の暗号方式

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

サイトのドメイン認証やサーバーへのSSH接続の際に利用する公開鍵認証の暗号方式について。

opensslやssh-keygenを使って鍵ペアを作る際に、暗号方式を指定することができますが、どんなオプションが適切なのかよくわからなかったので調べてみました。

結論としては現時点ではRSA方式の2048ビットでよさそうです。

公開鍵認証

インターネット通信はデータがどんな経路を流れているかわからないので、通信相手が適切かどうかは不明です。

で、この問題のひとつの解法が公開鍵認証。暗号化された証明書をやりとりすることで通信相手の認証をおこないますが、この暗号化に公開鍵と秘密鍵を使うというものです。

公開鍵と秘密鍵は必ずひと組のペアになっていて、どちらかの鍵で暗号化したデータを復号化するためにはもう一方の鍵が必要になります。暗号化した鍵そのもので復号することができません。

RSAもDSAも暗号化の手法は異なるものの、上記のような公開鍵認証という振る舞いは同じです。

このような振る舞いによって、公開鍵の持ち主が秘密鍵の持ち主を正規の通信相手として認証します。

RSA暗号方式

RSA暗号はMITのRivest、Shamir、Adlemanの3人が発明したもので、素因数分解が肝となる暗号方式です。

この暗号は素数の積から元の素数を逆算できれば破られますが、使用する素数が非常に大きな数の場合現実的な時間で逆算できないということが安全性の根拠となっています。

2009年末にはビット長768までは解読されていますが、ビット長2048ならしばらくの間は安全っぽい。

DSA暗号方式

DSAはアメリカ国家安全保証局が開発したDigital Signature Algorithmで、離散対数問題を安全性の根拠としています。

もともとはRSAの特許回避のために生まれたもので、SSH2接続のデフォルトはDSA方式でしたが特許有効期限切れによりSSH2でもRSAが使用されるようになりました。

こちらのビット長は2048が推奨されています。

ssh-keygenのパラメータ

以上を考慮してかどうかわかりませんが、鍵ペアを作るssh-keygenはデフォルトでRSAの2048ビット長の鍵を生成するようになっています。

$ ssh-keygen -t rsa -b 2048 -C "comment"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/root/.ssh/id_rsa): ./id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in ./id_rsa.
Your public key has been saved in ./id_rsa.pub.
The key fingerprint is:
SHA256:dmZ8I*********************************abnLo comment
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|              + .|
〜中略〜
|       oo=.=+E. .|
|       .=o. o....|
+----[SHA256]-----+

暗号方式指定の-tデフォルト値はrsa、ビット長指定の-bデフォルト値は2048、コメント指定の-Cは省略可なので、パラメータなしで起動してOKです。

ちなみに作成された鍵の暗号強度を確認するときは-lオプションを使います。

$ ssh-keygen -l -f ~/.ssh/id_rsa.pub
2048 SHA256:dmZ8I*********************************abnLo comment (RSA)

opensslのパラメータ

いまいちssh-keygenとの使い分けがよくわかっていませんがssh-keygenがSSH用の鍵ペア作成コマンドで、opensslがHTTPS通信SSL用の秘密鍵生成コマンドです。

$ openssl genrsa 2048
Generating RSA private key, 2048 bit long modulus
...........+++
.............+++
unable to write 'random state'
e is 65537 (0x10001)
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAnzT0Nss9FOe41TvTbpXOEECu46iLGUeQLR0vulU1rr+37l9n
1fA83TvIf22ghr8cX1vW+3e2dqYkaun989GuiHWJGjWAIG7N+OM9luyJ9QeSFiAB
〜中略〜
JkBt3McV0X3QxiXNATO/hz+4rCalXyJzY/Ai5spYUIBVNrWoyMhSQVKtI3E+L05i
8kn1kCeBupdskqgVKSQRRvQiAgCABzilV0PH/Me6nmp6GPsm/2x9
-----END RSA PRIVATE KEY-----

genrsaで暗号方式を、2048でビット長を指定しています。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

スポンサーリンク




コメントを残す

*