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

Все еще не понимаете, что такое биткойн? Давайте разбираться вместе. Информационные технологии.

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


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

Криптовалюты стали возможными благодаря асимметричному шифрованию
До 1970-х годов все общеизвестные схемы шифрования были симметричными: получатель зашифрованного сообщения должен был использовать такой же секретный ключ, чтобы расшифровать сообщение, какой использовал отправитель для шифрования. Но все изменилось с появлением асимметричных схем шифрования. Это были схемы, в которых ключ для дешифрации сообщения (известный как закрытый/личный/частный/приватный ключ, private key) отличался от ключа, который был нужен для шифрования (публичный/открытый/общий ключ, public key) — и не было практического способа узнать приватный ключ, имея в распоряжении публичный.



Уитфилд Диффи, важный человек в развитии криптографии в 70-х

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

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

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

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

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

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

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

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



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

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

Когда вы будете готовы потратить эти биткойны, вы создадите новую транзакцию вроде Transaction 4. Вы перечислите Transaction 3, вывод 1 как источник средств (выводы индексируются нулями, поэтому вывод 1 будет вторым выходом). Вы используете свой секретный ключ для генерации Signature D, подписи, которую можно проверить с помощью открытого ключа D. Эти 2,5 биткойна теперь разделены между двумя новыми выводами: 2 биткойна к Public Key E и 0,5 биткойна к Public Key F. Теперь их можно потратить только владельцами соответствующих секретных ключей.

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

В сети биткойнов адреса, которые люди используют для отправки друг другу биткойнов, извлекаются из открытых ключей вроде Public Key D. Точные сведения о формате адреса биткойна сложны и со временем меняются, но биткойн-адрес можно представить как хеш (короткая и случайная цепочка битов, которая служит криптографическим отпечатком) публичного ключа. Биткойновые адреса закодированы в пользовательском формате Base58Check, который минимизирует риск опечатки. Типичный биткойновый адрес выглядит так: 18ZqxfuymzK98G7nj6C6YSx3NJ1MaWj6oN.



Эта транзакция берет 6,07 биткойна с одного адреса ввода и делит их между двумя адресами вывода. Один адрес вывода получает чуть больше 5 биткойнов, а другой — чуть меньше 1 биткойна. Что более вероятно, один из этих адресов вывода принадлежит отправителю — посылает «изменение» самому себе — а другой принадлежит третьему лицу.

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

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

Как биткойн запрещает двойные траты


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

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

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

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

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

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

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

Некоторыми узлами являются майнеры («шахтеры»), которые участвуют в процессе фактического обновления блокчейна. Майнер создает список всех транзакций, о которых он слышал, но которых пока нет в блокчейне. Затем он проверяет, все ли правила биткойна выполняет транзакция — правдивость подписей, чтобы сумма выводов не превышала сумму вводов, и так далее — отбрасывая те, что правилам не отвечают. В результате создается новый список проверенных транзакций, он же блок. Майнер также добавляет специальную транзакцию себе с фиксированным вознаграждением — сейчас это 12,5 биткойна — за создание блока.

В настоящее время 12,5 биткойна — это больше 200 000 долларов, поэтому очень многие хотели бы добавить очередной блок в блокчейн. Чтобы выиграть право добавить следующий блок, биткойновые майнеры соревнуются между собой, осуществляя повторяющиеся вычисления. Они добавляют случайное значение (nonce) в кандидатский блок, который создали. Затем применяют хеш-функцию SHA-256, которая производит короткую и случайную на вид последовательность единиц и нулей, которая служит криптографическим отпечатком для блока.

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

Поскольку хеш-значения SHA-256 по сути случайны, единственный способ найти подходящее — повторное угадывание. В большинстве случаев значение хеша будет слишком высоким, а майнер будет повторять процесс, изменяя значение nonce и вычисляя другое значение хеш-функции. Сейчас сеть вычисляет около 7 х 1021 хешей SHA-256 в среднем на каждый созданный блок.

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

Как сеть биткойнов достигает консенсуса?


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

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

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

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

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

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

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

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



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

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

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

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

Вычисления защищают блокчейн


Майнинг, или добыча биткойнов, — это вероятностный процесс, поэтому вероятность того, что атака будет успешной, частично зависит от удачи. Также она зависит от того, обладает ли злоумышленник большей вычислительной мощностью, чем остальная сеть. Если да — а этот сценарий известен как «51-процентная атака» — атака будет успешной. С другой стороны, если злоумышленник контролирует менее 50% общей вычислительной мощности сети, то атака вряд ли будет успешной, особенно если честные узлы имеют приличный старт.

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

Майнеры накопили столько вычислительной мощности, потому что майнинг биткойнов — прибыльный бизнес. Опять же, майнеры получают 12,5 биткойна — больше 200 000 долларов — за блок.

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

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

Награда в размере 12,5 биткойна запрограммирована на то, чтобы снижаться со временем. Когда биткойн был запущен в 2009 году, каждый блок создавал 50 биткойнов. В 2012 году награда упала до 25 биткойнов, а в 2016 — до 12,5. Через каждые четыре года она также будет снижаться — 6,25 в 2020, 3,125 в 2024 и так далее.

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

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

Споры на тему масштабирования раздирают общество


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

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

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

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

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

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

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

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

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

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

© WIKI.RU, 2008–2017 г. Все права защищены.