0Pricing
Security+ Academy · Урок

Хеширование и целостность данных

Узнайте, как SHA-256, MD5 и HMAC создают дайджесты фиксированной длины, подтверждающие, что данные не были изменены при передаче или хранении.

«Хеширование и целостность данных» — бесплатный урок Security+ Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Security+ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Security+ Academy содержит 4 уроков всего.

Что такое хеш-функция

Криптографическая хеш-функция — это математический алгоритм, который принимает данные любого размера и формирует результат фиксированной длины, называемый hash, дайджестом или отпечатком. Хеш-функции являются однонаправленными: имея хеш, вычислительно невозможно определить исходные данные. Они детерминированы: одинаковые входные данные всегда дают одинаковый хеш. Хеш-функции лежат в основе проверки целостности данных, цифровых подписей, хранения паролей и многих других механизмов безопасности.

Свойства безопасных хеш-функций

Безопасная криптографическая хеш-функция должна обладать четырьмя ключевыми свойствами. Стойкость к нахождению прообраза: имея результат хеширования, вычислительно невозможно найти входные данные, которые его порождают. Стойкость ко второму прообразу: имея одни входные данные, невозможно найти другие данные с тем же хешем. Стойкость к коллизиям: невозможно найти две различные последовательности входных данных, дающие одинаковый результат хеширования. Лавинный эффект: изменение даже одного бита входных данных приводит к совершенно иному результату хеширования, благодаря чему можно обнаружить подмену.

# Avalanche effect demonstration
echo -n 'Hello' | sha256sum
# 185f8db32...  (completely different when one char changes)
echo -n 'Hello!' | sha256sum
# 334d016f7...  (entirely different hash)

# Same input ALWAYS produces same hash (deterministic)
echo -n 'Security+' | sha256sum
echo -n 'Security+' | sha256sum
# Both outputs are identical

MD5: взломан и устарел

MD5 (Message Digest 5) формирует 128-битный хеш и когда-то широко использовался. Однако в 2004 году исследователи продемонстрировали атаки на коллизии MD5 — то есть показали, что можно найти две разные последовательности входных данных с одинаковым хешем. Это катастрофично для проверки целостности: злоумышленник может подменить файл с вредоносным содержимым, имеющий тот же хеш MD5, что и исходный файл. MD5 полностью взломан с точки зрения криптографической безопасности и не должен использоваться для проверки целостности, цифровых подписей или хеширования паролей. Иногда его по-прежнему применяют для некритичных с точки зрения безопасности контрольных сумм (проверки устаревших файлов), что допустимо только для обнаружения случайного повреждения.

Семейство SHA: SHA-1, SHA-256, SHA-3

Семейство Secure Hash Algorithm (SHA) — важнейший набор хеш-функций для Security+. SHA-1 (160 бит) долгие годы был стандартом, но в 2017 году был взломан с помощью практической атаки на коллизии (проект SHAttered компании Google) и теперь считается устаревшим. SHA-256 (часть семейства SHA-2, результат длиной 256 бит) является действующим отраслевым стандартом для цифровых подписей, сертификатов TLS и проверки целостности файлов. SHA-3 (Keccak) — альтернативный алгоритм NIST, устойчивый к атакам на структуру SHA-2, хотя SHA-256 остаётся основным выбором для большинства приложений.

# Common hash computations
echo -n 'password123' | sha256sum
# a665a4592...64 hex chars = 256 bits

echo -n 'password123' | sha512sum  
# b109f3bb...128 hex chars = 512 bits (SHA-512)

# File integrity check
sha256sum /path/to/downloaded_file.iso > file.sha256
sha256sum -c file.sha256
# file.iso: OK

Хеш-функции для хранения паролей

Хранить пароли в виде обычного текста недопустимо. Когда пользователь создаёт пароль, в базе данных вместо самого пароля сохраняется hash. При входе пользователя введённый пароль хешируется и сравнивается с сохранённым хешем. Однако стандартный SHA-256 слишком быстр для хранения паролей: злоумышленники используют графические процессоры, чтобы проверять миллиарды хешей в секунду по украденным базам паролей. Специализированные функции хеширования паролей, такие как bcrypt, PBKDF2 и Argon2, добавляют вычислительные затраты (параметры сложности) и требования к памяти, из-за чего массовый взлом становится практически невозможным.

# bcrypt hash example (Python-style pseudocode)
import bcrypt
password = b'mySecretPassword'
# Hash with work factor of 12 (2^12 = 4096 iterations)
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
# Stored in DB: $2b$12$H0qS/LkPkAiH8KlxJb3lFuK...

# Verify (never compare raw hashes for bcrypt)
bcrypt.checkpw(password, hashed)  # Returns True

Соль: защита от радужных таблиц

Радужная таблица — это заранее вычисленная таблица соответствий распространённых паролей и их хешей, позволяющая злоумышленнику мгновенно найти исходный пароль по хешу. Чтобы противостоять радужным таблицам, хеши паролей необходимо дополнять солью. Соль — это случайное значение, добавляемое к паролю перед хешированием. Благодаря этому хеш каждого пользователя становится уникальным, даже если два пользователя используют один и тот же пароль. Соль хранится вместе с хешем и не должна быть секретной. Даже получив всю базу паролей, злоумышленник не сможет воспользоваться заранее вычисленными радужными таблицами, поскольку для каждого хеша использовалась своя соль.

# Salt demonstration
# Without salt: same password = same hash (rainbow table attack works)
# SHA256('password123') = always the same hash

# With salt: same password + random salt = unique hash
# SHA256('password123' + 'aBc8xZ') = unique hash for this user
# SHA256('password123' + 'mK2pYq') = completely different hash

# The salt is stored in the database alongside the hashed value
# Format: $salt$hash or combined as in bcrypt output

HMAC: добавление аутентификации к хешированию

HMAC (Hash-based Message Authentication Code) — это конструкция, использующая хеш-функцию и секретный ключ для формирования кода аутентификации. В отличие от обычного хеша, HMAC можно вычислить и проверить только сторонам, знающим секретный ключ. Это обеспечивает как целостность (обнаружение изменений), так и аутентификацию (подтверждение того, что сообщение отправил владелец ключа). HMAC-SHA256 широко используется для аутентификации API (при подписании запросов API), в токенах JWT и операциях MAC протокола TLS. Он не позволяет злоумышленнику, перехватившему сообщение, заменить его специально сформированным вариантом.

# Compute HMAC-SHA256 with OpenSSL
openssl dgst -sha256 -hmac 'my-secret-api-key' -hex api_request.json
# Output: HMAC-SHA256(api_request.json)= 3d4e2f...

# Only someone with 'my-secret-api-key' can generate or verify this HMAC
# Used in AWS Signature V4 for API authentication
# Used in JWT HS256 algorithm for token integrity

Хеш-функции в цифровых подписях

Хеш-функции играют центральную роль в цифровых подписях. При подписании большого документа не следует шифровать весь документ закрытым ключом, поскольку это было бы крайне медленно. Вместо этого выполняются следующие действия: (1) вычисляется hash документа (быстро, формируется небольшой дайджест фиксированной длины), затем (2) небольшой хеш подписывается закрытым ключом. Подпись представляет собой зашифрованный хеш. Проверка выполняется аналогично: подпись расшифровывается для получения хеша, документ независимо хешируется, и результаты сравниваются. SHA-256 обязателен во всех современных сертификатах PKI; SHA-1 запрещён в новых сертификатах.

Мониторинг целостности файлов (FIM)

Мониторинг целостности файлов (FIM) использует хеш-функции для обнаружения несанкционированных изменений в критически важных системных файлах. При создании базового состояния средство FIM хеширует все отслеживаемые файлы и безопасно сохраняет хеши. Периодически или непрерывно оно повторно хеширует файлы и сравнивает результаты с базовым состоянием. Любое несоответствие означает, что файл был изменён — возможно, вредоносной программой или в результате несанкционированных действий администратора. Такие средства FIM, как Tripwire, AIDE (Linux) и встроенная проверка целостности Windows, используют хеши SHA-256. FIM требуется такими стандартами соответствия, как PCI-DSS, для защиты сред обработки данных держателей карт.

# AIDE (Advanced Intrusion Detection Environment) - Linux FIM
# Initialize baseline database
aide --init
# mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

# Check for changes (run via cron daily)
aide --check
# Output shows any files that were added, changed, or deleted
# File: /etc/passwd changed
# MD5 : old_hash != new_hash

Контрольные суммы и криптографические хеши

Важно различать контрольные суммы и криптографические хеши. Контрольные суммы, такие как CRC32, предназначены для обнаружения случайного повреждения данных при передаче: они быстры и просты, но злоумышленник может легко их подделать. Криптографические хеши (SHA-256) предназначены для устойчивости к коллизиям и обнаружения подмены даже при целенаправленном воздействии. Используйте контрольные суммы, когда нужно лишь проверить, не повредилась ли загрузка при передаче; используйте криптографические хеши, когда нужно убедиться, что файл не был намеренно изменён злоумышленником.

Атаки на коллизии хешей на практике

Атаки на коллизии хешей имеют реальные последствия. В 2017 году исследователи создали два разных PDF-файла с одинаковым хешем SHA-1, продемонстрировав, что сертификаты SHA-1 можно подделать. В 2008 году исследователи использовали коллизии MD5 для создания поддельного сертификата CA, который выглядел подлинным. Именно поэтому браузеры отклоняют сертификаты MD5 и SHA-1, а центры сертификации должны использовать как минимум SHA-256. Понимание атак на коллизии помогает объяснить, почему алгоритмы выводят из эксплуатации и почему аргумент «но он всё ещё создаёт хеш» недостаточен для использования взломанных алгоритмов.

Быстрая проверка

Проверьте своё понимание концепций CompTIA Security+ (SY0-701) из этого урока.

Итоги урока

В этом уроке Вы узнали, что хеш-функции создают дайджесты фиксированной длины для проверки целостности; MD5 и SHA-1 взломаны и выведены из эксплуатации; SHA-256 является действующим стандартом; добавление соли защищает от атак с использованием радужных таблиц; а HMAC добавляет аутентификацию к хешированию с помощью общего секретного ключа. Далее мы рассмотрим обмен ключами и гибридное шифрование.

Часто задаваемые вопросы

Урок «Хеширование и целостность данных» бесплатный?

Да — полный текст урока «Хеширование и целостность данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Security+ Academy, подпишись на CoddyKit PRO. Курс Security+ Academy содержит 4 уроков всего.

Чему я научусь в уроке «Хеширование и целостность данных»?

Узнайте, как SHA-256, MD5 и HMAC создают дайджесты фиксированной длины, подтверждающие, что данные не были изменены при передаче или хранении. Ты практикуешь Security+ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Security+ Academy?

Предыдущий опыт не требуется. Security+ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Хеширование и целостность данных»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Security+ Academy?

Да. Каждый урок Security+ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Алгоритмы симметричного шифрования
  2. Асимметричное шифрование и пары ключей
  3. Хеширование и целостность данных
  4. Обмен ключами и гибридное шифрование
← Назад к Security+ Academy