ストレッチング
2022/4/21 17:10:00
ストレッチングとは、パスワードに対するハッシュ化を繰り返し実施することであり、繰り返しの回数としては概ね1万回~10万回という値が採用されることが多い。
PBKDF2(Password-Based Key Derivation Function 2)
Django や iOS 9 などが採用しているアルゴリズムです。ハッシュ関数として HMAC-SHA1 や HMAC-SHA256 などを選択することができます。ソルトとストレッチ回数を指定します。下記は Python で PBKDF2 のハッシュ値を求めるサンプルです。ストレッチ回数は、2005年時点の推奨値で4,096回。iOS 9 では 10,000回のストレッチングを行っています。
ストレッチングというのは、ハッシュ値の計算を何回も(1000回~数万回程度)繰り返すことです。一般にハッシュ関数は高速性を求められますが、この高速性は総当たり攻撃に対しては脆弱な方向に働きます。総当たりに要する時間も短縮されるからです。
しかし、ハッシュ保存用にわざわざ低速なアルゴリズムを開発するのも手間が掛かるので、高速なハッシュを繰り返し用いることで速度を遅くするというのが、ストレッチングの考え方です。