Upcoming SlideShare
×

# Безопасность аутентификации веб-приложений

4,456 views

Published on

Доклад Сергея Нартымова на конференции Application Developer Days-4. г.Минск 13 декабря 2013

Published in: Education
1 Like
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

Views
Total views
4,456
On SlideShare
0
From Embeds
0
Number of Embeds
3,702
Actions
Shares
0
14
0
Likes
1
Embeds 0
No embeds

No notes for slide

### Безопасность аутентификации веб-приложений

1. 1. Безопасность аутентификации веб-приложений Сергей Нартымов Brainspec https://github.com/lest twitter: @just_lest
2. 2. Хэш пароля • MD5 • SHA-1 • SHA-2
3. 3. Хэш с солью
4. 4. Хэш с солью • Пароль пользователя • Соль пользователя • Соль приложения
5. 5. PBKDF2 Password-Based Key Derivation Function 2
6. 6. PBKDF2 DK = PBKDF2(PRF, Password, Salt, c, dkLen) DK = T1 || T2 || ... || Tdklen/hlen Ti = F(Password, Salt, Iterations, i) F(Password, Salt, Iterations, i) = U1 ^ U2 ^ ... ^ Uc U1 = PRF(Password, Salt || INT_32_BE(i)) U2 = PRF(Password, U1) ... Uc = PRF(Password, Uc-1) DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)
7. 7. PBKDF2 DK = PBKDF2(PRF, Password, Salt, c, dkLen) DK = T1 || T2 || ... || Tdklen/hlen Ti = F(Password, Salt, Iterations, i) F(Password, Salt, Iterations, i) = U1 ^ U2 ^ ... ^ Uc U1 = PRF(Password, Salt || INT_32_BE(i)) U2 = PRF(Password, U1) ... Uc = PRF(Password, Uc-1) DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)
8. 8. PBKDF2 DK = PBKDF2(PRF, Password, Salt, c, dkLen) DK = T1 || T2 || ... || Tdklen/hlen Ti = F(Password, Salt, Iterations, i) F(Password, Salt, Iterations, i) = U1 ^ U2 ^ ... ^ Uc U1 = PRF(Password, Salt || INT_32_BE(i)) U2 = PRF(Password, U1) ... Uc = PRF(Password, Uc-1) DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)
9. 9. PBKDF2 DK = PBKDF2(PRF, Password, Salt, c, dkLen) DK = T1 || T2 || ... || Tdklen/hlen Ti = F(Password, Salt, Iterations, i) F(Password, Salt, Iterations, i) = U1 ^ U2 ^ ... ^ Uc U1 = PRF(Password, Salt || INT_32_BE(i)) U2 = PRF(Password, U1) ... Uc = PRF(Password, Uc-1) DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)
10. 10. PBKDF2 DK = PBKDF2(PRF, Password, Salt, c, dkLen) DK = T1 || T2 || ... || Tdklen/hlen Ti = F(Password, Salt, Iterations, i) F(Password, Salt, Iterations, i) = U1 ^ U2 ^ ... ^ Uc U1 = PRF(Password, Salt || INT_32_BE(i)) U2 = PRF(Password, U1) ... Uc = PRF(Password, Uc-1) DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)
11. 11. bcrypt
12. 12. bcrypt \$2a\$10\$vI8aWBnW3fID.ZQ4/z идентификатор алгоритма
13. 13. bcrypt \$2a\$10\$vI8aWBnW3fID.ZQ4/zo1G сложность
14. 14. bcrypt \$2a\$10\$vI8aWBnW3fID.ZQ4/zo1G.q1lRps соль
15. 15. bcrypt o1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa
16. 16. bcrypt scrypt PBKDF2
17. 17. 504 Gateway Time-out 502 Bad Gateway
18. 18. Перебор пользователей
19. 19. Перебор пользователей • Форма логина • Неверный адрес e-mail или пароль.
20. 20. Перебор пользователей • Форма восстановления пароля • Если ваш адрес e-mail есть в нашей базе данных, то в течение нескольких минут вы получите письмо с инструкциями по восстановлению вашего пароля.
21. 21. Перебор пользователей • Форма регистрации
22. 22. Тайминговые атаки
23. 23. Тайминговые атаки • https://code.djangoproject.com/ticket/ 20760
24. 24. Блокировка доступа
25. 25. Блокировка доступа • для пользователя • для IP-адреса
26. 26. Блокировка доступа • CAPTCHA • разблокировка по ссылке из письма
27. 27. Инвалидация сессии
28. 28. Инвалидация сессии • хранить в сессии данные, которые изменяются при изменении пароля • проверять при доступе к сессии
29. 29. Инвалидация сессии • хранить сессии в БД • показывать активные сессии
30. 30. Запомнить меня
31. 31. Запомнить меня • добавляем токен и время • храним токен в HttpOnly cookie
32. 32. Восстановление пароля
33. 33. Восстановление пароля • не стоит генерировать пароль и присылать его на почту
34. 34. Восстановление пароля • генерируем токен и отправляем на почту ссылку с этим токеном • по ссылке показываем форму изменения пароля
35. 35. Сложность пароля
36. 36. Без пароля
37. 37. Без пароля • Одноразовые коды доступа
38. 38. Без пароля • Одноразовые коды доступа • OpenID
39. 39. Без пароля • Одноразовые коды доступа • OpenID • OAuth
40. 40. SSL
41. 41. SSL startssl.com
42. 42. Двухэтапная аутентификация
43. 43. Двухэтапная аутентификация
44. 44. Двухэтапная аутентификация