Русский

Инструменты разработчика · SHA хеш-калькулятор

SHA-256 против SHA-512: размер слова, округление и почему 512 может быть быстрее

· Как это работает

ша-256 криптография производительность API-интерфейс браузера

Параллельное сравнение 32-битных и 64-битных слов, раундов 64 и 80, а также выходных битов 256, 384 и 512.
Оригинальная векторная иллюстрация ToolAcre

SHA-512 создает более длинный дайджест, но часто работает быстрее на 64-битном оборудовании. В этом посте объясняются структурные различия между ними и то, как SHA-384 вписывается в него, чтобы вы могли выбирать на основе фактов.

Более длинный хэш, более быстрый запуск? — контринтуитивное наблюдение, с которого начинается сравнение

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

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

32-битные слова и 64-битные слова — основная структурная разница и почему она подходит современным процессорам

SHA-256 оперирует 32-битными словами на протяжении всего алгоритма. Расписание сообщений расширяет 16 32-битные слова до 64 32-битных слов. Каждый раунд обновляет восемь 32-битных рабочих переменных. Блок сообщения состоит из 512 bits (шестнадцать 32-битных слов). На выходе получается 256 bits (восемь 32-битных слов). Вся арифметика выполняется над 32-битными значениями с переносом переполнения в 2^32.

SHA-512 оперирует 64-битными словами. Расписание сообщений расширяет 16 64-битные слова в 80 64-битные слова (а не 64, как в SHA-256). Каждый раунд обновляет восемь 64-битных рабочих переменных. Блок сообщения состоит из 1024 bits (шестнадцать 64-битных слов). На выходе получается 512 bits (восемь 64-битных слов). Вся арифметика выполняется над 64-битными значениями с переносом переполнения в 2^64.

64 раундов по сравнению с 80, 512-битными по сравнению с 1024-битными блоками — что меняется для каждого блока и для каждого байта

SHA-256 выполняет 64 раундов на блок; SHA-512 выполняет 80 раундов на блок. Это означает, что SHA-512 выполняет больше микширования на блок. На первый взгляд это звучит медленнее. Но больший размер слова и блока означает, что SHA-512 обрабатывает больше битов за раунд. Для файла размером 1 SHA-256 обрабатывает 1048576 / 512 = 2048 блоков, каждый из которых содержит 64 раундов, всего 131072 раундов. SHA-512 обрабатывает 1048576 / 1024 = 1024 блоков, каждый из которых содержит 80 раундов, всего 81920 раундов. SHA-512 в целом выполняет меньше раундов, хотя на блок он выполняет больше раундов.

Разница во времени настенных часов зависит от оптимизации размера слова в CPU. CPU с 64-битным ALU (арифметико-логическим устройством) будет эффективно выполнять 64-битные операции. Если один и тот же CPU должен разбить 32-битные SHA-256 операции на несколько микроопераций или запустить их на меньшем исполнительном блоке, стоимость каждой операции будет выше. Современные процессоры оптимизируют 64-битные операции, делая SHA-512 часто быстрее, несмотря на дополнительные раунды на блок.

Размер блока и количество раундов объясняют работу на байт; фактическая пропускная способность требует эталонного теста платформы

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

Это структурное сравнение не позволяет предсказать конкретный тест браузера. Web Crypto может использовать собственные инструкции, библиотеки операционной системы или другой оптимизированный код, а длина ввода меняет долю, затрачиваемую на установку. Измеряйте фактическую целевую среду, когда пропускная способность имеет значение; репозиторий поддерживает только качественное утверждение о том, что более широкие слова могут соответствовать 64-битному оборудованию.

Длина выходных данных влияет на представление и свойства безопасности без необоснованной оценки атаки.

SHA-384 не является отдельным алгоритмом; это SHA-512 с двумя изменениями: начальные хэш-константы другие, а выходные данные обрезаются до 384 bits (48 bytes) вместо полного 512 bits. Такое усечение имеет преимущество против атак с увеличением длины: злоумышленник не может расширить дайджест, добавляя данные к исходному сообщению, поскольку полное 512-битное состояние неизвестно (из него были раскрыты только 384 bits).

SHA-256 уязвим для атак с расширением длины: если вы знаете дайджест сообщения и знаете длину сообщения, вы можете добавить данные к сообщению и вычислить дайджест расширенного сообщения, не зная содержимого исходного сообщения. Это имеет значение в конкретных контекстах безопасности, например, в реализациях HMAC, использующих слабую конструкцию. SHA-384, несмотря на то, что он основан на SHA-512, не уязвим, поскольку полное состояние не раскрывается. Это делает SHA-384 полезным в контекстах, где SHA-256 считается рискованным.

Рабочий пример — хеширование одного ввода со всеми тремя и сравнение длин дайджеста рядом.

Размер вывода — самое простое различие. SHA-256 создает 32 bytes (64 шестнадцатеричные символы); SHA-384 создает 48 bytes (96 шестнадцатеричные символы); SHA-512 создает 64 bytes (128 шестнадцатеричные символы). Для хранения в URL-адресах или JSON более длинные дайджесты занимают больше места. Что касается сопротивления столкновению, более длинный выходной сигнал делает обнаружение столкновений экспоненциально труднее. Более широкие выходные данные обеспечивают большее пространство результатов, в то время как их непосредственные последствия для продукта легче измерить: больше байтов в хранилище, URL-адресах и полях протокола. В этой статье не прилагается оценка активности атаки, поскольку она не получена на основе доказательств хранилища.

Некоторые системы и стандарты явно определяют SHA-256; другие используют SHA-512 или допускают выбор. SSH отпечатки пальцев по умолчанию имеют значение SHA-256; Дайджесты образов контейнеров могут быть SHA-256 или SHA-512. Менеджеры пакетов, такие как npm, используют SHA-512 для целостности подресурсов. Выбор часто делается за вас, но понимание различий позволяет вам делать мудрый выбор, когда у вас есть право голоса.

Чего это не касается — показатели пропускной способности, которые зависят от CPU, компилятора и размера входных данных; пост остается качественным

Хэш-калькулятор ToolAcre SHA предлагает SHA-256, SHA-384 и SHA-512. Хэшируйте один и тот же ввод со всеми тремя и наблюдайте за длиной вывода. Все дайджесты будут полностью отличаться друг от друга, что и ожидается: в алгоритмах используются разные константы раунда, разные расписания сообщений и разные операции микширования. Количество байтов, отображаемое рядом с дайджестом, отражает только размер ввода, а не размер вывода; все три алгоритма одинаково обрабатывают одни и те же входные байты на протяжении соответствующих последовательностей раундов.

Тестирование на вашем собственном оборудовании показывает разницу в производительности. Хешируйте большой файл (тестовый пример размером в несколько мегабайт) с каждым алгоритмом и рассчитывайте время результатов. В современных 64-битных системах SHA-512 часто выполняется за меньшее время, даже если подсчет байтов может свидетельствовать об обратном. В 32-битных системах или встроенных процессорах SHA-256 может быть быстрее, поскольку ALU CPU оптимизирован для 32-битных операций.

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

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

Реализация Web Crypto в браузере вычисляет все три через crypto.subtle.digest. Ваше устройство, версия браузера и фоновая загрузка системы влияют на наблюдаемую производительность. Но ключевой момент остается: SHA-256 и SHA-512 не конкурируют за звание «лучшей хэш-функции». Это инструменты, предназначенные для различных требований к выходу, и выбор между ними делается на основе потребностей вашей системы, а не на общих требованиях к производительности.