パスワードなどの文字列をsha256でハッシュする場合、ハッシュする文字列の長さに制限はありますか?たとえば、64文字以下の文字列をハッシュすることだけが「安全」ですか?
技術的には限界がありますが、かなり大きいです。 SHA-256に使用されるパディング方式では、入力のサイズ(ビット単位)を64ビットの数値として表現する必要があります。したがって、最大サイズは(264-1)/ 8バイト〜= 2'091'752テラバイト。
それは限界をレンダリングしますほぼ完全に理論的であり、実用的ではありません。
ほとんどの人はとにかくそれほど多くのデータのためのストレージを持っていませんが、たとえそれらがあったとしても、それをすべて連続して処理して単一のハッシュを生成することは、ほとんどが禁止することを考えるだろう時間を要するでしょう。
包絡線のような迅速な計算は、現在最速のエンタープライズSSDであっても1 トムのハードウェアに記載されており、帯域幅を改善するために16幅にストライプ化します。その量のデータを読み取るだけでも、約220年かかります。
1. 2016年4月現在。
最大メッセージサイズ2以外は、このような制限はありません。64-1ビット。 SHA2は、実行可能ファイルのハッシュを生成するために頻繁に使用され、数十バイトよりはるかに大きくなる傾向があります。
上限はNIST標準 FIPS 180-4 で指定されています。上限の理由は、パディング方式です。メッセージの長さl
は、パディング中に最後にメッセージに追加されます。
次に、バイナリ表現を使用して表現された
l
に等しい64ビットブロックを追加します
したがって、NIST標準では、SHA-256でハッシュできる最大ファイルサイズは2 ^ 64です。