私の質問は、このHow to hash long passwords (>72 characters) with blowfishから派生して います
パスワードをハッシュするために bcrypt(blowfish) を使用しています。したがって、この質問からわかったように https://security.stackexchange.com/questions/39849/does-bcrypt-have-a-maximum-password-length
文字数制限は 72 です。
それで、パスワードの最大長を制限することを考え始めましたが、これらの質問とその回答の後
言われていることはすべて反対です。のようなものに言及する
- ストレージを保存
- 古い Unix システムの経験
- 長いパスワードをサポートしていないレガシー システムとの相互作用
- 慣例(つまり、「私たちはいつもそのようにしてきた」)
- 単純な無知または無知。
- 平文で保存
- また、
a maximum length specified on a password field should be read as a SECURITY WARNING
この回答による - https://stackoverflow.com/a/99724/932473 - 等
したがって、私はこれらのケースのいずれとも一致しないと思います。もちろん、最大長が 10、さらに悪い場合は 8 または 6 などのばかげた制限には同意しますが、30、40、またはそれ以上の長さのパスワード (ソルト) は安全と見なされませんか? この記事から(少し古いですが)、
it can make only 71,000 guesses against Bcrypt per second
そして、これは8文字のパスワード用です。したがって、レインボーテーブルのサイズが指数関数的に増加するにつれて、30文字以上のパスワードを1つだけブルートフォースするカスタムレインボーテーブルがどれほど巨大になるかを想像します(各パスワードには独自のソルトがあることを考慮して)。
同記事コメントより引用
パスワードに文字を追加するたびに、力ずくでクラックするのが指数関数的に難しくなります。たとえば、8 文字のパスワードには 95^8 の組み合わせのキースペースがあり、20 文字のパスワードには 95^20 の組み合わせのキースペースがあります。
したがって、それに応じて bcrypt を使用した 20 の長さのパスワードが必要になる場合は、95^20 / (71 000 * 3600 * 24 * 365) ~ 10 の 28 度年 (正しく実行した場合)
qsn1:さて、この場合、blowfish の場合、パスワードの最大長を 72 までに制限しないという意味があります。これ以降はすべてが切り捨てられるため、ここでは余分なセキュリティが得られないためです。
qsn2:ソルト (ユーザーごとに一意であり、db に保存されます) が存在する場合でも、やはりパスワードにコショウ (db に保存されるのではなく、アプリケーションにハードコーディングされます) を追加したいと考えています。少し余分なセキュリティが追加されるかどうかはわかっていますが、万が一の場合に備えて、db(またはdbバックアップ)がリークされているだけの場合は、pepperが役立つと考えています.
https://security.stackexchange.com/a/3289/38200
したがって、たとえば 20 文字のペッパーを追加できるようにするには、パスワードの最大長を約 50 にする必要があります。次のように考えます。ユーザーが 70 文字を使用しているとしましょう。ほとんどの場合 (すべてではないにしても)、強力なフレーズを生成するのではなく、そのようなフレーズやスムスであるため、ユーザーを最大長で 50 に制限し、さらに 20 ~ 22 文字のペッパーを追加する方が安全ではないでしょうか。また、ハッカーが「一般的なフレーズ」のレインボー テーブルを使用しているとし72 character common phrase
ましょう50 character common phrase + 22 character random string
。それで、このアプローチはコショウと50の最大長の方が良いですか、それとも私は間違っているので、72の最大制限を残す方が良いですか(qsn1が問題ない場合)?
ありがとう
ところで:
Owasp によると、パスワードの妥当な最大長は 160 https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet#Do_not_limit_the_character_set_and_set_long_max_lengths_for_credentials
Google のパスワードの最大長は 100 です
Wordpress の上限は 50 です