Рейтинг:2

Как создать семейство функций Fn WOTS+ с помощью SHA3?

флаг ca

От ВОТС+ бумага:

Кроме того, W-OTS+ использует семейство функций Fn : {f_k : {0, 1}^n - {0, 1}^n | k Kn} с пробелом ключей Kn. Читатель может думать об этом как о семействе криптографических хеш-функций, которые не сжимаются. Используя Fn, мы определяем следующую функцию цепочки.

Я не понимаю смысла этого абзаца. Моя интерпретация этого такова, что мне нужна семья из н n-битные псевдослучайные функции, где н является параметром безопасности. То есть, если параметр безопасности 128, то мне нужно 128 различных 128-битных псевдослучайных функций. Если это понимание правильное и если предположить, что n=128, могу ли я определить Ф(к) как раз Ша3 (который сопротивляется атакам увеличения длины) из к добавлено к сообщению, а затем нарезано на 128 бит? То есть что-то вроде:

// Генерирует k-ю псевдослучайную функцию с n=128
fn kth_random_function(k: uint8) -> (байты -> uint128):
  return λ(msg: bytes) => uint128(sha3(u8_to_byte(k) ++ msg)[0:16])
Maarten Bodewes avatar
флаг in
Двоичный не шестнадцатеричный; вам определенно не следует кодировать `k` до того, как вы его используете (и, как правило, не после, если разрешен двоичный код). Кроме того, если вы собираетесь использовать хэш с ключом, вы также можете использовать KMAC. Обратите внимание, что KMAC предлагает возможность установить размер вывода со стандартными вариантами вывода 128 и 256 бит.
флаг ca
@MaartenBodewes Это было просто для простоты, если предположить, что sha3 работает в шестнадцатеричном формате. Я отредактировал, чтобы улучшить псевдокод. Разве KMAC со 128-битным выходом не является именно тем, что я описал? То есть, взяв первые 128 бит SHA3(k || m)`?
Maarten Bodewes avatar
флаг in
Это почти буквально немного отличается. Но в целом я бы использовал алгоритмы, для которых они должны работать. Скажем, у вас есть эта функция аппаратно: в этом случае SHA-3 может не принять ключевой объект, а KMAC — примет.
флаг ca
Имеет смысл, спасибо.
Maarten Bodewes avatar
флаг in
KMAC: 1. newX = bytepad(encode_string(K), 168) || Х || право_кодировать (L). 2. вернуть cSHAKE128(newX, L, «KMAC», S). Так что да, не совсем SHA-3, но очень похоже, если вы посмотрите на настоящую конструкцию губки. S обычно пуст, но есть дополнительная кодировка выходного размера L и индикатор «KMAC». Кстати, я недостаточно хорошо знаю W-OTS, чтобы ответить, боюсь, что я упускаю из виду какое-то требование w.r.t. часть без компрессии.
Рейтинг:1
флаг in

На самом деле вам нужно семейство устойчивых к второму прообразу, необнаруживаемых, односторонних функций. В общем, любая безопасная криптографическая хэш-функция (SHA2, SHA3, ...) должна работать с небольшой настройкой, чтобы сделать ее ключевой. Вам не нужно, чтобы это был PRF, и функция имеет фиксированную длину. Следовательно, если вы также зафиксируете длину ключа, используя

SHA3(К || М)

в порядке (а затем берет необходимое количество выходных битов). Для SHA2 (или любой конструкции Меркла-Дамгарда) вы получаете более надежный аргумент безопасности, если вы сначала включаете ключ в вызов функции сжатия, а затем в сообщение. то есть, вы делаете

SHA2-256 (площадка (K, 512) || M),

где pad(K, 512) применяет инъективное дополнение, чтобы превратить K в 512-битную строку. Предполагая фиксированную длину для K, добавление достаточного количества нулей работает просто отлично. Здесь я учел, что длина блока SHA2-256 составляет 512 бит. Для разных длин блоков вы должны соответствующим образом отрегулировать длину. Из-за усиления Меркла-Дамгарда (которое требует применения заполнения длины) это не увеличивает количество вызовов функции сжатия. В то же время вы можете думать об этом как о первом вычислении псевдослучайного IV из K, который затем используется для хеширования M.

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

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