「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

ソルト【パスワード】

pointこの用語のポイント

point(ハッシュ化する前の)パスワードの前後に付ける文字列だよ

pointパスワードをハッシュ化して保存するときに出てくるよ

pointハッシュ値から元のパスワードを推測しにくくするのが目的だよ

スポンサーリンク

簡単に書くよ

ソルト【パスワード】(英:salt)とは

「パスワードをハッシュ関数(入力されたデータをもとにして作った適当な値を返してくれる関数)に入れてハッシュ値(ハッシュ関数から出てきた適当な値)に変換してから保管することで元のパスワードを分かりにくくするぜ!」作戦をやるときに「より元のパスワードを分かりにくくするぜ!」な目的で出てくるやつ
であり

ハッシュ関数に入れる前のパスワードの前後にくっつける文字列のこと
です。


image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として

関数
ハッシュ関数
ハッシュ値
ハッシュ化


について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

関数は「何かを入れると何かをやって何かを返してくれる、処理のまとまり」です。
一般的には、入力を受けて処理をやり、その結果として出力があります。

ソルト

ついでなので書いておくと、関数に入れる値は「引数(ヒキスウ)」と言います。

ソルト2

関数から出てくる値は「戻り値」です。

ソルト3

ちょっと汚い話で恐縮ですが、人間は、ご飯を食べて、ウンチを出します。

ソルト4

人間が関数だと考えてください。
ご飯に相当するものが引数です。
ウンチに相当するものが戻り値になります。

ソルト5

ハッシュ関数は「入力に対応する適当な値(適当に見える値)を返してくれる関数」です。
例えば「愛媛みかん」を入れると「3」が返ってきます。
「青森りんご」を入れると「4」が返ってきます。
「栃木苺」を入れると「とちおとめ」が返ってきたりします。

ソルト6

何を入れると何が返ってくるか、入れたものからは分かりません。
返ってくるのは適当な値です。

ただし、同じものを入れれば、必ず同じ値が返ってきます。
「愛媛みかん」を入れると、必ず「3」が返ってきます。
何回入れても「3」が返ってきます。

1.適当な値が返ってくる
2.同じ入力に対しては同じ値が返ってくる


というのがハッシュ関数の特徴です。
※話を単純化するために「適当な値」という表現を使っていますが、実際には適当では ありません。入力されたデータを「特定のルールに沿って」ぐちゃぐちゃにした値が返ってきます。

ハッシュ値は「ハッシュ関数から返ってくる値(戻り値)」です。
入力されたデータをもとにして作られた適当な値(適当に見える値)です。

ソルト7

ハッシュ値には

1.ハッシュ値から元のデータを特定するのは、ほとんど無理
2.元のデータが同じなら生成されるハッシュ値も同じ
3.元のデータが変わると生成されるハッシュ値は(ガッツリと)変わる


といった特徴があります。
「元データ→ハッシュ値」は お手軽だけど「元データ←ハッシュ値」は すっごい大変だよ、ということです。

ソルト8

ハッシュ化は「値をハッシュ関数に入れてハッシュ値に変換すること」です。
そのまんまと言えば、そのまんまですね。

ソルト9

以上を踏まえて、本題に入ります。

例えば、パスワードデータベースの中に保管するとしましょう。

ソルト10

パスワードをそのままの形で保管すると、悪い人にデータベースの中身を見られたときに大変です。
パスワードがバレてしまいます。

ソルト11

そこで、パスワードをハッシュ関数に入れて、出てきたハッシュ値を保管しておきます。

ソルト12

そうすれば、悪い人にデータベースの中身を見られてもパスワードはバレません。
バレるのは「パスワードのハッシュ値」です。

ソルト13

入力されたパスワードが正しいかチェックするときは、入力されたパスワードをハッシュ関数に入れて、出てきたハッシュ値とデータベースに保管されているハッシュ値を比較します。
ハッシュ値が一致すれば元のパスワード同士も同じだろうと判断するわけです。

ソルト14

ふむ、これならパスワードをそのまま保管するより安全そうですね。
ナイスです。

このナイスなやり方を見た賢い人が、さらにナイスなやり方を考えました。
それは

パスワードの前後に適当な文字列をくっつけてからハッシュ化する

やり方です。

例えば、パスワードが「piyo」だとしましょう。

ソルト15

このパスワード「piyo」をハッシュ関数に入れてハッシュ値に変換しました。

ソルト16

これでもパスワードをそのまま保管するよりは安全ですが、もしもハッシュ値から元の値を割り出せてしまったら、どうでしょう。
パスワードがバレてしまいますよね。

ソルト17

そこで、一工夫しました。
ハッシュ関数に入れる前のパスワード「piyo」に対して、文字列「aho」を付けてからハッシュ関数に入れたのです。

ソルト18

さて、今度は、どうでしょうね。

先ほどと同じ様に、悪い人がハッシュ値から元の値を割り出してしまいました。

ソルト19

でも大丈夫です。
分かるのは「piyoaho」までです。
実際のパスワードである「piyo」はバレません。

ソルト20

これなら、さっきよりも安全ですね。
良かった、良かった。

この話における、ハッシュ関数に入れる前のパスワードにくっつけた文字列「aho」がソルトです。

ソルト21

ソルトはハッシュ関数に入れる前のパスワードの前後にくっつける文字列です。
ソルトをくっつけてからハッシュ化することで、もしハッシュ値から元の文字列を割り出せてしまっても実際のパスワードにはなりません。
ソルト付きのパスワードです。
ソルトが何かを知らなければ実際のパスワードはバレない理屈です。

なお、どんな文字列をソルトとして使うかは頑張って考えてください。
固定の文字列でもダメではありませんが、例えば、名前、メールアドレス、住所の一部、など、人によって違う文字列をソルトにすることで、より元のパスワードを分かりにくくできます。


image piyo2

一言でまとめるよ

まぁ「ソルト」って単語が出てきたら「ハッシュ化する前のパスワードの前後にくっつける文字列なんだな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像052
書籍画像028

おまけ

■訳してみるよ

「salt(ソルト)」の意味は「塩」とかです。


■検索してみる?




書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本【Audible】
わかばちゃんとつくって、壊して、直して学ぶ NewSQL入門
「技術書」の読書術 達人が教える選び方・読み方・情報発信&共有のコツとテクニック