
皆さんこんにちは新米です。
今回はソルトとハッシュ化の説明をするよ!
ハッシュ化とは
そもそも関数とは「何かを入れたら何かが返ってくること」を表します。
例えば、自販機に100円を入れたらコーラが返ってくる。
この場合、関数は自販機となります。
また一般的に言えば「与えられた値に対して処理を行い結果を返す機能」のことを言います。
例)以下のsum関数は入れた値に対して足し算の処理を行い結果を返す機能になります。
この場合、引数は2と5、戻り値は7になります。
def sum(a,b): return a + b print(sum(2,5))
実行結果
7

ハッシュ関数とは「入力に対応する適当な値を返してくれる関数」です。
・同じ引数の場合は同じ戻り値が返ってくる。
例えば、ハッシュ関数に「りんご」を入れると「aaa」、「いちご」を入れると「sss」
「みかん」を入れると「xyz」が返ってくるイメージです。
何を入れると何が返ってっくるか入れた者(ユーザ)にはわかりません。
返ってくるのは適当な値になります。
しかし同じ値を入れれば、必ず同じ値が返ってきます。
「りんご」を入れると「aaa」が必ず返ってくると言うことです。
これでもパスワードの特定は難しいですがレインボテーブルなどの手法で特定される危険性があります。

レインボテーブルは、ハッシュ化の「同じ引数の場合は同じ戻り値が返ってくる。」特徴をいい事にハッシュ値から元の値を割り出すやり方を言うよ。
そこでより強固な暗号化にするためにソルト(salt)が使われます!
ソルトとは
ソルトとは「パスワードに適当な文字列を付与した後にハッシュ化する」方法です。
・文字列を付けてからハッシュ化すること。
・ハッシュ化のみよりもセキュリティが強化される。
例えば、パスワード「りんご」に対して文字列「ペン」を付けてからハッシュ関数を行なった場合
悪い人がハッシュ値からパスワードを割り出したとしても「りんごペン」しか分かりません。なので実際のパスワードである「りんご」はバレないことになります。

パスワードは「りんごペン」だな(ドヤ顔)

違うよ〜〜(笑)
ソルト値がわからない限りパスワードはバレない為、ハッシュ化のみよりもセキュリティが強化されます。
まとめ
いかがだったでしょうか。
今回はハッシュとソルトの説明をしました。
実際にソルトを用いたパスワードの暗号化の実装方法をまとめた記事もありますのでよければ読んでみてください。

コメント