パスワードは、システムへのアクセスを保護する重要な要素です。しかし、パスワードを平文で保存すると、ハッキングされるリスクが高くなります。そこで、パスワードをハッシュ化することが有効になります。
ハッシュの脆弱性
ハッシュも完璧ではありません。例えば レインボーテーブル攻撃
があります。これはハッシュ値とその元データの大量のペアを事前に計算して保存することによって、パスワードや暗号化されたデータを解読する攻撃です。
これらの脆弱性への対策としてソルト
とストレッチング
があります。
ハッシュの対策
ソルトとストレッチングは、パスワードのセキュリティを強化するための重要な技術
です。これらは、パスワードがハッシュ化された後でも、攻撃者が簡単にパスワードを推測できないようにするために使われます。
ソルト
ソルトは、パスワードを守るために使われる技術で、パスワードをハッシュ化するときに追加されるランダムなデータ
です。これにより、攻撃者がパスワードを解読するのが難しく
なります。
ソルトの特徴
- ランダムなデータ
- ソルトは、適当に作られた
ランダムなデータ
です。例えば、あなたのパスワードに「abcd1234」というパスワードがあった場合、そこに「Zxy45」などのランダムな文字列が付け加えられます。
- ソルトは、適当に作られた
- 一人ひとり異なる
- ソルトは、
各ユーザーのパスワードごとに異なる
ので、同じパスワードでも、他の人とは異なるハッシュ(変換されたデータ)が生成
されます。
- ソルトは、
- 長さはバラバラ
ソルトの長さはバラバラ
で、できるだけ長く作るほうが安全です。長いソルトほど、攻撃者が解読するのが難しくなります。
ソルトの仕組み
- ハッシュ化の手助け
- パスワードをハッシュ化するとき、ソルトを追加することで、より複雑なハッシュ値が作られます。これは、
同じパスワードを持っていても、他の人と違うハッシュ値
になるようにするためです。
- パスワードをハッシュ化するとき、ソルトを追加することで、より複雑なハッシュ値が作られます。これは、
- ログインの仕組み
- あなたがログインするとき、システムはパスワードにソルトを追加してハッシュ化し、その結果をデータベースにあるハッシュと比べます。一致すればログイン成功です。
- 攻撃者を混乱させる
- ソルトは、攻撃者がパスワードのハッシュを事前に計算してリストを作る
レインボーテーブル攻撃
という手法を防ぎます。ソルトがあると、リストが使えなくなるのです。
- ソルトは、攻撃者がパスワードのハッシュを事前に計算してリストを作る
ソルトの効果
- ハッシュの多様化
- 同じパスワードでも、異なるソルトが加わることで異なるハッシュになります。これにより、同じパスワードを持つユーザーがいても、ハッシュは異なるので安全です。
- ブルートフォース攻撃の難化
- ソルトを使うことで、
パスワードを片っ端から試す攻撃(ブルートフォース攻撃)
が難しくなります。攻撃者は1つ1つ別々に試さないといけなくなるからです。
- ソルトを使うことで、
- 攻撃者の時間を奪う
- ソルトがあることで、攻撃者はより多くの時間や計算を必要とするため、パスワード解読の成功確率が下がります。
ソルトの弱点
- 再利用されると危険
同じソルトが何度も使われる
と、同じパスワードが同じハッシュになってしまいます。これでは、ソルトを使う意味がなくなります。
- 短すぎると効果がない
ソルトが短い
と、攻撃者は全ての組み合わせを試すことができます。短すぎるソルトでは、攻撃を防ぐ効果が薄れてしまいます。
- ソルトのランダム性が低い
- ソルトがランダムに見えない場合、攻撃者に推測される可能性があります。ソルトは本当にランダムに作られなければなりません。
- ソルトが漏れる
- ソルト自体が漏れると、パスワードが解読されやすくなります。ソルトの保管にも注意が必要です。
まとめ
ソルトは、パスワードの安全性を高めるための重要な技術
です。ただし、正しく使わないと効果が薄れてしまうので、長くてランダムなソルトを使い、一人ひとりのユーザーに異なるソルトを割り当てることが大切です。
ストレッチング
ソルトの弱点を補うために、「ストレッチング」という技術が使われます。まず、ソルトの弱点を簡単に説明した後に、ストレッチングによる対策について説明します。
ソルトの弱点
- 短すぎるソルト
- 短いソルトは、総当たり攻撃(ブルートフォース攻撃)に対して効果が低くなります。攻撃者がすべてのソルトの組み合わせを試せるため、解読の難易度が下がります。
- ソルトの漏洩
- ソルト自体が攻撃者に知られると、攻撃がしやすくなります。パスワードに加えるデータが公開されるので、攻撃者はパスワードそのものに集中できます。
- ソルトの再利用
- 同じソルトを何度も使うと、同じパスワードであれば同じハッシュになります。これにより、攻撃者が特定のパターンを見つける可能性が高まります。
ストレッチングでできる対策
ストレッチングとは、パスワードとソルトを使ってハッシュ化する際に、単に1回ではなく、何度も繰り返しハッシュ化する技術
です。これにより、攻撃者がハッシュを解読する難易度が大幅に上がります。
ストレッチングが可能な対策
- 計算コストの増加
- ストレッチングでは、ハッシュ計算を何度も繰り返すため、1つのハッシュを計算するのに攻撃者が必要とする時間が大幅に増加します。これにより、
ブルートフォース攻撃が現実的でなくなります
。
- ストレッチングでは、ハッシュ計算を何度も繰り返すため、1つのハッシュを計算するのに攻撃者が必要とする時間が大幅に増加します。これにより、
- 解読の困難化
- ストレッチングによって、攻撃者はパスワードの解読に必要な計算力や時間が増え、
レインボーテーブルや辞書攻撃といった高速な解読方法の効果が低く
なります。
- ストレッチングによって、攻撃者はパスワードの解読に必要な計算力や時間が増え、
- ソルトの漏洩に対する耐性向上
ソルトが漏れた場合
でも、ストレッチングを行っていると、攻撃者が1つのパスワードを解読するのにかかる時間が長くなり、攻撃を受ける可能性が低くなります。
- ソルトの再利用による攻撃の遅延
- ソルトが再利用された場合でも、ストレッチングによって解読の難易度が上がるため、パスワードハッシュの一致を見つけるのに攻撃者はより多くのリソースを消費することになります。
代表的なストレッチングアルゴリズム
- PBKDF2(Password-Based Key Derivation Function 2)
- bcrypt
- Argon2
これらは、ハッシュ計算を繰り返すことでパスワードの保護を強化する仕組みです。
まとめ
- ソルトの弱点は、短さ、漏洩、再利用です。
- ストレッチングは、これらの弱点に対して、ハッシュ計算を何度も繰り返し行うことで、解読を困難にし、攻撃の成功率を下げる対策です。
このように、ソルトとストレッチングを併用することで、より強固なパスワード保護が可能になります。