暗号化されたコンテナのMD5およびSHA1ハッシュが一致する場合。変更されている可能性はありませんか?
コンテナーが変更されたことがないと想定しても安全ですか?
pigeonholeの原則 と、暗号化ハッシュ関数の出力のほぼ均一な分布により、同じハッシュ値を持つ多くのファイルが常に存在する可能性があります。これは、ハッシュ関数の任意の入力サイズで理解できますが、MD5は128ビット、SHA-1は160ビットの出力サイズなど、固定の出力サイズですが、すべてのファイルをハッシュできます。
2つの異なるハッシュまたはそれ以上を使用すると、確率が低下しますが、それは必要ありません。 MD5とSHA-1の両方を組み合わせた場合よりも高い耐性を持つSHA3-512またはBlake2-512のようなハッシュを使用するだけです。より長い出力で攻撃が成功する確率を低くしたい場合は、ShakeのようなXOFを使用できます。
また、HMAC-SHA3を使用して、偽造を防ぐキー付きハッシュを作成することもできます。これは、攻撃者がファイルとそのハッシュに同時にアクセスできる場合に、そのハッシュで新しいファイルに置き換えることができる場合に役立ちます。 HMACはキーを必要とするため、この攻撃を実行することはできません。
注意してくださいMD5もSHA-1も安全であるとは見なされなくなりました。 MD5とSHA-1には 衝突攻撃 があります。
SHA1とMD5の両方を変更せずにコンテナーを変更できるという非常に非常に非常に低い数学的確率があります。両方のハッシュに対する衝突攻撃が知られていますが、復号化できる有効な暗号文を生成する必要があり、これにより困難になります。また、MD5ハッシュとSHA1ハッシュの両方に同時に衝突を引き起こす実際的な攻撃についても知りません。したがって、ハッシュが同じであることを確認できれば大丈夫だと思いますが、少なくとも新しいハッシュ関数(SHA2)を使用することも推奨します。
ただし、ハッシュが正しいことをどのように知っているかは説明しません。どこで/どのように入手したのですか?ハッシュは整合性のみを提供し、信頼性は提供しません。攻撃者によってハッシュが提供される可能性がある場合、誰でもハッシュを作成または置換できます。
また、データが暗号化されていることにも言及しています。通常、何かを暗号化するときは、「署名」することも必要です。おそらく、可能であれば、認証された暗号モードであるAES-GCMを使用する必要があります。これにより、信頼性、完全性、機密性の両方が保証されます。
すでに暗号化されているデータに真正性と完全性のチェックを追加する必要があるだけの方法を変更できない場合は、おそらくHMACを使用する必要があります。データを生成する人物が別の人物である場合は、ハッシュの非対称キー署名を使用するか、非対称プロトコルを使用してHMACキーを共有することもできます。