Bitcoin: Программное обеспечение

Программное обеспечение узла сети «Биткойн» существует в двух видах: приложение с графическим интерфейсом и фоновое приложение (демон в Unix, служба в Windows). Программы могут удалённо управляться по протоколу JSON-RPC (RFC 4627)[106], разработаны соответствующие классы для PHP5. Это позволяет подключить к одному узлу несколько майнеров, создать собственный пул; сопрячь узел с веб-сайтом.


Bitcoind — программа-демон, в которой реализован протокол Bitcoin, управляется через командную строку.

Bitcoin Core (ранее Bitcoin-qt) — клиент на основе первой программы с графическим интерфейсом Qt, формат хранения секретного ключа совместим с bitcoind.

BitcoinJ — узел сети «Биткойн» на языке Java, разработанный сотрудником Google Майком Хирном (Mike Hearn) в рамках программы «20 % рабочего времени сотрудника»[107]. Имеет только пользовательские функции[108] — не может проверять транзакции и блоки, создавать блоки, но может создавать новые транзакции. Возможно применение в мобильных приложениях для операций с биткойнами.

Armory — клиент с различными функциями для повышения безопасности, является надстройкой, работающей поверх bitcoind, однако использует собственный формат хранения секретного ключа. По состоянию на начало 2016 года, ведущий разработчик прекратил работу над улучшением проекта, но поскольку исходный код открыт, работа над проектом может быть продолжена любым желающим. Официальный сайт проекта продолжает работать[109].

Electrum — тонкий клиент, не требующий хранения всей базы транзакций за счёт подключения к одному из полных узлов сети Bitcoin. В качестве seed (англ.)русск. для генерации или восстановления асимметричной пары ключей использует последовательность из 12 английских слов. Существует версия для смартфонов[110].

На май 2015 года существует много сервисов «онлайн-кошельков»[46], которые позволяют пользователям создавать личные биткойн-адреса и управлять ими, аналогично, как это делают почтовые службы. При этом устанавливать отдельные программы не требуется. Но в случае проблем с сайтом его клиенты могут утратить контроль над созданными биткойн-адресами.


Безопасность

6 августа 2010 года, ещё до широкого распространения системы, была замечена ошибка, которая позволяла обойти проверку, и было возможно сформировать транзакцию с любым количеством биткойнов на выходе. 15 августа таким образом было создано 184 млрд биткойнов. В течение нескольких часов сделка была замечена, работа сети остановлена, ошибочные блоки были удалены из базы транзакций, выпущена исправленная версия программы[81].


В 2011 году американский эксперт систем компьютерной безопасности Дэн Камински (англ. Dan Kaminsky) пытался взломать Bitcoin, но не смог найти уязвимости в системе[111]. По мнению Дэна Камински, устойчивость к взлому системы «Биткойн» обусловлена тем, что при разработке изначально предусматривалась вероятность разнообразных атак, «в коде есть признаки, что аудит проводили люди вроде нас».


11 марта 2013 года после выхода версии 0.8 программы-клиента выявилась несовместимость формата блоков с предыдущей версией программы. Подобная несовместимость форматов регулярно встречается при разработке других программ и обычно решается методом обратной совместимости. Но в системе «Биткойн» программный модуль версии 0.7 отвергал блоки нового формата, что привело к разделению цепочки блоков на две параллельные, которые продолжали наращивать разные версии программы. Произошёл фактический раскол на две параллельные платёжные системы. Было принято решение срочно отказаться от версии 0.8. Примерно через семь часов версия «цепочки 0.7» стала стабильно превышать «цепочку 0.8», которая в соответствии с протоколом была отвергнута[44].


В системе «Биткойн» невозможно обжаловать и/или отменить транзакции, даже если будет доказано, что владелец о них не знал и не хотел их проводить. Если у пользователя будет украден пароль доступа и биткойны будут переданы на другой адрес, то потерпевший не сможет выяснить, кто это сделал, так как адрес получателя не содержит идентификационной информации[112]. Также нет механизма гарантировать возврат платежа в случае, когда оплата произведена, но услуга или товар не получены. Этим пользуются мошенники.


Есть множество сообщений об использовании для воровства биткойнов ошибок и уязвимостей в сторонних системах. Ранее известная проблема генератора случайных чисел в ОС Android позволяет в некоторых случаях подобрать электронные ключи, в том числе для системы «Биткойн»[113]. В 2011 году была выявлена ошибка обработки неподтверждённых транзакций в системах бухгалтерского учёта многих сервисов обмена, которая позволяла произвести зачисление средств без передачи биткойнов[64]. Игнорирование этой проблемы привело к банкротству Mt.Gox. Зафиксированы и другие взломы площадок обмена и пулов совместной добычи[114][115][116][117]. В конце 2013 года с транзитных счетов подпольного магазина Sheep Marketplace было украдено 96 000 биткойнов, принадлежавших пользователям[40][118][119].


В апреле 2014 года Лаборатория Касперского сообщила о росте вирусных атак, направленных на кражи биткойнов, в том числе через воровство файлов с ключами (wallet.dat)[120].


Средствами безопасного хранения биткойнов являются:


Для защиты от сбоев: бумажные и/или цифровые бэкапы (с возможностью их зашифровать и/или хранить несколько частей в разных местах).

Для защиты от кражи: «холодное хранение» или аппаратные средства защиты. При этом шифрование кошелька само по себе не является надёжной защитой от троянских программ, поскольку пароль может быть прочитан через кейлогер[121].

Холодное хранение

Метод заключается в хранении приватного ключа на компьютере, не подключённом к интернету, и с возможностью осуществления операций на компьютере, который имеет подключение к интернету. Данный метод реализован например в Bitcoin-клиенте Armory[109][121].


Также к холодному хранению можно отнести аппаратные кошельки Ledger, Trezor, CoolWallet, KeepKey. Аппаратные кошельки генерируют и хранят приватный ключ внутри устройства. Когда требуется произвести транзакцию, операция проводится внутри оборудования. По окончании устройство выводит лишь электронную подпись транзакции.