『ハッシュとソルト、ストレッチングを正しく理解する 本当は怖いパスワードの話』
2022/4/21 17:32:00
教科書などでは、ソルトに乱数を使っている実装をよく見かけますが、原理的には乱数である必要はありません。通常、ソルトはハッシュ値とともに保存するので、オフライン攻撃者にとってソルトは秘密情報ではありません。また、ある程度長さが確保できれば、ユーザーIDそのものをソルトにすることもできますが、ユーザーIDを後から変更できるサイトの場合は実装に工夫が必要になります。
ストレッチングというのは、ハッシュ値の計算を何回も(1000回~数万回程度)繰り返すことです。一般にハッシュ関数は高速性を求められますが、この高速性は総当たり攻撃に対しては脆弱な方向に働きます。総当たりに要する時間も短縮されるからです。
しかし、ハッシュ保存用にわざわざ低速なアルゴリズムを開発するのも手間が掛かるので、高速なハッシュを繰り返し用いることで速度を遅くするというのが、ストレッチングの考え方です。