Рейтинг:1

Понимание промежуточных значений — SHA2 — 512

флаг fr

Я пытаюсь понять алгоритм SHA2-512, поэтому я после этого документа который имеет промежуточные значения для строки «abc». В т=0, значения для ф, час и г являются прямыми. Но я не получаю такое же значение для е, что говорит о том, что я делаю что-то не так, когда вычисляю $T_1 = h + \Sigma_1(e) + \text{Ch}(e,f,g) + K_i + W_i$. Я почти уверен, что реализовал $\text{Ч( )}$ и $\Sigma_1 ( )$ правильно. Я предполагаю, что моя проблема может быть связана с добавлением более $\pмод {2^{64}}$. Я понимаю каждый термин в сумме $T_1$ является 64-битным числом. Поэтому я предполагаю, что мы можем преобразовать эти числа в целые числа и сложить их по $\pмод {2^{64}}$. Теперь результирующее число может быть не 64-битным в двоичном формате. мы добавляем $0$перед двоичным представлением, чтобы сделать его 64-битным?

Я не уверен, что это полезно, но вот несколько значений, которые я получаю в двоичном формате для т=0 (сейчас я добавляю нули слева от старшего бита):

#Сигма_1(д)
01010001000011100101001001111111110101101111001101000001011010001

#Ч(д,е,г)
0001111110000101110010011000110001111011001001110011110100111011

#T_1
0110100101100101001100111001100011001110110101111110100010100000

#e <- T_1 + d
0000111010110101001010001101001100101101111101010001111110010001

тогда как согласно документу е в двоичном формате 1100001111010100111010111111110101001000011001010000111111111010.

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

poncho avatar
флаг my
Вы имеете в виду SHA3-512 или SHA2-512 (также известный как SHA512)? Документ, который вы процитировали, и детали вашего вопроса относятся к SHA2-512.
Josh avatar
флаг fr
Спасибо за указание на это. Я предположил, что SHA-512 означает SHA3-512, поэтому ошибся. Я отредактирую вопрос.
Рейтинг:2
флаг my

Предполагая, что вы действительно имеете в виду SHA2-512:

#Сигма_1(д) 01010001000011100101001001111111110101101111001101000001011010001

Значение «Sigma_1» неверно; Я только что создал хорошо зарекомендовавшую себя реализацию и получил для первого раунда:

$$sigma1 = 9427e33bb5c9dbca$$

Может быть, у вас было $РОТР$ операции как сдвиги, а не повороты...

Теперь, что касается ваших размышлений:

Я понимаю каждый термин в сумме $T1$ является 64-битным числом. Поэтому я предполагаю, что мы можем преобразовать эти числа в целые числа и сложить их по $\pмод {2^{64}}$. Теперь результирующее число может быть не 64-битным в двоичном формате.

На самом деле, наиболее естественным способом представления значений в SHA-512, как всегда, было бы использование 64 бит; эти биты интерпретируются как значение в диапазоне $[0, 2^{64}-1]$; часто msbit может быть равен нулю; мы по-прежнему рассматриваем его как 64-битное значение (поэтому никогда не нужно добавлять 0 в начале или в конце - значения всегда имеют правильную длину).

Да, мы не так считаем биты в RSA — SHA-512 — это не RSA.

Josh avatar
флаг fr
Если я не ошибаюсь, `d` в шестнадцатеричном формате – это `A54FF53A5F1D36F1`, а в двоичном виде это `10100101010011111111101010011101001011111000111010011011011110001`. Таким образом, 4 lsbit равны «0001». Другой момент заключается в том, что суммирование не является XOR. Судя по описанию, это более `mod 2^64`.
poncho avatar
флаг my
Я неправильно прочитал тестовый вектор; вы правы в начальном значении $d$; неправильное значение $T1$ (кстати, я прекрасно знаю, что сложение равно $\bmod 2^{64}$...)
Josh avatar
флаг fr
Спасибо за вычисление sigma_1. Теперь я получаю то же значение. Проблема заключалась в том, что когда я преобразовал шестнадцатеричный код в int в двоичный в Python, я получил ровно столько битов, сколько было необходимо для этого целочисленного значения, а не обязательно 64-битного. Я добавил 0 слева от двоичного представления, и теперь все работает нормально!

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

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