Вся эта история с великим магом и его волшебными монетами напоминает какую-то фэнтезийную компьютерную игру. Сталкивались когда-нибудь с такими играми? Когда пара миллионов человек заходят одновременно на игровой сервер - а там целый виртуальный мир - с магами, эльфами, гномами, доспехами, мечами и зельями. И обязательно с деньгами, на которые нужно эти доспехи и зелья покупать.
Так может быть, эти игровые деньги сгодятся нам в качестве тех самых волшебных монет?
Устроены они просто. На сервере записано, сколько денег есть у каждого игрока. Вы не видите, сколько денег у других, но к своим монетам вы легко можете получить доступ - нужно только знать пароль. Ваши деньги в вашем распоряжении везде, где есть интернет, они ничего не весят и мгновенно перемещаются от одного человека к другому. Вы можете передать миллиард монет так же легко, как и одну миллиардную долю одной монеты. Бинго! Именно то, что нам нужно.
Или не совсем?
Что насчет надежности? Все записи хранятся в одном месте - и однажды они могут просто исчезнуть, случись пожар, наводнение, вражеское нашествие или простая человеческая ошибка. Даже если они не исчезнут навсегда, а просто пьяный тракторист порвет кабель и сервер окажется отключенным от сети на пару дней, легче от этого не становится.
А владельцы сервера - можете ли вы им доверять? Что если они решат подправить записи и добавить себе пару миллиардов монет из воздуха? Или забрать их у кого-то, кто им не нравится. Вы ведь даже не сможете обнаружить обман, не то что предотвратить его.
В общем, зависеть от центрального сервера - плохая идея. Надо от него избавляться. Давайте хранить нашу бухгалтерскую книгу (это ведь бухгалтерская книга, правда ведь?) сразу в нескольких местах. Пусть каждый желающий сможет скачать себе самую свежую ее копию. А потом, когда кто-то захочет переместить свои деньги, мы внесем изменения сразу во все копии - каждый в свою.
И что, теперь любой сможет заглянуть в эту книгу и узнать, сколько у соседа денег? Конечно, нет. В книге не будет имен, только номера, как номера ячеек в камере хранения. Вы знаете, в какой ячейке (или в каких ячейках) хранятся ваши деньги, а полиция не знает. Когда понадобится, вы придете на вокзал и откроете свою ячейку своим ключом. В нашем случае ключом будет ваша электронная подпись.
Теперь, что бы ни произошло, у нас всегда найдется где-нибудь копия этой бухгалтерской книги. А если кто-то попытается незаметно подправить свою копию, мы просто сравним ее с другими и сразу обнаружим подлог.
Или нет?
Если у вас в руках две книги - одна настоящая, а другая поддельная - как вы определите, какой из них верить? А если счета не подделаны, а просто в книгу забыли внести пару записей? Или внесли их не в том порядке? Если у вас на счету 5 монет, а вы решили отправить 4 монеты Алисе и 3 монеты - Бобу, тогда от порядка записей зависит, кто получит деньги, а кому денег не хватит.
В математике эта задача известна как “задача византийских генералов”. В ночь перед битвой генералам нужно договориться, атаковать или отступать. И никто из них не знает, кто из генералов честно служит Родине, а кто - предатель.
Нашему великому магу удалось решить эту задачу.