Разграничение математических моделей
В теоретической части разбери принципиальную разницу в назначении алгоритмов. Симметричное шифрование вроде AES или надстройки Fernet создавалось для конфиденциальной передачи данных с возможностью их обратного прочтения по секретному ключу. Хеширование решает задачу контроля целостности и аутентификации без сохранения исходного текста.
Покажи свойства криптографических хеш-функций: детерминированность, фиксированную длину дайджеста, лавинный эффект и стойкость к поиску прообраза. Для шифрования опиши блочные шифры, режимы сцепления блоков и необходимость безопасного хранения общего ключа.
Анализ модели угроз и хранение ключей
Центральный вопрос реферата — поведение системы при полной компрометации базы данных. Построй сравнительную таблицу рисков по следующим направлениям:
- Утечка базы данных при симметричном шифровании позволяет злоумышленнику быстро получить доступ к паролям пользователей, если он также завладел конфигурационным файлом сервера с ключом шифрования.
- Утечка базы хешей без соли оставляет риск атак по радужным таблицам и заранее вычисленным словарям популярных паролей.
- Использование криптографической соли делает каждый хеш уникальным даже для одинаковых паролей разных пользователей, исключая пакетный подбор.
- Специализированные функции формирования ключа вроде PBKDF2, bcrypt или Argon2 расходуют вычислительные ресурсы процессора и памяти, делая атаку перебором на видеокартах экономически нецелесообразной.
Практическая часть на Python
Реализуй два компактных модуля. В первом используй встроенную библиотеку hashlib: напиши функцию хеширования пароля с генерацией случайной 16-байтной соли через os.urandom и алгоритм PBKDF2-HMAC-SHA256 на 600 000 итераций. Добавь функцию сверки введенного пароля с сохраненным хешем через безопасное сравнение hmac.compare_digest для предотвращения атак по времени.
Во втором модуле задействуй библиотеку cryptography. Реализуй симметричное шифрование строки пароля классом Fernet, покажи генерацию ключа, процесс шифрования в ciphertext и последующую расшифровку. В выводах к коду наглядно объясни уязвимость этого подхода: пароль в расшифрованном виде неизбежно появляется в оперативной памяти сервера при каждой операции проверки.
Что проверяет преподаватель
В этой теме преподаватель информатики оценивает строгость терминологии и понимание архитектуры безопасности. Ошибочно называть хеширование «односторонним шифрованием». Шифрование всегда предполагает наличие алгоритма расшифровки, которого у хеш-функций нет по определению.
Также проверяется глубина анализа вычислительной сложности. Преподаватель обратит внимание на то, понимаешь ли ты, почему быстрые алгоритмы вроде SHA-256 или MD5 сегодня непригодны для хранения паролей в чистом виде, даже если к ним добавлена соль.
Где искать стандарты и данные
Для теоретической базы используй профильные криптографические документы. Главный первоисточник — руководство NIST Special Publication 800-63B «Digital Identity Guidelines», где четко сформулированы современные требования к хранению секретов аутентификации.
Рекомендации по выбору алгоритмов и параметров итераций бери из отчетов OWASP Password Storage Cheat Sheet. Механику работы алгоритма защиты паролей Argon2 смотри в спецификации RFC 9106, а детали реализации встроенных модулей — в официальной документации Python по модулям hashlib, secrets и hmac.
Частые вопросы
Можно ли применять симметричное шифрование вместе с хешированием?
Да, эта концепция называется добавлением криптографического «перца» (pepper). Хеш пароля с солью дополнительно шифруют симметричным ключом, который хранится в отдельном защищенном аппаратном модуле (HSM) вне базы данных.
Почему обычный SHA-256 считается плохим выбором для паролей?
Алгоритм разрабатывался для максимального быстродействия при обработке файлов. Современная видеокарта перебирает миллиарды комбинаций SHA-256 в секунду, поэтому для паролей применяют ресурсоемкие алгоритмы Argon2, scrypt или PBKDF2.