Есть ли в Python хеш-функции переменной длины? - PullRequest
0 голосов
/ 05 февраля 2019

Я ищу хеш-функцию, которая может генерировать дайджест указанного размера в битах для схемы криптографической подписи.Смежный вопрос (https://crypto.stackexchange.com/questions/3558/are-there-hash-algorithms-with-variable-length-output) в Cryptography SE указывает, что для этой конкретной цели существуют алгоритмы.
Существуют ли какие-либо библиотеки Python, которые я могу использовать для этого?

В настоящее время моя схема содержит только пробкивывод SHA-256 до нужного размера. Я также пробовал библиотеку Python SHA3 - pysha3 1.0.2, однако она имеет несколько предопределенных размеров дайджеста, которые можно использовать.

Мне нужна функция хеширования, котораяможет принимать желаемый размер дайджеста в качестве параметра и соответственно хэширует сообщение (если возможно)

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Любая расширяемая функция вывода (XOF) может использоваться для получения дайджеста заданного размера.Из Википедии:

Функции расширяемого вывода (XOF) - это криптографические хеши, которые могут выводить произвольно большое количество случайно выглядящих битов.

Одна из функций, предусмотренных вSHA-3 включает функции SHAKE128 и SHAKE256.Они вытекают из общих свойств губчатой ​​конструкции .Функция губки может генерировать произвольную длину вывода.Значения 128 и 256 в их именах указывают на максимальный уровень безопасности (в битах), как описано в разделах A.1 и A.2 FIPS 202 .

В python, сначала install библиотека PyCryptodome:

pip install pycryptodome


Хэш, скажем, 20 байтов может быть сгенерирован следующим образом:

from Crypto.Hash import SHAKE256
from binascii import hexlify
shake = SHAKE256.new()
shake.update(b'Some data')
print hexlify(shake.read(20))

Дополнительные ссылки на SHAKE256 и SHA3: Ссылка 1 Ссылка 2

0 голосов
/ 05 февраля 2019

В качестве краткого ответа: Вас может заинтересовать встроенная функция Blake2 в hashlib в python 3.6+.

Он выводит только до 64 байтов, но на "быстрее, чем MD5, SHA-1, SHA-2 и SHA-3, и при этом по крайней мере так же безопасен, как и последний стандарт SHA-3.".

Надеюсь, этого достаточно, и вам не нужны внешние библиотеки!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...