Хранение и использование биткоинов
Разделение и распространение ключей.
Прежде обсуждались только способы хранения ключей в каком-то конкретном месте – сейфе, в зашифрованном виде или на бумаге. Но единственное хранилище будет и единой точкой отказа, то есть, если что-то случится, то доступ к ключу будет потерян. Рассмотрим способы, которыми можно разделить ключ на части и распределить их таким образом, чтобы избежать проблемы единой точки отказа.
В криптографии подобное называют разделением секрета. При этом какой-либо секрет (в случае биткоина это закрытый ключ) разделяется на N частей. Необходимо знать K частей из N, чтобы восстановить изначальный секрет. В случае, кто-то будет знать меньше частей, чем K, восстановление не удастся.
Так, например, если N=2 и K=2, то секрет делится на 2 части и необходимо знать обе части, чтобы его восстановить.
Разберем один из способов такого разделения. Сначала надо взять большое простое число P, оно не должно быть секретным, просто большим. Секрет S должен находится в диапазоне от 0 до P-1. Генерируется случайное число R, которое должно быть секретным и так же находится в диапазоне от 0 до P-1.
Секрет делится на 2 части X1 и X2. X1 представляет из себя остаток от деления (S+R) на P. X2 будет получен как остаток от деления (S+2*R) на P. Чтобы восстановить S нужно взять остаток от деления (2X1-X2) на P. 2X1=2S+2R, X2=S+2R, таким образом, 2X1-X2 равно S, а так как S<P то остаток от деления S/P будет равен S. Поскольку R выбирается случайно то X1 и X2 по отдельности похожи на случайные числа. И лишь имея обе части мы можем восстановить S.
Давайте теперь рассмотрим случай, когда N>2 при К=2, то есть для восстановления ключа нужно 2 части, но сам ключ разделен больше чем на 2 части.
Рис. 4.1. Случайный наклон R: по двум точкам можно восстановить прямую, взяв остаток от деления на большое простое число
Представьте координатную плоскость с осями x и y. На оси y отметим точку с координатами (0;S) если провести через эту точку прямую со случайным наклоном R, тогда она пройдет через точки (1;S+R), (2;S+2R),(3;S+3R) и тд. Можно задать сколько угодно много точек.
Для восстановления S нам нужно будет знать любые 2 точки, поскольку через них можно провести единственную прямую, которая пересечет ось y в точке S. При этом зная лишь одну точку узнать S будет невозможно, поскольку через нее можно провести бесконечное множество прямых. Итак, мы рассмотрели пример, когда при сколько угодно большом N нам достаточно K=2 элементов для дешифровки секрета.
А что если необходимо использовать K>2? Для K=3 можно использовать квадратичную функцию, поскольку для восстановления квадратичной кривой достаточно 3 точек. В таком случае уравнение кривой будет S+R1X+R2X2, где R1 и R2 случайные. Кубическая функция S+R1X+R2X2+R3X3 восстанавливается по 4 точкам. Можно продолжать дальше увеличивая степень функции. В любом из случаев можно использовать сколь угодно большое N. Соответственно на практике выбираются необходимые N и K.
Рассмотрим плюсы и минусы. Плюсом является то, что части, необходимые для восстановления секрета, возможно хранить отдельно и злоумышленнику потребуется получить доступ до K хранилищ, чтобы разгадать S. Если каждое из хранилищ имеет высокую защиту, то сделать такое будет очень проблематично. Кроме того, если одна из частей скомпрометирована можно поменять шифр. Другой плюс описанного подхода, что при достаточной разнице между N и K, даже утратив несколько опорных точек можно все равно восстановить ключ, если потери меньше, чем N-K.
Минус данного решения – необходимость собрать информацию из K точек при восстановлении. И то место, где будет производится дешифрация вновь становится единой точкой отказа. Несмотря на всю пользу вышеописанного метода, предпочтительнее было бы генерировать ключи отдельно и использовать их для доступа так же отдельно.
Именно такой подход является основой алгоритма, называемого Multi-Signature или MultiSig.
Предположим, что есть 4 человека и каждый из них генерирует ключевую пару. Кошелек подписывается всеми четырьмя ключами, при этом для открытия достаточно трех ключей из четырех. При таком алгоритме даже если два из четырех ключей скомпрометированы, то этого недостаточно, чтобы потерять средства в хранилище. Так же возможна утеря одного ключа.
В итоге это позволяет сделать безопасным холодное хранилище для большого количества биткоинов, ведь требуются действия нескольких людей для проведения любой операции.
Онлайн-кошельки и обменные биржи.
Прежде обсуждались способы, с помощью которых можно управлять биткоинами самостоятельно. В этой части лекции будет рассказано о сторонних сервисах, которые помогают управлять биткоинами – онлайн кошельках и биржах.
Онлайн кошелек - это вид локального кошелька, которым каждый управляет самостоятельно, только данные хранятся не на локальном устройстве, а в облаке, в качестве интерфейса используется защищенный веб-сервис. Примером может служить Block Chain. Как правило, кроме сайта, дополнительно существует приложение для телефона.
Сайт управляет ключами, и предполагается, что он шифрует эти данные паролем, который знает только владелец ключа. Защищает ключи от несанкционированного доступа и предоставляет доступ к ним только по логину и паролю. Конечно, использование онлайн-кошелька удобно, ведь пользователю не приходится устанавливать дополнительное ПО, заботится о хранении ключей, кроме того один и тот же кошелек доступен и с ПК и с телефона и с любого другого устройства. Однако, владельцы сервиса решат смошенничать, то они могут получить доступ ко всем средствам, ключи от которых хранились в сервисе.
Альтернатива онлайн-кошельку больше похожа на банк в классическом понимании. Проведем аналогию. Если принести деньги в банк, банк фактически обещает вернуть деньги по первому требованию. Разумеется, деньги не просто относят в хранилище и ждут возвращения владельца, их обычно инвестируют в финансовые инструменты. Какую-то часть, как правило откладывают в резерв, объем которого достаточен для исполнения ежедневных операций или даже превышает его. Так же функционируют и биткоин-биржи. Они принимают депозиты в биткоинах и обещают вернуть их по требованию. После открытия счета можно принимать или осуществлять платежи со счета на счет. Кроме того, биржи позволяют обменять другие валюты как реальные, так и цифровые на биткоины, обычно для этого они просто связывают заявку желающего продать с заявкой желающего купить.
Стоит обратить особое внимание на данный пункт. Допустим, у Боба на счете $5000 и 3 биткоина. Он выставил лот на покупку 2 биткоинов по цене $1000 за единицу, и кто-то согласился эти монеты продать. После покупки у Боба на счете будет $3000 и 5 биткоинов, но эти биткоины не появятся в биткоин-кошельке Боба. Потому что сделки осуществляются между биржевыми счетами клиентов. И, совершив вышеописанную, операцию Боб фактически получает не монеты, а обещание от биржи выплатить 5 биткоинов по требованию.
Существует множество за и против существования бирж. Несомненный плюс, что биржи соединяют реальную экономику с биткоином, то есть имея реальные деньги можно свободно купить биткоин или наоборот.
Довод против – то что биржа функционирует как банк, принимая депозиты в обмен на обещание возврата средств, делает возможным ситуацию, когда банк, платежеспособный на бумаге, не может выдать вклад, потому что отдал все деньги в долг какой-нибудь фирме. Особенно это касается ситуаций, когда начинают распространяться плохие слухи, и люди в панике, стараясь спасти свои средства, выводят их.
Другой риск состоит в том, что владелец биржи может быть мошенником. И здесь не требуется дополнительных объяснений.
Третий риск – риск взлома. Биржи, как правило, имеют на счетах значительное количество биткоинов. И любая небрежность или ошибка в хранении и управлении таким ключом может обернуться катастрофой.
Все вышеописанные риски уже срабатывали в реальности. Лучшей иллюстрацией этого может стать статистика, согласно которой 45% бирж закрылись из-за неспособности рассчитаться свкладчиками.
Самый известный пример рухнувшей биржи – Mt. Gox. Сайт, бывший некогда крупнейшим обменником, в одночасье исчез с рынка, оставив пользователей без денег. Сейчас дело расследуется судами в Японии и США, но неизвестно будут ли найдены исчезнувшие вложения и когда это произойдет.
Если посмотреть на банковский сектор, то там нет такого количества банкротств. Причина в том, что правительства как правило регулируют деятельность банков. Одно из требований – это достаточность капитала, обычно от 3 до 10% всех срочных депозитов. То есть у банка должно быть достаточное количество наличной валюты. Кроме того, существуют ограничения на методы инвестирования и управления активами, что снижает вероятность потери банками инвестируемых средств. В обмен на согласие подчинятся требованиям, правительства как правило помогают банкам или, по крайней мере, защищают их вкладчиков. Например, существует страхование депозитов, то есть государство гарантирует при крахе банка возврат вложенных средств или их части. Так же государство может выступить кредитором последней инстанции, выделяя банку кредит в случае острой нехватки собственных средств.
Получается, что основная разница между банками и биткоин-биржами в том, что первые регулируются, а вторые нет. Вопрос стоит ли регулировать биткоин-биржи и как это делать – тема отдельной лекции.
Однако, существует одна интересная возможность с использованием криптографии, которая позволит клиентам биткоин-бирж чувствовать себя в относительной безопасности, она называется доказательство резерва (Proof of Reserve).
Доказательство резерва можно разбить на 2 составляющие. Первая часть делается достаточно легко, биржа публикует валидную транзакцию самой себе на большую сумму, к примеру 100000 биткоинов. Затем биржа подписывает случайно сгенерированную незаинтересованным лицом строку своим закрытым ключом, которым так же подписана предыдущая транзакция в 100000 биткоинов. Это покажет платежеспособность биржи. Обратите внимание, возможно 100000 будет не полной суммой на счетах, а лишь той суммой, которую биржа захотела подтвердить, то естьтранзакция была проведена на 100000 биткоинов из двухсот тысяч.
Вторая часть доказательства – доказательство количества долговых обязательств. То есть сумма, которую биржа обещала вернуть вкладчикам.
Для подсчета нужно воспользоваться деревом Меркла, которое строится из хешей, каждый из которых указывает не только на то, где найти информацию, но и каков ее криптографический хэш. Добавим к каждому из промежуточных хэшей информацию о сумме. То есть для каждого отдельного пользователя будет создан отдельный хэш с суммой , и так для каждого уровня выше вплоть до корня. Таким образом хэш дерева будет содержать информацию о сумме всех вкладов. Биржа подпишет своим криптографическим ключом итоговый хэш.
Если каждый пользователь системы сможет сделать запрос на просмотр своей ветки дерева, то они смогут проверить, что их счет реально включен в общее дерево, что сумма каждого хэша верхнего уровня равна сумме двух нижних. Это не позволит бирже завышать количество клиентов, показывая аккаунты, которых реально не существует.
Имея в распоряжении эти две суммы любой сможет оценить насколько его вклад покрывается резервами и решить для себя стоит ли в нее инвестировать. И таким образом одна из функций регуляторов будет выполнена.