BCryptの72文字制限
BCryptは使ったことがないのだが、別のことを調べていたらこういう事象が存在することを知った 元々調べていたもの
ところで、なんでパスワードに「入力制限」があるんだっけ?
パスワードの文字数制限に思っていたこと
まあ、制限なしで1~2文字での登録を許可するとすぐ破られるし…
かといって、いきなり30とか40だと覚えるのも打つのもつらいよねっていう感じ
パスワードマネージャーで流し込むなら意識する必要はないが
容量に限りがあるから必ず限界はあるというのは置いといて…10~30文字で制限する理由
パスワードをハッシュ化して格納するなら入力エリアの長さは気にしなくて良くなるのでは?
と思っていたら、ハッシュ関数の仕様側で72文字縛りがあるという可能性を想定できなかった
じゃあそれ以外でなぜ設定するの?と考えたら…負荷対策?
code:cs
using System;
using System.Security.Cryptography;
public string getHashedPassword(string input) {
// ソルトは今回固定
string SALT = "saltsaltsalt";
int ITERATION_COUNT = 10000;
HashAlgorithmName HASH_ALGORITHM_NAME = HashAlgorithmName.SHA512;
Rfc2898DeriveBytes hashedPasswordBytes = new Rfc2898DeriveBytes(
input, new UTF8Encoding().GetBytes(SALT), ITERATION_COUNT, HASH_ALGORITHM_NAME);
return Convert.ToBase64String(hashedPasswordBytes.GetBytes(32));
}
BCryptに文字数制限があることを知る、また自前回避で脆弱性を埋め込んでしまうことを知る
関連