Инструменты разработчика · SHA хеш-калькулятор
Криптографический хеш против контрольной суммы: чего не могут обещать CRC32 и xxHash
· Фон
ша-256 криптография безопасность
CRC32, FNV и xxHash тоже являются хэшами, но они не дают никаких обещаний против противника. В этом посте объясняется, что отличает криптографические хеши от контрольных сумм и как их выбирать для каждого варианта использования.
Какой хэш для какой работы? — выбор между скоростью и противоборствующей безопасностью
Хэш-функции делятся на три категории: контрольные суммы для обнаружения случайных ошибок, некриптографические хэши для распределения и производительности и криптографические хэши для безопасности. Каждая категория имеет разные гарантии и разные компромиссы в скорости и размере дайджеста. Контрольная сумма типа CRC32 быстрая и короткая (4 bytes, 8 шестнадцатеричные символы), но не обеспечивает защиты от преднамеренной модификации. Некриптографический хэш, такой как xxHash или MurmurHash, также быстр и полезен для хеш-таблиц и распределения данных, но не обеспечивает защиты от злоумышленника, который хочет вызвать коллизию. Криптографический хэш, такой как SHA-256, медленнее и создает более длинный дайджест (32 bytes, 64 шестнадцатеричные символы), но он обеспечивает устойчивость к прообразу и устойчивость к коллизиям — свойства безопасности, которые защищают от злоумышленника.
Выбор неправильной хэш-функции для вашего варианта использования — распространенная ошибка безопасности. Использование CRC32 для проверки загрузки файлов из ненадежного источника неэффективно; злоумышленник может легко изменить файл и пересчитать CRC32. Использование SHA-256 в качестве быстрой хеш-функции в высокочастотной хеш-таблице является расточительным; CRC32 или быстрый некриптографический хэш достаточен и дешевле.
Контрольные суммы для случайных ошибок — конструкция CRC для обнаружения смены битов при передаче.
Контрольные суммы предназначены для обнаружения ошибок во время передачи или хранения, где ошибки считаются случайными и случайными. CRC (циклический контроль избыточности) изначально был разработан для обнаружения смены битов при обмене данными. CRC32 создает 32-битный дайджест. Если кадр поврежден случайными перестановками битов во время передачи, CRC32 почти наверняка изменится, предупреждая получателя о необходимости запросить повторную передачу. CRC может обнаруживать до определенного количества битовых ошибок в зависимости от полинома; в большинстве распространенных случаев использования надежно обнаруживается одиночный битовый переворот или серия из нескольких битовых переворотов.
CRC является детерминированным, но не криптографическим. Имея файл и его CRC32, злоумышленник может изменить файл и пересчитать CRC32, чтобы он соответствовал ожидаемому значению. Для противника, знающего полином CRC, создать столкновение несложно. CRC никогда не предназначался для предотвращения преднамеренных изменений; это исключительно для случайного обнаружения ошибок. Исторические системы, такие как файлы ZIP и файлы JPEG, используют для этой цели CRC. Современные протоколы используют CRC для быстрого обнаружения ошибок в зашифрованных или аутентифицированных каналах, а не в качестве отдельной проверки целостности.
Некриптографические хеши для распространения — FNV, MurmurHash и xxHash в хеш-таблицах и секционировании.
Некриптографические хеши, такие как FNV-1a, MurmurHash и xxHash, разработаны для обеспечения скорости и единообразия в хеш-таблицах и секционировании данных. Они имеют очень низкую задержку и используются в ситуациях, когда вам необходимо распределить данные по серверам или сегментам, не заботясь о свойствах безопасности. Если вы создаете кеш и вам нужно сопоставить ключ с номером сегмента, подойдет быстрый хэш. MurmurHash был разработан специально для использования хэш-таблиц и работает быстрее, чем SHA на большинстве аппаратных средств. xxHash является более новым и оптимизирован для современных процессоров с большими кэшами и векторизацией.
Эти хэши не являются криптографическими, поскольку они не противостоят атакам на прообразы (поиск входных данных, которые создают определенный дайджест) или атакам коллизий (поиск двух разных входных данных, которые создают один и тот же дайджест). Злоумышленник может вычислить алгоритм хеширования и найти входные данные, которые конфликтуют или дают целевой результат. В доверенной среде (кластере, где все узлы находятся под вашим контролем) это приемлемо. Если ненадежный пользователь может контролировать входные данные, некриптографический хеш уязвим для атак коллизий, которые снижают производительность (худший случай хеш-таблицы — это линейный поиск, когда все ключи конфликтуют) или вызывают другие побочные эффекты.
Что добавляют криптографические хэши — устойчивость к прообразам и коллизиям против преднамеренного злоумышленника
Криптографические хеши, такие как SHA-256, SHA-384 и SHA-512, обеспечивают устойчивость к прообразу: учитывая дайджест, вычислительно невозможно найти какие-либо входные данные, которые создают этот дайджест. Они также обеспечивают устойчивость к коллизиям: вычислительно невозможно найти два разных входа, которые создают один и тот же дайджест. Эти свойства защищают от злоумышленника, который хочет подделать загрузку, создать поддельный сертификат или подделать сообщение. Цена — скорость: SHA-256 медленнее, чем CRC32, и медленнее, чем xxHash на большинстве аппаратных средств.
SHA-1 криптографически взломан (конфликты возможны) и не должен использоваться в новых целях безопасности, но он все равно вычисляется для совместимости с устаревшими версиями. SHA-256, SHA-384 и SHA-512 остаются надежными и являются стандартным выбором для криптографического хеширования. «2» в SHA-2 указывает на второе семейство алгоритмов SHA (первым является исходный SHA-1; SHA-3 — более новое семейство, но оно редко используется для этой цели).
Криптографические хеши добавляют состязательные свойства; в этой статье избегаются неподтвержденные заявления об относительной скорости.
Сопоставление пяти сценариев с правильным семейством хешей: Во-первых, подходят сетевые кадры, передаваемые по надежному каналу, зашифрованные с помощью AES: CRC32. Шифрование защищает от изменений, а CRC обнаруживает случайное повреждение. Во-вторых, хеш-таблицы или согласованное хеширование для балансировки нагрузки: подойдет некриптографический хэш, например xxHash. Скорость имеет значение, и окружающей среде доверяют. В-третьих, требуется проверка целостности загрузки из ненадежного источника: SHA-256. Злоумышленник может изменить файл и контрольную сумму, но не криптографический хэш, не нарушив при этом SHA-256.
В-четвертых, цифровые подписи и сертификаты: SHA-256 требуется и сочетается с асимметричным алгоритмом, например RSA или ECDSA. Подпись доказывает, что хэш не был изменен после подписания. В-пятых, требуется дедупликация загружаемых пользователем файлов: SHA-256, поскольку пользователи могут намеренно загружать файлы, предназначенные для конфликта с существующими файлами в некриптографическом хэше. Если дедупликация основана на xxHash, злоумышленник может загрузить файл с тем же хэшем, что и у другого файла, но с другим содержимым, в результате чего система неправильно отклонит загрузку.
Рабочий пример — сопоставление пяти сценариев (сетевые фреймы, хеш-карты, проверка загрузки, подписи, дедупликация пользовательских загрузок) с нужным семейством.
Стоимость выбора криптографического хеша для каждого варианта использования связана с накладными расходами на производительность. SHA-256 медленнее, чем CRC, и медленнее, чем xxHash. В «горячем» цикле — фрагменте кода, который выполняется миллионы раз в секунду — эти издержки заметны. На этапе настройки или в пакетной операции оно незначительно. Схема принятия решения такова: есть ли у противника стимул вызвать столкновение? Если да, используйте SHA-256. Если нет и если скорость важна, используйте более быстрый хэш. Если безопасность важнее скорости, используйте SHA-256 в любом случае.
Распространенной ошибкой является использование MD5, старого криптографического хэша, который теперь взломан. MD5 был разработан в 1992, а коллизии были продемонстрированы в 2004. Использование MD5 в целях безопасности небезопасно. Иногда это можно увидеть в устаревших системах и в ситуациях, когда скорость имеет приоритет, но сегодня нет сценария, в котором MD5 является правильным выбором: если вам нужна скорость, используйте xxHash; если вам нужна безопасность, используйте SHA-256. Никогда не используйте MD5.
Сопоставление сценариев остается качественным, поскольку пропускная способность и поведение при коллизиях требуют данных, специфичных для конкретной реализации.
Хеширование паролей — это четвертая категория, отличающаяся как от контрольных сумм, так и от криптографических хэшей общего назначения. Не используйте SHA-256 для хеширования паролей. Вместо этого используйте функцию хеширования паролей, например bcrypt, scrypt или Argon2, которые намеренно медленны и содержат соль. Быстрый криптографический хэш, такой как SHA-256, делает подбор пароля дешевым: злоумышленник может делать миллионы попыток в секунду. Функция хеширования пароля предназначена для того, чтобы каждое угадывание занимало много ресурсов CPU и памяти, поэтому подбор надежного пароля по-прежнему занимает больше времени, чем может ждать злоумышленник. Хеширование паролей — это специализированный вариант использования со своими требованиями.
Хэш-калькулятор ToolAcre SHA не поддерживает хеширование паролей и намеренно не предлагает MD5, никаких пользовательских параметров и быстрого хэширования. Это инструмент для вычисления стандартных дайджестов SHA для проверки и проверки целостности, а не для аутентификации или хранения паролей.
Вывод: противник или нет противника — используйте ToolAcre SHA хэш-калькулятор, когда кто-то может подделать данные
Выбор алгоритма хеширования — фундаментальное решение, которое влияет как на производительность, так и на безопасность всей системы. Дайджест заслуживает доверия настолько же, насколько и алгоритм, который его создал. Если вы выберете CRC32 для проверки файла, дайджест не обеспечит защиту от преднамеренного изменения. Если вы выберете SHA-256 для хеш-таблицы, вы зря потратите ресурсы. Знание свойств и компромиссов каждой категории позволит вам сделать правильный выбор.
Хэш-калькулятор ToolAcre SHA предоставляет значения от SHA-1 до SHA-512, охватывающие криптографические хэши, которые важны для большинства случаев использования. Он не предлагает CRC32, xxHash или MD5, поскольку каждый из них является правильным выбором в определенных контекстах (CRC для обнаружения ошибок в доверенном канале, xxHash для производительности в контролируемой среде, ничего для MD5), и их предложение без подчеркивания того, когда использовать каждый, приведет к ошибкам. Калькулятор предназначен для расчета стандартных криптографических дайджестов. Используйте командную строку с `crc32`, `xxh64` или эквивалентными инструментами, если вам нужны эти хеши. Для проверки загрузки, отпечатков сертификатов, коммитов git и подобных случаев использования, когда злоумышленник может подделать данные, используйте SHA-256 через ToolAcre SHA хеш-калькулятор.