暗号理論における「ソルト」とは
ソルトの概要を見ていきましょう。
ハッシュ値の強度を高めるために付与するデータ
ハッシュ値とは、データを不可逆的に変換したものです。暗号化と違い、特定のアルゴリズムによって復号できないのが特徴です。
しかし、ハッシュ値から元のデータを割り出す方法がないわけではありません。そのため、第三者に元のデータを知られるおそれがあります。そのリスクに備えて、ハッシュ値の強度を高めるために付加されるのがソルトです。
ソルトはハッシュ化前のパスワードに付加する文字列で、これによって不正な復号を困難にします。
レインボー攻撃に対して有効
ハッシュ値から元のデータを割り出すサイバー攻撃を、レインボー攻撃あるいはレインボーテーブル攻撃といいます。これは、レインボーテーブルという対応表を使った攻撃です。
レインボーテーブルには、どのような平文からどのようなハッシュ値が得られるのかが記載されています。この対応表と同じアルゴリズムでハッシュ化されている場合、ハッシュ値から元の平文を見つけ出せます。
ただし、レインボー攻撃は膨大な記憶容量が必要なのが弱点です。考えられる平文の文字列を網羅しなければならないためです。したがって、長い平文まで含めると現実的な記憶容量ではレインボーテーブルを構築できなくなります。
ソルトを付加すれば元のデータが長くなるため、レインボー攻撃対策として有効です。
ソルトの課題
ソルトによるメリットは主に以下の2つです。
- ■文字列が長くなるためレインボーテーブル対策になる
- ■たとえ復号されてもソルトが分からなければパスワードは判明しない
前者は特に問題なく、少ないコストで大きなメリットが得られるセキュリティ対策として効果を発揮します。
ところが、後者には難点があります。ハッシュ値とソルトが同時に流出してしまえば意味がないことです。基本的にソルトはユーザごとに異なる文字列が付加されます。
したがって、サービス提供者は誰のパスワードにどのようなソルトを付加したのかを管理するとともに、流出を防がなければなりません。
ソルトを付与する際の注意点
ソルトを安全に使うための注意点を2つ解説します。
ユーザ毎に異なる値を割り振る
レインボー攻撃の効率を下げるために、ユーザごとに異なるソルトを付加する必要があります。もし全員に同じソルトを付加すると、よく使われているパスワードが判明してしまうからです。
ソルトが同じ場合、同じパスワードのハッシュ値はすべて同一になります。つまり、攻撃者は、得たハッシュ値の中から数が多いものを攻撃すれば、同じパスワードを使うユーザを多数同時に攻撃できるのです。
さらに、よく使われるパスワードは辞書に載っている言葉が使われがちです。そのため総当たり攻撃が通じやすく、攻撃にかかる時間を短縮されてしまいます。
ある程度の長さが必要
ソルト化によるメリットの1つは、元のデータを長くすることでレインボー攻撃を防げることです。レインボー攻撃を困難にするには、20桁以上の文字数を付加するのが目安とされています。
ただし、あまり長くするとコンピュータに負荷がかかります。安全性と負荷のバランスを考えて桁数を決めましょう。
パスワードのセキュリティ強度を高める手法
ソルト化してもパスワードの安全性は充分ではありません。より安全性を高めるための方法を2つ紹介します。
ランダムではないデータを付加する「ペッパー」
ペッパーとは、ソルトと同様にパスワードに付加するものです。ただし、以下の2点でソルトと異なります。
- ■すべてのユーザのパスワードに同じペッパーが付加される
- ■データベース以外の場所に保管される
ユーザごとに値を変えないため、安全性はソルトに劣ると考えられています。そのため、実際にペッパーを使っている人は多くないようです。しかし、後者の特徴があるためソルトと組み合わせると安全性を高められます。
ソルトはユーザごとに異なるため、各ユーザのソルトを保管しなければなりません。一般的にそのデータはデータベースに保管されるため、ここから情報が漏洩すると第三者にソルトを知られます。
しかし、ペッパーはデータベース以外の場所に保存されるため、簡単には第三者の手に渡りません。第三者がハッシュ値からパスワードを割り出すうえで、ペッパーの特定は最後の関門となり得ます。
ハッシュ化を繰り返す「ストレッチング」
ストレッチングとは、1つのパスワードを何度もハッシュ化することです。一般的には数千から数万回ほどハッシュ化します。
ストレッチングのメリットは、解読にかかる時間を長くできることです。数万回のハッシュ化を繰り返せば、レインボー攻撃による解読は数十年を要するようになります。
ただし、コンピュータの性能が上がるに従って、レインボー攻撃における処理速度も向上します。そのため、コンピュータに負荷が掛かりすぎない範囲で徐々にストレッチング回数を増やすのが理想的です。
暗号理論におけるソルト化を理解し、セキュリティを向上!
暗号理論におけるソルトとは、ハッシュ化の強度を高めるために平文に付加する文字列のことです。これにより、レインボー攻撃による平文の特定が困難になります。ソルトを付与する際は以下の2点に気をつけましょう。
- ■ユーザごとに異なる値を付加
- ■20桁程度の長さが必要
また、さらに強度を高める方法は以下のとおりです。
- ■ペッパーの付加
- ■ストレッチング
以上を踏まえ、自社のセキュリティを強化しましょう。