Возьмите последовательность байтовых буферов, хэшируйте каждый из них, интерпретируйте хэш-дайджесты как квадратные матрицы с 8-битными элементами int без знака и (матрица) умножьте их по порядку. Определите окончательную матрицу как «хэш» списка элементов.
Это определение имеет некоторые полезные свойства. В частности, ассоциативное свойство матричного умножения позволяет вычислять хеш-список конкатенации двух списков путем независимого вычисления хэша каждого списка, а затем путем их умножения для получения окончательного хэш-списка. Это работает с любым произвольным разделением. Некоммутативность предполагает, что разные порядки элементов создают для списка разные хэши, как и следовало ожидать для списка.
(Я исследую это определение более подробно, включая примеры рабочего кода в блокноте python jupyter, который я опубликовал под названием Мерклист. Вы также можете играть с ним самостоятельно на Google Колаб, и добавьте аннотации hypothes.is к сообщению для общего отзыва. Я могу поднять детали оттуда к этому вопросу, если это необходимо.)
Вопрос
- Устойчиво ли это определение к атакам прообразов? Другими словами, можно ли выбрать последовательность элементов, которая приведет к произвольному хэшу целевого списка?
Обратите внимание, что элементы должны существовать, поэтому дайджесты элементов, которые входят в хэш-список, имеют устойчивость к прообразу на основе базовой хэш-функции (которую мы можем предположить в рамках этого вопроса). Таким образом, на самом деле возникает вопрос: можно ли использовать порядок или наличие этих хеш-дайджестов для произвольного изменения содержимого окончательной матрицы? Например, можете ли вы сгенерировать последовательность элементов, которая создает хеш-список, являющийся нулевой матрицей? (Попадание в нулевую матрицу означает, что игра окончена.)
Я немного поискал и не нашел ответов ни на один из этих вопросов, хотя подозреваю, что это могло быть связано как с моим незнанием правильной терминологии, так и с отсутствием ответов.