Trail of Bits Blog на русском
Подписаться
SequenceHash: мультихеширование для остальных из нас
Мультихэширование, процесс объединения нескольких значений в один хэш, является критически важной, но часто неправильно понимаемой криптографической задачей. Небезопасные реализации мультихэширования могут привести к уязвимостям, особенно в таких областях, как доказательства с нулевым разглашением. Trail of Bits представила SequenceHash и SequenceMAC, новые конструкции, разработанные для обеспечения безопасного мультихэширования для широкого спектра криптографических хэш-функций. В отличие от TupleHash от NIST, который привязан к Keccak, SequenceHash и SequenceMAC являются хэш-агностическими, работая с такими функциями, как SHA256, BLAKE и RIPEMD.Эти новые конструкции предлагают однозначное кодирование входных данных, предотвращая манипулирование конкатенированными входами. Они также обеспечивают защиту от расширения длины, что является критически важной функцией безопасности для многих хэш-функций. Кроме того, SequenceHash и SequenceMAC включают необязательные строки настройки для привязки протокола с целью предотвращения повторных атак. SequenceMAC, вариант с ключом, предлагает аналогичные преимущества безопасности для кодов аутентификации сообщений.SequenceHash использует упрощенное целочисленное кодирование фиксированной длины, 128 бит, для счетчиков байтов входных данных, поддерживая потоковые API с кодированием суффикса длины. Этот подход направлен на простоту реализации и обрабатывает практические размеры входных данных с ограничением в ${2}^{128}-1$ байт. Конструкция двойного хэширования, аналогичная HMAC, предотвращает атаки на расширение длины и позволяет использовать режим SequenceMAC с ключом. SequenceMAC решает потенциальные проблемы псевдоколлизий ключей, обнаруженные в HMAC, путем включения метаданных ключа.Три первоначальные реализации SequenceHash и SequenceMAC доступны на Rust, Go и Python, наряду с исчерпывающими тестовыми векторами. Эти инструменты призваны упростить безопасное мультихэширование для разработчиков. Конечная цель — предоставить стандартизированное, простое в использовании решение для этой распространенной криптографической задачи.