Security 6 Jul 2026 7 мин. чтения

Что такое контрольная сумма? Объяснение MD5, SHA-1, SHA-256

Контрольная сумма — это короткий 'отпечаток', который позволяет проверить, не был ли файл изменен или поврежден. Понимание того, какой алгоритм хеширования использовать и в чем недостатки MD5, убережет вас от распространенных ошибок безопасности.

Checksum guide: MD5, SHA-1, SHA-256 hash functions explained

Что такое контрольная сумма?

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

  • Проверка целостности — не был ли этот файл поврежден или изменен при передаче?
  • Идентификация — является ли этот конкретный файл (или фрагмент данных) таким же, как другая копия?

Когда вы скачиваете программное обеспечение с официального сайта, на странице загрузки часто отображается хеш MD5 или SHA-256. После загрузки вы вычисляете хеш вашего локального файла и сравниваете его. Если они совпадают, файл цел.

Как работает хеш-функция

Криптографическая хеш-функция принимает входные данные любой длины и выдает дайджест фиксированной длины. Четыре свойства определяют хорошую хеш-функцию:

  • Детерминированность — один и тот же вход всегда дает одинаковый выход
  • Однонаправленность — вы не можете обратить хеш обратно к исходным данным (в разумные сроки)
  • Эффект лавины — изменение одного символа во входных данных меняет примерно половину бит выходных данных
  • Стойкость к коллизиям — должно быть вычислительно невозможно найти два разных входных значения, которые производят одинаковый хеш
Пример — эффект лавины SHA-256:
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("Hello") = 185f8db32921bd46d35e3a1a4e9a9b9c6a7e6a7d2d2c4e9d... (совершенно другой)

MD5 — Быстрый, знакомый и небезопасный для защиты данных

MD5 (Message Digest Algorithm 5) создает 128-битный дайджест (32 символа в шестнадцатеричной системе). Он был разработан в 1991 году и стал стандартным алгоритмом контрольных сумм в интернете примерно на два десятилетия.

Где MD5 все еще приемлем:

  • Проверки целостности без учета безопасности — подтверждение того, что большой файл не был поврежден во время передачи
  • Дедупликация — проверка того, идентичны ли два файла (как быстрая предварительная проверка перед побайтовым сравнением)
  • Ключи кеша и ETags, где атаки с коллизиями не представляют проблемы

Где MD5 неприемлем:

  • Хранение паролей — MD5 чрезвычайно быстр, что делает атаки методом перебора с помощью GPU тривиальными. Достижимо создание миллиардов хешей MD5 в секунду на потребительском оборудовании.
  • Цифровые подписи — атаки с коллизиями MD5 были продемонстрированы на практике. Можно создать два разных файла с одинаковым хешем MD5.
  • Отпечатки сертификатов — здесь также применяется та же проблема с коллизиями.
Использование MD5 для паролей является критической уязвимостью. Если вы найдете md5($password) в устаревшем коде, замените его на password_hash() в PHP или bcrypt/Argon2 в любом другом языке. MD5 не является алгоритмом хеширования паролей — он никогда не проектировался как медленный, а именно медлительность делает хеширование паролей безопасным.

SHA-1 — Устаревший стандарт

SHA-1 создает 160-битный дайджест (40 символов в шестнадцатеричной системе). Он заменил MD5 в качестве рекомендуемого алгоритма в конце 1990-х годов и широко использовался в сертификатах SSL/TLS, системах контроля версий и проверках целостности файлов.

В 2017 году команда Project Zero от Google продемонстрировала первую практическую коллизию SHA-1 (атака "SHAttered"), потребовавшую вычислительных мощностей примерно в 6 500 процессорных лет. Ведущие браузеры и центры сертификации прекратили принимать сертификаты SHA-1 в 2017 году. Git все еще использует SHA-1 внутри для хешей коммитов, но они находятся в процессе перехода на SHA-256 как альтернативу.

Для новых приложений не используйте SHA-1. Используйте вместо него SHA-256 или SHA-512.

SHA-256 — Текущий стандарт

SHA-256 является частью семейства SHA-2, разработанного NSA и опубликованного в 2001 году. Он создает 256-битный дайджест (64 символа в шестнадцатеричной системе). На сегодняшний день практических атак с коллизиями против SHA-256 не существует.

Используйте SHA-256 для:

  • Проверки целостности файлов (скачивание программ, резервное копирование)
  • Цифровых подписей (сертификаты TLS, подпись кода)
  • Токенов аутентификации на основе HMAC (HMAC-SHA256)
  • Блокчейна и криптовалют (биткоин использует двойной SHA-256)
  • Хешей коммитов в Git в режиме SHA-256
  • Подписей JWT (JSON Web Token) при использовании HS256 или RS256

SHA-256 — правильный выбор по умолчанию для почти любого приложения, которому нужен безопасный хеш. Если сомневаетесь, используйте SHA-256.

SHA-512 — Когда нужно больше

SHA-512 создает 512-битный дайджест (128 символов в шестнадцатеричной системе). Он принадлежит к тому же семейству SHA-2 и обладает такой же степенью безопасности. Основное практическое различие:

  • На 64-битных процессорах SHA-512 может быть фактически быстрее, чем SHA-256, потому что алгоритм оптимизирован для размеров слов в 64 бит
  • На 32-битных системах и оборудовании быстрее работает SHA-256
  • SHA-512 имеет больший выходной результат, что означает увеличение объема хранения и передачи

Используйте SHA-512, когда приложение требует более длинного дайджеста или когда вы работаете на оборудовании, где SHA-512 имеет преимущество в производительности. Для большинства веб-приложений достаточно SHA-256.

Примечание по хешированию паролей

Ни один из вышеуказанных алгоритмов не должен использоваться напрямую для хранения паролей. MD5, SHA-1, SHA-256 и SHA-512 все спроектированы как быстрые — а для паролей быстрота является ошибкой.

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

  • bcrypt — является стандартом уже более 20 лет, поддерживается практически во всех языках
  • Argon2 (в частности Argon2id) — победитель конкурса Password Hashing Competition (2015), рекомендуется для новых приложений
  • scrypt — с защитой от атак на память, также отличный выбор

В PHP: password_hash($password, PASSWORD_ARGON2ID). В Node.js: используйте пакеты bcryptjs или argon2. Они автоматически обрабатывают генерацию соли и настройку параметров сложности.

Как проверить контрольную сумму файла

Когда вы скачиваете программное обеспечение, а сайт предоставляет хеш SHA-256:

В macOS / Linux:
shasum -a 256 downloaded-file.zip
# сравните результат с официальным хешем
В Windows (PowerShell):
Get-FileHash downloaded-file.zip -Algorithm SHA256

В качестве альтернативы используйте наш генератор хешей, чтобы вставить содержимое файла или текст и мгновенно вычислить хеши MD5, SHA-1, SHA-256 или SHA-512 прямо в браузере — ничего не отправляется на сервер.

Сгенерировать MD5, SHA-256 и другие

Вычислите любой хеш (MD5, SHA-1, SHA-256, SHA-512) из текста или содержимого файла прямо в вашем браузере — без загрузки файлов и использования сервера.