Что такое прокладка sha-256?

Изучая исходный код одного из процессорных майнеров, я нашел этот фрагмент кода:

work->data[20] = 0x80000000;

Ну, я спросил кодированного об этом, и его ответ был:

"Эти значения являются частью стандартного заполнения SHA-2"

Поиск в Google «sha 2 padding» не помог. Можете ли вы сказать мне, для чего это?

Я думал, что функции md5/sha256 просто берут данные и возвращают хеш.

Я не понимаю концепцию "дополнения".


sha
person Konrad    schedule 12.06.2014    source источник


Ответы (4)


Вы можете найти документацию в RFC 4634 -- SHA и HMAC-SHA, раздел 4.1. Цитата из введения части 4:

В качестве сводки к концу сообщения добавляется «1», за которой следует число «0», за которым следует 64-битное или 128-битное целое число.

0x80000000 равно 10000000000000000000000000000000 в двоичном формате. Вот ваша "1", за которой следует число "0".

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

person Stefano Sanfilippo    schedule 12.06.2014

Большинство современных криптографических хеш-функций обрабатывают сообщения блоками фиксированной длины; все, кроме самых ранних хеш-функций, включают какую-то схему заполнения. Для криптографических хэш-функций критически важно использовать схемы завершения, которые предотвращают уязвимость хэша для атак с увеличением длины. Остальное можно найти здесь wiki

И объясняя своими словами: если вы хотите зашифровать текст, алгоритм разбивается на блоки одинакового размера, если у вас недостаточно данных в последнем блоке, алгоритм добавляет 0, пока он не будет иметь тот же размер, что и блок. другие.

person Alexandru Cimpanu    schedule 12.06.2014

Хэши SHA-2 строятся по схеме Меркла-Дамгарда. Это означает, что хэш-функция основана на функции одностороннего сжатия, которая принимает n + r битов на вход и выводит r бит. Таким образом, вход должен быть разделен на n-битные блоки, чтобы функция сжатия могла быть применена к каждому блоку с выходом последнего раунда.

Заполнение необходимо, чтобы ввод можно было разделить на n-битные блоки. В частности, заполнение, совместимое с Merkle-Damgård используется из соображений безопасности (подробности см. по ссылке).

person Oliver Hanappi    schedule 12.06.2014

В основном алгоритмам хеширования для работы требуется определенный размер блока (фиксированное количество байтов). Добавление «заполнения» в конец сообщения приводит к тому, что оно достигает следующего кратного байта блока. Но вам также нужно знать, насколько большим является фактическое сообщение. Добавив к сообщению 1-бит, за которым следует достаточное количество 0-бит, вы можете затем прочитать его с конца сообщения, пока не нажмете первый 1-бит, и это будет конец вашего сообщения, поэтому вы знаете размер Это.

person Majenko    schedule 12.06.2014