web-dev-qa-db-ja.com

GPUがパスワードの解読に優れているのはなぜですか?

GPUでパスワードをすばやく解読できるのは何ですか?

昨日の暗号化ハッシュ(MD *、SHA *)ではなく、パスワード(bcrpyt、PBKDF2、scrypt)に適切な鍵導出関数を採用する背後にある原動力は、後者がGPUで実行されて膨大な数を推測するプログラムに対して脆弱であることですパスワードの非常に迅速。なぜGPUはこれらのハッシュ関数の評価においてCPUよりもはるかに優れているのですか?

33
Nick

@Terryの回答を完了するには:GPUには多数のコア(数百)があります。各コアは基本的に、パイプラインとして、クロックサイクルごとに1つの32ビット算術演算を計算できます。実際、GPUは極端な並列処理でうまく機能します。実行する同一のワークユニットが多数ある場合、実際には実際のコアよりもはるかに多くなります(「同一」は「同じ命令」を意味しますが、「同じデータ」)。

詳細、やや古いNVidiaカード(GTX 9800 +、2009年初頭から):128コア、16の「マルチコアユニット」に分割。各マルチコアは、サイクルごとに8つの操作を開始できます(したがって、128コアという考え方は、8の16倍です)。マルチコアは32のグループで作業単位(「スレッド」)を処理するため、マルチコアに実行する命令がある場合、実際にはその命令を4クロックサイクルで8コアに発行します。これは操作初期化です。個々の操作の実行には、最大22クロックサイクルかかります。命令とそのオペランドがプール内の波のように前線として進むことを想像できます。特定の波はプールの反対側に到達するまでに少し時間がかかりますが、複数の波を順番に送信できます。

したがって、実行する「スレッド」が少なくとも22倍ある限り(つまり、最小で22・128 = 2816)、 "128サイクルあたり32ビット操作"のリズムを維持できるため、スレッドはヒップホップダンサーのように、同じ命令を同時に実行する32の「同一」スレッドのパックでグループ化されています。実際には、最適な帯域幅を実現するためにより多くのスレッドを必要とするいくつかの内部しきい値と制約があり、最大で約4096です。

SHA-1の実装により、最適な帯域幅の99%近くを達成できました。 SHA-1は1100を少し超える32ビット演算を使用します(CPUでは約900ですが、GTX 9800+にはrotationオペコードがないため、回転は分割する必要があります) 2つのシフトと論理OR)に変換され、GPUは1450 MHzで実行され、合計で約1億6,000万SHA-1計算/秒でした。これは、パスワードクラッキングの場合と同様に、並列計算するSHA-1インスタンスが何百万ある限りのみ達成できます(いつでも、4096の並列SHAが必要です) -1はGPUコアにフィードしますが、潜在的なパスワードを入力するためのI/Oコストも処理する必要があります。処理するSHA-1インスタンスが多くない場合、これらのコストが支配的です)。

CPU(クアッドコア2.4 GHz Intel Core2)上のホストPCは、毎秒約4800万SHA-1、およびthatは、完全に最適化されたSSE2コードでした。単一のSHA-1は、このようなCPUで約500クロックサイクルを使用します(CPUは、リソースを競合せず、互いに依存しない限り、単一のサイクルで複数の命令を計算できます)が、パスワードのクラッキングには、128ビットレジスタで SSE2 を使用して、4つの命令を並列に計算することは価値があります。 SSE2制約を使用すると、4つの並列SHA-1を実行するのに約800クロックサイクルかかるため、SHA-1インスタンスごとに200クロックサイクルになります。そのCPUには4つのコアがあり、全体が2400 MHzで実行されるため、1秒あたり4800万です。

最近のハードウェアはより高速になりますが、GPUはより高速になります。 GTX 680は百万の1536コアを搭載し、GTX 690にはそのようなGPUが2つあります。SHAは10億話しているここでは1秒あたり-1インスタンス。

(比較のために、 セルプロセッサ 、つまりPS3コンソールのCPUにSHA-1の実装も行いました。そのCPUは8つの「SPU」コプロセッサを備えています。1つのSPUは利用できませんでした。7その他、1秒あたり約1億のSHA-1に達しました。つまり、現代の大きなPC CPUよりは優れていますが、同じ時代の優れたGPUほどではありません。


概要:GPUは、数百(数千ではないにしても)のコアを備えた重い並列処理を使用することにより、優れたパフォーマンスを実現します。これは、パイプライン処理(各個々の操作の実行に多くのサイクルが必要ですが、連続した操作は高速道路のトラックのように起動できます)および共有命令のデコード(多くのコアが実行されるため)によって可能になります同時に同じ指示)。

42
Thomas Pornin

GPUは、数学的計算の処理に優れています。グラフィックスレンダリングは、単に一連の複雑な数学的計算です。ハッシュアルゴリズムも同様です。

GPUには、数学関数の並列計算に使用できる数百のコアがあります。 CPUには通常4〜8コアがあります。 CPUコアはGPUコアよりもはるかに高速ですが、パスワードハッシュは並列処理を非常に簡単に実行できる機能の1つです。これが、GPUにパスワードを解読する大きなエッジを与えるものです。

言及した3つのアルゴリズムのうち、PBKDF2はGPUで比較的簡単にクラックされる可能性があることに注意してください。基本的にPBKDF2アルゴリズムは、MD5やSHA1などのハッシュ関数を使用してパスワードを数千回ハッシュします。単純なMD5またはSHA1ハッシュよりもはるかに強力ですが、GPUを使用すると比較的高速にクラックできます。

bcryptとscryptは、GPUが攻撃者に与えるクラッキング時間の大幅な高速化を回避するように設計されています。詳細については、Thomas Porninによるこの信じられないほどの回答を参照してください: https://security.stackexchange.com/a/31846/10211

19
user10211