SSHの公開鍵認証システムの設定方法を説明する際に、RSA鍵とDSA鍵のどちらが優れているかという質問を受けることがあります。次の数段落でその疑問に答えようと思います。 まず前置きとして、私はイーサネットLANやTCP/IPネットワークにはある程度の専門知識がありますが、暗号技術に関してはせいぜい素人の理解レベルであることをお断りしておきます。以下の議論はインターネット上の調査に基づいています。その中には矛盾する情報もあり、インターネット上のあらゆる情報と同様に、信頼性の差があるリンクも存在します。
まず、RSA鍵とDSA鍵とは何ですか?
DSA(デジタル署名アルゴリズム)は、米国政府の標準規格であり、NSAによってデジタル署名用に設計された。エルガマル署名アルゴリズムを基にしている。その安全性は、特定の対数関数の解法の難しさに基づいている。デジタル署名にのみ使用可能である。
RSAは、このアルゴリズムを最初に発表した著者であるロン・リベスト、アディ・シャミア、レナード・アドルマンの頭文字から名付けられた。これは大きな数を因数分解することの難しさに基づいている。DSAとは異なり、RSAはメッセージ全体を暗号化するために使用できる。
私の理解では、対数問題と因数分解問題は同等に難しいと考えられますが、対数問題の方が難しいとする文献もいくつか見つけました(同等に難しいとする文献も見つけています)。
私が重要だとは思わないことですが、あなたが聞いたことがあるかもしれない、あるいは今後聞くかもしれないこと:
- DSAは署名処理においてRSAより高速であるが、検証フェーズではRSAが高速である。認証には両フェーズが必要であるため、この差は重要ではない。
- 前述の通り、DSAは認証にのみ使用可能ですが、RSAは認証とメッセージ暗号化の両方に使用できます。ただし、SSHは鍵を認証にのみ使用するため、この違いは重要ではありません。
- 同じ鍵長の場合、DSAはより小さな署名ファイルを生成します。ただし、各鍵がディスクブロックを1つ占有するため、これもまた問題にはなりません。
- DSA鍵は当初1024ビットに制限されていたが、現在はそうではない。
- 「National Vulnerability Database」で「鍵とDSA」および「鍵とRSA」を検索したところ、DSA鍵に関連する脆弱性が2件、RSA鍵に関連する脆弱性が5件見つかりました。私の知る限り、これらの脆弱性はすべてOpenSSL/OpenSSHの最新リリースで修正済みであり、現在はOpenVOS向けインターネットセキュリティパックの一部となっています。
DSAに有利な点:
- DSAはSSHプロトコル2でのみ使用可能であるのに対し、RSAはプロトコル1と2の両方で使用できる(「SSH 2」対「OpenSSLおよびOpenSSHリリース2」参照)。プロトコル1には重大な設計上の欠陥があり、プロトコルバージョン2に置き換えられている。この点を考慮すると、DSA鍵の使用をやや推奨する理由となる。これは、古い廃止されたプロトコルの使用に対する一種の内蔵保護機能と言える。
RSAに有利な点:
- 不良な乱数生成器はDSA鍵ビットを漏洩する(その仕組みは聞かないでほしい)。
- openssh.orgのウェブサイトはどちらが優れているかについて沈黙を守っているように見えますが、ssh-keygenの新バージョンでは、タイプを指定しない場合、RSA鍵が生成されます。
- RSA鍵を参照するRFCは、DSA鍵を参照するRFCよりも多く(かつ新しい)ものが多いようだ。
いくつかの比較(ファイルサイズにはキーの一部ではないテキストも含まれる):
| DSAの作成時間 | RSA作成時刻 | DSAバイト | RSAバイト | DSA.pub バイト | RSA.pub バイト | |
| 1024ビット | 1秒 | 1秒 | 736 | 951 | 610 | 230 |
| 2048ビット | 8秒 | 2秒 | 1264 | 1743 | 1122 | 402 |
| 4096ビット | 50秒 | 25秒 | 2304 | 3311 | 2146 | 742 |
どの鍵を使用するかに関わらず、本当に重要なのは鍵の長さです。現在の環境を考慮すると、2048ビットの鍵長をお勧めします。今日では過剰に思えるかもしれませんが、5年後にはそうは思わなくなる可能性は十分にあります。
どの種類の鍵を使用するかについては、RSA鍵に傾いている。
