SlideShare a Scribd company logo
1 of 22
パスワード認証の話 2
今日の内容

http://opine.me/a-better-way-to-store-password-hashes/
まずは

前回のおさらい

3
ハッシュ関数(理想)

4
ざっくりパスワード認証
●

登録
“password”

●

Hash

0x14f7de8a ...

DB

ログイン

Hash

Match?
5
なぜハッシュ化?
●

一方向性が保証されていれば
➜ DBのデータが流出してもパスワード自体は守られる

●

暗号化と違って
➜
➜

●

復号できない
鍵の管理が要らない

運営者もパスワードが分からない
➜

良からぬ従業員も悪さできない
6
パスワードクラック

7
オンライン攻撃
●

ブルートフォース
➜
➜

●

総当たり。力技。ゴリ押し。
あるパスワードを全ユーザに試すのは「逆ブルートフォース」

辞書攻撃
➜

よくあるパスワード、英単語に当たりをつけて試行する

● Joeアカウント狙い
➜

ユーザ名 = パスワード
8
オフライン攻撃
●

オンラインとの大きな違い
➜ DBデータは流出済でハッシュ値が見えてる
➜

ハッシュアルゴリズムとかもバレてるかも

●

オンライン攻撃と同じ手法も使える

●

レインボーテーブル
➜

膨大な数のハッシュ値を予め計算しておく

➜ GPUとか丸一日ブン回すとド偉い数(10^15とか?)のハッシュ値が作れる
➜

還元関数とか頭いい

9
対策

10
ソルト+ハッシュ
●

登録

“salt”

“salt”
0x14f7de8a ...

“password”

Hash

+

“salt”
●

DB

ログイン

+

Hash

Match?

0x14f7de8a ...
11
有力候補として紹介されてるアルゴリズム
● PBKDF2
➜

ソルト化ハッシュとかHMACとかストレッチングとか

➜

まとめて色々やってくれるらしい

● bcrypt
➜ Blowfish暗号化を利用
➜

入力は72文字(72Byte)までらしい

● scrypt
➜

メモリむしゃむしゃするアルゴリズム

➜ Stronger

Key Derivation via Sequential Memory-Hard Functions
12
ここからが

本題

13
ひとことで言うと

防衛
保証
Security through Obesity
〜のために
〜によって

肥満

14
肥満による防衛

15
16
違います

17
手法
●

データベース
user_id

user_name

salt

hash

1

John

abc...

3bb...

2

Bob

2a3...

76a...

3

Nick

4bf...

4de...

                   Hashのテーブルは別
18
手法
●

ユーザ新規作成・パスワード変更
➜
➜

●

ランダムなソルトを生成してUPDATE
ハッシュを計算してINSERT

ログイン
➜

入力されたパスワードとDBのソルトからハッシュ計算

➜ DBにそのハッシュ値が存在するかチェック

●

前処理としてダミーハッシュでDBを埋めておく ← これ重要
19
なにが違うの?
●

ブルートフォースするとき
➜

ハッシュテーブルを総ナメする必要あり

➜

でっかいRAMが必要

➜ GPUベースのブルートフォースをやりにくい ← ボクこのへん詳しくない
➜

●

1人のユーザだけ狙っても(前の手法に比べれば)破りにくい

ハッシュテーブルが巨大
➜ USBメモリとかには到底入らない
➜

持ち出しにくい
20
ハッシュは衝突しないの?
1.0E+00
1.0E-02
1.0E-04

衝突確率

1.0E-06

サメに喰われる確
率

1.0E-08
1.0E-10
1.0E-12

家に隕石が落ちる確率

1.0E-14
1.0E-16
1.0E-18
1.0E+15

1.0E+16

1.0E+17

1.0E+18

1.0E+19

1.0E+20

1.0E+21

160bit ハッシュの数

1.0E+22

1.0E+23

1.0E+24

1.0E+25
21
まとめ
●

肥満 = 膨大な量のハッシュ

●

ダミーで10 個まで増やしてもほとんど衝突しない
17

➜

ただし
  160bit × 1017 = 2×1018 Byte = 2EB(えくさばいと)

22

More Related Content

More from Joe_noh

やってみた -URL外形監視-
やってみた -URL外形監視-やってみた -URL外形監視-
やってみた -URL外形監視-
Joe_noh
 

More from Joe_noh (20)

パフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったことパフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったこと
 
Vue.jsのユニットテスト
Vue.jsのユニットテストVue.jsのユニットテスト
Vue.jsのユニットテスト
 
Vuexと入力フォーム
Vuexと入力フォームVuexと入力フォーム
Vuexと入力フォーム
 
カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後
 
サイクルOJTイントロダクション
サイクルOJTイントロダクションサイクルOJTイントロダクション
サイクルOJTイントロダクション
 
お産ウィークイントロダクション
お産ウィークイントロダクションお産ウィークイントロダクション
お産ウィークイントロダクション
 
モバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクションモバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクション
 
Webオペレーション研修イントロダクション
Webオペレーション研修イントロダクションWebオペレーション研修イントロダクション
Webオペレーション研修イントロダクション
 
Web開発研修イントロダクション
Web開発研修イントロダクションWeb開発研修イントロダクション
Web開発研修イントロダクション
 
リーンキャンバス
リーンキャンバスリーンキャンバス
リーンキャンバス
 
もっとgit
もっとgitもっとgit
もっとgit
 
できないことはPortで外注
できないことはPortで外注できないことはPortで外注
できないことはPortで外注
 
DBにseedするライブラリつくった
DBにseedするライブラリつくったDBにseedするライブラリつくった
DBにseedするライブラリつくった
 
やってみた -URL外形監視-
やってみた -URL外形監視-やってみた -URL外形監視-
やってみた -URL外形監視-
 
Elixirだ 第6回
Elixirだ 第6回Elixirだ 第6回
Elixirだ 第6回
 
Elixirだ 第5回
Elixirだ 第5回Elixirだ 第5回
Elixirだ 第5回
 
Elixirだ 第4回
Elixirだ 第4回Elixirだ 第4回
Elixirだ 第4回
 
Elixirだ 第3回
Elixirだ 第3回Elixirだ 第3回
Elixirだ 第3回
 
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回
 
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半
 

Password security 2