Опубликован: 01.02.2018 | Доступ: свободный | Студентов: 1346 / 258 | Длительность: 17:50:00
Лекция 1:

Биткоин и технологии криптовалюты

Лекция 1: 1234 || Лекция 2 >

Открытые ключи как идентификаторы личности

Рассмотрим один из способов применения цифровых подписей.

открытый ключ = = идентификатор личности

если sig такой, что verify(pk, msg, sig) == true, считается, что pk произносит: "[msg]" и чтобы "говорить от имени" pk, нужно знать соответствующий закрытый ключ sk.

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

Допустим, подпись корректно верифицируется, то есть ее можно проверить с помощью открытого ключа пользователя и она находится в конкретном сообщении. Чтобы подписывать сообщения, необходимо знать закрытый ключ (sk), соответствующий открытому ключу (pk). Проставление подписи фактически аналогично некоторому заявлению от имени этого открытого ключа. Это заявление может сделать только личность, которая владеет закрытым ключом. Соответственно, открытый ключ в данном случае является идентификатором личности.

Как создать новый идентификатор

создаем новую случайную пару ключей (sk, pk):

  • pk – публичное "имя", которое можно использовать (обычно лучше использовать хэш от pk)
  • sk позволяет "говорить от имени" идентификатора

Открытые ключи представляют собой своего рода идентификаторы личности. Отсюда следует, что можно создавать новый идентификатор в любое время. Для этого нужно создать новую пару случайных ключей sk и pk, выполнив операцию генерации ключей в рассмотренной ранее схеме цифровой подписи. pk — это публичное имя, то есть имя личности-идентификатора. На практике чаще всего используется хэш ключа, потому что размер открытого ключа достаточно велик. Таким образом, pk или его хэш является публичным именем, которое используется, чтобы говорить о личности, а sk — секретный ключ — это информация, которая позволяет человеку, создавшему эту личность-идентификатор, говорить от имени этой личности и подтверждать ее. При этом создатель ключей контролирует личность, потому что только он знает секретный ключ, и если ключ сгенерирован случайным образом, то и открытый ключ pk будет случайным. Тогда никто не сможет узнать, кто является владельцем ключа. Можно создать новую личность, которая выглядит случайной, и которую может контролировать только владелец закрытого ключа ее идентификатора.

Децентрализованное управление идентификацией:

  • любой может создать новый идентификатор в любое время в любом количестве!
  • нет центрального места координации

Идентификаторы в системе биткоин называют "адресами".

Рассмотрим подробнее, что такое децентрализованная идентификация. Это значит, что отсутствует необходимость иметь одно место для регистрации пользователей в системе, получения имени пользователя (user name). Не нужно сообщать кому-то о намерении использовать определенное имя. Если нужен новый идентификатор, его нужно просто создать. Любой может создать новый идентификатор в любое время и в любом количестве. Если есть необходимость иметь 5 разных имен, нужно создать пять идентификаторов.

Если нужна анонимность на какое-то время, можно создать новый идентификатор, попользоваться им, а затем выбросить. Все это возможно при децентрализованном управлении идентификацией. И нет центральной точки контроля, так что не нужно иметь ответственного за этот процесс. Система функционирует полностью децентрализованным образом. Таким образом, в реальности биткоин работает с идентификаторами. Эти идентификаторы называются адресами. Поэтому в разговорах о биткоине и криптовалютах часто можно услышать термин "адрес". На самом деле это всего лишь открытый ключ или хэш открытого ключа. Это идентификатор, который кто-то создал из пустоты в рамках децентрализованной схемы управления идентификацией.

Конфиденциальность:

  • Адреса не имеют прямой привязки к реальной личности.
  • Но наблюдатель может связать действия адреса в определенное время и сделать нужные выводы.

Рассмотрим конфиденциальность адресов в системе биткоинов. С одной стороны, адреса, созданные таким образом, не связаны с кем-то в реальном мире. Можно использовать рандомизированный алгоритм для создания случайного pk - адреса. И нет ничего, что связывает этот адрес с его создателем. Это позволяет действовать конфиденциально. С другой стороны, если идентификатор (адрес) выполняет ряд действий в течение определенного времени, путем анализа этих действий можно сделать выводы о том, кто скрывается за этим идентификатором, то есть определить личность его владельца. Вопросу конфиденциальности в криптовалюте, такой как биткоин, будет посвящена целая лекция.

Простая криптовалюта

Рассмотрим, как связаны хэш-функции и цифровые подписи с криптовалютой на примере простой криптовалюты – Гуфикойна ( рис. 1.19).

Принцип работы гуфикойна

Рис. 1.19. Принцип работы гуфикойна

Гуфи может создавать новые монеты в любое время. Новая монета после создания принадлежит Гуфи. Монету можно представить следующей структурой данных. Есть операция CreateCoin (создать монету) и есть уникальный CoinID (ID монеты), который сгенерировал Гуфи. Также есть цифровая подпись Гуфи, которую любой может проверить. Поэтому всякий, получающий монету, может проверить, что подпись действительна и что это подпись этого заявления.

Трата гуфикойнов

Рис. 1.20. Трата гуфикойнов

Второе правило Гуфикойн состоит в том, что владелец монеты может ее передать кому-то другому. Он может ее потратить ( рис. 1.20). Так, например, у Гуфи есть монета, которую он создал. Гуфи делает заявление, в котором говорится: заплатить монету Элис. Элис представлена здесь своим отрытым ключом. Заплатить открытому ключу Элис монету, представленную хэш-указателем, и это все также подписано Гуфи. Так как Гуфи – владелец монеты, то ему следует подписывать всякую транзакцию, которая связана с передачей монеты.

После этого монета станет принадлежать Элис. И она может это доказать, предоставив структуру данных, действительно подписанную Гуфи и указывающую на монету, которая принадлежит Гуфи.

Трата гуфикойнов

Рис. 1.21. Трата гуфикойнов

Теперь Элис может потратить эту монету. На рис. 1.21 в самом низу монета, созданная и подписанная Гуфи. Затем Гуфи передал монету Элис через хэш-указатель с помощью подписанной операции. Элис стала владельцем монеты. Затем она может создать заявление, говорящее: передать эту монету открытому ключу Боба. Вот хэш-указатель на монету. И теперь Элис подписывает данную операцию. То, что Элис была настоящим владельцем этой монеты, можно проверить, пройдя по этой цепочке. Теперь известно, что монета действительна и принадлежит Бобу. Боб является владельцем этой монеты.

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

И тогда тот, кто владеет монетой, может передать ее кому-то другому, подписав заявление о передаче этой монеты человеку X. Достоверность монеты можно проверить, просто пройдя по цепочке и проверяя в ней все подписи. Это Гуфикойн.

Но у Гуфикойн есть большая проблема с безопасностью.

Двойная трата монеты

Рис. 1.22. Двойная трата монеты

Еще раз вернемся к монете Гуфи. Гуфи создал монету, затем передал ее Элис. Элис какое-то время владела монетой.Затем Элис передала эту монету Бобу. А потом она создает такую же структуру данных, но в ней она передает эту же самую монету Чаку и подписывает данную операцию. Чак может не знать о том, что находится в левом верхнем углу этой структуры данных. Например, если Элис просто отдала монету Бобу и не рассказала Чаку. Теперь Чак, смотря на представленную структуру, совершенно справедливо считает, что он — владелец монеты. У Чака есть все основания быть владельцем этой монеты, как и у Боба есть такие же основания быть владельцем этой монеты ( рис. 1.22). В этом заключается проблема — монеты нельзя так передавать.

Проведение операции с одной и той же монетой дважды называется атакой двойного расходования. Атаки двойного расходования — одна из ключевых проблем, которую следует решить в криптовалюте. Гуфикойн не защищен от этой атаки. Хотя криптовалюта Гуфикойн проста для понимания, она не подойдет для построения криптовалюты, потому что в ее структуре может присутствовать двойное расходование. Чтобы криптовалюта была работоспособной, необходимо решить эту проблему. Для этого рассмотрим еще одну криптовалюту – Скруджкойн.

Скруджкойн похож на Гуфикойн, но он защищен от атаки двойного расходования.

Скруджкойн

Рис. 1.23. Скруджкойн

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

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

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

На практике (в биткоине) для оптимизации в один блок помещается сразу несколько транзакций.

Итак, Скрудж публикует историю транзакций. Публикация истории позволяет обнаруживать двойные расходования. Предположим, что у Элис есть монета, она заплатит эту монету Бобу. А позже попытается заплатить эту же монету Чарли.

Чарли заметит, что что-то не так, потому что он сможет просмотреть историю и увидеть, что Элис уже передала эту монету Бобу. Фактически, каждый сможет увидеть, что Элис заплатила эту монету Бобу. Итак, если она попытается заплатить эту же монету Чаку, тогда все увидят, что это двойное расходование, и они смогут отметить эту транзакцию. Скрудж отменит ее, как и все остальные. И еще они поймут, что им не следует доверять Элис.

В Скруджкойн есть два вида транзакций. Первая транзакция — создание новых монет CreateCoins. Это похоже на операцию, которую Гуфи делал в Гуфикойн. Но здесь в одной транзакции можно создавать нескольких монет.

Создание монет Скруджкойн

Рис. 1.24. Создание монет Скруджкойн

ID номер транзакции — 73. Тип транзакции — это создание монет. Ниже расположен список созданных монет. Каждая монета будет иметь серийный номер в этой транзакции: ноль, один, два и т. д. Каждая монета имеет ценность, определенную в Скруджкойн. И каждая монета имеет получателя, который указан в виде открытого ключа. Таким образом, этот тип транзакции создает множество новых монет и присваивает их людям как первоначальным владельцам.

Добавление идентификаторов монет

Рис. 1.25. Добавление идентификаторов монет

Далее в Скруджкойн добавляется идентификатор для каждой монеты (coinID), на который в дальнейшем можно сослаться.

Операция CreateCoins всегда корректна. Если Скрудж помещает это в историю, которую он подписывает, то это корректно по определению. Не имеет значение, имеет ли Скрудж право создавать монеты. Так же как не имело значение, имеет ли Гуфи право создавать монеты. Правила системы, созданной Скруджем, говорят, что если Скрудж хочет создать монеты, то эта операция корректна. Поэтому все, что он выкладывает в историю, корректно.

Транзакция PayCoins потребляет (и уничтожает) некоторые монеты, создавая новые с той же общей ценностью

Рис. 1.26. Транзакция PayCoins потребляет (и уничтожает) некоторые монеты, создавая новые с той же общей ценностью

Второй вид транзакции— транзакция передачи монет PayCoins( рис. 1.26). Транзакция, которая некоторые монеты потребляет, уничтожая, а из них создает новые монеты той же общей ценности, но которые могут принадлежать разным людям. На рис.1.26 показана транзакция 73, ее тип — PayCoins. Перечислен список потребляемых монет. Все эти монеты потребляются и уничтожаются транзакцией PayCoins. Стоимость всех этих монет объединяется и создается ряд новых монет. Как и раньше, в транзакции CreationCoins каждая из них имеет свою ценность и принадлежит определенному получателю.

И новые монеты имеют ровно такую же общую стоимость, как и те, которые были уничтожены.

Внизу расположен набор цифровых подписей. Эта сделка должна быть подписана всеми, кто платит монету. Поэтому, владельцу каждой из монет, которая будет уничтожена в этой транзакции, будет необходимо поставить цифровую подпись, чтобы подтвердить, что он действительно согласен потратить эту монету. Правила Скруджкойн гласят: транзакция PayCoin действительна, если верны все четыре составляющих.

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

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

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

В-четвертых, сделка подписана владельцами всех потребляемых монет. Если все эти составляющие верны, то транзакция PayCoins корректна. Скрудж ее признает и запишет в историю, в цепочку блоков. Тогда каждый увидит, что эта транзакция произошла. В рассмотренной схеме монеты неизменяемы, они никогда не разделяются, никогда не объединяются. Они создаются в одной транзакции, а затем уничтожаются в других транзакциях. Для того чтобы разделить, объединить или заплатить монету, нужно произвести транзакцию.

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

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

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

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

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

Терминологический словарь

Двойное расходование (double spending) – повторная передача одних и тех же активов.

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

Лекция 1: 1234 || Лекция 2 >