Модуль 8 из 10

Как работает Биткойн

8.0 Введение

Биткоин не «нерегулируемый»; он регулируется алгоритмом, а не государственными бюрократиями. Некоррумпированный.
Андреас М. Антонопулос

В этом модуле мы подробнее рассмотрим техническую сторону Биткоина. Мы простыми словами объясним криптографию, которая защищает протокол, и как работают транзакции. Некоторые понятия могут показаться техническими, но не переживайте. Многие люди пользуются интернетом каждый день, не полностью понимая, как он устроен.

Изучение технической стороны Биткоина — это долгий путь, который не всем обязательно проходить. Хотя мы поощряем продолжать обучение, этот модуль сосредоточен на ключевых основах.

Сеть Биткоина — это общий реестр транзакций, хранящийся на множестве компьютеров, называемых узлами. Этот реестр, известный как бухгалтерская книга Биткоина, является псевдонимным. В нем нет личных данных, таких как имена или возраст, только данные о транзакциях и биткоин-адреса. Реестр отслеживает каждую транзакцию с момента запуска блокчейна.

Механика протокола Биткоина
  • Доказательство работы
  • Криптографические метки времени
  • Корректировка сложности
  • Архитектура одноранговой сети
  • Хеш-функции и деревья Меркла
  • Криптография с открытым ключом
  • Уменьшение награды за блок

8.1 Безопасность с помощью криптографии

Биткоин даёт нам твёрдое обещание: программа выполнится точно так, как указано.
Андреас М. Антонопулос

Криптография с открытым/закрытым ключом

Криптография — это практика превращения информации в секрет, который могут прочитать только нужные люди.

  • Шифрование — это процесс преобразования информации в закодированную форму, чтобы только тот, у кого есть правильный ключ, мог её прочитать.
  • Дешифрование — это процесс превращения закодированной информации обратно в читаемый вид.

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

Проблема этой системы в том, что оба человека должны уже иметь общий секретный ключ. Если кто-то ещё получит доступ к этому ключу, он сможет прочитать любые перехваченные сообщения.

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

Криптография с открытым/закрытым ключом решает проблему обмена секретами. Вместо того чтобы делиться паролем, у каждого есть два ключа: открытый и закрытый.

  • открытый ключ можно делиться с кем угодно.
  • закрытый ключ всегда должен оставаться в секрете.

Если Иван хочет отправить что-то Артёму, он может использовать открытый ключ Артёма. Только Артём сможет открыть это с помощью своего закрытого ключа. Даже если кто-то перехватит сообщение, он не сможет его прочитать или использовать без закрытого ключа.

В Биткоине эта система используется для создания цифровых подписей. Цифровая подпись доказывает, что владелец закрытого ключа одобрил транзакцию, подобно тому, как вы подписываете документ своим именем. Именно это позволяет транзакциям в Биткоине быть безопасными и проверяемыми без доверия третьей стороне.

Транзакции в Биткоине включают передачу права собственности на биткоины с одного адреса на другой.

Шифрование используется для того, чтобы только настоящий владелец биткоинов имел право отправлять свои деньги другому человеку. Это гарантирует защиту их собственности от злоумышленников.

В качестве дополнительной меры защиты каждая транзакция в Биткоине автоматически получает УНИКАЛЬНУЮ цифровую подпись. Эта уникальная цифровая подпись основана на технологии, защищённой от подделки, которая помогает сети убедиться, что именно настоящий владелец биткоинов, а не кто-то другой, их отправил.

У каждого пользователя есть два ключа: закрытый ключ, который держится в секрете, и открытый ключ, которым можно делиться с другими. Закрытый ключ служит формой идентификации и подтверждением права собственности, доказывая: «Этот адрес принадлежит мне, и я им управляю.»

Как работает транзакция в Биткоине
  1. Создание транзакции: Пользователь инициирует транзакцию в Биткоине, указывая такие детали, как адрес получателя и количество биткоинов для отправки.
  2. Генерация цифровой подписи: Отправитель создаёт уникальную цифровую подпись с помощью своего закрытого ключа. Эта подпись — уникальный код, который подтверждает подлинность транзакции.
  3. Передача транзакции: Подписанная транзакция передаётся в сеть Биткоина, указывая намерение передать право собственности на биткоины от отправителя к получателю.
  4. Проверка в сети: Узлы сети Биткоина получают транзакцию и используют открытый ключ для проверки подлинности подписи транзакции. Одновременно они используют публичный ключ для проверки цифровой подписи.
  5. Подтверждение в сети Биткоин: Если проверка проходит успешно, транзакция добавляется в реестр, который служит защищённой и прозрачной записью всех транзакций. После подтверждения право собственности на биткоин официально переходит от отправителя к получателю.

Цифровая подпись, созданная с помощью цифровой подписи, созданной с помощью приватного ключа, доказывает, что транзакция была авторизована владельцем биткоина. Сеть Биткоин затем может проверить это доказательство и записать транзакцию.

Объяснение хеширования

Пожалуйста, не пугайтесь технических терминов и математических понятий далее. Мы понимаем, что не все любят математику, но вы можете удивить себя и увидеть, что даже самые сложные идеи можно понять, приложив немного усилий.

Функция — это как машина, которая принимает некоторую информацию и превращает её во что-то новое. Информация, которую вы даёте функции, называется is like a machine that takes some information and turns it into something new. The information you give the function is the входными данными. Новая информация, которую создаёт функция, называется выходными данными. Функции помогают компьютерам выполнять задачи и решать проблемы.

Что такое функция?

Функция — это набор инструкций, который принимает входные данные и выдаёт результат. Можно представить это как рецепт: вы следуете шагам с определёнными ингредиентами и всегда получаете предсказуемый результат.

В Биткоине функции используются для обработки и проверки транзакций. Когда кто-то отправляет биткоин, криптографические функции помогают проверить, что транзакция действительна, убедиться, что у отправителя достаточно средств, и обновить балансы в реестре Биткоина. После проверки и добавления в блок транзакция становится частью постоянной записи в блокчейне.

Что такое односторонняя функция?

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

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

Что такое хеш-функция?

Хеш-функция — это как машина для создания секретных кодов. Она принимает сообщение и превращает его в код.

Как работает хеширование в транзакциях Биткоина

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

Роль хеширования в безопасности Биткоина

Хеширование помогает защищать сеть Биткоин, делая транзакции простыми для проверки и невозможными для незаметного изменения. Поскольку каждая транзакция имеет свой уникальный хеш, сеть может быстро обнаружить любые изменения.

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

Хеширование — это как создание отпечатка пальца для цифровых данных. Это процесс, при котором цифровое сообщение превращается в код фиксированной длины, который служит уникальным идентификатором. Как отпечаток пальца может идентифицировать человека, так и хеш может идентифицировать цифровое сообщение.

Выходные данные, или хеш, всегда имеют одинаковую длину, независимо от того, насколько длинной была исходная информация. В Биткоине используются несколько конкретных типов хеш-функций: SHA-256 и RIPEMD160.

Несколько примеров ниже:

  • SHA256-хеш строки привет, мир
    • b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
  • SHA256-хеш строки привет, мир.
    • 7ddb227315f423250fc67f3be69c544628dffe41752af91c50ae0a9c49faeb87
    • Обратите внимание, что небольшое изменение входных данных полностью меняет результат по сравнению с первым примером
  • SHA256-хеш скачиваемого iso-файла Ubuntu 18.10
    • 7b9f670c749f797a0f7481d619ce8807edac052c97e1a0df3b130c95efae4765
    • Этот вход — огромный файл, но результат всё равно имеет одну и ту же фиксированную длину

Можно также представить хеширование как нотную запись, которая передаёт суть музыкального произведения. Как нотная запись уникально отражает мелодию, так и хеш-значение уникально отражает данные.

Сравнивая нотную запись с реальным исполнением, музыкант может определить, насколько исполнение точно. Точно так же, сравнивая хеш-значение полученных данных с оригинальным хешем, можно определить, были ли данные изменены при передаче.

Как даже небольшое отклонение в музыкальном исполнении может изменить звучание, так и малейшее изменение исходных данных приведёт к совершенно другому хешу. Это делает хеширование мощным инструментом для обеспечения целостности и подлинности транзакций Bitcoin.

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

Свойства хеш-функции
  • Детерминированность: Одни и те же ингредиенты всегда дают один и тот же смузи. Точно так же одни и те же данные всегда дают одинаковый хеш.
  • Устойчивость к восстановлению исходных данных (pre-image resistance): Если у вас есть только смузи, вы не сможете узнать, из каких именно фруктов он был сделан. Аналогично, имея только хеш, невозможно определить исходные данные.
  • Эффект лавины: Даже малейшее изменение ингредиентов создаёт совершенно другой смузи. В хешировании очень небольшое изменение данных приводит к совершенно другому хешу.
  • Устойчивость к коллизиям: Крайне сложно найти два разных набора ингредиентов, которые дадут абсолютно одинаковый смузи. Точно так же крайне маловероятно, что два разных набора данных дадут одинаковый хеш.
  • Быстрота проверки: Приготовить смузи быстро, и легко убедиться, что это действительно смузи. Хеш-функции быстро вычисляются и легко проверяются любым человеком.

Задание: сгенерируйте SHA 256 хеш

Хотите узнать, как работает хеширование? Отсканируйте QR-код, чтобы мгновенно сгенерировать SHA256-хеш из любого слова, предложения или выбранных вами данных. Хеш-функции — это как цифровые отпечатки пальцев: они односторонние, то есть после хеширования невозможно восстановить исходные данные. Попробуйте сами и убедитесь!

8.2 Модель UTXO

Что такое UTXO?

Не пугайтесь странного названия. Можно представить UTXO как кусочки биткоина, похожие на купюры и монеты в вашем кошельке. Например, если вы оплачиваете товар за 600 рублей купюрой в 1000 рублей, вы получаете 400 рублей сдачи. Биткоин работает похожим образом.

Весь биткоин, которым вы владеете, состоит из разных UTXO. Когда вы отправляете биткоин, ваш кошелек использует один или несколько таких кусочков для совершения платежа.

Если кусочек, который вы тратите, больше суммы перевода, оставшаяся часть возвращается вам как сдача в виде нового UTXO. Одновременно получатель получает новый UTXO, который соответствует отправленной вами сумме биткоина.

Баланс вашего кошелька — это просто общая сумма всех UTXO, которыми вы управляете.

Не стоит раскрывать другим свои UTXO, потому что если кто-то узнает их, он сможет отслеживать ваши транзакции и в итоге узнать, сколько у вас денег.

Пример
  1. Алиса хочет отправить Бобу 5 BTC.
  2. Её кошелек использует два её UTXO, которые вместе составляют 6 BTC.
  3. Транзакция отправляет 5 BTC Бобу, создавая новый UTXO в кошельке Боба.
  4. Оставшиеся 0,99 BTC возвращаются Алисе как сдача, после оплаты 0,01 BTC комиссии за транзакцию.
  5. После подтверждения транзакции она добавляется в реестр Биткоина, а использованные UTXO Алисы помечаются как потраченные, чтобы их нельзя было использовать снова.
Ресурсы
How Bitcoin Works Under the Hood
Посмотрите «How Bitcoin Works under the Hood»

↑ К оглавлению