Рейтинг:0

Как реализовать базовую «функцию губки»?

флаг tn

В главе 6 Серьезная криптография, они пишут о функция губки:

  1. Он выполняет операцию XOR первого блока сообщений, M1, с H0, предопределенным начальным значением внутреннего состояния (например, строкой, состоящей только из нулей). Все блоки сообщений имеют одинаковый размер и меньше, чем внутреннее состояние.
  2. Перестановка P преобразует внутреннее состояние в другое значение того же размера.
  3. Он выполняет XOR для блока M2 и снова применяет P, а затем повторяет это для блоков сообщений M3, M4 и так далее. Это называется поглощающая фаза.
  4. После внедрения всех блоков сообщений он снова применяет P и извлекает блок битов из состояния для формирования хэша. (Если вам нужен более длинный хеш, снова примените P и извлеките блок.) Это называется фаза сжатия.

Безопасность функции губки зависит от длины ее внутреннего состояния и длины блоков. Если блоки сообщений имеют длину r-бит, а внутреннее состояние имеет длину w-бит, то существует c = w ÷ r битов внутреннего состояния, которые не могут быть изменены блоками сообщений. Значение c называется емкостью губки, а уровень безопасности, обеспечиваемый функцией губки, равен c/2. Например, чтобы достичь 256-битной защиты с 64-битными блоками сообщений, внутреннее состояние должно быть w = 2 х 256 + 64 = 576 бит. Конечно, уровень безопасности также зависит от длины n хеш-значения. Таким образом, сложность атаки столкновением является наименьшим значением между 2^{n/2} и 2^{c/2}, тогда как сложность второй атаки с прообразом является наименьшим значением между 2^n и 2^{c/ 2}.

Чтобы быть безопасным, перестановка P должна вести себя как случайная перестановка, без статистической предвзятости и без математической структуры это позволило бы злоумышленнику предсказать результаты. Как при сжатии хэши, основанные на функциях, губчатые функции также заполняют сообщения, но заполнение проще, потому что не нужно включать сообщения длина. За последним битом сообщения просто следует бит 1 и столько же нули по мере необходимости.

Страница Википедии слишком непрозрачна для превращения в код.

Хотите знать, можно ли показать упрощенную демонстрацию функции губки в реальном мире, чтобы довести до конца эти 4 пункта о том, как это работает.

Некоторый вопросы связанные с его реализацией:

  • Какой размер блока? Предполагая 512
  • Какие входные данные (utf-8 и т.д.)? Это имеет значение?
  • С чем выполнить XOR для первого блока сообщений? Какой номер? И будущие блоки тоже?

Я действительно не знаю, с чего начать, я также не нашел фрагментов кода, связанных с «функциями губки».

Бумага Keccak Sponge Functions слишком сложна в математике, чтобы можно было извлечь из нее четкую программную реализацию (по крайней мере, для меня).

Просто ищу голые основы. Возможно это настолько просто, насколько это возможно?

Maarten Bodewes avatar
флаг in
Я сделал вопрос менее специфичным для JavaScript, так как это было бы не по теме здесь; вопросы, которые у вас есть о реализации, должны быть по теме. Обратите внимание, что предоставление примера кода по-прежнему не рассматривается здесь.
Lance avatar
флаг tn
Хорошо, я удалил фрагмент, спасибо. Я нашел [функцию губки keccak в читаемом виде](https://github.com/lancejpollard/hash/blob/make/lib/keccak-sponge.c), но она довольно плотная и запутанная, может функция губки не просто быть очень простым, чтобы продемонстрировать, как это работает?
Maarten Bodewes avatar
флаг in
О, конечно. Возможно, есть простые реализации (например, упрощенные спецификации AES, используемые в учебных целях), но я не знаю ни одной. Не уверен, что другие функции губки будут более применимы. Spritz, безусловно, преднамеренно прост, так что, возможно, взгляните на него *в учебных целях*. Не уверен, что функциональность губки отделена от потокового шифра в их реализации. SPONGENT также выглядит довольно просто. Я также видел документ, в котором в качестве базовой функции использовался хэш. Это, конечно, немного странно, но может быть полезно для учебных целей.
kelalaka avatar
флаг in
Вы забыли одну важную часть этого 1. Каждая команда должна представить код для конкурса SHA-3, 2. Стандарт SHA-3 предоставлен [NIST] (https://nvlpubs.nist.gov/nistpubs/FIPS/NIST). .FIPS.202.pdf), и у них тоже есть тестовые векторы. Я мог бы назвать это обманом этого [Пошаговая работа с примером ввода для хеш-функций NIST, таких как SHA-1, SHA-2 и SHA-3] (https://crypto.stackexchange.com/q/95783). /18298)
Maarten Bodewes avatar
флаг in
Я как бы предполагал, что эталонная реализация Keccak не будет достаточно "простой" и известной, но уверен, что вы можете использовать функции реализации ref или порт для конкретного языка - если это ответ, то конечно....
флаг kr
Отвечает ли это на ваш вопрос? [Что такое конструкция губки простыми словами?] (https://crypto.stackexchange.com/questions/83258/what-is-the-sponge-construction-in-simple-terms)
Lance avatar
флаг tn
Нет, я ищу техническую реализацию, в идеале в виде кода или псевдокода.

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

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