Кодирование, шифрование и хеширование
Чётко разграничьте эти три понятия и разберитесь, когда следует использовать каждое из них
«Кодирование, шифрование и хеширование» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.
Три разные операции
Кодирование, шифрование и хеширование — это три принципиально разные операции, предназначенные для разных целей. Их часто путают, но понимание различий необходимо для проектирования защищённых систем.
Кодирование изменяет формат данных, не обеспечивая защиту. Шифрование защищает конфиденциальность. Хеширование создаёт отпечаток фиксированной длины для проверки целостности.
Кодирование: преобразование формата
Кодирование преобразует данные из одного формата в другой для обеспечения совместимости или передачи. Оно всегда обратимо и не требует ключа. Любой, кто знает схему кодирования, может декодировать данные.
Примеры включают Base64 (из двоичных данных в ASCII), кодирование URL (%20 для пробела), сущности HTML (& для &) и шестнадцатеричное кодирование. Цель — совместимость, а не безопасность.
Шифрование: конфиденциальность с помощью ключа
Шифрование преобразует открытый текст в шифротекст с использованием ключа. Операцию может обратить только тот, у кого есть правильный ключ. Без ключа расшифровка шифротекста практически невозможна с вычислительной точки зрения.
К алгоритмам шифрования относятся AES (симметричный), RSA (асимметричный) и ChaCha20. Именно ключ обеспечивает безопасность. Сам алгоритм является общедоступным.
Хеширование: односторонние дайджесты фиксированной длины
Криптографическая хеш-функция принимает входные данные произвольной длины и создаёт результат фиксированной длины (дайджест или хеш). Функция детерминирована (одинаковые входные данные всегда дают одинаковый результат), но необратима по замыслу.
SHA-256 всегда создаёт результат размером 256 бит независимо от того, составляет ли входной объём 1 байт или 1 гигабайт. Хеш-функции используются для проверки целостности, хранения паролей и создания цифровых подписей.
Base64 — это НЕ шифрование
Критическая и распространённая ошибка: данные, закодированные в Base64, НЕ зашифрованы. Для декодирования Base64 достаточно знать, что это Base64, что часто очевидно по дополнению "==" или по набору символов.
Если закодировать пароль как "cGFzc3dvcmQ=" (Base64 для "password"), злоумышленник сможет декодировать его за считаные секунды. Base64 в контексте безопасности полезен только для обеспечения совместимости при передаче, но никогда не используется для сокрытия данных.
MD5 пароля — это хеш, а не шифрование
Хеширование пароля с помощью MD5 сохраняет его в виде одностороннего дайджеста. Невозможно "расшифровать" хеш MD5, чтобы восстановить пароль. Однако MD5 не подходит для хеширования паролей, поскольку работает слишком быстро.
Злоумышленники могут вычислять миллиарды хешей MD5 в секунду с помощью графических процессоров, что делает перебор и атаки с использованием радужных таблиц практически осуществимыми. Для хранения паролей нужны медленные функции, требующие больших объёмов памяти, такие как bcrypt, scrypt или Argon2.
AES-GCM — аутентифицированное шифрование
AES-GCM (режим Галуа/счётчика) обеспечивает и конфиденциальность (шифрование), и целостность (аутентификацию). Для шифрования он использует AES в режиме счётчика, а для аутентификации — GHASH.
Тег аутентификации, создаваемый AES-GCM, обнаруживает любые изменения шифротекста. Благодаря этому AES-GCM является схемой аутентифицированного шифрования с сопутствующими данными (AEAD) — золотым стандартом современного шифрования.
SHA-256 — хеш-функция
SHA-256 (безопасный алгоритм хеширования с результатом размером 256 бит) — криптографическая хеш-функция, стандартизированная NIST. Она создаёт дайджест размером 256 бит и считается защищённой от всех известных атак, включая атаки на коллизии и прообраз.
SHA-256 используется в сертификатах TLS, майнинге Bitcoin (доказательство выполнения работы), аутентификации сообщений HMAC и схемах цифровых подписей, таких как RSA-SHA256 и ECDSA.
Распространённые ошибки разработчиков
Распространённые ошибки безопасности, возникающие из-за путаницы между этими тремя понятиями: хранение паролей в зашифрованном, а не хешированном виде (ключ шифрования становится настоящей уязвимостью), использование кодирования вместо шифрования для конфиденциальных данных, использование быстрых хешей (MD5, SHA-1) для хранения паролей и предположение, что данные обязательно защищены, если они представлены в Base64.
Ещё одна ошибка — использование одной и той же функции для разных целей, например применение хеш-функции в качестве MAC без конструкции HMAC, которая уязвима к атакам расширения длины.
Когда использовать каждую операцию
Используйте кодирование, когда необходимо передавать двоичные данные по текстовому протоколу, хранить байты в текстовом поле или встраивать данные в URL. Используйте хеширование для хранения паролей (с bcrypt/Argon2), проверки целостности данных (контрольных сумм) и получения идентификаторов фиксированной длины из данных переменной длины.
Используйте шифрование, когда необходимо хранить или передавать конфиденциальные данные, которые должны восстанавливаться с помощью правильного ключа. Сочетайте хеширование и шифрование (AEAD), чтобы обеспечить и целостность, и конфиденциальность данных при передаче.
Практическое сочетание всех трёх операций
Хорошо спроектированная система аутентификации использует все три операции: пароли хешируются с помощью Argon2 (хеширование), хеш хранится в поле базы данных с применением AES-256 для шифрования столбца (шифрование), а возвращаемый после входа токен API кодируется в Base64url (кодирование).
Каждая операция выполняет отдельную задачу. Умение определить подходящую операцию для каждого случая — фундаментальный навык прикладной криптографии и проектирования защищённых систем.
Проверка знаний: кодирование и шифрование
Проверьте, насколько хорошо Вы понимаете кодирование, шифрование и хеширование.
Главные выводы: кодирование, шифрование и хеширование
Кодирование (Base64, шестнадцатеричный формат) — это преобразование формата без обеспечения безопасности. Шифрование (AES-GCM) обеспечивает обратимую конфиденциальность и требует ключа. Хеширование (SHA-256, Argon2) создаёт необратимые дайджесты фиксированной длины.
Никогда не используйте кодирование для защиты данных. Для паролей используйте медленные хеш-функции (Argon2/bcrypt). Для конфиденциальных данных при передаче или хранении используйте аутентифицированное шифрование (AEAD). Путаница между этими категориями — один из наиболее распространённых источников уязвимостей безопасности.
Часто задаваемые вопросы
Урок «Кодирование, шифрование и хеширование» бесплатный?
Да — полный текст урока «Кодирование, шифрование и хеширование» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.
Чему я научусь в уроке «Кодирование, шифрование и хеширование»?
Чётко разграничьте эти три понятия и разберитесь, когда следует использовать каждое из них Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cryptology Academy?
Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Кодирование, шифрование и хеширование»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cryptology Academy?
Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Кодирование Base64: как это работает
- ASCII, Unicode и представление текста
- Шестнадцатеричное представление криптографических данных
- Кодирование, шифрование и хеширование