web-dev-qa-db-ja.com

SHA-512 UNIXパスワード。これらのハッシュは本当に安全ですか?

私はこれに遭遇しました 非常に驚くべきサウンドスレッド これは、現在入力しているモニターに電力を供給しているGPUの計算能力の約半分のGPUが11.5k c/s

この専門用語に含まれるcはわかりません。 「クラック」の意味ですか?

これは、1秒間に11,000個のパスワードがテストされることを意味しますか?したがって、私のパスワードが5000ラウンドのSHA-512を使用していて、攻撃者の辞書の#11,500にある十分に弱いパスワードである場合、私はわずか1.0秒で侵入しますか?

引用は11.5k c/s at rounds=5000は、デフォルトのラウンド数です。最初の数百万回の試行でパスワードに当たるには並外れた運が必要となるため、パスワードが長くて「ランダム」であるかどうかはそれほどひどく憂慮すべきではないと思います。ただし、小さなGPUファームでは、短時間で数百万を処理できます。やがてひびが入るのは当然だ。

確かにc/s指定されたラウンド/秒を表すことはできません here ;私の500,000ラウンドSHA-512 $6$rounds=500000$...パスワードは約1秒以内にマシンによって検証されます。これは、およそ500Kラウンド/秒に相当します。

少し落書きをする 封筒の裏calc.exe

11,500 * 5000 = 57,500,000 rounds/s

これは、CPU検証速度をラウンド/秒で見積もった場合と比較して、100倍以上の増加です。私のmightは、私のGPUがそれを実現できると信じることができます。それは確かにピクセルでそうすることができます。

または、平均して、1秒あたり11,500のユーザーアカウントがクラックされる可能性があるということですか?今それは本当に印象的です。

今からパスワードを更新します。 HTTPで必ず発生するキックスタートスクリプトを使用してVMに配布する予定のルートパスワード。

8
Steven Lu

あなたが引用する数字は、1秒間に試行されるパスワードの数についてのものです。このパスワードハッシュ関数はソルト処理されているため、攻撃者は一度に複数のハッシュされたパスワードを攻撃できません。同様に、事前計算されたテーブル(「レインボーテーブル」)を作成して再利用することもできません。さらに、この機能は多くの反復(「ラウンド」)で構成できるため、各パスワード検証に費やすCPUの量と必要なCPUの量の間のトレードオフに調整できます。攻撃者がクラッキングの試行ごとに費やす。ラウンド数を2倍にすると、全員の仕事が2倍難しくなります。

デフォルトのラウンド数(5000)は、当時の平均的なコンピューターで耐えられるものでした。最近のPCはより高速であり、マシンのラウンド数を増やすことは良い考えです。

それにもかかわらず、攻撃者は特別な目的のハードウェア、特にGPUを使用してブーストを取得できます。ブーストは、関数の内部計算方法によって異なります。 SHA-512は多くの64ビット算術演算で構成されており、GPUはこれにまったく慣れていないため、GPUで得られるブースト(同じCPUの下での一般的なCPUと比較して)は、それよりも高くありません。 SHA-256(32ビット操作のみを使用)。ただし、GPUは、パスワードを解読しようとするときに、CPUの数十倍の速度になると予想されています。正確な数値は、使用するCPUとGPUに大きく依存しますが、そうです、100倍のスピードアップが考えられます(ただし、CPUを過小評価していると思われます:マルチコアであり、さらに、SSE2またはAVXに固有の並列計算機能がありますレジスタ)。

他の関数は、より多くのメモリアクセス操作に依存しているため、GPUのタスクが難しくなります。 bcryptおよびscrypt。パスワードハッシュに関する多くの情報については この回答 を、bcryptとPBKDF2の特定の扱いについては あの1つ を参照してください(ここでの説明の目的では、PBKDF2はかなり比較可能です)私たちが話しているUnix crypt()関数に)。


とにかく、正しい防御策は弱いパスワードを持たないことです。攻撃者のリストでパスワードが#11500の場合、very弱いです。妥当なパスワードには少なくとも30ビットのエントロピーがあるため、攻撃者は平均して500ミリオンをクラックする前に試行する必要があります。 1秒あたり11500で、数時間前です。メモリを少し増やすだけで、40ビットを超えるエントロピーを取得し、この「数時間」を「数」に変換できます。

パスワードエントロピーに関する議論については この質問 を参照してください。また、パスワードハッシュは 防御の2行目 であることを忘れないでください。これは、部分的な違反が既に発生している場合にのみ実行されます。Unixコンテキストでは/etc/shadowは、外部クライアントはもちろんのこと、root以外のユーザーが読み取ることはできません。したがって、パスワードのハッシュについてあまり心配しないで、SQLインジェクションやバッファオーバーフローを許可しないことに集中してください。

8
Tom Leek

数字は正しいです。

ここでの主なポイントは、MD5とSHAは両方とも高速であることを意図しています。これらは可能な限り高速である必要があるコンテンツチェックサムのために意図されています。そして現代のコンピュータは計算するための独自の命令さえ持っていますこれらはハードウェア上にあります。

MD5とSHA512の最大の違いはキースペースであり、SHA512でのハッシュの衝突の可能性はMD5に比べてかなり大きなマージンで小さいことです。 MD5衝突の脆弱性 を参照してください。

キースペースは、パスワードの安全性に特に大きな役割を果たしません。

暗号化のセキュリティを確保するには、scryptのような低速の関数を使用する必要があります。

そして、あなたの他の質問に答えるには:

または、平均して、1秒あたり11,500のユーザーアカウントがクラックされる可能性があるということですか?今、それは本当に印象的です。

さて、「クラッキング」はパスワードとソルトが使用されているかどうかに依存します。

数値が意味することは、「1秒間にこのことをコンピュータで実行できるハッシュの数」です。

そのため、ソルトがなく、クラッカーがプレーンテキスト「foobar」の5000ラウンドハッシュが「abc123def」であることがわかった場合、このハッシュが/ etc/shadowファイルにあるかどうかを確認できます。ソルトがない場合の問題は、2人の異なるユーザーが同じパスワードを持っている可能性があり、ハッシュが同じであるため、両方が同時に発見されることです。

ソルトされたパスワードを使用する場合、攻撃者は事前に計算された Rainbow tables を使用できませんが、独自のソルトで各ユーザーを個別に攻撃する必要があります。

2
Jan Wikholm

この場合のc/sは計算/秒を表すと思います。ソルトが採用されている場合は、すべてのハッシュについてすべてを再計算する必要があります。ソルトを使用しない場合は、1回の実行ですべてを計算できます。

これが、さまざまなGPUでの 最近のベンチマークの表 です。ご覧のように、これらの数値は同様に高いです(SHA-512がそこにないことはわかっていますが、それによって指標が得られるはずです)。これらは、ハッシュごとに計算されるハッシュの量です。ラウンドを追加する場合、すべてのラウンドを単一のハッシュ計算としてカウントする必要があります。かなりの量のメモリを必要とするため、GPUで実行するのが非常に不便になるように設計されたBcryptおよびScryptに移行する人が増えています。 ScryptはBcryptよりも優れていますが、ここでこの回答を紹介します セキュリティの専門家がパスワードの保存にbcryptを推奨していますか?

これで、このリストで最も高速なGPUは、毎秒約2 656 000 000ハッシュを計算できます(クラックではなく、計算!)。通常のASCIIパスワードには95文字を含めることができます(ASCIIには95文字の印刷可能文字のみを含めることができます)。可能な文字数を計算し、通常パスワードを8文字程度とすると、95^8 = 6.6 quadrillion6 634 204 312 890 625)になります。これらすべてをクラックするには、5000ラウンドを使用している場合、2 656 000 000/5000 = 531 200 c/sを使用します。これは、例よりも大幅に少ないですが、GPUファームを実行しており、5000ラウンドで11 500 000 c/sを実際に計算できると仮定します。これらのすべてのハッシュを計算する6.6 quadrillion/11 500 000 = 573 913 043秒。

1時間は3600秒、1日は24時間なので、573 913 043 seconds / (24 * 3600) = 6642 daysです。これらのパスワードを解読するのにまだ18年(!)長い時間であり、ASCIIは特殊文字があまり多くないため、これを考慮に入れています。塩を投入すると、処理が遅くなります。パスワードを1文字にすると100倍遅くなります。12文字長くし(rootのような管理者アカウントの最小値として使用することを常に推奨します)、それで540十億です。

2
Lucas Kauffman

私は、ハッシュとソルトがオペレーティングシステムによって非常にしっかりと保護されているファイルにあるべきであることを指摘することによって、質問に答えることを試みます。

合理的なセキュリティポリシーでは、着信認証要求を、たとえば1日あたり100回を超えるパスワード入力試行を許可できない速度に制限する必要があります。

攻撃者があなたを所有している場合/etc/shadow内容、気になる大きなものがたくさんあるはずです。通常、これは非常にの不自然な状況になります。

これが、最大限の防弾パスワードハッシュスキームの設定に過度に関心を寄せている理由の1つです。ハッシュとソルトを公開しないでください。そうするリスクがある場合は、abortです。古いMD5のものでも問題なく機能するはずです。それだけだと、ハッシュは、妥協した場合、はるかに明らかになります。

私はその点について間違っているかもしれませんが、これはかなり重要です(暗号化ではすべてのビットが適切に機能する必要があるか、すべてが役に立たないため)、SSLのようなセキュリティを優先リストで少し高いと見なします。

とは言っても、実際の例では、インストーラーのブートメディアの制限により、マシンの初期ルートパスワードをHTTP経由で配布しています。より安全な方法でそれを行わないのはなぜですか?私はそのように夢中だからです。

ソリューション?長いパスワードを思いついて、マシンがオンラインになった後で変更してください。これにより、攻撃が成功する可能性が減り、効果的に無効になります。

実際に攻撃するのが非常に遅い、たとえばscryptに基づく暗号化を使用して問題を回避する簡単な方法は実際にはわかりません。アクセスするためにrootパスワードを設定する必要がありますそのscrypt暗号化パスフレーズを入力できるようにします。したがって、OSにそれをサポートする暗号化モジュールがパッケージ化されるまで、それができない場合があります。

新しいマシンに独自にscryptをコンパイルさせ、それに基づいて別の認証レイヤーを自動的にセットアップする可能性はあると思います。確かにそのような努力を誤る多くの部分があります。

(ただし、scryptで暗号化されたSSH秘密鍵をパッケージ化して、パスワードハッシュよりも少し長い期間安全であるようにするつもりです)

0
Steven Lu