Алгоритмы хеширования — это важнейшее орудие в наборе инструментов разработчиков криптографии. Они используются во всём интернете, в основном применяются для защиты паролей, но также интегрированы в большинство криптовалют, таких как Bitcoin и Litecoin.
Основная особенность алгоритма хеширования заключается в том, что он является односторонней функцией. Другими словами, вы можете получить выход из входа, но не наоборот.
Таким же образом построена эллиптическая криптография, в которой вы не можете получить секретный ключ из открытого ключа. Ещё одно свойство алгоритма — один и тот же вход соответствует одному и тому же выходу.
Большинство алгоритмов хеширования, включая SHA и RIPEMD, относятся к семейству MD4. Алгоритм MD4 был разработан Рональдом Ривестом специально для обеспечения очень простой реализации программного обеспечения.
Алгоритм MD4 и появившийся после SHA используют 32-битные переменные с битовыми булевыми функциями, такими как логические операторы AND, OR и XOR, обеспечивающими преобразование данных со входа на выход.
Итак, как же работает алгоритм хеширования?Давайте разберёмся на примере SHA1:
Шаг 1: Создаются пять переменных.
H0 — 01100111010001010010001100000001
H1 — 11101111110011011010101110001001
H2 — 10011000101110101101110011111110
H3 — 00010000001100100101010001110110
H4 — 11000011110100101110000111110000
Шаг 2: Затем выбирается слово для хеширования. Допустим, слово “CRYPTO”.
Шаг 3: Слово конвертируется в ASCII — “American Standard Code for Information Interchange”. Каждой букве присваивается номер.
CRYPTO — 67-82-89-80-84-79
Шаг 4: Код ASCII преобразовывается в двоичный.
CRYPTO — 01000011-01010010-01011001-01010000-01010100-01001111
Шаг 5: Символы соединяются и добавляется 1 на конце.
CRYPTO — 0100001101010010010110010101000001010100010011111
Шаг 6: Добавляются нули, чтобы сообщение равнялось 448 mod 512 — (сравнение по модулю). Таким образом, для 48-битного сообщения с добавленной единицей нужно добавить 399 нулей в конец, а если бы в сообщении было 64 символа (или 512 бит), вам понадобилось бы 447 нулей.
010000110101001001011001010100000101010001001111100000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000
Шаг 7: Добавляется исходная длина сообщения в 64-битное поле, оставшееся после сравнения по модулю 448. Сообщение длиной 48 символов, выраженное в двоичном формате, выглядит как “110000”. Таким образом, это число добавляется в конец сообщения.
00000000000000000000000000000000000000000000000000 00000000110000
Шаг 8: Сообщение разбивается на шестнадцать секций по 32 символа/бит.
01000011010100100101100101010000
01010100010011111000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000110000
Шаг 9: Преобразование 16 × 32 символьных битовых слов в 80 слов с использованием пошаговой loop-функции. Сначала выбираются четыре слова для первого прогона через петлю — это строки 1,3,9 и 14 из шага 8.
Затем через цикл проходят строки 2,4,10,15 из пункта 8.
Следующий процесс — это XoR (сложение по модулю) слов вместе. Xoring — это простая вычислительная функция, которая даёт выход q только в том случае, если два входа имеют в этой позиции единицу (1) — если у них нет нулевого выхода.
Функция ((14 XOR 9) XOR 3) XOR 1), в которой:
00000000000000000000000000000000
XOR
01000011010100100101100101010000
Является:
01000011010100100101100101010000
10-кратное обращение чисел — т. е. перемещение самой левой цифры вправо.
Это:
01000011010100100101100101010000
Приобретает такой вид:
10000110101001001011001010100000
Затем этот процесс повторяется для 80 слов или 32-битных строк.
Шаг 10: Следующий шаг — запуск набора функций для слов в определённом порядке. Происходит обработка переменных, которые были установлены в пункте 1. Функции объединяют AND, OR и NOT-операторы в сочетании со сдвигами влево.
В конце получаются следующие переменные:
H0 — 01000100101010010111000100110011
H1- 01010000111001010011100001011000
H2-11110000010110000100011000111101
H3-01001011111101111111000111100101
H4-01000010110110011100101001001011
11- Переменные H преобразуются в hex:
H0- 44a97133
H1- 50e53858
H2- f058463d
H3 — 4bf7f1e5
H4 — 42d9ca4b
Шаг 12: Переменные соединяются вместе, образуя хеш-дайджест.
44a9713350e53858f058463d4bf7f1e542d9ca4b
Так выглядит базовый процесс хеширования — просто преобразуйте число в двоичный код, а затем запустите несколько простых функций, которые работают через базовые transistor и bus-процессы, такие как AND, XOR, NOT, Rotate &OR.
Такой механизм позволяют сконструировать ASIC или специализированные чипы приложений так, чтобы оптимизировать хеширование. В случае SHA-256 чипы были специально разработаны для оптимизации итераций на всех этапах, чтобы увеличить скорость создания хеша с входа.
Для майнинга это означает, что вы можете вычислить больше хеша в секунду с помощью итераций через nonce и extra nonce-параметры, а значит увеличится вероятность получения награды за блок.
Над статьями работает команда авторов, переводчиков и редактор. На сайте команда Privatefinance.biz публикует информационные статьи, обзоры, рейтинги, гайды о торговле на финансовых рынках и инвестировании, рекомендации по выбору брокера и инструментов инвестирования, актуальные новости из мира финансов.
Почта для связи с нами: [email protected]