Password security

29
パスワード認証の話

description

パスワード認証に関する事柄

Transcript of Password security

Page 1: Password security

パスワード認証の話

Page 2: Password security

ユーザのパスワードを守る話

Page 3: Password security

3

あじぇんだー

● パスワードのハッシュ化

● パスワードクラック

● 対策

● ハッシュアルゴリズム

● まとめ

● 不正アクセス事例

Page 4: Password security

4

パスワードのハッシュ化

Page 5: Password security

5

ハッシュ関数

Page 6: Password security

6

ハッシュ関数の要件● 一方向性➜出力値から入力値を求めることが困難(現実的に無理)であること

● 第二現像困難性➜与えられた入力値と同じ出力値が得られる入力を求めることが困難であること

● 衝突困難性➜出力が同じになる入力ペアを求めることが困難であること

衝突困難性を満たせば、一方向性と第二現像困難性も満たしている

Page 7: Password security

7

ざっくりパスワード認証

DB

Hash

● 登録

● ログイン

Hash Match?

“password” 0x14f7de8a ...

Page 8: Password security

8

これでよくね?

DB

● 登録

● ログイン

Match?

“password”

Page 9: Password security

9

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

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

● 暗号化と違って➜復号できない

➜鍵の管理が要らない

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

Page 10: Password security

10

パスワードクラック

Page 11: Password security

11

オンライン攻撃● ブルートフォース➜総当たり。力技。ゴリ押し。

➜あるパスワードを全ユーザに試すのは「逆ブルートフォース」

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

● Joeアカウント狙い

➜ユーザ名 = パスワード

Page 12: Password security

12

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

➜DBデータは流出済でハッシュ値が見えてる

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

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

● レインボーテーブル➜膨大な数のハッシュ値を予め計算しておく

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

➜還元関数とか頭いい

Page 13: Password security

13

対策

Page 14: Password security

14

講じるべき対策1● アカウントロック

➜何回かログインに失敗したら1時間くらいロック

➜オンライン攻撃対策

✔ 本物ユーザにも影響しちゃうかもしれないけどログインされるより100倍マシ

Page 15: Password security

15

講じるべき対策2

● ログインIDとユーザ名を別にする➜会員ならばユーザ名の入手は簡単(なサービスが多いはず)

➜例えばメールアドレス+パスワードでログインさせる

➜オンライン攻撃対策

✔ ログインIDの秘匿化

Page 16: Password security

16

講じるべき対策3● ストレッチング➜ハッシュ化を何回も繰り返す

➜10,000回とか常識だそうです

➜総当たり対策

✔ 総当たりに要する時間が増えて攻撃者がダルくなって諦める✔ ユーザにパスワード変更を促す時間を稼げる

Page 17: Password security

17

講じるべき対策4●ソルティング➜ソルト = 適当な文字列

➜ソルトとパスワードを連結してからハッシュ化(単純な連結は良くないらしい)

➜ユーザ毎に異なる、長めのソルトが好ましい

➜レインボーテーブル対策

✔ 同じパスワードでも違うハッシュ値になる✔長さ数十文字のランダム文字列レインボーテーブルを作るのは結構しんどい✔キーボードから入力できる文字95種でつくれる1~50文字の文字列は

だいたい10^100個くらい(計算合ってる?)

Page 18: Password security

18

ソルト+ハッシュ

DB

Hash

● 登録

● ログイン

Hash Match?

“password” 0x14f7de8a ...

“salt” “salt”

“salt”

0x14f7de8a ...

Page 19: Password security

19

HMAC● Hash-based Message Authentication Code➜ハッシュ関数に衝突が見つかっても大丈夫な可能性が高い

➜定番?

: 0x5c5c5c … 5c5c

: 0x363636 … 3636

: 秘密の鍵

Page 20: Password security

20

ハッシュアルゴリズム

Page 21: Password security

21

どれ使えばいいのさ

● DES➜話にならない

● MD5➜よくない

● SHA1➜よくない

● SHA2➜これは今んとこOK

                     ※ 単体で使うのは論外

Page 22: Password security

22

有力候補として紹介されてるもの

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

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

● bcrypt➜Blowfish暗号化を利用

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

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

➜Stronger Key Derivation via Sequential Memory-Hard Functions

Page 23: Password security

23

ちょっと寄り道

C. Percival. Stronger Key Derivation via Sequential Memory-Hard Functions. BSDCan 2009

Page 24: Password security

24

結局のところ● クラックのコストを高めるための工夫➜現実的に不可能なレベルまで高めることはできる

●弱いパスワードは破られやすい➜短い、辞書にある、単純なパスワードは登録させない

➜他のサービスと共通のパスワードが狙われている

●強くて覚えやすいパスワード➜文字種より長さが大切

➜文章みたいなパスワードは十分に強いという意見もあるそうです

Page 25: Password security

25

まとめ● ハッシュ関数の性質でパスワードを守る

● パスワードがバレるよりはユーザロック

● ユーザID≠ログインIDが好ましい

●ソルティングやストレッチングで計算コストを高くする

●強いパスワードの設定を促す

Page 26: Password security

26

不正アクセス事例

●NAVER➜http://linecorp.com/press/2013/0719581

●任天堂

➜http://www.nintendo.co.jp/support/information/2013/0705.html● JAXA

➜http://www.jaxa.jp/press/2013/07/20130702_security_j.html● goo

➜http://help.goo.ne.jp/help/article/2037/

Page 27: Password security

27

魚拓

Page 28: Password security

28

魚拓

Page 29: Password security

29

参考● 本当は怖いパスワードの話

http://www.atmarit.co.jp/fsecurity/special/165pswd/01.html

● Storing Passwords Securely

http://throwingfire.com/storing-passwords-securely/

● 算術演算をベースとするハッシュ関数安全性評価に関する調査報告書

http://www.ipa.go.jp/files/00013899.pdf

● RainbowCrack Project

http://project-rainbowcrack.com

●Wikipedia (English)