bannerbannerbanner
Криптвоюматика 4.1. Стань сыном маминой подруги

Алексей Марков
Криптвоюматика 4.1. Стань сыном маминой подруги

Глава 1
Теория: шо за блохчейн такой

1.1. Что нового и что особенного в этом вашем блокчейне

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

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

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

Как мы понимаем, что курс рубля к доллару рухнул? Особенно, если телевизор талдычит об обратном? Вроде понятно: есть обменники, есть публичные курсы, которые всем видны. Или возьмём что-нибудь более интригующее: например, депутат обосрался на Красной площади. Если вокруг него было несколько тысяч человек, никакой телевизор не заставит их думать, что депутата там не было. Все это видели, а если и не поверили своим глазам – всегда могут друг у друга переспросить и удостовериться.

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

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

Если говорить ещё более формально, принципы работы такие:

1. Блокчейн – это распределённая база данных. Правила доступа, хранения и добавления новой информации в блокчейн устанавливаются участниками и полностью открыты.

2. Всё, что происходит в децентрализованном блокчейне, происходит между его участниками и непосредственно друг с другом.

3. Степень раскрытия личности участника устанавливается правилами сети. В 98 % блокчейнов (например, в блокчейне биткоина) у вас есть только адрес[8], без имени и фамилии. Можно этот адрес раскрыть соседям, а можно никому не показывать. Все сделки проходят между этими адресами.

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

Получается, что блокчейн – это, прежде всего, новый формат доверия, для которого не нужны посредники и авторитеты.

1.2. Зачем оно вообще надо

Итак, блокчейн – это криптографически защищённый распределённый реестр. Он оберегает нас от того, чтоб кто-то незаметно не продублировал свою запись о наличии чего-либо, при этом не надо доверять никакому специальному регулятору – все и так верят всем. Поэтому и записать в блокчейн можно всё, что вообще можно записать списком. Логичное приложение – регистрировать собственность на землю, наличие диплома[9] или рецепта[10] на лекарство. Некоторые из этих идей – гениальные (без шуток). Удобно же зарегистрировать сделку по квартире не за 10 дней, а за 10 минут; вроде как в Грузии оно уже так и работает. Или в аптеке проверить наличие у человека рецепта, ткнув в базу, – при этом человек точно знает, что никакой регулятор не сможет у него этот рецепт отобрать и бумажку с ним он не потеряет. А фармацевт точно знает, что рецепт не поддельный – он видит, кто его выдал. Работодатель может автоматически проверить резюме на наличие какого-то сертификата или диплома, и будет уверен, что они настоящие.

Или представьте, что вы покупаете песню непосредственно у её создателя. Посредников нет, комиссия минимальна, он сразу получает ваши деньги, а вы автоматически получаете права на неё. Все всегда могут проверить, что такой-то адрес у такого-то музыканта эту песню купил и может её слушать. Или смотреть фильм. Или читать книгу. Не нужен никакой Михалков со своим РАО, чудо-то какое! Все и так без него знают, что кому принадлежит и сколько кому причитается. Более того, не только сколько причитается, а оно уже и перечислено и уплочено, и все довольны – композитор, автор текста, продюсер. Кроме издателей, которые стали не нужны.

Правительства и регуляторы могут снять с себя функции регистрации и проверки чего бы то ни было. При этом уровень анонимности можно менять по консенсусу сторон. Все сделки проходят очень быстро и нет никакой системы Visa или MasterCard: марокканец покупает фильм у бразильца напрямую, минуя таможню и банки! И отобрать его тоже никто не может. Просто сказка.

Внезапно для удостоверения документов не требуется нотариус, да и вообще какие-либо государственные учреждения. Голосовать можно на дому, и всегда можно проверить, кому достался твой голос – он зачислится «на счёт» твоему кандидату, и директор какой-то дагестанской школы не сможет украсть голос простого пастуха после подсчёта.

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

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

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

Хотя некоторые идеи криптоноваторов – абсолютно бредовые (без шуток). Нужен ли блокчейн, чтобы завести какую-то новую энциклопедию[11] на блокчейне или читать платные новости, которые – ничего себе! – нельзя исправить задним числом[12]? Вы часто перечитываете прошлогодние новости? Из-за бешеного притока инвестиций в эту отрасль люди пробуют совершенно невменяемые идеи на предмет сбора бабла с инвесторов.

 

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

1.3. Как это работает

Мы изучили херову тучу объяснений того, как работает блокчейн. Проблемы две: либо эксперт держит читателей за идиотов и объясняет это так примитивно, что суть процесса остаётся за кадром, либо текст рассчитан на айтишника с деревьями Меркла и подписями Шнорра, и простой человек его уже не воспринимает. Самое лучшее объяснение встретилось нам в блоге Лаборатории Касперского[13]. Его мы и взяли за основу, но постарались сделать ещё понятней.

Сначала изучим несколько основных понятий, первое из которых – цифровая подпись. Зачем нужна обычная подпись? Она удостоверяет того, кто подписал документ. Цифровая в этом плане даже лучше – она делает то же самое, только её нельзя (точнее, невероятно трудно) подделать. То есть автор документа определяется однозначно, и подписать его мог только он. При этом один человек (или фирма) может сгенерировать несколько вполне законных пар имя-подпись – для разных целей.

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

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

Простейший пример такой антиподделочной проверки находится в бланке ОСАГО об аварии. Там внизу нужно отметить, сколько квадратиков заполнены галочками (типа «я выезжал со стоянки», «я стоял на светофоре»). Это чтоб кто-то после получения подписанной копии не натыкал новых, нужных ему вариантов происшествия. Но криптографическая проверка, или, иначе говоря, «хэш», гораздо круче. В нашем (примитивном) варианте при перестановке букв в сообщении контрольная сумма не изменится. А в правильно сделанном хэше при малейшем изменении сразу понятно: это не оригинал. При этом сам хэш занимает одну строчку даже для очень больших файлов или документов.

У хэша есть одно очевидное свойство: он односторонний. То есть по хэшу невозможно подобрать изначальное сообщение (только перебором всех вариантов – так и работает майнинг; но об этом позже). Да, у некоторых типов хэшей была такая проблема, что у разных сообщений мог получиться одинаковый хэш, но сейчас это либо уже решено, либо не играет особой роли. Главное – вы поняли, что эта функция работает только в одну сторону.

Теперь к самому блокчейну. Как использовать подписи и хэши? Представим себе одноклассников, которые хотят завести виртуальную валюту. Они ведут запись на школьной доске: сколько у кого было монет и кто кому сколько отправил, ставят подписи для подтверждения сделок, и все эту доску видят. Потом приходит учитель и говорит: «Вы тут совсем распоясались, поди уже и клей друг другу толкаете втихаря». Стирает все записи мокрой тряпкой и насаждает веру в светлое будущее.

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

Как понять, хватает ли у Васи денег на передачу Маше? Надо перечитать весь журнал, и станет понятно: вот 10 монет Вася получил от Пети на прошлой неделе, а 40 ему вчера перечислил Олег. После этого сделок не было, поэтому вписываем в журнал новую строчку: «забрать 50 монет у Васи и добавить 50 монет Маше», заверяем Васиной подписью и дописываем хэш. Да, проверять всё – это долго, но у каждого же есть компьютер! Он сразу поймёт, если подпись не та или история неправильная. Испорченную сделку он в журнал записывать не станет, а просто выкинет как фальшивую.

Совокупность сделок на одной странице назовём блоком, допишем в конец хэш всего блока, чтоб не проверять страницу заново (а сверить только хэш), и начнём новую страницу-блок. Цепочка таких блоков – это и есть блокчейн.

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

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

Заглянем немного глубже. Чтобы получить «красивый» хэш, ребята добавляют в заголовок каждого блока какое-то случайное число и только потом подсчитывают контрольную сумму. Число это называется nonce[14]. Из-за того, что хэширование выдаёт фактически случайную цифру из блока данных, изменив всего лишь одну цифру (или букву) в блоке, мы получим совершенно новый его хэш. Целью майнинга и является подбор этого (случайного) числа таким образом, чтобы хэш блока начинался с определённого количества нулей. Другими словами, хэш должен быть меньше нужного нам параметра target (цель), который и определяет сложность соревновательного процесса. Ведь чем меньше эта цель, тем меньше должно быть искомое число – и тем больше у него нулей впереди. Таким образом, сложность регулируется очень легко.

Все желающие решать эту задачу называются майнерами, а решение записывается на страницу вместе со всеми операциями. Это делается для того, чтобы в будущем какой-нибудь хитроумный китаец не пришёл и не сказал: «Ребята, вот на самом деле правильный журнал, у меня всё подсчитано», – тогда ему придётся предъявить решения всех подделанных задачек сразу, а это нереально. Хотя будем честны: если у него под контролем большинство компьютеров в сети – то возможно.

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

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

Разберём поподробнее.

8Например, вот такой – 1EkaseA9wJmPxFLaBtSfuqAPRaaHRLStZB
9http://news.mit.edu/2017/mit-debuts-secure-digital-diploma-using-bitcoin-blockchain-technology-1017
10http://www.healthcareitnews.com/news/next-big-thing- pharmacy-supply-chain-blockchain
11https://www.wired.com/story/everipedia-blockchain/
12http://www.niemanlab.org/2017/10/
13https://www.kaspersky.ru/blog/bitcoin-easy-explanation/12668/
14Nonce – Number, that can only be used once, число, которое нельзя называть. Ну то есть которое можно использовать только один раз.
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15 
Рейтинг@Mail.ru