MD5, SHA-256, SHA-3 Какой именно алгоритм хэширования вам действительно нужно?

Опубликовано

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

MD5, SHA-256, SHA-3: Какой именно алгоритм хэширования вам действительно нужно? 1
Реклама · УДАЛИТЬ?

Если вы всё ещё выбираете MD5 по умолчанию, вы не одиноки — и, скорее всего, делаете неправильный выбор. Все алгоритмы хэширования создают фиксированную длину отпечатка данных, но они не являются взаимозаменяемыми. Неправильный выбор либо приводит к излишне пугающей защите, либо является настоящим нарушением безопасности, в зависимости от того, в какую сторону вы ошиблись.

Вот что делает каждый алгоритм, где он не справляется и что вы должны использовать вместо него.

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

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

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

MD5: Прекратите использовать его для безопасности

MD5 генерирует хэш длиной 128 бит и работает быстро — именно это и является проблемой. Он был разработан в 1991 году, и к 2004 году учёные продемонстрировали атаки на коллизии. Сегодня генерация двух разных файлов с одинаковым хэшем MD5 является вычислительно тривиальной.

Где он не справляется: В любом контексте безопасности — проверка целостности файлов по ненадёжным каналам, цифровые подписи, сертификаты TLS.

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

Нужно быстро сгенерировать хэш MD5? Используйте Генератор MD5.

SHA-1: Устарел, но всё ещё присутствует

SHA-1 генерирует выход длиной 160 бит и имеет ту же фундаментальную проблему: атаки на коллизии доказаны. Атака Google SHAttered в 2017 году создала два разных PDF-файла с одинаковыми хэшами SHA-1, стоимость которой теперь доступна для мотивированных атакующих.

Официально устарел для цифровых подписей и сертификатов TLS. Вы всё ещё найдёте его в Git, где используется как идентификатор содержимого — угроза в этом случае отличается, и Git активно мигрирует к SHA-256.

Правило: Не используйте SHA-1 для новых задач, связанных с безопасностью. Отметьте его для миграции в устаревших системах.

SHA-256 и SHA-512: Современный стандарт

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

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

Когда использовать: Проверка целостности файлов, HMAC, подписи сертификатов (с RSA/ECDSA), подписи запросов API, токены JWT.

SHA-3: Другая архитектура, узкоспециализированные случаи использования

SHA-3 (Keccak) был выбран НИСТ в 2015 году специально как альтернативная архитектура SHA-2. В то время как SHA-2 использует конструкцию Merkle-Damgård, SHA-3 использует конструкцию «сponge». Если в будущем будет обнаружена фундаментальная слабость в архитектуре SHA-2, SHA-3 останется не затронутым.

Он генерирует те же размеры выхода (SHA3-256, SHA3-512 и т.д.) и проходит все текущие анализы безопасности, но в чистом программном коде он в целом медленнее, чем SHA-256.

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

BLAKE3: Современный выбор по производительности

BLAKE3 не является стандартом НИСТ (ещё не является), но имеет серьёзную популярность: Rust’s cargo, формат Bao для потокового хэширования, и растущий список инструментов безопасности и хранения используют его. Разработан для параллельности, он работает значительно быстрее, чем SHA-256 в программном коде, при этом остаётся устойчивым к текущим криптографическим анализам.

Когда использовать: Высокопроизводительные контрольные суммы, адресация содержимого, в тех случаях, где вы контролируете оба конца и нуждаетесь в скорости без потери безопасности. Избегайте его там, где SHA-2 строго запрещён спецификацией — сертификаты X.509, токены JWT и подобные стандартные контексты.

Сравнение алгоритмов хэширования

Алгоритм Статус безопасности Размер выхода Скорость (программное обеспечение) Случаи использования
MD5 Разрушен (коллизии) 128-бит Очень быстро Не связанные с безопасностью контрольные суммы, дедупликация
ША-1 Разрушен (коллизии) 160-бит Быстро Только для устаревших систем; идентификаторы содержимого в Git
ША-256 Безопасный 256-бит Быстро Общее назначение — стандартный выбор
ША-512 Безопасный 512-бит Быстрее на 64-битных процессорах при больших объёмах данных Высокая пропускная способность или дополнительная безопасность
ША-3 Безопасный 224–512-бит Медленнее в программном коде Долгосрочные системы, требующие независимости от SHA-2
BLAKE3 Безопасный 256-бит Очень быстро (параллельно) Высокопроизводительные контрольные суммы, адресация содержимого

Вычисление хэша SHA-256

Три быстрых способа вычисления хэша SHA-256:

Python:

import hashlib

data = b"hello world"
digest = hashlib.sha256(data).hexdigest()
print(digest)
# Output: b94d27b9934d3e08a52e52d7da7dabfac484efe04294e576fba1d63e8d4d0b4b

Node.js:

const { createHash } = require('crypto');

const digest = createHash('sha256')
  .update('hello world')
  .digest('hex');
console.log(digest);

Bash:

echo -n "hello world" | sha256sum

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

Руководство по выбору

Случаи использования Что использовать
Дедупликация / ключи кэша MD5 или SHA-256
Проверка целостности файла (доверенный канал) MD5 подходит
Проверка целостности файла (скачивание, ненадёжный канал) ША-256
Цифровые подписи SHA-256 или SHA-512
HMAC и аутентификация API ША-256
Сертификаты TLS ША-256
Хранение паролей bcrypt, Argon2 или scrypt — не один из вышеуказанных
Высокопроизводительная адресация содержимого BLAKE3
Соблюдение стандартов SHA-256 (проверьте спецификацию на требования)

Одно важное замечание: ни один из этих алгоритмов не должен использоваться напрямую для хэширования паролей. Все они построены так, чтобы работать быстро, что делает их полезными для атак по перебору. Используйте bcrypt, Argon2id или scrypt — алгоритмы, специально построенные так, чтобы быть медленными и требующими памяти, именно потому что взлом паролей — это игра против врага.

Краткий ответ

Для новых проектов: По умолчанию — SHA-256. Используйте SHA-512, если вам нужно больше размера выхода или вы хэшируете большие потоки на 64-битных процессорах. Используйте BLAKE3 там, где требуется максимальная производительность и вы контролируете оба конца. Используйте SHA-3 только в случае, если есть конкретная архитектурная причина оставаться независимыми от SHA-2.

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

Если вы не уверены, используйте SHA-256. Это было правильным решением на протяжении десятилетия и будет правильным в ближайшем будущем.

Хотите убрать рекламу? Откажитесь от рекламы сегодня

Установите наши расширения

Добавьте инструменты ввода-вывода в свой любимый браузер для мгновенного доступа и более быстрого поиска

в Расширение Chrome в Расширение края в Расширение Firefox в Расширение Opera

Табло результатов прибыло!

Табло результатов — это интересный способ следить за вашими играми, все данные хранятся в вашем браузере. Скоро появятся новые функции!

Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?

новости с техническими моментами

Примите участие

Помогите нам продолжать предоставлять ценные бесплатные инструменты

Купи мне кофе
Реклама · УДАЛИТЬ?