По своей сути биткойн – это открытый протокол. Говоря «протокол», я имею в виду, что биткойн – это набор правил, которому должны соответствовать биткойн-программы. Говоря «открытый», я имею в виду, что протокол, или набор правил, находятся в публичном доступе, и любой может их проверить. Этот протокол позволяет биткойн-программам (которые мы обычно называем биткойн-клиентами) связываться друг с другом через интернет стандартизированным способом.
Тогда первым вопросом будет, если биткойн – открытый протокол, или набор правил, что удерживает людей от написания программ, нарушающих правила. Ответ – ничего. Кто угодно может написать программу, которая использует биткойн-протокол и связывается с другими биткойн-программами через интернет и пытается «нарушить правила» в свою пользу, однако клиенты, которые не соответствуют протоколу, просто игнорируются другими клиентами.
В качестве аналогии представьте игроков в шахматы по почте, когда игроки находятся в разных местах и их ходы отправляются в письмах. Оба игрока знают, как выглядит доска целиком, и любой из них может ходить, как захочет, если его ход соответствует шахматным правилам. В противном случае другой игрок игнорирует или отвергает этот ход. Тот же принцип лежит в основе биткойна: любой из «игроков» (биткойн-клиентов) точно знает, как выглядит «доска» (блокчейн), и может самостоятельно проверить по другим источникам, что любой «ход» другого (транзакция) является верным.
Если мы хотим понять биткойн на более глубоком, чем аналогия, уровне, то мы должны уяснить идею асимметричного шифрования (также известного как шифрование с открытым ключом). Асимметричное шифрование – это ключевой элемент биткойна, и без него биткойн не мог бы существовать. Идея асимметричного шифрования не нова, и фактически оно является составной частью безопасности многих программных систем. Мы используем асимметричное шифрование каждый раз, когда посещаем безопасный (SSL) сайт, например, сайт интернет-банка.
Прежде чем я объясню, что такое асимметричное шифрование, давайте представим такую задачу. Скажем, Алиса в Австралии хочет отправить письмо Бобу в Англию. Содержимое письма – большой секрет. Как Алисе послать письмо Бобу без риска, что по дороге кто-нибудь прочитает это письмо? Без асимметричной криптографии достичь этого можно только единственным способом, когда Алиса и Боб изначально понимают, как закодировать письмо. Тогда письмо будет зашифровано, и Боб будет знать, как его расшифровать, когда он его получит. Но что если у Алисы и Боба нет заранее подготовленного ключа для шифра; что если Боб никогда до этого не встречал Алису? В таких обстоятельствах без асимметричного шифрования Алиса не сможет безопасно отослать письмо Бобу.
Таким образом, это приводит нас к асимметричной криптографии и тому способу, которым она решает эту задачу. Некоторое время назад несколько талантливых математиков разработали способ, при помощи которого можно генерировать пары ключей, математически связанных друг с другом. В этом контексте можно представлять ключ как очень большое число – число с несколькими сотнями цифр[6]. Эти ключи называются «открытый ключ» и «закрытый ключ», или вместе – асимметричные ключи. Оказывается, у этих ключей есть несколько очень полезных свойств!
Используя открытый ключ, можно зашифровать сообщение таким образом, что его будет возможно расшифровать только закрытым ключом. Таким образом, Боб может теперь сгенерировать пару ключей и передать всему миру свой открытый ключ, поскольку из него невозможно получить его закрытый секретный ключ. Если Алиса хочет послать Бобу безопасное сообщение, она просто должна зашифровать содержимое своего письма открытым ключом Боба при помощи известного алгоритма, и Боб сможет расшифровать сообщение своим закрытым ключом, который он не показывает никому другому.
Вы используете технологию асимметричной криптографии каждый день, когда используете Wi-Fi, Bluetooth или безопасные вебсайты, где данные зашифрованы, чтобы предотвратить то, что называется атакой «человек посередине». Другими словами, асимметричная криптография используется, чтобы предотвратить перехват вашей беседы, письма или транзакции кем-либо еще.
Итак, теперь мы знаем, как Алиса может безопасно послать письмо Бобу, но, когда Боб получит письмо, как он может быть уверен, что письмо отправила Алиса, а не кто-нибудь другой? Оказывается, асимметричные ключи могут решить и эту проблему. Алиса также генерирует пару ключей: открытый и закрытый ключ. Как и Боб, Алиса раскрывает свой открытый ключ всему миру. Алиса может подписать содержимое письма «цифровой подписью», используя свой закрытый ключ. Затем, используя открытый ключ Алисы, Боб может определить, что письмо действительно было подписано Алисой, поскольку никто другой не может подписать письмо без доступа к закрытому ключу Алисы. Таким образом, письмо Алисы может прочитать только Боб, и Боб может удостовериться, что письмо написала именно Алиса.
Это очень полезная и мощная идея – она до сих пор впечатляет меня сегодня, несмотря на повседневное ее использование. Вы можете оценить ее полезность для военных коммуникаций, и, на самом деле, многие годы Соединенные Штаты пытались остановить экспорт программ, которые используют сильную асимметричную криптографию.
Рис. 2. Асимметричное шифрование.
Алиса посылает подписанное зашифрованное сообщение Бобу.
Теперь, когда мы понимаем принцип работы асимметричной криптографии, как это относится к биткойну? Помните, в Главе третьей мы проводили аналогию и говорили, что в некоторых отношениях биткойн работает по принципу чековой книжки? Мы говорили, что один пользователь послал биткойны на биткойн-адрес другого пользователя, и что транзакция была подписана отправителем транзакции. Это и есть та точка, где все начинает соединяться: дело в том, что биткойн-адрес – это производная открытого ключа.
Давайте рассмотрим наш изначальный пример с чековой книжкой более подробно, поскольку теперь мы понимаем идею открытого ключа. У меня есть 50 биткойнов на моем мобильном телефоне, и я хотел бы отправить их на мобильный телефон моего друга Джо. Сперва Джо нажимает кнопку на своем телефоне, чтобы сгенерировать новый биткойн-адрес. Хотя, на самом деле, он создает пару асимметричных ключей. Закрытый ключ хранится на телефоне Джо, а производная от открытого ключа (биткойн-адрес) отображается на экране и затем пересылается мне. Используя биткойн-адрес Джо, я начинаю транзакцию на своем телефоне, указывая сумму, которую хочу отправить ему. Затем я подписываю эту транзакцию цифровой подписью, используя мой закрытый ключ, и отправляю транзакцию в интернет. Помните, мы говорили, что выписать чек – это то же самое, что написать в банк письмо, разрешающее банку выделить средства с моего счета указанному человеку. В случае с биткойном, транзакция, в сущности, является публичным объявлением о передаче контроля над XBT 50, зарегистрированными на мой адрес, биткойн-адресу, который я указываю. Только мой закрытый ключ позволяет мне разрешить передачу биткойнов на адрес Джо, и я даю это разрешение, когда подписываю транзакцию цифровой подписью.
Когда транзакция отправлена, Джо может подтвердить в биткойн-сети, что у него есть право потратить эти биткойны – транзакция окончательная. Разумеется, несмотря на все эти технические шаги, все это происходит автоматически, за кулисами, посредством нажатия нескольких кнопок на телефоне.
Рис. 3. Адам посылает Джо биткойны через биткойн-сеть