web-dev-qa-db-ja.com

同じsshキーを生成する可能性は何ですか?

私は(パスワードなしで)次のようにクライアントでsshキーを生成できます:

ssh-keygen -b 8192 -t rsa -f /home/THEUSER/.ssh/id_rsa -P '' -v

生成されたid_rsa.pubをサーバーにコピーします。

ssh-copy-id -i /home/THEUSER/.ssh/id_rsa.pub '-p PORTNUMBER SSHUSER@SERVER-IP-ADDRESS'

誰かがssh-keygenでまったく同じ鍵を生成する可能性はどのくらいありますか?彼らもパスワードなしでログインできるように!

可能性は非常に低いと思いますが、知りたいです。

26
LanceBaynes

可能性はこれらのイベントのどれよりも非常に低いです:

  • コンピューターは、キー生成プロセス中に自発的に火を起こします。
  • 英国は、同じ秒の間に落下する小惑星によって一掃されます。
  • 動物園から脱出したローグゴリラがあなたの居間に入り、あなたを襲いました。
  • 宝くじで数百万ドルを3回続けて獲得します。

したがって、基本的な結論は、同じSSHキーを2度取得することを心配するべきではないということです。それは、実際には発生しません。

より理論的な観点では、約28164 8192ビットのRSA鍵の可能性があります(これは非常に多くなります)。しかしながら、 ssh-keygenは、疑似乱数ジェネレータを使用します。これは、オペレーティングシステムに依存しますが、通常は少なくとも160ビットのサイズを持つ、はるかに削減された内部シードで機能します。これにより、可能なキーの数がはるかに少ない(ただし非常に大きい)数に減少します2160。途方もないコンピューティング能力があっても(私は数十台のPCを持っている退屈な学生について話しているのではなく、むしろ「グーグル」を考えてください)、数年の努力の後に同じ鍵を見つける確率は2-100。比較すると、上記のイベントは、おおよそ2に等しい確率で発生すると推定できます。-452-502-60および2-71、それぞれ:これらは10億倍の確率です。

もちろん、PRNGに欠陥があると、何でも起こります。

39
Thomas Pornin

最初に、 誕生日攻撃 を確認します。これは、まったく同じように生成された2つのキーが存在することの偶然性と確率を説明します。このオッズは、キーを選択して誰かがキーを生成したかどうかを確認するオッズよりも高くなっています。 (部屋に何人の人が7月7日に生まれましたか?

現在、あなたの鍵を生成する人の確率は1/2 ^ key_sizeです。公開鍵暗号の場合、1/2 ^(bits_of_entropy)。 4096ビットのRSA鍵は、4096ビットのエントロピーを持つことは想定されていません。自分自身が何であるかわかりません。 128ビットの対称鍵は、128ビットのエントロピーを持つことが期待されています。 (これは、個々のラウンドなどを壊す可能性のある攻撃をすべて無視しています)

さて、それは 非常に醜いOpenSSLバグ のような悪い実装も考慮に入れていません。

しかし、基本的に、誰も偶然にあなたの個人キーを生成することはなく、おそらく攻撃によっても生成されることはないでしょう。

6
Jeff Ferland

ssh-keygenはOpenSSLのlibcrypto BN_Rand() 関数を使用して、キーサブプライム生成の開始点を生成します。それ自体が Rand_bytes() をソースとして使用しますランダム性の。これは、OpenSSHソース配布の _moduli.c_gen_candidates()関数で発生します。

ほとんどのプラットフォームでは、これはかなり良い品質のランダム性になります(Rand_bytes()の動作はプラットフォームに依存します。詳細については、OpenSSLディストリビューションで _Rand_lib.c_ を確認してください)。

すべての実用的な目的で、PRNG=熱狂的で無能なメンテナによって妨害されたlibcryptoをたまたま使用しない限り、衝突は起こりません。

6
Bruno Rohée

research!rsc から取得:

先週、Debianは2006年9月に、Valgrind警告を沈黙させようとしているときに誤ってOpenSSL疑似乱数ジェネレータを壊したと発表しました。これがもたらした1つの影響は、最近のDebianシステム(およびUbuntuのようなDebian派生システム)にインストールされたssh-keygenプログラムは、特定のタイプとサイズの32,767種類の可能なSSHキーしか生成できないため、多くの人が歩き回っています。同じキー。

多くの人が指を向けてきましたが、誰が間違いを犯したかはそれほど興味深いものではありません。誰もが間違いを犯しています。おもしろいのは、間違いを助長し、ほぼ2年間はそれを気付かなかった状況です。

ジェフ・ファーランドが以前の投稿で言ったように:「これは、非常に醜いOpenSSLバグのような悪い実装も考慮に入れていません」(これは確かに上記と同じバグのようです)。

「理論的には、理論と実践の間に違いはありません。実際にはあります。」、ヨギベラ

2
Dirk M Aus F