Россия, Москва, МГОУ, 2007 |
Хранение и использование биткоинов
В этой лекции будет рассмотрено хранение и использование биткоинов. В простейшем случае для хранения биткоинов используется локальное устройство. Для проведения платежа с помощью биткоинов необходимо знать две вещи. Первое - часть публичной информации о блокчейне. Второе - закрытый ключ от публичного кошелька. При этом хэш-транзакций – это публичная информация и ее можно в любой момент восстановить, в то время как закрытый ключ требует особого внимания. Фактически, когда говорят о хранении биткоинов, говорят о хранении закрытых ключей.
Хранение биткоинов.
Сформулируем основные моменты, важные для хранения и управления ключами, их всего три. Во-первых, ключ должен быть легкодоступным, чтобы биткоины можно было потратить в любой удобный момент. Во-вторых, он должен храниться безопасно, чтобы никто кроме владельца не мог потратить монеты. В-третьих, использование и хранение должно быть удобным.
Простейший способ сохранить ключ – просто записать файл на любое устройство, ПК, телефон или флэш-накопитель. По удобству этот способ несомненный лидер. Нет ничего проще чем нажать кнопку на телефоне для того, чтобы провести оплату в биткоинах, однако, в части доступности и безопасности все не так радужно. Доступность напрямую зависит от доступности устройства хранения. Если телефон сломается или будет потерян, если файл на флэш-диске сотрется или будет поврежден, то ключ будет потерян и все монеты станут недосягаемыми. То же самое касается безопасности – ключ защищен ровно настолько, насколько защищено устройство хранения. Если кто-то может взломать или поместить вирус на хранилище, он получит ключ и сможет распоряжаться средствами его законного владельца.
Давайте подумаем о хранении биткоинов, как о ношении денег в кошельке. Всегда удобно иметь наличные для повседневных расходов, но никто не станет носить с собой все свои сбережения.
Неплохо применить подобный подход при локальном хранении ключей. Обычно для расчетов используется программа-кошелек, которая хранит ключи и делает все операции удобными, и чтобы заплатить за кофе в Starbucks нужно просто нажать на кнопку. Если же в дополнении к программе-кошельку использовать программу для хранения и управления ключами, можно одновременно иметь несколько кошельков и платить с разных адресов, используя лишь один мастер-ключ. Кроме дополнительной безопасности это так же дает дополнительную анонимность. Применяя программу-кошелек не нужно будет думать о дополнительных адресах и ключах, программа сделает все необходимое самостоятельно, единственное, что надо знать для оплаты или получения денег – это адрес для оплаты.
Адрес представляет собой зашифрованный публичный ключ, закодированный в Base58. Передать его можно 2 основными способами – в виде текстовой строки или в виде QR кода. Строку надо точно записать или скопировать. Более простой и современный способ – преобразовать строку в QR код, который можно отобразить на экране или сфотографировать с помощью телефона.
Горячее и холодное хранилища.
Поговорим о горячем и холодном хранилищах. Ранее был рассмотрен подход к хранению биткоинов, как реальных денег. Небольшая часть должна быть легкодоступна – в этом случае владелец хранит ключ либо на своем телефоне или в онлайн хранилище, и монеты, защищенные этим ключом всегда в его распоряжении. Такое хранилище называется горячим. Использовать его очень удобно, но не совсем безопасно.
Холодным хранилищем будет устройство, находящееся вне сети, заархивированное и зашифрованное. Доступ к нему, конечно, затруднен, однако это гораздо безопаснее. При использовании такого подхода будет необходимо создать отдельный ключ для каждого из хранилищ и сохранить эти ключи. Благодаря этому при компрометации ключа от горячего хранилища владелец не теряет все свои средства.
Рассмотрим, как передавать деньги между хранилищами и стратегию их взаимоотношений.
Очевидно, что для пересылки монет каждое из хранилищ должно знать адрес другого. Значит, когда на горячем хранилище накопится большая сумма, можно отправить монеты на адрес холодного хранилища. При этом холодное хранилище находится вне сети. Поскольку в блокчейне сохраняется информации о всех проведенных транзакциях, достаточно будет через какое-то время подключить холодное хранилище в сеть, чтобы принять все посланные на его адрес деньги.
Проблемы появляются, если нужно усилить конфиденциальность переводов и использовать для каждой транзакции разные адреса, и, соответственно, разные закрытые ключи. В API биткоина есть операция generateKeys, которая создает пару из закрытого ключа и открытого ключа, который эквивалентен адресу кошелька. Следовательно, чтобы использовать разные адреса для каждой операции можно сгенерировать много закрытых ключей и адресов и использовать их по очереди. Но такой подход, очевидно, не очень удобен.
Существует гораздо более практичная альтернатива – она называется иерархическая генерация ключей. В этом случае генерируется не пара ключей, а информация о генерации адресов и информация о генерации закрытого ключа. Имея данную информацию и подставив целое i в формулу, можно получить i-ый адрес в последовательности или i-ый закрытый ключ, соответствующий i-ому адресу. То есть фактически мы получаем такую же пару, которая бы получилась при использовании операции generateKeys.
Дополнительный плюс иерархической генерации ключей – то, что генерация адресов не дает никакой информации о генерации ключей и можно свободно предоставить сгенерированный инфо-файл адресов кому-либо. К сожалению не все алгоритмы цифровой подписи поддерживают такой механизм, однако, ECDSА, используемый в биткоине, ее поддерживает.
Учитывая все вышесказанное, возможно разделить работу между горячим хранилищем и холодным. На холодном хранилище будет сгенерирована информация об адресах и закрытых ключах. На горячем хранилище с помощью подстановки различных i можно генерировать адреса. И позже, подключив горячее хранилище, сгенерировать закрытые ключи.
Давайте теперь подробнее обсудим вопрос создания холодного хранилища.
Первый способ – взять какое-либо устройство хранения и поместить его в сейф. Это может быть ноутбук, телефон или же отдельный жесткий диск. Любой, кто захочет украсть биткоины, должен будет сначала взломать сейф и добраться до устройства.
Второй способ можно назвать кошельком в памяти. Пользователь запоминает кодовую фразу или ключ, которую использует для шифрования ключа. В таком случае защищенность равна сложности парольной фразы или обстоятельствам при которых пользователя могут заставить ее рассказать. Кроме того, существует шанс забыть кодовую фразу.
Третий вариант можно назвать бумажным кошельком. Мы можем распечатать информацию о ключе на бумаге и спрятать этот лист в банковскую ячейку или сейф.
Четвертый способ – использовать для хранения устройство, устойчивое ко взлому. Допустим флешку со сканером отпечатков пальцев или программу для идентификации по голосу.
Конечно для наибольшей безопасности стоит использовать комбинацию из приведенных выше методов. Для горячих хранилищ, в которых находится много биткоинов, разрабатываются более сложные схемы безопасности, о которых будет рассказано далее.