Найти тему
Blockspoint

Методы хеширования, описанные в оригинальной статье о Биткоине

Оглавление

Введение

С тех пор, как в 2009 году были предложены основные детали и функции сети Биткоин, она постоянно развивается благодаря усилиям криптоэнтузиастов и разработчиков. За последние несколько лет было предложено множество разных улучшений. Одни были приняты в своем первоначальном виде, другие — усовершенствованы и применены в правильное время, а третьи — до сих пор находятся на стадии планирования или вовсе отброшены.

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

Хеширование в Биткоине

Как указано в статье Сатоши Накамото 2009 года, хеширование используется по нескольким причинам. Во-первых, оно надежно и безопасно. Действительно, благодаря внутренним особенностям хеширования невозможно (или почти невозможно) обратить хешированные данные и преобразовать в изначальные данные на входе. Во-вторых, оно экономит свободное место. Поскольку размер блока стабилен на уровне 1 Мб, каждый бит имеет значение. Такие условия требуют сжатия или урезания данных. Последний пункт касается уникальности. Результат хеширования достаточно уникален, чтобы поддерживать множество адресов, которые нужны для передачи криптосредств. Все эти свойства совместно поддерживают требуемый уровень надежности.

-2

Рассмотрим подробности хеширования, описанные в оригинальной статье о Биткоине.

Адресация транзакций

Хеширование используется для адресации транзакций (это описано в разделе «Транзакции»). Транзакция — это сложная структура со множеством компонентов, которые можно представить в различном виде. После хеширования данных мы получаем 256 бит хеша, в дальнейшем используемые как адрес. В действительности данные транзакции хешируются дважды по соображениям безопасности. Этот результат хеширования также называется TxID (идентификатор транзакции). Чтобы использовать отправленные средства, мы должны знать TxID и быть в состоянии открыть его.

Связь блоков

Хеширование описано в разделе «Сервер меток времени» как инструмент для объединения блоков в цепь. В статье сказано, что такая система позволяет надежно отслеживать данные и доказывать их существование на протяжении времени. У каждого нового блока есть свой рассчитанный хеш, который добавляется в следующий новый блок как стандартный компонент. Таким образом, каждый блок содержит хеш предыдущего блока. Этот подход прост, но эффективен, так как никто не может внести изменения в содержимое блока, не затронув его хеш. Такие изменения прекрасно отслеживаются.

-3

Proof-of-Work

Метод консенсуса под названием Proof-of-Work также основан на хешировании. Это унаследованный метод консенсуса, предложенный Накамото. Он напрямую ссылается на метод «хешкеш» Адама Бэка, используемый для защиты электронной почты и предотвращения DoS атак. PoW требует, чтобы участники считали хеш нового блока, который они хотят предложить сети. Если рассчитанный хеш обладает достаточным количеством ведущих нулей, то блок считается правильным и должен быть принят другими участниками. Поскольку хеширование детерминировано, одинаковый вход дает одинаковый выход. Однако оно достаточно непредсказуемо, чтобы пересчитать после изменения единственного бита и получить полностью измененный результат. Здесь используется специальный счетчик, именуемый «nonce».

Сам процесс поиска правильного хеша называется майнинг.

Древо Меркла

Последняя — но не по важности — технология хеширования в Биткоине называется «Древо Меркла». Это структура хешей, подобная пирамиде. Единичный хеш формируется в виде TxID. Все TxID берутся парами. Каждая пара хешей получает собственный пересчитанный хеш. Все результаты вновь объединяются по парам и процесс повторяется. Если у какого-то хеша нет пары, он берется для расчетов дважды.

-4

Этот подход используется для метода «simple payment verification» (простое подтверждение оплаты). Некоторые ноды не хотят хранить весь блокчейн в памяти, поэтому они скачивают только заголовки блоков с Древом Меркла внутри. Тогда все, что нужно ноде для подтверждения транзакции, —  пересчитать хеши. Это намного упрощает работу облегченных нод.

Послесловие

Оригинальная статья Сатоши Накамото о проекте Биткоин содержит все основные детали по хешированию, которые используются по сей день. Это подчеркивает изящество изначально предложенного технического решения. Многие другие криптопроекты также используют хеширование, и у некоторых из них есть собственные уникальные разработки. Их мы рассмотрим далее.

Сергей Борсук, blockspoint