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).
- Используйте проверенные алгоритмы, не изобретайте свои.