3

私は SHA-1 について学ぼうとしています。仕様 (RFC 31741) に含まれていた C 実装を見ていましたが、この部分は私を混乱させます:

context->Intermediate_Hash[0]   = 0x67452301;
context->Intermediate_Hash[1]   = 0xEFCDAB89;
context->Intermediate_Hash[2]   = 0x98BADCFE;
context->Intermediate_Hash[3]   = 0x10325476;
context->Intermediate_Hash[4]   = 0xC3D2E1F0;

これらのハードコードされた 16 進数値の重要性は何ですか? それらはアルゴリズムを機能させるための特別なソースですか、それともいくつかの数学定数を表していますか?

ここで完全なコードを表示できます: http://www.faqs.org/rfcs/rfc3174.html

4

3 に答える 3

1

過度に冗長な回答であなたを救うために、それらはアルゴリズムに固有の単なる定数です。同様の使用例として、カーマックの平方根を参照してください。最初の素朴な推測を提供することにより、平方根の従来の方法を高速化する方法として、特別な値を使用します。

これらは、コードで暗示されているように、中間ハッシュ要素として機能するのに役立つ数値にすぎません。数学定数として暗示するように、必ずしも意味があるわけではありませんが、アルゴリズムにとって重要です。

于 2009-04-18T20:58:47.180 に答える
1

あなたの質問には答えませんが、(RFC で説明されているように) SHA-1 への実際の参照はFIPS 180であることに注意してください。これ以上の説明はありませんが、少なくとも元のソースです:-(

また、SHA-1 は現在深刻な危機に瀕していることを忘れないでください。

于 2009-04-19T09:19:20.083 に答える
1

彼らは「私の袖の数は何もない」 .

選択された値には特別なプロパティはありません。これらは、ランダムに選択された値と同じプロパティを持つ数値ですが、アルゴリズム設計者がそれらを選択することはできません。定数を選択するアルゴリズム設計者は、ある種のバックドアを埋め込むことを許可する可能性があるため、可能な限り自由度を減らす方法で定数が選択されます。

典型的な選択肢には、円周率の最初の桁が含まれます。SHA-1 の場合は、小さい素数の平方根が含まれます。

使用される定数値は、私の袖の数字として何も選択されていません: 4 つのラウンド定数 k は、2、3、5、および 10 の平方根の 2^30 倍です。h0 から h3 の最初の 4 つの開始値は、MD5 と同じです。アルゴリズムであり、5 番目 (h4 の場合) も同様です。

ウィキペディアから: SHA-1

于 2013-02-09T16:13:29.373 に答える