Безопасная аутентификация в двадцать первом веке

Аккерманн Юрий

Ст. Сертификационный Инженер

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

  1. Вводим логин пароль
  2. Получаем SMS с ОП
  3. Вводим ОП
  4. Проффит!
  1. Сервер генерирует мастер ключ
  2. Клиент копирует себе мастер ключ
  3. Каждые 30 сек, мы берем мастер ключ, добавляем теперешнее время(счетчик), хешируем, первые 20 бит это наш ОП
  4. Вводим логин и пароль
  5. Вводим ОП
  6. Проффит!

Фишинг

В чём проблема?

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,075