【解決!】ハッシュ化?ソルト(salt)?一体なんぞや?(セキュリティ強化)

新米太郎
新米太郎

皆さんこんにちは新米です。

今回はソルトとハッシュ化の説明をするよ!



ハッシュ化とは

そもそも関数とは「何かを入れたら何かが返ってくること」を表します。

引数→処理→戻り値

 

例えば、自販機に100円を入れたらコーラが返ってくる。
この場合、関数は自販機となります。

 

また一般的に言えば「与えられた値に対して処理を行い結果を返す機能」のことを言います。

例)以下のsum関数は入れた値に対して足し算の処理を行い結果を返す機能になります。
この場合、引数は2と5、戻り値は7になります。

def sum(a,b):
    return a + b

print(sum(2,5))

実行結果

7

 

新米太郎
新米太郎
さて本題に入りましょう。

ハッシュ関数とは「入力に対応する適当な値を返してくれる関数」です。

・適当な値が返ってくる。
・同じ引数の場合は同じ戻り値が返ってくる。

 

例えば、ハッシュ関数に「りんご」を入れると「aaa」、「いちご」を入れると「sss」
「みかん」を入れると「xyz」が返ってくるイメージです。

何を入れると何が返ってっくるか入れた者(ユーザ)にはわかりません。
返ってくるのは適当な値になります。

しかし同じ値を入れれば、必ず同じ値が返ってきます。
「りんご」を入れると「aaa」が必ず返ってくると言うことです。

これでもパスワードの特定は難しいですがレインボテーブルなどの手法で特定される危険性があります。

新米太郎
新米太郎

レインボテーブルは、ハッシュ化の「同じ引数の場合は同じ戻り値が返ってくる。」特徴をいい事にハッシュ値から元の値を割り出すやり方を言うよ。

 

そこでより強固な暗号化にするためにソルト(salt)が使われます!



ソルトとは

ソルトとは「パスワードに適当な文字列を付与した後にハッシュ化する」方法です。

・パスワードに付ける文字列のこと。
・文字列を付けてからハッシュ化すること。
・ハッシュ化のみよりもセキュリティが強化される。

例えば、パスワード「りんご」に対して文字列「ペン」を付けてからハッシュ関数を行なった場合
悪い人がハッシュ値からパスワードを割り出したとしても「りんごペン」しか分かりません。なので実際のパスワードである「りんご」はバレないことになります。

悪人
悪人

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

新米太郎
新米太郎

違うよ〜〜(笑)

ソルト値がわからない限りパスワードはバレない為、ハッシュ化のみよりもセキュリティが強化されます。

まとめ

いかがだったでしょうか。
今回はハッシュとソルトの説明をしました。

実際にソルトを用いたパスワードの暗号化の実装方法をまとめた記事もありますのでよければ読んでみてください。

C# .NET パスワードの暗号化と複合化をする方法を紹介 (AES暗号化)
共通暗号化方式の一つAdvanced(高度な) Encryption(暗号化)Standard(標準)を略してAESと言います。 今回はC#を使ってAESを基づいた暗号化、復号化をする方法を紹介します。コードが長いのでデバッグして処理の流れを知るのが大切です。

コメント

タイトルとURLをコピーしました