Глава 0.1
Составляющие Биткоина
"Одним из основных строительных блоков такой системы являются цифровые подписи."
– Сатоши Накамото
"Человек начинает свой путь с этого нового строительного блока, а не с более мелких частей. И, наконец, вещи, которые кажутся элементами, растворяются и оставляют после себя ткань отношений, которая на самом деле повторяется и придает структуру [целому]."
– Кристофер Александр
Почти невозможно осмысленно говорить о Биткоине, вкратце не обсудив строительные блоки, лежащие в его основе. Таким образом, хотя криптография с открытым ключом, цифровые подписи, хеш-функции и одноранговые сети не входят в число первых тем, которые поднимаются во время оживленной коктейльной вечеринки, эти эзотерические конструкции, несомненно, обладают определенным очарованием, если их правильно понять.
Несмотря на то, что я не собираюсь вдаваться в какие-либо подробности математики этих понятий, я считаю, что полезно осознать общую идею в некоторых деталях. Хотя не всем нужно будет изучать все тонкости криптографии на эллиптических кривых, есть определенные вещи, которые необходимо понимать, если вы хотите правильно использовать Биткоин. Например, если вы собираетесь стать полноценным владельцем своего биткоина, вам нужно будет узнать, что такое закрытый ключ, что подводит нас к первому фундаментальному строительному блоку Биткоина: парам открытого и закрытого ключей.
Криптография с открытым ключом
Криптография с открытым ключом, также известная как асимметричная криптография, лежит в основе всех современных криптографических протоколов, включая Биткоин. Как утверждают Джеймс Дейл Дэвидсон и Уильям Рис-Могг в книге "Суверенная личность", именно этот набор математических уловок стоит за фундаментальным сдвигом в динамике власти в нашем мире.
Основной принцип следующий: на основе секрета вы генерируете пару ключей — один открытый, один закрытый. Эти ключи асимметричны, что означает, что если вы запираете дверь одним из них, вы должны использовать другой для ее открытия.
Конечно, эти ключи не являются физическими ключами, и мы не говорим о физических дверях. Ключи — это данные, двери — это алгоритмы, запирание означает шифрование (шифрование данных), а отпирание означает дешифрование (расшифровку данных). Кроме того, информация, которая зашифрована или подписана, как в случае Биткоина, также является данными.
Все современные криптографические системы прозрачны. Они построены таким образом, чтобы обеспечить безопасность системы, даже если ваш враг знает о системе все, кроме вашего личного секрета.[1] Биткоин и есть такая прозрачная криптографическая система, хотя она и не шифрует никаких данных. С точки зрения криптографии, все, что использует Биткоин – это криптографические хеши и цифровые подписи, которые отличаются от шифрования. В Биткоине нет секретов. Единственная загадка – это ваш личный секрет, который является вашим секретным ключом. Пока вам удается обеспечить безопасность вашего закрытого ключа, ваши Биткоины также будут в безопасности.
Подводя итог, криптография с открытым ключом используется для создания двух математически связанных чисел. Одно доступно для всех, другое – нет. Мы называем секретное число закрытым ключом, а общедоступное – открытым ключом. Биткоин – это современная криптографическая система, использующая эти ключи.
В Биткоине вы используете свой закрытый ключ для подписи сообщений, что приводит нас к следующей составляющей.
Цифровые подписи
В целом подпись полезна, когда ее легко создать, проверить и защитить от подделки. Подписание физического документа обычно подразумевает, что документ был прочитан и понят лицом, подписавшим его, а подпись подтверждает подлинность не только документа, гарантируя, что документ не будет изменен постфактум, но и подписавшего.
В мире битов и байтов благодаря криптографии с открытым ключом того же можно добиться с помощью цифровых подписей.
Цифровая подпись является результатом специальной математической функции, которую можно применить к данным. Пользователь, назовем ее Алисой, может использовать свой закрытый ключ для подписи произвольного сообщения, а другие пользователи – на самом деле все они – могут использовать открытый ключ Алисы, чтобы убедиться, что она и только она создала эту подпись.
Надлежащая схема цифровой подписи обеспечивает:
- целостность данных: гарантия того, что подписанное, не было изменено
- аутентификация: гарантия того, что данные подписаны тем самым пользователем и
- невозможность отказа: гарантия того, что подписывающий не сможет отрицать факт создания подписи постфактум.
Другими словами, цифровая подпись сообщения связывает личность отправителя с самим сообщением, точно так же, как обычная подпись связывает человека с документом. При этом криптография гарантирует, что цифровая подпись намного надежнее, чем физическая. Подделать цифровую подпись практически невозможно В дополнение к этим сильным гарантиям целостности и аутентификации цифровую подпись легко создать и проверить.
Подводя итог, цифровые подписи используются для проверки того, что сообщение было создано определенным отправителем и что оно не было изменено в процессе передачи.
В Биткоине цифровые подписи используются для подписи транзакций. Только действительные транзакции будут хешированы и объединены в блок, и только действительные блоки будут хешированы для последующего добавления в существующую цепочку блоков. Это подводит нас к следующей составляющей – хеш-функциям.
Хеш-функции
Хеш-функция – это односторонняя функция, которая принимает входные данные произвольной длины и вычисляет "отпечаток" (fingerprint) фиксированной длины. Хеш-функцию также называют функцией "люка" (trapdoor), потому что через люк легко провалиться, но выбраться из него невозможно. Точно так же вычислить хеш фрагмента данных легко, но невозможно получить исходное, нешифрованное содержимое указанных данных, отталкиваясь исключительно из результата этого хеша.
$ echo "Satoshi Nakamoto" | sha256sum 2662d47e3d692fe8c2cdb70b907ebb12b216a9d9ca5110dd336d12e7bf86073b
Обратное вычисление невозможно, потому что пространство действительных входных данных намного больше, чем пространство возможных выходных данных, что, по сути, означает, что информация теряется при вычислении хеша.
Отсюда следует, что два разных фрагмента данных могут иметь один и тот же хеш. Это то, что мы называем коллизией хешей. Разница между обычными хеш-функциями и криптографическими хеш-функциями заключается в том, как входные данные сопоставляются с пространством возможных хешей. Криптографические хеш-функции обладают определенными свойствами, гарантирующими невозможность обнаружения коллизий, т. е. двух входных данных, которые дают один и тот же результат. Кроме того, криптографические хеш-функции гарантируют, среди прочего, что несколько отличающиеся данные на входе дают совершенно разные данные на выходе.
В Биткоине хеш-функции используются повсеместно. Например, то, что мы называем "майнингом" является процессом поиска числа, которое при помещении в потенциально допустимый блок дает результат, соответствующий определенным критериям. Хеш-функция SHA256 создает этот вывод. Хеш-функции также используются для генерации адресов[2], идентификации скриптов траты, идентификации транзакций, блоков и многого другого[3].
Хеш-функция является столь важной составляющей, потому что в отсутствие центральной власти сами данные – это все, что у нас есть для идентификации и индексации информации. Не существует центрального индекса или реестра, в котором все данные были бы аккуратно организованы, потому что не существует уполномоченного органа, ведущего такой реестр. Это подводит нас к последней составляющей – одноранговым сетям.
Одноранговые сети
Проблема с обычными компьютерными сетями – политическая. Традиционные компьютерные сети обычно следуют модели клиент-сервер, в которой единый сервер является центральным органом сети. К сожалению, как мы уже могли убедиться, сервер не всегда справедливо обслуживает всех своих клиентов. Чаще всего серверы превращаются в диктаторов, поэтому вместо термина "сервер" столь же справедливо использовать термин "хозяин", а клиентов называть рабами.
Решение этой головоломки заключается в том, чтобы сделать всех участников сети равноправными. Вместо хозяев и рабов у нас есть узлы в сети. Равноправные участники, которые не только обладают равными привилегиями, но, что более важно, равны в своих возможностях.
Тот факт, что Биткоин является одноранговой сетью, имеет первостепенное значение. Я уверен, это единственный принцип, которому стоит следовать и который важно поддерживать в первую очередь. Если мы не сможем продвигать и поддерживать этот принцип, централизация неизбежна, а с централизацией придет диктатура. Как уже неоднократно показывала история, власть, которую приносит с собой централизация, слишком велика, чтобы ей можно было сопротивляться. Любой центральный орган непременно будет злоупотреблять своими полномочиями, поэтому Биткоин ставит децентрализацию во главу угла.
Собираем все воедино
Как поведает первая глава, многие были уверены, что можно разработать систему цифровых денег, используя эти составляющие. Оказывается, они были правы, но для того, чтобы все это заработало, понадобился гений Сатоши Накамото.
Биткоин действительно работает таинственным образом. Эзотерические составляющие элементы, описанные выше, сотканы воедино, чтобы создать саморегулирующуюся, не похожую ни на одну другую известную нам систему.
И, как упоминалось выше, язык описания этой системы и ее составных частей до ужаса неточен. Мы говорим о "ключах", "адресах", "кошельках", "монетах", "транзакциях" и подобном, часто забывая, что мы описываем данные и манипулирование ими. С таким неточным языком слишком легко создать неточную картину работы Биткоина.
Увы, мы мало что можем с этим поделать. Язык и метафора — наши главные инструменты для осознания вещей. Таким образом, позвольте мне метафорически описать Биткоин-транзакцию и сразу после этого исправить это описание – конечно, с использованием большого количества метафор.
Допустим, в вашем кошельке есть некоторое количество сатоши, и вы хотите отправить Алисе 615 сатоши. Вы можете подумать, что все, что вам нужно сделать, – это открыть свой кошелек, достать 615 сатоши и отправить их Алисе, подобно прикрепленному к электронному письму файлу.
На самом деле происходит кое что другое.
Во-первых, сатоши, которыми вы владеете, не находятся в вашем кошельке. Они находятся в прозрачном хранилище; они видны каждому желающему. Ваш кошелек хранит ключ, способный открыть хранилище. Когда вы отправляете Алисе 615 сатоши, вы снимаете свой замок с хранилища и устанавливаете на него замок Алисы. Теперь сатоши принадлежат Алисе. Чтобы отправить их Бобу, она должна снять замок своим ключом и поставить вместо него чужой и так далее.
Но разве это не переведет все ваши средства Алисе? Нет. Именно поэтому новые хранилища создаются с каждой транзакцией. В этом случае одно – для Алисы и одно – для вас, чтобы получить сдачу. Еще две детали:
- Ваши ключи – это не физические ключи, а магические заклинания, которые нужно "проговорить".
- Сатоши не существуют вне хранилищ.
Можно описать вышесказанное на языке составляющих элементов Биткоина: чтобы инициировать перевод средств, Алиса должна использовать свой закрытый ключ для подписи транзакции. Одним из выходов этой транзакции является Биткоин-адрес Боба, полученный из его открытого ключа. Как только транзакция подписана и транслируется по одноранговой сети, цифровая подпись Алисы проверяется всеми участниками. Если транзакция считается действительной, она в конечном итоге будет подтверждена, и перевод средств будет осуществлен. Старое хранилище Алисы теперь пустое. Были созданы два новых хранилища: одно для (сдачи) Алисы и одно для Боба[4].
Хотя эта картина опять-таки неполная, она достаточно точно описывает происходящее в момент передачи сатоши из рук в руки. Я надеюсь, что по мере прочтения этой книги в вашем сознании начнет формироваться все более четкий образ. Прежде чем мы углубимся в дополнительные нюансы и технические особенности Биткоина, давайте взглянем на его предысторию, чтобы мы могли оценить его предшественников и происхождение.
Примечания
[1] Это известно как принцип Керкгоффса или максима Шеннона. Это противоположно "безопасности через неизвестность".
[2] В то время как SHA256 используется в Биткоине чаще всего, вторая хеш-функция используется в дополнение к SHA256 для генерации адресов: RIPEMD160.
[3] Полный список компонентов, использующих хеши и хеш-функции, можно найти в подробном ответе на StackExchange от Питера Вюлле: https://archive.is/5qZTp
[4] То, что я здесь называю "хранилищами", мы называем UTXO (неизрасходованные транзакционные выходы) в мире Биткоина.
Материал оказался полезным? Поддержи проект: