Гомоморфная и некоммутативная хеш-функция?
Существует ли (или исследовалась/опубликована) некоммутативная гомоморфная хеш-функция?LtHash
разработанная Facebook и реализованная на Github, это именно та функция, которую я ищу, но LtHash коммутирует, и я хотел бы знать, существует ли некоммутативный алгоритм хеширования.
Я поискал в Интернете и до сих пор не нашел никаких хеш-функций (или даже лучших реализаций), которые были бы гомоморфными и некоммутативными.
1 ответ
LtHash коммутирует только в том случае, если вы не учитываете блочные индексы, но это также делает его небезопасным. Я думаю, вы их пропустили, потому что хотите иметь возможность объединять хеши, как в комментарии к примеру вашего графика.
Чтобы сделать это с помощью LtHash, вы можете использовать первый блок и пары соседних блоков вместо пар блоков с индексами.
Например, LtHash[a,b,c,d,e]
обычно было быsum([ h([0,a]), h([1,b]), h([2,c]), h([3,d]), h([4,e]) ])
Вместо этого вы можете использоватьsum([ h(a), h([a,b]), h([b,c]), h([c,d]), h([d,e]) ])
.
Теперь вы можете объединять хэши, если знаете начальный и конечный блоки:
Hash([a,b,c,d,e,f])
"="Hash([a,b,c]) + Hash([d,e,f]) + h([c,d]) - h(d)