Безопасная аутентификация в двадцать первом веке
Аккерманн Юрий
Ст. Сертификационный Инженер
FIDO ALLIANCE
twitter/github/habrahabr: @herrjemand
до: 1980х
Чистая, парольная, аутентификация
В чём проблема?
Взлом базы данных ведет к компрометации пароля
после: 1980х
Парольная аутентификация с хешированием и солью
Что такое хеширование?
Le Wikipedia dit: Хеширование или хэширование (англ. hashing) — преобразование массива входных данных произвольной длины в (выходную) битовую строку установленной длины, выполняемое определённым алгоритмом.
H(d) = hs
H("дипломная") = 5533977...
H("дупломная") = 3DC2963...
Есть КСХФ и не КСХФ
Сумма файла, сумма сообщения для подписи, хеш-мак... все что требует безопасности
хеш-таблицы, и т.д.
вер.колл: 10^-60 <
вер.колл: 10^-10 >
Что такое соль?
Модификатор пароля для защиты от перебора по словарю
UserA: "IlikePotatoes" -> eedf22f82ef51a035032...
UserB: "VodkaIsGood" -> 5ade7355ad95b15f6fd...
UserC: "IlikePotatoes" -> eedf22f82ef51a035032...
UserA: "IlikePotatoescmFuZG9t" -> c5c66c474782dd...
UserB: "VodkaIsGoodWeRPhN" -> e9bfcb97e61bd1f2...
UserC: "IlikePotatoesfNrI1S" -> eba054d063c73bdcf5...
Какие можно использовать?
SHA2, SHA3
Для всего остального
Для паролей
В порядке доступности scrypt, argon2, bcrypt, и если ничего другого нет PBKDF2.
Какие нельзя?
MD5/4/3/2/1, SHA1
Почему нельзя?
Старые, быстрые хеш функции которые уже были поломаны
и потенциально вас Засудят ;)
GDPR штрафы достигают 20 миллионов евро (650млн грн.) или 4% годового глобального дохода компании
после: 1980х
Атака по середине
В чём проблема?
2000e
Безопасное соединение с помощью TLS
https://twitter.com/durumcrustulum/status/983613760995774464
https://www.miagilepner.com/2017/04/21/TLS-Diagram/
Что можно и нельзя?
TLS1.1/1.2/1.3
RSA 1024
ECDSA
SSL
никакой
ни версии 2 ни 3
вообще
RC4
3DES/DES
Export ciphers
MD5/SHA1
RSA 2048 >=
https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self'; style-src 'self' 'unsafe-inline'; font-src 'self'; frame-src; object-src 'none'";
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name SITE.COM;
return 301 https://$host$request_uri;
}
# HTTPS server
server {
listen 443 ssl default deferred;
server_name SITE.COM;
root /sites/SITE.COM/public;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
ssl on;
ssl_certificate /var/lib/acme/live/SITE.COM/cert;
ssl_certificate_key /var/lib/acme/live/SITE.COM/privkey;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 5m;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128";
resolver 8.8.8.8;
ssl_stapling on;
ssl_trusted_certificate /var/lib/acme/live/SITE.COM/fullchain;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;";
}
HTTP перенаправление на HTTPS
Сертификат и ключ
DH params - не забывайте генерировать
Хорошие конфиги
БОТЫ
В чём проблема?
2010e
Двухфакторная аутентификация на одноразовых паролях
Три фактора аутентификации
То что я знаю
То что я имею
То что я наследую
Пароль + СМС
Какие факторы?
То что я знаю
То что я имею
То что я наследую
Основные решения
SMS
TOTP/HOTP
- Вводим логин пароль
- Получаем SMS с ОП
- Вводим ОП
- Проффит!
- Сервер генерирует мастер ключ
- Клиент копирует себе мастер ключ
- Каждые 30 сек, мы берем мастер ключ, добавляем теперешнее время(счетчик), хешируем, первые 20 бит это наш ОП
- Вводим логин и пароль
- Вводим ОП
- Проффит!
Фишинг
В чём проблема?
2014й
Универсальная двух-факторная аутентификация
Шаг первый: Вызов-Ответ
Шаг второй: Защита от фишинга
Шаг третий: Регистрационные пары ключей
Шаг четвертый: Защита от атаки повтором
Шаг пятый: Аттестация устройства
Шаг шестой: Тест на присутствие пользователя
В U2F, прежде чем произвести криптографическую операцию, устройство должно подтвердить присутствие пользователя
e.g.
Отпечаток
Сканер ретины
Пинкод
День рождения жены
Рубик-кубик
...ну чё захочешь короче
Кнопка
Как можно компрометировать пароль?
В чём проблема?
Public Key Credential management API extension
for Level 1 Credential Management API
and Client to Authenticator Protocol
2
Дополнение к API для менеджмента учетными данными публичного ключа
для API первого уровня менеджмента учетных данных
и протокол для управления аутентификаторами
2
Ссылки
- Specs: https://www.w3.org/TR/webauthn/
- CTAP2: https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.pdf
- WebAuthn: https://w3c.github.io/webauthn/
- U2F: https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/
- https://www.gov.uk/government/publications/email-security-standards/transport-layer-security-tls
- https://blog.cloudflare.com/how-to-build-your-own-public-key-infrastructure/
- http://latacora.singles/2018/04/03/cryptographic-right-answers.html
- https://habrahabr.ru/post/305508/
- https://ru.wikipedia.org/wiki/Одноразовый_пароль
- https://ru.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm
Безопасная аутентификация в двадцать первом веке
By Ackermann Yuriy
Безопасная аутентификация в двадцать первом веке
- 2,059