Читать «Адам Теппер. Биткойн – деньги для всех» онлайн - страница 17

Адам Теппер

Давайте рассмотрим наш изначальный пример с чековой книжкой более подробно, поскольку теперь мы понимаем идею открытого ключа. У меня есть 50 биткойнов на моем мобильном телефоне, и я хотел бы отправить их на мобильный телефон моего друга Джо. Сперва Джо нажимает кнопку на своем телефоне, чтобы сгенерировать новый биткойн-адрес. Хотя, на самом деле, он создает пару асимметричных ключей. Закрытый ключ хранится на телефоне Джо, а производная от открытого ключа (биткойн-адрес) отображается на экране и затем пересылается мне. Используя биткойн-адрес Джо, я начинаю транзакцию на своем телефоне, указывая сумму, которую хочу отправить ему. Затем я подписываю эту транзакцию цифровой подписью, используя мой закрытый ключ, и отправляю транзакцию в интернет. Помните, мы говорили, что выписать чек – это то же самое, что написать в банк письмо, разрешающее банку выделить средства с моего счета указанному человеку. В случае с биткойном, транзакция, в сущности, является публичным объявлением о передаче контроля над XBT 50, зарегистрированными на мой адрес, биткойн-адресу, который я указываю. Только мой закрытый ключ позволяет мне разрешить передачу биткойнов на адрес Джо, и я даю это разрешение, когда подписываю транзакцию цифровой подписью.

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

Рис. 3. Адам посылает Джо биткойны через биткойн-сеть

Глава седьмая. Хеширование

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

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

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