時々、SSH の公開鍵認証システムの設定方法を説明するときに、RSA 鍵と DSA 鍵のどちらが良いのかと聞かれます。次の数段落ではその質問に答えようとします。私はイーサネット LAN や TCP/IP ネットワーキングの専門知識を持っていますが、 暗号についてはせいぜい素人の理解しかないということを前置きしておきます。以下の議論はインターネットの研究に基づいていますが、その中には矛盾するものもありますし、すべてのインターネットのように、他のものよりも信頼性の高いリンクもあります。
まず、RSAとDSAの鍵とは?
DSA(Digital Signature Algorithm)は、デジタル署名のためにNSAによって設計された米国政府の標準規格です。エルガマル署名アルゴリズムから派生したものである。セキュリティは、特定の種類の対数関数を解くことの難しさに基づいています。電子署名にしか使えない。
RSAは、最初にアルゴリズムを発表したRon Rivest、Adi Shamir、Leonard Adlemanの3人の著者の頭文字から命名されました。これは、大きな数字を因数分解することの難しさに基づいています。DSAとは異なり、RSAはメッセージ全体を暗号化するために使用することができます。
私の理解では、対数問題と因数分解問題を解くのは同じくらい難しいということになっていますが、対数問題の方が難しいという文献をいくつか見つけました(同じくらい難しいという文献も見つけました)。
自分ではどうでもいいと思っていることでも、将来的には聞いたことがあるかもしれないこと、聞くかもしれないこと。
- DSAはRSAよりも署名時の速度が速いですが、RSAは検証時の速度が速いです。
- 上で述べたように、DSA は認証にしか使えませんが、RSA は認証とメッセージの暗号化の両方に使えます。しかし、SSH は認証のために鍵を使うだけなので、この違いは問題ではありません。
- 同じ鍵長であれば、DSA はより小さな署名ファイルを生成します。しかし、各鍵はディスクブロックを取ることになるので、これも問題ではありません。
- DSAキーはもともと1024ビットに制限されていましたが、それはもうありません。
- National Vulnerability Database」で "key and DSA" と "key and RSA" を検索してみたところ、DSA 鍵を扱う脆弱性が 2 件、RSA 鍵を扱う脆弱性が 5 件見つかりました。私の知る限りでは、これらの脆弱性はすべて OpenSSL/OpenSSH の最新リリースで対処されており、現在は OpenVOS 用の Internet Security Pack の一部となっています。
DSAに有利なこと。
- DSA は SSH プロトコル 2 でしか使えませんが、RSA はプロトコル 1 と 2 で使うことができます (「SSH 2″ Versus "OpenSSL と OpenSSH Release 2"」を参照してください)。プロトコル1にはいくつかの重大な設計上の欠陥があり、プロトコルバージョン2に置き換えられています。これは、古い時代遅れのプロトコルを使わないようにするために組み込まれた保護のようなもので、 DSA 鍵を使うことに少し好意的な理由になっていると私は見ています。
RSAに有利なこと
- 下手な乱数発生器はDSAキーのビットを漏らしてしまう(どうやって聞いてくるんだ)。
- openssh.org のウェブサイトは、どちらが良いのかについては無言のようですが、ssh-keygen の新しいバージョンでは、タイプを指定しないと RSA 鍵が作成されます。
- RSA鍵を参照しているRFCはDSA鍵よりも(新しい)RFCの方が多いようだ。
いくつかの比較(ファイルサイズにはキーの一部ではないテキストが含まれています)。
DSA作成時間 | RSA作成時間 | DSAバイト | RSAバイト | DSA.パブバイト | RSA.PUBバイト | |
1024ビット | 一秒 | 1秒 | 736 | 951 | 610 | 230 |
2048ビット | 8秒 | 2秒 | 1264 | 1743 | 1122 | 402 |
4096ビット | 50秒 | 25秒 | 2304 | 3311 | 2146 | 742 |
どのキーを使用するかに関わらず、本当に重要なのはキーの長さです。現在の環境を考えると、私は2048年のキー長を推奨します。今はやりすぎのように思えるかもしれませんが、5年後にはそうなっているかもしれません。
どの鍵を使用するかについては、私はRSA鍵に傾いています。