Siphash - это семейство псевдорандомов (PRFS), оптимизированное для скорости в коротких сообщениях. Это справочный код C Siphash: портативный, простой, оптимизированный для ясности и отладки.
Siphash был разработан в 2012 году Жан-Филипп Аумассоном и Даниэлем Дж. Бернштейном как защита от атаки DOS с хеш-палочкой.
Сифаш:
Проще и быстрее в коротких сообщениях, чем предыдущие криптографические алгоритмы, такие как Mac, основанные на универсальном хешировании.
Конкурентоспособный по производительности с небезопасными некриптографическими алгоритмами, такими как Fhhash.
Криптографически безопасно , без признаков слабости, несмотря на множественные проекты криптанализа ведущими криптографами.
Потказанные в битве , с успешной интеграцией в OSS (ядро Linux, OpenBSD, FreeBSD, Freertos), языки (Perl, Python, Ruby и т. Д.), Библиотеки (OpenSsl Libcrypto, натрия и т. Д.) И приложения (Wireguard, Redis и т. Д.).
В качестве безопасной функции псевдордома (HASH FUNCTIONED, так как SIPHASH также можно использовать в качестве безопасного кода аутентификации сообщений (MAC). Но Siphash не является хэш в смысле хэш-функции без ключа в общем назначении, такой как Blake3 или SHA-3. Поэтому Siphash должен всегда использоваться с секретным ключом, чтобы быть в безопасности.
Сифаш по умолчанию- Siphash-2-4 : он требует 128-битного ключа, 2 раунда сжатия, 4 раунда завершения и возвращает 64-битный тег.
Варианты могут использовать различное количество раундов. Например, мы предложили Siphash-4-8 в качестве консервативной версии.
Следующие версии не описаны в статье, но были разработаны и проанализированы для удовлетворения потребностей приложений:
Siphash-128 возвращает 128-разрядную метку вместо 64-битной. Версии с указанным количеством раундов являются Siphash-2-4-128, Siphash4-8-128 и так далее.
Halfsiphash работает с 32-разрядными словами вместо 64-битных, берет 64-битный ключ и возвращает 32-битные или 64-битные теги. Например, Halfsiphash-2-4-32 имеет 2 раунда сжатия, 4 раунда завершения и возвращает 32-разрядную метку.
(Половина) Siphash -C - D с C ≥ 2 и D ≥ 4, как ожидается, обеспечит максимальную безопасность PRF для любой функции с той же ключом и выходным размером.
Стандартная цель безопасности PRF позволяет злоумышленнику получить доступ к выводу Siphash на сообщениях, выбранных адаптивно злоумышленником.
Безопасность ограничена размером ключа (128 бит для Siphash), так что злоумышленники, ищущие 2 S -клавиши, имеют шанс 2 S -128 от поиска ключа Siphash. Безопасность также ограничена размером выхода. В частности, когда Siphash используется в качестве Mac, злоумышленник, который слепо пробует 2 S Tags, будет успешной с вероятностью 2 S - T , если T the That Bit Bit.
Бег
makeбудет строить тесты для
./ testпроверяет 64 тестовых векторов и
./ debugделает то же самое и печатает промежуточные значения.
Код может быть адаптирован для реализации Siphash -C - D , версии Siphash с раундами сжатия C и раундами завершения D , путем определения cROUNDS или dROUNDS при компиляции. Это можно сделать с помощью аргументов командной строки -D со многими компиляторами, такими как ниже.
gcc -Wall --std=c99 -DcROUNDS=2 -DdROUNDS=4 siphash.c halfsiphash.c test.c -o test makefile также принимает значения C и D в виде параметров.
make cROUNDS=2 dROUNDS=4Очевидно, что если количество раундов изменено, то тестовые векторы не будут проверять.
Этот код является Copyright (C) 2014-2023 Жан-Филипп Аумассон, Даниэль Дж. Бернштейн. Он многолицензирован под