以前は、ハッシュされたパスワード(saltなし)を格納するためにvarchar(255)
を使用していました。これで十分ですか?それとも長いフィールドが必要ですか?
データベースのフィールドのサイズは、キー導出関数の出力のサイズと正確に一致する必要があります。したがって 出力が60文字の場合 は、varchar(60)
を使用します(または、データベース内でそれよりも小さいか速い場合はchar(60)
を使用します)。
また、パスワードをハッシュ化して1日で呼び出すのではなく、 それを正しく行う 。
それがあなたの質問であるならば、より長いデータベースフィールドまたは異なるタイプはセキュリティに違いをもたらしません。
結果のハッシュの完全なビット長を含めるのに十分な長さのフィールド長を選択する必要があります。これは、ストレージのオーバーヘッドとパフォーマンスを最小限に抑えるためのものです。 (これをガイドとして参照してください https://stackoverflow.com/questions/247304/mysql-what-data-type-to-use-for-hashed-password-field-and-what-length )
ハッシュアルゴリズムは、どのくらいの量のデータが入力されたかに関係なく、まったく同じ量のデータ(ビット長)を返します。
つまり、(パスワードまたはパスワード+ saltまたは100行のテキスト)hashedは、同じアルゴリズムでハッシュした後、まったく同じ量のビットを返します。
既に述べたように、セキュリティを向上させるには、ソルトのハッシュ、収集、および格納方法(変更する場合)を変更する必要があります。
どのような入力を使用しても、ハッシュは常に同じ長さの結果を生成します。さらに、ハッシュ関数hash(password+salt)
を適用する前に入力をソルトする必要があるため、ソルトはハッシュの長さに影響しません。ハッシュ出力の長さよりも長いDBフィールドを使用する必要はありません。
さらに、ハッシュ関数を繰り返しても長さに影響はありません:length(hash(hash(input))) == length(hash(input))