Собрали в одной статье всё самое важное о SHA-256: что это такое, как устроено и где применяется. Разбираем этапы работы алгоритма на конкретном примере, а также рассказываем об использовании SHA в майнинге криптовалюты.
Что такое хеширование
Это алгоритм преобразования исходных данных в последовательность символов заранее известной длины.
Метод позволяет сократить входящую информацию любого объёма до фиксированного количества байт. При этом преобразование обеспечивает безопасность исходного сообщения, так как полученную после трансформации последовательность практически невозможно расшифровать без ключа.
В криптошифровании используются разные алгоритмы сжатия. В число самых популярных и надёжных входит семейство SHA-2.
SHA-2 и SHA-256
Аббревиатура SHA означает Secure Hash Algorithms, что можно перевести как «алгоритм безопасного хеширования».
SHA-2 — это семейство хеш-функций второго поколения, на что указывает цифра «2» в названии. Алгоритм разработан Агентством нацбезопасности США в 2001 году как усовершенствованная альтернатива предыдущей версии SHA-1. SHA-2 отличается более сложной структурой и высокой устойчивостью к криптографическим атакам.
Семейство второго поколения включает несколько функций: SHA-224, 384, 512 и 256.
SHA-256 преобразует сообщение в ключ-идентификатор размером 256 бит, что указано в названии. Технология основана на методе Меркла-Дамгарда с протоколом сжатия Дэвиса-Мейера. Работа алгоритма состоит из следующих этапов:
- разделение входных данных на 512-битные блоки;
- сжатие и перемешивание блоков 64 раза;
- получение массива заданного размера в 256 бит, или 32 байта.
Результат обработки представляет собой буквенно-числовой код — строчку из 64 символов, которая может содержать цифры и буквы латинского алфавита.
SHA-256 — это однонаправленный необратимый алгоритм. По результату преобразования нельзя определить закономерность шифрования и восстановить исходный файл. Если в документе изменить хотя бы одну букву, финальный идентификатор будет абсолютно другой. Это позволяет выявлять несанкционированные внешние воздействия на файлы во время их хранения или передачи.
Например, идентификатор для текста «GitVerse.ru» выглядит так:
75892c9fd7f1310fa2a4712cdb2e69d7f3e4a57492af2fc9925f4ae7abdbef86
При изменении хотя бы одного символа в любой части исходного массива последовательность на выходе изменится. Заменим в примере заглавную букву «V» на строчную. Результат сжатия текста «Gitverse.ru» выглядит так:
f6f0495257b612787564c5ffcace5d32150b052966b81d8d261ce39225dc8622
Преимущества SHA-256 — относительная простота и высокая устойчивость к коллизиям, то есть созданию одинаковых идентификаторов для разных входных сообщений. Благодаря этим особенностям метод преобразования данных в 256-битный ключ получил большое распространение в сферах, связанных с обеспечением информационной безопасности.
Пример работы SHA-256
Обработаем алгоритмом название домена нашего сайта — текст «GitVerse.ru».
На первом этапе исходные данные нужно перевести в двоичную систему. Текст «GitVerse.ru» в бинарном формате выглядит следующим образом:
01000111 01101001 01110100 01010110 01100101 01110010 01110011 01100101 00101110 01110010 01110101
Затем хеш-функция проводит выравнивание:
- добавляет единицу после полученного бинарного кода;
- переводит значение длины исходного кода в 64-битную систему и подставляет в конец последовательности;
- промежуток заполняется нулевыми битами до длины, кратной 512 битам.
В нашем примере длина исходного текста в бинарной форме — 88, этому значению соответствует 1011000:
01000111 01101001 01110100 01010110 01100101 01110010 01110011 01100101 00101110 01110010 01110101 1 00000000 00000000 … 00000000 1011000
Второй этап преобразования — инициализация восьми значений ключа, они фиксированы:
- h0 = 0x6a09e667
- h1 = 0xbb67ae85
- h2 = 0x3c6ef372
- h3 = 0xa54ff53a
- h4 = 0x510e527f
- h5 = 0x9b05688c
- h6 = 0x1f83d9ab
- h7 = 0x5be0cd19
На третьем этапе нужно задать округлённые константы — 64 значения, рассчитанные как начальные 32 бита дробных частей кубических корней простых чисел (2—311):
0x428a2f98 0x71374491 0xb5c0fbcf 0xe9b5dba5 0x3956c25b 0x59f111f1 0x923f82a4 0xab1c5ed5
0xd807aa98 0x12835b01 0x243185be 0x550c7dc3 0x72be5d74 0x80deb1fe 0x9bdc06a7 0xc19bf174
0xe49b69c1 0xefbe4786 0x0fc19dc6 0x240ca1cc 0x2de92c6f 0x4a7484aa 0x5cb0a9dc 0x76f988da
0x983e5152 0xa831c66d 0xb00327c8 0xbf597fc7 0xc6e00bf3 0xd5a79147 0x06ca6351 0x14292967
0x27b70a85 0x2e1b2138 0x4d2c6dfc 0x53380d13 0x650a7354 0x766a0abb 0x81c2c92e 0x92722c85
0xa2bfe8a1 0xa81a664b 0xc24b8b70 0xc76c51a3 0xd192e819 0xd6990624 0xf40e3585 0x106aa070
0x19a4c116 0x1e376c08 0x2748774c 0x34b0bcb5 0x391c0cb3 0x4ed8aa4a 0x5b9cca4f 0x682e6ff3
0x748f82ee 0x78a5636f 0x84c87814 0x8cc70208 0x90befffa 0xa4506ceb 0xbef9a3f7 0xc67178f2
При шифровании больших сообщений массив нужно разделить на блоки по 512 бит. В нашем случае это неактуально, так как исходная фраза короткая — блок будет только один.
Блоки разбиваются на 32 бита, для каждого инициируются переменные a, b, c, d, e, f, g, h со значениями h0 — h7. После расчётов и преобразований рабочие переменные добавляются к значениям, вычисленным ранее:
- h0 = h0 + a
- h1 = h1 + b
- h2 = h2 + c
- h3 = h3 + d
- h4 = h4 + e
- h5 = h5 + f
- h6 = h6 + g
- h7 = h7 + h
Итоговые значения h0 – h7 объединяются в финальный идентификатор — 256-битный код. Результат для текста «GitVerse.ru»:
75892c9fd7f1310fa2a4712cdb2e69d7f3e4a57492af2fc9925f4ae7abdbef86
По этому коду можно проверить целостность сообщения или выполнить другие задачи, для которых предназначен алгоритм.
Для чего предназначен алгоритм SHA-256
Метод используется в онлайн-коммуникациях, протоколах TCP/IP/SSL, криптографии. Несколько примеров применения:
- контроль целостности исходных данных при хранении и передаче документов;
- обеспечение целостности информации в блокчейн-системах;
- работа с электронно-цифровыми подписями;
- генерация и хранение паролей в системах аутентификации;
- создание уникальных последовательностей в генераторах случайных чисел.
В 2024 году есть более новые системы кодирования, но SHA-256 остаётся популярным за счёт оптимального баланса между тремя параметрами:
- универсальность;
- небольшие затраты на генерацию;
- устойчивость к атакам.
256-битную версию Secure Hash Algorithms можно использовать в связке с другими технологиями, например, AES-128, чтобы обеспечить комплексную защиту данных при передаче по различным каналам связи. Совместно с другими алгоритмическими протоколами SHA-256 применяется в IoT при передаче пакетов по беспроводным сетям, в инструментах контроля целостности прошивок и программного кода, при отправке команд по проводным каналам и в других процессах.
С развитием области криптовалют SHA-256 приобрёл ещё большую популярность благодаря возможности использования в майнинге.
Майнинг на алгоритме SHA-2
На SHA-256 построен процесс добычи ряда криптовалют:
- Bitcoin (BTC);
- Bitcoin Cash (BCH);
- Bitcoin SV (BSV);
- Litecoin Cash (LCC) — форк монеты Litecoin;
- Elastos (ELA).
При майнинге сгенерированный 256-битный идентификатор используется как ключ для уже существующих блоков блокчейна и для создания новых блоков. Алгоритм методом перебора случайных чисел расшифровывает блок данных, в результате находит верное значение и генерирует новый блок — валюту. Чем выше производительность системы, на которой запущен процесс, тем выше шансы на получение верного блока и вознаграждения. Следовательно, скорость майнинга зависит от вычислительных мощностей.
Кстати, на рынке биткоина SHA-256 используется не только для майнинга, но и в процессе генерации Bitcoin-адресов — идентификаторов для отправки и получения криптовалюты. Эта возможность интересна тем, что использование нового BTC-адреса для каждой транзакции затрудняет отслеживание финансовых операций и помогает сохранить конфиденциальность.
Что понадобится для майнинга?
Добычу криптовалюты на SHA-2 можно организовать несколькими способами:
- майнинг на CPU – с использованием центрального процессора;
- майнинг на GPU – с использованием графического процессора (видеокарты);
- майнинг на ASIC – с использованием специальных процессинговых устройств.
Первый способ считается устаревшим. Для майнинга BTC целесообразнее использовать третий вариант — специальные интегральные схемы ASIC (application-specific integrated circuit). Применение ASIC-устройств снижает расходы на майнинг, делает процесс эффективнее и быстрее.
Однако данный метод требует больших инвестиций. ASIC-оборудование стоит дорого — от 1 500 долларов США в зависимости от мощности, а также потребляет много энергии — до 3 000 Вт. Поэтому для размещения устройств многие майнеры выбирают страны с низкими тарифами на электричество. Кроме покупки оборудования и платежей за электроэнергию, в бюджет нужно закладывать расходы на систему охлаждения.
Майнинг на ASIC — это ресурсоёмкий, затратный, но быстро окупаемый способ, особенно при работе в промышленных масштабах. Сложность процессов расшифровки данных и генерации блокчейн-блоков постоянно растёт, поэтому заниматься добычей криптовалют в частном порядке невыгодно. Вместо соло-майнинга лучше присоединиться к крупным майнинг-пулам: это повысит шансы на блок, ускорит окупаемость вложений и увеличит возможную прибыль.