2022-03-18

何故パスワード文字数制限があるのか

仮説1:平文保存している

DB設計する場合パスワードカラムを何文字にするか決めなければならない

MySQLならvarchar(10)みたいな感じだ

これを最大2万文字かにできなくもないが、DB容量を圧迫するといった理由で8文字10文字限定していてもおかしくはない

MongoDBのようなオブジェクトDBなら別だがSQL系のDBならこの理由が最もあてはまりそうに思う

同様の理由文字種にも制限をかけてそう(UTF-8とか送られたら面倒)

仮説2:テストができないか

境界テストとしては最大文字数を試さないといけないが無制限だとそれができなくなる

100文字テストするとなると、仕様としては100文字限界ということになって文字制限をかけることになる

ただ、それなら8文字とかで制限している理由として弱い気がする

仮説3:過負荷の防止

制限ということは極端に言うと1GBのパスワードを受け付ける、ということになる

1GBのハッシュ値計算するのはブラウザ側になるのだが、1GBのハッシュ値計算が重くて使えない、という苦情が来るかも知れない

ただ、これも1000文字かにしてしまえば良くて、8文字にしている理由にはならない

仮説4:何も考えていない

ウォーターフォール実装する場合に上位レイヤでの仕様を決めるのはプログラマーでない場合が多く

定型エクセル仕様書に「パスワードの最大文字数」というセルがあって、そこにデフォルトで8という数字が入っている

上位レイヤで仮にそこに100とか1000とかの数字を入れたとき、下位レイヤで何が起こるかわからない

仮に何か起きた場合は書いた人の責任になるから触らない

触らないことで問題が起きてもその人の責任にはならない

まりそこに8と書いた人が現代にいるのではなく、誰も決定していないか文字制限が起きている

下位レイヤでの実装側は平文保存の危険性を十分に理解しているのでハッシュ値(とソルトなど)を格納する

多分、仮説4だと思うが、仮説1でないことを信じたい。

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん