技術部長が知りたい事は、実は〇〇だった。

できる部下に囲まれながら、なんとか生きていく。そんな中間管理職の方々の仕事のヒントになれば。

なぜ、「ハッシュ」「ソルト」「ストレッチング」が必要なのか?

ハッシュ、ソルト、ストレッチングってなーに?

 

 

え?そんなことも知らないんですか?

 

 

そう言わずに、教えてよぉ

 

 

分かりました。
ではまず、ユーザーのパスワードは、
DBにどうやって保管してますか?

 

 

そりゃもちろん、暗号化して保管してるよ~

 

 

あちゃ~。部長、それマジで言ってますか?

 

 

え?ダメなの?暗号化って完璧じゃないの?

 

 

暗号化は、カギが漏れれば復号できちゃうので、
残念ながら完璧じゃないです。

 

 

そうすると、どうしたらいいの?

 

 

暗号化後の文字列を更にハッシュ化して、不可逆にしちゃって、
最悪の場合漏えいしても、復号できないようにするといいです。

 

 

 

お、出てきた。ハッシュ化って?

 

 

 

とある文字列を、とある計算式に放り込むと、
不規則な文字列を生成できる仕組みのことです。
この文字列は、もとの文字列に戻すことはできません。

 

 

 

ん?じゃー、パスワードの比較ができなんじゃ?

 

 

入力されたパスワードと
DBに保管されているパスワードは比較しません。
というか不可逆なのでできません。
入力されたパスワードもハッシュ化して
そのハッシュ化された文字列同士を比較します。

 

 

おー、なるほどねぇ。
そうすると、元のパスワードは保持していないから漏えいしても大丈夫だけど、
パスワードで認証ができるんだね。

 

 

さらにここでソルトストレッチングもやっちゃいます。

 

 

おっ、急に出てきた。ソルトやストレッチングってなーに?

 

 

ソルトは、その名の通り「塩」なイメージですw
ハッシュ化する前の文字列に、ランダムに生成した文字列をくっつけてから、ハッシュ化します。

「パスワード」+「ソルト文字列」→ハッシュ化

ハッシュ化も完全では無いので、元の文字列が長ければ、それだけでも攻撃耐性があがるので有効です。
さらに、この付与するソルトは、ユーザ毎に異なる文字列にします。
そうると、たまたま同じパスワードを使っている人同士でも、DB上のハッシュ値が異なり、より安全です。

 

 

ほぉ~。凄いこと考える人がいるもんだねぇ。そしてストレッチングとは?

 

 

最初の方で、ハッシュ化の話をしたと思いますが、このハッシュ化を繰り返し行うことで、より強固なハッシュ値にするのがストレッチングです。


「パスワード」+「ソルト文字列」→ハッシュ化
→ハッシュ化→ハッシュ化・・・

これを数千回から数万回繰り返します。

 

 

数千から数万か。すごいな。

 

 

コンピュータは人間と違って、繰り返し同じことするの得意ですからw

 

 

ほぉ。なるほどねぇ。