web-dev-qa-db-ja.com

パスフレーズで保護されたSSH秘密鍵は、辞書攻撃の影響を受けますか?

パスフレーズで保護されたSSH秘密鍵がある場合、

そして

このパスフレーズが十分にランダムで長い場合(たとえば、20、30、40文字、またはそれ以上!)、

そして

私のこの秘密鍵をネットで公開すると

その後、

実用的に誰かが対応する公開鍵(とにかく公開されている公開鍵)から私の秘密鍵を復号化できるようになりますか?.

私の推測答えはおそらく次のようになります:

"復号化の労力と時間は、選択したパスフレーズの長さとランダム性に完全に依存し、復号化を高速化または低速化するSSH認証アルゴリズム/プロトコルに固有のものはありません。したがって、現在の解読技術では、20文字以上のパスフレーズで十分です。Gmailでさえ、パスフレーズの長さはこれよりはるかに短いことが推奨されています。 "

しかし、これが正しい答えであるかどうか、または私が心配する必要がある他の側面があるかどうかはわかりません。

このSSH秘密鍵が実際に解読できない場合は、非常に長いパスフレーズで保護し、鍵自体の保護についてはすべて忘れます。たとえば、Gmailの受信トレイに保存したり(Gmailチームにも表示したり)、個人のWebサイトにアップロードして簡単に検索したりすることができます(たとえば、旅行中に)。等。

27
Harry

重要なのはパスフレーズの長さではなく、そのランダム性です。つまり、それがどれほど異なっていたかもしれません。長さはランダム性の余地を作りますが、それを生成しません。

SSH秘密鍵の対称暗号化はあまりうまく設計されていません。それはOpenSSLのいくつかの古い機能に依存しています。以前の日付は password hashing が正しく理解された問題でした。詳細な分析については この回答 を参照してください。要点は、PBKCS2と十分なラウンドでPKCS#8オブジェクトにキーをラップすることに何らかの努力を払わない限り、攻撃者は1秒あたり10億単位で潜在的なパスワードを試すことができるということです。

パスフレーズを一連の文字として生成し、それぞれをランダムかつ均一に選択すると、1文字あたり4.7ビットのエントロピーが得られます(26はおおよそ2に等しいため)4.7)。まともな保護レベル(たとえば、100ビット)に到達するには、22文字が必要になります... 意味のある単語 を生成したい場合は、2048の「一般的な単語」のリストから言ってください。ワードあたり11ビット、9ワードで99ビットのエントロピーが得られます。ここでも、各単語はランダムに、均一に、他の単語とは無関係に選択する必要があります。

PKCS#8 + PBKDF2と100万ラウンド(OpenSSLはそれを生成するためにいくつかの調整が必要です)で、20ビットを獲得します(220 は約100万に相当します)。

覚えている覚えているは、確かに扱いにくいかもしれません。非常に長いパスフレーズを覚えているでしょうが、十分頻繁に入力した場合に限られます。そうしないと、物忘れがほぼ保証されます。非常に長いパスフレーズを印刷して銀行金庫に保管することをお勧めします(インクジェットプリンターではなく、レーザープリンターで印刷します。後者のインクはすぐに消えてしまう可能性があります)。または、より簡単に、仲介者を切り取り、銀行の金庫に置いた紙に鍵自体を印刷します。

(*)注:印刷システムは、過去の印刷ジョブのキャッシュされたコピーを保持する場合があります。すべてのトレースを削除するのは難しい場合があります。ペンと手で「手動印刷」プロセスを使用することもできます...本当に長期間保管するには、石または錆びにくい金属に彫刻することを検討してください。

25
Thomas Pornin

これは非常に興味深いトピックです。 Stack Exchangeで以前に回答されたもの。 Bruce Schneierは、暗号化の専門家として認められ熟練しています。ブルートフォース攻撃に関する記事は、次の場所にあります。

なぜより大きな暗号キーを使用しないのですか?

最も興味深いパッセージはここに再現されています:

鍵の長さは長い方が良いですが、ある程度までです。 AESは、128ビット、192ビット、および256ビットのキー長を持ちます。これは予見可能な将来に必要とされるよりもはるかに長いです。実際、256ビットのブルートフォース検索が可能な世界を想像することさえできません。それには、物理​​学におけるいくつかの基本的な画期的な進歩と、宇宙に対する私たちの理解が必要です。

熱力学の第2法則の結果の1つは、情報を表すために特定の量のエネルギーが必要になることです。システムの状態を変更して1ビットを記録するには、kT以上のエネルギーが必要です。Tはシステムの絶対温度、kはボルツマン定数です。 (私と付き合ってください。物理学のレッスンはほとんど終わりました。)

K = 1.38×10の場合−16 erg/K、そして宇宙の周囲温度が3.2ケルビンであること、3.2 Kで実行されている理想的なコンピューターは4.4×10を消費する−16 ビットをセットまたはクリアするたびにエラーが発生します。コンピュータを宇宙背景放射よりも低温で実行するには、ヒートポンプを実行するために追加のエネルギーが必要になります。

現在、太陽の年間エネルギー出力は約1.21×10です。41 エルグ。これは約2.7×10の電力を供給するのに十分です56 理想的なコンピューターでのシングルビットの変更。 187ビットのカウンタをすべての値に通すのに十分な状態変化。太陽の周りにダイソン球体を構築し、そのエネルギーを32年間、すべての損失なしに取得した場合、コンピュータに電力を供給して最大2192。もちろん、このカウンターで有用な計算を実行するためのエネルギーは残っていません。

しかし、それは1つだけの星であり、そこにはわずかな星があります。典型的な超新星は10のようなものを放出します51 エルグ。 (約100倍のエネルギーがニュートリノの形で放出されますが、今のところは放っておいてください。)このエネルギーのすべてを単一の計算乱交に流すことができれば、219ビットのカウンターがすべてを循環することができます。その状態の。

これらの数値は、デバイスのテクノロジーとは関係ありません。それらは熱力学が許容する最大値です。また、コンピュータが物質以外のものから構築され、空間以外のものを占有するまで、256ビットキーに対するブルートフォース攻撃は実行不可能であることを強く示唆しています。

これに興味を持っていただければ幸いです。

11
Scott Dunn

このSSH秘密鍵が実際に解読できない場合は、非常に長いパスフレーズで保護し、鍵自体の保護についてはすべて忘れます。

暗号化された秘密キーは、攻撃者が暗号化された秘密キーを手に入れることができる場合、ブルートフォース攻撃を受けやすくなります。そして、それができない場合は、そうではありません。暗号化は魔法ではありません。通常、これは非常に一般的なトリプルDESであり、常にオフライン攻撃であるため、攻撃者は専用のハードウェアを自由に使用できます。

暗号化されたキーをGmailボックス、Googleドライブ、Dropboxに置くことはおそらく安全です。キーに関心のあるユーザーのリストは、Gmailアカウントにアクセスできるユーザーのリストとほとんど重複しません。

しかし、それをWebページに公開することは少しやり過ぎです。あなたは文字通り尋ねる誰かがそれを解読しようとするのです。少なくとも、何気ない観察者へのアクセスを防ぐための対策を講じてください。

20文字の英数字のパスワードは約120ビットであり、今日のテクノロジーでは簡単に総当たりすることはできません。しかし、それでも、少し常識はおそらく正しいです。

7
tylerl

これは古い質問ですが、誰かがこれを探して答えを探している場合は、その後変更されました

 -o      Causes ssh-keygen to save private keys using the new OpenSSH
         format rather than the more compatible PEM format.  The new
         format has increased resistance to brute-force password cracking
         but is not supported by versions of OpenSSH prior to 6.5. Ed25519
         keys always use the new private key format.

(ssh-keygen manページから)

どうやら、これは ses bcrypt で、ニースの低速で強力なKDFと見なされます。固定メモリ使用により、GPU、FPGA、またはASICを使用した超並列攻撃に対して、scrypt(計算するために任意のメモリ量を必要とするように調整できる)よりも脆弱になりますが、単一のラウンドより先の世界です古い形式が使用するMD5の。

さらに、-aオプションを使用して、使用する作業係数を指定します。これを使用して、キーファイルのブルートフォース耐性を大幅に向上させることができます。これは、最大許容値を見つけるために実験する価値があります。私は200を使用しました。古い第2世代のモバイルi7では、復号化に約2秒かかります。

参考までに、 here は、2017年の最高のクラッキングリグが実行できるベンチマークです。8つのトップエンドGPUで約10万回の推測/秒です。これは、bcryptの作業係数が5であり、OpenSSHが使用するものよりもはるかに低い(私はデフォルトで16と考えていますか?(これは指数スケールです。作業係数を1増やすと、ハッシュ時間が2倍になります)-aの値と実際のbcrypt作業係数は不明です。)

4
user371366