Темный Лорд, Эллиптические кривые и Ухмылка

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

«Это вообще не моя идея. Это Темный Лорд придумал!» 

-Эндрю Поэлстра, Scaling Bitcoin 2016

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

А ты когда-нибудь спрашивал себя «почему биткойн такой медленный и такой плохомасштабируемый». Ну все это знают как то, что на Луне жизни нет…ну, по крайней мере, до очередного криптопузыря, но все же.. чё он такой тормозной?  ну прям как черепаха или как соперники Усейна Болта!

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

Ну так что, есть идеи??? Генерация новых блоков, PoW и пр… сейчас мы с тобой увидим истинную причину всех проблем!

Что там внутри

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

Ок, бро! На самом деле, внутри каждой есть много всего! В частности, там есть входы и выходы.

Входы — это ни что иное, как ссылка на выход другой транзакции. Т.е. бывает так, что Вася отправил тебе 5 биткойнов, Оля 7, а Катя 0,00001 (ну, криптопейджинг или как там этот РЕН-ТВ заговор называется). Т.е. наша транзакция получит 3 входа или ссылки на выходы транзакций Васи, Оли, Кати. Так вот, суммируя значения этих ссылок, мы можем поместить их на выход уже своей транзакции.

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

Дунул, ну тогда смотри! Допустим, есть у тебя один вход на 50 биткойнов. Что произойдёт, если ты хочешь отправить 25? Правильно. Создается 2 выхода. Один отправляет 25 биткойнов соседу Войцеху, а второй отправляет 24,999 биткойнов обратно тебе. А 0,001 ты отсыпал дяде майнеру за хорошую работу! Вот и вся магия. Т.е., перед созданием каждого блока имеется список из не истраченных выходов, на которые потом будут ссылаться новые входы. Эти выходы называются не потраченными или UTXO. И каждый такой выход имеет уникальный идентификатор, т.е. подпись, которую необходимо проверить. Соответственно, чтобы быть уверенным в текущем состоянии сети тебе нужно проверить АБСОЛЮТНО ВСЕ входы и выходы и их историю от начала и до конца. Нехилый такой объем избыточной информации, согласись. А из необходимости проверки истории вытекает другая проблема.

Приватность

Ну вот сидишь ты, такой простой инвестор, и захотелось тебе…ну, скажем, купить лайткойна за биток…и идешь ты такой в наш самый любимый трактир localbitcoins, договариваешься там с местным ростовщиком купить за 1 биткойн 10 лайтконов (ну, возможно, у тебя приступ олигофрении и ты не знаешь текущего курса). И вот ты уже собираешься отправить ему биткойнтранзакцию, сообщив адрес, с которого придут твои битки, а он так неожиданно:

-Эээ, парнише, стопе. Монеты ты-то СилкРоудом и МтГоксом меченные. Мне такого добра не надо!

А ты такой:

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

И что же нам с этим всем делать? — спросишь ты своего Криптогуру.

А варианты есть у самого?

Молодцы, молодцы! Садитесь! Пятёрка, мои мамкины инвесторы!

Я специально опустил все подробности сложной криптографии, генерации подписей и пр., оставив всё это тебе на сладкое, мой пирожок. Отмечу только что zkSNARKS и Кольцевые подписи — это куча дополнительных сложных вычислений, а лайтнинг с шардингом прекрасны, но, также, требуют очень много времени на реализацию. Но что, если я скажу, что решение уже есть, причем квадратное уравнение масштабируемости и приватности оказалось с нулевым дискриминантом и требует единственного решения. И о нём я сейчас тебе расскажу!

MimbleWhimble

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

Эндрю Поэлстра до сих пор работает в Blockstream — конторой, главным поставщиком мозгов для Биткйона. Блокчейном и биткойном увлекся ещё в уже таком далеком 2011м. Как умный малый из тех самых «тру умных малых» Поэлстра и его крутые соратники, такие как Брайн Бишоп и Грегори Максвелл, который я уверен за свои криптографичесие инновации уже надумал на пару Филдсовских и Абелевских премий, днями и ночами посиживали в IRC канале #bitcoin-wizards. Ведя свои разработки, они обсуждали там то да сё, пока однажды ночью второго августа 2016го в чат не залогинился парень под ником majorplayer и не кинул текст со сслыкой на текстовый документ и вышел, оставшись полностью анонимным. С утра следующего дня жизнь Эндрю уже никогда не станет прежней.

Документ описывал ни что иное, как проект совершенно нового подхода к блокчейну биткойна, решая одновременно проблемы масштабируемости и приватности в сети. На следующий день, Энди Поэлестра и Брайан Бишоп исследовали загадочный документ и  пришли к мнению, что это гениально. Ну, по крайней мере, автором протокола значился Том Элвис Жедусор (Tom Elvis Jedusor), писал он на дикой смеси французского с английским, что заставило, впоследствии, Поэлстру переписать оригинальный вайтпэйпер. Весь символизм в том, что Том Элвис Жедусор имя того, кого не произносят во французских адаптациях серии книг о Гарри Поттере.

А MimbleWhimble — заклинание косноязычия в великолепных книгах Джоан Роулинг. Ну ты понял, приватность и косноязычие, да?

Так что же такого предлагал тёмный Лорд, о чём Поэлстра докладывал через 2 месяца на конференции «Scaling Bitcoin» в Милане?

  1. Конфиденциальные транзакции
  2. CoinJoin и новая система доверия
  3. Смерть истории транзакций

Все это одним ударом убивало проблемы масштабируемости и приватности.

Конфиденциальные транзакции

МимблУимбл использует совершенно новый подход к перемещению средств и первое, что предлагает протокол — сокрытие перемещаемых сумм с помощью так называемых «ослепляющих факторов». Данную штуку придумал Грегори Максвелл(тот самый коллега Поэлестры) Опуская всё сложную криптографию, можно сказать, что «ослепляющий фактор» — это некоторое случайное большое число, которые знают только стороны — участники транзакции. Например, Вася хочет переслать Коле 12 биткойнов с одного кошелька и 5 и 7 на два других кошелька. Коля генерирует ослепляющий фактор, ну скажем, 13 и отправляет его Васе. Василий, а он не дурак, берет и «ослепляет» значения транзакций. Получаем 5*13+7*13=12*13. Уравнение баланса всё ещё верно. Значит, Коля получил от Васи столько битка, сколько хотел, при этом ещё никто кроме них не узнал, сколько Вася отправил Коле. При этом узлу, подтверждающему валидность транзакции, не нужно знать конечные адреса, не нужно знать значения балансов. Он просто поработает с ослепленными значениями, а ещё точнее, вычтет шифрованные «ослепляющим фактором» результаты суммирования входов из результатов выходов. И если он получит в результате 0 — это и будет означать, что во время транзакции новых монет не было создано, а значит и балансы обеих сторон валидны. Получается, что тебе не нужен твой приватный ключ для осуществления транзакций, а значит не нужен и твой публичный ключ. Ты понял, что это значит?…..НУ ииии….? Ладно, не буду мучать!

Сети MimblWhimble не нужны адреса, только лишь «ослепляющий фактор» и доказательство его принадлежности конкретному участнику сети! А если адреса не нужны, то и никто не узнает от кого кому перешли средства! П — полная приватность по умолчанию!

Вот такой вот фокус, мой юный Гарри! Ну а право на ослепляющий фактор подтверждается генерацией подписей на основе так называемых «dummy putput». По сути, тоже случайные числа, которые в процессе криптографических преобразований выдают цифровые подписи для выходов и входов, указывая их принадлежность.

CoinJoin

Изначально, технология CoinJoin была предложена Грегори Максвеллом (да, лучшее идеи этого парня некий рандомный «тёмный лорд» собрал в одном месте). Она предлагает брать множества Вась и Коль, объединяя все входы и все выходы в одну транзакцию. Такое перемешивание однозначно помешает отследить кто, кому и сколько передавал.

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

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

Смерть истории транзакций

Оу, вижу я тебя сильно загрузил, но поверь, главный взрыв мозгов ещё впереди. Как ты помнишь, в сети биткойна достаточно просто отследить всю историю монет, в то время как в Mimblewimble это просто невозможно. После создания на определенном блоке, монета просто становится одной из множества монет всех неистраченных выходов на текущем этапе. А значит, для валидации всего блокчейна больше не нужно проверять всю историю, ведь никакой истории просто не существует. Значит, новым узлам сети не нужно знать всю предыдущую историю транзакций в сети, что подтвердить её валидность. Также больше не стоит верифицировать все входы и выходы, которые уже итак были истрачены.  Всё, что им нужно знать — список на текущий момент неистраченных выходов и их валидность, что умещается в заголовках блоков и списке мультисигов тех самых «dummy output».

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

Grin

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

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

Во-вторых, так как в сети нет фактических адресов и нет скриптов, то, фактически, для передачи ценности оба участника обмена должны находиться в сети онлайн одновременно, что, как бы, не очень удобно. Разные часовые пояса, проблемы с интернетом, дочь просится на горшок прямо в самый важный момент (Эт личное, не обращай внимания, будут свои дети — поймешь! из книги «типичные отмазки молодого отца»).

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

21 октября в канале #bitcoin-wizards появился ещё один человек, под ником igno_poverell

Игнотус Поверелл — это также герой Гарри Поттера, а именно создатель плаща-невидимки. Ну ты понял, приватность, плащ-невидимка, Гарри Поттер. С течением времени количество героев только росло. А проект Grin уже прошел 3 версии тестнета, а его гитхаб и даже сайт можно легко найти и прочитать все то, о чём я тебе здесь рассказал. Этот проект — первая естественная имплементация протокола MimbleWimble. И она прекрасна! Здесь есть всё, за что мы полюбили с тобой крипту:

  • Свои анонимные Сатоши Том и Игнотус;
  • Никаких ICO и премайна
  • Ну ты просто прочитай этот стейтмент и влюбись

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

Ну а также, новый алгоритм консенсуса Cuckoo Cycle (как-нибудь тоже разберём) и шифрование, основанное на свойствах эллиптических кривых. Евреи из Beam и в подметки этому не годятся. Ребята собрали за два раунда финансирования около 75к$ пожертвований. Можешь и ты влить свою копеечку, монет никаких ты, естественно, не получишь, но зато сможешь увековечить своё имя на специальной страничке проекта.

Эллиптические кривые

Ну и чтобы окончательно добить тебя, поговорим об эллиптических кривых и их свойствах. Эллиптическая кривая — это не особая кубическая кривая на проективной плоскости, в простейшем случае задаваемая кубическим уравнением Веерштрассе:  y^2=x^3+ax+b,

Да ладно, я ж не садист какой. Всё, чё нужно о криптографии на эллиптических кривых и их внедрении, прекрасно и простым языком описано тут. А всё, что нужно знать тебе — если мы возьмём достаточно большое случайное число (приватный ключ) и проведем с ним одну из алгебраических операций над множеством точек эллиптической кривой, то мы получим публичный ключ. Почему публичный? Потому что мы можем открыто делиться им друг с другом не боясь, что стырим друг у друга последние сатошики. Ведь, чтобы из публичного ключа (твоего адреса в сети) получить приватный, нужно решить обратную задачу с использованием точек эллиптической кривой, что на эту секунду, фактически, невозможно. По крайней мере, пока квантовые компьютеры не станут реальностью, нам бояться нечего. На этом построена, в том числе, вся криптография проекта grin: шифрование тех самых blinding factors и мультисигов в заголовках. Новые технологии, х*ле:)

Выводы

Я, конечно, далеко не программист, да и в блокчейне тот ещё Ламер. Кстати, если вдруг заметил технические неточности или ошибки, обязательно сообщи — поправим вместе. Но, по-моему, mimblewimble — это вайтпейпер Сатоши версии 2.0. А Grin — это быстрый приватный койн светлого будущего, за обладание которым я бы отдал многое (размышляю над сдачей блондинки в рабство команде проекта). Ну а пока мы следим за сайтом и гитхабом и ждём новых анонсов. Видимо, они уже не за горами.

Из глубин криптомира,

@CryptoLamer

3 комментария

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

девять + четыре =

Back to Top