Sat. Jul 31st, 2021
Что, Как и Зачем / Хабр

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

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

Оглавление

  • Основная идея

  • Преимущества

  • Надежность

  • Курс криптовалюты

  • Законодательное регулирование

Основная идея

Представим себе двух партнеров: Васю и Колю. Коля очень любит вести учет всех своих сделок и для этих целей заводит себе дневник. Дневник представляет собой набор последовательных записей:

  1. Взял 50 денег у Саши

  2. Занял 8 денег Пете

  3. Занял 100 денег Васе

  4. Отдал 130 денег Маше

  5. Занял 36 денег Роме

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

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

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

Такая последовательность называется хэшем, а md5sum – хэш-функцией.

Чтобы уж наверняка, Коля решает: “Я подкину работу злоумышленникам: буду хэшировать и текст новой записи, и хэш предыдущей.” То есть каждый новый хэш теперь связан с предшествующей записью! И куда без начального хэша (любой последовательности символов, например da7c8) для первой строки. Теперь таблица займов выглядит так:

  1. Взял 50 денег у Саши 69ab8

  2. Занял 8 денег Пете 27825

  3. Занял 100 денег Васе e709a

  4. Отдал 130 денег Маше fdb876

  5. Занял 36 денег Роме bd3d7

В первом пункте “69ab8” – хеш для начального хеша “da7c8” и записи “Взял 50 денег у Саши”.

Во втором пункте “27825” – хеш для свежесформированного хеша “69ab8” и записи “Занял 8 денег Пете”.

В третьем “e709a” – хеш для предыдущего хеша “27825” и текста данной строки “Занял 100 денег Васе”.

И так далее аналогично.

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

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

  1. Взял 50 денег у Саши (210) 69a00

  2. Занял 8 денег Пете (172) ff800

  3. Занял 100 денег Васе (654) e7f00

  4. Отдал 130 денег Маше (323) a6c00

  5. Занял 36 денег Роме (901) bd300

В первом пункте “69a00” – хеш для начального хеша “da7c8” и записи “Взял 50 денег у Саши”.

Во втором пункте “ff800” – хеш для свежесформированного хеша “69a00” и записи “Занял 8 денег Пете”.

В третьем “e7f00” – хеш для предыдущего хеша “ff800” и текста данной строки “Занял 100 денег Васе”.

И так далее.

Теперь нет необходимости прятать дневник, вся история публична, но изменить любую запись в ней слишком трудоемко для хакеров. Коля берет себе в напарники пять друзей, с которыми делится своим дневником. Для каждой новой записи они вместе начинают подбирать подходящий нонс, так быстрее. Тот, кто находит заветное число первым, вносит запись в дневник и получает за это небольшое вознаграждение. Чтобы угадавший получил награду, запись должна заканчиваться фразой “перевести X денег пользователю Y”, где X – награда пользователю Y за подобранный нонс.

Окончательный вид дневника Коли и есть Биткоин. Это платежная система, использующая одноименную одноимённую единицу для учёта операций. Денежная операция, результат которой записывается в дневник есть транзакция. Последовательность записей в нем (каждая из которых называется блоком) в нем есть блокчейн. Процесс соревнования друзей Коли за подбор подходящего нонса есть майнинг, а сами участники – майнеры. Плата за запись блока – коммисия за транзакцию.

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

Несколько технических уточнений

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

Структура блока Биткоина
Структура блока Биткоина

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

Структура транзакции
Структура транзакции

Однако есть проблема. Цепочка блоков в сети имеет очень большой размер (в сентябре 2020 превысил 300 Гб), и далеко не все узлы могут её выкачать. Например, телефоны или кассовые аппараты. Тем не менее им нужно знать о факте включения той или иной транзакции в блок. Для этого был придуман протокол SPV — Simplified Payment Verification.

“Легкая” верификация основана на структуре дерева Меркла – это двоичного дерева, конечные узлы которого — это хеши транзакций, а внутренние вершины — результаты сложения значений связанных вершин. Вот пример хеш-дерева с тремя транзакциями-листьями:

Дерево хешей с тремя вершинами
Дерево хешей с тремя вершинами

Построение дерева происходит следующим образом:

  1. Вычисляются хеши транзакций, размещенных в блоке: hash(L1), hash(L2), hash(L3) и так далее.

  2. Вычисляются хеши от суммы хешей транзакций, например hash(hash(L1) + hash(L2)). Так как дерево Меркла является бинарным, то число элементов на каждой итерации должно быть четным. Поэтому если блок содержит нечетное количество транзакций, то последняя дублируется и складывается сама с собой: hash (hash(L3) + hash(L3)).

  3. Далее, вновь вычисляются хеши от суммы хешей. Процесс повторяется, пока не будет получен единый хеш — корень дерева Меркла (merkle root). Он является криптографическим доказательством целостности блока (то есть того, что все транзакции находятся в заявленном порядке). Значение корня фиксируется в заголовке блока.

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

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

SVP позволяет существенно снизить нагрузку на сеть и ускорить процесс проведения. Например, 5 переводов максимального размера в сумме весят около 500 килобайт, при этом дерево Меркла при таких же условиях будет иметь размер не более 140 килобайт.

Преимущества

  1. Децентрализация

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

  2. Анонимность

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

  3. Стабильность

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

  4. Ограниченная эмиссия

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

Зависимость количества биткоинов в сети от  времени
Зависимость количества биткоинов в сети от времени

А если по-человечески, то вот цитата Медузы о том, чем блокчейн лучше существующих платежных систем:

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

А насколько это безопасно?

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

А что там случилось?

15 августа 2010 года, ещё до широкого распространения системы, было создано 184 млрд биткойнов. Программый код не предусматривал сумм выше определенного значения, и в результате значение суммы переполнилось. Сделку быстро заметили, и в течение нескольких часов была выпущена версия программы 0.3.1, заменяющая старую цепочку на новую, не содержащую “грязных” ошибочных блоков. В результате такого хардфорка какое-то время даже существовали две версии биткоина, одна из которых содержала ошибочные блоки и вводила пользователей в заблуждение. Однако, новая версия стала доминирующей уже через 19 часов. Эта версия используется по сей день.

Потенциальные угрозы все-таки существуют. Например, взлом приватных ключей и так называемая “Атака 51%”.

Взлом приватных ключей

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

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

Принцип ассиметричного шифрования можно объяснить так:

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

Приватные ключи связаны с биткоин-адресами функцией хеширования SHA-256. Она выдает шифр в виде последовательности 256 битов. То есть возможно 2^256 = 10^77 вариантов хеша. В настоящее время вычислительных мощностей всех компьютеров всего мира не хватило бы, чтобы перебрать все варианты за приемлемое время.

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

Атака 51%

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

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

Существует схожая “Атака Сивиллы”, в которой злоумышленники могут избегать настоящих узлов в сети, если они создают достаточное количество поддельных или идентичных (Sybil идентификаторов). Затем они могут отказаться от приема или передачи блоков, эффективно блокируя других пользователей в сети. С такой угрозой неплохо справляются «алгоритмы конценсуса», такие как «доказательство работы» (Proof-of-Work) и «доказательство доли», (Proof-of-Stake)

Подробнее об алгоритмах консенсуса
  • Proof-of-Work

    Доказательство работы (или консенсус Накамото) было «изобретено» задолго до биткойна еще в начале 90-х и применялось в основном для защиты от спама. В случае доказательства работы хеш сообщения, объединенного со специальным полем (тот самый nonse из истрии о Коле с Васей), должен быть меньше определенного значения (или начинаться с определенного числа нулевых битов). Nonce не несет смысла для самого сообщения — это поле перебирается автором доказательства, пока не будет найдено подходящее значение. Название «доказательство работы» отражает тот факт, что для нахождения nonce надо совершить вычислительную работу, ожидаемое количество которой измеримо. Например, если нужно, чтобы первые 16 бит хеша равнялись нулю, то в среднем нужно перебрать 65536 значений nonce.Консенсус Накамото решает главный бич анонимных сетей – атаки Сибиллы. Чтобы обладать реальной силой (наличие которой пытаются имитировать злоумышленники) в консенсусе Накамото, нужно обладать реальной вычислительной мощностью, которую нельзя подделать.

  • Proof-of-Stake

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

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

Примеры

— известная биржа, работающая не только с Bitcoin, но и другими менее популярными криптовалютами. В 2014 году биржа лишилась 13 000 BTC и 300000 Litecoin в результате атаки.

  • В январе 2015 года стало известно о взломе крупной европейской биткоин-биржи Bitstamp. Тогда хакеры сумели похитить 18,977 BTC.

  • 19 июля 2017 года Parity подвергся хакерской атаке, в ходе которой злоумышленникам удалось украсть 153,037 ETH.

  • В 2016 у биржи Bitfinex неизвестные похитили с платформы 119 756 BTC.

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

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

Законодательное регулирование

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

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

By admin

Leave a Reply

Your email address will not be published. Required fields are marked *