Security

Аутентификация

Аутентификация — это проверка того, что пользователь действительно тот, за кого себя выдаёт; шаг между идентификацией и авторизацией.

Что такое Аутентификация

Аутентификация — это процедура проверки подлинности: система убеждается, что пользователь действительно тот, кем представился. Слово происходит от греческого authentikos — «подлинный».

Понять термин проще всего через три шага, которые постоянно смешивают в одно:

Шаг Вопрос Пример на входе в систему
ИдентификацияКто вы? Ввели логин ivanov
АутентификацияДокажите Ввели пароль, система проверила
АвторизацияЧто вам можно? Система решила: доступ к отчётам есть, к админке нет

Аналогия с аэропортом: назвали фамилию — идентификация; предъявили паспорт с вашим лицом — аутентификация; посмотрели на посадочный и пустили в бизнес-класс — авторизация. Три разных действия, и путаница между ними — источник реальных дыр. Классическая ошибка: система проверила пароль и на этом успокоилась, не проверив, а положен ли этому пользователю запрошенный объект.

Факторы

Аутентификация строится на трёх типах факторов:

  • Знание — пароль, PIN, ответ на вопрос.
  • Владение — телефон с TOTP, аппаратный ключ, смарт-карта.
  • Неотъемлемость — отпечаток, лицо, голос.

Два фактора разных типов дают двухфакторную аутентификацию. Пароль плюс контрольный вопрос двухфакторностью не являются: оба относятся к знанию и утекают одновременно.

Как проверяют пароль

Пароли в базе не хранятся. Хранится результат работы специальной функции, и при входе сравниваются хеши:

Регистрация:  пароль → KDF(пароль, salt) → сохранили хеш + salt
Вход:         пароль → KDF(пароль, salt) → сравнили с сохранённым

Критично применять функции для паролей, а не обычные хеши: bcrypt, scrypt, Argon2id (сегодняшний выбор по умолчанию), в крайнем случае PBKDF2. Они намеренно медленные и требовательные к памяти.

Хранение паролей в MD5 или SHA-256 — грубая ошибка, хотя формально это тоже хеши. Они спроектированы быстрыми, и GPU перебирает их миллиардами вариантов в секунду: утечка такой базы равносильна утечке паролей открытым текстом. Salt (случайная добавка к каждому паролю) обязателен — без него одинаковые пароли дают одинаковые хеши, и вся база вскрывается по радужным таблицам одним проходом.

Способы в инфраструктуре

Метод Где применяется Комментарий
Пароль Веб, панели Минимум, требует 2FA
SSH-ключиДоступ к серверамСтандарт; пароли по SSH отключают
API-ключи и токеныМашинные интеграции Ротация, минимальные права
mTLSМежду микросервисамиСертификат с обеих сторон, см. TLS
Kerberos Домен Active Directory Билеты вместо паролей
LDAP Единый каталог Часто за IdP
FIDO2 / passkey Веб, админский доступ Устойчив к фишингу

Для VPS практический минимум выглядит так — и снимает подавляющую часть автоматических атак:

# вход только по ключу, root по паролю запрещён
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
systemctl restart sshd

Практика

  • Длина важнее «сложности». Требование спецсимволов рождает P@ssw0rd1!, который переберут быстрее длинной фразы из четырёх слов. Современные рекомендации: минимальная длина, проверка по спискам утёкших паролей, никакой принудительной смены раз в 90 дней — она заставляет людей менять цифру в конце.
  • Не изобретайте своё. Аутентификацию берут готовую — Keycloak, библиотека фреймворка, IdP. Самописная — стабильный источник уязвимостей.
  • Единообразие сообщений. «Неверный логин» и «неверный пароль» раздельно — это подсказка атакующему, какие учётки существуют.
  • Лимит попыток и задержки против перебора, см. социальную инженерию.
  • Логируйте входы и отказы — без этого SIEM не увидит компрометацию учётки.
  • Биометрия — не пароль. Отпечаток нельзя сменить после утечки, поэтому он служит подтверждением владения устройством, а не самостоятельным секретом.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер