Криптография в разработке — это не “что-то для банков”, а базовый инструмент защиты данных, пользователей и инфраструктуры. Даже если вы не пишете собственные алгоритмы, важно понимать, что именно применять и где чаще всего ошибаются.
Главное правило №1: не изобретать свою криптографию
Самописные алгоритмы, “улучшенные” схемы шифрования и нестандартные протоколы почти всегда приводят к уязвимостям. Используйте проверенные библиотеки и стандарты.
Симметричное и асимметричное шифрование
- Симметричное: один ключ для шифрования и расшифровки. Быстро, подходит для данных “в покое” и трафика. Типичный стандарт — AES.
- Асимметричное: публичный и приватный ключ. Используется для обмена ключами, цифровых подписей, TLS. Примеры — RSA, ECC.
Хэширование ≠ шифрование
Хэш нельзя “расшифровать”. Он нужен для проверки целостности, хранения паролей, подписи данных.
Для паролей используйте только специальные алгоритмы:
Argon2, bcrypt, scrypt.
SHA-256 и MD5 для хранения паролей — плохая практика ❌
Соль и pepper
- Salt — случайная уникальная добавка к каждому паролю перед хэшированием. Защищает от rainbow table.
- Pepper — дополнительный секрет, хранимый отдельно от базы.
Если в базе пароли хранятся без соли — это серьёзная ошибка.
TLS обязателен
Передача данных без HTTPS сегодня недопустима. TLS защищает трафик от перехвата и подмены. Важно не только “включить HTTPS”, но и:
- отключить старые протоколы и слабые шифры
- следить за сертификатами
- корректно настраивать HSTS и редиректы
Цифровая подпись и HMAC
- Цифровая подпись подтверждает авторство и целостность.
- HMAC помогает проверить, что сообщение не изменили, если у сторон есть общий секрет.
Это часто используется в API, webhook и интеграциях.
Генерация случайных чисел
Для токенов, ключей, reset-ссылок нельзя использовать обычный random(). Нужен криптографически стойкий генератор случайных чисел. Иначе токены можно предсказать 🎯
Управление ключами важнее самого шифрования
Ключи нельзя хранить в коде, Git-репозитории или `.env` без контроля доступа. Лучше использовать:
- KMS
- HSM
- секрет-хранилища вроде Vault
Утечка ключа часто полностью обнуляет всю защиту.
Частые ошибки разработчиков
- хранение паролей в открытом виде
- использование устаревших алгоритмов: MD5, SHA-1, DES
- отключение проверки сертификатов
- повторное использование ключей и nonce
- логирование секретов, токенов и приватных данных ⚠️
Минимум, который стоит знать каждому разработчику
- чем отличаются шифрование, хэширование и подпись
- как безопасно хранить пароли
- зачем нужен TLS
- как работать с токенами и ключами
- почему надо доверять стандартам, а не “простым самодельным решениям”
Криптография для разработчика — это не глубокая математика, а умение не сломать безопасность на практике. Хороший код защищает не только бизнес-логику, но и данные пользователей 🛡️
Подписывайтесь на подборку каналов про IT — там полезные материалы по разработке, безопасности и современным технологиям 🚀