Значение шестнадцатеричных чисел, указанных в RFC 3174 (SHA-1) - PullRequest
3 голосов
/ 19 апреля 2009

Я пытаюсь узнать о SHA-1, я смотрел на реализацию C, которая была включена в спецификацию (RFC 31741), и эта часть меня смущает:

context->Intermediate_Hash[0]   = 0x67452301;
context->Intermediate_Hash[1]   = 0xEFCDAB89;
context->Intermediate_Hash[2]   = 0x98BADCFE;
context->Intermediate_Hash[3]   = 0x10325476;
context->Intermediate_Hash[4]   = 0xC3D2E1F0;

Какое значение имеют эти жестко закодированные шестнадцатеричные значения, это просто специальный соус, который заставляет алгоритм работать, или они представляют некоторые математические константы?

Полный код можно посмотреть здесь: http://www.faqs.org/rfcs/rfc3174.html

Ответы [ 3 ]

1 голос
/ 19 апреля 2009

Это не отвечает на ваш вопрос, но обратите внимание, что реальная ссылка на SHA-1 (как объяснено в RFC) составляет FIPS 180 . Там больше никаких объяснений, но, по крайней мере, это первоисточник: - (

Кроме того, помните, что SHA-1 сегодня находится под серьезной угрозой .

1 голос
/ 09 февраля 2013

Они "ничего не значат мои рукава" .

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

Типичные варианты включают в себя первые цифры числа pi, или в случае квадратных корней SHA-1 маленьких простых чисел:

Используемые значения констант выбираются как ничто по моим номерам рукавов: четыре круглых константы k в 2 ^ 30 раз больше квадратных корней из 2, 3, 5 и 10. Первые четыре начальных значения для h0 - h3 одинаковы как алгоритм MD5, так и пятый (для h4) аналогичен.

Из Википедия: SHA-1

1 голос
/ 19 апреля 2009

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

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

...