4developers 2015: dobrze posól swoje hasło: skróty haseł w webie - leszek krupiński

90
Dobrze posól swoje hasło Skróty haseł w webie Leszek Krupiński 4developers 2015

Upload: proidea

Post on 16-Jul-2015

396 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Dobrze posól swoje hasło

Skróty haseł w webie

Leszek Krupiński 4developers 2015

Page 2: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

LEAFNODE

Page 3: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński
Page 4: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Wstęp

Page 5: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

User credentials w web aplikacjach

Page 6: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

OWASP Top Ten #1: Injection

#6: Sensitive Data Exposure

Page 7: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Rule #1: No Plain Text

Page 8: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Hashing

Page 9: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Funkcja jednokierunkowa

Page 10: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

słoń

żaba

żyrafa

kot

pies

wąż

1

2

3

6

5

4

Page 11: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Skrót to nie szyfrowanie

Page 12: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński
Page 13: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Skrót kryptograficzny

Page 14: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Idealnie: funkcja różnowartościowa

Page 15: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Wysoka zmienność

Page 16: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

>>>  sha1('Quick  brown  fox  jumps  over  the  lazy  dog')  =>  "4ba0c2b764daf33a75f06e4ce4dfdce283aa9a9c"  >>>  sha1('Quick  brown  fox  jumps  over  The  lazy  dog')  =>  “c47983041ddb867c60790f93f681d74fc971ff47"  >>>  decbin(ord('T'))  =>  "1010100"  >>>  decbin(ord('t'))  =>  "1110100"

Page 17: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Jak używać w aplikacji

Page 18: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

username = Request->get('username'); password = Request->get('password');

hash = md5(password);

user = Repository->getUser(username, hash); if (user) { this->status = LOGGED_IN; return; } else { throw new BadPasswordException(); }

Page 19: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Jak się łamie skróty?

Page 20: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Brute Force

Page 21: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Zabezpieczenia aplikacji

Page 22: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

95 znaków 6 pozycji

Page 23: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

735 091 890 625

Page 24: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Najpierw łatwe hasła

Page 25: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Najpopularniejsze 6-znakowe hasło?

Page 26: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

123456

Page 27: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

razem: ~900k user=pass: 5022

user=pass lowercase: 6721 pass zawiera username: 30782

1234: 4172 12345: 3517 123456: 2954 1234567: 161 12345678: 267 123456789: 409 1234567890: 158 same cyfry: 97259

Page 28: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Atak słownikowy

Page 29: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Atak hybrydowy

Page 30: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Reverse Lookup Tables

Page 31: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

czy md5(“jabłko”) jest na liście? … czy md5(“gruszka”) jest na liście? … czy md5(“banan”) jest na liście? … czy md5(“pomarańcza”) jest na liście? … czy md5(“arbuz”) jest na liście? … czy md5(“brzoskwinia”) jest na liście? …

nie tak (użytkownik “janek”) nie tak (użytkownicy “zosia”, “franek”) tak (użytkownik “marek”) nie

Page 32: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Lookup Table

Page 33: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Wyliczone wcześniej skróty

Page 34: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

password | hash --------------------------------------------- a | 0cc175b9c0f1b6a831c399e269772661 aa | 4124bc0a9335c27f086f24ba207a4912 aaa | 47bce5c74f589f4867dbd57e9ca9f808 aaaa | 74b87337454200d4d33f80c4663dc5e5 (...) ab | 187ef4436122d1cc2f40dc2b92f0eba0 aba | 79af87723dc295f95bdb277a61189a2a abaa | 537964105de1063e88b2fc126750d16e (...) cat | d077f244def8a70e5ea758bd8352fcd8 (...) dog | 06d80eb0c50b49a509b49f2424e8c805 (...)

Page 35: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Minus: rozmiar

Page 36: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

7 znaków == 1.5 Pb

Page 37: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Hash chains

Page 38: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Space/time tradeoff

Page 39: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

aaaaaa 0b4e7a cdadro 8b8031 umehaoRH H R

PASSWORD CANDIDATE HASH PASSWORD CANDIDATEPASSWORD CANDIDATE HASH

Page 40: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Funkcja redukcyjna

Page 41: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Przeszukiwanie

Page 42: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

P1 H1 P2 H2 P3

dog e0d13d cat 4e85aa lion

hawk 867dbd eagle 399e26 pigeon

balltennis basket23dc29b92f0e

party event ball70e5ea33f80c

23dc29

Page 43: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

P1 H1 P2 H2 P3

dog e0d13d cat 4e85aa lion

hawk 867dbd eagle 399e26 pigeon

balltennis basket23dc29b92f0e

party event ball70e5ea33f80c

b92f0e

Page 44: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

P1 H1 P2 H2 P3

dog e0d13d cat 4e85aa lion

hawk 867dbd eagle 399e26 pigeon

balltennis basket23dc29b92f0e

party event ball70e5ea33f80c

7a68a0

Page 45: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Kolizje

Page 46: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

P1 H1 P2 H2 P3

dog e0d13d cat 4e85aa lion

hawk 867dbd eagle 399e26 pigeon

balltennis basket23dc29b92f0e

party event ball70e5ea33f80c

Page 47: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Rainbow Tables

Page 48: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

dog e0d13d

cat 4e85aa

lion d023a3

hawk 867dbd

eagle 399e26

pigeon 89f486

balltennis basket23dc29b92f0e 5b9c0f

party

event

ball 23dc29

70e5ea

33f80c tiger d023a3

sparrow 89f486

volley 5b9c0f

venue 23dc29H

H

H

H

H

H

H

H

H

H

H

H

H

H

H

H

R1

R1

R1

R1

R2

R2

R2

R2

R3

R3

R3

R3

base

foot

room

falconR4

R4

R4

R4

Page 49: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Przeszukiwanie

Page 50: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

dog e0d13d

cat 4e85aa

lion d023a3

hawk 867dbd

eagle 399e26

pigeon 89f486

balltennis basket23dc29b92f0e 5b9c0f

party

event

ball 23dc29

70e5ea

33f80c tiger d023a3

sparrow 89f486

volley 5b9c0f

venue 23dc29H

H

H

H

H

H

H

H

H

H

H

H

H

H

H

H

R1

R1

R1

R1

R2

R2

R2

R2

R3

R3

R3

R3

base

foot

room

falconR4

R4

R4

R4

89f486 foot

70e5ea

R4

R4 leg70e5ea R3 box R4 yellowH 1043da70e5ea R2 cat H 4e85aa R3

sparrowR3 H 89f486R4 foot

Page 51: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

chain: 71 000 storage: 64GB

Page 52: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Salt

Page 53: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

md5(salt+pass)

Page 54: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Unikalny salt

Page 55: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

$6dbu$acbd18db4cc2f85cedef

Page 56: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Podstawowa cecha: unikalność

Page 57: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Minimum 128 bitów

Page 58: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

AlgorytmyMD5, SHA-1,SHA-2, SHA-256, SHA-512

Page 59: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Wada: szybkość

Page 60: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

50 milionów na sekundęśredniej klasy laptop z poprzedniej generacji (GPU)

Page 61: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

6-znakowe: 4 godziny 7-znakowe: 17 dni 8-znakowe: 4,5 roku

Page 62: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

180 miliardów na sekundęDedykowany do łamania haseł klaster 25 GPU (2012)

Page 63: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

6-znakowe: 4 sekundy 7-znakowe: 6 minut 8-znakowe: 10 godzin

Page 64: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Nie wymyślaj

Page 65: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

str_rot13(md5(pass+sha1(salt+pass)))+md5(sha512(pass))

Page 66: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Lepsze algorytmy

Page 67: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Key stretching

Page 68: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Iteracja skrótu

Page 69: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

6-znakowe: 17 minut 7-znakowe: 1 dzień 8-znakowe: 124 dni

n=1000

Page 70: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

PBKDF2Password-Based Key Derivation Function 2

Page 71: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

6-znakowe: 28 dni 7-znakowe: 7 lat 8-znakowe: 700 lat

Page 72: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

bcrypt

Page 73: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

6-znakowe: 120 dni 7-znakowe: 31 lat 8-znakowe: 3000 lat

Page 74: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Strojenie liczby iteracji

Page 75: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Ile użytkownik zniesie

Page 76: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Adaptacja do zmian

Page 77: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Alternatywa: key strengthening

Page 78: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

$2y$10$.nIBGM87poP6dbui4ouWNe2dnQUMKFagOz.v1TVDJO63hIZ/XTWWG

Page 79: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Dodatkowe bezpieczeństwo: klucz symetryczny

Page 80: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

…ale nie jak Adobe

http://bit.ly/adobe-passwords

Page 81: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński
Page 82: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Timing Safe Comparison

Page 83: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Przyszłość: obciążenie pamięci

Page 84: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Dobre rady

Page 85: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Hasła

Page 86: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

https://xkcd.com/936/

Page 87: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

https://diogomonica.com/posts/password-security-why-the-horse-battery-staple-is-not-correct/

Page 88: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Używaj długich, łatwych do zapamiętania haseł. Nie przechowuj haseł plain-text. Używaj salt. Salt ma być indywidualny. Salt ma być losowy. Salt ma być długi. Nie używaj dziwnych funkcji skrótu. Używaj iteracyjnych, dedykowanych

algorytmów skrótu. Używaj bezpiecznego porównywania ciągów. Wymuszaj politykę

haseł na użytkownikach, ale nie przesadzaj. Zmieniaj hasła. Nie używaj tego samego hasła w wielu serwisach. Rozważ zastosowanie biblioteki do

generowania skrótu. Z czasem zwiększaj liczbę iteracji. Miej plan awaryjny.

Page 89: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Pytania?

Page 90: 4Developers 2015: Dobrze posól swoje hasło: skróty haseł w webie - Leszek Krupiński

Dziękuję

@leafnode http://speakerdeck.com/leafnode/