Четыре года назад я приехал в Люксембург, чтобы в местном университете написать PhD-диссертацию про криптовалюты / блокчейны. Написал. Защита пройдёт онлайн (ибо вирус) в этот четверг. Участники клуба приглашаются! Регистрируйтесь и подключайтесь в четверг, 17 сентября, в 18:00 по Москве (15:00 UTC, конвертер в другие часовые пояса).
В этом посте я расскажу: почему блокчейны это интересно и что лично я в этой теме наизучал.
Что такое блокчейн?
Слово "блокчейн" не имеет устоявшегося определения. Для пуристов существует только биткоин, на противоположном конце спектра те, кому и git блокчейн. Лично для меня блокчейн - это система, отвечающая следующим характеристикам:
- децентрализованная сеть: любой может присоединиться, не спрашивая разрешения;
- общее состояние, моделирующее некие единицы ценности (условно - у кого сколько денег на счету);
- механизм консенсуса: протокол, по которому участники сети договариваются, какое состояние "каноническое".
Этому определению 100% удовлетворяют "классические" криптовалюты: биткоин и его клоны / последователи (Litecoin, Monero, Zcash, тысячи их). Ethereum тоже удовлетворяет, хотя пытается реализовать более универсальную машину состояний, не только для просто монеток (хотя "просто монетки", то есть финансовые юз-кейсы, явочным порядком вытесняют нефинансовые на рынке комиссий, but that's a story for another time). "Закрытые блокчейны" вроде Hyperledger не отвечают первому пункту и поэтому мне неинтересны. Децентрализованные файлохранилища (IFPS) не отвечают третьему (нет общего канонического состояния). git не отвечает второму и третьему.
Блокчейны это интересно
Биткоину скоро 12 лет. За эти годы его сотни раз похоронили в прессе, штук пять пузырей надулись и лопнули, и, как мне кажется, довольно распространено мнение (даже в среде технически продвинутых людей вроде аудитории Хабра), что эта ваша крипта - это какое-то надувательство, и приличному человеку туда лезть не стоит. Это отчасти так, но только отчасти.
Конечно, как любая прорывная технология, а уж тем более непосредственно связанная с деньгами, привлекает сомнительных персонажей, пытающихся собрать бабла и уйти в закат. Но помимо них есть и много честных и умных людей, решающих сложные задачи криптографии и безопасности в живых системах, хранящих многие миллиарды долларов. Плюс проекты in between: вроде затевались без цели прямого обмана, но замахнулись на слишом масштабную задачу, или на задачу, где блокчейн не нужен, а его упорно пытаются впихнуть...
Биткоин для меня остаётся маяком в этих турбулентных водах. У этого проекта есть чёткая задача (реализовать цензуроустойчивые цифровые деньги) и ограничения, в рамках которых эту задачу надо решить. Организация разработки биткоина - тема для отдельного поста, но могу отослать к выпуску подкаста "Базовый блок", который я веду, с разработчиком Bitcoin Core.
В первой главе диссертации я сформулировал три ключевые проблемы блокчейнов: приватность, масштабируемость и программируемость. Сейчас пройдусь по ним кратко и привяжу к темам своих исследований.
Приватность
Распространено мнение, что биткоин анонимен. До какой-то степени это так, но множество компаний со значительными ресурсами усердно работают на то, чтобы это изменить (лидер рынка - Chainalysis). Биткоин не сильно-то защищён от деанонимизации. Вся история транзакий хранится в блокчейне в плейнтексте (это необходимо, чтобы каждый мог её верифицировать). Все (крупные) биржи требуют показывать паспорт. Немного магии - и адреса складываются в аккуратные кластеры и привязываются к аккаунту на бирже или, на худой конец, к IP-адресу.
С позиции шифропанков, это плохо как по этическим, так и по техническим причинам. Во-первых, деанонимизация это шаг к цензуре или наказанию пост-фактум на основании того, как человек потратил свои деньги. Цель же криптовалют - обеспечить всем право распоряжаться своими деньгами как можно более свободно. Во-вторых, деанонимизированная криптовалюта теряет часть важных свойств денег, а именно взаимозаменяемость (fungibility). Разные "монеты" одного номинала приобретают разную рыночную стоимость в зависимости от своей истории. В предельном случае, продавцы вынуждены тратить столько ресурсов на фильтрацию входящих монет, чтобы не попасть под санкции за "отмывание", что приём криптовалют станет просто нерентабельным.
Есть много путей усиления анонимности криптовалют. Конечно, у новых проектов больше простора для манёвра и возможностей внедрить новейшую хитрую криптографию. Пионеры тут Zcash, проделавшие впечатляющую работу от академической публикации в 2014 году до запуска настоящей криптовалюты в 2016 (её развитие продолжается). Достойные упоминания конкуренты Zcash на рынке анонимных криптовалют - Monero, Grin и Beam. Тем не менее, им сложно конкурировать с биткоином по ликвидности и узнаваемости бренда. А для валюты как коллективной галлюцинации это очень важно. Продвинутая криптография бесполезна, если не получится раскрутить экономический цикл (майнеры майнят - биржи торгуют - юзеры пользуются - курс растёт - майнеры больше майнят - биржи больше торгуют...).
Первая часть моей диссертации посвящена приватности биткоина и анонимных криптовалют на сетевом уровне (см. статью). В основе всех криптовалют - P2P-сеть, где узлы обмениваются транзакциями и блоками. Часто P2P-слой воспринимают как чёрный ящик: как-то транзакции до всех доходят и славно (см. также свежую обзорную статью про P2P в блокчейнах). Можно оптимизировать P2P, чтобы данные распространялись быстрее, но это будто бы непринципиально (throughput системы ограничен не сетевым слоем - см. раздел о масштабируемости ниже). Но оказывается, что на сетевом уровне есть проблемы с приватностью! Злоумышленник подключается ко всем узлам и слушает, откуда приходят транзакции. Выглядит примерно так:
Мэллори получит новую транзакцию сначала от чёрных узлов, потом от тёмно-серых, потом от светло-серых. Точнее, это она их и раскрасила исходя из времени получения транзакций. Если Алиса отправит ещё одну транзакцию, Мэллори сможет предположить: хмм, вот эти две транзакции распространяются более похожим образом, чем случайная пара транзакций. Видимо, у них один и тот же отправитель...
Я придумал, как эту интуицию квантифицировать, и провёл эксперименты на разных сетях, включая биткоин. Получились такие красивые картинки (эта из тестовой сети биткоина):
Это матрица корреляций между пойманными транзакциями. Чем, темнее цвет, тем более "похожим образом" транзакции распространяются. Sanity check: чёрные квадраты вдоль главной диагонали обозначают, что каждая транзакция идеально похожа на саму себя. Квадраты вдоль диагонали - кластеры "похожих" транзакций. Чёрные метки по осям - наши транзакции. Про них мы знаем, кто они из одного источника, но алгоритм не знает. А всё равно аккуратно сложил их в один квадратик! На защите расскажу, как это работает.
Масштабируемость
Ключевая фишка блокчейнов - возможность самостоятельно проверить валидность всей истории. Вот буквально: с самого первого блока прокрутить на своём компьютере все сотни миллионов транзакций с 2009 года и проверить, что все суммы сходятся и все подписи корректны, а затем продолжать следить за свежими транзакциями в реальном времени (300 тысяч транзакций в день). Важно, чтобы это можно было сделать на широко доступном оборудовании. А-ля закон Линуса: если тысячи людей валидируют блокчейн, вероятность впихнуть туда лажу минимальна. Если таких людей пять, у них появляется возможность договориться и подкрутить правила в свою пользу.
Биткоин ограничивает количество транзакций в единицу времени. Размер блока и время между блоками задано протоколом. В этом месте возникает соблазн простых решений, которые мало что решают. Например, увеличить размер блока или уменьшить время между блоками. Это может дать прирост производительности, но не решит проблему принципиально. Возможно, такими твиками можно запихнуть в биткоин в сто раз больше транзакций, но для масштабирования на всю планету нам нужно увеличение в миллиарды раз.
Кстати, отдельный философский вопрос, что именно нам нужно от биткоина. Чтобы миллиард человек каждый день покупали им кофе? Чтобы крупные биржи перекидывали ликвидность через границы? Чтобы диссиденты и, ничего не поделаешь, продавцы запрещённых товаров не боялись, что их поймают? Хороший вопрос на небольшую лекцию.
That's where layers come in. Идея такая: давайте придумаем дополнительный протокол, чтобы обмениваться транзакциями вне блокчейна, но чтобы мошенничество можно было на блокчейне оспорить. Ключевые слова - off-chain protocols, они же layer-two (L2) protocols (обзорная статья). Главный представитель в мире биткоина - Lightning Network (LN), изучением которого я занимаюсь последние два года.
LN - сеть платёжных каналов. Канал - это протокол, по которому две стороны обмениваются подписанными биткоин-транзакциями вне блокчейна (off-chain). Эти транзакции по-разному перераспределяют деньги, заранее запертые участниками в канал. Пример: Алиса кладёт в канал 10 монет. Потом она может послать Бобу (а он ей) сколько угодно транзакций, по-разному перераспределяющих монеты. В конце концов любой участник может остановить протокол, послать финальное состояние на блокчейн и закрыть канал.
Ключевая проблема - старые состояния. Было у Алисы 10 монет, а у Боба 0. Потом Алиса у Боба что-то купила за три монеты: стало у Алисы 7, а у Боба 3. Что мешает Бобу притвориться, что состояние 10-0 финальное, и отправить его на блокчейн?
Мешает протокол лайтнинга, который позволяет каждой стороне в течение определённого времени оспорить закрытие канала, если оно сделано не последней транзакцией. Как именно это работает - тема ещё одной небольшой лекции, и я даже такую давал в 2017 году.
Лайтнинг поднимает кучу новых вопросов для исследований (будто в биткоине их было недостаточно!). Вроде бы это тоже децентрализованая платёжная сеть на базе P2P-протокола, но есть много важных отличий от блокчейнов "на первом уровне". Один из вопросов, которые я поднимаю в диссертации - приватность платежей, включающих несколько каналов.
Зачем нужно прогонять платежи через несколько каналов? Потому что открыть по каналу между каждой парой пользователей слишком долго и дорого. Нужно платить комиссии за каждое открытие и закрытые и ждать подтверждений. Поэтому идея такая: давайте Алиса будет платить Чарли через Боба, если у Боба есть каналы к ним обоим. Тут главная проблема - атомарность. Что мешает Бобу убежать с деньгами Алисы, не отправив их дальше? Лайтнинг решает проблему с помощью hash time-locked contracts (HTLC): платёж либо весь проходит, если получатель раскрыл секретный прообраз данного хэша, либо весь не проходит.
Мульти-канальные платежи через HTLC это элегантная конструкция, но у неё есть минусы, особенно в смысле приватности. Этому посвящена другая глава диссертации. Я провёл симуляции и прикинул, насколько вероятны разные атаки на приватность при разных входных данных (сумма платежа, какие узлы скоспрометированы и сколько их, и так далее). Получились такие картинки:
TLDR: чем больше узлов скомпрометировано, тем больше вероятность успеха атаки. Спасибо, кэп. Да, результат ожидаем, тем не менее мы его получили исходя из реальной топологии сети (см. статью). Более того, мы сравнили, какие именно узлы злоумышленнику выгоднее всего атаковать и как именно увеличение злонамеренных узлов повышает вероятность каждой из трёх рассматриваемых атак.
Программируемость
Согласитесь, классно было бы сделать цифровые деньги программируемыми. Чтобы контракты исполнялись сами 24/7 без банковских выходных и ручных проверок. Блокчейны - подходящая среда, чтобы это реализовать. Да и даже в биткоине можно писать скрипты, специфицируя, при каких условиях монеты можно потратить. Простейший сценарий - одна цифровая подпись: Алиса шлёт деньги тому, кто предоставит подпись, соответствующую публичному ключу Боба (т.е. Бобу, если только у него не спёрли ключ, хехе). Более сложный сценарий - мультисиг: деньги могут потратить вот эти ребята, но только втроём. Или любые двое из трёх, или любые двое из пяти. Также есть таймлоки (можно потратить не раньше чем через год) и хэшлоки (можно потратить, если предъявишь прообраз хэша). Из этих примитивов уже можно собрать много интересного, в том числе тот же лайтнинг. Но полноценой средой программирования это не назовёшь.
Язык скриптов биткоина не очень дружественный для разработчика. Предпринимаются попытки завернуть скрипт в более высокоуровневую обёртку, но по сути своей это всё равно стековый не полный по Тьюрингу язык. Более того, в биткоине нет понятия переменных. Каждый скрипт исполняется изолированно и либо приводит к трате монет, либо нет. Нет понятия "вычисли что-то и запомни результат, который пригодится позже в другой транзакции".
Эфириум - это как раз программируемый блокчейн. С Тьюринг-полным языком и переменными, в которые можно записывать значения и считывать когда-нибудь потом. Каждая программа (смарт-контракт) в эфириуме имеет постоянный адрес и API. Контракты могут вызывать друг друга, слать друг другу деньги и так далее - раздолье для конструирования сложных финансовых протоколов, в последний год получивших бурное развитие под зонтичным брендом DeFi (decentralized finance).
Эфириум - эдакий хамелеон в мире блокчейнов. Или лиса, as opposed to биткоин-ёж. Эфириум пытается сделать много всего сразу, не имеет настолько же чёткого видения и не настолько ограничен требованиями децентрализации. В отличие от биткоина, псевдонимный создатель которого давно исчёз из публичного пространства, у эфириума есть известный лидер (Виталик Бутерин). Эфириум более легко относятся к "навязыванию" обратно несовместимых обновлений пользователям (так называемые хард-форки), что для биткоина табу. Тем не менее, в эфириуме программистам проще писать сложные контракты, используя, в числе прочего, отсутствующие в биткоине криптографические примитивы.
Интереснейший фундаментальный вопрос, на который у меня нет ответа, - какая степень программируемости реально для блокчейнов нужна. С одной стороны, какие-то условия траты денег задавать надо. Есть, кстати, криптовалюты без всяких скриптов, где можно только слать деньги на публичный ключ (таковы Grin и Beam на протоколе Mimblewimble). С другой стороны, заниматься числодроблением на блокчейне тоже глупо: зачем реплицировать на всех узлах работу, которая нужна только небольшому подмножеству участников? Истина где-то посередине...
С эфириума начались мои иследования на PhD. Я написал несколько статей, в том числе про статический анализ кода смарт-контрактов и про функциональный язык для финансовых деривативов. С 2018 года мои интересы сместились в сторону биткоина и лайтнинга. Поэтому на защите диссертации эфириум я только бегло упомяну. Кстати, любителям подкастов с блокчейн-бэкграундом выше среднего посоветую недавний выпуск подкаста What Bitcoin Did, в котором максимально компетентные люди обсуждают технические отличия биткоина и эфириума. (Один из них, Патрик, в моей PhD-комиссии.)
Изучайте блокчейны
В этом посте я еле-еле scratched the surface того, что в блокчейнах можно исследовать. Тут вам и криптография, и сетевые протоколы, и теория игр, и финансы, и что только не. Буду рад обсудить в комментариях или в личке нерешённые задачи в блокчейнах и как к ним подступиться.
И приходите на мою защиту: 17 сентября, 18:00 по Москве.
Текст диссертации пока не опубликован, но если хотите почитать и дать фидбек - пишите в личку, пришлю :)
О, привет. Иногда слушаю Базовый Блок (реже, чем хотелось бы). Классно, что есть люди, которые занимаются изучением и популяризацией той важной части сферы, которая про идеи и пользу: распределенный консенсус, индивидуальный суверенитет, распределенные автономные организации. Голос так людей, конечно, менее слышен в потоке сектанстких визгов биткоин-максималистов (которым важно только то, что он первый, а даже развитие монетарных теорий им не интересно) или ищущих только наживу на спекуляциях.
Как тебе, кстати, идея кроссчейн коммуникации: Polkadot и т.п.? По сути это то, что может перенести сетевой эффект и ликвидность от популярных Биткоина и Эфириума к новым и более технически интересных проектам: улучшить одновременно синергию и конкуренцию внутри криптомира.
Приходи в группу http://t.me/distributed, порекламируйся там. Мы стараемся поддерживать сообщество про идеи и технологии. (:
О, так ты и есть ведущий ББ? Круто! Слушаю казуально некоторые лайтовые выпуски.
А расскажи пожалуйста про самое начало: как ты вкатился именно в научное изучение блокчейна? Почему именно в Люксембурге? Как оно там с наукой вообще — все на кафедре понимают что к чему и серьёзное относятся, или?
Писал диплом по этой же теме в Минске.
После защиты лаборант попросил записать вопросы в протокол, которые мне "задавала" комиссия :D
На магистре получше - был (один) вопрос "Это ведь кому-то нужно?"...
Круто, что есть места, где понимают значимость не только графика цены:)
Круто!
А почему злоумышленника зовут Mallory? В квантовой криптографии злоумышленник обычно Ева, от eavesdropper по-видимому. А почему здесь так?
@SergeiTikhomirov подскажите, а L2 решения не создают дополнительные бреши в безопасности? Если для L1 ты опираешься на децентрализованность майнеров/валидаторов, их консенсус. То при доп уровне тебе приходит ещё быть уверенным в нодах нового уровня, их консенсусе, надеяться на их децентрализованность, нет?