1

私はカスタムインターネット/ワイヤーアプリケーションレベルベースのプロトコルを開発していて、現在SHA1を使用していますが、転送に必要なバイト数が非効率的に増加しています。

アルゴリズムは、[メッセージ]の小さくて効率的なハッシュを作成する必要があります(任意のバイナリデータにすることができます)

グーグルとウィキペディアの一部を検索しましたが、適切なハッシュアルゴリズムが見つかりません。

つまり、プロトコルは次のようなものです。

[Length] [LengthOfHash][LengthOfMessage][Hash][ Message.... ]

誰かが適切なハッシュアルゴリズムと、可能であれば実装例に関する情報を提案または提供できますか?

4

1 に答える 1

1

ハッシュで何を達成しようとしていますか?

SHA-1ハッシュは任意の長さに切り捨てることができますが、切り捨てすぎると、攻撃者がブルートフォースだけでハッシュが提供するはずの保護を無効にする可能性があります。

特に、これらのベンチマークに基づくと、やや古くなった1.83 GHzデスクトップCPUでも、コアあたり1秒あたり約223SHA-1のハッシュを評価できます。つまり、ハッシュをたとえば32ビットに切り捨てると、攻撃者は10分以内に任意の値にハッシュされた文字列を簡単に見つけることができます。最新のマルチコアCPUを搭載している場合は、さらに高速になります。

(もちろん、ブルートフォースハッシュにはさらに高速な方法があります。ビットコインマイナーは、1秒あたり最大2 31ハッシュに達する可能性があるグラフィックカードを使用するのが好きです。これは、通常、SHAよりも約50%遅いSHA-256の場合です。 -1.もちろん、作業は非常に簡単に並列化されるため、Amazon EC2から数百個の追加CPUをレンタルするために数ドルを支払うか、カスタムハッシュクラッキングハードウェアを購入/構築することもできます。本物ブラックハットハッカーの場合は、ゾンビコンピューターのボットネットを使用して何も支払わないでください。)

ブルートフォースの原像攻撃に対して合理的に安全であるために、少なくとも64ビットのハッシュ長をお勧めします。1000台のコンピューターが毎秒2 32のハッシュを試行しても、ブルートフォースでクラックするには数か月かかります。

また、衝突耐性も必要な場合(つまり、攻撃者が同じ値にハッシュする2つの異なる文字列をフィードできない場合)、誕生日の影響により、それを2倍の128ビットにする必要があります。また、SHA-1を使用しないでください。これは、ブルートフォースよりも優れた衝突検出攻撃が知られているためです。代わりに、SHA-2関数の1つを使用してください。

于 2013-03-01T13:11:27.010 に答える