2017-04-11 17 views
0

下ダイジェストだから私は(あなたがhttp://csrc.nist.gov/groups/STM/cavp/secure-hashing.htmlの下部に見つけることができます)SHA1の実装SHA1ビット指向のテストベクトルが間違っていますopensslの

の有効性をテストするためのテストベクトルのこのリストaccrossの大多数が来ましたテストベクトルは "short"と呼ばれ(そのサイズはブロックサイズより小さいので)、合格します。しかし、すべての長いテストベクトルに対して、opensslは期待されるものとは異なるダイジェストを出力します。

例:

Msg = d372b4bf97daa3be77e0d78c123c7bb39dde10c82824c83f2250308320391247da419a167686b7320a5dc49b5cfc686eec76bb7034edaaeb2e029cb91791569e739c1bdb518418ffd07f0001e0 

Expected MD = c60a02fffa45deccb075e386be3aa9313c2df4f2 

Openssl output = 77 2d ff f3 54 31 2c df 93 e1 94 2f 10 91 f7 f8 78 61 91 c1 

N.B:テストベクトルは、ビット指向の実装のために作られています。私が理解していることは、この種の実装では必ずしもバイトの倍数ではないサイズのメッセージのダイジェストを計算できるということです。

これがなぜ起こっているのか誰かが気づいていますか?

答えて

1

ビットモードを確認しようとしていますが、OpenSSLはバイトモードのみをサポートしています。あるいは、少なくとも、彼らは今までバイトモードのためのFIPS CAVP証明書を発行してきました:http://csrc.nist.gov/groups/STM/cavp/documents/shs/shaval.html#2465

SHA-1 (BYTE-only) 
SHA-224 (BYTE-only) 
SHA-256 (BYTE-only) 
SHA-384 (BYTE-only) 
SHA-512 (BYTE-only) 

あなたはBIT値の正しい答えを提供するものとして認定されているライブラリが必要な場合は、「ためにそのリストを検索しますSHA-1(BIT)」を参照してください。カップルがあり、どのくらいのものが消費可能なAPIなのかは分かりません。

または、データをバイト整列します。

+0

ええ、私はそれを明らかにするために感謝します。 d372b4bf97daa3be77e0d78c123c7bb39dde10c82824c83f2250308320391247da419a167686b7320a5dc49b5cfc686eec76bb7034edaaeb2e029cb91791569e739c1bdb518418ffd07f0001e0'はBITのみの実装を使用してハッシュし、BYTE-一つだけ '違いが存在しなければならない理由しかし、私は非常に把握することはできませんか?ここで説明しているのと同じプロセスではありませんか? http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.198-1.pdf –

+0

つまり、ビットのみの実装のダイジェストとバイトのみのダイジェストの違いは何ですか?同じ任意の長さの入力に適用されますか? –

0

あなたのコメントに応じて、私はNISTテストベクトルを使用しているときの出力の重要な違いは、ビット指向の出力を行うときに指定された長さが非常に重要であると考えています。バイト指向の出力では、NISTメッセージが98だった場合、SHAアルゴリズムへの正しい入力がバイトb10011000であると確信することができます。しかし、ビット指向であれば、例えばlen = 6となる可能性があります。その場合、アルゴリズムへの正しい入力はb100110です。またはlen = 7b1001100

関連する問題