22
パスワード認証の話 2

Password security 2

  • Upload
    joenoh

  • View
    253

  • Download
    1

Embed Size (px)

DESCRIPTION

パスワード認証に関すること その2 メインは"Security through Obesity" 一部の英数字フォントが意図しないものになってしまった

Citation preview

Page 1: Password security 2

パスワード認証の話 2

Page 2: Password security 2

今日の内容

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

Page 3: Password security 2

3

まずは

前回のおさらい

Page 4: Password security 2

4

ハッシュ関数(理想)

Page 5: Password security 2

5

ざっくりパスワード認証

DB

Hash

● 登録

● ログイン

Hash Match?

“password” 0x14f7de8a ...

Page 6: Password security 2

6

なぜハッシュ化?● 一方向性が保証されていれば

➜DBのデータが流出してもパスワード自体は守られる

● 暗号化と違って➜ 復号できない➜ 鍵の管理が要らない

● 運営者もパスワードが分からない➜ 良からぬ従業員も悪さできない

Page 7: Password security 2

7

パスワードクラック

Page 8: Password security 2

8

オンライン攻撃● ブルートフォース

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

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

● Joeアカウント狙い➜ ユーザ名 = パスワード

Page 9: Password security 2

9

オフライン攻撃● オンラインとの大きな違い

➜ DBデータは流出済でハッシュ値が見えてる➜ ハッシュアルゴリズムとかもバレてるかも

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

● レインボーテーブル➜ 膨大な数のハッシュ値を予め計算しておく➜ GPUとか丸一日ブン回すとド偉い数(10^15とか?)のハッシュ値が作れる➜ 還元関数とか頭いい

Page 10: Password security 2

10

対策

Page 11: Password security 2

11

ソルト+ハッシュ

DB

Hash

● 登録

● ログイン

Hash Match?

“password” 0x14f7de8a ...

“salt” “salt”

“salt”

0x14f7de8a ...

Page 12: Password security 2

12

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

➜ ソルト化ハッシュとかHMACとかストレッチングとか➜ まとめて色々やってくれるらしい

● bcrypt

➜ Blowfish暗号化を利用➜ 入力は72文字(72Byte)までらしい

● scrypt

➜ メモリむしゃむしゃするアルゴリズム➜ Stronger Key Derivation via Sequential Memory-Hard Functions

Page 13: Password security 2

13

ここからが

本題

Page 14: Password security 2

14

ひとことで言うと

Security through Obesity

〜のために〜によって

肥満

防衛保証

Page 15: Password security 2

15

肥満による防衛

Page 16: Password security 2

16

Page 17: Password security 2

17

違います

Page 18: Password security 2

18

手法

●データベース

                   Hashのテーブルは別

user_id user_name salt

1 John abc...

2 Bob 2a3...

3 Nick 4bf...

hash

3bb...

76a...

4de...

Page 19: Password security 2

19

手法● ユーザ新規作成・パスワード変更

➜ ランダムなソルトを生成してUPDATE

➜ ハッシュを計算してINSERT

● ログイン➜ 入力されたパスワードとDBのソルトからハッシュ計算➜ DBにそのハッシュ値が存在するかチェック

● 前処理としてダミーハッシュでDBを埋めておく ← これ重要

Page 20: Password security 2

20

なにが違うの?● ブルートフォースするとき

➜ ハッシュテーブルを総ナメする必要あり➜ でっかいRAMが必要➜ GPUベースのブルートフォースをやりにくい ← ボクこのへん詳しくない➜ 1人のユーザだけ狙っても(前の手法に比べれば)破りにくい

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

Page 21: Password security 2

21

ハッシュは衝突しないの?

1.0E+15 1.0E+16 1.0E+17 1.0E+18 1.0E+19 1.0E+20 1.0E+21 1.0E+22 1.0E+23 1.0E+24 1.0E+251.0E-18

1.0E-16

1.0E-14

1.0E-12

1.0E-10

1.0E-08

1.0E-06

1.0E-04

1.0E-02

1.0E+00

160bit ハッシュの数

衝突

確率

家に隕石が落ちる確率

サメに喰われる確率

Page 22: Password security 2

22

まとめ

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

● ダミーで1017個まで増やしてもほとんど衝突しない➜ ただし

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