プチメタ3.0

刺激を受けた物事に対する感想や考察、資産運用や英語学習、自己成長に関することなど。


パスワードはどのように保存されているのか


いろいろなサイトでパスワードを入力する機会があるが、
サイト側ではどのように保存されているのか。
これには「ハッシュ値」という考え方が使われている。

ハッシュ値とは

lazesoftware.com


ハッシュ値とはある単語をもとに
作り出される一定の長さの英数字のことだ。


 ABC → 55ab19e7
 ABD → 50fb5ef9
 ABCD → 9c653054
 aBC → b53b0cdc


ハッシュ値を作る作業をハッシュ化と呼び、
ハッシュ化する方法(関数)によっても作られる英数字は変わるが、
ポイントは


 ●同じ単語をハッシュ化すれば同じハッシュ値になる
 ●わずか1文字でも違えばまったく異なるハッシュ値になる
 ●ハッシュ値から元の単語を導き出すことは不可能


ということ。
ハッシュ値を元の単語に戻せないことから
ハッシュ化は「暗号化」とは区別される。

パスワードを設定するとき

最初にパスワードを設定するときに
内部で以下のような作業をする。


1.パスワードとして「petitmeta」が設定される
2.ハッシュ化する( petitmeta → 41a91806
3.ハッシュ値である「41a91806」だけを保存する


ハッシュ化する前のパスワードそのもの(petitmeta)を
「平文(ひらぶん)」と呼ぶが、
もし平文のまま保存していると
不正アクセスを受けたときにパスワードが流出してしまう。


ハッシュ値から元の単語を導き出すことは不可能なので
ハッシュ値しか保存しないようにしておけば
万が一流出してもトラブルになりにくいのだ。

パスワードを認証するとき

 ****** → d0a28976 NG
 ****** → 41a91806 OK
 ****** → ed2c573f NG


パスワードを認証する際は
入力されたパスワードをハッシュ化し、
保存しているものと同じハッシュ値なら承認する。


同じ単語をハッシュ化すれば同じハッシュ値になるわけだから、
パスワードそのものではなく
ハッシュ値の方を比較しても認証できるというわけだ。


ある単語をもとに特定のハッシュ値が作れるという性質から
ゲームのセーブデータをもとに作ったハッシュ値を保存しておくことで
前回の保存時以降にデータが改ざんされていないかを
チェックするようなことにも使える。



mclover.hateblo.jp

総アクセス数