Вы находитесь на странице: 1из 196

Криптографические хэш-функции

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

Криптографическая хэш-функция является математической функцией. Она характеризуется тремя


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

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

Хеш-функция:

 на вход получает любую строку


 на выходе выдает строку фиксированного размера (в этом курсе длина строки 256 бит)
 эффективно вычисляема

Криптографические свойства хэш-функции:

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

Рис. 1.1. Стойкость к коллизиям

1-е свойство хэш-функций: стойкость к коллизиям ( рис. 1.1).

Никто не может найти такие x и y, чтобы

х!= y и H(x)=H(y).
То есть невозможно подобрать различные значения x и y, для которых значения хэш-функции
совпадают.

Хеш-функцию также называют функцией свертки, а значение функции для конкретного x –


сверткой.

На рис. 1.1 красные стрелки показывают значение x и его свертку — H(x), и y с сверткой H(y).
Обратите внимание, что на рисунке сказано:"Никто не может найти". Но этот не значит, что
коллизии не существуют. Коллизии существуют, и чтобы понять почему, необходимо обратиться к
рис. 1.2.

Рис. 1.2. Коллизии существуют

Слева на рис. 1.2 изображены все возможные значения на входе хэш-функции. Значение может быть
строкой любого размера. А справа — все возможные результаты, которые должны быть размером
256 бит. Итак, справа - результаты, и их всего 2256 возможных значений. Слева же значений больше.
Вопрос в том, сможет ли кто-либо обнаружить коллизию ( рис. 1.3).
Рис. 1.3. Можно ли найти коллизию?

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

То есть коллизии существуют, и ключевой вопрос в том, можно ли их найти?

При этом есть гарантированно работающий метод поиска коллизии:

Нужно взять 2130 случайных значений на вход (левое облако на рис. 1.3). Проверив все эти 2130
значения, можно сказать, что есть вероятность, равная 99,8%, что, по крайней мере, два из них будут
образовывать коллизию.

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

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

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

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

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

Какая польза от использования хэш-функций? Например, устойчивую к коллизиям хэш-функцию


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

Предположим, есть большой файл. И нужно иметь возможность проверить позже, является ли
другой файл тем же файлом, который был изначально, не были ли внесены изменения. Можно
сохранить у себя копию, и при необходимости сравнить ее с оригиналом. Но можно поступить
проще и эффективнее - просто запомнить хэш исходного файла. Затем, если кто-то показывает новый
файл и утверждает, что это тот же самый, можно вычислить хэш этого нового файла и сравнить с
имеющимся. Если значения хэш одинаковы, можно сделать вывод, что файлы одинаковые.
Это очень эффективный способ запомнить то, что было раньше, и проверить достоверность позже. И
это, безусловно, полезно, потому что размер значения хэш небольшой — всего лишь 256 бит.
Исходный файл может быть очень большим.

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

Допустим, кто-то подбрасывает монетку. И если выпадает "орел", то на выходе возвращается хэш
строки "орел". А если — "решка", то — хэш строки "решка".

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

Если хэш-функция необратима, то не должно быть случая, когда значение х можно легко вычислить,
зная H(x). То есть, х должен выбираться из ряда, который до некоторой степени не определён и
широк. Так что попытка подобрать возможные значения х или выбрать из нескольких похожих
значений не сработает.

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

Если r выбрано из распределения вероятностей с высокой min-энтропией, то для данного H(r|x),


невозможно найти x.

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

H (r|x) означает, что берутся все биты значения r и за ними помещаются все биты значения x. То есть,
если берется хэш значения r с хэшем значения х, из этого объединения невозможно вернуть х. И это
будет истинно для формально определенного свойства, что если r — случайное значение, выбранное
из распределения вероятностей с высокой min-энтропией, то для данного H (r|x), невозможно найти
x. Что значит высокая min-энтропия? Это можно описать так, что r выбирается случайно из
огромного количества различных значений. Так, например, если r выбирается равномерно из всех
строк длиной 256 бит, то любая конкретная строка выбиралась с вероятностью 1 из 2256, то есть 2-256, а
это действительно очень малое число. Итак, до тех пор, пока r выбирается таким образом, хэш r,
объединенный с x, будет скрывать x.

Теперь давайте рассмотрим применение этого свойства – обязательство (commitment). Это своего
рода цифровая аналогия, когда берется значение и запечатывается в конверте. Конверт кладется на
стол, где всякий может его увидеть. То есть фиксируется то, что находится в конверте.

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

API обязательства

(com, key) := commit(msg)

match := verify(com, key, msg)


Чтобы запечатать msg в конверте:

(com, key) := commit(msg) – затем опубликовать com

Чтобы открыть конверт:

опубликовать key, msg

любой может использовать verify(), чтобы проверить валидность.

В криптографии схема обязательства является методом, позволяющим пользователю подтверждать


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

Чтобы создать обязательство, используются секретный ключ(key) и сообщение (msg). Данный


процесс вернет два значения - обязательство (com) и ключ (key).

(com, key) := commit(msg)

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


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

match := verify(com, key, msg)

Чтобы в определенный момент позволить проверить содержимое конверта, необходимо


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

Свойства безопасности обязательства:

1 свойство - необратимость: для данного com, невозможно найти msg.

2 свойство - невозможно найти msg1!= msg2 такое, чтобы verify(commit(msg1), msg2) == true

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


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

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

Откуда известно, что эти два свойства неизменны? Для начала нужно рассмотреть, как можно их
использовать.

commit(msg) := (H(key | msg), key)

где key – случайное значение 256 бит

verify(com, key, msg) := (H(key | msg) == com)

Свойства безопасности:
Необратимость: для данного (H(key|msg), невозможно найти msg.

Фиксация: невозможно найти msg1!= msg2 такое, чтобы

(H(key|msg1) == (H(key|msg2)

Чтобы создать обязательство сообщения, генерируется случайное 256-битное значение - ключ. В


качестве обязательства возвращается хэш конкатенации ключа и сообщения (H(key|msg)). В качестве
значения ключа используется хэш этого ключа. Чтобы сделать проверку, нужно вычислить хэш
ключа, объединенного с сообщением.

Перейдем к свойствам безопасности.

для данного H(key|msg), невозможно найти msg.

То есть для данного обязательства (com= H(key|msg)) невозможно найти сообщение (msg).

Это свойство необратимости, которое было рассмотрено ранее. Ключ — это случайное 256-битное
значение. Свойство необратимости гласит, что если будет взято сообщение, и перед ним поставлено
значение, которое было выбрано случайным образом и размером 256 бит, тогда невозможно найти
значение сообщения.

Следующее свойство – стойкость к коллизиям. Невозможно найти два разных сообщения, с


одинаковым хэшем.

Обязательство: невозможно найти msg1 != msg2 такое, чтобы

(H(key | msg1) == (H(key | msg2)

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

3-е свойство хэш-функций - открытость для сложного вычисления.

Для любого возможного значения на выходе y, если k берется из распределения с высокой min
энтропией, невозможно найти такой x, чтобы H(k | x) = y.

Для любого возможного значения на выходе — y, которое можно получить из хэш-функции, если k
выбрано случайным образом из распределения с высокой min-энтропией, нет возможности найти x,
так чтобы хэш конкатенации k и x был равен y.

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

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

Применение: сложная поисковая задача

При заданном идентификаторе задачи (puzzle ID) id (из распределенной последовательности с


высокой min-этропией) и целевым значением Y:

Пытаться найти решение x, такое чтобы


H(id | x) ∈ Y

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

Идея состоит в том, имеется идентификатор задачи (id), который выбирается из некоторой высокой
распределенной случайной последовательности с высокой min-энтропией. И задана цель — Y,
которая должна быть равна хэш-функции. Необходимо попытаться найти решение - x. Таким
образом, если хэшировать идентификатор задачи (ID) вместе с решением X, будет получен
результат, который находится в заданном Y. Y — это целевой диапазон или набор желаемых
результатов хэширования. ID определяет конкретную задачу, а x — ее решение.

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

Рис. 1.4. Стойкость к коллизиям

Она называется SHA-256 и работает следующим образом. Берется сообщение, которое необходимо
хэшировать, и разбивается на блоки размером 512 бит (синие блоки на рис. 1.4). Сообщение не
должно быть кратно размеру блока, поэтому в конце будет добавляться дополнение (padding ). В
конце дополнения будет поле длиной 64 бит, которое обозначает длину сообщения в битах. А перед
дополнением будет стоять один бит, за которым следует некоторое количество нулевых бит, чтобы
заполнить блок до конца. Когда длина сообщения станет кратной блоку размером 512 бит, оно
разбивается на эти блоки. Потом выполняется вычисление. Оно начинается с 256-битного значения,
называемого IV. Это номер, который можно просмотреть в стандартном документе. Берется IV и
первый блок сообщения, получается 768 бит, и пропускается через функцию сжатия. На выходе
получается 256 бит. То же самое делается со следующими 512 битами сообщения – этот цикл
продолжается до конца. Каждая итерация сжимает последующий 512-битный блок сообщения и
включает его в логический результат. Результатом вычисления станет хэш, размером 256 бит. При
этом нет проблемы доказать, что если функция обладает свойством стойкости к коллизиям, то вся
хэш-функция также будет обладать стойкостью к коллизиям. В этой части лекции были рассмотрены
хэш-функции, их свойства и использование этих свойств. Описана хэш-функция, которая
используется в биткоине. В следующем разделе лекции будут рассмотрены способы использования
хэш-функций для создания более сложных структур данных, которые используются в
распределенных системах, таких как биткоин.

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

Бит – единица измерения информации в двоичной системе счисления.

Хеширование (англ. hashing) — преобразование массива входных данных произвольной длины в


(выходную) битовую строку фиксированной длины, выполняемое определённым алгоритмом.

Хешем (хэш-суммой, хэш-кодом) называется результат обработки неких данных хэш-функцией.

Хеш-функция – алгоритм, конвертирующий строку произвольной длины (сообщение) в битовую


строку фиксированной длины, называемую хэшем, хэш-кодом.

Криптография — наука о методах обеспечения конфиденциальности (невозможности прочтения


информации посторонним), целостности данных (невозможности незаметного изменения
информации), аутентификации (проверки подлинности авторства или иных свойств объекта), а также
невозможности отказа от авторства.

Криптографическая хэш-функция — всякая хэш-функция, являющаяся криптостойкой, то есть


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

Коллизия хэш-функции — это равенство значений хэш-функции на двух различных блоках данных.

Хеш-указатели и структуры данных

Хеш-указатель ( рис. 1.5) – это указатель на место хранения информации и (криптографический )


хэш этой информации

Имея хэш-указатель, можно

 запросить информацию, на которую он указывает обратно


 верифицировать то, что хэш не изменился, как следствие, не изменилась информация.

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


также дает возможность проверить, изменилась информация или нет. Следовательно, хэш-указатель
показывает, где что-то расположено и каково его значение.
Рис. 1.5. Изображение хэш-указателя

На рис. 1.5 показано, как в лекциях будет изображаться хэш-указатель. H( ) – хэш информации и
стрелка, указывающая на эту информацию.

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

Рис. 1.6. Определение искажений

Для примера рассмотрим связный список, построенный с хэш-указателями( рис. 1.6). Эта структура
данных называется цепочкой блоков (блокчейн).

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

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

Предположим, злоумышленник хочет изменить блок данных ( рис. 1.7) так, чтобы владельцы хэш-
указателя в заголовке не смогли обнаружить вмешательство.

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

Рис. 1.8. Определение искажений


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

Рис. 1.9. Определение искажений

Если, конечно, злоумышленник также не подделает блок справа как показано на рис. 1.9. Но если он
это делает, хэш этого блока не будет соответствовать хэшу, показанному как крайнее правое
значение H(). А это значение злоумышленник не может изменить, потому что сохраненное значение
является заголовком всего списка. И если злоумышленник хочет подделать данные в какой-либо
точке данной цепочки, то, чтобы сохранить согласованность, ему придется изменять хэш-указатели
вплоть до начала. В итоге он столкнется с серьезной проблемой, потому что не сможет подделать
заголовок списка. Все это означает, что сохранение данного хэш-указателя является средством
контроля изменений всего списка от начала до конца. Поэтому можно построить цепочку блоков
похожую на эту, содержащую столько угодно блоков, но в начале имеющую особый блок, который
можно назвать генезис-блоком. Все это представляет собой журнал контроля изменений,
построенный из последовательности блоков.
Рис. 1.10. Определение искажений

Следующей полезной структурой данных, которую можно построить с помощью хэш-указателей,


является двоичное дерево. Такое дерево называется деревом Меркла, в честь Ральфа Меркла,
который его изобрел.

Есть ряд блоков данных, которые располагаются внизу дерева ( рис. 1.10). Для каждой
последовательной пары этих блоков строится структура данных, которая имеет два хэш-указателя,
по одному для каждого из этих блоков. На уровне выше каждый блок будет содержать хэш-указатель
этих двух дочерних элементов. И так далее, вплоть до корня дерева. И здесь в начале дерева, как и в
предыдущем примере, сохраняется только хэш-указатель. По хэш-указателям можно перейти к
любой точке списка. И можно убедиться, что данные не были изменены. Подобно ранее
рассмотренной цепочке блоков, если злоумышленник исказит какой-то блок с данными внизу, это
приведет к тому, что хэш-указатель на уровне выше будет другим. Поэтому он должен будет
изменить и его. Затем ему придется изменить хэш-указатель, находящийся на уровень выше. И в
конце концов он дойдет до вершины, где он не сможет изменить сохраненный хэш-указатель. Таким
образом, любая попытка изменить любую часть данных внизу будет вскоре замечена только
благодаря сохраненному хэш-указателю наверху.

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

Поэтому, если сохранен только корень, и кто-то хочет доказать, что блок находится в дереве Меркла,
он должен показать блок с рисунка рис. 1.11. Можно пройти по всему до блока данных, проверяя на
соответствие сохраненные хэши. И только проверив хэши до корня, можно убедиться, что этот блок
данных находится в дереве Меркла. Таким образом, если будет O(log n) элементов, которые нужно
отобразить, то требуется O(log n) времени, чтобы их проверить. И поэтому даже при очень большом
числе блоков данных в дереве Меркла, можно проверить достоверность их принадлежности за
относительно короткое время.

Преимущества дерева Меркла:

В дереве содержится множество элементов, но помнить необходимо только хэш корня.

Можно проверить вхождение за О(log n) время/пространство

Разновидность: сортированное дерево Меркла

Можно проверить на вхождение за O(log n) (показать элементы перед, после пропавшего)

Таким образом, деревья Меркла имеют различные преимущества. Одно из них состоит в том, что
дерево содержит много элементов, но нужно помнить только корневой хэш, который составляет
всего лишь 256 бит. Можно проверить принадлежность к дереву Меркла в логарифмическом
времени и логарифмическом пространстве. Есть разновидность дерева Меркла — сортированное
дерево Меркла. Это то же самое дерево, но здесь блоки, расположенные внизу, сортируются в
определённом порядке. Скажем, алфавитном, лексикографическом или числовом, или каком-либо
другом. Как только дерево отсортировано, можно проверить достоверность данных в нем. То есть
можно доказать, что конкретный блок не находится в дереве Меркла. Для этого нужно указать путь к
элементу, который находится непосредственно перед тем, где будет этот элемент, и сразу после того
места, где он должен быть. И тогда можно сказать, что оба эти элемента находятся в дереве Меркла,
они последовательны. И поэтому между ними нет места. Между ними нет ничего, поэтому не может
быть доказательства, что они не являются членами дерева. Итак, дерево Меркла — это дерево
двоичного поиска, построенное с помощью хэш-указателей, в котором можно осуществить проверку
членства логарифмическим временем, либо сортировкой, и это очень эффективно.

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

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

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

Структура данных — программная единица, позволяющая хранить и обрабатывать множество


однотипных и/или логически связанных данных в вычислительной технике.

Связные списки — базовая динамическая структура данных в информатике, состоящая из узлов,


каждый из которых содержит как собственно данные, так и одну или две ссылки ("связки") на
следующий и/или предыдущий узел списка.

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

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

Цифровые подписи

Цифровая подпись представляет собой второй криптографический примитив вместе с хэш-


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

Требования к подписям:

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

Вопрос в том, как это можно реализовать в цифровой форме с использованием криптографии?
Рис. 1.12. API цифровых подписей

API для цифровых подписей показан на рис. 1.12.

Есть три операции, которые необходимо сделать. Первая – генерация ключей с помощью операции
generateKeys. Входным параметром служит значение размера ключа (keysize) в битах. Эта процедура
генерирует два ключа — sk и pk. sk — закрытый, секретный ключ подписи. Это информация,
которую необходимо держать в секрете и использовать для создания своей подписи. А pk - это
открытый, общедоступный ключ проверки, который можно дать любому, чтобы он мог проверить
достоверность подписи.

Вторая операция — это операция подписи. Здесь используется закрытый ключ подписи и сообщение,
на котором необходимо поставить подпись. Это действие возвращает sig (комбинацию битов),
которая является подписью. И затем, третья операция — это проверка, которая берет то, что
считается истинной подписью и проверяет ее достоверность. Для ее выполнения берется открытый
ключ подписывающего лица, подписанное сообщение и подпись. Эта операция отвечает на вопрос,
настоящая ли это подпись, возвращая значение "да" или "нет".

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

Требования к подписям:

1. "достоверные подписи подтверждаются": verify(pk, message, sign(sk,message)) == true


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

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

Рис. 1.13. Игра со злоумышленником

На рис. 1.13 слева находится бросающий вызов телевизионный судья, который собирается проверить
заявление взломщика. Взломщик утверждает, что он может подделывать подписи. Необходимо
проверить это заявление. Первое, что нужно сделать, - с помощью функции generateKeys
сгенерировать закрытый и открытый ключи, которые соответствуют друг другу. Закрытый ключ
остается у судьи, открытый предоставляется и судье и взломщику ( рис. 1.14).

Рис. 1.14. Генерация ключей

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

Если говорить о применении к реальности, то реальный злоумышленник может видеть настоящие


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

Взломщик собирается отправить сообщение (m0) судье ( рис. 1.15). Судья подписывает это
сообщение и отправляет подписанное обратно. Взломщик может посмотреть на это, почесать голову,
и отправить другое сообщение (m1).

Рис. 1.16. Получение злоумышленником подписанных сообщений от судьи

Судья подпишет и его ( рис. 1.16). Взломщик может отправить любое количество сообщений и
получить на них подписи.

Как только взломщик удостоверится, что увидел достаточно подписей, он выберет сообщение m, на
котором хочет подделать подпись, и попытается это сделать ( рис. 1.17).
Рис. 1.17. Подделка подписи под сообщением

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

После получения бросающий вызов запустит алгоритм проверки, с помощью открытого ключа ( рис.
1.18).

Рис. 1.18. Проверка подписи, которую подделал злоумышленник

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

Необходимо отметить, что вероятность выигрыша у взломщика ничтожно мала. Цифровая подпись
не может быть подделана, если у взломщика есть ничтожно малый шанс подделать сообщение, вне
зависимости от используемого им алгоритма. Если говорить о практических аспектах применения
цифровой подписи, необходимо отметить, что рассматриваемые алгоритмы рандомизированы (по
крайней мере, некоторые из них). Поэтому для их реализации необходим хороший источник
случайности. Недостаточная степень случайности сделает алгоритм небезопасным. Также на
практике есть ограничение на размер сообщения, которое можно подписать, потому что реальные
схемы будут работать с битовыми строками ограниченной длины. Решением этой проблемы будет
использование хэша сообщения, а не его всего. В этом случае сообщение может быть очень
большим, а хэш содержать всего 256 бит.

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

Биткоин использует определенную схему цифровой подписи, которая называется ECDSA. Это
алгоритм цифровой подписи с эллиптической кривой, стандарт правительства США. В рамках
данного курса не будут рассматриваться детали его работы, которые основываются на достаточно
сложной математике. Заострим внимание только на том, что для ECDSA важна высокая степень
случайности. При этом особенностью ECDSA является то, что даже если недостаточная степень
случайности используется только в процессе подписи, а сам ключ совершенен, это всё равно
приведет к его потере.

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

Электронная подпись, цифровая подпись — реквизит электронного документа, полученный в


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

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

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

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

если 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 всегда корректна. Если Скрудж помещает это в историю, которую он
подписывает, то это корректно по определению. Не имеет значение, имеет ли Скрудж право
создавать монеты. Так же как не имело значение, имеет ли Гуфи право создавать монеты. Правила
системы, созданной Скруджем, говорят, что если Скрудж хочет создать монеты, то эта операция
корректна. Поэтому все, что он выкладывает в историю, корректно.

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

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

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

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

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

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

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

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

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

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

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

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

Также нужно решить проблему присвоения идентификаторов ID децентрализованным образом.


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

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

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

Доверительный центр – организация, осуществляющая регистрацию, хранение и распространение


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

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

Децентрализация - это важное понятие не только для Биткоина. Противостояние централизации и


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

Рассмотрим некоторые технические аспекты децентрализации Биткоина. Для этого разберем 5


следующих вопросов:

1. Кто ведет регистр сделок?


2. Кто обладает полномочиями чтобы определять, какие операции являются действительными?
3. Кто создает новые Биткоины?
4. Кто определяет правила системы?
5. Как Биткоины приобретают обменную стоимость?

Это практически все характеристики децентрализации протокола Биткоина. Существуют также


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

Рассмотрим три разных аспекта Биткоина с точки зрения централизации и децентрализации.

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

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

Третий аспект касается обновлений программного обеспечения. Под этим подразумевается


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

Терминологический словарь
Биткоин - новое поколение децентрализованной цифровой валюты, созданной и работающей только
в сети интернет

Криптовалюта – это цифровая валюта, единица которой – цифровая монета. Цифровая монета
защищена от подделки, так как представляет собой зашифрованную информацию, скопировать
которую невозможно.

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


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

Одноранговая сеть - децентрализованная компьютерная сеть, основанная на равноправии


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

Скруджкойн - централизованная криптовалюта, предшественник Биткоин

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

Централизация сетевой работы — выделение сервера, выполняющего особые функции.

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

Распределенный консенсус

Ранее рассматривались централизация и децентрализация в общем. Теперь можно говорить на


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

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


цель таких исследований – обеспечение надежности распределенных систем. Что имеется в виду?
Допустим, администратор отвечает за серверное приложение такой компании, как Google или
Facebook. Эти компании, как правило, имеют тысячи или даже миллионы серверов, которые
образуют массивную распределенную базу данных. Она записывает все действия, которые
происходят в системе, комментарии пользователей, сообщения и так далее.

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

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

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

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

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

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


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

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

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

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

Рис. 2.1. Алиса платит Бобу


Хэш-указатель позволяет Алисе связать эту транзакцию со всеми предыдущими транзакциями этой
монеты. И Алиса собирается разослать это всем одноранговым узлам Биткоин. Отметим, что
компьютера Боба нет на рис. 2.1.

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

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

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

Рис. 2.2. Как консенсус может работать в Биткоин

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

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

Применение традиционной теории распределенного консенсуса в Биткоин выглядит похоже, но не


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

Одним из конкретных последствий такой высокой задержки является отсутствие представления о


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

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


пессимистична. Было множество доказательств невозможности добиться результата. Одно из
доказательств, которое хорошо известно и довольно просто в понимании, называется задачей
византийских генералов. Существует также гораздо более тонкая, известная по именам авторов,
Теорема Фишера, Линча и Патерсона о невозможности консенсуса в системе со сбоями. В некоторых
условиях, которые включают узлы, действующие определенным образом, они доказали, что
консенсус невозможен даже при одном неисправном процессе. Несмотря на эти доказательства,
существует несколько известных протоколов. И Paxos (Паксос), вероятно, один из самых известных.
Он создает определенные компромиссы. Никогда не производится непоследовательный результат,но
допускается, что при определенных условиях, хотя и редких, протокол может застрять и не добиться
какого-либо прогресса.

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


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

Еще одна особенность Биткоин заключается в том, что понятия конкретной отправной точки и
конечной точки для консенсуса не используются. Вместо этого консенсус происходит в течение
длительного периода времени, примерно часа на практике. Но даже в конце этого времени, нельзя со
100% уверенностью сказать, что конкретная транзакция или блок был встроен в цепочку блока
консенсуса. Чем больше времени проходит, тем больше вероятность того, что блок попадет в
цепочку консенсуса. И вероятность ошибки в предположении о выполнении транзакции падает в
геометрической прогрессии.

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

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

Альткойн-альтернативный вариант криптовалюты, появились после успеха Биткоина. Они


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

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

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

Протокол консенсуса- правила по обмену информацией между пользователями с целью достичь


общего соглашения посредством распределенного принятия решений.

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

Транзакция - группа логически объединённых последовательных операций по работе с данными,


обрабатываемая или отменяемая целиком.

Хэш –блок данных фиксированного размера.

Консенсус без идентификации: блокчейн

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

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

Биткоин не гарантирует полную анонимность в том, что касается различных сделок, которые
совершаются и вероятнее всего связаны вместе. Но в то же время никто не заставляет оставлять
личные данные, такие как имя или IP-адрес для того, чтобы участвовать в одноранговой сети и в
цепочке блоков. Чем можно заменить постоянную идентификацию узлов? Предположим, есть
возможность каким-то образом выбрать случайный узел в системе. То, что получается при таком
выборе называется неявным консенсусом.

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

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

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

Упрощенный алгоритм консенсуса:

1. О новых транзакциях оповещаются все узлы


2. Каждый узел собирает новые транзакции в блоки
3. В каждом круге произвольный узел принимается транслировать свой блок
4. Другие узлы принимают этот блок только если все транзакции – действующие (имеют
действующие подписи)
5. Узлы выражают принятие блока, включая его хэш в следующий блок, который они создают.

Именно так выглядит общий алгоритм консенсуса в Биткоин.

Описание алгоритма сильно упрощено, так как процесс выбора случайного узла назван
"волшебным". Тем не менее оно близко к тому, как работает Биткоин на самом деле. Поэтому всякий
раз, когда Алиса захочет заплатить Бобу, она создаст транзакцию и транслирует ее на все узлы. И
любой из этих узлов постоянно будет проверять сеть и собирать список непогашенных транзакций,
которые еще не вошли в блокчейн.

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

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

Рис. 2.3. Что может сделать вредоносный узел?

Допустим, есть пара блоков в цепочке блоков ( рис. 2.3). Предположим, что она простирается далеко
влево и этот путь называется блоком генезиса (создания блокчейна). Указатель представляет собой
блок, ссылающийся на предыдущий блок, расширяющий его, используя хэш этого предыдущего
блока и своё собственное содержание.
Предположим, есть злоумышленник, назовем его Алиса. Что она может сделать?

Может ли она просто украсть Биткоины, принадлежащие другому пользователю с другим адресом,
который она не контролирует?

Даже если сейчас очередь Алисы предложить следующий блок в блокчейн, она не может украсть
Биткоины другого пользователя. Почему? Она не может подделать его подписи.

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

Другими словами, ее узел отказывается подчиняться Бобу. Это реальная атака, которую она может
попытаться предпринять, но она вызовет только небольшую задержку. Если блок Боба не попадет в
следующий блок, который предлагает Алиса, он просто, пока правильный узел не получит шанс
предложить его блок, и тогда его транзакция попадет в этот блок.

Таким образом, единственное, что вредоносный узел может попытаться сделать, называется атакой
двойного расхода (double-spend). Чтобы разобраться, предположим, что Алиса является клиентом
какого-то интернет-магазина или веб-сайта под управлением Боба, который предоставляет
некоторый онлайн-сервис в обмен на оплату в Биткоин. Допустим, он позволяет скачать какое-то
программное обеспечение. Как может сработать двойной расход? Алиса заходит на сайт Боба и
решает купить товар, платит Биткоинами, в техническом плане, это значит, что она собирается
перевести Биткоин со своего адреса на адрес Боба. Она транслирует это в сеть. И какой-то
правильный узел создает следующий блок, принимает транзакцию и включает ее в блок ( рис. 2.4).

Рис. 2.4. Что может сделать вредоносный узел? Алиса заплатила Бобу.

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

Сделка - это структура данных, которая содержит подпись Алисы, инструкцию для оплаты с
помощью открытого ключа Боба, а также хэш. Хэш представляет собой указатель на транзакцию, где
Алиса, по сути, получила эту монету от кого-то другого. И это должно быть указателем на
транзакцию, которая была включена в какой-то предыдущий блок в цепочке консенсуса ( рис. 2.5).
Рис. 2.5. Что может сделать вредоносный узел? Алиса заплатила Бобу.

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

Рис. 2.6. Что может сделать вредоносный узел? Указатель на предшествующий блок.

Предположим, что при следующем вызове случайного узла этот узел будет вредоносным узлом,
контролируемым Алисой.

Боб уже посмотрел на этот Блокчейн, решил, что Алиса заплатила ему, и позволил Алисе скачать
программное обеспечение (то, что она покупала на своем сайте).

Боб доволен, сделка завершена, Алиса теперь получила свой товар в обмен на оплату.

Теперь, Алиса могла бы предложить блок, который выглядит так.


Рис. 2.7. Что может сделать вредоносный узел? Появляется блок для двойного расхода.

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


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

Это классический случай двойного расхода. Алиса создает новую транзакцию, которая переводит
монету, вместо адреса Боба, на другой адрес, принадлежащий ей ( рис. 2.8).

Рис. 2.8. Что может сделать вредоносный узел? Атака двойного расхода

Вот так выглядит попытка двойных расходов. Как узнать, будет ли эта попытка успешной? Это
зависит от того, чем закончится эта зеленая транзакция или эта красная транзакция в долгосрочной
цепи консенсуса. Это определяется фактом, что правильные узлы всегда следуют политике
расширения наиболее длинной действующей ветви. Итак, какая из этих ветвей является самой
длинной? На первый взгляд можно сделать вывод, что первая ветвь длиннее второй, так как она
содержит двойную попытку. Но здесь очень тонкий момент, с моральной точки зрения, эта зеленая
транзакция и красная транзакция выглядят по-разному, потому что, как ранее было сказано, первая
попытка Алисы – заплатить Бобу, а вторая - обмануть Боба и получить монеты обратно себе. Но с
технологической точки зрения, эти две операции полностью идентичны. Узлы, которые смотрят на
это, не имеют возможности определить, какая из них является законной транзакцией. Это моральное
суждение, а не техническое различие, по сравнению с которым кто-то попытался платить одной
монетой два раза.

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

Рис. 2.9. Что может сделать вредоносный узел? Атака двойного расхода: правильные (честные) узлы
будут расширять наиболее длинную действующую ветвь.

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

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

Итак, после еще одного блока ситуация выглядит как на рисунке 2.9. Теперь начинает казаться
довольно вероятным, что двойной расход преуспел. Фактически же цепь консенсуса заканчивается, и
в дальнейшем этот блок полностью игнорируется сетью. Такой блок называется сиротским блоком.
Рассмотрим эту ситуацию с точки зрения торговца Боба. То, как Боб может защитить себя от этой
атаки двойного расхода, будет ключевой частью понимания безопасности Биткоин ( рис. 2.10).

Рис. 2.10. Ситуация с точки зрения предпринимателя Боба


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

Рис. 2.11. Ситуация с точки зрения предпринимателя Боба. Услышана информация о сделке. Ноль
подтверждений.

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

Или он может дождаться, пока транзакция не получит одно подтверждение в Блокчейн, а это
означает, что хотя бы какой-то узел создал блок и предложил эту транзакцию. Но, как было показано
ранее, даже после одного подтверждения, это может быть попыткой двойного расхода ( рис. 2.12).

Рис. 2.12. Ситуация с точки зрения предпринимателя Боба. Одно подтверждение.


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

Рис. 2.13. Ситуация с точки зрения предпринимателя Боба. Попытка двойного расхода.

Теперь он видит, что его транзакция имеет уже два подтверждения в цепочке блоков.

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

Допустим, есть еще одно подтверждение и теперь их три. Чем больше подтверждений транзакции,
тем выше вероятность того, что она закончится в долгосрочной консенсусной цепи. Потому что
поведение правильных узлов – то, что они всегда будут расширять самую длинную допустимую
ветвь, которую они видят, вероятность того, что эта попытка догнать эту более длинную ветвь,
теперь очень маловероятна, особенно если меньшая часть узлов являются вредоносными. Как
правило, единственная причина, по которой блок двойного расхода будет расширен в этот момент,
заключается в том, что следующий узел, который будет выбран случайным образом, был
вредоносным узлом, а затем понадобится другой вредоносный узел, а затем другой для этой более
короткой ветви, чтобы затем стать длинной ветвью.
Рис. 2.14. Ситуация с точки зрения предпринимателя Боба. 3 подтверждения.

В общем случае вероятность двойного расхода экспоненциально уменьшается с количеством


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

Рис. 2.15. Ситуация с точки зрения предпринимателя Боба

Если подытожить, защита от недействительных транзакций, то есть защита от вредоносного узла,


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

С другой стороны, защита от двойных расходов осуществляется исключительно на основе


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

И, наконец, никогда нельзя иметь 100% уверенности, что интересующая транзакция находится на
консенсусной ветви, но вероятность этого довольно велика. После шести транзакций практически
нет шансов ошибки.

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

Блокчейн - выстроенная по определённым правилам непрерывная последовательная цепочка блоков,


содержащих информацию.

Стимулы и проверка работы

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

Ранее были сделаны предположения о том, что можно выбрать случайный узел и в процессе
выполнения транзакции правильный узел будет выбираться, по крайней мере, в 50% случаев. Если у
участников есть финансовые мотивы подорвать эти предположения, какой у них стимул вести себя
правильно?

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

Рис. 2.16. Достижение честности проблематично

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

Из-за отсутствия у узлов идентификаторов, нельзя отправить им деньги. Но если бы существовала


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

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

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

Фактически, цена этой транзакции создания монеты имеет интересное свойство. В настоящее время
она зафиксирована на 25 биткоинах, но на самом деле она уменьшается вдвое каждые четыре года.
Сейчас идет второй этап. В первые четыре года существования Биткоинов это стоило 50. Теперь 25,
и уменьшение будет продолжаться. Это имеет некоторые интересные последствия, которые будут
рассмотрены на рис. 2.18. На основании вышесказанного, узел получает награду за блок, независимо
от того, предлагает ли он блок с действительными транзакциями или он вредоносный. Как же тогда
создать стимулы для честного поведения?

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

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

На рис. 2.18 виден первый период, когда каждый блок приводил к созданию 50 новых Биткоинов. И
примерно в конце прошлого года эта награда за блок уменьшилась в два раза с 50 до 25. Можно
увидеть, что каждые четыре года, расширяясь в будущее, наклон этой кривой будет уменьшаться
вдвое. Это геометрическая прогрессия, у которой существует конечная сумма. То есть существует
полная конечная сумма создаваемых Биткоинов. И если сложить члены геометрической прогрессии,
то получится 21 миллион, исходя из скорости создания нового блока в секунду.

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

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

Что же такое сбор за транзакцию? У любой транзакции есть ее создатель. Не создатель блока, а
создатель транзакции, по которой, например, Алиса платит Бобу. Что Алиса может, так это сделать
исходящее значение монеты меньше, чем входящее.

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

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

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

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

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

Все эти проблемы связаны и имеют одно и то же решение. И это решение называется
Доказательством выполнения работы (proof-of-work).

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

В качестве альтернативной модели можно использовать пропорцию владения валютой. Она не


используется в Биткоин, но используется в его аналогах. Это называется доказательством владения
долей (proof-of-stake), которое будет рассмотрено в следующих лекциях.

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


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

Рассмотрим, что такое точная система доказательств выполнения работы в Биткоин.

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

Для создания блока узел, который предлагает этот блок, должен найти случайное число. В блок
включаются число, предыдущий хэш и список транзакций, которые составляли этот блок. После
этого вычисляется хеш всей строки. Выведенный хэш должен быть очень маленьким числом,
которое попадает в небольшое целевое пространство (target space) являющейся частью довольно
большого пространства, которое является выходным пространством этой хэш-функции (output
space).

Ранее рассмотренные блоки содержали ряд транзакций и указатель на предыдущий блок в виде
строки. Теперь в состав блока должно входить еще случайное число. Зачем это нужно? Идея в том,
чтобы было умеренно трудно найти случайное число, которое удовлетворяет требуемому критерию.
Критерий состоит в том, что хэширование всего блока целиком, включая случайное число, будет
приводить к выходным данным определенного типа.

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


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

Фактически размер этого целевого пространства не превышает 1% от объема вывода. Это намного
меньше, чем можно получить за секунду.

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

Теперь понятие хэш-головоломки и доказательства выполнения работы полностью устраняет


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

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

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

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

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

Второе свойство состоит в необходимости регулирования стоимости. Это не та стоимость, которая


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

Если майнер вложил определенное количество аппаратного обеспечения в Биткоин майнинг, но


общая экосистема майнинга растет. В нее входят другие майнеры, либо они все быстрее
развертывают аппаратное обеспечение. Это означает, что в течение двух недель будет найдено
несколько больше блоков, чем ожидалось. И поэтому узлы будут автоматически перенастраивать
параметры цели. И поэтому объем работы, которую необходимо сделать, чтобы найти блок, будет
увеличиваться. Если майнер вложил в оборудование фиксированный объем инвестиций, скорость, с
которой он сможет находить блоки, фактически зависит от того, что будут делать другие майнеры.
Есть очень хорошая формула, чтобы проиллюстрировать это. А именно, вероятность того, что любой
майнер (например, Алиса) сможет выиграть следующий блок, эквивалентна той части глобальной
хэш-мощности, которую она контролирует. Если у нее есть аппаратное оборудование около 0,1% от
общей мощности хэширования, она будет вычислять примерно один в каждой тысяче блоков.

Так почему эта перестройка происходит? Почему необходимо сохранить этот десятиминутный
интервал постоянным? Причина проста.

Если бы время между созданием блоков было слишком мало, это было бы неэффективно –
потерялось бы преимущество оптимизации, позволяющие делать много транзакций. В настоящий
момент несколько сотен транзакций содержатся в одном блоке. Если бы время создания блока
снизилось с десяти минут до пяти минут, это, вероятно, было бы хорошо, и есть много дискуссий об
оптимальном времени создания блока альткойна. Но все согласны с тем, что время ожидания блока
должно быть фиксированным. Нельзя позволять уменьшать его без ограничений, и именно поэтому
необходимо автоматический пересчет цели. Благодаря тому, что функция стоимости и
доказательство работы настроены, можно заявить, что большинство атак на Биткоин недопустимы,
если большинство майнеров, оцененные по хэш-мощности, следуют протоколу. Это дает, как
минимум, 50% вероятности того, что следующий блок будет предложен от правильного узла, а не от
вредоносного.Зачем нужно, чтобы решение хэш-головоломок носило случайный характер? Никто не
может предсказать, какое из случайных чисел приведет к решению. Единственный способ сделать
это - попробовать варианты один за другим и надеяться, что это удастсяЭтот процесс называется
тестом Бернулли. Как правило, узлы испытывают так много случайных чисел, что дискретный
вероятностный процесс, называемый тестом Бернулли, может быть приближен к непрерывному
процессу вероятности, называемым процессом Пуассона. И конечным результатом всего этого
является то, что функция плотности распределения вероятности времени на то, чтобы найти
следующий блок любым узлом в глобальной сети, выглядит как экспоненциальное распределение.
Благодаря этому существует небольшая вероятность того, что если блок найден сейчас, следующий
блок будет найден очень скоро, в течение нескольких секунд или через минуту. Вероятность того,
что это займет много времени (например, час) также небольшая. В целом сеть автоматически
регулирует сложность, так что время межблочного периода поддерживается в среднем
длительностью в десять минут.

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

Для майнера, заинтересованного в быстром поиске блоков, график плотности распределения


вероятности будет иметь одинаковую форму, но на X-оси он будет иметь другой масштаб.

Для конкретного майнера среднее время, чтобы найти блок, учитывая, что он только что нашел блок,
будет 10 минут, деленные на долю хэш-мощности, которую он контролирует. Итак, если у майнера
есть 0,1% от общей хэш-мощности сети, он будет искать блоки каждые 10 000 минут, что составляет
несколько дней. Таким образом, не только основное время между блоками будет очень высоким,
дисперсия времени между найденными блоками также будет высока.

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

Это важное свойство, позволяющее избавиться от централизации. Не нужен централизованный


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

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

Атака двойного расхода – атака, при которой данное количество монет тратится более чем в одной
сделке.

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

Доказательство выполнения работы (Proof-of-work, POW) — принцип защиты распределенных


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

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

Тест Бернулли - Любой тест или ситуация с двумя взаимно исключающими и исчерпывающими
возможными результатами; например, орел/решка при подбрасывании монеты. В серии тестов
Бернулли получается биноминальное распределение.

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

Хэширование или хеширование (hashing) — преобразование массива входных данных произвольной


длины в (выходную) битовую строку фиксированной длины, выполняемое определённым
алгоритмом. Функция, реализующая алгоритм и выполняющая преобразование, называется "хеш-
функцией" или "функцией свёртки". Исходные данные называются входным массивом, "ключом"
или "сообщением". Результат преобразования (выходные данные) называется "хешем", "хеш-кодом",
"хеш-суммой", "сводкой сообщения".

Экспоненциальное распределение - абсолютно непрерывное распределение, моделирующее время


между двумя последовательными свершениями одного и того же события.

Обобщение

Добывать биткоины очень дорого, так как поиск одного блока требует вычисления от 10 до 20
хэшей. Вознаграждение за блок составляет около 25 биткоинов. Экономика майнинга сводится к
тому, выгодно ли майнеру добывать биткоины.

Можно записать простое уравнение ( рис. 2.21 ), которое представит исходные данные для ответа на
этот вопрос. По сути, награда за майнинг это вознаграждение за блоки и транзакционные сборы.
Майнер спрашивает себя, во сколько обойдется стоимость оборудования и электроэнергии.
Фактически, добыча Биткоин настолько дорога с точки зрения электроэнергии, что становится
значительной частью общей стоимости, кроме начальной стоимости аппаратного обеспечения.

Рис. 2.21. Экономика майнинга

Если вознаграждение больше, чем стоимость, майнер имеет прибыль. Если же нет – теряет.

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


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

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

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

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

Давайте сделаем краткое изложение нескольких основных аспектов биткоина.

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


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

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

Учитывая, что пары псевдонимов являются идентификаторами, транзакции - это в основном


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

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

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

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

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

Рассмотрим еще один тонкий момент. Представим, что Алиса и Боб – два разных майнера, и у Алисы
в 100 раз больше вычислительной мощности, чем у Боба. Это означает не то, что Алиса всегда будет
выигрывать гонку против Боба, чтобы найти следующий блок. Вместо этого Алиса и Боб имеют
соотношение, коэффициент вероятности, чтобы найти следующий блок в пропорции 100 к 1. Таким
образом, в долгосрочной перспективе Боб найдет в среднем 1% блоков, которые делает Алиса.

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

Чтобы понять, насколько глубоко понятие распределенного консенсуса пронизывает Биткоин,


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

Биткоин имеет три типа консенсуса:

 Значение
 Положение
 Правила

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

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

Рассмотрим сложное взаимодействие между тремя вещами в биткоине: безопасность цепочки


блоков, стоимость валюты, жизнеспособность экосистемы майнинга ( рис. 2.22). Начнем с
безопасности цепи блоков. Чтобы валюта была платежеспособна, цепь блоков должна быть
безопасной для Биткоина. Это значит, что противник не должен преодолеть процесс консенсуса.

Рис. 2.22. Биткоин как самонастраивающаяся система

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

Но что обеспечивает высокую и стабильную стоимость валюты? Стабильность может появиться


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

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

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

Прежде всего, может ли этот злоумышленник украсть монеты из существующего адреса?


Предположим, что 51% злоумышленников создали недопустимый блок, содержащий недопустимую
транзакцию. Это означает кражу биткоинов из существующего адреса, который злоумышленник не
контролирует и перенос их на свой адрес.

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

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

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

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

Может ли злоумышленник подавить некоторые транзакции? Допустим, есть некие пользователи,


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

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

А может ли злоумышленник изменить вознаграждение за блок? Может ли он солгать, что награда за


блок вместо 25 биткоинов, дает 100 биткоинов? Это похоже на изменение правил системы и это
невозможно, так как злоумышленник не контролирует копию программного обеспечения Биткоин, в
котором работают все правильные узлы.

Может ли злоумышленник каким-то образом уничтожить доверие к Биткоину? Если бы в системе не


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

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

Но ни одна из описанных угроз невозможна, учитывая количество финансовых расходов, которые


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

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


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

Транзакции Биткоина

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

Повторим основные моменты, рассмотренные в предыдущих лекциях.

Консенсус Биткоина имеет следующие особенности:

 Журнал (реестр) в режиме Append-Only


 Децентрализованная согласованность
 Проверка подлинности транзакций майнерами

Предполагается, что валюта существует, чтобы мотивировать работу майнеров!

Журнал (реестр) в режиме Append-Only предполагает ведение журнала транзакций только в режиме
добавления записи. При этом как только запись сделана, она остается в журнале навсегда. Для
достижения согласованности по поводу истинности журнала используется децентрализованный
протокол и майнеры, которые следуют этому протоколу и утверждают транзакции. Они
подтверждают то, что транзакции правильно сформированы, что нет двойных расходов, и что
Биткоин исправно функционирует, как валюта.
Рис. 3.1. Журнал, основанный на банковском счете (не Биткоин)

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

Возьмем упрощенную модель, где вместо блоков транзакций будут индивидуальные транзакции,
выполненные по одному разу в каждый момент времени. Можно провести аналогию с банковским
счетом ( рис. 3.1). Чтобы переслать Бобу 17 монет, Алиса создает транзакцию и ставит под ней свою
подпись. Информация о сделке сохраняется в журнале.

В качестве подтверждения наличия у Алисы монет, приведена информация о том, что в ходе первой
транзакции Алиса получила 25 монет. После передачи 17 монет Бобу у нее осталось 8 монет.

После того, как Боб получил монеты, он может передать какое-то количество монет Чаку, тот в свою
очередь Алисе и т.д. В результате у Алисы, Боба и Чака будут разные состояния счета.

На рис. 3.1 самая нижняя транзакция – передача Алисой 15 монет Дэвиду. Как можно убедиться, что
у нее есть 15 монет для передачи их Дэвиду?

Чтобы это выяснить, нужно проверить всю цепочку транзакций, связанных с Алисой. Всякий раз,
когда Алиса отправляла или получала монеты, все эти действия нужно обнаружить и затем
выяснить, хватит ли ей тех 15 монет, которые она хочет переслать. Конечно, это можно сделать
несколько эффективнее, например, со структурой данных, которая бы отслеживала каждую
транзакцию Алисы, но это потребует огромных дополнительных расходов памяти, помимо ведения
самого блокчейна.Именно поэтому Биткоин не работает по принципу банковского счета. Вместо
этого, у Биткоина есть журнал с историей транзакций. На рисунке 3.2 изображен журнал транзакций,
похожий на биткоиновский.
Рис. 3.2. Журнал, основанный на транзакциях (Биткоин)

В транзакциях указаны количество вводов и количество выводов. У транзакций также есть свой
уникальный индекс. Начнем с транзакции №1, где ничего не вводится, так как здесь формируется
валюта, и есть один вывод в размере 25 монет, которые переходят к Алисе.

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

Чтобы передать 17 монет Бобу Алиса должна сослаться на транзакцию, в рамках которой она
получила эти монеты. Таким образом, в качестве ввода для этой транзакции будет транзакция с
индексом 0, которая была предыдущей, где говорится, что Алиса получила 25 монет. У транзакции
будет 2 вывода. Один, в котором пересылается 17 монет Бобу, и второй, где Алиса получает 8 монет.
Для подтверждения транзакции ее подписывает Алиса.

Рассмотрим, зачем Алисе переводить деньги самой себе. Вот она получает 25 монет, которые были
предназначены для неё в первой транзакции, из них лишь 17 штук она пересылает Бобу, и теперь ей
нужно сделать еще один вывод в размере 8 монет самой себе, пусть и под другим индексом, но все-
таки себе.

Эта называется переадресацией. Идея в том, что всегда нужно вывести остаток с предыдущей
транзакции. Нельзя сделать так, что со счета потратилось только 17 монет. Можно сделать лишь так,
что с одного вывода потратятся все 25 монет. Но так как Алиса хочет потратить только 17 монет, она
сделает второй вывод (8 монет) на себя

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


блокчейн, так как теперь известно, на какие вводы смотреть. Нужно перейти к транзакции 2, вывод 1
и посмотреть, что денег достаточно и они еще не потрачены. Можно посмотреть на транзакцию и
сделать вывод о том, что во втором выводе Элис пришли 8 монет, значит, у нее достаточно монет,
чтобы совершить все выводы в этой транзакции.

Таким образом, действительность транзакции проверяется методом обратного конечного поиска.

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

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

Еще одна вещь, которую можно сделать - слияние значений. Допустим, есть две разные транзакции,
которые переводят деньги Бобу - 17 монет в одной и еще 2 в другой. Боб может сказать: я бы хотел,
чтобы у меня была одна транзакция, которую я мог бы потом израсходовать.

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

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

Единственная особенность здесь в том, что поскольку эти два вывода производятся двумя разными
людьми, то нам нужны две подписи: одна от Кэрол, вторая - от Боба ( рис. 3.3).

Рис. 3.4. Реальная транзакция Биткоин


На рис. 3.4 показана, как именно выглядит транзакция Биткоина. И это не вся транзакция, а только
красиво оформленное представление (скорее всего на языке JSON). В действительности, транзакция
представлена в компактном двоичном формате, который компилируется в такую нечитабельную, но
крайне похожую на реальную низкоуровневую транзакцию.

Транзакция состоит из трех частей. Во-первых, это метаданные, затем это серия вводов, и серия
выводов. Начнем с метаданных.

Рис. 3.5. Метаданные транзакции

"Домашняя" информация содержит, например, размер транзакции, количество вводов и количество


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

Рис. 3.6. Вводы транзакции

Вводы транзакции - это массив входных данных с одной и той же формой.


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

И индекс вывода из указанной транзакции.

Также имеется подпись scriptSig ( рис. 3.6). Подпись подтверждает вывод из предыдущей
транзакции.

Рис. 3.7. Выводы транзакции

У каждого вывода есть свое значение. Сумма всех выводов должна быть меньше, чем сумма всех
вводов.

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

Скрипты Биткоина

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

В качестве примера возьмем наиболее распространенный скрипт Биткоина, который исполняет


предыдущую транзакцию после ее подписания корректным открытым ключом.

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

Рис. 3.9. «Адреса» ввода – это тоже скрипты

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

Когда транзакция проходит верификацию, два скрипта соединяют вместе и запускают, и если
получившийся скрипт запускается без ошибок, то транзакция признается действительной.
Рис. 3.10. Скриптовый язык Биткоина («Скрипт»)

У языка, используемого в Биткойн нет точного названия. Его называют просто "Скрипт" или
"скриптовый язык Биткоина", так как он был создан специально для него. Наибольшее влияние на
него оказал язык Forth, это старый и простой язык программирования, основанный на работе стеков,
однако совсем не обязательно знать Forth, чтобы понимать скриптовый язык Биткоина.

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

Также это стековый язык программирования. На следующем рисунке будет показано, почему он так
называется. В языке существует множество ограничений, которые очень важно помнить. В
частности, у скриптового языка Биткоина нет циклов. Каждая инструкция выполняется только один
раз линейным путем. Если посмотреть на скрипт, который состоит из некоторого числа инструкций,
то можно точно сказать, сколько времени потребуется для его запуска и сколько памяти он займет.

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

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

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

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

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

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

И это единственный способ работы с памятью, который доступен в стековом языке


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

Теперь, когда два значения внесены в стек, запускается вторая часть скрипта. Эта часть называется
scriptPubKey.

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

Следующая инструкция HASH160 говорит: "Возьми верхнее значение в стеке и вычисли из него
криптографический хеш."

Верхнее значение из открытого ключа превратится в хеш этого ключа.

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

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

Запустим верифицированную обеими сторонами команду OP_EQUALVERIFY, в которой просто


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

Рис. 3.12. Пример запуска скрипта Биткоин

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

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

Рассмотрим, что послужило вводом для функции подписывания?

Единственное, что можно подписать в Биткоине - это весь процесс транзакции. Инструкция checkSig
подтверждает, что вся транзакция была успешно подписана.

Всего за один заход инструкция checkSig вынесет из стека два оставшихся элемента, и проверит
действительность подписи. После выполнения всех инструкций в скрипте, в стеке больше нет
данных, и не появилось ни одной ошибки, выводом скрипта будет простое "Да". Итак, у любого
скрипта Биткоина существует два исхода: он может выполниться без ошибок, в таком случае
транзакция будет действительной. Если при выполнении скрипта обнаружится ошибка, вся
транзакция будет признана недействительной, и она не будет включена в блокчейн.

Инструкции скрипта Биткоина

Всего 256 кодов операций (15 не работают, 75 – в резерве):

 Арифметические
 Условные (If/then)
 Условные (If/then)
 Крипта!
o Хеши
o Проверка подписи
o Проверка множественных подписей

Рассмотрим скриптовый язык Биткоина. Он очень маленький, в нем всего 256 инструкций, потому
что каждой из них выделяется по одному байту памяти. Из них 15 инструкций нерабочие, и
воспользоваться ими никак нельзя. Еще 75 находятся в резерве - в них пока нет особой
необходимости. Но в будущем их могут сделать основными. Из основных же инструкций
присутствуют такие, которые встречаются в любом языке программирования - основы арифметики,
логики, конструкции "If-then". Вбрасывание и не-вбрасывание ошибок, ранние выходы.

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

OP_CHECKMULTISIG

 Встроенная поддержка совместных подписей


 Объявление n открытых ключей
 Объявление числа T
 Верификация требует T подписей

Предупреждение о баге: дополнительная единица данных выносится из стека и игнорируется

При помощи MULTISIG объявляется N открытых ключей и параметр T (т.н. "порог"). Чтобы эта
инструкция сработала нормально, необходимо, чтобы было T подписей и T из N действительных
открытых ключей.

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

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

Скрипты Биткоина на практике ( по состоянию на 2014 год)

 Большинство узлов содержит стандартные скрипты


 99,9% скриптов проверки подписей – простые
 примерно 0,01% скриптов проверки подписей – MULTISIG
 примерно 0,01% - оплаты по хешу скрипта
 остальное – ошибки и сжигающие протоколы

Но сегодня он используется не так часто. Если посмотреть на историю Биткоина и обратить


внимание на то, каким образом он использовался, то можно заметить, что в 99,9% случаях это был
один и тот же скрипт. По факту, это тот же скрипт, который был рассмотренв качестве примера. Тот
самый, где объявляется один открытый ключ и запрашивается подпись для этого ключа, чтобы
разрешить расход монет.
Есть еще несколько вещей, которые могут пригодиться. Кое-где используется MULTISIG, и еще
существует особый тип скрипта, который называется Pay-to-Script-Hash, который будет рассмотрен
далее. Других способов проявить креативность в использовании скриптов на текущий момент нет.
Причина этого в том, что узлы Биткоина имеют стандартизированный список скриптов, и они
отвергают те скрипты, которые воспринимаются ими как нестандартные. Это не значит, что эти
скрипты совсем никак нельзя использовать, их просто сложнее применить и этот вопрос будет
рассмотрен далее в контексте пиринговой сети Биткоина.

Существуют скрипты, которые называются "proof-of-burn" ("доказательство сжигания"). Этот скрипт


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

Существует два случая, для которых он используется.

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

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


альтернативные валюты.

Должны ли покупатели описывать скрипты?

- Я готов оплатить заказ!

- Хорошо! Мы используем MULTISIG, поэтому мы хотим, что вы добавили скрипт,


подтверждающий оплату от 2 из 3 бухгалтеров. Не ошибитесь в деталях. Спасибо за использование
Big Box!

= Отправитель монет должен точно описать свой скрипт.

Например, покупатель хочет заказать что-то в интернет-магазине. Он оформил заказ, готов его
оплатить и спрашивает у продавца адрес, куда ему следует направить монеты. Продавец в ответ
говорит: " Мы используем MULTISIG, поэтому мы хотим, что вы добавили скрипт,
подтверждающий оплату от 2 из 3 бухгалтеров. Не ошибитесь в деталях. "

Покупатель может сказать, что не знает, как это сделать. Он просто хочет переслать монеты на
конкретный адрес. Для этого в Биткоине существует особая хитрость, которая позволяет вместо
описания целого скрипта указать хеш скрипта, который понадобится для пересылки денег.
Рис. 3.13. Использование хеша скрипта

На рис. 3.13 отправитель описывает очень простой скрипт, который хеширует верхнее значение в
стеке и проверяет, соответствует ли он требуемому скрипту оплаты.

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


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

Как только это случится, начнется второй этап валидации.

Верхнее значение данных из стека будет переинтерпретировано в качестве инструкции, и будет


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

Это и называется оплата по хэшу скрипта (P2SH) в Биткоине , который выступает как альтернатива
обычному режиму оплаты через открытый ключ. Механизм оплаты по хешу достаточно сложен и не
был указан в оригинальной спецификации. Он был добавлен в биткоин позднее.

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

Приложения из скриптов Биткоина

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

Рассмотрим классическую ситуацию с онлайн-оплатой. Алиса и Боб хотят заключить между собой
сделку, скорее всего, Алиса выиграла какой-нибудь онлайн-аукцион и теперь хочет что-то купить у
Боба.
Рис. 3.14. Условные транзакции (залог)

И вот Алиса хочет заплатить Бобу биткионами, а Боб в обмен отправил бы Алисе какой-то
материальный товар. Но проблема в том, что Алиса не хочет платить, пока не получит товар, а Боб
не хочет посылать товар, пока он не будет оплачен.

У Биткоина на этот случай есть отличное решение, которое очень часто используется на практике.
Это - привлечь третью сторону и совершить условную транзакцию.

Алиса пересылает деньги не напрямую к Бобу, а создает MULTISIG-транзакцию, которая, чтобы


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

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

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

Теперь останется надеяться на то, что в реальной жизни Алиса и Боб - честные люди.

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

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

Что бы случилось, если бы Боб не отправил товар? Или если бы он его отправил, но он потерялся на
почте? Или если бы он отправил не тот размер?
Алиса не захочет платить Бобу, потому что она решит, что он ее обманул, и она захочет вернуть
деньги назад.

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

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

И если Джуди решит, что обманщик - Боб, то она решит подписать транзакцию совместно с Алисой,
чтобы вернуть ей её деньги. То есть Алиса и Джуди сработаются, будут подписаны две ключевые
подписи, и Алиса получит деньги назад.

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

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

Проблема: Элис хочет заплатить Бобу. Боб не хочет ждать 6 подтверждений об отсутствии двойных
затрат, или не находится в сети.–Еще один способ использования скриптов - "зеленые адреса".

Допустим, Алиса хочет отправить Бобу деньги, а его нет в сети. То есть, Боб не сможет войти в
блокчейн и проверить, не приходили ли от Алисы какие-либо транзакции. Может быть, у Боба
просто нет времени зайти в блокчейн и подождать подтверждения транзакции ( рис. 3.15).

Рис. 3.15. Зеленые адреса

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

Или у Боба просто нет возможности подключиться к Интернету и проверить блокчейн. В качестве
примера может выступить такой случай, что Боб - это простой уличный торговец. Чтобы можно
было переслать Биткоины, несмотря на неспособность получателя проверить блокчейн, нужно снова
привлекать третью сторону, коей в данном случае окажется банк.
Алиса соединяется со своим Банком и говорит: "Здравствуйте, это Алиса, я ваш постоянный клиент.
Вот мое удостоверение личности. Мне нужно переслать деньги Бобу, вы можете мне помочь?"

И в Банке ей говорят: "Конечно, сейчас мы снимем часть денег с вашего счета и выполним
транзакцию через один из наших зеленых адресов напрямую к Бобу."

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

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

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

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

Существовало два наиболее надежных онлайн-сервиса, предоставлявших зеленые адреса, а именно


Instawallet и Mount Gox, и оба они обрушились. Изначально сообществу Биткоина понравилась идея,
что оплату можно совершать быстрее и не нужно обращаться для этого в блокчейн. Сейчас же эта
идея настораживает людей тем, что банкам оказывается слишком много доверия. В результате,
несмотря на всю прелесть этого протокола, в реальности он используется крайне редко.

Рис. 3.16. Эффективные микротранзакции

Проблема: Алиса хочет оплатить Бобу каждую минуту услуги. Она не хочет создавать новые
транзакции ежеминутно.

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

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

Рис. 3.17. Все микротранзакции могли стать двойными тратами!

При помощи последовательных микротранзакций можно объединить маленькие счета в большой.


Необходимо создать MULTISIG-транзакцию, которая будет содержать настолько большую сумму
денег, насколько Алиса будет планировать потратиться, и потребует как от Алисы, так и от Боба,
подписи, которые дадут разрешение на ее расходование.

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

После первой минуты проводимой консультации, Алиса подписывает следующую транзакцию, и


тогда у Боба будут уже две монеты, в то время остаток снова окажется у Алисы.

Подписывает транзакции только Алиса, а Боб этого не делает ни разу.

Алиса будет совершать транзакции каждую минуту, которую она тратит на консультацию с Бобом.

Обратите внимание на то, что транзакции в блокчейне не публикуются. Они просто совершаются
между Алисой и Бобом.

В определенный момент Алиса решит завершить консультацию. Тогда она скажет Бобу: "Все,
завершаем разговор, я не хочу платить еще больше." А Боб скажет: "Хорошо, тогда я отключаюсь. Я
возьму последнюю проведенную вами транзакцию, подпишу ее и опубликую в блокчейне."

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

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

Рис. 3.18. Боб не подписывает последнюю транзакцию

Что произойдет, если Боб так и не подпишет последнюю транзакцию (рис.3.18)? Вдруг он скажет:
"Меня устраивает тот факт, что заложенные деньги так и останутся под залогом навсегда." В таком
случае, деньги пересланы ему не будут, но Алиса потеряет все, что она вложила в самом начале. Для
этого был придуман таймер (Lock_Time).

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

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

Если еще раз посмотреть на метаданные в транзакции Биткоина, то можно понять, что речь идет о
параметре "lock_time".

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

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

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

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

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

У Биткоина много замечательных особенностей - можно использовать скрипты, задействовать


майнеров и применять валидацию сделок для залогов и микротранзакций. При этом отсутствует
централизованное управление этими сделками.

В настоящее время смарт-контракты очень востребованы. Существует множество смарт-контрактов,


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

Блоки Биткоина

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


единичные транзакции. Рассмотрим, зачем транзакции помещаются в блоки.

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

Рассмотрим структуру данных блокчейна ( рис. 3.20).

Рис. 3.20. Структура блока Биткоина

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


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

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

Рассмотрим, как это выглядит на низком уровне ( рис. 3.21).


Рис. 3.21. Реальная структура блока Биткоин

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

Самая важная часть, конечно, заголовки ( рис. 3.22).


Рис. 3.22. Заголовок блока Биткоин

Они, в основном, содержат информацию в отношении майнинговой головоломки, о которой шла


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

В дереве Меркла существует особая транзакция – транзакция монетной базы. Именно она создает
новые биткоины ( рис. 3.22). В предыдущей лекции мы говорили о вознаграждении за создание
блока, которое на текущий момент равно 25 биткоинам (block reward). Это горизонтальная награда
майнинга, которая задается системой и держится в течение 4 лет. В действительности, она всегда
будет чуть больше 25 Биткоинов, поскольку она включает в себя также пошлины за сделки, когда-
либо собранные с каждой сделки, включенной в блок (transaction fees). Указатель на транзакцию
вывода в сделке с монетной базой всегда будет нулевым.. Это как бы говорит, что поскольку здесь
создаются новые Биткоины, то этому процессу ничего не предшествует. Не существует предыдущей
транзакции, которая была совершена, чтобы создать эти монеты. У сделки с монетной базой есть
интересный параметр, в который можно списать всё, что угодно. В самом первом блоке, когда ли
добытом в Биткоине, в этом параметре содержалась цитата из газеты. Эта цитата была из "The Times
of London", и в ней рассказывалась история про канцлера, спасавшего банки, что было с одной
стороны политическим комментарием, объяснявшем мотивацию появления Биткоина, и с другой
стороны, данью уважения Биткоину, так как его самый первый блок был добыт вскоре после выхода
выпуска этой газеты.

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

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

Сеть Биткоина

Рассмотрим, как участники вносят информацию о своих сделках в блокчейн.

Особенности сети P2P Биткоин:


 Специальный протокол (работает на TCP-порте 8333)
 Специальная сеть со случайной топологией
 Все узлы равноправны
 Новые узлы могут подключаться в любое время
 Неактивные узлы забываются через 3 часа

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

Он работает через TCP-протокол, имеет случайную топологию, это значит, что одни случайные узлы
тождественны к другим случайным узлам.

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

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

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

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

Рис. 3.24. Присоединение к пиринговой сети Биткоина

Для присоединения нового узла к сети, необходимо обратиться на адрес конкретного узла, который
уже в сети. Такой узел называется сидом. Существует несколько способов посмотреть списки сидов,
к которым можно присоединиться.
После нахождения сида (на рисунке это узел с номером 5), новый узел посылает ему специальное
сообщение с просьбой сообщить адреса узлов сети, которые ему известны ( рис. 3.25).

Рис. 3.25. Сообщение getaddr()

Рис. 3.26. Ответ сида

Сид ответит: " Я соединен с узлами 1 и 7, попробуй присоединиться к ним".

Далее новый узел пробует соединиться у узлами 1 и 7 и говорит им: "Привет. Сообщите мне о тех
участниках сети, о которых вы знаете". И они также пошлют ему узлы, о которых знают сами, и эти
шаги повторяются столько раз, сколько захочет новый узел, пока не получит список пиров, к
которым можно подсоединиться.
Рис. 3.27. Ответы других узлов сети

Затем новый узел выбирает один из пиров, после чего становится функциональным членом сети
Биткоина.

В рассмотренном процессе много случайных факторов. Набор узлов, к которым в итоге будет
присоединен новый участник, зависит от узла-сидера и от того, с каким из его пиров контактировал
новый узел.

Рис. 3.28. Продвижение сделки (заливка)

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

Допустим, узел 4 узнал о новой транзакции, где Алиса хочет прислать Бобу деньги: Алиса создает
Биткоиновую сделку и посылает ее на 4 узел. Может быть так, что ее электронный кошелек или
обменное ПО действует по своему усмотрению, но тем не менее, транзакция каким-то образом
приходит на 4 узел. Теперь этот узел говорит: "Ага, у меня новая сделка: Алиса хочет заплатить
Бобу. Давайте сообщим всем об этом". Это называется gossip-протокол (протокол сплетен). В
протоколе действует принцип человеческих сплетен – если у узла есть информация, которой он
хочет поделиться со всей сетью, он сообщает ее как можно большему числу узлов и те , в свою
очередь, транслируют ее дальше в сеть. В рассматриваемом примере узел 4 обратится к своим
соседям - узлам 2 и 3. Он им сообщит: "Эй, взгляните на эту сделку. Алиса хочет заплатить Бобу".

Эти узлы тоже добавят ее в свой пул ожидающих сделок, так как каждый узел содержит в себе
список сделок, о которых он слышал, но которые еще не были внесены в блокчейн. И потом узлы
могут решить продвинуть свои сделки к следующим узлам. Итак, узел 3 контактирует с соседями и
говорит: "У меня для вас новая сделка. Алиса хочет заплатить Бобу".

Она так же окажется у них в пуле, и так далее. Необходимо, чтобы у этого процесса был конец.
Пусть будет так, что узел 2 активируется и попытается сообщить узлу 7: "Эй, тут новая сделка.
Алиса хочет заплатить Бобу".

И тогда узел 7 ответит: "Все в порядке, узел 2, я уже об этом слышал, она у меня в памяти. Мне уже
не нужно ее продвигать". Итак, в конце концов, этот процесс когда-то остановится, потому что
каждый узел будет знать об этой новой сделке, и им больше не нужно о нем сообщать. Каждая
транзакция помечается уникальным хешем, следовательно, каждый узел сможет сообщить, что уже
видел этот хеш, и что его уже не нужно больше никому не передавать, чтобы он не циклился в сети
бесконечно.

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

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

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

Вообще, все качественные узлы содержат в себе программы проверки с целью сохранить
целостность и сохранность всей сети, однако не существует такого правила, что все узлы обязаны
следовать этим указаниям. Поскольку сеть - пиринговая, и каждый может к ней присоединиться,
всегда остается вероятность того, что узел не последует протоколу. Он будет транслировать двойные
затраты, нестандартные и недействительные транзакции. Поэтому важно, чтобы каждый узел
проверял себя. Возможно и такое, что у узлов будет различное представление об ожидающей
транзакции, все зависит от того, что они обнаружили. Давайте вернемся к примеру, где узел 4
транслировал сделку, в которой Алиса планирует отправить Бобу монеты, и представим, что сделка
не разошлась по всей сети. И перед тем, как она разойдется, узел 1 сообщит о новой сделке и скажет:
"Эй, я только что узнал, что Алиса хочет заплатить деньги Чарли". С точки зрения узла 1 это
действительная транзакция, ведь он не видел другой транзакции, в которой Алиса платит Бобу.
Рис. 3.29. Сделки, содержащиеся в узлах, могут отличаться

Итак, узел 1 совершит протокол нормально, и теперь он сообщит о сделке своим соседям.

Соседи, которые еще не узнали об этих конфликтных сделках, так же добавят их к себе в пул.

В свою очередь, другие соседи, такие как узел 6 из примера, уже знают о сделке между Алисой и
Бобом. Поэтому, узел 6 сообщит: "Я не хочу хранить в себе две конфликтные сделки, я оставлю себе
ту, что у меня уже есть".

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

Сделки или блоки могут конфликтовать

 Стандартное поведение: принимай то, о чем слышишь впервые


 Положение в сети имеет значение
 Майнеры могут внедрять свою логику!

По сути, система оказывается в состоянии гонки.

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

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

Итак, если та сделка, где Алиса платит Бобу, успешно попадает в блок первой, то те узлы, которые
слышали о сделке между Алисой и Чарли, скажут: "Моя транзакция больше не действительна, я могу
о ней забыть". То есть, стандартное поведение узлов таково, что они воспринимают то, что они
услышали в первую очередь,
Это значит, что положение узла в сети имеет значение. Если две конфликтные сделки будут
объявлены в разных точках сети, они обе начнут транслироваться в разных направлениях. И те узлы,
которые узнают о той или о другой транзакции, будут зависимы от того, какая часть пространства
сети, с которой они начали, находится ближе всего.

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

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

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

Другая проверка, которая является критически важной – проверка Биткоин на согласованность, не


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

Это помогает избежать построения вилок. Узлы могут по своему желанию внедрять в себя
различные логики. Они могут транслировать недействительные сделки, или даже те сделки, которые
не дошли до конца самой длинной цепочки блокчейна. То есть, некоторые узлы могут пытаться
продвинуть такой блок, который не дошел до конца цепочки, и из-за этого образуется так
называемая вилка. И в этом нет ничего страшного, протокол способен с этим справиться. Все же, как
долго по времени будет длиться этот плавающий алгоритм? Много ли наложится задержек?

Рис. 3.30. Временные затраты на продвижение блока

На рис. 3.30 изображен граф, отражающий среднее время продвижения новых блоков в каждом узле
сети Здесь три линии, показывающие 25-ю, 50-ю и 75-ю перцентиль длительности достижения
блоком каждого нового узла. Если посмотреть на 75-ю перцентиль, то можно обнаружить, что для
больших блоков среднее время продвижения составляет примерно 30 секунд.
Причина такой большой задержки в том, то этот протокол не очень эффективный. Он и не создавался
эффективным. Он был создан быть простым и бесструктурным, чтобы каждый узел оставался
равноправным и мог входить и выходить в любое время.

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

Блоку может потребоваться пройти через множество узлов, прежде чем достигнуть самых дальних
узлов сети. Чтобы сеть была более эффективной, необходимо обеспечить максимально короткие
пути между узлами. Для Биткоина же важнее наличие децентрализованной структуры, где все узлы
равны, невзирая на то, что из-за этого продвижение блока может занимать 30 секунд. Итак,
насколько велика сеть Биткоина? На самом деле, подробной статистики просто нет, потому что нет
централизации и какого-либо органа, который бы вел официальную статистику. Известно лишь то,
что сеть состоит из узлов, количество которых постоянно меняется Тем не менее многие
исследователи попытались сделать приближенную оценку.

Исходя из наиболее благоприятного сценария, исследователи заявили, в месяц свыше 1 миллиона IP-
адресов могут запускать протокол Биткоина и быть, по крайней мере, временно активными в роли
узлов.

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

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

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

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

Блокчейн постоянно увеличивается, и на данный момент, чтобы добавить весь блокчейн,


потребуется около 20 ГБ памяти.

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

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


неизрасходованные выходные транзакции.

В идеале эти транзакции хранить в ОЗУ. Это позволит проверить новую транзакцию очень быстро.
Каждый раз когда полный узел узнает о новой транзакции, он запускает исполняющий скрипт и
убеждается в том, что она действительна. На текущий момент достаточно 1 ГБ ОЗУ для
формирования эффективной структуры данных.

На данный момент существует около 12 миллионов неосуществленных транзакций. И они является


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

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

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

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

Тонкие/ПВО-клиенты (не полностью проверенные)

 Основная идея: не хранить всё


 Хранят только заголовки блоков
 Запрашивают сделки по необходимости, чтобы подтвердить входящую оплату
 Доверяет полностью проверенным узлам
 1000-кратная экономия! (20 ГБ против 23 МБ)

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

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

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

Когда хранятся только заголовки блоков вместо всех предыдущих транзакций, то затраты
уменьшаются примерно в 1000 раз, и вместо хранения 20ГБ памяти, хранится всего лишь 20МБ.
Такой объем может хранить почти каждый на своем компьютере, или даже на телефоне, действуя
таким образом, как ограниченный узел сети Биткоина.

Ограничения и улучшения

В заключение рассмотрим ограничения, встроенные в протокол Биткоина. Протокол Биткоина


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

Жестко закодированные ограничения в Биткоине:

 10 минут – среднее время, затрачиваемое на создание блока


 1 млн. байтов в блоке
 20,000 операций подписывания на блок
 100 млн. сатоши на биткоин
 21 млн. – максимально возможное число биткоинов
 50, 25, 12.5… поощрение за добычу Биткоинов
Одними из ключевых ограничений являются: ограничение по времени, отведенное в среднем на
каждый блок; количество блоков; число операций подписывания в блоке, делимость валюты.

Также есть ограничение на максимально существующее число Биткоинов и на систему поощрения


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

Пропускные ограничения Биткоина

 1 млн. байтов на блок (10 минут)


 больше 250 байтов на транзакцию (сделку)
 Как следствие – 7 транзакций в секунду

В качестве примера:

 VISA: от 2 до 10 тысяч транзакций в секунду


 PayPal: от 50 до 100 сделок в секунду

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

И каждая транзакция должна иметь размер, по меньшей мере, в 250 байтов, то есть если разделить
эти значения и принять во внимание, что каждый блок находится в течение 10 минут, то в результате
получится 7 транзакций в секунду - такова пропускная способность сети Биткоина.

Для сравнения приведем платежную систему Visa, которая по оценкам совершает около 2000
транзакций в секунду по всему миру. А в самые загруженные дни, такие как суббота перед
Рождеством, это число может увеличиваться до 10 000 транзакций в секунду. Другие платежные
системы примерно так же продуктивны. Например, PayPal пропускает через себя около 1000
транзакций в секунду, что в разы превышает пропускную способность Биткоина.

Криптографические ограничения в Биткоине

 Только 1 алгоритм подписи (ESCADA/P256)


 Жестко закодированные хеш-функции

Еще одно ограничение - криптография Биткоина не меняется. Она содержит лишь пару хеш-
алгоритмов и только один алгоритм подписи, - отдельный тип эллиптической кривой SecP256.

Фактически для любого алгоритма подписи и хеш-функции всегда есть вероятность взлома.
Рис. 3.31. Твердовилочные изменения в Биткоине

Что будет, если какую-то из указанных проблем исправить в новой версии программного
обеспечения? Тогда всем узлам необходимо будет обновиться. Этот процесс называется
"твердовилочное изменение" ( рис. 3.31).

На практике, ошибочным будет считать, что обновится каждый узел. Некоторые узлы сети не смогут
перейти на новое ПО или сделают это с опозданием. Давайте посмотрим на сеть, где большая часть
узлов обновилась, а малая часть - нет. И вот, один из обновленных блоков говорит: "Смотрите, я
нашел этот большой, изящный новый блок. Может быть, одна из его транзакций содержит новый
ЭЦП-алгоритм, который мы недавно добавили в Биткоин". Пусть его нашел блок 4, и вот он говорит:
"Окей, сейчас я обновлюсь и объявлю, что это самый свежий блок. Индекс блока - 24, остальная сеть
знает лишь о 23-ем. Но я сейчас продвину свой блок остальным пирам, использовав стандартный
алгоритм-заливку".

Рис. 3.32. Изменения «твердая вилка»


Итак, узел 4 посылает блок №24 своим соседям - узлам 3 и 2. Узел 3 его примет и скажет: "Отлично,
я его принял, сейчас я обновлю свой блокчейн и объявлю, что этот блок теперь - самый последний".

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

Аналогично с узлом 6, он так же даст отказ, сообщив, что он тоже не может принять этот блок.

И теперь новые узлы имеют единую картину о состоянии блокчейна (с последним блоком 24), а
старые узлы отказались принять последний блок (у них последний блок 23). В итоге, новые узлы
продолжат работу с новым представлением о блокчейне, включая блок со своей новой
особенностью, а старые узлы застрянут в старой версии блокчейна и, к сожалению, уже не смогут
наверстать упущенное, потому что пока они не обновят свое ПО, они продолжат отвергать все те
блоки, которые будут передавать им обновленные узлы с новыми версиями протоколов.

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

"Мягкие вилки"

Наблюдение: можно добавить новые возможности, которые только ограничат количество подлинных
транзакций

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

Старые узлы продолжат одобрять недействительные блоки.

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

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

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

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

Скрипт P2SH не присутствовал в первой версии протокола Биткоина–Скрипт хеширует одно


значение данных, а затем проверяет, равно ли оно значению, указанному в скрипте вывода. Старые
узлы никогда не выполняют второй этап верификации в P2SH-скрипте.

Возможности "мягкой вилки"

 Новые схемы (алгоритмы) подписей


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

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

"Жесткие вилки"

 Новые коды операций


 Изменения в ограничении размеров
 Изменения в частоте майнинга
 Исправление множества маленьких багов

НА ДАННЫЙ МОМЕНТ ПОДОБНЫЕ ИЗМЕНЕНИЯ МАЛОВЕРОЯТНЫ

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

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

Хранение и использование биткоинов


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

Хранение биткоинов.

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

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

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

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

Адрес представляет собой зашифрованный публичный ключ, закодированный в Base58. Передать его
можно 2 основными способами – в виде текстовой строки или в виде QR кода. Строку надо точно
записать или скопировать. Более простой и современный способ – преобразовать строку в QR код,
который можно отобразить на экране или сфотографировать с помощью телефона.

Горячее и холодное хранилища.

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

Холодным хранилищем будет устройство, находящееся вне сети, заархивированное и


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

Рассмотрим, как передавать деньги между хранилищами и стратегию их взаимоотношений.

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

Проблемы появляются, если нужно усилить конфиденциальность переводов и использовать для


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

Существует гораздо более практичная альтернатива – она называется иерархическая генерация


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

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

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

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

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

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

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

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

Конечно для наибольшей безопасности стоит использовать комбинацию из приведенных выше


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

Разделение и распространение ключей.

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

В криптографии подобное называют разделением секрета. При этом какой-либо секрет (в случае
биткоина это закрытый ключ) разделяется на 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 биткоинов из двухсот тысяч.

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


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

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

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

Платежные сервисы.

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


криптовалюте на практике.

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

Существуют, например, технологические риски с платежной системой – то что сайт перестанет


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

Платежные сервисы служат для удовлетворения всех вышеперечисленных потребностей.

Можно рассмотреть, как работают такие сервисы на примере Coinbase. Продавец на сайте заполняет
форму, он выбирает название платежной кнопки, ее форму, цвет, размер. Заполняет список товаров и
их цены, указывает счет, куда переводить реальную валюту за оплату. После этого сервис генерирует
HTML-код, который продавец просто может вставить на свой сайт. Покупатели в итоге увидят
кнопку "Оплатить в биткоинах", а продавец получит от платежного сервиса реальные деньги и
информацию о том, за что они уплачены.
Рис. 4.2. Платеж с помощью платежного сервиса

Рассмотрим механизм взаимодействия покупателя, продавца и платежного сервиса подробнее ( рис.


4.2). Покупатель заходит на сайт, выбирает товары, которые хочет купить, и нажимает на кнопку
оплаты. Но кроме оплаты сайт продавца сформирует ID транзакции, который используется в системе
учета магазина для идентификации заказа. Запрос на оплату будет перенаправлен на платежный
сервис, который принимает ID транзацкии, сумму платежа и то, что покупатель хочет оплатить
сумму биткоинами. После получения биткоинов платежный сервис отправляет продавцу
подтверждение платежа с ID транзакции. Для продавца это означает, что он получит определенную
сумму в реальной валюте за свой товар, значит он может отправлять заказ покупателю. Последним
шагом является перечисление денег от платежного сервиса на счет продавца.

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

Комиссионные за транзакции.

Комиссия за платежи – одна из основ механики биткоина. Раннее были рассмотрены такие вопросы
как хранение криптовалюты, управление ею, платежные сервисы, которые ее обслуживают. Но
основой всего является комиссия за осуществление каждой операции. Коммисия за операцию равна
разнице между входящей и исходящей суммой и ее получает майнер, зарегистрировавший операцию
в блоке.

Причина существования комиссии – то что майнер должен расходовать свои вычислительные


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

Сейчас существует соглашение о комиссионных. За транзакции размером меньше 100 байт комиссия
не взимается. Обычно за каждые 1000 байт комиссия в 1 тысячную биткоина. Приоритет транзакции
прямо пропорционален возрасту транзакции, умноженному на ее величину, и обратно
пропорционален объему транзакции в байтах. Размер транзакции в байтах можно посчитать так:
148*inputs+34*outputs+10. Где inputs - количество входящих платежей, outputs - количество
исходящих платежей и 10 байт на служебную информацию.

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

В итоге практически все ПО, работающее с биткоинами, включает в себя механизм, автоматически
рассчитывающий и прибавляющий транзакции к платежам.

Обмен криптовалют.

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

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

Существует множество площадок для покупки и продажи биткоинов. Есть сайт bitcoincharts.com на
котором можно посмотреть текущую цену на различных рынках и их объем. Торги показываются в
реальном времени, можно увидеть графики изменения цены. Там можно выбрать онлайн площадку
для торговли. Кроме онлайн площадок для торговли есть сайты, на которых собираются
обмениваются биткоинами в офлайн. Например, localbitcoins.com. Там можно выставить запрос на
покупку или продажу, потом договориться о встрече в кафе или парке и обменять валюту. Так же в
офлайн существуют места, где в определенные дни собираются все желающие обменять
криптовалюту.

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

Теперь давайте рассмотрим спрос. Существует 2 главных источника спроса: спрос на биткоин как
средство инвестиции и спрос на биткоин как валюту-посредник при необходимости операции в
реальной валюте. В чем заключается смысл последнего пункта? Давайте представим, что есть 2
человека в разных городах или даже странах, один из которых хочет отправить другому деньги. И
они хотят провести эту операцию в биткоинах (например, из-за того, что комиссия за перевод в
биткоинах намного ниже, чем при использовании обычных систем переводов). Тогда сначала
отправитель должен купить биткоины, отправить их получателю, который в свою очередь должен их
продать. Главная деталь этой операции – то что биткоины изымаются из обращения на время
проведения операции. Если желающих провести аналогичные операции много, то создается спрос на
биткоины.

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

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

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


Единица деленная на P стоимость перевода 1 доллара. Тогда со стороны спроса будет необходимо
T/P биткоинов в секунду. Со стороны предложения мы можем предложить S биткоинов - это число
включает все выпушенные биткоины, за вычетом инвестиционных. Каждый из биткоинов
резервируется на время операции D. Тогда каждую секунду 1/D биткоинов будут снова становится
доступным. И можно сказать, что общее предложение биткоинов в секунду будет равно S/D. Исходя
из всего вышесказанного, учитывая, что спрос равен предложению можно вывести формулу для
расчета цены биткоина P=T*D/S.

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

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

Задача биткойн-майнеров

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

Майнинг - это не схема быстрого обогащения, а очень длинный путь к заработку. Что необходимо
сделать, чтобы стать биткойн-майнером? Для начала присоединиться к сети и стать Биткойн-нодой.
Начать перехватывать и подтверждать все новые транзакции и блоки, поддерживать текущую
цепочку блоков. Чтобы создать новый блок, нужно вычислить случайный одноразовый код (nonce),
который позволит блоку считаться подтвержденным. Эта сложная вычислительная работа, которая
является самой трудной задачей для майнера. Когда майнер путем долгих вычислений находит блок,
он надеется, что все остальные майнеры признают этот блок, что они подтвердят его и начнут
майнить, продолжая цепочку, и что они не признают блок конкурента вместо этого блока. И если все
это совершится, то майнер получит вознаграждение в объеме более 25 биткойнов за блок. Это около
$15,000 US.

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


поиск блоков, - это всего лишь стимул, чтобы побудить майнеров осуществлять подтверждение, так
как это необходимо для функционирования биткойн в качестве валюты.
Что собой представляет процесс поиска достоверного блока? Необходимо вспомнить о
существовании 2 основных структур данных на основе хэша. Существует цепочка блоков (block
chain), где каждый заголовок блока указывает на предыдущий заголовок блока в цепочке. В каждом
блоке есть дерево Меркла, которое представляет собой бинарное дерево на основе хэша всех
транзакций, включенных в блок.

Рис. 5.1. Процесс поиска достоверного блока

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

Потом он создает блок с правильным заголовком, который указывает на предыдущий блок ( рис.
5.1). Далее майнеру необходимо решить самую сложную задачу – найти случайный код(nonce),
чтобы хэш заголовка блока начинался с необходимого количества нулей. Майнер может начать со
случайного одноразового кода (nonce), состоящего только из нулей (32-битное целое число) и,
попробовав, получит неверный хэш. Тогда он перейдет следующему коду (nonce) с номером 1, и хэш
также будет неверным. Затем код (nonce) номер 2, хэш также окажется неверным. Майнер будет
пытаться использовать каждое возможное значение для этого 32-битного целого числа, и, возможно,
ни в одном случае хэш не будет верным.

Тогда ему потребуется внести изменения.

Комиссионная транзакция (coinbase transaction) существует там, где майнеры фактически создают
новые монеты и выдвигают свои права на них. В ней существует дополнительный параметр
одноразового кода (nonce), содержащий только нули. После того, как майнер исчерпал все
возможные одноразовые коды (nonce) в заголовке блока, он использует дополнительный код (extra
nonce) в комиссионной транзакции, который изначально содержит только нули. Он перейдет к
дополнительному коду (extra nonce) в комиссионной транзакции и изменит его на 1, и затем начнет
поиск кодов (nonce) в заголовке блока заново.

При изменении этого параметра в комиссионной транзакции, все дерево транзакций Меркла
меняется. Таким образом, изменения будут распространяться до конца. Изменение дополнительного
кода (extra nonce) в комиссионной транзакции обойдется гораздо дороже, чем изменение
одноразового кода (nonce) в заголовке, по этой причине майнер делает это как внешний цикл. А
внутренний цикл, в котором он действительно трудится, - изменение кода (nonce) в заголовке блока.
Но в очередной раз первая попытка не сработет, так что майнеру придется перебирать возможные
значения дальше. Поиск nonce это действительно сложный вычислительный процесс, так что
подавляющее большинство кодов (nonce), которые проверяет майнер, не срабатывают.

В конечном счете, если майнер посвятит этому достаточно времени, он найдет правильную
комбинацию дополнительного кода (extra nonce) в комиссионной транзакции и одноразового кода
(nonce) в заголовке, и сгенерирует блок с хэшем, который начинается с достаточного количества
нулей, чтобы считаться достоверным. Тогда он захочет объявить об этом так быстро, насколько
может, и будет надеяться, что сможет извлечь из этого выгоду.

Рассмотрим, насколько сложно найти nonce.

Хэш любого подтвержденного блока должен быть менее 256 бит. Мы используем хэш-функцию
(SHA-256), в которой, по крайней мере первые 64 бита хэша любого достоверного блока должны
быть нулями.

В целом сложность на настоящий момент составляет 266 и это огромное число. Если попытаться
написать его десятичным числом, то получится 84 квинтильона. Приближение к этому числу,
которое можно представить, - это население Земли в квадрате. Другими словами, если бы каждый
человек на Земле был бы сам по себе своей планетой Земля с 7 миллиардами человек на ней, то
общее число людей было бы близко к этому числу.

Или другой пример, чтобы представить данное число, если бы все 7 миллиардов человек на Земле
пожали бы друг другу руки. Меньше, чем 266 общих рукопожатий должно было осуществиться.

Как определяют сложность майнинга?

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

Затем полученное отношение умножается на предыдущее значение сложности, чтобы получить


следующее значение сложности. Таким образом, значение сложности регулярно пересчитывается,
чтобы поддерживать постоянной среднюю скорость создания блоков (примерно 1 блок в 10 минут).
Это константа, которая была установлена в самом начале развития Биткойн, и каждые 2 недели
сложность переустанавливается, чтобы гарантировать, что это свойство поддерживается.

С течением времени сложность майнинга увеличивается ( рис. 5.2). И это не обязательно постоянное
линейное или экспоненциальное увеличение. Сложность зависит от многих параметров: активности
на рынке, количества новых майнеров, обменого курса и т.п. На текущий момент основным
фактором является увеличение вычислительных мощностей майнеров в сети. Чем больше людей
занимаются хэшированием, тем быстрее создаются новые блоки, и сложность корректируется. Таким
образом, на создание новых блоков снова затрачивается 10 минут. На рис. 5.2 изображена
скачкообразная функция сложности, даже несмотря на то, что общая скорость хэширования растет
плавно, сложность меняется скачкообразно.
Рис. 5.2. Динамика сложности майнинга

Другой способ доказать скачкообразность функции сложности – это выяснить, сколько времени в
среднем потребуется для создания нового блока. На рис. 5.3 показано, сколько прошло секунд между
последовательно идущими блоками в цепочке блоков.

Рис. 5.3. Соотношение времени, затрачиваемого на создание блока, и сложности

Можно заметить, что линия затрат времени на создание нового блока постепенно снижается, затем
быстро возрастает, и снова постепенно снижается. Это объясняется тем, что сложность сбрасывается
каждые 2 недели, а средняя скорость создания новых блоков возвращается на уровень 10 минут
(примерно). Затем чем больше мощностей привлекается в сеть, когда сложность остается прежней,
тем быстрее майнеры создают новые блоки. По прошествии 2 недель сложность переустанавливается
на 10 минут, и процесс начинается сначала.

Несмотря на то, что цель заключается в том, чтобы новый блок создавался каждые 10 минут, в
среднем это значение ближе к 9 минутам, а к концу периода в 2 недели это значение снижается
примерно до 8 минут.
Аппаратное обеспечение майнинга

Биткоин использует хэш-функцию SHA-256. Это криптографическая хэш-функция общего


назначения, являющаяся частью большого семейства функций SHA-2, которые были
стандартизированы в 2001 году. Хэш-функции семейства SHA-2 были разработаны АНБ (Агентство
национальной безопасности Соединённых Штатов (англ. National Security Agency, NSA)). SHA-256
неприступна криптографически, хотя имеет некоторые теоретические недостатки, которые начинают
проявляться в настоящее время. На смену семейству SHA-2 должно прийти семейство SHA-3,
которое на текущий момент находится на завершающей стадии стандартизации. Однако на момент
разработки Биткойн семейство SHA-3 не было доступно и SHA-256 была хорошим выбором, так как
это была самая сильная криптографическая хэш-функция общего назначения в то время. Вполне
возможно, что она станет менее безопасной по мере существования Биткойн, но на данный момент
уязвимостей в ней не выявлено и она считается достаточно устойчивой.

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

Рис. 5.4. Углубленная схема SHA-256

Длина внутреннего состояния SHA-256 составляет 256-бит, она разделена на 8 32-битных слова,
поэтому больше оптимизирована для 32-битных платформ.

На каждом этапе берутся некоторые из этих слов, к которым применяются 4 различных параметра
настройки, которые находятся на бит-уровне. Таким образом, с каждого из них перебрасывают или
добавляют 2 или 3 бита - основные логические операции.

Затем берутся несколько слов из внутреннего состояния (к некоторым были применены параметры
настройки), которые составляют 32 по модулю в канале конвейерной передачи данных. Результат
всех этих добавлений привязывается к первому слову внутреннего состояния и все внутреннее
состояние сдвигается. Некоторые из идей архитектуры восходят к классическим линейным
регистрам сдвига с обратной связью, которые считаются одними из первых подходов к
криптографическим архитектурам.

Выше описан 1 этап функции сжатия SHA, а для полного вычисления SHA-256 потребуется
выполнить это 80 раз для 80 циклов. А в каждом цикле существуют разные константы, применяемые
на этом одном шаге, так что каждое повторное выполнение цикла не совсем то же самое.

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

Первое поколение майнинга - майнинг биткойнов позиционировался как возможный для


осуществления на компьютерах общего назначения с центральным процессором (ЦП) общего
назначения. ЦП искал коды (nonce) по линейному закону, вычислял SHA-256 с помощью
программного обеспечения (ПО) и проверял, является ли результат достоверным блоком.

Как быстро это будет происходить на компьютере общего назначения?

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

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

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

Если сегодня заняться майнингом на ПК общего назначения, поиск блока займет более 140000 лет.

Второе поколение аппаратного обеспечения майнинга связано с попытками использовать


графический процессор (GPU). Графические процессоры разработаны для обеспечения
чрезвычайной параллельности, что помогает при майнинге биткойнов, так как можно одновременно
распараллелить и вычислить множество хэшей для разных кодов (nonce), чтобы найти подходящий
nonce. Помимо этого видеокарты имеют специализированную конвейерную архитектуру для
увеличения пропускной способности, что также позволяет увеличить скорость расчетов. Примерно в
2010 году появилась первая реализация, написанная на языке OpenCL (от англ. Open Computing
Language – открытый язык вычислений), который является языком общего назначения для работы с
графическим процессором помимо графики. Это язык высокого уровня, поэтому потребовалось
немного времени, прежде чем люди начали настраивать код, чтобы быстро работать на
специализированных видеокартах.

Так в чем преимущества использования видеокарты? Первое преимущество – они легкодоступны и


просты в использовании. Второе - видеокарты обладают рядом свойств, которые делают их особенно
предпочтительными для майнинга биткойнов. Они предназначены для параллелизма, поэтому имеют
в арсенале много арифметически-логических устройств (АЛУ), которые можно использовать
параллельно, чтобы выполнять разные вычисления SHA-256, а некоторые из них также имеют
некоторые конкретные инструкции для добычи биткойнов, которые хорошо работают для SHA-256.
Видеокарта также обладает свойством, которое позволяет управлять множеством видеокарт с одной
материнской платы и ЦП, так что можно взять один компьютер и подключить к нему несколько
видеокарт.

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

Существует так называемая мера успеха в майнинге – полезная пропускная способность (Goodput),
которая заключается в пропускной способности, т.е. как быстро создаются новые блоки и как часто в
вычислениях возникают ошибки. Разгонять микропроцессор имеет смысл в том случае, если это
позволит создавать достоверные блоки быстрее, даже если это приведет к ошибкам в вычислениях.
Таким образом, если можно настроить одну кнопку и запустить видеокарту на 50% быстрее, даже
если ошибки в вычислениях составляют 30% времени, итоговая скорость увеличится в 1,5 раза. Это
значит, что блоки будут создаваться быстрее , чем при нормальной скорости и без ошибок. На
поиски ответов на вопросы насколько следует разгонять микропроцессор и какие ошибки это создаст
было потрачено много времени. Со временем майнеры стали масштабировать это решение. Если
одна видеокарта работает хорошо, то лучший результат можно получить, используя 2 и более карт.
Постепенно появились примитивные установки, одна из которых изображена на рис. 5.5. Эти
установки собирались вручную – стойки, простейшие системы охлаждения и т.д.

Рис. 5.5. Примитивные установки

Рассмотрим недостатки ускорения. Графический процессор имеет много комплектующих,


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

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

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


потребляется большое количество энергии.

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


размещения видеокарт.

Какую производительность можно получить от использования видеокарт?

Высокопроизводительные видеокарты с множеством грубых наладок могут предоставить до 200


мегагерц. Что приблизительно составляет 227 хэшей в секунду.

Это на порядок выше производительности с использованием ЦП. Тем не менее, даже если прибавить
к этой видеокарте еще 100 видеокарт при текущем уровне сложности уйдет 174 года на поиск блока.

Примерно в 2011 году майнеры начали использовать программируемые пользователем вентильные


матрицы (ППВМ). Это было приблизительно в то время, когда на языке Verilog вышла первая
реализация майнинга биткойнов. Verilog является языком описания аппаратуры, используемый для
программирования ППВМ.

ППВМ определены как аппаратура, которая может изготавливаться по специальным требованиям


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

Как и в случае с видеокартами, несколько ППВМ лучше чем одна ППВМ. Поэтому ППВМ стали
объединять в аккуратные стойки, которые не имеют ничего общего со своими предшественниками –
стойками с объединенными видеокартами. Но ППВМ, которые используются для майнинга
биткоинов, постоянно пребывают в активном состоянии и работают на пределе, что вызывает
ошибки и сбои. Также оказалось сложным оптимизировать 32-битный шаг, который имеет
решающее значение для вычисления SHA-256. ППВМ менее доступны для приобретения, чем
видеокарты. Мало кто знает, как программировать ППВМ или как настроить их.

Выяснилось, что стоимость производительности была добавочной, всего лишь предельным доходом
по сравнению с использованием видеокарт, даже несмотря на то, что производительность ППВМ
выше. Поэтому использование видеокарт доминировало в области майнинга довольно недолгое
время, примерно около года. Еще более коротким был период, когда ППВМ считалась популярным
аппаратным обеспечением для майнинга биткойнов. Но если правильно использовать ППВМ, можно
достигнуть производительности около гигагерца. Но даже с такой производительностью и с
условием объединения 100 ППВМ, всё равно потребуется 25 лет для создания блока.

Сегодня скорость вычисления - миллиард хэшей в секунду.

На сегодняшний день в сфере майнинга биткойнов доминирует интегральная схема специального


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

Большинство ASIC имеют довольно значимые оговорки, которые обязывают покупателя


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

Компании, продающие ASIC, появились в 2012 году, поэтому им необходимо платить за


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

Необходимо отметить, что оборудование устаревает в течение 6 месяцев. Часто в первые 6 недель
зарабатывается половина прибыли, ожидаемой за все время существования оборудования для
майнинга. Тот факт, что такая высокая доля прибыли приходится на первые 6 недель, означает, что
придается большое значение скорости доставки. Если произошла задержка в доставке на 1 неделю,
то покупатель потерял шестую часть самого прибыльного периода жизненного цикла ASIC. По мере
повышения сложности майнинга, цена на оборудование будет падать.
Это объясняет, почему компании требуют совершения предзаказов. Существует большая
конкуренция на то, чтобы получить ASIC первым. Также известно множество историй о том, как
компании, производящие ASIC, пытались пару недель использовать их сами, перед тем как
отправить покупателям.

Таким образом, ситуация на рынке все еще неблагосклонна к начинающим майнерам, которые
желают сделать заказ онлайн на ASIC, чтобы начать зарабатывать деньги. Фактически, почти во всех
случаях люди, разместившие заказы на оборудование для майнинга, должны были потерять деньги
на основе произведенных в то время расчетов. За исключением одного момента, связанного с тем,
что стоимость биткойна росла в течение большей части истории существования сети Биткойн.
Растущие цены выручают майнеров, которые потеряли бы деньги в случае стабильных цен.

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

Сейчас наступила эра профессионального майнинга. Во всем мире появляются профессиональные


центры майнинга.

Для организации процессионального майнинг центра необходимы три составляющие:

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

Такие страны как Грузия и Исландия пользуются популярностью для создания майнинг-центров.

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

Мы рассмотрели эволюцию майнинга биткойнов от центрального процессора (ЦП) к графическому


процессору, от графического процессора к программируемой пользователем вентильной матрице
(ППВМ), от ППВМ к интегральной схеме специального назначения (ASIC), которая используется в
настоящий момент. Эволюция золота происходила от отдельных людей с золотопромывочным
ковшом к небольшой группе людей, оснащенных бочечно-шлюзовым прибором (ПБШ), а от неё к
рассыпной золотодобыче, далее следует современная добыча золота, которая представляет собой
извлечение из гигантских открытых карьеров сырья, которое измеряется тоннами.

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

Всегда ли отдельные майнеры будут вне игры? Есть ли способ вернуть их в игру? Противоречит ли
это первоначальной идее системы Биткойн? Противоречит ли существование интегральных схем
специального назначения и крупных майнинг центров исходному видению Сатоши Накомото о том,
что каждый человек, который имеет доступ к сети, может заниматься майнингом на своем
компьютере?

Те, кто считает, что это противоречит первоначальной идее, должны ответить на следующий вопрос.
Возможно ли зарабатывать деньги, занимаясь майнингом без использования интегральных схем
специального назначения (ASIC)?
Энергопотребление и экология

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


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

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

Существует принцип, разработанный Рольфом Ландауэром в 1960-х годах, который гласит, что на
любое необратимое вычисление затрачивается минимальная энергия. Принцип выведен из основ
физики. Не будем здесь рассматривать выводы, за исключением того, что при каждой обработке 1
бита в необратимом вычислении, существует минимальное количество Джоулей, которые
необходимо использовать. Исходя из основных законов физики энергия никогда не разрушается, она
преобразуется из одной формы в другую.

В случае вычисления энергия, в основном, преобразуется из электричества, которое является


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

Итак, поскольку любое необратимое вычисление потребляет некоторый объем энергии , а SHA-256
является необратимой, то энергопотребление является неизбежным атрибутом майнинга биткойнов.
Следует отметить, что ограничения, предусмотренные принципом Ландауэра, меньше, чем объем
электроэнергии, который потребляется сегодня, более чем в 1000 раз. Таким образом, на текущий
момент майнеры даже близко не подошли к теоретической оптимальной эффективности вычислений,
но даже если бы теоретический оптимум был достигнут, для майнинга биткойнов по-прежнему
использовался бы некоторый объем энергии.

Почему майнинг биткойнов не может обойтись без потребления энергии? Данный процесс состоит
из 3 частей.

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

Затем майнер подключит оборудование к сети и начнет майнить. Энергия будет потребляться всё
время, которое оборудование майнит биткоины - этот объем и будет составлять электроэнергию,
потребляемую во время майнинга.

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

Однако энергопотребление будет всегда, даже, несмотря на то, что оно немного снизится, вследствие
повышения эффективности установки со временем.
Другой факт касательно как электроэнергии, так и энергетических затрат на производство и
эксплуатацию, заключается в том, что они, вероятно, снизятся, вследствие экономии от масштаба.
Управляя огромным центром обработки данных для майнинга, можно использовать энергию более
эффективно. Однако существует нюанс, который заключается в охлаждении оборудования в целях
предупреждения неисправностей. Если майнинг-центр находится в Антарктиде, то, возможно,
оборудование охлаждается естественным путем, однако в любом другом месте придется выложить
огромную сумму за электричество, чтобы охладить оборудование. При этом стоимость
электричества увеличивается по мере роста масштаба. Существуют два основных подхода к оценке
энергопотребления всей системы Биткойн. Конечно, они не дают точную оценку, так как система
Биткоин децентрализована – в ней участвуют майнеры по всему миру и их деятельность не
документируется. Тем не менее, можно вычислить приблизительную цифру.

Рассмотрим первый способ. Вознаграждение за создание каждого блока, которое происходит каждые
10 минут, составляет около 15 000 долларов США или 25 биткойнов. Если пересчитать это как доход
в секунду, получится 25 долларов США в секунду, которые были добыты и получены майнинг-
сообществом. Если майнеры все 25 долларов США в секунду обменяют на электроэнергию, сколько
они могут получить? В США цены на электроэнергию варьируются от штата к штату, допустим,
цена за киловатт-час составит примерно 0,10 доллара США. Перейдем к более стандартной научной
единице измерения – мегаджоуль.

Таким образом, если майнеры все свое вознаграждение в 25 долларов США в секунду потратят на
приобретение электроэнергии, то они должны будут получать 900 мегаджоулей в секунду. Джоуль в
секунду – это ватт. Поэтому 900 мегаджоулей в секунду составляет 900 мегаватт или 900 миллионов
ватт.

Второй способ оценить тот же показатель – это применить принцип восходящего анализа. Выясним,
сколько хэшей вычисляются майнерами, просмотрев сложность каждого блока. И что собой
представляет самое лучшее оборудование, которое могут использовать майнеры? Если изучить
характеристики оборудования для майнинга, то можно обнаружить, что установки с самой высокой
производительностью способны 1 ватт электроэнергии преобразовать в 1 гигахэш, т.е. с помощью
данного оборудования вычисляется 1 миллиард хэшей в секунду и потребляется около 1 ватта
энергии. Общая производительность системы составляет около 150 миллионов гигахэшей или 150
петагерцев.

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

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

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

В действительности, значение показателя устанавливается где-то посередине, однако следует


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

Так сколько же это – мегаватт?

Одна из крупнейших электростанций в мире "Три ущелья", которая находится в Китае – это
электростанция мощностью 10000 мегаватт. На самом деле ее мощность немного выше, а это
средний уровень мощности, который генерируется станцией. В то время как среднестатистическая
крупная гидроэлектростанция генерирует около 1000 мегаватт. Крупнейшая атомная электростанция
в Японии, к примеру, генерирует около 7000 мегаватт, тогда как среднестатистическая атомная
электростанция – около 4000 мегаватт. Угольные электростанции, использовавшиеся в прошлом,
генерировали от 1000 до 2000 мегаватт.

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

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

Есть мнение, что Биткойн расходует энергию напрасно, так как эта энергия расходуется на
вычисление SHA-256, которое не служит какой-либо очевидной цели. Но можно заметить, что
энергия, потребляемая традиционной валютной системой, тоже расходуется впустую, и она не
служит никакой другой цели, кроме поддержания валютной системы.

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

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


не просто наблюдать за тем, как рассеивается тепло в атмосферу?

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

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

Эффективность данной установки не намного хуже, чем электрообогревателя. Так что это отличная
идея, и, возможно, многообещающая перспектива, заслуживающая рассмотрения в будущем. Однако
существует несколько проблем. Например, электрообогреватели все еще менее эффективны, чем
газовые. Поэтому в географических областях с суровым климатом дома, как правило, обогреваются с
помощью газового котла. Если использовать оборудование для майнинга не только для майнинга, но
и для обогрева, что произойдет, если все выключат свои установки для майнинга биткойнов на лето?
Будет ли пропускная способность системы Биткойн падать сезонно, исходя из того, сколько тепла
необходимо людям? Будет ли это происходить в дни, когда температура будет устанавливаться на
уровне выше среднего?

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

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

Стало бы человечество богаче, если бы не потребляло такой объем электроэнергии на поддержание


системы Биткоин? Можно ли создать валюту, которая не имела бы доказательства выполнения
работы и не потребляла бы такой объем электроэнергии? Эта тема будет затронута в следующих
лекциях.

Пулы совместного майнинга

Прежде, чем говорить о пулах майнинга, рассмотрим деятельность отдельного майнера с


экономической точки зрения. Допустим, майнер тратит 6000 долларов США на приобретение
хорошего нового оборудования для майнинга. После приобретения он надеется на то, что создаст
блок через 14 месяцев с помощью данного оборудования. По сегодняшним ценам один созданный
блок стоит около 15000 долларов США. Значит, что ожидаемый доход данного оборудования
составит около 1000 долларов США в месяц. Возможна такая ситуация, что затраты на
электроэнергию и на эксплуатацию оборудования составят 1000 долларов в месяц – тогда не стоило
покупать оборудование за 6000 долларов. Но необходимо помнить, что майнинг – это случайный
процесс. Майнер никогда не знает, когда сможет создать новый блок, - он может создать его в любое
время. Если посмотреть на распределение количества блоков, которые, вероятно, можно создать за
первый год с помощью оборудования с мощностью около 1 терахэш, то можно увидеть, что
дисперсия довольно высока, то есть ожидаемое количество блоков, невелико. Если просто взглянуть
на распределение Пуассона, то можно увидеть, что вероятность того, что в первый год не получится
найти ни одного блока составляет более 40%.

Рис. 5.6. Неопределенность майнинга

Другими словами, на оборудовании за 6000 долларов, потребляющем большой объем энергии, за


целый год можно ничего не заработать.

Вероятность того, что за первый год удастся создать один блок , составляет 36%. Еще чуть меньше
вероятность того, что получится создать два или более блоков – только в этом случае можно
говорить о прибыли от использования этого оборудования.
Все вышесказанное означает, что для отдельного майнера майнинг – это, по сути, большая игра в
рулетку.

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

Администратор пула в большинстве случаев взымает определенную плату за управление пулом.


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

Очевидно, администратору нельзя полагаться на "честное слово" участников, так как каждому из них
выгодно преувеличивать свой вклад. Существует механизм, с помощью которого майнеры могут
вероятностно доказать, какой вклад они вносят, отправляя шары. Шары – это блоки, которые
недостаточно хороши, чтобы считаться достоверными. Тогда как довольно редко можно создать
действительно достоверный блок, выходной хэш которого начинается с 66 требуемых нулей. Будет
попадаться гораздо больше недостаточно хороших блоков, которые начинаются с множества нулей,
но не с 66, что необходимо, чтобы блок считался достоверным.

Таким образом, общий размер может быть, например, 40 бит или, возможно, 50 бит зависимости от
того, для какого размера образован пул.

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


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

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

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

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

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

Таким образом, майнер, создавший достоверный блок, не обладает никаким преимуществом.

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

Существует множество видов начисления вознаграждений на основе отправленных шар. Рассмотрим


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

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

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


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

Таким образом, если пул достаточно крупный, то дисперсия распределения найденных достоверных
блоков будет достаточно низкой. Пропорциональный вид начисления награждений может быть
хорошим решением. И это снизит риск, лежащий на администраторе пула. На данный вид также не
распространяется проблема присущая виду PPS, которая заключается в том, что при оплате за шару у
майнеров нет мотивации на то, чтобы отправлять достоверные блоки. У них нет мотивации, но у них
есть возможность при нахождении достоверного блока сохранить это в тайне.

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

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

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

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

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

Таким образом, к 2014 году подавляющее большинство всех майнеров стали участниками пулов
совместного майнинга. Мало кто сейчас занимается майнингом отдельно, не вступая в пулы. В июне
2014 года произошло интересное событие - самый крупный пул GHash.io настолько увеличился, что
на него стало приходиться 50% мощности всей системы Биткойн. Это то, чего сообщество Биткоин
долгое время боялось, однако, по существу, GHash предлагал такие хорошие условия всем майнерам,
вступившим в пул, что все захотели присоединиться. В последствии пул GHash немного
уменьшился, так как они сделали свои операционные сборы менее привлекательными, чтобы
попытаться снизить количество майнеров пула. Примерно половина мощности сети Биткоин
контролируется, в основном, 2 пулами совместного майнинга. Остальная часть приходится на
небольшое число других пулов майнинга.

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

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

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

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

Стимулы и стратегии майнинга

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

Но, оказывается, существуют некоторые интересные стратегические решения, которые майнер


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

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

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

Таким образом, в каждом случае применяется определенная стратегия по умолчанию, которая


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

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

Все зависит от того, какие мощности у него имеются - выразим их с помощью параметра α, который
находится в пределах от 0 до 1 и показывает, какую долю мощности от мощности всей сети
контролирует майнер.

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

Самая простая атака – это атака "double spending",основная идея которой заключается в проведении
двойного расходования.

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

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

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


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

На данном этапе этот блок не будет считаться достоверным, так как он основывается на более ранней
точке. Он не находится в самой длинной действительной цепочке блоков. Однако если майнер
обладает большей частью мощности, т.е. если α больше 0,5, то, в конечном счете, его альтернативная
цепочка блоков будет длиннее, чем та, которая ранее была самой длинной. И в этот момент его самая
длинная цепочка блоков становится действительной.

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

Иногда говорят об атаке "51" в сети Биткойн, однако было бы ошибкой считать, что это магический
порог, перейдя который, внезапно можно совершить атаку. В действительности, это скорее похоже
на склон, который демонстрирует, что совершить атаку становится легче по мере роста α от 0,5 до 1.

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

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

Так кто может обвалить систему Биткоин подобным образом? Такую атаку называют атака
Голдфингер. Она названа так вчесть знаменитого злодея из фильма о Джеймсе Бонде, который хотел
сделать радиоактивным все золото, которое правительство США хранило в Форт-Ноксе, чтобы
фактически уничтожить золотой запас США.

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

Помимо этих угроз, неясно, при каких еще сценариях необходимо беспокоиться о
крупномасштабных атаках.

Хотя возможно, что совершить атаку легче, чем достичь значения α>0,5. Чтобы достичь α>0,5
требуется скупать вычислительные мощности, а это очень дорого. При этом они должны быть
больше, чем у кого-либо. Гораздо проще и дешевле подкупить людей, которые контролируют
вычислительные мощности. Можно передать им конверт, полный наличных денег. Или объявить о
создании нового пула совместного майнинга и работать в убыток. Например, объявить, что о награде
1,01, что явно противоречит принципу устойвивого развития, но тем не менее привлечет майнеров в
пул и, возможно, позволит выйти мощности пула за рамки 50%. Также существуют некоторые
другие искусные методы заставить людей работать над вашей альтернативной цепочкой блоков,
например, оставляя подсказки в цепочке блоков.

Идея состоит в том, чтобы вместо самостоятельного приобретения вычислительных мощностей,


просто платить тем, кто уже обладает ими, за работу на конкретной ветке.

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

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

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

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

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

Еще один вид атаки – атака "утаивание блока" (block-withholding). Основная идея заключается в том,
что майнер не объявляет о блоках сразу, как только находит их. Вместо этого он хочет попытаться
опередить остальных. "Опередить" значит найти два блока подряд, прежде чем остальные майнеры
найдут хотя бы один. До тех пор пока кто-то утаивает два найденных блока, остальные майнеры
будут пытаться продолжить, как они считают, самую длинную достоверную цепочку блоков. И все
эти усилия окажутся пустой тратой времени для них.

Поэтому, пока кто-то опережает остальных на 2 блока, он майнит, по сути, без конкурентов. Как
только остальные найдут действительно достоверный блок, они сразу опубликуют его, и все примут
его. Но затем майнер, который утаивал 2 блока, мгновенно их объявляет, и его цепочка немедленно
становится самой длинной достоверной цепочкой блоков. И этот блок, который остальная часть
майнеров так усердно пыталась найти, мгновенно становится изолированным и отрезанным от самой
длинной цепочки блоков. Данный подход был назван "эгоистичным майнингом".

Так что произойдет, если применить стратегию "утаивание блоков" и опережать остальных только на
1 блок? Вместо того, чтобы быть на 2 блока впереди, как было рассмотрено ранее, у майнера лишь 1
блок в запасе. Когда майнеры объявят о найденном достоверном блоке, ему немедленно следует
объявить о своем блоке. Появляются 2 потенциально самые длинные цепочки блоков, и каждый
майнер будет решать, какую из цепочек продолжать.

Таким образом, если в запасе всего 1 блок, то необходимо вступить в гонку сразу же, как только кто-
то другой нашел достоверный блок. Жизнеспособность подхода "утаивание блоков" будет в
значительной степени зависеть от шансов на победу в этих гонках. Каким образом каждый раз
одерживать победу? Можно ожесточенно бороться за то, чтобы обрести хорошую позицию в сети
или попытаться взаимодействовать с каждой нодой. Можно попытаться подкупить людей, включив в
свой блок небольшие подсказки, чтобы сделать его более привлекательным для продолжения
цепочки. При честной конкуренции вероятность победы в гонках составляет 50%. При такой
вероятности "утаивание блоков" является улучшением только если α>0,25.

Несмотря на то, что такая атака не наблюдалась на практике, удивительно, что это вообще возможно.
Это противоречит исходной идее сети Биткойн, что без значения α>0,5, то есть без большинства
сети, не было лучшей стратегии, чем базовая. Существование этой атаки доказывает, что майнер
даже без контроля более 50% сети может использовать альтернативную стратегию и получить от
этого выгоду.

Еще один интересный случай связан с применением стратегии "punitive forking" (англ. punitive –
связанный с применением наказания, forking – ответвление). Она используется в случае, когда
майнеры хотят внести в черный список транзакции с определенного адреса, чтобы навсегда
заморозить деньги на этом адресе. Майнеры могут объявить, что они отказываются майнить для
продолжения цепочки, в которой присутствует транзакция, отправленная с адреса X.
Причина экстремальности этой стратегии в том, что если кто-то обладает меньшим объемом
вычислительных способностей, чем большинство сети, и объявляет, что отказывается майнить для
продолжения цепочки, в которую включена транзакция с адреса X, он изолирует себя от самой
длинной цепочки, и весь объем майнинга, который он сделает, по сути, оказывается пустой тратой
времени.

Таким образом, можно применить данную стратегию, однако очень быстро цепочка окажется
изолированной. И это стало бы пустой тратой времени и электроэнергии. Но есть гораздо более
умный способ применения стратегии "punitive forking" – это, так называемый, "feather-forking" (англ.
feather – флюгер, forking – ответвление). Основная идея заключается в том, что вместо того, чтобы
объявлять о своем намерении всегда работать над альтернативной цепочкой, если в нее входит
транзакция с адреса X, майнер объявляет публично, что будет пытаться создать альтернативную
самую длинную цепочку, если обнаружит, что текущая цепочка, содержит транзакцию с адреса X.
Но что через некоторое время он откажется от нее. Обычно после одного или двух блоков,
подтверждающих транзакцию с адреса X, майнер возвращается обратно к самой длинной
достоверной цепочке.

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

α в квадрате может принимать разные значения. Допустим, майнер контролирует 20 % мощности, в


этом случае α примет достаточно низкое значение. Вероятность того, что у него получится
избавиться от нежеланной транзакции, составит 4%, но он может привлечь других майнеров.
Поскольку майнер объявлял публично о своей атаке, то остальные майнеры знают, что если они
включат транзакцию с адреса X, то с вероятностью, равной в квадрате, найденный блок окажется
изолированным вследствие атаки "feather-forking".

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

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

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

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

Транзакциям присваивается приоритет, который суммируется по всем входным данным. Значение


этих входных данных времени показывает, как долго существует транзакция. Как давно эти входные
данные были помещены в цепочку блоков. Всё это делится на размер транзакции. Таким образом,
крупные транзакции, которые тратят старые монеты, которые не были переведены через некоторое
время, и транзакции, которые меньше, обладают более высоким приоритетом. Под "меньше" здесь
подразумевается меньший размер транзакции, что подразумевает, что в ней нет сложного скрипта.

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

Это число, полученное довольно случайным образом, но оно находится в базовом клиенте, поэтому
нужно платить, если необходимо перевести биткойны с приоритетом транзакции меньшим, чем
0,576.

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

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

Эта лекция посвящена вопросам анонимности в системе Биткоин. Существуют разные мнения о том,
насколько анонимен биткоин.

Буквально "анонимный" означает "без имени". Исходя из этого определения свойство анонимности
можно интерпретировать двумя способами. Первый - в системе не используются настоящие имена
(реальные личности). Второй - в системе вообще не используются какие-либо имена.

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

Ранее говорилось о том, что можно создать любое количество открытых ключей (псевдонимов). Но
сделает ли это псевдоним анонимным? Анонимность в информатике - это просто не связанная ни с
чем псевдонимность.

Несвязанность заключается в том, что пользователь постоянно взаимодействует с системой, и эти


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

Существует полностью анонимное взаимодействие, при котором можно создавать сообщения


вообще без установления авторства - модель, которая используется на форуме 4chan.

Итак, анонимность в программировании - это псевдонимность плюс несвязанность. Разные действия


пользователя должны быть не связаны друг с другом.

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

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

Предположим, Боб платит за продукт определенное количество биткойнов и отправляет платеж по


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

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

Необходимо отметить, что в Биткойн часто проводится интуитивный анализ услуг анонимности,
например, услуги микширования, которая будет рассмотрена позже в этой лекции. Для оценки
анонимности придумывают способы такие, как анализ заражения. Это интуитивно понятный способ
отслеживания потока между конкретным адресом отправки и адресом приема. Несмотря на простоту,
анализ заражения не является подходящим методом для расчета анонимности. Причина в том, что он
предполагает определенный тип атаки, которую может совершить противник. Это довольно простая
атака, непосредственно направленная на определение количества потоков между отправляющим и
принимающим адресами. Поэтому если противник окажется умнее, он может реализовать другой вид
атаки, и тогда расчет анонимности методом анализа заражений окажется неверным. Расчет степени
анонимности должен выполняться с точки зрения конкретной конфигурации анонимности, а в
некоторых случаях с учетом распределения вероятностей для этой конфигурации анонимности. И
это требует тщательного анализа протокола обмена данными в системе.

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

Анонимность в системе биткоин позволяет обеспечить уровень конфиденциальности криптовалюты


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

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

Поэтому рекомендовано, чтобы исследователи и разработчики Биткойн координировали усилия по


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

Логично спросить, можно ли разработать технологию, чтобы допускалось только "хорошее"


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

Такая дилемма возникает далеко не первый раз. Для примера рассмотрим Tor. Tor - это сеть связи,
которая проводит сообщения между отправителем и получателем через сеть узлов. С помощью
шифрования сеть гарантирует, что до тех пор, пока хотя бы некоторые узлы в этой сети правильны
(не вредоносны), злоумышленник не сможет связать отправителя с получателем. Очевидно, что это
может быть использовано для достижения как честных, так и нечестных целей. Tor используется,
прежде всего, обычными людьми, которые хотят защитить себя или сохранить конфиденциальность
в Интернете при просмотре веб-сайтов. Он используется журналистами, активистами, диссидентами
и т. д. Он также используется правоохранительными органами. Подставные агенты могут посещать
веб-сайты и не афишировать, что их IP-адрес принадлежит правоохранительным органам. Всё это
положительные стороны использования Tor. Но есть и отрицательные стороны. Так, например, с
помощью Tor бот-сеть распространяет вредоносное программное обеспечение. Различить эти
ситуации технически почти невозможно. И поэтому Tor столкнулся с той же проблемой, что и
биткоин. В целом можно сделать вывод о том, что развитие технологии для мира лучше, чем их
отсутствие, и на самом деле одним из основных спонсоров Tor является Государственный
департамент США. Tor помогает диссидентам в других странах, которые борются с репрессивными
правительствами. Недавно так же появилась новость о том, что ФБР провело успешную операцию с
использованием подставного агента против людей, использующих Tor для распространения детской
порнографии. Поэтому необходимо помнить, что существует уровень над технологиями, который
может быть использован правоохранительными органами, и есть различные способы найти людей,
которые используют новые технологии для совершения преступлений.

Следует отметить, что Биткоин не является первой попыткой создания анонимной криптовалюты.
Фактически, еще в 1982 году криптограф Дэвид Шаум предложил нечто вроде "слепых подписей",
которые помогли ему разработать в дальнейшем анонимные электронные деньги.

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

Рис. 6.1. Анонимная электронная валюта на основе слепых подписей

Допустим, что есть банк и протокол анонимных электронных денег на основе слепых подписей ( рис.
6.1). В своей базе данных банк хранит две таблицы. Первая таблица имеет сопоставление
пользователей с балансом, который они имеют на своем банковском счете. Кроме того, у банка есть
еще одна таблица с серийными номерами потраченных монет. Предположим, пользователь хочет
вывести анонимную монету стандартного наименования. Допустим, номинал монеты - 1 доллар, и
все значения относятся к долларам. Таким образом, первое, что банк собирается сделать при
получении этого запроса, это вычесть баланс этого пользователя, он снизился с 10 до 9. Следующее,
что пользователь и банк собираются сделать вместе, это выполнить двухсторонний протокол.
Протокол слепой подписи, в конце которого пользователь выбирает случайный серийный номер
монеты. Это серийный номер для анонимной монеты, и пользователь полностью свободен в выборе
этого номера. Он сделал это, и затем был выполнен протокол, в конце которого пользователь
получил подпись серийного номера, но таким образом, что банк фактически не узнал серийный
номер. Банк не знал, какой номер он подписывал. Он просто знал, что был номер, который он
подписал.

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

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

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

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

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

Рис. 6.2. Анонимная электронная валюта на основе слепых подписей. Банк не может связать
отправителя и получателя.

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

Недостатком этой системы является банк, от доверия к которому она полностью зависит. Эта модель
доверия сильно отличается от той, что используется в Биткоин. Поэтому со временем
децентрализация стала более важной задачей, чем анонимность, для развития электронных денег.
Люди были готовы принять децентрализованную систему электронных операций только свойством
псевдонимности, а не реальной анонимности, а затем начать работу над улучшением анонимности.
Как правило, анонимность и децентрализация противоречат друг другу. Для этого есть, по крайней
мере, несколько причин. Из рассмотренного на рис. 6.1 протокола с использованием слепых
подписей видно, что можно рассчитывать на анонимность, но при этом нельзя справиться без
центральной роли банка в этой схеме.

Даже если бы удалось избавиться от слепых подписей и использовать псевдоним, а не настоящую


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

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


анонимности и конфиденциальности. Таким образом, есть две большие задачи для решения –
достижение анонимности децентрализации.

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

4chan -англоязычный анонимный веб-форум.

ECash - The Eastern Caribbean Automated Clearing House, электронная сеть для выполнения
электронных транзакций.

PayPal (с англ. "приятель, помогающий расплатиться") — крупнейшая дебетовая электронная


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

Reddit (I read it on Reddit) - социальный новостной сайт, на котором зарегистрированные


пользователи могут размещать ссылки на какую-либо понравившуюся информацию в интернет.

Tor (сокр. от англ. The Onion Router)— свободное и открытое программное обеспечение для
реализации второго поколения так называемой луковой маршрутизации. Это система прокси-
серверов, позволяющая устанавливать анонимное сетевое соединение, защищённое от
прослушивания. Рассматривается как анонимная сеть виртуальных туннелей, предоставляющая
передачу данных в зашифрованном виде. С помощью Tor пользователи могут сохранять
анонимность в Интернете при посещении сайтов, ведении блогов, отправке мгновенных и почтовых
сообщений. Есть возможность обеспечить анонимное использование Bitcoin при помощи Tor.
Бывший разработчик Bitcoin Майк Хирн, до того как ушёл на работу в R3, создал клиентское ПО
этой криптовалюты, названный bitcoinj. В отличие от оригинала, он написан на языке Java и
сопряжён с сетью Tor, что позволяет обеспечить анонимность лиц, пользующихся кошельками или
службами, которые принимают Биткойн.

Как лишить Биткойн анонимности

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

На рис. 6.3 изображена страница пожертвований WikiLeaks, на которой показана цитата,


утверждающая, что биткойн - это безопасная и анонимная цифровая валюта.
Рис. 6.3. Страница пожертвований Wikileaks

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

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

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

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

Алиса идет в супермаркет и хочет купить чайник. У Алисы есть несколько Биткойнов разного
достоинства, а в магазине чайник стоит восемь биткойнов.

Алиса имеет разные ссылки и хочет заплатить за чайник. Но у нее нет ссылки с восемью
биткойнами. Поэтому она собирается объединить несколько разных транзакций ввода в одну
транзакцию, чтобы заплатить восемь биткойнов в магазине ( рис. 6.4).
Рис. 6.4. Алиса покупает чайник в магазине

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

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

Это первый способ, как можно связать транзакции вместе. Позже будет рассмотрен метод
анонимности, называемый Coin Join (соединение монет), который помогает избежать такой атаки.
Однако этот способ является надежным только в случае использования обычного программного
обеспечения Биткойн-кошелька, и это было показано во множестве исследовательских работ. В
частности, одна из научных работ "Анализ анонимности в системе биткойнов" использовала этот
метод для определенной цели. Несколько лет назад была широко известна кража биткойнов, и
авторы этой статьи решили посмотреть, как вор перемещал Биткойны между своими несколькими
адресами. Это одна из первых крупных исследовательских работ, которые сделали анализ графика
транзакций.

Вернемся к ситуации с покупкой чайника.

Предположим, чайник подорожал до 8,5 Санти-Биткойнов. Алиса не может скомбинировать какие-


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

Поэтому она будет использовать то, что транзакции могут иметь любое количество входов и
выходов. И есть возможность создавать одну транзакцию, которая объединяет два входа для
получения одного выхода, который остается у неё, и другого выхода, который идет на адрес,
которым она владеет. Это называется адресом изменения ( рис. 6.5).
Рис. 6.5. Адреса изменения. Какой адрес у изменения?

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

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

Рассмотрим технику, предложенную в одной исследовательской статье. Авторы назвали ее идиомой


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

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

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

Исследователи смогли просмотреть весь график транзакций Биткойна и создать некоторые


гигантские кластеры, которые, по их гипотезе, принадлежат различным основным поставщикам
услуг. График, после применения этих двух эвристик выглядит как показано на рис. 6.6.
Рис. 6.6. Открытые расходы и идиомы использования. Пригоршня биткоинов: характеризующие платежи
между безымянными людьми. С. Мэйклджон и другие, IMC, 2013

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

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

Теперь можно также предположить, что маленький кластер, который имеет малую часть от общего
объема транзакций, несмотря на то, что очень большое количество транзакций проходят через него,
относится к профилю службы азартных игр, Satoshi Dice. Satoshi Dice работает так: кто-то
отправляет ему небольшое количество биткойнов, и он либо выигрывает эту ставку, либо теряет эту
ставку, то есть удваивает свои биткоины или теряет. Итак, можно сделать выводы, что кластеры
принадлежат Mt Gox, Satoshi Dice и другим. Но подобные догадки недостаточно обоснованы, так как
это всего лишь предположения. Авторы хотели бы получить надежный способ определить, какой
поставщик услуг соответствуют каждому из этих кластеров.

Как это можно сделать? Можно зайти на сайт Mt Gox и посмотреть, какой адрес они предлагают для
получения биткойнов. Но это не сработает, потому что они могут предоставлять новый адрес для
каждой отдельной транзакции, и если кто-то просто зайдет на сайт, посмотрит адрес и не выполнит
транзакцию на самом деле, тогда они просто откажутся от этого адреса. Они не собираются повторно
использовать этот адрес для другого клиента. Другими словами, этот адрес никогда не будет
использоваться. Его нельзя будет найти в блокчейне.

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

В результате авторы исследовательской работы смогли отметить основные кластеры на графике,


показанном на рис. 6.7.
Рис. 6.7. Открытые расходы и идиомы использования. Пригоршня биткоинов: характеризующие платежи
между безымянными людьми. С. Мэйклджон и другие

Фактически, большой кластер - это был Mt Gox. Чуть поменьше - Satoshi Dice. Но многие другие
было бы очень трудно отгадать, и только реально оплатив услуги, авторы смогли идентифицировать
большинство этих поставщиков услуг.

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

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


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

Другой способ - просто небрежность. Многие пользователи в конечном итоге размещают


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

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

Описываемая проблема относится к проблеме обеспечения анонимности сообщений, которая


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

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

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

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

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

CoinJoin - метод анонимизации для транзакций биткойна, предложенный Грегори Максвеллом.


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

Mt Gox – (Mount Gox) — японская биржа цифровых валют, осуществлявшая операции между
криптовалютой Bitcoin и национальными валютами. Владела более 70% трансакций и была ведущей
биржей Биткойн.

Wikileaks (от англ. wiki и leak —"утечка") — международная некоммерческая организация, которая
публикует секретную информацию, взятую из анонимных источников или при утечке данной
информации.

S – основанная на блокчейне игра со ставками, действующая с 2012 года.


Микширование (смешивание)

Для того чтобы помешать анализу графика, рассмотренному ранее, существует множество решений.
Первое из них называется смешиванием (микшированием).

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


или еще чего-то.

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

По похожей схеме работают онлайн-кошельки. В них можно сохранить биткоины, пока они не
понадобятся. Но обеспечивают ли они при этом анонимность?

В блоге New York Times Bits была запись, в которой сообщалось о предварительной публикации
документа двумя израильскими исследователями, описывающего связь между Dread Pirate Roberts,
создателем псевдонимов SO Crib, и Сатоши Накамото. Но, как выяснилось позже, это было ошибкой,
так как ссылка использовала посредника ModGaks, который является сервисом онлайн-кошелька.
Авторам пришлось отказаться от своего исследования, так как они допустили ошибку и не учли
наличия посредника в схеме.

Чтобы оценить анонимность онлайн-кошельков, сравним их со специальными сервисами


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

И это контрастирует с большинством этих онлайн-кошельков. Потому что интернет-кошельки, как


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

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

При использовании онлайн-кошелька необходима постоянная долгосрочная идентификация. Если


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

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

Таким образом, сервисы микширования обладают большей анонимностью, но вызывают меньше


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

Отклонив онлайн-кошельки как решение для обеспечения высокой анонимности, обратимся к


специализированным сервисам микширования. Их называют mix (смешение) или миксером (mixer).
Есть еще термин "прачечные", но он придает излишний моральный смысл техническому термину,
подразумевая, что сервисы микширования "отмывают деньги". На самом деле существует множество
легальных причин, по которым пользователи могут хотеть повысить свою конфиденциальность и
анонимность. В дальнейшем будем использовать технически нейтральный термин миксер. Ряд
исследователей из Принстона, Конкордии и Мэриленда предложили серию изменений для
улучшения работы миксеров, как с точки зрения анонимности, так и с точки зрения надежности.
Далее в ходе лекции будут рассмотрены предложенные исследователями способы.

Как работает миксер? Он запрашивает адрес, по которому пользователь хочет получать биткойны, и
он дает ему адрес для отправки биткойнов в миксер, а затем они оба выполняют транзакцию. Первый
способ увеличения анонимности - использовать серию миксеров вместо одного миксера. Этот
принцип был предложен Дж. Бонуа и др., в 2014 г. в статье "Смешанные монеты: Анонимность для
Биткоина с учетом микширования". Использование серии маршрутизаторов при межсетевом
взаимодействии имеет тот же эффект.

Миксеры должны реализовывать стандартный программный интерфейс. Сейчас на практике это не


совсем так. Рассмотрим, как серия миксеров будет выглядеть визуально.
Рис. 6.8. Серия миксеров

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

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


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

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

Существует множество возможных атак, в которых противник может определить связь с


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

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

Это создает некую уязвимость, потому что если миксер принимает стандартный процент, тогда
противник может использовать эту информацию для привязки входной транзакции и внешней
транзакции. Поэтому некоторые текущие миксеры пытаются рандомизировать комиссию за
транзакцию. Они говорят, что спишут случайную сумму между 1% и 3%. Это не очень хорошая идея,
потому что, если провести это через цепь миксеров, тогда величина значения во фрагменте
(фрагмент – сумма, которую ввел пользователь) будет сокращаться предсказуемым образом, и это
важная зацепка для противника.

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

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

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

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

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

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

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

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

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

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


они работоспособны в реальном мире.

В настоящее время не существует миксеров с подтвержденной репутацией. При этом сервисы


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

Поэтому как только экосистема микширования начнет развиваться, она станет


самоподдерживающейся. Но произойдет ли это в конечном итоге - неизвестно. Одно можно сказать
уверенно – пока этого не произошло.

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

Микширование - Биткоин миксер (англ. Bitcoin mixer, Bitcoin tumbler, Bitcoin mixing service) — это
анонимный сервис, который усложняет или делает практически невозможным отслеживание
Биткоин-транзакций до конечного получателя.

Онлайн кошелек - (англ. e-Purse или e-Wallet) — смарт-карта или другой электронный носитель со
встроенным чипом, позволяющий хранить электронные деньги и осуществлять различные платежи

Децентрализованное микширование

Факт, что экосистема микширования в настоящее время не существует, является причиной, по


которой многие люди предлагали децентрализованное микширование. Рассмотрим преимущества
децентрализованного микширования.

При децентрализованном микшировании пользователь не проходит через специально выделенный


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

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

Основное предложение о децентрализованном смешивании называется Coinjoin (Объединение


монет). Оно было предложено Грегом Максвелом, являющимся одним из разработчиков биткоина.

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

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

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

Давайте рассмотрим одну транзакцию в алгоритмической форме.


Рис. 6.9. Алгоритм объединения монет

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

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

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

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

Протокол кажется достаточно простым. Но есть три проблемы.

Первая проблема - как участникам этой группы найти друг друга?

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

В случае с децентрализованным вариантом микширования один злоумышленник может создать


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

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

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

Для решения проблемы анонимности узла существует простое решение Strawman (соломенное
пугало, подставное лицо). Пользователю нужно передать набор входов и выходов всем
одноранговым узлам, но при этом сломать связь между входом и выходом. Теперь это становится
проблемой анонимности сообщений вместо проблемы анонимности Биткойн. Для этого можно
использовать Tor. Участники собираются вместе, обмениваются входными адресами, разъединяются.
Затем повторно подключаются к Tor и обмениваются выходными адресами.

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

Рассмотрим решение третьей проблемы – отказ в обслуживании. Традиционное решение против


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

Благодаря этому, если потенциальный противник хочет взломать каждый Coinjoin, ему придется
сделать очень много вычислительной работы. Доказательство сжигания - аналогичная концепция.
Она также называется Fidelity Bonds в биткойне. Концепция позволяет необратимо уничтожить
некоторые биткойны, отправив их на нерасходуемый адрес.

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

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

Существует также понятие боковых каналов. Следует отметить, что боковые каналы могут быть
очень сложными. Не все виды микширования могут спасти от потоков высокого уровня, которые
могут быть идентифицированы. Рассмотрим пример. Скажем, пользователь Алиса получает
еженедельно определенное количество биткойнов в качестве дохода. И имеет привычку всегда
автоматически и немедленно переводить 5% от суммы на свой пенсионный счет.

Шаблоны, по которым происходит оплата, будут видны в цепочке блоков. Независимо от того, что
Алиса делает, чтобы скрыть связь между адресом, от которого она получает свой доход, и адресом,
на который она передает свои пенсионные накопления, шаблоны здесь будут однозначно
идентифицироваться, потому что это очень специфическое значение, и 5% также будет конкретным
значением. И есть также шаблон времени, каждый раз, когда деньги появляются

Как можно защититься от этого? Майк Херн предложил решение и назвал его уклонениям от
слияния.

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

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


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

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

Боковой канал - Атаки по сторонним или побочным каналам (side channel attacks, SCA) – это вид
криптографических атак, использующих информацию, полученную по сторонним или побочным
каналам.

CoinShuffle – это реализация CoinJoin, способ микширования нескольких транзакций так, чтобы
смешать части каждой из них.

Tor и Шелковый путь

В этой лекции при рассмотрении вопросов анонимности в системе Биткоин часто упоминался Tor
как анонимная коммуникационная технология. Поговорим о ней более детально.

Рис. 6.10. Анонимная коммуникация


Для начала определим, что такое анонимные коммуникации. Есть группа отправителей и группа
получателей ( рис. 6.10). И сообщения направляются от отправителей получателям через анонимную
сеть. Предполагается, что в сети есть злоумышленник(и). Он может контролировать некоторые узлы-
отправители и некоторые узлы-получатели, связи между узлами. Он также может контролировать
некоторые из внутренних узлов анонимной сети И в сети с такими условиями необходимо добиться
анонимности, то есть отсутствие связи между отправителем и получателем. Рассмотрим, как Tor ее
обеспечивает.

Рис. 6.11. Как работает Tor

Алиса хочет поговорить с Бобом, поэтому она предварительно выбирает путь через набор
маршрутизаторов ( рис. 6.11). Число маршрутизаторов зафиксировано в протоколе Tor – их всегда
три. Концептуально можно представить, что это будет любое число. И чем больше узлов
используется, тем выше анонимность. Узлы, обозначенные плюсом, - это узлы Tor. Алиса выбирает 3
случайных узла, чтобы написать свое сообщение.

Условие безопасности, состоит в том, что до тех пор, пока хотя бы один из этих трех узлов, который
она выбирает, не скомпрометирован или не сговорился с атакующим, она в безопасности. Сторонний
наблюдатель не сможет найти связь между Алисой и Бобом. Необходимо отметить, что в Tor
возможно много нападений. Одно из них, например, называется атакой корреляции трафика от конца
до конца. В этом случае в потоке трафика между Алисой и кем бы то ни было, могут быть модели
синхронизации, возможно, веб-сайт. И если злоумышленник контролирует обе эти ссылки, то,
просто наблюдая за корреляцией в этих моделях, он может определить, что эти два узла находятся в
контакте друг с другом, даже если он ничего не знает о маршруте, по которому прошло сообщение
между ними.

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

При этом маршрутизатор не должен знать IP-адрес Боба. Потому что, если маршрутизатор
выполняет перенаправление на IP-адрес, он знает IP-адрес Алисы, потому что сообщение пришло от
нее, и IP-адрес Боба, потому что это сообщение направлено ему. И теперь этот маршрутизатор имеет
связь между двумя концами сообщения. И если маршрутизатор вредоносный, это станет проблемой.
Поэтому ответ включает в себя шифрование. Если посмотреть на рис. 6.11 зеленые ссылки
зашифрованы, но также есть незашифрованное соединение.
Рис. 6.12. Многоуровневое шифрование Tor

Это особый способ шифрования, который называется многоуровневым шифрованием ( рис. 6.12).
Алиса и первый маршрутизатор делят симметричный ключ (фиолетовый цвет). Алиса и второй
маршрутизатор разделяют другой ключ, который представлен синим цветом, Алиса и маршрутизатор
три разделяют ключ, который представлен золотым цветом.

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

Самый внешний уровень шифрования - это симметричное шифрование между Алисой и R1, и это
позволяет R1 снимать шифрование с этого уровня.

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

Логично было бы создать еще один слой (протокол HTTPS или безопасный просмотр веб-страниц
поверх Tor), чтобы сообщение от маршрутизатора три Бобу было зашифровано. Но сам протокол Tor
не гарантирует этого. Нет никакого способа гарантировать это, потому что Боб может быть обычным
веб-сервером, который даже не знает о протоколе Tor, и поэтому Tor не может нести за это
ответственность

Разберемся, почему не сработал бы один уровень шифрования. Например, если бы Алиса пыталась
зашифровать сообщение на всем пути от нее до R3. У многоуровневого шифрования есть очень
важное свойство, - то, что R1 знает только IP-адрес Алисы и адрес R2, не знает адрес R3 или Боба. И
так же каждый узел знает только адреса узла, который был одним шагом впереди него и одним
шагом за ним. И на самом деле, когда сообщение доходит до R2, IP-адрес Алисы больше не
присутствует даже в зашифрованном виде.

При этом если любой из узлов, например, R2, был скомпрометирован, тогда он выдал бы адреса R1 и
R3, но не Алисы или Боба. Так работает Tor.

"Шелковый путь" - известен как скрытый сервис, продававший несколько лет запрещенные товары, в
частности, наркотики. Поэтому серверу "Шелкового пути" необходимо было скрыть свой адрес. Для
того, чтобы скрыть свой адрес, сервер соединяется с "местом встречи", которое является одним из
маршрутизаторов сети Tor. Затем он публикует сопоставление между своим доменным именем и
адресом "места встречи" через службы каталогов, которые предлагает система Tor. И эти доменные
имена не являются обычными DNS-именами. Они называются луковыми адресами. При этом адрес
очень похож на открытые ключи Биткойн, потому что любой может генерировать их.

И теперь клиенту придется изучить "луковый" адрес сайта, который он хочет посетить. Когда
шелковый путь существовал, невозможно было просто набрать silkroad.com, потому что Шелковый
путь не был доступен через обычную сеть. Вместо этого приходилось каким-то образом искать этот
широко известный адрес. Это был не адрес Шелкового пути, это был луковый адрес Duck Duck Go.
Это поисковая система, которая обеспечивает конфиденциальность и анонимность. Там можно было
найти аналогичный адрес, принадлежащий Шелковому пути, и поместить его в браузер с
поддержкой Tor. Потом клиент автоматически находит сопоставление для адреса места встречи,
подключается к этой точке и через эту точку имеет анонимное и зашифрованное соединение с
конечным сервером, без необходимости публикации на сервере фактического IP-адреса. Но для того,
чтобы Шелковый путь функционировал, нужно было решить еще много проблем. У покупателей
должна была быть уверенность в том, что после оплаты Шелковый путь доставит им товар. Поэтому
поддерживалась система репутации поставщиков. Для решения проблемы анонимной доставки
покупателям советовалось предоставить анонимный PO Box.

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

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

Луковая маршрутизация (Onion routing) — это технология анонимного обмена информацией через
компьютерную сеть. Сообщения неоднократно шифруются и потом отсылаются через несколько
сетевых узлов, называемых луковыми маршрутизаторами. Каждый маршрутизатор удаляет слой
шифрования, чтобы открыть трассировочные инструкции и отослать сообщения на следующий
маршрутизатор, где все повторяется. Таким образом, промежуточные узлы не знают источник, пункт
назначения и содержание сообщения.

Фонд Электронных Рубежей (Electronic Frontier Foundation, EFF) — основанная в июле 1990 в США
некоммерческая правозащитная организация с целью защиты заложенных в Конституции и
Декларации независимости прав в связи с появлением новых технологий связи.

DNS (Domain Name System — система доменных имён) — компьютерная распределённая система
для получения информации о доменах.
Договоренности в мире биткойна

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

Для успешной работы биткойн существует три вида договоренностей.

Первый вид – это договоренность относительно правил. Это достижение согласия среди участников
сообщества Биткоин по следующим вопросам:

 что делает транзакцию действительной, как отличить настоящую транзакцию от


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

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

Вторая форма договоренностей в биткойн – договоренность в отношении истории. Это


договоренность относительно того, что находится в цепочке блоков, а что – нет. И, следовательно,
договоренность о том, какие транзакции произошли.

После достижения договоренности в том, какие транзакции произошли, последует договоренность о


том, какие монеты и какие неизрасходованные результаты существуют и кто ими владеет.

Эта договоренность вытекает из процессов, о которых было рассказано в предыдущих лекциях:


посредством чего строится цепочка блоков (блокчейн) и как узлы достигают договоренности.

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

То есть договоренность в отношении ценности полагается на то, что эта договоренность будет
продолжаться.
Рис. 7.1. Взаимодействие договоренностей

На рис. 7.1 показано, как рассмотренные договоренности взаимодействуют друг с другом.


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

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

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

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

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


Core.

Программное обеспечение Bitcoin Core — это комплекс программного обеспечения с открытым


исходным кодом. Оно имеет лицензию открытого программного обеспечения MIT, которая
представляет собой свободную лицензию на программное обеспечение с открытым исходным кодом.
Это позволяет использовать программное обеспечение практически для любых целей.
Программное обеспечение Bitcoin Core является наиболее распространенным программным
обеспечением биткойн. Даже не применяющие это ПО, опираются на него, чтобы определить, какие
в нем используются правила. В альтернативном программном обеспечении, как правило, пытаются
имитировать правила программного обеспечения Bitcoin Core, в частности, какие транзакции и блоки
действительны. То есть фактически Bitcoin Core определяет свод правил биткойна. Предложения по
усовершенствованию биткойна или BIP (Bitcoin Improvement Proposals) - это формальные
предложения об изменениях в биткойн. Обычно предложение по улучшению включает техническую
спецификацию для предлагаемого изменения и его обоснование. Документы публикуются в
пронумерованных сериях предложений по улучшению биткоин. У каждого из них есть апологет,
своего рода автор, чья работа заключается в том, чтобы рассказывать о предлагаемом изменении и
его преимуществах, координировать дискуссию и пытаться достичь консенсуса внутри сообщества в
пользу реализации конкретного предложения.

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

Рис. 7.2. Ключевые разработчики Bitcoin Core

Ключевыми разработчиками Bitcoin Core являются шесть человек, изображенные на рис. 7.2. Если
точнее, их пять, так как Сатоши Накамото в настоящее время не активен. Ключевые разработчики
это те люди, которые возглавляют продолжение разработки Bitcoin Core и отвечают за то, какой код
попадает в новые версии этого программного обеспечения.

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

Сравним биткоин с централизованной валютой, например, с валютой страны. Если централизованная


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

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

Рис. 7.3. Жесткая вилка в правилах

Рассмотрим подробнее, что произойдет, если в правилах будет ответвление (форк). На рис. 7.3
изображен хардфорк. Есть цепочка блоков (блокчейн), создающая историю. И в какой-то момент в
блокчейне, в результате разногласий по поводу правил, появится ответвление. Получится две ветви.
Одна ветвь действительна в соответствии с набором правил A, но недействительна в соответствии с
набором правил B. И наоборот, другая ветвь, которая действительна в соответствии с набором
правил B и недействительна в соответствии с набором правил A.

Если произойдет хардфорк относительно того, какими должны быть правила, тогда будут какие-то
транзакции, которые будут действительны в каждой из ветвей и будут какие-то недействительные
только в одной из них. Как только эти ветви расходятся, они не могут объединиться, потому что одна
ветвь является незаконной в соответствии с правилами B, а другая — незаконной в соответствии с
правилами A. Они разделены навсегда. Валюту слева можно назвать биткойном, так как с ним все
согласны.

После форка появляются две новые валюты, которые можно назвать A-койн, соответствующая
набору правил A, и B-койн, соответствующая набору правил B. И в момент форка каждый имеющий
один биткойн получит один A-койн и один B-койн. И с этого момента А-койн и В-койн будут
существовать раздельно, как если бы они были двумя отдельными валютами.
Они могут действовать независимо. Группа A и группа B могут развить свои правила по-разному, и,
конечно же, их цепочки блоков будут продолжать расти и, вероятно, противоречить друг другу.

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

После хардфорка есть два пути.

По первому пути идут, когда причиной форка стало не несогласие с правилами, а желание начать
Альткойн. Это запуск новой криптовалюты с другими правилами. Кто-то пожелал сделать
собственную валюту, и ему было удобно начать с набора правил, который очень близок к биткойну.
Он счел удобным начать с блочной цепи биткойна и сделать форк от нее, как это было
проиллюстрировано на рис. 7.3. В данном случае нет проблемы - Альткойн идет своим путем. Ветви
сосуществуют мирно, кто-то из пользователей предпочитает биткойн, кто-то — Альткойн.

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

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

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

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

ПО с открытым исходным кодом (англ. opensource software) — открытое программное обеспечение.


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

Лицензия MIT (англ. MIT license) — лицензия открытого программного обеспечения, разработанная
Массачусетским технологическим институтом. Лицензия MIT является одной из самых ранних
свободных лицензий, так как она относительно проста и иллюстрирует некоторые из основных
принципов свободного лицензирования. Она является разрешительной лицензией, то есть позволяет
программистам использовать лицензируемый код в закрытом ПО при условии, что текст лицензии
предоставляется вместе с этим ПО.

Форк (англ. fork — развилка, вилка) или ответвление — использование кодовой базы программного
проекта в качестве старта для другого. При этом основной проект может как продолжать
существование, так и прекратить его. Ответвленный проект может поддерживать и обмениваться
частью содержимого с основным проектом, а может и приобрести абсолютно другие свойства,
перестав иметь с базовым проектом что-то общее.
Хардфорком (англ. hard fork) называют разбиение блокчейна на две отдельные цепи в результате
использования двух разных протоколов. Новый протокол также может разделить сеть, если все
участники сети не следуют за ним. Например, Ethereum Classic возник в результате хардфорка
Ethereum из-за разного понимания необходимых действий в ответ на взлом DAO.

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

Владельцы. Кто главный?

Предположим, что в сообществе возникла дискуссия о том, какой набор правил лучше использовать.
Кто имеет право принять окончательное решение? В любых переговорах есть один способ, который
помогает понять, кто имеет преимущество. Надо лишь представить, что произойдет, если переговоры
не получатся, и все сведется к драке. Человек, имеющий лучшую альтернативу в обсуждаемом
соглашении, будет иметь преимущество в переговорах. Другими словами, тот, кто может выиграть
бой, скорее всего, выиграет и переговоры. Это давнее правило детской площадки: самый большой и
сильный получит свое, даже если драться никто и не будет.

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

Второе утверждение - власть есть у майнеров. Потому что майнеры — те, кто пишет историю.
Майнеры создают блоки, которые фиксируют произошедшие транзакции, и поэтому, если майнеры
решают следовать определенному набору правил, то, вероятно, все остальные должны им следовать.
Если среди майнеров появятся разногласия, и 80% из них захотят один набор правил, а 20% —
другой, вероятно, что группа 80% построит более крупный, более внушительный блокчейн. И
поэтому у них есть возможность подталкивать правила в определенном направлении.

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

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

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

Каждая из рассмотренных групп имеет определенную власть, но факт состоит в том, что она
обладает лишь частью власти. Чтобы стать успешной валюта нуждается во всех формах
договоренностей. Ей нужен стабильный свод правил, написанный разработчиками. Ей требуются
инвестиции. Она нуждается в майнерах, и ей необходимо участие торговцев, покупателей и
платежных систем, которые их поддерживают. Таким образом, у всех этих сторон есть определенная
власть в борьбе за будущее биткойна. В разговоре про управление биткойном необходимо упомянуть
еще одного игрока. Это благотворительный фонд Bitcoin Foundation, основанный в 2012 году. Этот
фонд выполняет две основные вещи. Он платит зарплату ключевым разработчикам или, по крайней
мере, некоторым из них, из ресурсов фонда, для того чтобы они могли полностью посвятить себя
работе над программным обеспечением. Второе, Bitcoin Foundation проводит переговоры с
правительствами, особенно с правительством США, от лица биткойн.

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

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

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

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

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

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

Корни биткойн

Рассмотрим историю возникновения биткоин. Во-первых, биткойн возник из движения шифропанка.


Это движение, которое объединило два тренда. Вначале было либертарианство, и в частности идея о
том, что обществу было бы лучше без правительства или с очень ограниченным правительством.
Если правительство будет обеспечивать соблюдение минимального набора правил, необходимого
для того, чтобы люди могли просто сосуществовать. Вместе с этим сильным либертарианским
взглядом, возможно, даже несколько анархистским, появляется идея сильной криптографии и
криптографии с открытым ключом, которая зародилась в конце 1970-х годов. Эти две идеи
объединились в движении шифропанка. Последователи движения считали, что с сильной
конфиденциальностью в сети и сильной криптографией можно перепроектировать способ
взаимодействия людей друг с другом в общество, в котором люди смогли бы более эффективно
защитить себя и свои интересы. И могли бы сделать это с гораздо меньшим вмешательством со
стороны государства. Одной из проблем, связанных с этим движением было то, в будущем мире
шифропанка людям необходимы деньги. После этого последовал ряд исследований, в том числе о
первой цифровой валюте Дэвида Шаума (David Chaum) и других. Она была задумана для создания
новых форм ценности, которые функционировали бы как деньги, которые обеспечивали бы
анонимность и конфиденциальность и в тоже время легко обменялись. Это стало первой работой в
этой области, которая сочеталась с убеждениями шифропанка и желанием иметь сильную
децентралиованную валюту. Из этой идеи родился биткойн, а также философия, которой
придерживались многие его сторонники в начале и, которой многие следуют до сих пор.

Биткойн появляется в 2008 году с выпуском технического описания (white paper) под названием
"Биткойн: децентрализованная электронная денежная система" ("Bitcoin: Peer-to-Peer Electronic Cash
System"), созданного Сатоши Накамото.

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

Имя Сатоши Накамото наверняка является псевдонимом, который взял один или несколько человек
для работы с биткойном.

Личность Сатоши связана с определенными открытыми ключами, с определенными учетными


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

Сатоши довольно хорошо пишет по-английски и использует как американское, так и британское
правописание. Было много попыток взглянуть на текст, посмотреть на код и попытаться выяснить,
какой родной язык Сатоши? Откуда он? Попытка найти часовой пояс, какой тип машины он
использует, и все, что с ним связано. Люди пытались выяснить, кто этот человек или группа людей.

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

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

Решение вопроса, кто на самом деле Сатоши, — любимая игра-головоломка на конференциях по


биткойну. Этот вопрос пытались решить и многие журналисты. Люди делали все, что можно, они
изучали текст, написанный Сатоши, пытались сравнивать его с другими текстами. Изучали код
программного обеспечения на запатентованные приложения. Смотрели, кто писал о вещах, которые
казались техническими предшественниками биткойн до того, как он появился и т. д. и т.п.
Несколько лет назад репортер из Newsweek нашел человека, которому при рождении дали имя
Сатоши Накамото и сказал, что он является основателем биткойн. Это было почти наверняка
неверно. И это происшествие послужило тому, что настоящий Сатоши, молчавший с 2010 года,
выпустил небольшое заявление, в котором сказал, что он не тот человек. Так что на сегодняшний
неизвестно, кто такой Сатоши, и, возможно, никогда не будет известно. И в некотором смысле это не
имеет значения из-за одной из выдающихся особенностей биткойна — он децентрализован, и никто
за него не отвечает. Сатоши не владеет им. В какой-то степени больше не имеет значения, что
Сатоши думает. Особое влияние, которое имеет Сатоши, заключается в том уважении, которое есть к
нему у сообщества биткойн.

Рис. 7.4. Транзакции объем/день 2009-2014

На рис. 7.4 показан объем транзакции по дням с 2009 года и по лето 2014 года. Биткоин, как
интернет и другие популярные технологии, рос экспоненциально и взлеты на графике, как правило,
соответствуют всплескам огласки. Моменты, когда биткойн, например, стал известен в популярных
изданиях, или, когда происходили события, заслуживающие освещения в печати.

С течением времени объем транзакций увеличился.


Рис. 7.5. Общая ценность биткойна 2009-2014

Общая ценность биткойна выросла практически также. На рис. 7.5 в начале можно увидеть очень
малый объем, похожий на ноль. А относительный рост, начинается с середины 2012 года. Это
выглядит почти как экспоненциальный рост, но с двумя пиками, наложенными на него. Один
примерно в марте-апреле 2013 года. Ценность поднимается, а затем снова опускается до основной
экспоненциальной кривой. Второй пик - примерно в начале 2014 года, когда ценность увеличилась
примерно до этого значения, а затем снова опустилось назад к чему-то близкому экспоненциальному
росту. Таким образом, биткойн рос относительно естественно с относительно постоянной
экспоненциальной скоростью с момента своего появления. И полагающие, что биткойн имеет
светлое будущее, верят, что этот экспоненциальный рост будет продолжаться.

Правительство замечает биткойн

Рассмотрим взаимодействие правительства с биткойном и его попытки регулировать эту валюту.

Правительство заинтересовалось биткоином и вопросами его регулирования, когда система биткоин


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

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

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

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

Становится намного проще уклоняться от налогов, когда транзакции не привязаны к конкретному


человеку.

И, наконец, становится более простой продажа незаконных товаров, когда перевод средств может
производиться на расстоянии, без необходимости проходить через регулятора. Хорошим примером
этого является анонимная торговая площадка Silk Road (Шелковый путь). Silk Road был, по сути,
eBay для незаконной торговли наркотиками.

Silk Road разрешил продавцам рекламировать свои товары, а покупателям их покупать. Товары
доставлялись обычно по почте или службой доставки, а оплата производилась в биткойнах. Также
Silk Road действовал как скрытый сервис сети Tor. Поэтому серверы Silk Road были скрыты от
правоохранительных органов, и их было довольно сложно найти. А так как эта площадка
использовала для оплаты биткойны, то правоохранительным органам было сложно отследить
движение средств и выяснять, кто участвует в торговле.

Пока товар доставлялся, площадка Silk Road удерживала биткойны и не переводила их продавцу. Это
была инновационная система условного депонирования, которая помогала защитить покупателей и
продавцов от обмана третьей стороной. Биткойны переводились сразу после того, как покупатель
подтверждал, что товар прибыл.

У Silk Road была система репутации, подобная Ebay, которая позволила покупателям и продавцам
получать репутацию за то, что они выполняли честно сделки. Используя эту систему репутации Silk
Road смог дать участникам рынка стимул играть по правилам. Таким образом, Silk Road был
новатором среди криминальных рынков в поиске путей обеспечения соблюдения правил на
расстоянии. Именно этого не хватало его предшественникам. Silk Road управлял человек, который
называл себя Ужасный Пират Робертс. Площадка работала с февраля 2011 года по октябрь 2013 года.

Silk Road был закрыт сразу после ареста его владельца, которым оказался Росс Ульбрихт. Он был
арестован в октябре 2013 года, и сейчас ожидает суда. Считается, что он был владельцем Silk Road и
пытался скрыть свои следы, работая с использованием различных анонимных счетов, используя Tor,
анонимные пересылочные сервисы для электронных сообщений и т.д. Но правительственные
службы заявили, что им удалось соединить все точки и связать его с деятельностью Silk Road, с
серверами и с биткойнами, принадлежащими владельцу Silk Road. Его обвинили в ряде
преступлений, связанных с Silk Road, а также в покушении на убийство.

Правительство в ходе захвата Silk Road получило около 174 000 биткойнов, которые были проданы
на аукционе. Вырученные от продажи деньги поступили в бюджет.

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

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

Борьба с отмыванием денег

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

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

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

1. Убедиться в достоверности личности клиента


2. Производить оценку рисков клиента
3. Следить за проявлением нетипичного поведения

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


совпадала с личностью в реальном мире. Человек не может просто прийти и сказать: "Я Иван
Петров, живу на улице Ленина, дом 5 в городе Москва". Он должен предоставить удостоверение
личности, прежде чем с ним будут вести какой-то бизнес.

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

Компании также должны отслеживать клиентов, которые занимаются так называемым


структурированием, то есть разбиением транзакций, чтобы избежать отчетности. Например, если
кто-то совершает серию транзакций, размер которых составляет 9 000 долларов, для того, чтобы
обойти требование о предоставлении отчета о переводе, превышающем 10000 долларов, то это
называется структурированием. Если какая-либо компания видит подобные транзакции, то она
должна немедленно об этом сообщить. В этом случае правительству подается особый отчет о
подозрительной деятельности. И он попадает в базу данных, что может привести к проведению
расследования в отношении клиента.

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

Регулирование

Регулирование часто воспринимается негативно. Аргументы против регулирования довольно хорошо


известны и понятны: бюрократия, осложнение ведения бизнеса, бессмыслица и т.п.Рассмотрим,
какие плюсы может принести регулирование.

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

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

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

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

Рассмотрим подержанный автомобиль из классического примера рынка "лимонов". Продающийся


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

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

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

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

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

Подход, основанный на репутации, также не работает в бизнесе, где потребители не покупают


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

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

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

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

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

Можно регламентировать обязательные гарантии со стороны продавцов и их надлежащего


исполнения.

Рассмотренные формы регулирования, возможно, могут потерпеть неудачу, работать ненадлежащим


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

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

Например, если в городе есть две пекарни, они могут договориться, что в одной будут продаваться
только кексы, а в другой — только рогалики. И в этом случае между ними будет меньше
конкуренции, чем, если бы они продавали и кексы и рогалики. Результатом снижения конкуренции
будет рост цен, и торговцы могут сорвать работу рынка. Потому что причина, по которой рынок
защищает потребителей и нормально действует, заключается в конкуренции, когда продавцы
конкурируют и предлагают потребителям лучшие товары по лучшей цене.

Таким образом, ценовой сговор или соглашение о неконкуренции препятствует естественной


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

BitLicense

В качестве примера попытки регулирования со стороны правительства рассмотрим тему


лицензирования деятельности, связанной с биткойн, осуществляемую в штате Нью-Йорк –
BitLicense.

Проект о лицензировании деятельности биткойн – BitLicense- был опубликован в июле 2014 года
Департаментом финансовых услуг штата Нью-Йорк. Это одна из служб штата Нью-Йорк, которая
регулирует финансовую отрасль. Принятый документ содержит нормативно-правовые акты, которые
регулируют деятельность виртуальных валют. Рассмотрим его основные положения.

Для осуществления предпринимательской деятельности, связанной с виртуальной валютой,


необходимо получить BitLicense. Предпринимательской деятельностью, связанной с виртуальной
валютой, является (для работающих в штате Нью-Йорк или ведущих бизнес с резидентами штата
Нью-Йорк ):

1. Получение виртуальной валюты для совершения перевода или ее перевод;


2. Предоставление обеспечения (владение), хранение (накопление), владение, сохранение или
контроль виртуальной валюты от имени других людей или организаций;
3. Покупка или продажа виртуальной валюты как деятельность бизнеса по обслуживанию
клиентов;
4. Предоставление услуг конверсии для физических лиц, включая конверсию или обмен
официальной валюты или другой валюты в валюту виртуальную, конверсия или обмен
виртуальной валюты в официальную валюту или другую валюту, или конверсия или обмен
одного из видов виртуальных валют в другой вид виртуальных валют;
5. Контроль, управление виртуальной валютой или выпуск виртуальных денег в обращение.

Для подачи заявки на получение лицензии BitLicense потребуется предоставить информацию о


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

После получения лицензии лицензиату придется выполнять ряд процедур. Предоставлять


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

Соблюдать правила и предписания. В частности, правила о хранении активов клиентов. Есть


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

У лицензиата должен быть план аварийного восстановления, соответствующий определенным


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

Необходимо назначить ответственного специалиста по надзору за нормативно-правовым


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

Принятие закона о лицензировании происходило сложно. Публикация проекта в июле 2014 года
вызвала панику в сообществе Биткоин. После длительных, предусмотренных законодательством,
дебатов, была подготовлена вторая версия данного законопроекта. Она была опубликована 25
февраля 2015 года. После чего последовали дополнительные обсуждения, и финальная версия закона
была опубликована 24 июня 2015 года. В финальной версии был учтен ряд предложений,
полученных от сообщества.

Принятие требований о лицензировании деятельности, связанной с виртуальной валютой, стало


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

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

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

Рынок "лимонов" (англ. lemons market, the market for lemons) — модель рынка, описывающая
ситуацию на рынке подержанных автомобилей с асимметричной информацией, в результате которой
нарушается принцип действия рыночного механизма, т.к. ценовые сигналы перестают отражать
реальное положение дел.

Асимметричная информация (англ. asymmetric information) – это неравномерное распределение


информации о товаре между сторонами сделки. Обычно продавец знает о товаре больше, чем
покупатель, хотя возможна и обратная ситуация.
"Крах" рынка, несостоятельность рынка, провал рынка (англ. market failure) – это такая рыночная
ситуация, при которой равновесие на рынке не является эффективным по Парето, то есть механизм
рыночного регулирования, "невидимая рука рынка", не срабатывает (например, загрязнение
окружающей среды, восстановление почвы после добычи полезных ископаемых). Таким образом,
"провалы" обычно подразумевают необходимость административного регулирования экономики и
экономических отношений, с целью сглаживания или устранения негативных последствий от
действия рыночного механизма.

Ценовой сговор, картельный сговор (англ. price fixing) – неформальное соглашение участников
одной рыночной отрасли продавать или покупать товары или услуги по определенной цене. Также
картельным сговором является договорное регулирование объемов закупок и продаж участниками
рынка с целью влияния на уровень цен.

Лекция 8:

Альтернативы Proof of Work

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


доказательству выполненной работы (вычислительная задача proof of work, которая далее для
краткости будет называться алгоритм, вычислительная задача или просто задача). Вычислительные
задачи являются главной основой биткоина, потому что именно они применяются в системе
поощрений. Майнеры получают вознаграждения за решение задач. Логично сделать предположение,
что майнеры будут использовать любую возможность для ускорения нахождения правильного
решения. И напротив, если существует свойство, помогающее экосистеме, но не способствующее
непосредственному решению задач, оно не будет задействовано. Поэтому алгоритм вычислений
играет очень важную роль в регулировании и направлении развития вычислительной сети.

Рассмотрим основные характеристики вычислительной задачи, основанной на криптографическом


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

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

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


Некоторые из них уже используются на практике в криптовалютах, существующих сегодня. Другие
являются лишь исследовательскими идеями, которые могут найти применение в будущем. Задачи
преследуют множество возможных целей, например, сопротивление ASIC'ам, которое позволит
выровнять условия для пользователей, имеющих специальное вычислительное оборудование и не
имеющих такового. В лекции будут исследованы свойства, которые препятствуют объединению
майнеров в пулы, и алгоритмы доказательства работы, которые имеют определенную социальную
пользу. Будут также рассмотрены требования к защите, поскольку любые интересные
дополнительные функции бесполезны, если не выполнены базовые требования к безопасности
биткоина.

Общие требования к алгоритмам PoW.


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

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

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


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

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

Правильный алгоритм дает каждому шанс на победу, в зависимости от используемой им


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

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

Алгоритмы с защитой от ASIC

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


настоящее время является наиболее обсуждаемым. Тому есть несколько причин. В начале биткоины
добывали, используя обычные ПК, позже для майнинга появились специальные интегральные
схемы, сегодня почти весь майнинг идет на ASIC и использование ПК не окупает себя. Но это плохо
для экосистемы, поскольку сейчас барьер для входа очень велик, а раньше новые пользователи
активно включались в сеть. Для майнинга было достаточно оставить ПК включенным на ночь. Чтобы
решить данную проблему, нужно придумать алгоритм, который свел бы к минимуму разницу между
обычным ПК и специализированным оборудованием. Дополнительно можно выделить еще одну
цель – снизить влияние производителей ASIC на сеть. Это важно, поскольку сейчас существует всего
несколько крупных игроков на этом рынке. И они могут консолидировать в своих руках очень
большую вычислительную мощность. У пользователей есть подозрения, что производители
специально задерживают отправку ASIC устройств, добывая биткоины фактически за деньги
покупателей. Еще одна возможная угроза – появление новой прорывной технологии для создания
подобных устройств, которую производитель оставит в тайне и получит доминирующее положение в
сети.

Наиболее популярный пример алгоритмов, устойчивых к ASIC, требует значительного объема


памяти. Предпосылка довольно проста – в соответствии с законом Мура (см. Закон Мура) каждые 2
года количество транзисторов на кристалле ЦПУ должно удваиваться. Память и системы хранения
данных так же развиваются, но скорость их развития намного ниже. И разрыв лишь увеличивается со
временем. Из вышесказанного следует, что, если использовать алгоритм, требующий много памяти
вместо просто вычислительной мощности, разница в производительности между специальным
оборудованием и ПК будет меньше.

Самый известный алгоритм такого типа – scrypt. Вычисление SHA-256, используемого в биткоине,
требует всего лишь 256 бит памяти. Такой объем легко разместить в регистрах процессора. Время на
каждую операцию составляет порядка сотен миллисекунд. Значит, для полного перебора вариантов
достаточно использовать много параллельных устройств. Scrypt же использует достаточно большое
(по меркам однокристальных интегральных схем) количество памяти для хранения большого
массива псевдослучайных чисел, которые генерируются на первом шаге алгоритма. Данные массива
запрашиваются в случайном порядке и комбинируются с друг другом для создания ключа.
Поскольку алгоритм генерации массива известен, то можно реализовать scrypt без использования
памяти, но это потребует пересчета части элементов массива каждый раз заново, что достаточно
сложно и занимает много времени. Таким образом, scrypt вносит баланс между количеством
затрачиваемой памяти и временем.

Scrypt применяется во второй по популярности криптовалюте – Лайткоин (Litecoin). Кроме того, этот
алгоритм используется для криптозащиты паролей, которая так же имеет целью защиту от ASIC. Это
дает дополнительную уверенность в безопасности криптовалюты.

Рассмотрим шаги вычислений подробнее.

Пусть на входе строка символов Х. На первом шаге n ячеек памяти (n-количество шагов алгоритма)
заполняются таким образом: в первую ячейку записывается V1 хэш от X, во вторую V2 хэш от
первой ячейки, в третью V3– хэш от значения второй ячейки и так далее ( рис. 8.1).

Рис. 8.1. scrypt: шаг 1 - запись данных

На втором шаге происходит чтение случайно выбранных данных из памяти.

Сначала рассчитывается значение-аккумулятор А, равное хэшу от последней ячейки. В цикле из n


шагов с использованием текущего значения A высчитывается индекс ячейки i, из которой будут
читаться данные. i находится как остаток от деления A на n. А на каждом шаге высчитывается как
сложение по модулю 2 (XOR) А и Vi. После n шагов получаем итоговое A, которое и будет
значением функции.
Рис. 8.2. scrypt: шаг 2 - чтение данных

Если реализовывать алгоритм без буфера памяти, для вычисления A надо было каждый раз
пересчитывать Vi . Общее количество пересчетов равно сумме арифметической прогрессии от 1 до n,
то есть приблизительно n/2. Полное количество вычислений SHA-256 получится n*n/2=n2/2 против
2n вычислений в случае использования буфера. То есть быстрее в n/4 раз.

На практике у scrypt есть несколько минусов. Первый – проверка решения так же требует памяти и
цикла в n шагов. Поэтому при применении алгоритма в качестве доказательства работы
накладывается ограничение на величину n, как в плане выделения памяти, так и в плане времени
выполнения.

Так же вызывает сомнения, насколько он защищен от ASIC. Дело в том, что для выбранных в
Litecoin параметров сложности (N) недостаточно для сглаживания разницы между ASIC и ПК. На
рынке уже появились специальные устройства для майнинга, однако, стоит заметить, что их
производительность в миллионы раз ниже, чем для биткоинов.

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

Рассмотрим другой пример алгоритма требующего использования памяти для работы. Он называется
кукушкино хэширование. Для поиска решения на основании строки X строится неориентированный
граф. Вершины графа выбираются по алгоритму

for i = 1 to n:
i = X % N
a = H0(X +i)
b=N+ H1(X+1)

Ребра графа строятся так:

edge(a mod N, b mod N)

Теперь необходимо определить, есть ли в данном графе цикл длинной K (входной параметр
функции). Если такой цикл найден, то ответом будет Х и индексы вершин.
Рис. 8.3. Алгоритм кукушкиного хэширования

Почему данный алгоритм требует много памяти? Дело в том, что нахождение циклов в графе хорошо
изучено, но используемые для этого методы требовательны к объему ОЗУ. Зато проверить решение
проще, чем в scrypt, нужно просто пересчитать вершины найденного цикла. И для этого не нужно
много ресурсов.

Существуют и другие подходы к проблеме защиты от ASIC:

 алгоритм x11 – последовательное взятие 11 разных хэш функций. Создание ASIC для каждой
функции отдельно возможно, однако, их объединение резко увеличивает стоимость и
затрудняет построение эффективного устройства.
 постоянное изменение вычислительной задачи. При таком подходе каждый промежуток
времени нужно будет создавать новый ASIC. Но при этом также возникнут проблемы у
обычных майнеров – потребуется одновременное обновление всей сети. Кроме того, если
новый алгоритм недостаточно надежен, возрастает вероятность возникновения коллизий.
 наконец есть те, кто предлагает не защищаться от ASIC. Да, сейчас для биткоина
используются устройства, великолепно считающие SHA-2. Это уже давно известная
технология и резкий эволюционный скачок ее развития маловероятен. Как уже говорилось
ранее, большие ASIC это всего лишь объединения множества маленьких ASIC. Значит,
стоимость устройств растет параллельно с их производительностью.

Алгоритмы, выполняющие реальную работу

Рассмотрим желаемое свойство вычислительного алгоритма, которое имеет дополнительно


социальную функцию.

Как уже отмечалось ранее, экосистема биткоина очень ресурсоемка. По разным оценкам вся сеть
майнеров потребляет от 150 до 900 мегаватт энергии, что сравнимо с мощностью небольшой
гидроэлектростанции. Но вся мощность используется только для высчитывания SHA-2 хэшей и не
имеет какой-либо полезной функции.

Учитывая вышесказанное, появляется резонный вопрос: есть ли такой алгоритм, который приносил
бы пользу всему обществу, при этом выполняя функции, необходимые для биткоина? Такой
механизм стал бы своего рода утилизацией, снижая затраты на распределенную сеть и ее
воздействие на окружающую среду
Рассмотрим группу наиболее очевидных вариантов. Проблемой для них будет, что объем
пространства поиска решения очень широк, а решение встречается в этом объеме редко. Для
решения подобных задач обычно использовались распределенные вычисления. Но для переноса
этого опыта в экосистему криптовалюты нужно преодолеть массу препятствий.

Например, в проекте SETI общепризнанные администраторы распределенной сети могли выбирать,


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

Как пример воплощения полезного алгоритма можно рассмотреть Primecoin.

Для получения вознаграждения нужно найти последовательность простых чисел, называемых цепью
Каннингема, которая вычисляется по формуле pi=2ia+1. Каждый член такой последовательности
проверяется тестом простоты. Первое значение в последовательности делимо на хэш от цепочки
блоков (предыдущего блока, mrkl_root и nonce ).

Алгоритм Primecoin действительно приносит результаты. Многие наибольшие цепи Каннингема


были обнаружены в результате майнинга. Интересно, что существует проект распределённых
вычислений, называемый PrimeGrid, который также нацелен на поиск простых чисел. Но
действительно ли эта работа полезна? Цепи Каннингема используются в шифровании, однако, та
форма, которая используется в Primecoin, практической пользы не несет.

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

Современное оборудование для биткоин-майнинга очень производительно в расчёте SHA-2 хэшей –


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

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

Принцип работы алгоритма такой: представьте, что есть большой общеизвестный файл F. Для
простоты предположим, что F выбирается избранным администратором.

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

В Permacoin файл F разбивается на блоки. Из блоков строится дерево Меркла. Каждый майнер
создает ключевую пару. Используя свой публичный ключ майнер псевдослучайно выбирает
несколько сегментов файла F, которые он будет хранить. Чтобы получить награду за блок майнер
должен выбрать случайно nonce и посчитать хеш h1, включающий хеш предыдущего блока,
merkel_root, публичный ключ и выбранный nonce.

Теперь, вместо моментальной проверки на правильность (как в биткоине), исходя из полученного h1


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

Здесь стоит вспомнить об одном из спорных мест биткоина – честный майнер, то есть участник сети,
который подтверждает все транзакции, включенные в блок, вынужден хранить на жестком диске
информацию о всех непроведенных транзакциях. На данный момент - это около 200 Мб. Этот объем
данных никак не помогает в майнинге и не приносит какого-либо дохода. В случае с Permacoin
хранение данных оплачивается майнингом и быть честным майнером выгодно.

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

Алгоритмы, защищенные от распределения

Рассмотрим свойство альтернативных вычислительных алгоритмов, препятствующее


сосредоточению вычислительных мощностей сети.

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

Базовой ценностью биткоина является децентрализация, и подобная консолидация представляет


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

Совсем недавно это проблема стала очень острой, поскольку крупнейший из существующих
биткоин-пулов, Gigahash.IO, занял более 50% от общей мощности сети. Это вылилось в поток
критики и обсуждений того, что подобная ситуация является огромной угрозой для биткоина и
грозит ему гибелью. Пользователи требовали найти техническое решение для проблемы.

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

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

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

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

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

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

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

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

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

Следующий шаг – вычислить хэш строки, содержащей хэш предыдущего блока, публичный ключ,
nonce и подпись s1. Полученный хэш сравнивается с целевым уровнем сложности, как это
происходит для биткоина.

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

Суть идеи в том, что необходимо вычислить значение подписи s1 с использованием закрытого
ключа, и это покажет правильно ли подобрано решение. И только после нахождения правильного
nonce будет вычислена s2, которая покажет, какие транзакции будут включены в блок. То есть
необходимо знать закрытый ключ для решения задачи – это также позволит забрать вознаграждение
себе. У алгоритма без возможности распределения существует несколько проблем.

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


нежелательные централизованные пулы, но и хорошие, распределенные, как например P2Pool.

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

Виртуальный майнинг, PoS

Рассмотрим алгоритм защиты, который называют доказательством доли владения (proof-of-stake,


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

То есть мотивации для майнинга, подобной биткоину, нет.

В экосистеме Биткоина пользователи тратят деньги на приобретение оборудования, оплату


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

При таком подходе вместо покупки оборудования участник сети сразу покупает монеты. Затем он
отправляет деньги на специальный адрес, и вознаграждение определяется количеством присланных
денег. На этом основании можно создать систему майнинга, как и в биткоине, но без необходимости
использования больших вычислительных мощностей.
Рассмотрим потенциальные плюсы данной распределенной системы. Первый – снижение стоимости
вычислительной сети, не нужно ни производить, ни приобретать специальное оборудование. Второй
плюс, как следствие из первого, – меньшее влияние на окружающую среду. В результате такого
подхода каждый пользователь становится как бы вкладчиком в экосистему, а значит, он будет более
заинтересован в поддержании ее нормальной работы и в ее развитии. Еще один плюс –
защищённость от угрозы со стороны ASICs. Наконец, этот алгоритм защищен от атаки 51%, когда
больше половины вычислительной мощности сети сконцентрировано в руках одного майнера.

Экономика биткоина намного меньше, чем мировая экономика. Значит, возможно, что человек,
который очень богат вне системы биткоина, приобретет огромные вычислительные мощности,
которые невозможно было бы приобрести, используя только средства из экосистемы. Такой человек
или группа людей могли бы сделать атаку 51%. Если же представить, что майнинг основан только на
монетах, существующих лишь внутри сети, то для атаки нужно будет купить 51% существующих
монет. Во-первых, для этого нужно будет перевести часть внешних(реальных) средств в экосистему,
например, через обменную биржу. Во-вторых, такой высокий спрос сильно поднимет стоимость
криптовалюты и затруднит атаку. Конечно, это спорно, но считается, что намного дороже купить
половину существующих биткоинов, чем создать ферму, превышающую половину мощности сети.

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


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

Другой вариант называют доказательством сжигания (proof-of-burn, PoB). В этом случае для
майнинга нужно отправить монету на адрес, с которого гарантированно нельзя её потратить.
Например, на адрес, который является хэшем случайного числа, – шансы подобрать к нему
соответствующий публичный и приватный ключи ничтожно малы. С другой стороны, вы получаете
шанс на получение вознаграждения.

Еще один возможный вариант – доказательство депозита (proof-of-deposit, PoD). Монеты вносятся на
временно заблокированный аккаунт, они не уничтожаются, как в предыдущем случае, а вернутся
обратно через время. То есть временно блокируется возможность тратить монеты.

Последний вариант– доказательство активности (proof-of-activity, PoA). В нем все владеющие


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

Подобные алгоритмы сейчас являются предметом пристального интереса со стороны


исследователей. Самый острый стоящий перед ними вопрос – дают ли алгоритмы PoW больше
защиты, чем PoS. Если окажется, что алгоритмы PoS столь же надежны, то они будут иметь явное
преимущество перед очень дорогими PoW. Но лишь время покажет, кто выиграет.

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

доказательство выполнения работы (proof of work) - функция защиты распределенных систем от


злоупотребления услугами (например, DoS-атак или рассылок спама), основанный на необходимости
выполнения запрашивающей стороной некоторой достаточно сложной длительной работы (POW-
задачи), результат которой легко и быстро проверяется обслуживающей стороной. В случае с
криптовалютами доказательством решении задачи является правильно подобранный блок (точнее
значение nonce для блока), хэш которого меньше определенного заданного числа, называемого
целевым уровнем сложности.

майнер (miner) - программа, используемая для вычислений блоков. Так же человек, который
занимается майнингом.
SHA-2 - группа криптографических алгоритмов, однонаправленная хэш-функция

ASIC (application-specific integrated circuit) – дословно интегральная схема специального назначения


— интегральная схема, специализированная для решения конкретной задачи.

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


объединить вычислительные мощности. Вознаграждение распределяется пропорционально
предоставляемым вычислительным ресурсам

майнинг (mining) - деятельность по поддержанию распределенной платформы и созданию новых


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

SHA-256 один из видов алгоритмов семейства SHA-2

хэш (hash) - результат вычисления хэш-функции для набора входных данных. Хэш-функция -
преобразование входных данных произвольной длины в выходную строку (хэш) фиксированной
длины, выполняемое определённым алгоритмом

XOR - исключающее ИЛИ, строгая дизъюнкция. В случае двух переменных результат выполнения
операции является истинным тогда и только тогда, когда один из аргументов является истинным, а
второй ложным.

кукушкино хэширование – хэширование методом образования неориентированного графа,


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

x11 - алгоритм хэширования, который был впервые задействован в создании Darkcoin, использует 11
раундов хэширования с 11-ю различными хэш-функциями (blake, bmw, groestl, jh, keccak, skein, luffa,
cubehash, shavite, simd, echo).

блок транзакций(блок) - специальная структура для записи группы транзакций в системе Биткоин и
аналогичных ей. Блок состоит из хэша предыдущего блока, хеш-суммы всех включенных транзакций
(merkle_root), и случайно перебираемого числа nonce.

merkle_root - дерево Меркла, древовидное хэширование. Хэш всех транзакций необходимых для
блока данных

nonce – в криптографии одноразовый случайный или псевдослучайный код передаваемый вместе с


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

Биткойн как журнал только для добавления данных

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

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


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

Цель защищенного штампа времени: доказать знание X в определенное время t. При этом, если
требуется, не раскрывать значение X. Доказательства должны быть постоянными, то есть должна
быть запись о знании некоторой информации X в момент времени t или ранее, которую никто не
может уничтожить.

Чтобы не раскрывать x, можно публиковать хэш – H(X).

Свойства хеш-функции гарантируют, что нельзя найти какое-то другое значение Х’, которое имеет
такое же значение хэш, что и Х. При этом хэш не должен раскрывать информацию об X – это будет
верно только в случае действительно большого пространства возможных X. Итак, идея безопасного
штампа времени с помощью журнала – публикация обязательства (commitment) в виде хэша X.
Поэтому если кто-то публикует в блокчейне в момент времени t хэш данных X, то в дальнейшем
любой может убедиться, что опубликовавший знал X в момент времени t (или ранее), так как эти
данные невозможно подделать.

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

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

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

Несколько лет назад во время финала Кубка мира, кто-то фальсифицировал, что предугадал
результаты. Он попытался доказать, что ФИФА, которая организует Кубок, является
коррумпированной. Для этого он показал свою учетную запись в Twitter с результатами матча. На
секунду можно поверить в то, что он знал данные результаты. Но на самом деле он записывал
каждый возможный ход игры и результаты до начала матча, а за некоторое время до его конца
удалил все предсказания, оказавшиеся неправдой.

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

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

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

Есть более сложный способ поставить штамп времени - КомитКойн (CommitCoin). Это небольшой
протокол для поиска открытых ключей и подписей, при котором фиксируемые данные вставляются в
биты открытого ключа и подписи. Для того чтобы найти специальный открытый ключ, формируется
множество открытых ключей и множество подписей. Хэш данных, которые необходимо
подтвердить, будет "встроен" в искомый открытый ключ. Для постороннего наблюдателя эта
операция будет выглядеть как обычное формирование открытого ключа. При этом не создаются
непередаваемые транзакционные выходы. У данного метода один недостаток – он сложнее и, как
следствие, дороже. Подробнее с протоколом можно ознакомиться в статье по ссылке:
https://issuu.com/ptmannion/docs/bitcoin_protocol.

В лекции 3 упоминался скрипт OP_RETURN, который используется для уничтожения монет


(доказательство сжигания). Он всегда немедленно возвращается с ошибкой и в него можно включить
некоторые данные. При этом также придется потратить какую-то минимальную сумму.

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

В один скрипт OP_RETURN можно записать 40-байтное обязательство по стоимости 1


транзакционной комиссии, которая составляет около 0,0001 биткоина или 0,05 долларов США. Это
достаточно низкая цена, которая приводит к основному недостатку данной схемы –
злоупотреблению. Люди могут записывать любой, в том числе незаконный, контент в блокчейн.

Известны попытки отдельных людей компрометировать сообщество Биткоин. Публикация


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

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

Самая известная оверлейная валюта – Mastercoin (Мастеркоин). Она построена поверх биткоина, все
транзакции Mastercoin записываются в цепочку блоков биткойнов, и она поддерживает гораздо более
расширенный набор функций, чем биткойн. Главная идея оверлейной валюты – не нужно
разрабатывать новый консеснусный механизм. И поскольку майнерам биткойна не нужно знать о
правилах Mastercoin, она может поддерживать гораздо более специфические функции, более
сложные интеллектуальные свойства, интеллектуальные контракты, определяемые пользователем
валюты. По сути, API во много раз больше, чем API Биткойна, потому что майнерам это не нужно
понимать. Они готовы просто вслепую написать что-либо в цепочку блоков, которая
отформатирована как действительная транзакция Bitcoin. И сообщество Mastercoin должно
посмотреть на все эти данные и собрать вместе действительное владение Mastercoin на основе того,
что написано в блочной цепочке биткойнов. Таким образом, можно развивать валюту, не создавая
собственную систему консенсуса. Не требуются новые майнеры, можно просто добавить больше
возможностей и развивать их быстрее. Но оверлейная валюта полагается на Биткоин. Это может
быть неэффективно, так как нет возможности предотвратить запись недействительных транзакций в
блокчейн. Мастеркойн более подробно будет рассмотрен в лекции 11.

Практические применения свойств биткоина

Рассмотрим еще одно альтернативное применение биткоин.

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

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

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

Представим, как можно добавить метанные на традиционную валюту, например, на доллар.

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

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

Валюта может быть не только билетом на спортивный матч. Есть множество практических
приложений рассмотренной схемы.

Банкнота имеет определенные анти-поддельные свойства. В каждом государстве есть специалисты,


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

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

Решением является покраска монет в определенный цвет. При этом монеты не потеряют своей
стоимости. Просто они и включенные в них метаданные будут цветными.

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


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

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

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

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

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

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

Для того чтобы начать выпуск цветных биткоинов, не нужно обращаться в какой-то центральный
орган. Недостатки этой схемы заключаются в том, что приходится ставить вывод непереносимого
маркера в каждую транзакцию, которая включает в себя цветные монеты. Из-за этого добавляются
небольшие накладные расходы в виде регулярных биткойнов каждый раз, когда необходимо
торговать цветными монетами. И поскольку выход этого маркера является особенным , для проверки
владения цветными монетами, необходимо проверить всю историю транзакций. Недостаточно
просто покрасить монету в какой-то цвет, так как майнеры не работают с цветными монетами. Это
является плюсом системы, так как майнеры не могут на нее влиять. С другой стороны у работающего
с цветными монетами не может быть слабого клиента, так как ему необходимо проверять весь
блокчейн. Это исключает работу с цветными монетами на ограниченных платформах, например, на
телефонах, так как они не смогут хранить всю цепочку и поддерживать ее обновленную копию.
Ранее был рассмотрен пример применения цветных монет в качестве билетов на какое-то
мероприятие. Другой распространенный пример применения – цветные монеты, представляющие
акции компании. Каждый раз, когда необходимо опубликовать новую акцию, биткоины передаются
через хэш-адрес pay-to-script, который окрашивает их в определенный цвет. После этого люди могут
начать торговать ими. Для выпуска акций в таком формате не нужна биржа или какая-либо
инфраструктура, которая используется в автономном мире, можно просто обменять акции в обмен на
обычные биткойны. Покупатели должны верить эмитенту акций. При этом цветные монеты могут
фактически отображать факты в реальном мире – например, владение автомобилем или домом. В
лекции 11 будет рассказано о некоторых трудностях, как юридических, так и социальных,
возникающих при работе с цветными монетами, представляющими недвижимость .

Есть еще один интересный пример применения цветных монет – можно торговать владением
доменных имен и возможностью запускать сервер в цепочке блоков биткойнов. У этого примера
достаточно оговорок и странных свойств. Например, необходимо, чтобы люди владели не простыми
доменными именами, а скупали все хорошие доменные имена. Фактически это было запущено как
отдельный Altcoin под названием NameCoin, о котором будет рассказано в следующей лекции.

Безопасные многопартийные лотереи в биткойне

Рассмотрим, как можно организовать многопользовательскую лотерею с помощью биткоина. Начнем


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

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

При создании лотереи в онлайн-мире необходимо решить обе обозначенные проблемы.

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

Пользователи в Интернете не могут видеть одну и ту же физическую монету, поэтому они делают
ставки на фальш-монетки. Алиса могла бы сделать ставку в 5 долларов и объявить, что она
подкидывает монету, включив видеокамеру. Но у Боба могут возникнуть сомнения. Алиса могла
записать видеоролик с желаемым результатом заранее и транслировать его в сеть как онлайн-видео.

Решение состоит в том, чтобы использовать обязательства хэша данных Х. Ранее было рассмотрено,
как можно создать обязательство, не раскрывая самих данных X.

Допустим, в онлайн-лотерее участвует три стороны - Алиса, Боб и Кэрол. Для начала все они
выберут случайное число, часто называемое nonce в криптографии, и сохранят его. При этом каждый
должен верить в то, что конечный результат является случайным. В этом протоколе будет два раунда
коммуникации.

В первом раунде все три стороны публикуют хэш случайного числа nonce, которое они выбрали.
Хэш ничего не говорит о случайном числе, если оно выбрано из достаточно большого пространства.
Каждый из них выбирает 128-битную случайную строку, публикует ее хэш и при этом не выдает
какую-либо полезную информацию об этом числе.
Второй раунд наступает строго после завершения первого – каждый участник показывает свое число.
Для того чтобы определить, кто выигрывает лотерею, есть довольно простая программа. Она берет
все три случайных числа (Х данные) и смешивает их в битах. Затем берет хэш данных, делит его на
mod 3, и выдает случайным образом один из трех результатов. Затем можно назначить каждый
результат одному из участников, и это определит, кто станет победителем: Алиса, Боб или Кэрол.
При этом каждый участник сам может проверить справедливость лотереи. Поэтому важным
свойством хэш-функции является то, что она гарантирует случайность. Никто не смог бы выбрать
свое случайное число таким образом, чтобы оно стало более вероятным, и чтобы конечный результат
являлся победой. Особенно учитывая то, что участники не знают случайных чисел других
участников. Не вдаваясь в длинное формальное определение случайности, псевдослучайности и хеш-
функций, можно с уверенностью сказать, что в настоящее время хеш-функции работают корректно.
Нет лучшей стратегии, чем просто выбор случайного числа, что дает одну треть шансов на победу.

Итак, что произойдет, если кто-то не сможет раскрыть свои обязательства? Рассмотрим второй раунд
протокола и предположим, что Алиса и Боб публикуют свои обязательства, а Кэрол анализирует их,
и говорит: "Если я опубликую свое обязательство, я проиграю. Я вижу случайные числа, которые
выбрали Алиса и Боб, я понимаю, какое случайное число я выбрала, и могу запустить этот сценарий
сказав, что я не выиграю."

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

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

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

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

Таким образом, биткоин с помощью своих встроенных сценариев предоставляет механизм для того,
чтобы требовать оплату. В одном случае транзакция будет подписана Алисой и Бобом – и все деньги
уйдут Бобу. Боб не сможет потребовать выплаты облигации до некоторого времени t, которое
задается с помощью параметра n_lock_time, о котором было рассказано в предыдущих лекциях. Это
является страховкой от того, что Алиса откажется участвовать в лотерее. Если она в определенный
момент времени ничего не сделает, все деньги уйдут Бобу. В качестве альтернативы Алиса может
опубликовать транзакцию до момента t, вернув деньги себе, но если она это сделает, то ей нужно не
только подписать ее, но и раскрыть Х данные.

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

Итак, для того, чтобы участники не могли выйти из лотереи, вместо простых хэшированных
обязательств используются приуроченные обязательства. Если вернуться к ситуации с третьим
участником Кэрол, после того, как она видит случайные числа двух других игроков и понимает свой
проигрыш, у нее не будет стимула не публиковать свои данные – она всё равно потеряет деньги,
поставленные в облигации. Это будет работать, если облигация выше стоимости, поставленной на
карте в лотерее.

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

Биткойн как источник случайности

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


случайности, который гарантирует случайность выбора у каждого из участников. В настоящее время
уже есть практика применения подобных протоколов. Один из примеров – лотерея НБА, которая
происходит каждую весну. 30 команд NBA собираются вместе и случайным образом выбирают,
опираясь на результаты предыдущего сезона, кто станет победителем среди игроков-любителей в
стране и вступит в лигу.

В 1985 году возникло небольшое недоразумение. Лотерею выиграла команда "Нью-Йорк Никс",
прогнозируемо выбравшая игрока Патрика Юинга, который был наиболее перспективен. Сразу после
этого пошли слухи о том, что лотерея была фальсифицирована так, чтобы "Нью-Йорк Никс" смогла
выбрать лучшего игрока. В Интернете можно найти всевозможные теории заговора о том, как NBA
сфальсифицировал этот процесс, например, знаменитую теорию Bent Corner, которая говорит, что
они вытащили конверт с изогнутым углом из чаши конвертов с разными именами команд. И даже
сегодня, когда они открывают эту лотерею каждый год, существует целая куча теорий заговора в
Интернете, которые каждый раз утверждают, что процесс прошел несправедливо. Еще один пример
– призывная лотерея 1969 года в США, целью которой было определить, какие молодые люди
присоединятся к Вооруженным силам, а затем отправятся воевать во Вьетнам. Члены конгресса
сбрасывали капсулы с именами участников в пластиковый барабан и далее по очереди протягивали
руку и вытаскивали. Участникам присваивался номер, определявший вероятность их присоединения
к Вооруженным силам США.

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

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

Но, к сожалению, идеальное решение пока не найдено. Поэтому публичный показ колеса, бросание
монеты, кубиков и т.п. остаются популярными и понятными способами показать формирование
случайности. Но они плохо работают при удаленных сценариях, потому что всем участникам
кажется, что процесс сфальсифицирован. Очень трудно установить доверие удаленно в любом
физическом процессе. NBA пытается решить эту проблему на протяжении многих лет, пытаясь
убедить фанатов в том, что они проводят честную лотерею. Они создали и конверты, и
подпрыгивающие шары пинг-понга, но люди всегда придумывают сценарии, в соответствии с
которыми их могут обмануть.
Национальный институт стандартов и технологий, НИСТ, в течение последних нескольких лет
проводит эксперимент, целью которого является запуск собственного маяка. Для генерации
случайных чисел используется сложная настройка с участием двух запутанных фотонов, что дает
гарантии случайности, порожденной квантовомеханическим явлением. И если верить принципу
неопределенности Гейзенберга и другим основным принципам физики, тогда это должно быть
случайным, и никто не сможет это фальсифицировать. НИСТ в Интернете публикует каждые 60
секунд множество случайных данных и подписывает их. Любой может использовать эти данные,
если доверяет НИСТ и его эксперименту.

Для того чтобы решить проблему доверия, можно было бы использовать некоторые природные
явления, за которыми все могут наблюдать и которые сложно подделать. Например, солнечные
пятна, солнечная активность, скорость ветра или температура на определенное число и т.п. Проблема
такого подхода в том, что он довольно медленный – температура и солнечная активность меняются
не так часто. Вторая проблема – может возникнуть необходимость в доверенной стороне. Допустим,
в качестве источника случайного сигнала будут сведения о температуре завтра в Москве. При этом у
одного термометр покажет 25 градусов, а у другого – 26. И разница между этими двумя значениями
будет означать победу в лотерее для одного из участников.

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

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

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


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

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

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

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

Поэтому, если бы была возможность предсказать, каким будет следующее случайное число, с
вероятностью, превышающей 1 / d, где d – трудность поиска блока, тогда появится более быстрый
способ добычи блока, чем просто случай. И помните, что d довольно высокое значение сейчас.
Каждый блок, должен иметь 66 бит случайности, которые невозможно предсказать. По крайней
мере, если биткойн безопасен, ни один из майнеров или кто-либо еще не сможет предсказать, какими
будут эти случайные биты.

Итак, довольно просто превратить цепочку блоков с минимальными изменениями в маяк


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

Насколько дорого стоило бы манипулировать этим? Любой майнер имеет возможность, если он
найдет блок, не публиковать его в сеть, при этом не позволяя ему быть следующим блоком в
последовательности. Майнер может сделать это, если блок будет сгенерирован с маяковым выходом,
который его не устраивает. Также возможна ситуация, когда кто-то пытается заставить маяк вывести
определенный выход. Тогда он может подкупать майнеров, которые находят "нежелательные" блоки
и предлагать им вознаграждение, большее, чем вознаграждение за блок в обмен на то, что эти блоки
не будут опубликованы. Допустим, необходимо застать какой-то маяковый выход с вероятностью p.
Для этого нужно отбросить несколько блоков, пока не будет найден нужный блок. И ожидаемое
количество блоков, которые придется отбросить, - 1 / p-1, а с одним флагом монет p является всего
лишь половиной.

Отбрасывать блок довольно дорого, так как при этом теряется награда за блок в 25 биткоинов или
около 15 000 долларов США.

В среднем нужно будет отказаться от одного блока и потерять всего 25 биткойнов. И если есть
лотерея N-party, где это справедливо между всеми N-сторонами, это будет 25 раз n-1 биткойнов.
Таким образом, процесс будет безопасным, пока выигрыш лотереи будет меньше, чем стоимость
манипулирования. Если два человека хотят сделать ставку на равные шансы, и они хотят
использовать Биткойн в качестве источника случайности, это будет безопасно, если их ставки будут
менее 25 биткоинов.

Это первое предложение по реализации действительно децентрализованного маяка. И по сравнению


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

Недостаток использования Биткойна в качестве маяка по сравнению с некоторыми альтернативами


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

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

Рынки прогнозирования и реально существующий поток данных


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

Проще говоря, это рынок, на котором можно торговать акциями в будущих событиях.

Это позволяет иметь долю в некоторых событиях в будущем. Например, в том, что "Динамо"
выиграет чемпионат России в 2015 году. Доля будет стоить некоторой цены X, если это произойдет
на самом деле, и ничего не стоить, если это событие не произойдет. До фактического наступления
этого события у актива будет некоторая цена, отражающая то, насколько вероятным все видят это
событие. Давайте посмотрим на чемпионат мира 2014 года в Бразилии. И, допустим, у нас был
рынок, где можно было покупать и продавать акции в командах. В конечном итоге акции будут
стоить дорого у той команды, которая победит чемпионат. Перед началом турнира акции каждой из
пяти команд имеют ненулевую цену, которая отражает мнение рынка о шансах на победу каждой
команды. Например, у команды Германии это число будет 0,12 – это значит, что рынок верит в 12%
шанс на победу. И так далее для каждой команды. По мере продолжения турнира эти цены будут
колебаться, и это будет отражать меняющуюся убежденность рынка в том, насколько вероятна
победа каждой команды.

После группового этапа Англия, которая до начала чемпионата торговалась на 0,05, то есть имела 5%
-ный шанс выигрыша, ушла в ноль. Англия была выбита после группового этапа. И так как у
команды Англии нет возможности выиграть в этот момент, цена отражает то, что их акции сейчас
бесполезны. В это же время команда США, у которой акции в начале турнира стоили 0,01, по
результатам группового этапа подняла свой рейтинг и цена стала 0, 06 - то есть у рынка выросла
уверенность в вероятности их победы.

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

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


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

В результате немецкая команда разгромила бразильскую. Акции команды Бразилии опустились до


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

В результате в финале турнира остаются команды Германии и Аргентины. Команда Германии


выигрывает, и с этого момента только ее акции имеют ценность. Одной из стратегий получения
прибыли в этом примере была покупка акций команды Германии по 0,12 доллара и продажа по 1
доллару в конце турнира. Этот способ эквивалентен традиционным ставкам в спорте. Но на рынке
прогнозов есть много других способов получить прибыль. Не нужно просто делать ставки на
правильную команду и надеяться, что они выиграют. Можно инвестировать в любую команду в
любое время или же занять короткую позицию, и получить прибыль только от способности
предсказать, как будет меняться уверенность рынка в победе той или иной команды.
Еще один пример с реального рынка прогнозов – выборы президента США в 2008 году. В начале
выборов шансы Барака Обамы оценивались как очень высокие, шансы Джона Маккейна – как очень
низкие. В ходе предвыборной компании с кандидатами происходили разные события (дебаты,
удачные и неудачные интервью и прочее), и верования людей в их победу менялись. За два месяца
до фактических выборов Джон Маккейн почти добрался до пятидесяти процентов шансов на победу
– в тот момент люди действительно не знали, кто победит выборы.

Но к тому времени, когда на самом деле произошли выборы, Обаме дали 90%-й шанс выигрыша за
день до выборов.

Таким образом, рынок прогнозов был хорошо осведомлен о результатах выборов. Выборы были
почти закончены до того, как были поданы голоса. По крайней мере, было очень маловероятно, что
Обама проиграет выборы. Это демонстрирует всю мощь рынков прогнозирования. Можно читать
газеты, новости в Интернете, смотреть телевидение – и там будет множество противоречивых
мнений различных экспертов. Но если вместо этого посмотреть на рынок прогнозов, то можно
увидеть, что за неделю до выборов вероятность выигрыша барака Обамы была равна 90 процентам.
Вот почему экономисты любят рынки прогнозов – они раскрывают все знания и представления,
которые участники имеют о событиях в будущем.

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

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

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

И он столкнулся с различными проблемами регулирования в США. Не вдаваясь во все юридические


детали, отметим, что в конечном InTrade закрылся в 2013 году.

Можно ли построить рынок децентрализованных прогнозов на основе Биткоина? Есть несколько


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

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

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

Затем можно продать долю в каждом результате и получить FutureCoin обратно. Можно купить долю
в каждом результате, а затем продать акции, которые посчитаете бесперспективными. Это будет
одним из способов получения прибыли. Можно купить портфель, дождаться изменения цен и
продать его напрямую за FutureCoins. А можно купить портфель и играть на цене акций внутри
портфеля. После фактического совершения события происходит специальное закрытие, и тогда для
получения прибыли достаточно иметь одну долю в выигрышном результате. Как можно вести
арбитраж, который позволит зафиксировать результат исхода события и получить прибыль тем, кто
поставил на выигрышный вариант развития событий? Самая простая модель - доверенные арбитры.
Любой может стать арбитром. Но для того, чтобы люди доверили арбитру свои выигрыши, они
должны ему доверять. Для этого арбитр создает себе репутацию, работая на рынке долго и честно.
Но всегда есть риск, что арбитр может скрыться или трактовать результаты в свою пользу. Есть
несколько способов организации децентрализованного арбитража. Один из них заключается в том,
чтобы все люди, владеющие акциями на рынке, голосовали за победителей, то есть за то, что
произойдет на самом деле. И есть различные способы, которыми можно попытаться стимулировать
пользователей правильно голосовать. Можно заставить пользователей размещать облигации или
поддерживать репутацию, и, если они голосуют в направлении, отличном от большинства,
накладывать штраф. В результате их репутация снижается. Можно создать аналогичную систему, в
которой вместо голосования пользователей будет криптовалютное голосование майнеров. Если они
будут голосовать неправильно, они получат меньшую награду за блок или не получат ее совсем.

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

Следует отметить, что иногда реальность сложна. Для некоторых событий бывает трудно однозначно
определить результат. Есть традиция выливать на тренера победившей в Super Bowl (футбольный
чемпионат) команды напиток Gatorade. Победившая команда выбирает цвет напитка самостоятельно.
Люди делают ставки на то, какой цвет выберет та или иная команда. Оранжевый и желтый цвета
всегда были фаворитами, как самые популярные у команд цвета. В результате на одном Super Bowl
выиграла команда Seattle Seahawks, и они вылили на голову тренеру оранжевую Gatorade. Затем
несколько игроков взяли и вылили на голову тренеру желтую Gatorade. На рынке прогнозов
случилась неразбериха, так как совершенно непонятно, кто победил – те, кто ставил на оранжевый,
или те, кто ставил на желтый цвет. Организации, которые принимали реальные ставки, чтобы
сохранить свою репутацию объявили о том, что они выплатят выигрыш тем, кто поставил на желтый
и тем, кто поставил на оранжевый. То есть они согласились понести убытки, чтобы не испортить
себе репутацию. На децентрализованном рынке прогнозирования это было бы невозможным, так как
нельзя создать деньги из воздуха – выигрыш формируется только из тех денег, которые изначально
поставлены. Есть несколько решений. Одно из них – побеждают оба цвета, и каждый поставивший
на них, получает половину выигрыша.

Скорее всего в следующий раз ставки на это событие принимались бы по-другому. Например, какой
первый цвет Gatorade будет вылит на тренера? Но суть в том, что в реальном мире всегда могут
произойти события, не совпадающие ни с одним прогнозом или сразу с несколькими.

Последнее, что нужно реализовать, – децентрализованная книга заказов. На реальном рынке


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

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

Если подвести итоги всему вышесказанному, Биткоин не позволяет в полной мере реализовать
рынок прогнозов. Нельзя реализовать полностью децентрализованные сделки, децентрализованный
арбитраж и нет встроенной в Биткоин концепции книги заказов. Поэтому возникает идея о создании
совершенно новой валюты с учетом накопленного с 2008 года опыта работы с Биткоином –
Альткоинс (Altcoins). Следующая лекция посвящена новой криптовалюте, перспективам и
проблемам ее развития.

Разнообразие криптовалют

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

Впервые мир услышал о биткоине в январе 2009 года. Не прошло и двух лет, как в середине 2011-го
была запущена первая рабочая альткоин-система - Неймкоин (Namecoin). После этого появились и
другие биржи, однако широкое распространение альткоины получили только после 2013 года – в
настоящее время новые проекты запускаются каждую неделю. Число криптовалютных систем сейчас
доходит до 500, но и эти цифры весьма условны, так как не все известные системы до конца
проработаны. Также не стоит забывать и о "биржах-однодневках", о которых будет рассказано
позже.

Альткоин и биткоин. Схожесть прослеживается уже в названиях. Эти понятия и в самом деле имеют
много общего. К примеру, структура скрипта: оба содержат генезис-блок, хранящий информацию
обо всех произведенных транзакциях. Если говорить об объеме рынка, то лидером по-прежнему
является биткоин. Но доля альткоина, объединившего под собой множество электронных валют,
постоянно растет.

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

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


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

Например, популярная криптовалюта Лайткоин является форком Биткоина, практически его


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

Зачастую альткоин отличается технической спецификой кода и параметрами - например,


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

Множество параметров (назовем это денежной политикой), к которым относится система


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

Рассмотрим поподробнее некоторые виды альткоин-систем.

Неймкоин (Namecoin) - первая альткоин-система, созданная в апреле 2011-го года, то есть спустя 2
года после запуска биткоина.

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

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


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

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

Еще одна любопытная деталь – неймкоин был первой альткоин-системой с реализованной


возможностью "двойного" майнинга. Подробнее об этом будет рассказано в следующих лекциях.

Лайткоин (Litecoin) - биржа, запущенная немногим позднее Неймкоина и произошедшая от


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

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


рассказывалось в лекции 8. Лайткоин был заявлен конкурентом биткоина, устойчивый к GPU-
майнингу. В начале майнить на нем можно было тем же способом, что и на биткоин-биржах, однако
на данный момент технология добычи LTC сильно отстает от лидера на рынке криптовалют. И все
же пиринговая криптовалюта превосходит биткоин по некоторым параметрам. Например, по
скорости совершения платежей – блок LTC присоединяется в блокчейн в целых 4 раза чаще, так как
создание очередного звена не превышает 150-ти секунд.

Лайткоин ранее называли "улучшенной" версией биткоина, но на данный момент с утверждать об


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

Теперь перейдем к рассмотрению другой альтернативной криптовалюты, выпуск которой датируется


2012 годом, – Пиркоин (PPCoin или Peercoin). Пиркоин известен своим разнообразием в системах
шифрования – это первый альткоин, в котором при генерации блоков использован proof-of-stake
("доказательство доли владения"), форма майнинга, рассмотренная в лекции 8. Идея состоит в
использовании "доли" в качестве ресурса, который определяет, какая именно нода получает право
добычи следующего блока. Сейчас в PPCoin реализована возможность гибридного варианта
майнинга, то есть с использованием PoS - и PoW – систем – такой подход сейчас считается самым
безопасным. Биткойн использует только PoW, что делает потенциально возможным двойное
расходование ("атака 51 %"). Доказательство владения предполагает, что для двойного расходования
надо сконцентрировать в своих руках более 50 % всех выпущенных пиркоин. Помимо этого PoW в
пиркоине используется для расчета вознаграждения и не определяет главную цепочку. Таким
образом, провести атаку пиркоин-сети, имея большое количество SHA-2-оборудования, становится
невозможным.

У гибридной майнинг-стратегии есть одна особенность, вызывающая много споров, - неполная


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

Да, на данный момент регистрационная точка не привязана к архитектуре программы жестко,


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

Догикоин (Dogecoin) – был запущен в 2013 году. Сообщество Догикоин неоднократно поддерживало
сбор средств на благотворительность. Например, В 2014 году было собрано $30000 для ямайской
команды бобслеистов, не получившей финансирования для поездки на олимпийские игры; также
догикоин-сообщество поддержало участника автогонок NASCAR в Талладеге. Создатели стремились
сделать систему близкой к человеку и поэтому уделили особое место набору ценностей,
преследуемых биржей, чувству юмора и подходу к майнингу в целом. В этом и заключен секрет
успеха и популярности догикоина.

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

На рис. 10.1 представлены графики хэширования сети с апреля по август 2014 года для трех разных
криптовалют . На среднем графике изображен догикоин. Можно увидеть две точки в апреле и июле,
когда размер вознаграждения был сокращен вполовину. Когда это произошло впервые, хэшрейт сети
значительно снизился, на 30-50% от средней величины. За этим последовал спад, но в июле хэшрейт
снова вырос…и затем опять сократился в два раза.

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

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

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

Стоит всегда обращать внимание на курс валюты. Особенно это касается не всегда стабильных
альткоинов, их стоимость легко прослеживается по графику хэшрейта сети.
Рис. 10.2. Соотношение хешрейта и цены для Догикоина и Лайткоина

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

На нижнем графике представлено отношение курсов валют на одном из крупнейших сторонних


обменников. По этим данным очевидно, что стоимость догикоина ниже стоимости лайткоина.

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


сравнения является рыночная капитализация. Напомним, что это цена за единицу валюты в текущее
время, измеренная на сторонней бирже, умноженная на общее количество единиц этой валюты в
обращении. Это важная информация, но не всегда объективная. Помните, что курс может
измениться, когда кто-то попытается продать валюту. Предположим, что у кого-то есть один
миллион биткоинов, это около 10% от текущего тиража биткоинов. И он не сможет продать все эти
монеты по текущей цене, потому что как только он попробует продать такое количество, курс начнет
снижаться. Он просто не сможет найти столько желающих купить валюту. Другой недостаток такого
подхода – неизвестное соотношение между объемами валюты, вошедшей и вышедшей из обращения.
Рыночная капитализация не отражает сведений о неактивных владельцах, например, утративших
свой пароль. Суммы буквально висят в воздухе, но сеть не может определить их роль в текущем
обороте.

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

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

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


стоимости – сеть регистрирует даже простой пересчет средств в кошельке.

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

Взаимодействие электронных бирж

Альткоин и биткоин – давние соперники на рынке криптовалют. А, как известно, в любой борьбе
есть победитель и побежденный.

Майнинг-атаки становятся возможными в случае некорректной работы защитных систем.


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

Вспоминается история небольшой альткоин-биржи коилдкоин, атакованной в 2012 году крупным


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

Такая же участь настигла и другие альткоин-биржи: терракоин, ворлдкоин недавно подверглись


кратковременным майнинг-атакам.

Самое время вспомнить об "объединенном майнинге" – технике добычи, позволяющей получать


вознаграждения сразу от нескольких независимых криптобирж. В чем заключается хитрость? В том,
что альткоин-системы позволяют добывать только собственную валюту, и при этом каждый
сгенерированный хэш или паззл может быть применен и к альткоину, и к биткоину. Однако нет
никакой гарантии, что найденное решение сработает в этих двух системах одновременно.
Объединенный майнинг - своего рода лотерея, в которой майнер "отдает" копию своего билета в
смежную сеть – сеть, объединившую несколько валют, – после чего шанс его выигрыша повышается.

Рассмотрим процесс технического исполнения алгоритма более детально. Каждая новая вычисленная
хэш-функция биткоина зависит от случайного числа, хэша предыдущего блока и корня дерева
Меркла от всех транзакций. Значение хэша должно удовлетворять установленным критериям
сложности (target). И если решение не подошло для биткоин-цепи, оно перенаправляется в смежную
сеть, где продолжает сравниваться со значениями форков – таким образом, почти всегда можно
преумножить свою добычу на некоторый процент ( рис. 10.3).

Рис. 10.3. Объединенный майнинг


Рис. 10.4. Как работает объединенный майнинг

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

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

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

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

Пулы в биткоин-системе уже давно запустили сервисы, позволяющие осуществлять параллельный


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

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

Представим ситуацию: Боб заработал один лайткоин и захотел сторговаться с Алисой, добывшей
биткоин. Чтобы осуществить задуманное, Алиса должна отправить транзакцию по биткоин сети,
которая "передаст" ее монету Бобу, а Боб совершит то же самое, но по лайткоин-сети. Если они
полностью доверяют друг другу, не возникает никаких проблем. Но кто должен перевести валюту
первым, если люди вовсе не знают друг друга?

Технология атомарный своп (atomic swap) позволяет осуществить эту операцию без участия третьего
доверенного лица. За успешную транзакцию будет считаться выполнение двух условий – перевод
биткоина и перевод лайткоина. Алгоритм содержит четкую последовательность шагов.
Рис. 10.5. Перекрестные цепи атомарных свопов. Шаг 1

Алиса генерирует секретный ключ x. Она вычисляет хэш-функцию ключа h=H(x) - публичный ключ
для обеих сторон ( рис. 10.5). Далее она создает депозит (DepositA), который можно потратить, если
он подписан и Алисой и Бобом или Бобом, который знает X. Алиса не публикует депозит в сети.

Затем она создает возвратную транзакцию (RefundA), отправляет ее Бобу и он ее подписывает.


Возвратная транзакция вернет деньги Алисе в момент времени T+2. После получения подписи Боба
на возвратной транзакции, Алиса публикует депозит.

Операция обмена валютой выполнится, если Боб узнает x до времени T+2.

Рис. 10.6. Перекрестные цепи атомарных свопов. Шаг 2

Чтобы сделка осуществилась, Бобу также нужно создать депозит "Б". У литкоина Боба тоже два пути
- либо он отправится к Алисе после подтверждения, либо останется с хозяином. Действия Боба
аналогичны действиям Алисы – сначала он создаст транзакцию возврата, и лишь затем публикует
депозит. Транзакция возврата ожидает двух подписей до времени Т+1 – это значит, что
подтверждение от Алисы потребуется немногим раньше. Нетрудно заметить, что механизм
взаимодействия пользователей безопасен и прозрачен для обоих – благодаря установленным
интервалам Т+1 и Т+2 все действия пользователей автоматически становятся согласованными во
времени.

Рис. 10.7. Перекрестные цепи атомарных свопов. Шаг 3

На третьем шаге Алиса открывает(reveal) x (до наступления T+1). Она забирает депозит B, а Боб
забирает депозит A. В случае, если она не передает x, по прошествии T+1 у Боба остается его
лайткоин благодаря возвратной транзакции.

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

Из-за этих недостатков операции с альткоинами выполняются в основном через крупные


централизованные обменники, либо через локальные биткоин-обменники.

Плюсы и минусы разнообразия альткоинов

Большинство существующих альткоинов появились благодаря форкингу биткоина или какого-либо


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

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

Востребованность биржи решает практически все проблемы. Чем больше привлекаемая аудитория,
тем больше транзакций, тем активнее происходит оборот средств. Конечно же, любой криптобирже
необходимо иметь штат разработчиков. Обновления, исправление ошибок, любые сбои – вот
основные направления работы этих людей. Если биржа становится популярной, роль разработчиков
возрастает в геометрической прогрессии: они уже не только вносят коррективы, но и повышают
эффективность работы сети: опять же, для большого количества людей потребуется больше
пространства для совершения транзакций. В технической инфраструктуре альткоинов и биткоинов
существуют так называемые боты-советники ("tipbots") и "краны" ("faucets"). С помощью ботов-
советников система общается с новыми пользователями, не зарегистрированным в сети. Через бота
сеть может выдать неизвестному майнеру сведения о свободной валюте, предложить
зарегистрироваться. Конечно, все это делается для привлечения внимания. Краны предназначены для
стимуляции распространения сведений пользователями, например, за какое-либо упоминание веб-
сайта в сети пользователь получает небольшой денежный бонус.

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

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

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


полным тестовым версиям Альткоина – инструменты разработчика и диагностики позволяют
просматривать поступающие блоки и транзакции. Большинство альткоинов сейчас имеют фундамент
управления, обычно запущенный разработчиками. Вспомним Сатоши Накамото, основателя
биткоина, выпустившего исходный код для ссылочного клиента и исчезнувшего после этого. Многие
разработчики продолжают поддерживать свой проект и после его запуска. Им важно развивать свою
систему, поэтому некоторые группы пользователей создают целые организации. Совместными
усилиями они выводят свою биржу на рынок. Пользователям предоставляются вознаграждения за
решения PoW-паззлов. Но есть и другие способы популяризовать новую систему.

Например, премайнинг, в котором добыча начинается не с первого блока, а с некоторого под


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

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


основатели продают валюту – либо в долларах, либо уже в электронном виде - физическим лицам;
таким образом покупатели "встраиваются" в систему. То есть основатель получает и нового
пользователя, и прибыль от продажи. Довольно просто и удобно.

А вот следующий вариант вряд ли покажется таким же тривиальным, как предыдущие. Proof-of-burn,
дословно "доказательство сожжения", - алгоритм, известный среди майнеров как "односторонняя
привязка". Работает он по следующей схеме: за уничтожение цифровой биткоин-единицы
пользователь получает прибыль в другой сети. Выглядит так, будто бы стоимость альткоина и
биткоина эквивалентна. Понятно, что после уничтожения битко