ゼロバイトのファイルはどのようにハッシュ値を生成できるのでしょうか?

ゼロバイトのファイルはどのようにハッシュ値を生成できるのでしょうか?

sha1sum、sha256sum などでハッシュ化した場合、ゼロ バイトのテキスト ファイルはどのようにハッシュを生成できるのでしょうか。プログラムはハッシュ値を生成するためにどのようなデータをハッシュ化しているのでしょうか。

Linux の QuickHash

ターミナルコマンド

答え1

ハッシュ アルゴリズムは、データが存在するかどうかに関係なく、入力を読み取って処理します。これは有効かつ望ましい動作であり、特定の実装が正しいかどうかを確認するためにも使用されます。これにより、すべての主要なアルゴリズムで「null ハッシュ」が発生します。

要約すると、da39a3ee5e6b4b0d3255bfef95601890afd80709 はどこでも空のファイルの sha1 ハッシュであり、他のアルゴリズムの null ハッシュでも同様です。

答え2

クイックハッシュのすべてのハッシュアルゴリズムはメルケル・ダムゴード構造そのため、メッセージをブロック サイズの倍数にパディングします。

Quick Hash のアルゴリズムは、ビットを追加し10必要な数のビットを追加し、最後にメッセージの長さを追加することでこれを実現します。

これにより、長さゼロのメッセージを含む任意の長さのメッセージをハッシュできるようになります。

答え3

(Dennis と fixer1234 の回答への追加?)

簡潔に言うと:

$ shasum -a 256 /dev/null e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 /dev/null

すべての 0 バイトのファイルのチェックサムは同じになります。

$ shasum -a 512 /dev/null cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e /dev/null

$ shasum /dev/null da39a3ee5e6b4b0d3255bfef95601890afd80709 /dev/null

$ md5 /dev/null MD5 (/dev/null) = d41d8cd98f00b204e9800998ecf8427e(注: MD5 は壊れており、「安全なハッシュ」ではありません。これは、Wikipedia の MD5 のエントリに記載されています。)

例えば、ファイルの無害性を検証しようとしている場合、ウイルストータルここにリストされている安全なハッシュ値のいずれかを使用すると、da39a3ee5e6b4b0d3255bfef95601890afd80709ファイルが実際に 0 バイトであったこと (または、紛らわしいことに、virustotal が 0 バイトのファイルであるかのようにハッシュするフォルダーであったこと) を確信できます。

関連情報