Friday, August 5, 2016

О биткоине очень просто



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


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

Всего два технических аспекта

Как работает цифровая подпись

Каждый человек в цифровом мире может сгенерировать себе «цифровую фамилию» и «цифровую подпись» (открытый и закрытый ключ соответственно). «Фамилию» он всем показывает, а вот подпись хранит в тайне. Благодаря этому:
1. Можно писать сообщения, подписывать их и публиковать в Интернете.
2. Все кругом видят, что сообщение написал именно тот самый человек с определенной «фамилией» (она угадывается по «подписи»).
3. Никто не может подделать такое сообщение.
4. Один человек может сгенерировать много разных пар фамилий и подписей — этаких сценических псевдонимов — для различных целей.

Как работает свертка (хеширование)

Например, я написал сообщение «привет» и хочу передать его своему другу. Но мне надо узнать, дошло ли оно до адресата в неизменном виде. Как мне это сделать? Простейший вариант — попросить передать сообщение обратно и сравнить, не изменилось ли оно. Многие так поступают, когда диктуют по телефону какие-нибудь номера или адреса электронной почты.
Если что-то пойдет не так на обратном пути, мы не сможем понять, в порядке ли первоначальное сообщение. К тому же оно может быть длинным: представьте, что сообщение содержит видео в HD, не передавать же все эти гигабайты обратно? Поэтому поступают иначе: для подтверждения того, что сообщение дошло без искажений, используют так называемую свертку, она же «хеш».
Свернем слово «привет» в одно число — например, так:
1. Каждой букве выдадим порядковый номер (а=1… я=33), получится: 17 18 10 3 6 20.
2. Перемножим все числа и получим 1 101 600. Это и есть простейшая свертка, или хеш.
3. Теперь я после передачи основного сообщения просто передаю другу еще и свертку — чтобы он убедился, что все сходится.
4. А вот если сообщение по дороге поменялось и превратилось, например, в «превед», то свертка будет другая: 17*18*6*10*6*5 = 550 800. Друг ждет 1 101 600, а получил 550 800 — тогда он пожалуется, и мы оба поймем: что-то пошло не так.
Обратите внимание: по пути свертку тоже можно сломать или подменить. Свертка не защищает, в отличие от подписи, — она лишь упрощает и ускоряет проверку целостности.
Еще один интересный факт: если поменять буквы местами, то в нашем примере свертка не изменится, и это провал. В реальной жизни используют гораздо более сложное «перемножение» букв, так что результат меняется от любых изменений сообщения. Более того, подобрать другое сообщение с такой же сверткой становится либо нереально, либо очень долго. В этих случаях свертку называют «криптостойкой».
Например, при использовании популярного алгоритма SHA-1, созданного специально для изготовления сверток (уже недостаточно криптостойкого, но не будем о грустном), хеш слова «привет» будет выглядеть так:
e24505f94db2b5df4c7c2596b0788e720e073021
А хеш слова «превед» — уже вот так:
229d0ee5aabf6af982cdc03a89a56160f1de0e4a
Ничего общего, правда? Так и задумано.

Наша цель — виртуальные деньги

Ну все, самое сложное позади, осталось только на основе этих технологий сделать классно.
Представьте, у нас в школьном классе сидят 30 детей, и им нужны свои игрушечные деньги. Но только чтобы виртуальные (просто числа на бумажке или в Интернете).
Для этого они на классной доске пишут, у кого сколько денег изначально, и дописывают снизу, кто кому сколько денег передал. Пишут своим почерком и ставят подпись, чтобы никто не подправил ничего на перемене. Уже в таком виде система отлично работает — но только до тех пор, пока не придет строгий учитель и не сотрет все с доски со словами: «Хочу контролировать финансовые потоки, потому что у меня есть власть. И чтобы наркотики друг у друга не покупали».
Тогда дети начинают вести финансовый журнал у себя, каждый держит под партой свою тетрадку и постоянно дописывает в нее все операции по обмену деньгами — транзакции. Но так как кричать во время урока нельзя, дети тихо передают друг другу записки (это Интернет). Вот так работает «криптовалюта» в первом приближении.

Проблемы

Ворох транзакций объединяем в странички

Теперь по классу ходит 30 записок с транзакциями, и непонятно, переписал ученик их к себе в тетрадку или нет. Какие записки есть уже у всех и их можно выкинуть? Как понять, есть у Васи 50 монеток для оплаты или он их уже кому-то до этого передал, просто Петя пока не знает об этом?
Решение есть: дети будут обмениваться не только короткими записками со строчками отдельных транзакций, а сразу целыми страницами. Кто-то один накопил много строчек, аккуратно записал их все, поставил номер страницы, посчитал свертку от предыдущей страницы и тоже записал. И разослал по классу новую страничку.
Петя, получив страничку, проверяет, что в ней все верно: все строчки написаны правильным почерком, номер страницы новый, свертка предыдущей страницы совпадает с указанной на новой странице. И еще — у каждого автора строчки действительно есть столько денег, сколько он хочет передать. Для этого надо перечитать весь журнал и пересчитать все деньги — звучит муторно, но если поручить это компьютеру, то все работает быстро и без проблем.
В общем, если все сходится, то Петя аккуратно переписывает новую страничку в свой журнал и транзакции признает совершенными. Отдельные записки-транзакции, уже внесенные на правильную страничку, после этого можно дальше не передавать, а просто выкинуть — а дальше отправить уже оформленную страницу.
Если же что-то не так — у кого-то недостаточно денег, или номер страницы странный, или свертка не сходится, — то Петя со словами: «Какая-то лажа» выкидывает всю подозрительную страницу, и жизнь продолжается.
Совокупность пронумерованных страниц (блоков) — это и есть блокчейн. Все просто, никакой магии.

Графомания

Если все пустить на самотек, то каждый ученик начнет писать свою версию страницы номер 123. В итоге по классу будет гулять 30 версий, но как понять, какая правильная? Для этого надо определить порядок: страница оформляется лишь раз в 10 минут, чтобы ее можно было за это время распространить по всем участникам, причем автор выбирается случайно.
В биткоине этого добились следующим образом. Надо попросить всех учеников заняться полезным делом — решать случайно выбранные задачки из учебника по математике. Кто первый решит свою задачку, тот собирает все записки, которые к нему уже пришли, и начинает оформлять страничку. Пока кто-то еще дорешает свою задачку, страничка отличника уже разойдется по классу, признается всеми, и все приступят к решению новой задачки, и так далее.
Не страшно, если странички будет оформлять почти всегда один отличник. Лишь бы кто-то один и с нормальной скоростью. Когда в классе слишком много учеников и задачки начинают решаться слишком быстро, можно перейти на следующую главу учебника.
А вот если всегда-всегда только отличник Миша будет оформлять странички, то он при желании может начать отбрасывать все попытки Васи передать кому-то деньги. На практике же для этого надо быть невероятно крутым отличником — иметь вычислительную мощность больше половины суммарной мощности всех участников системы биткоин (а это миллионы компьютеров по всему миру). Так что если Миша способен на такое (то есть инвестировал в вычислительные мощности настолько много), то для него мелкое жульничество уже не имеет смысла.
И еще одна особенность. Отличник записывает на страничку еще и решение задачи (да и задачка на самом деле не случайная, а связанная с самой страничкой). Это нужно, чтобы через год нельзя было подделать все странички со 123-й по текущую, — для такого подлога пришлось бы быстро-быстро решить очень много задачек.

Выгода

Таким образом, в нашем журнале почти равномерно появляются новые правильные странички.
1. И все это не зависит от количества участников.
2. Не зависит от какого-то центра. Нельзя прикрыть, нельзя подделать — каждый участник может все перепроверить.
3. Анонимно при условии, что по «цифровой фамилии» нельзя вычислить реальную. Условный Петя всегда может заявить, что кошелек с такой-то фамилией принадлежит ему, — если у него действительно есть подпись, то он может с него платить. Связать же кошелек с Петей в реальном мире, если Петя этого не захочет, довольно сложно.
4. Без комиссии. При этом вы можете немного заплатить отличнику, чтобы он записал вашу транзакцию в страничку побыстрее, без очереди.
5. Нельзя переписать историю, то есть вычеркнуть передачу денег от Васи Пете невозможно. Ведь каждая страница ссылается на предыдущую. Если изменить одну (допустим, ее даже примут все другие участники), надо будет переписывать все последующие страницы, а для этого решать задачки, очень много задачек. А участники в случае возникновения каких-либо сомнений доверяют самой длинной цепочке страниц.
Если я подкупил больше половины учеников, желательно отличников, я могу отсадить их в отдельный класс и прямо сейчас начать писать альтернативную историю, в которой я свои деньги якобы никому не передал. А потом вернуться в общий класс и предъявить более длинный журнал. Это суть атаки 51% — а про то, почему это трудно осуществить на практике, мы уже поговорили в примере с отличником Мишей.

Откуда берутся деньги

Изначально биткоин-монетки можно было распределить между счастливчиками на самой первой страничке. Но это было бы совсем нечестно и бессмысленно. Для вовлечения большего числа участников договорились раздавать деньги постепенно: тот, кто после решения задачки оформляет новую страницу, первой строчкой пишет: «Зачислить мне 50 монет из ниоткуда».
Причем все заранее договорились, что страничка правильная, только если именно 50, и что через пару лет будет уже ровно по 25, и далее сумма сокращается. В итоге количество денег у населения растет, но в целом оно ограничено — всего может существовать не более 21 млн биткоинов (на сегодняшний день «выпущено» около 15 млн).
Благодаря этому появилось много желающих подключиться к проекту пораньше и получить немного денег по принципу «кто первый встал — того и тапки». Потому что потом раздавать их будут в меньших объемах и большему числу желающих. А еще все учатся побыстрее решать те самые задачки.
И вот много людей уже имеют много криптовалюты. Теперь мы объявляем, что криптовалюта — это как акции компании «Деньги будущего», и начинаем торговать ими на бирже за настоящие доллары. Устанавливается рыночная цена. Она растет, потому что желающих пощупать деньги будущего много, а на халяву раздают по 25 монеток раз в 10 минут кому-то одному, а еще надо решать задачки — в общем, многим проще купить.
А потом и магазины поняли, что раз монетки можно обменять на бирже на реальные деньги, то к оплате тоже можно принимать монетки. Тем более что они растут в цене, как МММ.

Критика

А теперь, когда читатель во всем разобрался, немного предвзятого личного мнения.
1. Биткоины реально инновационны. Таинственный автор (или целая ложа авторов), по сути, с первого раза все сделал классно, и это даже до сих пор работает.
2. Биткоины очень полезны для нелегальщины. Покупать оружие, наркотики, вымогать, давать взятки очень удобно, потому что нельзя отследить и прикрыть. В офлайне можно просто расплатиться наличными, а в онлайне традиционные виртуальные деньги контролируются и не являются анонимными.
3. Для легальной же деятельности распределенность и анонимность, в общем-то, бесполезны и даже вредны. Уже давно есть Visa с MasterCard, банковские переводы и PayPal/WebMoney/»Яндекс.Деньги». Да, у них есть недостатки, но это плата за другие фичи:
а) комиссию мы платим (особенно при трансграничных платежах), так за это мы и сервис получаем;
б) переводы идут долго, зато проверяются, и их можно отозвать.
Да, в биткоин обычно все дешевле и быстрее, но за это мы жжем адское количество электричества, миллионы раз дублируем информацию. Если бы мы все это отдали условному централизованному WebMoney, получилось бы явно не хуже.
4. За что биткоины особенно любят — они растут в цене. Это такая пирамида, которая будет раздувать пузыри снова и снова. Человечество уже не сможет потерять к ней интерес окончательно, а чем больше заинтересованных, тем больше спрос. Поэтому многие, кто прикупил монеток, начинают рекламировать «деньги будущего», чтобы подогревать интерес и цену. Спрос явно обгоняет предложение монеток, а предложение падает со временем.
В нормальной экономике объем денег регулируется центробанком, чтобы он соответствовал объему товаров и услуг и чуть-чуть удешевлял их со временем. В случае с биткоинами все ненормально — они постоянно и быстро растут в цене, а значит, невыгодно их тратить на товары, выгодно тратить рубли и доллары, а биткоины оставить на потом (вероятно, даже навсегда).
5. За что биткоины не любят центробанки:
а) это пирамида. Если в какой-то стране все бросятся скупать монетки, а потом пузырь лопнет (это происходит каждые пару лет), начнется кризис. Большинство стран запрещают пирамиды;
б) потому что это наркотики, уход от налогов, непонятные доходы, терроризм — никакого контроля. А значит, надо запретить и пользоваться традиционными инструментами, благо они есть.
6. Насчет применения блокчейна не для денег. В подавляющем большинстве легальных проектов с использованием блокчейна все то же самое можно сделать централизованно с использованием одного или нескольких центров, что в итоге выйдет существенно дешевле по компьютерным ресурсам и потреблению электричества. В примере выше с классной доской как раз показано, насколько все проще, если блокчейн писать сразу на доске, а не в тетрадках под партой. Но это при условии, что доска не саботирует работу.
Ну вот и все, теперь вы понимаете в биткоинах и блокчейне гораздо больше, чем почти все население планеты. Классное ощущение, правда же?

No comments:

Post a Comment