Читать книгу «Введение в технологию Блокчейн» онлайн полностью📖 — Тимура Машнина — MyBook.

Деление ключей

До сих пор мы рассматривали различные способы хранения и управления приватными ключами, которые управляют биткойнами, но мы всегда хранили ключ в одном месте – в сейфе, в программном обеспечении или на бумаге.

Это дает нам одну точку отказа.

Если что-то пойдет не так с этим местом хранения, тогда у нас возникнут проблемы.

Мы могли бы создавать и хранить резервные копии ключей, что снижает риск потери или повреждения ключа, но увеличивает риск кражи.

Этот компромисс кажется фундаментальным.

Можем ли мы взять часть данных и сохранить их таким образом, чтобы доступность и безопасность увеличивались одновременно?

Очень хорошо, что ответ «да», и это еще один трюк, который использует криптографию, который называется делением секрета.


Идея заключается в следующем: мы хотим разделить наш приватный ключ на некоторое количество частей N.

Мы хотим сделать это таким образом, чтобы, если мы получим какое-либо количество K этих частей, мы сможем восстановить оригинальный секрет, но, если нам дадут меньше, чем K частей, тогда мы не сможем узнать что-либо об оригинальном секрете.

Учитывая это строгое требование, просто «разрезать» секрет на куски не сработает, потому что даже одна часть дает некоторую информацию о секрете.

Нам нужно что-то умнее.



Предположим, что N = 2 и K = 2.

Это означает, что мы генерируем 2 части на основе секрета, и нам нужны обе части, чтобы иметь возможность восстановить секрет.

Назовем наш секрет S, который является просто большим (скажем, 128-битным) числом.

Мы могли бы генерировать 128-битное случайное число R и сделать две части равными R и (S побитовое исключающее ИЛИ R).

По сути, мы «зашифровали» бы S одноразовым ключом R, и мы сохранили бы ключ (R) и зашифрованный текст (S ИЛИ R) в разных местах.

Ни ключ, ни зашифрованный текст сами по себе ничего не говорят о секрете.

Но, учитывая две части, мы просто собираем их вместе, чтобы восстановить секрет.

Этот трюк работает до тех пор, пока N и K будут одинаковыми – нам просто нужно будет генерировать N-1 разных случайных чисел R для первых N-1 частей, а последней частью будет секрет S – операция ИЛИ – со всеми остальными N- 1 частями.

Но если N больше K, это уже не работает, и нам нужна некоторая алгебра.



Посмотрите на слайд.

Здесь мы должны сначала сгенерировать точку (0, S) по оси Y, а затем нарисовать линию со случайным наклоном через эту точку.

Затем мы создаем точки на этой линии, сколько захотим.

Получается, что это разделение секрета S на N – количество созданных нами точек и K = 2.

Почему это работает?

Во-первых, если мы получим две из созданных точек, мы можем провести через них линию и посмотреть, где она пересечет ось Y.

Это даст нам секрет S.

С другой стороны, если у нас есть только одна точка, она ничего не говорит о секрете S, потому что наклон линии случайный.

Каждая линия в этой точке равно вероятна, и все они пересекают ось Y в разных точках.

Есть только одна тонкость.

Мы берем большое простое число P.

Так, чтобы секрет S был между 0 и P-1, включительно.

Далее мы генерируем случайное значение R, также между 0 и P-1, и создаваемые нами точки

x = 1, y = (S + R) mod P – остаток от деления

x = 2, y = (S + 2R) mod P

x = 3, y = (S + 3R) mod P

и так далее.

Секрет соответствует точке x = 0, y = (S + 0 * R) mod P, которая равна x = 0, y = S.

Таким образом, это способ сделать деление секрета с K = 2 и любым значением N.

Если N = 4, вы можете разделить свой приватный ключ на 4 части и поместить их на 4 разных устройства, чтобы, если кто-то украдет какое-либо из этих устройств, они ничего не узнают о вашем ключе.

С другой стороны, даже если два из этих устройств будут уничтожены, вы сможете восстановить ключ, используя два других устройства.

Как и было обещано, мы увеличили доступность и безопасность.

Но мы можем сделать лучше: мы можем делать деление секрета с любыми N и K, если K не больше N.

Чтобы посмотреть, как это сделать, вернемся к фигуре.

Причина, по которой мы использовали линию вместо некоторой другой кривой, состоит в том, что линия является многочленом степени 1.

Это означает, что для восстановления линии нам нужно не менее двух точек.

Если бы мы хотели сделать K = 3, мы бы использовали параболу, которая представляет собой квадратичный многочлен или многочлен степени 2.



Для построения квадратичной функции необходимы три точки.

Мы можем использовать приведенную таблицу, чтобы понять, что происходит.

Существует формула, называемая интерполяцией Лагранжа, которая позволяет восстановить многочлен степени K-1 из любых K точек на его кривой.

Поэтому, в результате всего этого у нас есть способ хранить любой секрет в виде N частей, чтобы мы были в безопасности, даже если злоумышленник узнает K-1 частей из них.

И в то же время мы можем спокойно утерять N-K частей.

Между прочим, ничего из этого не является специфическим для Биткойна.

Вы можете тайно делить свои пароли прямо сейчас и раздавать части своим друзьям или размещать их на разных устройствах.

Но никто не делает этого с секретами, такими как пароли.

Во-первых, из-за потери удобства.

А во-вторых, потому что существуют другие механизмы безопасности для важных онлайн-учетных записей, например, двухфакторная безопасность с использованием проверки SMS.

Но для Bitcoin, если вы храните свои ключи локально, у вас нет других способов обеспечить безопасность.

Невозможно ограничить доступ к адресу биткойна с помощью SMS-сообщения.

Ситуация отличается от онлайн-кошельков, о которых мы поговорим позже.

Но не принципиально – это просто переносит проблему в другое место.

В конце концов, провайдер онлайн-кошелька должен будет каким-то образом предотвратить одну точку отказа при хранении ключей.

И все равно есть проблема с делением секрета: если мы возьмем ключ, и разделим его.

Когда мы захотим использовать ключ для подписи, нам все равно нужно объединить части и пересчитать первоначальный секрет, чтобы иметь возможность подписать с этим ключом.

Точка, в которой мы объединяем все части, по-прежнему остается одной уязвимой точкой, где злоумышленник может украсть ключ.

Криптография также может решить и эту проблему: если части хранятся на разных устройствах, есть способ генерировать подписи Bitcoin децентрализованным способом, не восстанавливая при этом приватный ключ на каком-то одном устройстве.

Это называется «пороговой подписью».

Здесь наилучшим вариантом использования является кошелек с двухфакторной защитой, который соответствует случаю N = 2 и K = 2.

Скажем, вы настроили свой кошелек на разделение ключей между вашим настольным компьютером и телефоном.

Затем вы можете инициировать оплату на своем настольном компьютере, который создаст частичную подпись и отправит ее на ваш телефон.

После этого ваш телефон уведомит вас о платежных реквизитах – получателе, сумме и т. д. – и запросит подтверждение.

Если вы подтвердите данные, ваш телефон завершит подпись, используя свою долю закрытого ключа и передаст транзакцию в цепочку блоков.

Если на вашем компьютере был вирус, который пытался украсть ваши биткойны, он может инициировать транзакцию, которая отправляет деньги на адрес хакера, но затем вы получите уведомление на своем телефоне для транзакции, которую вы не разрешали, и вы не станете ее подтверждать.

Также существует совершенно другой вариант, позволяющий избежать единственной точки отказа: это мульти подпись, про которую мы говорили раньше.



Вместо того, чтобы брать один ключ и разделять его, сценарий Bitcoin напрямую позволяет вам определить, что контроль над адресом должен быть разделен между разные ключи.

Эти ключи затем могут храниться в разных местах, а подписи производятся отдельно.

Конечно, завершенная подписанная транзакция будет создана в конечном итоге на каком-то устройстве, но даже если злоумышленник будет контролировать это устройство, все, что он сможет сделать, это предотвратить трансляцию транзакции в сеть.

Он не сможет создавать валидные мульти подписи транзакций без участия других устройств.

В качестве примера предположим, что Эндрю, Том, Эд, Джозеф и Стивен, являются соучредителями компании.

И компания имеет много биткойнов.

Мы могли бы использовать мульти подпись для защиты нашего большого хранилища биткойнов.

Каждый из нас сгенерирует пару ключей, и мы будем защищать наше холодное хранилище с помощью 3-из-5 мульти-подписи, что означает, что трое из нас должны подписать, чтобы создать действительную транзакцию.

В результате мы знаем, у нас относительно обеспечена безопасность, при условии, что пятеро из нас хранят ключи отдельно и защищают их по-разному.

Злоумышленнику пришлось бы взломать три из пяти ключей.

Если один или даже двое из нас станут предателями, они не могут украсть монеты компании, потому что для этого нужно как минимум три ключа.

В то же время, если один из нас потеряет ключ, остальные могут перенести монеты на новый адрес и повторно создать ключи.

Другими словами, мульти-подпись помогает управлять большим количеством холодных монет таким способом, который является относительно безопасным и требует действий нескольких людей, прежде чем что-либо произойдет.

Резюмируем.

Пороговые подписи – это криптографический метод, позволяющий использовать один ключ, разделять его на части, хранить их отдельно и подписывать транзакции без восстановления ключа.

Мульти-подписи – это функция скрипта Bitcoin, с помощью которой вы можете указать, что управление адресом разделяется между несколькими независимыми ключами.

Хотя между ними существуют некоторые различия, они повышают безопасность, избегая одиночных точек отказа.

Интернет-кошельки и обменники

До сих пор мы говорили о том, как вы можете хранить и управлять своими биткойнами.

Теперь мы поговорим о том, как вы можете использовать услуги сторонних сервисов которые помогают вам в этом.

Первое, что вы можете сделать, это использовать онлайн-кошелек.

Онлайн-кошелек похож на локальный кошелек, которым вы можете управлять самостоятельно, за исключением того, что информация хранится в облаке, и вы получаете к ней доступ с помощью веб-интерфейса на вашем компьютере или с помощью приложения на вашем смартфоне.


Некоторые популярные онлайн-кошельки показаны на слайде.

Что особенно важно с точки зрения безопасности, так это то, что сайт предоставляет код, который работает в вашем браузере или приложении, а также хранит ваши ключи.

В идеале сайт будет шифровать ваши ключи под паролем, который только вы знаете, но, конечно, вы должны доверять этому сайту, чтобы он это делал.

Вы должны доверять коду сайта, чтобы не потерять ваши ключи или ваш пароль.

У онлайн-кошелька есть определенные преимущества.

Большим преимуществом является то, что это удобно.

Вам не нужно ничего устанавливать на вашем компьютере, чтобы иметь возможность использовать онлайн-кошелек в своем браузере.

На вашем телефоне вам, возможно, просто нужно будет установить приложение, которому не нужно будет загружать цепочку блоков.

Оно будет работать на нескольких устройствах – у вас может быть один кошелек, доступ к которому вы можете получить на своем настольном компьютере и на своем телефоне, при этом реальный кошелек будет находиться в облаке.

С другой стороны, у онлайн-кошелька есть проблемы с безопасностью.

Если сайт или люди, которые управляют сайтом, оказываются злоумышленниками или каким-то образом скомпрометированы, ваши биткойны находятся в беде.

В идеале, сайт управляется профессионалами по безопасности, которые лучше обучены или, возможно, более старательны, чем вы, при обеспечении безопасности.

Поэтому вы можете надеяться, что они выполняют эту работу лучше и что ваши монеты на самом деле в большей безопасности, чем если бы вы хранили их сами.

Теперь обсудим обменники биткойнов.

Чтобы понять обменники биткойнов, давайте сначала поговорим о том, как банки работают в традиционной экономике.

Вы даете банку немного денег как депозит – и банк обещает вернуть вам эти деньги позже.

Разумеется, на самом деле, банк фактически не берет ваши деньги и не кладет их в ящик в задней комнате.

Весь банк – это обещание, что, если вы потребуете деньги, банк вернет их.

Банк, как правило, берет деньги и помещает их в другое место, то есть инвестирует.

Возможно, банк хранит немного денег в резерве, чтобы гарантировать, что он сможет удовлетворить требование о снятии средств.

Многие банки обычно используют что-то вроде частичного резервирования, когда на всякий случай они хранят определенную долю всех депозитов до востребования.

Теперь, обменники биткойнов – это компании, которые, по крайней мере, с точки зрения пользовательского интерфейса, похожи на банки.

Они принимают депозиты биткойнов и, как банк, обещают вернуть их по требованию позже.

Вы также можете положить на депозит традиционную валюту, такую как доллары и евро в обменник, совершив перевод с вашего банковского счета.

Также обменник позволяет выполнять различные банковские операции.

Вы можете совершать и получать платежи по биткойну, обменять биткойны на валюту или наоборот.

Как правило, они делают это, находя клиента, который хочет купить биткойны за доллары, и другого клиента, который хочет продать биткойны за доллары и соединяют их.

Другими словами, они пытаются найти клиентов, готовых принять противоположные позиции в транзакции.

Если цена взаимоприемлема, они завершают эту транзакцию.

Важно отметить, что, когда эта транзакция происходит с участием меня и другого клиента одного и того же обменника, транзакция на самом деле не фиксируется в цепочке блоков биткойнов.

Обменнику не нужно привлекать цепочку блоков, чтобы перенести биткойны или доллары с одного счета на другой.

Есть плюсы и минусы использования обменников.

Одним из главных плюсов является то, что обменники помогают подключить экономику биткойнов к традиционной валютной экономике, чтобы легко обменивать деньги.

Однако при этом возникают те же риски, как и те, когда вы сталкиваетесь с банками, и эти риски делятся на три категории.

Первым риском является риск ликвидности банка.

Когда много людей одновременно хотят вернуть свои деньги.

Поскольку банк поддерживает только частичное резервирование, он может не справиться с одновременным снятием всех средств.

Это своего рода паническое поведение, когда, как только появляется слух, что банк или биржа могут быть в беде, тогда люди толпой пытаются снять деньги, и вы получаете своего рода лавину.

Второй риск заключается в том, что владельцы банков могут просто быть мошенниками, создающими пирамиду.

Это схема, когда кто-то убеждает людей давать им деньги в обмен на прибыль в будущем, но затем фактически берет их деньги и использует их для выплаты прибыли людям, которые внесли деньги раньше.

Третий риск – это взлом, риск того, что кто-то, возможно, даже сотрудник обменника, сумеет взломать обменник.