Одной из наиболее важных криптографических функций в программировании биткоина является хэш-функция SHA-256. Она отвечает за поддержание механизмов теста работы (Доказательство работы) в сети Bitcoin. Но она также используется в механизмах генерации адресов, таких как идентификаторы транзакции и блока. По сути, SHA-256 является одной из основ безопасности сети биткоина. Но как работает эта хеш-функция?

 

Происхождение SHA-256

История происхождения хеш-функции SHA-256 уходит в те далёкие годы, когда Интернет начал активно распространяться по всему миру. Цифровая связь в Интернете нуждалась в быстром и безопасном способе проверки различных данных, проходящих через сеть.

 

Первоначально эта задача была выполнена хеш-функцией MD5. Это была чрезвычайно простая и недорогая в вычислительном отношении функция. Тем не менее, MD5 была классифицирована как небезопасная функция в 1996 году. В этом же году криптоаналитик Ханс Доббертин решил проблему безопасности данной функции. Этот факт открыл двери в цифровой мир для любого хакера, у которого есть ресурсы и умение взломать данный алгоритм.

 

Столкнувшись с этой ситуацией, АНБ (Агентство национальной безопасности США) начало работу по развитию серии хэш-функций для замены MD5.

 

С тех пор функция SHA-256 заняла особое место в мире компьютеров по той причине, что SHA-256 с её 256-битными ключами стала балансом между безопасностью и скоростью вычислений. Это приложение быстро распространилось в серверном программном обеспечении и других приложениях, где необходима надежная и безопасная защита данных.

 

Раскрытие операции SHA-256

Теперь безопасность SHA-256 (и всех функций семейства SHA-2) основана на построении ряда хорошо известных криптографических функций. Это хеш-функции Merkle - Damgarding, созданные двумя разработчиками (Ralph Merkle и Ivan Damgarding) в 1979 году, и использующие в своей работе одностороннее сжатие типа Davies - Meyer. Это метод, с помощью оторого разработчики хеш-функции стремились гарантировать устойчивость к повторениям хэшей, в дополнение к обеспечению максимально возможной безопасности.

 

На основе этих алгоритмических и математических основ АНБ создало хеш-функцию SHA-256, в которую можно вводить большие объемы данных и получать сводную информацию фиксированной длины. Функция реагирует на малейшее изменение введенной информации, которое приводит к созданию совершенно другого хэша.

 

При помощи функции SHA-256 большие объемы информации сводятся к небольшому, уникальному и неповторимому сообщению. Фактически, если вы вводите одну и ту же информацию снова и снова, вы всегда получите один и тот же результат, потому что функция является детерминированной. Но если по какой-либо причине вы измените информацию каким-либо образом, это увидят все пользователи сети.

 

Решение задачи многократного вычисления хэшей SHA-256

Протокол работы сети Биткоина используют функцию SHA-256. Это означает, что майнеры Bitcoin должны решать сложные криптографические головоломки, в которых они должны интенсивно использовать эту функцию. Это легкая работа, даже если учесть, что SHA-256 - высоко оптимизированная функция.

 

Уловка Накамото для достижения этого «принудительного труда» состоит в том, чтобы заставить майнеров достичь цели. Майнеры должны стремиться к этой цели путем многократного вычисления хэшей SHA-256. Задание считается выполненным, когда майнер получает хеш SHA-256, десятичное значение которого меньше целевого значения, запрошенного сетью.

 

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

 

Результат этой огромной работы суммирован в Block ID или Block Hash, уникальном и неповторимом идентификаторе, который мы можем видеть в каждом блоке сети биткоинов. Этот хеш по сути является хешем SHA-256.

 

Генерация биткоин-адресов (хеш RIPEMD-160; идентификатор "0x00")

С другой стороны, у Накамото была функция SHA-256 для генерации биткоин-адресов. Адреса биткоинов являются результатом использования асимметричной криптографической системы, которая использует функцию цифровой подписи ECDSA. Цифровые подписи ECDSA очень обширны и сложны, поэтому Накамото разработал решение & oacute, чтобы сделать их проще.

 

Во-первых, открытый и закрытый ключи генерируются с использованием ECDSA. Затем открытый ключ проходит через процесс хеширования с использованием SHA-256. К полученному хешу применяется другая хеш-функция RIPEMD-160, которая генерирует более короткий адрес, чем SHA-256, но одинаково уникальный и безопасный.

 

Шестнадцатеричный идентификатор "0x00" немедленно добавляется в хеш RIPEMD-160. Этот идентификатор является цифровым способом идентифицировать адрес в сети биткоинов. Сразу после этого функция SHA-256 применяется дважды, и ее результат занимает 4 байта (8 букв) для соединения в конце хэша RIPEMD-160 с добавленным идентификатором 0x00. Наконец, используется функция с именем Base58Check, которая в итоге выдает окончательный биткоин-адрес.

 

Этот сложный процесс гарантирует следующее:

  1. Все адреса биткоинов (по крайней мере, унаследованные) начинаются с 1. Существуют другие адреса биткоинов, которые в настоящее время начинаются с 3 или bc, но процесс их генерации немного отличается.
  2. Все биткоин-адреса уникальны и неповторимы.
  3. Адреса Биткоин легко проверяемы.
  4. Идентификация транзакций.

Другое важное использование функции SHA-256 видно в идентификации транзакций. Каждый раз, когда мы запускаем транзакцию в сети биткоинов, она сопровождается идентификатором, который на самом деле является хешем SHA-256. Это важно, потому что таким образом каждая транзакция имеет уникальный и неповторимый идентификатор, что позволяет избежать манипулирования данными.