web-dev-qa-db-ja.com

私のed25519キーがRSAキーと比較して非常に短いのは悪いことですか?

最近、ed25519形式の新しいSSHキーを生成しました。公開鍵の長さはわずか69バイトですが、私の古いRSA鍵は373バイトです。

私の考えでは、ed25519はより最近の安全な形式です。

それでは、なぜここでより良くないのですか?

53
Alex

いいえ、長くは良くありません。

説明させてください。 対称暗号化では、キーはビットの束であり、ビットのすべてのシーケンスは有効なキーです。内部構造はありません。適切なアルゴリズムを使用している場合、対称暗号化のキーに対する最善の攻撃はブルートフォースです。攻撃者は、正しいキーが見つかるまですべての可能なキーを試行します。鍵にnビットがある場合、2n 可能性のあるキーと攻撃者は、平均して、それらの半分を試した後で正しいキーを見つけます。つまり、2n- 1。したがって、キーが長いほどブルートフォースが難しくなります。その場合は、長いほど良いです。

(これには制限があることに注意してください。キーが十分に長く、ブルートフォースが実行できなくなった場合、キーの長さを増やしても、意味のある方法で「より安全」になるわけではありません。したがって、対称キーの場合、長くなるほど、それらは十分に長く、その時点でより長くなります。)

RSAとEdDSAは、完全に異なる非対称暗号に関連しています。非対称暗号化の鍵は、特定の内部構造を持つ数学的オブジェクトです。キーを破ることはその構造を解明することにあり、考えられるすべての秘密キーを試すよりもはるかに効率的に行うことができます。次の2つの点に注意してください。

  • 総当たり攻撃に対して重要なのは、publicキーの長さではなく、privateキーの長さです。攻撃者が求めているのは、公開キーではなく秘密キーだからです。

  • ブルートフォースは、非対称暗号で使用されるキーに対する最も効率的な攻撃ではありません。

RSAキーの場合、攻撃は係数を因数分解することで成功します。 整数分解 は、長い間研究されてきた問題です。最もよく知られているアルゴリズムを使用して、2048ビットのRSA鍵(つまり、モジュラスが2048ビットの整数であるRSA公開鍵)を解読するには、約2110 または基本的な操作。

EdDSAキーの場合、公開キーは[〜#〜] p [〜#〜]のような楕円曲線上の点[〜#〜] p [〜#〜]です。 _ = xGここで、xは秘密鍵(256ビット整数)であり、[〜#〜] g [〜#〜]は従来の曲線ですポイント。 [〜#〜] p [〜#〜]および[〜#〜] g [〜#〜]からxを回復するための最もよく知られたアルゴリズムには、約2128 基本的な操作、つまり2048ビットのRSA鍵よりも多くの操作。一般に、nビットの楕円曲線公開鍵を解読するための労力は2n/2

どちらかの鍵を破ることは、既存の技術または予測可能な技術で実現可能なものをはるかに超えています。ただし、「学術」​​の観点では、EdDSAキーはRSAキーよりもいくらか強力です。また、楕円曲線を使用すると、ビットあたりのセキュリティが向上します(技術的には、整数因数分解は指数関数的問題と呼ばれます)。

この件に関する詳細は this site を参照してください。

68
Tom Leek

Ed25519で使用されている圧縮方法について混乱を招く以前の答えに満足していないので、EC(楕円曲線)の計算に飛び込まない人がもう一度理解できるようにもう一度試してみますECキーはRSAキーと比較するには非常に短いです。

私の英語は完璧とはほど遠いので、私はここにこのトピックへのかなり良いリンクをドロップするほうがいいです。

ECの「魔法」を本当に理解したい(しかし、数学に夢中にならないようにしたい)ために理解できる-「なぜECはRSAよりもはるかに小さなキーを使用してより強力な暗号化を管理できるのか」- arstechnica.comの記事全体を読むことをお勧め "楕円曲線暗号の入門書としては比較的理解しやすい"

著者は、数ステップで概念を理解するのに役立つ画像でECの要旨を説明しています。

ec

ところで、ECに関する興味深い抜粋:

暗号アルゴリズムを破るのに必要なエネルギー量を計算し、そのエネルギーが沸騰する可能性のある水の量と比較できます。これは、一種の暗号化カーボンフットプリントです。この方法では、228ビットのRSAキーを解読するのに必要なエネルギーは、小さじ1杯の水を沸騰させるよりも少なくて済みます。それに比べて、228ビットの楕円曲線の鍵を壊すには、地球上のすべての水を沸騰させるのに十分なエネルギーが必要です。 RSAでこのレベルのセキュリティを実現するには、2,380ビットのキーが必要です。

ECの内部を掘り下げたくない人のために、少なくともSSHでの暗号化に関するかなり実用的な要約を読んでそれに従うことをお勧めします。リンクはこちら: secure-secure-Shell

さまざまなOS向けのソリューション(githubのコミュニティによって提供される)をコピーして貼り付ける準備ができています: Secure-Secure-ShellのWiKi (しかし、そこに行く前にgithubの前の記事を読むことを強くお勧めします)


前の答え:

Q:「私の公開RSA鍵は373バイトですが、公開鍵の長さは69バイトしかないのです。それでは、なぜここではそれ以上の利点がないのですか?」

トムの説明に加えて、「なぜ鍵はより短いが、少なくとも同等に安全である」-ここからed25519を作成した人たちの元の論文によると http://ed25519.cr.yp.to/ed25519-20110926。 pdf

「同等に安全」であることに加えて、ed25519の短いキーは「内部で」圧縮されています。非圧縮のed25519キーは、ほぼ2倍長くなります。

P.S。

Ed25519で使用されているポイント圧縮の混乱や誤解を避けるため、Zipアーカイブのような通常の圧縮は[〜#〜]([〜#〜]ではありません) (!!!) @diagprovに感謝します。ポイント圧縮の簡単でわかりやすい説明と、コメント ポイント圧縮

上記のドキュメントからの参照(ページ#2):

  • 小さな鍵。公開鍵は32バイトしか消費しません。圧縮と解凍の時間も含まれます。
14
Alex