web-dev-qa-db-ja.com

パスワード保存用のデータベースフィールドタイプ?

以前は、ハッシュされたパスワード(saltなし)を格納するためにvarchar(255)を使用していました。これで十分ですか?それとも長いフィールドが必要ですか?

3
powtac

データベースのフィールドのサイズは、キー導出関数の出力のサイズと正確に一致する必要があります。したがって 出力が60文字の場合 は、varchar(60)を使用します(または、データベース内でそれよりも小さいか速い場合はchar(60)を使用します)。

また、パスワードをハッシュ化して1日で呼び出すのではなく、 それを正しく行う

2
Brendan Long

それがあなたの質問であるならば、より長いデータベースフィールドまたは異なるタイプはセキュリティに違いをもたらしません。

結果のハッシュの完全なビット長を含めるのに十分な長さのフィールド長を選択する必要があります。これは、ストレージのオーバーヘッドとパフォーマンスを最小限に抑えるためのものです。 (これをガイドとして参照してください https://stackoverflow.com/questions/247304/mysql-what-data-type-to-use-for-hashed-password-field-and-what-length

ハッシュアルゴリズムは、どのくらいの量のデータが入力されたかに関係なく、まったく同じ量のデータ(ビット長)を返します。

つまり、(パスワードまたはパスワード+ saltまたは100行のテキスト)hashedは、同じアルゴリズムでハッシュした後、まったく同じ量のビットを返します。

既に述べたように、セキュリティを向上させるには、ソルトのハッシュ、収集、および格納方法(変更する場合)を変更する必要があります。

1
Bernie White

どのような入力を使用しても、ハッシュは常に同じ長さの結果を生成します。さらに、ハッシュ関数hash(password+salt)を適用する前に入力をソルトする必要があるため、ソルトはハッシュの長さに影響しません。ハッシュ出力の長さよりも長いDBフィールドを使用する必要はありません。

さらに、ハッシュ関数を繰り返しても長さに影響はありません:length(hash(hash(input))) == length(hash(input))

0
p____h