パスワードに関するセキュリティのお話
こんにちは、CSサポート部の大内です。
皆様は、「パスワード」を忘れないように管理していますでしょうか。私は、ついついパスワードを忘れてしまい、よく「パスワードを忘れた方はこちら」からパスワードを再発行しています(汗)。
「大小英字、数字、記号といった全文字種を組み合わせて、8文字以上のパスワードにする」等、利用者の立場からすると困ってしまいますよね。ただ、このパスワードの桁数を長くすることは、パスワードを見破ろうとするハッカーに対して意外と有効で、簡単にできる対策になります。例えば、70種類の文字種を使ってパスワードを設定する場合、10字の場合と6字の場合は使用可能な文字列のパターンが70の4乗(24,010,000)倍、見破ることが困難になります。パスワードを総当たりで入力し不正アクセスを行うサイバー攻撃がありますが、「24,010,000倍」は、さすがのハッカーも苦労しそうです。
このお話は、直近の情報処理技術者試験に取り上げられていました。この試験の問題の中に「ペッパー」と「ソルト」に関する内容も含まれており、面白かったのでお話させてください。塩コショウ?料理でもするの?という感じですが、これもセキュリティを守る手法の一種になります。
パスワードは、システムへアクセスするために非常に重要なものです。このパスワードがシステム内に平文で保存されていると、ハッキングのリスクが高まるため、ハッシュ化(元に戻すのが非常に困難な暗号化)されたものをハッシュ値として保存します。
例えば、次のような会員番号ごとにハッシュ値を保存したテーブルがあるとします。一見すると、元のパスワードを推定することはできそうにありません。
ただし、よく見ると会員番号1と会員番号4のハッシュ値が同じものになっており、仮に会員番号1番のパスワードが流出し不正アクセスを受けた場合は、同時に会員番号4も不正アクセスされる可能性が高くなります。
ソルトとは、ハッシュ化される前のパスワードに付与する文字列を追加することを言います。例えば、同じパスワードに会員番号を加えてハッシュ化(例えば、banana7をbanana71にしてハッシュ化)すると次のようになります。
これで会員番号1と4のハッシュ値が異なり、仮に会員番号1のパスワードが流出しても会員番号4のパスワードが推測されるリスクが少なくなりました。ただし、このソルトは、会員ごとに異なる番号を付与する特性上、ハッシュ値と同じ場所、テーブルで管理されていることが多いです。
そのため、ハッシュ値を格納しているテーブルが漏洩してしまった場合は、ソルトも一緒に漏洩してしまうため、せっかくソルトを利用しても、パスワードが推測される可能性が高くなります。
ペッパーは、よりセキュアな場所に格納されている共通の文字列です。シークレットソルトとも呼ばれます。
会員番号ごとに違う文字列の「ソルト」と、ハッシュ値が保存されている場所とは別の安全な領域に格納されている共通文字列の「ペッパー」を組み合わせ、パスワードに加えハッシュ化することで、よりセキュリティを強化することができます。
今回、普段、何気なく聞く「パスワード」や「ハッシュ化」について、さらにセキュリティを強化する方法についてお話しました。こういったセキュリティ技術にも興味を向け、より高いサポートを皆様にご提供できればなと思います。