Рейтинг:-1

Как дополнить алгоритм SHA256 (пример с использованием биткойн-заголовка)?

флаг br

Для любого биткойн-блока мы объединяем различные поля заголовка, чтобы создать строку, которая является входом для двухпроходного алгоритма SHA. Результирующий хэш должен совпадать с хэшем в заголовке блока, чтобы блок был действительным.

Чтобы проверить эту логику, а также алгоритм SHA, я использовал заголовок блока с номером 695877 (https://blockchain.info/rawblock/695877?format=json), чтобы создать строку ввода 04008020546C359986812644420E453113E209AFEAEEB316F3A0700000000000000000000B8FA13B3FCA087C14567111111111111111111111111111111111111111111111111111111111111111111111111117BFFC1543333.F83A47EAE821A326F17E0FFFC15433333AEEAE821A326F17E0FFFC1543333.B83A421A326F17.

Теперь, когда я применяю двухпроходный алгоритм SHA, результирующий хеш совпадает с хэшем в блоке (на данный момент игнорируя часть Endian).

Расчетный хэш: 629ef98d63e12f6b01476419a5a71efa8814dea40aec090000000000000000000

Хэш блока: 00000000000000000009ec0aa4de1488fa1ea7a5196447016b2fe1638df99e62

Но когда я добавляю заголовок вручную, прежде чем передать его двухпроходному алгоритму SHA, выполните следующие действия: 04008020546c359986812644420e453113e209afeaaeeb316f3a07000000000000000000b8fa13b3fca087c1456daac626ab9b8a47eae821a326f17e0ffffc15433df709b0f718610b1812175a5c9544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280 Это приводит к неправильному хэшу.

Я не вижу, что не так в прокладке. Может кто-нибудь указать это?

J.Doe avatar
флаг br
Я не понял вашего вопроса.Мы дополняем сообщение так, чтобы (длина сообщения в битах)% 512 = 0 при обработке фрагментов по 512 бит.
A. Hersean avatar
флаг cr
Вы подтвердили, что исходная входная строка дает правильный хэш. Затем вы добавили `800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280` во входную строку, изменив ее. Это изменит хэш строки. Это то, что хеширование должно делать. Итак, почему вы хотите дополнять, когда незаполненное сообщение производит предполагаемый вывод?
fgrieu avatar
флаг ng
Переформулируя приведенный выше комментарий по-другому: заполнение хэша является частью хеширования и не должно выполняться извне.
J.Doe avatar
флаг br
Я пытаюсь реализовать SHA самостоятельно с нуля (просто чтобы убедиться, что я правильно понимаю).Существует дополнительный запрос: если я использую вышеуказанный заголовок (без панели) и передаю его алгоритму для 2 проходов, он дает правильный вывод, если данные указаны как «HEX», но не для «TEXT». Какая предварительная обработка выполняется для преобразования данных «HEX» в «TEXT» перед запуском алгоритма SHA? Большая часть псевдокода SHA, который я вижу, предполагает, что данные такие, какие они есть, то есть в формате «ТЕКСТ». Было бы здорово, если бы вы могли объяснить, используя текущий заголовок выше? Это инструмент [https://emn178.github.io/online-tools/sha256.html]
fgrieu avatar
флаг ng
Я предлагаю вам закрыть этот вопрос, поскольку исходная проблема решена; и что перед тем, как задать новый вопрос о заполнении SHA-256, вы сначала прочитаете ответы на [другие вопросы о дополнении SHA-256] (https://crypto.stackexchange.com/questions/tagged/padding%2bsha-256?tab=Votes ), возможно, начиная с [этого] (https://crypto.stackexchange.com/a/9370/555) и [этого] (https://crypto.stackexchange.com/a/79735/555). Также прочтите хороший [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf), в котором есть все необходимое.
Рейтинг:-3
флаг vn

Убедитесь, что размер шифрования в блоке совпадает с размером, который вы сравниваете. Такие проблемы могут возникать, когда размеры блоков несовместимы.

fgrieu avatar
флаг ng
Шифрование не используется: хеширование — это не шифрование. Кроме того, проблема заключается в дополнительном уровне заполнения, а не в размере.

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

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