Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

565 views

Published on

Leszek Krupiński

Language: Polish

Wszystkie aplikacje webowe, które pozwalają na rejestrację użytkowników, muszą w jakiś sposób zajmować się tematem przechowywania haseł. Jest to wrażliwy temat, do którego trzeba podejść z pełną świadomością konsekwencji. Na wykładzie przedstawione zostaną techniki pozwalające na zapewnienie jak najwyższego poziomu bezpieczeństwa przechowywanych haseł, oraz te stosowane przez osoby dążące do przełamania zabezpieczeń.

  • Be the first to comment

  • Be the first to like this

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

  1. 1. Dobrze posól swoje hasło Skróty haseł w webie Leszek Krupiński 4developers 2015
  2. 2. LEAFNODE
  3. 3. Wstęp
  4. 4. User credentials w web aplikacjach
  5. 5. OWASP Top Ten #1: Injection #6: Sensitive Data Exposure
  6. 6. Rule #1: No Plain Text
  7. 7. Hashing
  8. 8. Funkcja jednokierunkowa
  9. 9. słoń żaba żyrafa kot pies wąż 1 2 3 6 5 4
  10. 10. Skrót to nie szyfrowanie
  11. 11. Skrót kryptograficzny
  12. 12. Idealnie: funkcja różnowartościowa
  13. 13. Wysoka zmienność
  14. 14. >>>  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"
  15. 15. Jak używać w aplikacji
  16. 16. 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(); }
  17. 17. Jak się łamie skróty?
  18. 18. Brute Force
  19. 19. Zabezpieczenia aplikacji
  20. 20. 95 znaków 6 pozycji
  21. 21. 735 091 890 625
  22. 22. Najpierw łatwe hasła
  23. 23. Najpopularniejsze 6-znakowe hasło?
  24. 24. 123456
  25. 25. 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
  26. 26. Atak słownikowy
  27. 27. Atak hybrydowy
  28. 28. Reverse Lookup Tables
  29. 29. 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
  30. 30. Lookup Table
  31. 31. Wyliczone wcześniej skróty
  32. 32. password | hash --------------------------------------------- a | 0cc175b9c0f1b6a831c399e269772661 aa | 4124bc0a9335c27f086f24ba207a4912 aaa | 47bce5c74f589f4867dbd57e9ca9f808 aaaa | 74b87337454200d4d33f80c4663dc5e5 (...) ab | 187ef4436122d1cc2f40dc2b92f0eba0 aba | 79af87723dc295f95bdb277a61189a2a abaa | 537964105de1063e88b2fc126750d16e (...) cat | d077f244def8a70e5ea758bd8352fcd8 (...) dog | 06d80eb0c50b49a509b49f2424e8c805 (...)
  33. 33. Minus: rozmiar
  34. 34. 7 znaków == 1.5 Pb
  35. 35. Hash chains
  36. 36. Space/time tradeoff
  37. 37. aaaaaa 0b4e7a cdadro 8b8031 umehaoRH H R PASSWORD CANDIDATE HASH PASSWORD CANDIDATEPASSWORD CANDIDATE HASH
  38. 38. Funkcja redukcyjna
  39. 39. Przeszukiwanie
  40. 40. P1 H1 P2 H2 P3 dog e0d13d cat 4e85aa lion hawk 867dbd eagle 399e26 pigeon balltennis basket23dc29b92f0e party event ball70e5ea33f80c 23dc29
  41. 41. P1 H1 P2 H2 P3 dog e0d13d cat 4e85aa lion hawk 867dbd eagle 399e26 pigeon balltennis basket23dc29b92f0e party event ball70e5ea33f80c b92f0e
  42. 42. P1 H1 P2 H2 P3 dog e0d13d cat 4e85aa lion hawk 867dbd eagle 399e26 pigeon balltennis basket23dc29b92f0e party event ball70e5ea33f80c 7a68a0
  43. 43. Kolizje
  44. 44. P1 H1 P2 H2 P3 dog e0d13d cat 4e85aa lion hawk 867dbd eagle 399e26 pigeon balltennis basket23dc29b92f0e party event ball70e5ea33f80c
  45. 45. Rainbow Tables
  46. 46. 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
  47. 47. Przeszukiwanie
  48. 48. 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 leg 70e5ea R3 box R4 yellowH 1043da 70e5ea R2 cat H 4e85aa R3 sparrowR3 H 89f486 R4 foot
  49. 49. chain: 71 000 storage: 64GB
  50. 50. Salt
  51. 51. md5(salt+pass)
  52. 52. Unikalny salt
  53. 53. $6dbu$acbd18db4cc2f85cedef
  54. 54. Podstawowa cecha: unikalność
  55. 55. Minimum 128 bitów
  56. 56. Algorytmy MD5, SHA-1,SHA-2, SHA-256, SHA-512
  57. 57. Wada: szybkość
  58. 58. 50 milionów na sekundę średniej klasy laptop z poprzedniej generacji (GPU)
  59. 59. 6-znakowe: 4 godziny 7-znakowe: 17 dni 8-znakowe: 4,5 roku
  60. 60. 180 miliardów na sekundę Dedykowany do łamania haseł klaster 25 GPU (2012)
  61. 61. 6-znakowe: 4 sekundy 7-znakowe: 6 minut 8-znakowe: 10 godzin
  62. 62. Nie wymyślaj
  63. 63. str_rot13(md5(pass +sha1(salt+pass))) +md5(sha512(pass))
  64. 64. Lepsze algorytmy
  65. 65. Key stretching
  66. 66. Iteracja skrótu
  67. 67. 6-znakowe: 17 minut 7-znakowe: 1 dzień 8-znakowe: 124 dni n=1000
  68. 68. PBKDF2 Password-Based Key Derivation Function 2
  69. 69. 6-znakowe: 28 dni 7-znakowe: 7 lat 8-znakowe: 700 lat
  70. 70. bcrypt
  71. 71. 6-znakowe: 120 dni 7-znakowe: 31 lat 8-znakowe: 3000 lat
  72. 72. Strojenie liczby iteracji
  73. 73. Ile użytkownik zniesie
  74. 74. Adaptacja do zmian
  75. 75. Alternatywa: key strengthening
  76. 76. $2y$10$.nIBGM87poP6dbui4ouWNe2dnQUMKFagOz.v1TVDJO63hIZ/XTWWG
  77. 77. Dodatkowe bezpieczeństwo: klucz symetryczny
  78. 78. …ale nie jak Adobe http://bit.ly/adobe-passwords
  79. 79. Timing Safe Comparison
  80. 80. Przyszłość: obciążenie pamięci
  81. 81. Dobre rady
  82. 82. Hasła
  83. 83. https://xkcd.com/936/
  84. 84. https://diogomonica.com/posts/password-security-why-the-horse-battery-staple-is-not-correct/
  85. 85. 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.
  86. 86. Pytania?
  87. 87. Dziękuję @leafnode http://speakerdeck.com/leafnode/

×