Меню

Как работает алгоритм хеширования?

Алгоритмы хеширования — это важнейшее орудие в наборе инструментов разработчиков криптографии. Они используются во всём интернете, в основном применяются для защиты паролей, но также интегрированы в большинство криптовалют, таких как 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-параметры, а значит увеличится вероятность получения награды за блок.

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

ТОП 3 криптобиржи