ストレッチング 【stretching】
概要
ストレッチング(stretching)とは、「引き伸ばし」という意味の英単語。セキュリティ分野では、パスワードを保管する際にハッシュ化を繰り返すことを指す。保管された認証データが攻撃者に盗み取られても、元のパスワードを復元できないようにする。ユーザー認証システムではユーザー名などの識別符号と、パスワードや生体情報など本人確認に用いる秘密の情報をセットで登録する必要がある。パスワードなど「本人しか知らない情報」を用いる場合、これが攻撃者に漏洩すると本人になりすましてシステムを操作することができてしまう。
これを防ぐため、パスワード自体を保存するのではなく、パスワードを暗号学的ハッシュ関数によってハッシュ化したハッシュ値のみを保存する手法が用いられることがある。暗号学的ハッシュ関数は元のデータから固定長のデータを得るハッシュ関数の一種で、ハッシュ値から元の値を逆算したり推測することが困難となるよう算出方法を工夫している。
攻撃者がハッシュ値を入手した場合、パスワードそのものを逆算することは困難だが、パスワードの候補を大量に生成してハッシュ値が一致するか片っ端から確認していく「総当たり攻撃」(ブルートフォース攻撃)を行えば、パスワードを割り出すことは不可能ではない。
パスワードが十分長い場合はパスワード候補も数も膨大な量になるため、確認には天文学的な時間がかかり事実上割り出すことは不可能だが、英数字のみの7桁未満といった短いパスワードの場合は候補の数も少なく、現実的な時間で割り出すことができてしまう場合がある。
ストレッチングはパスワードが短い場合でも割り出しを困難にするための措置で、パスワードの記録時にパスワードをハッシュ化した値を元に再度ハッシュ化し、その値を再度ハッシュ化し…という手順を何度も繰り返した値を保存する。回数はシステムや設定によるが、一般的には数千回から1万回といった膨大な回数を繰り返す。
攻撃者はハッシュ値を入手した場合、総当たり攻撃で元の値を入手できるが、ストレッチングされている場合はハッシュ値から原文を割り出す操作を数千回繰り返さなければ元のパスワードにたどり着くことができない。一方、ユーサー認証の際は利用者が入力したパスワードを保管時と同じように数千回ハッシュ化するだけで照合が終わるため、システムの負荷はそれほど大きくならない。