Биткойн и другие криптовалюты (альткойны) представляют собой цифровые деньги, средство покупки и продажи товаров в интернете. Чтобы пользоваться ими, нужно создать электронный кошелек – либо заведя новый онлайн-кошелек в браузере, либо загрузив кошелек-приложение для обычного компьютера или смартфона с сайта Bitcoin.org, Blockchain.info, Mycelium, Circle, Electrum или сайтов других разработчиков биткойн-ко-шельков. При создании кошелька автоматически генерируется биткойн-адрес, а также открытый и закрытый ключи. Биткойн-адрес – это, как правило, идентификатор, начинающийся с «1» или «3» и состоящий из 26–34 буквенно-цифровых символов, которые указывают на получателя биткойн-платежа, например 1FTgzPJCbpCWYfF6VxPdmCMPUDBfygut2h. Это настоящий биткойн-адрес для пожертвований, принадлежащий англоязычному информационному порталу Let’s Talk Bitcoin, посвященному блокчейн-технологии. Биткойн-адрес может быть представлен в виде строки или QR-кода и в чем-то похож на адрес электронной почты – в том смысле, что адрес электронной почты позволяет получать сообщения электронной почты, а биткойн-адрес вашего кошелька – получать биткойны от других людей.
Биткойны – это цифровые деньги, поэтому в кошельке нет физических денег, так что термин «кошелек» не вполне корректен. Кошелек содержит адрес, открытый и закрытый ключи, а также запись в распределенном журнале записей системы блокчейна о количестве принадлежащих владельцу биткойнов. Закрытые ключи кошелька надо беречь так же тщательно, как и ваш обычный кошелек. Любой получивший доступ к этим ключам человек сможет управлять кошельком, тратить и переводить биткойны, поэтому не надо никому передавать свои закрытые ключи или, тем более, публиковать их. Несоблюдение требований безопасности закрытых ключей – одна из причин краж биткойнов и афер с ними.
Если у вас есть биткойн-адрес, любой человек может отправлять на него биткойны – так же, как можно отправлять электронную почту на электронный адрес. Чтобы отправить кому-то биткойны, нужно знать адрес получателя и собственный закрытый ключ. Этот ключ позволит программе проверить, есть ли в распоряжении владельца биткойны, которые тот намеревается потратить или перевести. Адрес кошелька получателя биткойнов можно узнать, получив строку или QR-код адреса (например, по электронной почте или в СМС). Отравитель сканирует QR-код адреса кошелька получателя и в приложении-кошельке вводит прочую информацию о транзакции: сумму, комиссию за перевод (обычно отправитель просто подтверждает комиссию, назначаемую приложением) и другие параметры, необходимые для отправки биткойнов получателю. Когда отправитель подтверждает транзакцию, в сеть поступает широковещательное сообщение о том, что столько-то монет из этого адреса теперь принадлежат другому адресу.
Эта операция подтверждается закрытым ключом отправителя. Если в кошельке нет закрытого ключа, соответствующего монетам, то их нельзя потратить. Корректная транзакция почти сразу появляется в кошельке получателя в состоянии «неподтвержденная». Далее в течение 10 минут транзакция подтверждается и записывается в распределенный журнал записей одним из майнеров. При совершении крупных покупок, таких как автомобиль или недвижимость, участники сделки дожидаются подтверждения транзакции (а то и нескольких), но вряд ли кто-нибудь станет ждать подтверждения покупки чашки кофе.
Краткий экскурс в асимметричную криптографию
Когда кошелек инициализируется или создается впервые, автоматически генерируется адрес, а также открытый и закрытый ключи. В основе биткойна лежит механизм асимметричного шифрования, в котором открытый ключ распространяется свободно, а закрытый ключ надо держать при себе.
Программа формирует биткойн-адрес, выбирая случайное число и создавая пару «открытый и закрытый ключи». На данный момент для создания ключей используется алгоритм ECDSA (Elliptic Curve Digital Signature Algorithm.) Ключи в паре математически связаны и проверяются в процессе расходования биткойнов. Закрытый ключ генерируется автоматически, но для создания биткойн-адреса нужны дополнительные операции. Биткойн-адрес – не просто открытый ключ, а результат его преобразования для повышения эффективности использования. Ключ обрабатывается с применением дополнительных протоколов шифрования (таких, как SHA-256 и RIPEMD-160), хеширования (преобразования строки символов в более короткое значение фиксированной длины или ключа, представляющего исходную строку) и служебных операций (удаления похожих символов, например строчной «L» и заглавной «I», нуля и заглавной буквы «O», добавления контрольной суммы в конец адреса и цифры-идентификатора в начало адреса – в большинстве биткойн-адресов это цифра «1», которой отмечают обычные адреса биткойн-сети).
Практически нереально, хотя и теоретически возможно, что двое разных пользователей сгенерируют одинаковые бит-койн-адреса. В этом случае оба смогут тратить деньги с этого адреса. Шансы возникновения такой ситуации исключительно малы, а вероятность несовпадения адресов очень высока и оценивается в 99,9999999999 %. Кошелек биткойнов может содержать много адресов (одна из иногда используемых мер безопасности состоит в генерации и использовании нового адреса для каждой транзакции) и соответствующих им закрытых ключей, которые хранятся в файле кошелька. Закрытые ключи математически связаны со всеми биткойн-адресами, сгенерированными в кошельке.
Закрытые ключи биткойна обычно являются 256-разрядными числами (хотя в некоторых кошельках длина может варьироваться от 128 до 512 разрядов) и представлены в одной или нескольких формах. Вот пример закрытого ключа (https:// en.bitcoin.it/wiki/Private_key) в шестнадцатеричном формате (256 разрядов соответствуют 32 байтам или 64 шестнадцате-ричным символам из диапазона 0–9, A – F):
E9 87 3D 79 C6 D8 7D C0 FB 6A 57 78 63 33 89 F4
45 32 13 30 3D A6 1F 20 BD 67 FC 23 3A A3 32 62
Вот еще один пример закрытого ключа и соответствующего открытого адреса:
Закрытый ключ: 791866703012990464368584129364204170766
60923359050732094116068951337164773779
Открытый биткойн-адрес: 1EE8rpFCSSaBmG19sLdgQLEWuDai YVFT9J
Вычислить закрытый ключ, соответствующий открытому клю чу, невозможно из-за однонаправленности операции хеширования (или природы другого применяемого для вычисления этого значения механизма), а также непомерно высокой стоимости этой операции (нужен колоссальный объем вычислительных ресурсов на время, намного превышающее время подтверждения транзакции). Для получения биткойнов достаточно адреса, а для отправки нужна пара из открытого и закрытого ключей.