zhu_s (zhu_s) wrote,
zhu_s
zhu_s

This journal has been placed in memorial status. New entries cannot be posted to it.

Categories:

3 века денег: наличные, банки, криптовалюты, ч.3

Кто должен проверять подлинность платежа? В частности - то, что я одновременно не разослал тысячи аналогичных сообщений на другие адреса, например, на свои? Ясно, что это не может быть получатель, как это происходит при расчете «физическими» наличными деньгами. Ведь ему в данном случае безразлично, ссылается ли полученная им «монета» на реальный неизрасходованный результат предыдущей транзакции. Но даже если он сподобиться это проверить, то убедиться в отсутствии параллельного «ксерокопирования» денег он попросту не в состоянии. Или не заинтересован, если получателем буду я сам,

Проверка подлинности: Истина всегда то, что считает таковой большинство

Для подтверждения «правильности» транзакции требуется некое «консенсусное» включение её в общедоступную базу данных (леджер), состоящую из последовательности «пачек» (блоков по 1МБ размером, что может включать в себя порядка 2 тысяч, что ограничивает пропускную способность сети ~300 тыс. операциями в сутуки) ранее одобренных транзакций, выстроенных в цепочку (блокчейн), начиная с генезис-блока и доступную всем желающим. (Первое, что начинает делать приложение Bitcoin Core – пытается скачать на ваш компьютер 65 гигабайтов записей обо всех проведенных на сегодня операциях с биткойнами; в лайт-версиях «кошельков», предназначенных для смартфонов, эта функция – участия их в подтверждении транзакций (майнинге) – отключена.)

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

Пользователи стимулированы к тому, чтобы собрать ожидающие подтверждения транзакции в блок, и добавить его в цепь, поскольку первой транзакцией в потенциальном новом блоке будет «generation transaction», адресующая тому, кто это сделает, известное кол-во биткойнов (сейчас 12.5); кроме того, он получит комиссию из отобранных для подтверждения записей. Сама по себе это несложная задача, но, чтобы затруднить работу мошеннику, пытающемуся подсунуть блок с «двойным расходованием», она искусственно сделана вычислительно сложной*. В итоге вероятность, что именно мошенник первым соберёт блок, решающий эту сложную задачу, примерно равна доле его вычислительной мощности от мощности всех пользователей (узлов) сети.

[Прим.] * Технически задача состоит в вычислении (256-битного) хеша блока из хешей всех входящих в него транзакций и хеша предыдущего блока, подбирая дополнительное (само по себе бессмысленное) число (nonce), так чтобы результат начинался, грубо говоря, с определённого количества нулей. Решить эту задачу не перебором невозможно. Целевое число, меньше которого должен оказаться хеш валидного блока, автоматически корректируется раз в 2 недели (через каждые 216 блоков) так, чтобы среднее время его подбора составляло около 10 минут независимо от суммарной вычислительной мощности участников. (Так, в период с 1 марта 2014 по 1 марта 2015гг.  среднее число перебираемых за эти 10 мин. нонсетов для создания нового блока выросло с 16.4 до 200.5 квинтиллионов.)

Поскольку пользователи, проверяющие транзакции и пытающиеся собрать блоки для добавления в цепь, работают независимо, вполне нормальна ситуация, когда сразу 2 юзерам более-менее одновременно удалось подобрать валидные блоки. Цепь блоков на актуальном конце начинает ветвиться. т.е. blockchain в норме представляет собой blocktree – не цепь, а дерево с постоянно отрастающими и засыхающими ветками (т.наз. форками – досл. вилка).

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

[Прим.:] «Длина» цепи блоков рассчитывается как сумма сложностей всех блоков в этой цепи, а не как сумма количества блоков, что помогает избежать получения мошенником контроля над цепью, атакуя её ветками с большим количеством блоков маленькой сложности.

Поддерживать более короткую ветку «честному», не аффилированному с мошенником пользователю нет никакого смысла, когда он «видит» более длинную. Он будет считать, что большинство пользователей так же, скорее всего, будет оставаться на самой длинной ветке, и из-за концентрации там вычислительной мощности она будет расти быстрее. Более короткая ветка при этом будет рассматриваться ими как «орфан», все транзакции в которых будут рассматриваться большинством пользователей как объекты для включения во вновь формируемые блоки. А первые «эмиссионные» транзакции, начисляющие на адрес майнера 12.5 (сейчас) биткойнов за сборку валидного блока, так и останутся при этом неподтвержденными, воспользоваться ими он не сможет.* Дорогие вычислительные ресурсы, затраченные на подбор блоков в тупиковой ветке, будут выброшены на ветер.

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

«Адам Смит был неправ…» (ц, к/ф Игры разума)

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

На той же идее – постоянно «голосующего» тратой своих энергоресурсов для достижения собственных эгоистических целей большинства, и попутно - отсекающего этим поползновения жульнического «меньшинства», замешаны и все альткойны, предлагающие обычно незначительные вычислительные модификации исходного протокола Биткойна. Напр., в Лайткойне достаточно ресурсоемкая процедура 256-битного хеширования заменена более легкой. Кое-где вместо «бессмысленного» перебора сотен квинтильонов хэшей блоков для поиска попадающего в мишень, решается «полезная», но столь же трудоемкая задача типа разложения больших чисел на простые множители. В протоколе Ethereum генерация и подтверждение транзакций (включение их в блокчейн) может быть поставлено в зависимость от выполнения определенных условий (смарт-контракта), например, наступления страхового события, и вместо лотереи (proof-of-work, он же майнинг) используется механизм установления консенсуса на основе процента владения, которое имеют заинтересованные стороны (proof of stake) и т.п.

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

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

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

В утешение можно заметить, что установление «тоталитарного режима» в сети Блокчейн может опираться только на грубую вычислительную силу (>50% мощности всех участников), создание которой в настоящий момент весьма затратно и экономически неэффективно. (Проблема масштабируемости.) В целях защиты от «атаки 51%» размер блока в Bitcoin Core остаётся ограниченным 1 мВ, что пока позволяет поддерживать приемлемую децентрализацию майнинга, но создает проблему ограничения числа транзакций в единицу времени (примерно 3.3/сек. = 2k/600сек.). Для сравнения - Visa проводит до 22 тыс. транзакций в сек. (и потенциальна способна выдержать до 56 тыс./сек.). Расширение пропускной способности биткойн-транзакций, например, до 10 тыс./сек. потребовало бы размера блоков по 1,6 гB, что, помимо вытеснения относительно маломощных майнеров, затруднило бы и распространение столь крупных блоков по узлам сети.

В социуме положение в этом смысле гораздо печальнее, и малочисленной кучке мошенников обычно без особых усилий удается установить тоталитарный контроль над многомиллионными массами, прибегая для защиты от «атак» к одной и той же, отработанной веками схеме: (i) поддержание этих масс в невежестве, культивируя «традиционные ценности» (ii) постоянная промывка мозгов; (iii) жесткое цензурирование информации (ц, к/ф «Враг», оно же Ж. Сарамаго «Двойник»).

Полезные ссылки:

0. Информация о текущем сосянии биткойн-блокчейна и поиск в нём, (последних) добытых блоках, обменных курсах, и т.п.
1. «Почти официальный» сайт сообщества: введение, FAQ, скачать приложения https://bitcoin.org/ru/
2. Русская страничка в фейсбуке https://www.facebook.com/bitcoinru/
3. Bitcoin Wiki, англоязычная и русское зеркало, а также русский почти аналог
4. Как протокол Биткойн на самом деле работает, by Michael Nielsen on December 6, 2013. (неформальное, легко читаемое введение с небольшими неточностями).
5. Пара интервью о дальнейших приложениях и развитии протокола Биткойн 1, 2, а также старые, но возможно ещё не утратившие актуальность соображения Б. Делонга о возможностях «заякоривания» цен биткойнов.
6. Ранее в тему в данном блоге: 1; 2; 3; 4; 5; 6; 7

P.S. Запись составилась путём выстраивания в цепь «блоков», из которых я собирался сделать статью 3 года назад, когда тема была еще достаточно свежей. Но, тогда как-то не сложилось, забросилось, а за 3 года не только тема утратила прелесть новизны, но и сам жанр журнальной статьи (а не только бумажные журналы) и журналистика как профессия (т.е. распространение поверхностных сведений о разнообразных предметах) умерли, уступив место более современным коммуникационным транзакциям. Примерно, как когда-то, к концу 19 века умер классический русский роман, превратившись в музейный экспонат и инструмент для пытки школьников. Так что - «захороним останки» тут. Тем более, что и сам ЖЖ тоже давно умер.
Tags: Блокчейн, Деньги, Криптовалюты
Subscribe

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 38 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →