Рейтинг:2

Как получить хэш-функцию, которая отображает любую двоичную строку размера n в двоичную строку размера n?

флаг mq

Я внедряю безсертификационную криптографию из этот исследовательский документ на языке питона. По сути, я хочу иметь следующее отображение хеш-функции. Эта хэш-функция упоминается в алгоритме настройки в разделе 2.4 статьи. Здесь n — битовая длина открытого текста. $$\begin{выравнивание} H_4: \{0, 1\}^n\to\{0, 1\}^n\ \end{выравнивание}$$ Есть ли встроенная хэш-функция в библиотеке python hashlib? Или как я могу построить эту хеш-функцию в python?

Maarten Bodewes avatar
флаг in
Этот вопрос состоит из двух отдельных частей: какие (типа) хэш-алгоритмы я могу использовать и какие из них доступны в библиотеке python hashlib. Кажется, он сосредоточен на более позднем, и, строго говоря, это не по теме на этом сайте.
Maarten Bodewes avatar
флаг in
Это указано [здесь] (https://docs.python.org/3.9/library/hashlib.html#shake-variable-length-digests) — там начиная с 3.6, которая является самой старой поддерживаемой версией lib. API настолько прост, что в нем нет ничего особенного. Возможно, потребуется * немного * больше работы, если ваше * n * не кратно 8, но это все. Попробуйте и спросите [так], когда застряли.
Maarten Bodewes avatar
флаг in
Я не ответил, потому что это, вероятно, несколько лучше подходит для SO, но, честно говоря, его нельзя обмануть, чтобы преобразовать эту формулу в изображение. ashizz, пожалуйста, реагируйте на ответы, которые вы получаете здесь и далее [so].
Рейтинг:1
флаг in

Вероятно, лучшим алгоритмом для использования является SHAKE, указанный для Keccak, который является победителем конкурса SHA-3. Вы можете использовать SHAKE128 или SHAKE256 в зависимости от баланса безопасности и производительности, которого вы хотите достичь.

Для Python указан алгоритм здесь и должен быть доступен начиная с 3.6, т.е. во всех поддерживаемых версиях. Вы можете просто создать алгоритм хеширования (точнее, XOF), вызвать Обновить столько раз, сколько вы хотите на двоичном вводе, а затем получите результат, используя дайджест (дайджестРазмер) звоните, где дайджестРазмер находится в байтах.


Если вам требуется $n$ это не кратно 8 (т. е. ввод/вывод не выровнен по байтам), вам может потребоваться выполнить некоторые трюки, например. добавление нулей к входу и последующее удаление крайних левых битов из вывода. Конечно, это предполагает, что $n$ не меняется, или вы можете получить коллизии входных сообщений. Однако большинство практических протоколов были разработаны с параметрами ввода/вывода, выровненными по байтам.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.