Но после прочтения я так и не понял, насколько устойчив XXH3 (один из семейства xxHash) к атакам прообразов.
Вовсе нет — легко создать изображение, которое хеширует произвольное значение.
Да, вывод XXH3 — 64/128 бит, что означает, что вероятность найти изображение равна $2^{64}/2^{128}$ соответствующий.
Вероятности сохраняются, если вы используете стратегию «выберите изображение, хешируйте его и посмотрите, что получится в результате». Есть гораздо более эффективные стратегии.
Может есть какая-то не брутфорс атака?
Уверенный.
xxhash состоит из шагов, которые:
Преобразовать текущее состояние обратимым образом; или же
Добавьте слово, которое зависит (опять же, обратимым образом) от следующего слова изображения (и никакая другая операция внутри xxhash не зависит от этого входного слова).
Следовательно, чтобы сгенерировать изображение, которое хешируется до определенного значения, все, что вам нужно сделать, это выбрать шаблон, состоящий из значений, кроме одного слова; затем вы оцениваете xxhash в прямом направлении, пока не дойдете до этого одного слова, получая значение внутреннего состояния A. Затем вы берете целевое значение хеш-функции и вычисляете xxhash в обратном направлении, пока не дойдете до этого одного слова, придумывая значение внутреннего состояния B. Затем все, что вам нужно сделать, это выбрать одно неизвестное слово, которое преобразует значение состояния A в значение состояния B — это легко; вставьте это слово в шаблон, и все готово.
И, чтобы ответить на ваш последний вопрос:
Для криптографических хэшей их сложно найти, но они существуют. Когда мы успешно запустили атаку прообраза, как мы можем быть уверены, что найденное нами значение является исходным значением?
Очевидно, что коллизии неизбежны для любой функции, преобразующей потенциально длинную строку в более короткую строку фиксированной длины. Теперь, если мы найдем изображение, которое хешируется до того же значения, как мы можем гарантировать, что это то же самое изображение, которое было изначально хешировано? Ответ: в общем случае не можем, если только мы много не знаем об исходном изображении (например, в приведенной выше атаке на xxhash мы знали все слова ввода, кроме одного). С другой стороны, для большинства атак против криптографических хэшей нам все равно — злоумышленник обычно выигрывает, если он может найти Любые прообраз.