web-dev-qa-db-ja.com

1024ビットDHEと2048ビットRSA

現在Apache/mod_sslを使用している場合、DHEが有効になっていると、1024ビットの一時鍵が使用されます。 Adam Langleyのブログ で次の引用を見つけました:

理想的には、DHグループはRSA鍵サイズと一致するか、それを超えますが、1024ビットDHEは、ストレート2048ビットRSAよりも間違いなく優れているため、必要に応じてそれを回避できます。

したがって、2048ビットのRSA鍵を使用するDHE-RSA-AES256-SHAよりも、1024ビットの短命なDH鍵を使用するAES256-SHAのようなものを提唱しているようです。私の理解では、1024ビットDH(エフェメラルかどうか)は、1024ビットRSAに匹敵するセキュリティを備えています。なぜ彼はそのような勧告をするのでしょうか?彼はDHEによって提供された前方秘密性をそれほど重視していますか?

11
safsaf32

質問には2つの側面があります。

  • Perfect Forward Secrecy :「DHE」暗号スイートを使用することで、DH秘密鍵に関してデータを実際に暗号化しますどのneverもどのディスクにも保存されません。特定のSSLセッションでは、攻撃者が暗号化に使用された公開鍵(DHE暗号スイートの場合はDH、RSA暗号スイートの場合はRSA)の暗号化に成功すると、暗号化が解読される可能性がありますor攻撃者が秘密鍵のコピーを盗んだ場合。後者の発生は、実際には、RSAベースの暗号スイートでは実際にははるかに可能性が高くなります。 PFSのポイントは、その脅威を取り除くことです。

  • RSAとDiffie-Hellman:当面の間、RSAとDHを解くための最もよく知られた方法は、2つの難しい問題を解決することを伴います 整数因数分解 および 離散対数 それぞれ。どちらの問題でも、最も速い既知のアルゴリズムは General Number Field Sieve です(最初は因数分解アルゴリズムですが、GNFSのバリアントを離散対数に適用できます)。漸近的複雑性の場合、DH係数がRSA係数と同じサイズの場合、RSAとDHは同等の硬度になります。

    ただし、実際には、DHは少し難しいです。 GNFSにはいくつかのフェーズが含まれます。主な2つのフェーズはsieveであり、次にlinear reductionです。モジュラスが大きい場合、マトリックスのサイズが大きいため、線形削減がボトルネックになります。特定のモジュラスサイズの場合、2つの行列(RSAの1つとDHの1つ)で同じ数の要素を取得しますが、RSAの場合、行列要素は単純なビットであり、整数pDHの場合。したがって、DHマトリックスは大きくなります。

    ただし、n-bit DHを2n-bit RSAのように「ハード」にすることはできません。レコードを見ると、RSAは768ビット、DHは530ビットです。そして、DHケースはより少ない生の電力を使用した。さらに、1024ビットDHの硬度と2048ビットRSAの硬度を比較することは完全に正当化されていません。どちらも「破壊できない」ゾーンにあるためです。

つまり、1024ビットDHは1024ビットRSAよりも(理論的には)多少強いですが、違いはわずかです(たとえば、1024ビットDHは最大で1200ビットRSAに似ています)。しかし、実用的な用語では、秘密鍵の盗難のリスク、非一時的な鍵の場合、1024ビットのRSAまたはDHの暗号解読のリスクが小さくなります。もっと;その意味で、PFSは必須であり、1024ビットのDHキーを持つDHEは、RSAキーのサイズに関係なく、RSAベースの暗号スイートよりも/はるかに安全です。

18
Tom Leek

トム・リークが言ったすべてに同意しますが、考慮すべきいくつかのポイントがあります。

  • 最近のmod_sslは1024より大きいDHパラメータをサポートしており、古いものはパッチすることができます: http://blog.ivanristic.com/2013/08/increasing-dhe-strength-on-Apache.html (更新済み)

  • 米国政府の要件に従う必要がある(または希望する)場合、先月現在のNIST Special Pub 800-57(csrc.nist.gov)では、整数ベースのアルゴリズムRSA、DSAおよびDH(対224 ECC、およびハッシュおよび対称112)。

  • Java=クライアントを持っている場合)、(非常に一般的な)Suncle Javaと、(密接にリンクされた)OpenJDKは、現在の7を通じて、1024ビットを超えるDHを処理しません。正確には、P = 512から1024までの64およびQ 160の元のDSA(FIPS 186-0)サイズを実装し、FIPS 186-3の改善2048/224,256および3072/256、およびDHに同じ制限を課す正当な理由はありません。これはJava 8で修正されるが、Googleはそれを見つけられないというバグのJava.comエントリを見たことがあります。 https://stackoverflow.com/questions/6851461/Java-why-does-ssl-handshake-give-could-not-generate-dh-keypair-exception OTOH Suncle Java 7(ECCプロバイダーを追加する場合は6)はECDH権限を実装し、デフォルトではDHEよりもECDHEスイートを優先するので、サーバーがDH-2048とECDH-reasonableの両方をサポートしている場合は問題ありません(Webクライアントの場合)一般的にECDH P-256が最良のようです。)

5