パスワードは保存されていない
ちゃんとしたサービスは、あなたのパスワードをそのままの形では保存しません。代わりに、ハッシュという、元に戻せない値を保存します。
データが流出しても、ハッシュなら被害を小さくできます。今日は、その理由と、破られ方を学びます。ラボでは、自分のマシンの中だけを使います。
このレッスンのゴール
メモ
パスワードをハッシュで保存する理由を、説明することができる。
キーワード
| ことば | いみ |
|---|---|
| ハッシュ | 文字列から作る、元に戻せない決まった長さの値 |
| ソルト | ハッシュを作る前に足す、ランダムな文字列 |
| 総当たり攻撃 | パスワードを片っ端から試す手口 |
| 辞書攻撃 | よく使われる単語の一覧で試す手口 |
| 二要素認証 | パスワードのほかに、もう1つの確認を使う方法 |
学生が入力するセルは、このプレビューでは空白です。
守るべき約束はひとつ
注意
ここで試すのは、自分専用のラボのマシンの中だけです。他人のパスワードや他人のアカウントに、何かを試してはいけません。上のバーの Start the lab を押してください。
ハッシュとは何か
ハッシュは、どんな長さの文字列からも、決まった長さの値を作る計算です。同じ文字列からは、いつも同じ値ができます。
一文字でも違うと、値はまるで別物になります。そして、値から元の文字列へは、戻せません。
ログインはハッシュどうしを比べる
サービスは、登録のときに、パスワードのハッシュだけを保存します。ログインのときは、入力されたパスワードからハッシュを作ります。
保存してある値と同じなら、正しいパスワードです。パスワードそのものは、どこにも残りません。
「password」のハッシュを作る
printf 'password' | sha256sumここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
大文字にして、もう一度作る
printf 'Password' | sha256sumここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
例: 一文字違うだけで別物
| もとの文字列 | ハッシュの最初の16文字 |
|---|---|
| password | 5e884898da280471 |
| Password | e7cf3ef4f17c3999 |
| password1 | 0b14d501a594442a |
学生が入力するセルは、このプレビューでは空白です。
総当たりと辞書で破られる
ハッシュは戻せなくても、攻撃者は推測した文字列のハッシュを作り、盗んだ値と比べられます。辞書攻撃は、よく使われる単語から順に試します。
短く、ありふれたパスワードほど、早く当たります。長いほど、試す数が急に増えます。
例: 長さで試す数がふえる
| 使う文字 | 長さ | すべての組み合わせ |
|---|---|---|
| 数字だけ(10種類) | 4けた | 10,000 |
| 数字だけ(10種類) | 8けた | 100,000,000 |
| 小文字だけ(26種類) | 8文字 | 約2000億 |
| 小文字と数字(36種類) | 12文字 | 約4.7京 |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
「ハッシュにしたから、パスワードは絶対に安全だ」と考える人がいます。ハッシュは戻せなくても、短いパスワードは推測で当てられます。長さと、ありふれていないことが、どちらも必要です。
ソルトで同じ値をなくす
同じパスワードの人は、同じハッシュになってしまいます。攻撃者は、よくあるパスワードのハッシュの一覧を前もって用意できます。
ソルトは、人ごとに違うランダムな文字列です。パスワードの前に足してからハッシュを作ると、同じパスワードでも、値が人ごとに変わります。
ソルトを前に足して作る
printf 'k9xpassword' | sha256sumここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
例: ソルトでハッシュが変わる
| ソルト | パスワード | ハッシュの最初の16文字 |
|---|---|---|
| なし | password | 5e884898da280471 |
| k9x | password | 5ba7a068553bcb6b |
| ab | hunter2 | 451a4d805351e7d7 |
学生が入力するセルは、このプレビューでは空白です。
さらに挑戦: 二要素認証
パスワードが盗まれても、もう1つの確認があれば、入られません。スマホに届く番号や、指紋が、その例です。
自分がよく使うサービスのうち、二要素認証を使えるものを3つ探してください。ただし、設定を変えるのは自分のアカウントだけです。