A02: Cryptographic Failures

Чувствительные данные нужно защищать и при передаче, и при хранении — иначе утечка превращается в катастрофу.

Cryptographic Failures — ошибки в защите данных криптографией: отсутствие шифрования, слабые алгоритмы или неправильное хранение секретов и паролей.

Раньше эта категория называлась «Sensitive Data Exposure». Суть: данные, которые должны быть зашифрованы, либо вовсе не зашифрованы, либо защищены устаревшими методами.

Данные в транзите и в покое

Данные «в транзите» (между браузером и сервером) защищает TLS — отсюда обязательный HTTPS. Данные «в покое» (в базе, в файлах, в бэкапах) защищает шифрование на стороне сервера. Платёжные данные, паспорта, медкарты должны быть зашифрованы и там, и там.

Хранение паролей

Главное правило: пароли нельзя хранить в открытом виде и нельзя «шифровать» обратимо. Их хешируют специальными медленными алгоритмами с солью.

СпособВердикт
Пароль как есть (plaintext)категорически нет
MD5 / SHA-1 без солиустарело, легко взламывается
bcrypt / scrypt / Argon2 с сольюправильный выбор

Соль — случайная строка, добавляемая к паролю перед хешированием, чтобы одинаковые пароли давали разные хеши и не подбирались по готовым таблицам.

Слабая криптография

Не изобретайте свои алгоритмы шифрования — используйте проверенные библиотеки. Избегайте устаревших: DES, RC4, MD5, SHA-1. Применяйте актуальные: AES-256 для шифрования, SHA-256/512 для хешей целостности, Argon2/bcrypt для паролей.

Как защищаться

  • Включите HTTPS везде, перенаправляйте HTTP на HTTPS.
  • Шифруйте чувствительные данные в базе и в бэкапах.
  • Храните пароли через bcrypt/Argon2 с солью, а не через MD5/SHA-1.
  • Не собирайте данные, которые вам не нужны — то, чего нет, не утечёт.

Частые ошибки разработчиков

  • Хранят пароли в открытом виде «для удобства восстановления» — настоящий сервис никогда не присылает старый пароль, только сброс.
  • Используют быстрый SHA-256 для паролей: он не для этого, он слишком быстрый для перебора.
  • Пишут свой «шифр» вместо стандартных библиотек.

Итог

  • Шифруйте данные и в транзите (TLS/HTTPS), и в покое (БД, бэкапы).
  • Пароли — только медленный хеш с солью (bcrypt/Argon2).
  • Используйте проверенные алгоритмы, не изобретайте свои.
Проверьте себя
1. Как правильно хранить пароли пользователей?
AВ открытом виде в базе
BЗашифрованными обратимым шифром
CХешированными через bcrypt/Argon2 с солью
DЧерез быстрый MD5
2. Зачем к паролю добавляют соль перед хешированием?
AЧтобы пароль было проще запомнить
BЧтобы одинаковые пароли давали разные хеши и не подбирались по готовым таблицам
CЧтобы ускорить вход
DЧтобы зашифровать обратимо