Рейтинг:0

Функции сжатия SHA-256 без заполнения

флаг fr

Глядя на пример ввода null (512 бит), он принимает в качестве ввода:

ввод (шестнадцатеричный): 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Поскольку это ровно 512 бит, нет разделения и заполнения. Но из онлайн-калькуляторов или кода golang я бы получил хэш sha-256 нулевого ввода:

Вывод онлайн-калькулятора (Hex): f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b

Однако в нескольких библиотеках, например.кобигурк или же СКАЛА МАМБА д., ожидаемое значение должно быть:

библиотека (шестнадцатеричная): da5698be17b9b46962335799779fbeca8ce5d491c0d26243bafef9ea1837a9d8

Я выбрал нулевой ввод именно как 512 бит без заполнения. В чем может быть проблема?

kelalaka avatar
флаг in
Заполнение всегда применяется независимо от размера ввода.
Willi avatar
флаг fr
Не могли бы вы предоставить некоторые ссылки? Как будет применяться заполнение, если вход составляет всего 512 бит?
Рейтинг:1
флаг in

Короткий ответ;

Вы смешиваете функцию сжатия и хеш-функцию. Обе страницы/библиотеки верны в своем контексте!


Расширенный ответ

SHA-256, как и другие алгоритмы хеширования, всегда дополняется и определяется в НИСТ.ФИПС.180-4

Предположим, длина сообщения $ млн $, в битах, $\ell$ это биты. Добавить бит 1 до конца сообщения, а затем к нулевые биты, где к является наименьшим неотрицательным решением уравнения $$\ell +1 + k \экв 448 \bmod 512$$ Затем добавьте 64-битный блок, равный номеру $\ell$ выражается с использованием двоичного представления

Таким образом, 512 битов нулей в SHA-256 будут иметь 447 нулей ($к$ часть);

$$\text{Padded_Message} =\underbrace{\texttt{000...00}}_{512-zeros}||\texttt{1}||\underbrace{\texttt{000...00}}_ {447-нули}||\underbrace{\texttt{кодировка длины}}_{64-бит}$$

Если вы действительно хотите протестировать некоторые входные данные, убедитесь, что они верны на тестовых векторах NIST, определенных в Программа проверки криптографических алгоритмов — хеш-функции

Заполнение, как обычно, не связано с пользователем. Библиотеки обрабатывают заполнение для пользователей.

Поскольку это ровно 512 бит, нет разделения и заполнения. Но из онлайн-калькуляторов или кода golang я бы получил хэш sha-256 нулевого ввода:

Как упоминалось выше, заполнение всегда определено. Это часть алгоритма хеширования SHA-256.

Ваш ввод не является нулевым вводом, это 512-битный нулевой ввод. NIST предоставляет тестовый вектор нулевой длины и его результат в виде

Лен = 0
Сообщение = 00
MD = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Проверка вашего ввода на sha256algorithm.com производит

f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b

Я также протестировал эту страницу на некоторых тестовых векторах NIST.

Ссылка, которую вы предоставляете как СКАЛА МАМБА упоминает как;

Вывод: объединение значений после сжатия входного блока (в том же формате, в котором будет возвращен дайджест)
ВАЖНО: это НЕ тестовые векторы для полной хэш-функции SHA-256, так как правила заполнения игнорируются.

Это результат первой функции сжатия. В этом можно убедиться на sha256algorithm.com если вы остановитесь на 164 шаге. Наведите указатель мыши на начальные значения, и вы получите шестнадцатеричное значение;

da5698be17b...

То же самое и по другой ссылке; дается как векторов тестов на сжатие sha256.

Помните, что вывод функции сжатия является начальным значением следующей функции сжатия, если это необходимо. Если не нужен, то это выход SHA-256. Даны первые начальные значения;

Эти слова представляют собой первые тридцать два бита дробных частей кубических корней первых шестидесяти четырех простых чисел.

как ничего-в-мой-рукав-номер хотя это психология.

Willi avatar
флаг fr
Благодарность! это действительно полезно.
Willi avatar
флаг fr
дополнительный вопрос: на каком этапе я могу узнать начальное значение хеш-функции H (0) для 1-го блока на предоставленном веб-сайте [sha256algorithm.com] (https://sha256algorithm.com/)? Кажется, что начальное значение хеш-функции для 1-го блока не указано.
kelalaka avatar
флаг in
Посмотрите на шаг 50...

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

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