Хэширование
Бердинских Марина, Елизарова Елена_МПМ-16
Blockchain
Хэширование — преобразование массива входных
данных произвольной длины в (выходную) битовую строку
фиксированной длины, выполняемое определённым
алгоритмом. Функция, реализующая алгоритм
и выполняющая преобразование, называется
«хеш-функцией»
или «функцией
свёртки». Исходные данные называются
входным массивом, «ключом» или «сообщением».
Результат преобразования (выходные данные)
называется «хешем»,
«хеш-кодом»,
«хеш-суммой»,
«сводкой сообщения». Например, мы можем
подать на вход 128-битной хеш-функции роман
Льва Толстого в шестнадцатиричном виде
и число 1. В результате на выходе мы в обоих
случаях получим набор псевдослучайных
шестнадцатиричных цифр вида: "
В настоящее время практически ни одно приложение криптографии не обходится без использования хэширования.
Хэш-функции – это функции, предназначенные для «сжатия» произвольного сообщения или набора данных, записанных, как правило, в двоичном алфавите, в некоторую битовую комбинацию фиксированной длины, называемую сверткой. Хэш-функции имеют разнообразные применения при проведении статистических экспериментов, при тестировании логических устройств, при построении алгоритмов быстрого поиска и проверки целостности записей в базах данных. Основным требованием к хэш-функциям является равномерность распределения их значений при случайном выборе значений аргумента.
Криптографической
хеш-функцией называется всякая хеш-функция,
являющаяся криптостойкой, то есть удовлетворяющая
ряду требований специфичных для криптографических
приложений. В криптографии хэш-функции
применяются для решения следующих задач:
— построения систем контроля
целостности данных при их передаче или
хранении,
— аутентификация источника
данных.
Для того, чтобы хеш-функция H считалась криптографически стойкой, она должна удовлетворять трём основным требованиям, на которых основано большинство применений хеш-функций в криптографии:
- Необратимость или стойкость к восстановлению прообраза: для заданного значения хеш-функции m не должен быть вычислен блок данных Х, для которого H(X)=m
- Стойкость к коллизиям первого рода или восстановлению вторых прообразов: для заданного сообщения M должно быть вычислительно невозможно подобрать другое сообщение N, для которого
- Стойкость к коллизиям второго рода: должно быть вычислительно невозможно подобрать пару сообщений имеющих одинаковый хеш.
Почему нужна blockchain?
Наша жизнь неразрывно связана с деньгами, данными и документами. Из-за этого нам приходится связываться с разнообразными посредниками, которые выдают нам эти деньги, документы и данные, проверяют их, удостоверяют их подлинность, выдают копии, проверяют достоверности копии и так далее.
Причем нас вынуждают доверять этим посредникам, хотя то и дело банкиры скрываются с деньгами клиентов, нотариусы задним числом подделывают завещания и договоры, сотрудники государственных органов и коммерческих организаций пользуются служебным положением в злонамеренных целях.
Не имея возможности доверять друг другу, мы прибегаем к помощи посредников, которые тоже не заслуживают никакого доверия. Вот бы было замечательно, если бы существовал способ обеспечить достоверность в наших отношениях при заключении сделок, исполнении контрактов, а также регистрации прав и событий!
Blockchain как раз и решает все эти проблемы.
Слайд 1
Хотим рассказать зачем придумали блокчейн, как устроены криптовалюты и почему это очень красивая система за последние годы с точки зрения логики.
Т.к. система достаточно сложная для понимания, связана с определенными внутренними терминами, то мы бы хотели рассказать вам о блокчейне простым языком. Я даже могу скинуть его друзьям-гуманитариям и буду уверен, что они поймут.
Блокчейн появился вместе с биткоином, но может использоваться независимо от него и даже модифицироваться. Любой может сделать свой блокчейн хоть у себя на ноутбуке.
Что такое blockchain?
Blockchain – это технология надежного
распределенного хранения
Для того, чтобы понять, как же этого удалось добиться, надо поближе познакомиться с весьма хитроумным устройством blockchain.
Разберем на примере.
Друзья Олега постоянно занимают у него деньги. Олег добр, но крайне забывчив. Через неделю он уже не помнит кто не вернул ему долг, но стесняется всех об этом расспрашивать. Потому однажды он решил положить этому конец, заведя у себя дома на доске список друзей, которым он занимал денег.
Теперь Олег всегда может подойти к доске и убедиться, что Макс всё вернул, а вот Ваня не отдает уже 700 рублей. Однажды Олег приглашает Ваню выпить к себе домой. Пока Олег отходит в другую комнату, Ваня стирает запись «Занял Ване 200 рублей» и вписывает вместо неё «Ваня отдал 500 рублей».
Доверявший своему списку Олег забывает про долг и теряет 700 рублей. Он решает как-то с этим бороться.
В прошлом году Олег ходил на курсы по программированию, где ему рассказали про хеширование. Он помнит, что любую строку можно превратить в однозначный набор символов (буквы и цифры) — хеш, и изменение любого символа строки полностью изменит его.
Добавление точки в конце изменит итоговый хеш до неузнаваемости — этим можно воспользоваться.
Олег берет общеизвестный хеш SHA-256 и хеширует им каждую запись, дописывая результат в конце. Теперь Олег может удостовериться, что его записи никто не изменял, захешировав их заново и сравнив с зелёненьким.
Но ИВАН тоже умеет в SHA-256 и легко может изменить запись вместе с её хешем. Особенно, если хеш написан прямо рядом на доске.
Потому для большей безопасности Олег решает хешировать не саму только запись, а складывать её вместе с хешем от прошлой записи. Теперь все следующие записи зависят от предыдущих. Если изменить хотя бы одну строчку, то придется пересчитать хеши всех остальных ниже по списку. Так у Олега появляется личный связный список.
Но однажды Иван прокрадывается ночью, изменяет нужную ему запись и обновляет хеши для всего списка до конца. У него это занимает несколько часов, но Олег всё равно крепко спит и не слышит. На утро Олег обнаруживает абсолютно верный список — все хеши совпадают. Но Иван всё равно его обманул, хоть и потратил на это бессонную ночь. Как еще можно защититься от Ночного Ивана?
Олег решает как-то усложнить ему жизнь. Теперь для добавления новой записи в список, Олег будет решать связанную с ней сложную задачку, например математическое уравнение. Ответ он будет добавлять в итоговый хеш.
Олег силен в математике, но даже у него на добавление записи уходит по десять минут. Несмотря на это, потраченное время того стоит, ведь если Иван опять захочет что-то изменить, ему придется заново решать уравнения для каждой строки, а их могут быть десятки. На это уйдет куча времени, ведь уравнения каждый раз уникальны и связаны с конкретной записью.
Зато проверить список всё так же просто: сначала нужно как раньше сравнить хеши, а потом проверить решения уравнений простой подстановкой. Если всё сходится — список не изменен.
В реальности же с уравнениями не всё так хорошо: компьютеры слишком хорошо их решают, да и где хранить столько уникальных уравнений. Потому авторы блокчейна придумали более красивую задачу: нужно найти такое число (nonce), чтобы итоговый хеш всей записи начинался на 10 нулей. Такой nonce сложно найти, зато результат всегда можно проверить просто глазами.
Теперь Олег сверяет все хеши и дополнительно убеждаются, чтобы каждый начинался на оговоренное количество нулей. Хитрый Иван, даже вооружившись мощным ноутбуком, не успеет за ночь пересчитать все хеши так, чтобы они удовлетворяли условию — не хватит времени.
Такой список по сути и есть домашний блокчейн на коленке. Его безопасность гарантирована математиками, которые доказали, что эти хеши нельзя вычислить как-то быстрее, кроме как перебором. Такой перебор хешей к каждой записи и есть майнинг, о котором будет позже.
ЦЕНТРАЛИЗАЦИЯ ДОВЕРИЯ
Идея вести неподделываемый список «кто кому занимал» понравилась нашим друзьям. Они тоже не хотят запоминать кто кому сколько отдал и должен. Вы обсудили идею и решили, что теперь вам нужен единый список на всех.
Но кому доверить вести столь важную бухгалтерию? Ведь когда дело касается денег — доверие выходит на первый план. Мы не доверим хранить свои деньги неизвестному. Наши предки для этого придумали банки, которым со временем стали доверять, потому что они подкреплёны лицензией, законами и страховкой Центрального Банка.
В кругу друзей все доверяют друг другу и можно просто выбрать на эту роль самого ответственного. Но что если вопрос касается незнакомых людей? Целого города, страны, или всего мира, как в случае с биткоином? Там вообще никто никому не может доверять.
Децентрализация: никто не доверяет никому
Так придумали альтернативный подход: хранить копию списка у каждого. Таким образом злоумышленнику придется не просто переписать один список, но и прокрасться в каждый дом и переписать списки там. А потом выяснится, что кто-то хранил у себя дома аж несколько списков, о чем никто не догадывался. Это и есть децентрализация.
Минусом такого подхода является то, что для внесения новых записей придется обзванивать всех остальных участников и сообщать каждому из них свежие изменения. Но если эти участники — бездушные машины, это перестаёт быть хоть какой-то проблемой.
В такой системе не существует единой точки доверия, а значит и возможности подкупа и жульничества. Все участники системы действуют согласно единому правилу: никто не доверяет никому. Каждый верит только той информации, которой располагает сам. Это главный закон любой децентрализованной сети.
Транзакции
Делая покупки в магазине, вы вводите пин-код от своей карты, разрешая магазину спросить у банка есть ли у вас на счету средства для оплаты покупки. Другими словами, вы подписываете своим пин-кодом транзакцию на некоторое количество денег, которую банк подтверждает или отклоняет.
Наши записи типа «Занял Ване 500 рублей» — тоже транзакции. Но у нас нет банка, авторизующего автора транзакций. Как нам проверить, что Иван втихую не добавил запись «Макс должен Олегу 1000 рублей»?
В блокчейне для этого используется механизм публичных и приватных ключей. Коротко о том, как это работает: вы у себя на компьютере генерируете пару длинных простых чисел — публичный и приватный ключ. Приватный ключ считается супер-секретным, потому что может расшифровать то, что зашифровано публичным. Но наоборот тоже работает. Если вы расскажете публичный ключ всем друзьям, они смогут зашифровать им любое сообщение так, что прочитать его сможете только вы, так как владеете приватным. Но кроме этого у публичного ключа есть полезный эффект — с помощью него можно проверить, что данные были зашифрованы именно вашим приватным ключом, не расшифровывая при этом сами данные
Мы находимся в децентрализованном интернете, где никому нельзя доверять. Транзакция подписывается приватным ключом и вместе с публичным ключом отсылается в специальное хранилище — пул неподтвержденных транзакций. Так любой участник сети может проверить, что именно вы были её инициатором, а не кто-то еще хочет расплатиться вашими деньгами.
Этим достигается открытость и безопасность сети. Если раньше за это отвечали банки, то в блокчейне за это отвечает математика.
Ваш публичный ключ и является номером крипто-кошелька. То есть вы можете завести кошелек любой криптовалюты вообще не выходя в сеть.
Отсутствие понятия «баланса»
Блокчейн
по сути состоит только из истории транзакций.
Он не хранит баланс каждого кошелька,
иначе бы нам пришлось изобретать дополнительные
способы защиты.
Владение кошельком
подтверждает только приватный ключ. Но
как другие участники сети убедятся, что
у меня есть достаточно денег для покупки?
Раз у нас нет баланса
— это должны доказывать вы. Потому в транзакцию
блокчейна входит не только ваша подпись
и сколько вы хотите потратить, но и ссылки
на предыдущие транзакции, в которых вы
получили нужное количество денег. То
есть если вы хотите потратить 400 рублей
вы пробегаете по всей своей истории доходов
и расходов, и прикрепляете к своей транзакции
те доходы, где вам дали 100 + 250 + 50 рублей,
тем самым доказывая, что у вас есть эти
400 рублей.
Каждый
участник сети еще раз обязательно проверит,
что вы не прикрепляли доходы дважды. Что
те 300 рублей, что дал Макс на прошлой неделе,
вы действительно еще не потратили.
Такие прикрепленные
к транзакции доходы в блокчейне называются
инпутами (input), а все получатели денег
— аутпутами (output). Сумма всех инпутов
редко бывает ровно такой, сколько вы хотите
перевести за раз — потому один из аутпутов
чаще всего будете вы сами. Другими словами
транзакция в блокчейне выглядит как «мне
дали 3 и 2 BTC, я хочу из них перевести 4 BTC
и оставшийся 1 BTC вернуть себе обратно».
Проблема двойной траты
Выше я сказал, что транзакции добавляются в специальный «пул неподтвержденных транзакций». Зачем нам какая-то промежуточная сущность, если у нас уже есть по сути готовые подписанные транзакции? Почему не писать их сразу в блокчейн?
Потому что сигналы из пункта А в пункт Б всегда идут с задержкой. Две транзакции могут пойти абсолютно разными путями. И транзакция, которая была инициирована первой, может дойти до получателя позже, потому что шла более длинным путём. Так получается двойное расходование, когда одни и те же деньги были отправлены сразу двум адресатам, о чем они даже не догадаются. Это вам не купюры из рук в руки передавать.
Для децентрализованной сети, в которой никому нельзя доверять, эта проблема стоит особенно остро. Вот как вы убедитесь, что одна транзакция точно была раньше другой? Попросите отправителя вшивать в неё время отправки, не так ли? Но вспомните — никому нельзя доверять, даже отправителю. Время на всех компьютерах обязательно будет отличаться и нет способа их гарантировано синхронизировать. Копия блокчейна хранится на каждом компьютере сети и каждый участник доверяет только ей.
Как же убедиться, что одна транзакция была раньше другой?
Ответ прост: это невозможно. Нет способа подтвердить время транзакции в децентрализованной сети. И вот в решении этой проблемы и заключается третья важная идея блокчейна, которая прописана прям в его названии — блоки.
Весь блокчейн по сути и есть список таких блоков, где каждый ссылается на предыдущий. По нему можно отследить любую транзакцию за всю историю, разматывая блокчейн хоть до самой первой записи. Именно этот список и весит сейчас сотни гигабайт и должен быть полностью скачан на все компьютеры, которые хотят принимать участие в работе сети (но чтобы просто создавать транзакции и переводить деньги, это не обязательно). Скачивается он так же со всех ближайших компьютеров сети, как будто вы скачиваете сериал, только новые новые серии в нём выходят каждые 10 минут.
Набрав себе транзакций из пула компьютер начинает составлять из них такой же неподделываемый список, как мы в начале поста на доске у себя дома. Только делает он его в виде дерева — хеширует записи попарно, потом результат еще раз попарно и так пока не останется лишь один хеш — корень дерева, который и добавляется в блок. Почему дерево? Потому что появляется возможность удалять ненужные (потраченные) транзакции из блока. Т.е. например есть две транзакции, объединённые хэшом, одна или обе уже не нужны т.к. это уже всё давно отдано другими транзакциями - так вот эти старые можно удалить, а хэш оставить, в итоге ничего не нарушается.
Так как актуальный блокчейн уже скачан, наш компьютер точно знает какой в нём сейчас последний блок. Ему остается только добавить ссылку на него в заголовок блока, захешировать всё это и сообщить всем остальным компьютерам сети «смотрите, я сделал новый блок, давайте добавим его в наш блокчейн».
Остальные должны проверить, что блок построен по всем правилам и что мы не добавили туда лишних транзакций, а затем добавить к себе в цепочки. Теперь все транзакции в нём подтверждены, блокчейн увеличен на один блок и всё идет хорошо, не так ли?
А вот и нет. В сети одновременно работают тысячи компьютеров, и как только они соберут новый блок, они почти одновременно ринутся сообщать всем, что их блок был создан первым. А из предыдущего раздела мы уже знаем, что в децентрализованной сети невозможно доказать кто действительно был первым.
Поэтому для включения блока в цепочку компьютеры должны решить какую-то сложную задачку, которая займет у них определенное время.
Как в школе,
когда все решали сложную контрольную,
очень редко бывало так, что даже отличники
сдавали ответы абсолютно одновременно.
Но если для человека
сложная задача — это спланировать отпуск,
чтобы и на майские праздники попал, и
билеты на море недорого, то для компьютера
— это добавить в конец блока такое число
(nonce), чтобы в результате хеш SHA-256 для всего
блока начинался, скажем, на 10 нулей. Это
и есть та задача, которую надо решить,
чтобы добавить блок в сеть Bitcoin. Для других
сетей задачи могут отличаться.
Так мы приходим к понятию майнинга, в основе которого лежит blockchain.
Майнинг
Все пользователи сети равноправны и, вообще говоря, могут делать все, что угодно, в том числе безуспешно пытаться обмануть других пользователей. Запретить им никто не может, потому что все находятся в равных условиях.
Войдя в blockchain-сеть, пользователь подключается к другим компьютерам сети для того, чтобы обмениваться с ними данными: блоками и записями. Важно, что эта сеть никак не привязана к географии, то есть пользователь из Москвы может одновременно подключиться к пользователям из Пекина, Лондона, Нью-Йорка и Буэнос-Айреса. И это, кстати, также защищает его от любых региональных особенностей.
Получив новые данные, каждый пользователь проверяет их корректность, и, убедившись в достоверности, сохраняет их у себя, а также передает дальше по сети. Таким образом, в сети может курсировать два вида данных – поддельные и настоящие – которые распространяются, соответственно, злоумышленниками и добросовестными. Каждый из добропорядочных участников, обнаружив поддельные данные, дальше их не передает. В итоге поддельные данные блуждают только между злонамеренными участниками, а добропорядочные участники обмениваются только корректными данными.
Участники сети делятся на две группы: обычные пользователи, которые создают новые записи, и майнеры.
Обычные пользователи создают и распространяют по сети записи, например, «человек с ключом А взял в кредит автомобиль с ключом Х». Как вы видите, все записи открыты, но зашифрованы. Если вы знаете ключ автомобиля, то вы можете узнать, находится ли он в кредитном залоге, но не узнаете имя его владельца или наименование банка-залогодержателя, если они сами не решили разместить эти данные в открытом виде.
Майнер – это такой же пользователь blockchain-сети, как и все остальные. Но, кроме проверки и распространения данных, он еще занимается созданием новых блоков.
Пока новая запись не внесена ни в один блок, она не считается достоверной. Любой участник сети может ее использовать только на свой страх и риск, поскольку есть вероятность, что это некорректная или даже поддельная запись. Поэтому обычно участники просто пересылают новые записи, чтобы она рано или поздно дошла до майнера. Получив новые записи от других участников сети, майнер собирает их вместе, формирует заголовок будущего блока и рассчитывает ключ блока. Допустим, после первого расчета ключ получился вот таким. Однако, по правилам, ключ должен начинаться с десяти нулей. Почему именно на 10 нулей? А просто так, в этом нет никакого смысла. Так придумал Сатоши. Потому что это одна из тех задач, на которую точно всегда есть решение, но оно точно не может быть найдено быстрее, чем долгим монотонным перебором вариантов. Чтобы изменился ключ, необходимо изменить исходные данные. Для этого в заголовке блока предусмотрено специальное поле, которое называется nonce. При первом расчете оно равно 0. Поэтому майнер меняет значение на 1 и снова рассчитывает ключ. Теперь он полностью изменился.То есть опять начинается не с нулей. Тогда майнер увеличивает nonce до 2 и перерасчитывает ключ. Чтобы найти подходящее значение ключа, майнерам приходится делать миллиарды и триллионы перерасчетов. И когда подходящий ключ все-таки найден, майнер сохраняет блок и отправляет его другим участникам сети. Теперь все записи в блоке подтверждены и защищены ключом, который весьма нелегко подделать. Причем, как вы помните, в ключе блока закодирован и ключ предыдущего блока, который теперь подделать уже просто нереально.
Сложность майнинга
(а именно так называется процесс поиска
ключа) напрямую зависит от размера сети,
то есть её суммарной мощности. Если вы
создадите свой блокчейн и запустите его
себя дома на двух ноутбуках, то задача
должна быть попроще. Например чтобы хеш начинался
только с одного нуля, или чтобы сумма
четных разрядов была равна сумме нечетных.
Чтобы найти начинающийся на 10 нулей
хеш, у одного компьютера уйдет несколько
десятков лет. Но если объединить тысячи
компьютеров в единую сеть и искать параллельно,
то по теории вероятностей эта задача
решается в среднем за 10 минут. Это и есть
время появления нового блока в блокчейне.
Каждые 8-12 минут кто-то на земле находит
такой хеш и получает привилегию анонсировать
свою находку на всех, избежав тем самым
проблемы кто был первым.
Хитрость майнинга ключей заключается еще и в том, что этот процесс не имеет прогресса. Проще говоря, неважно, когда вы начали искать ключ, сколько записей входит в блок, сколько времени вы уже считаете, сколько ключей вы уже перебрали – вероятность нахождения ключа на любой итерации всегда одинакова. А это значит, что вы не можете сделать предрасчет, не можете купить ключи, не можете создать склад ключей – все это бессмысленно, а все участники равноправны. И у каждого майнера есть только одна возможность получить подходящий ключ – это считать, считать и считать.
Вот этим и занимаются майнеры. За каждый созданный блок они получают плату. Кто первым нашел ключ, тот создал блок и заработал. Остальные не получили ничего. Затем они все вместе принимаются за поиск ключа для нового блока.
Таким образом, замысловатая процедура расчета ключей, конечно, усложняет создание блока, но еще больше она усложняет создание поддельных блоков, делая это почти невозможным.
Суть майнинга — решить любую вычислительную задачу. Эта задача должна быть достаточно простой, чтобы у участников сети была стабильная вероятность найти ответ — иначе транзакции будут подтверждаться вечность. Представьте, что на кассе в магазине вам надо каждый раз ждать по пол часа, пока банк подтвердит вашу транзакцию.
Никто не будет пользоваться таким банком.
Но задача должна быть одновременно и
сложной, чтобы ответ не нашли сразу все
пользователи сети. Потому что в таком
случае они анонсируют в сеть много блоков
с одинаковыми транзакциями и будет вероятность
двойной растраты. Или еще хуже — разделения
единого блокчейна на несколько веток,
в которых уже никто не сможет разобраться
какая транзакция подтверждена, а какая
нет.
Представим ситуацию, в которой несмотря на всю нашу теорию вероятностей, два майнера всё равно умудрились одновременно найти правильный ответ. Они начинают рассылать два абсолютно верных блока по сети. Эти блоки гарантировано отличаются, ведь даже если они чудом выбрали одинаковые транзакции из пула, составили абсолютно идентичные деревья и угадали одинаковое рандомное число (nonce), их хеши всё равно будут разными, так как каждый пропишет в блок свой номер кошелька для вознаграждения.
Теперь у нас есть два валидных блока
и снова возникает проблема кого считать
первым. Как поведет себя сеть в таком
случае?
В алгоритме блокчейна прописано, что
участники сети просто принимают первый
правильный ответ, который до них дошел.
Дальше они живут исходя из собственной
картины мира. Оба майнера получат своё
вознаграждение, а все остальные начинают
майнить, опираясь на последний ими лично
полученный блок, отбрасывая все остальные
повторно-верные. В сети появляется две
версии правильного блокчейна. Такой вот
парадокс.
Это штатная ситуация, в которой снова помогает теория вероятностей. Сеть функционирует в таком вот раздвоенном состоянии, пока кто-то из майнеров не находит следующий блок к одной из этих цепочек. Как только такой блок находится и вставляется в цепочку, она становится длиннее и включается одно из соглашений сети блокчейн:при любых условиях, самая длинная цепочка блоков принимается как единственно верная для всейсети. Короткая цепочка, несмотря на всю свою правильность, отвергается всеми участникам сети. У майнера пропадает его вознаграждение, потому что его блока больше не существует.
С ростом сети такие совпадения из «очень маловероятных» переходят в разряд «ну иногда бывает». Старожилы рассказывают, что бывали случаи, когда отбрасывалась цепочка сразу из четырех блоков.
Из-за этого были придуманы три правила безопасности хвоста блокчейна:
- Вознаграждениями за майнинг, можно пользоваться только спустя еще 20 подтвержденных блоков после получения. Для биткоина это около трёх часов.
- Если вам переслали биткоины, использовать их в качестве инпутов в новых транзакциях можно только спустя 1-5 блоков.
- Правила 1 и 2 всего лишь прописаны в настройках каждого клиента. Никто не следит за их соблюдением. Но закон о самой длинной цепочке всё равно уничтожит все ваши транзакции, если вы попытаетесь обмануть систему, не соблюдая их.
Пытаемся обмануть блокчейн
Теперь, когда вы знаете всё о майнинге, устройстве блокчейна и правиле самой длинной цепочки, у вас мог возникнуть вопрос: а можно ли как-то специально обогнать блокчейн, составив самую длинную цепочку самому, тем самым подтвердив свои фейковые транзакции.
Предположим у вас есть самый мощный компьютер на Земле. Датацентры Google и Amazon вместе взятые в вашем распоряжении и вы пытаетесь просчитать такую цепочку, которая станет самой длинной в сети блокчейн.
Вы не можете взять и сразу просчитать несколько блоков цепочки, ведь каждый следующий блок зависит от предыдущего. Тогда вы решаете как можно быстрее считать каждый блок на своих огромных датацентрах параллельно с тем, как все остальные участники продолжают увеличивать основной блокчейн. Возможно ли их обогнать? Вероятно, да.
Если ваша вычислительная мощность будет составлять больше 50% от мощности всех участников сети, то с вероятностью 50% вы сможете построить более длинную цепочку быстрее всех остальных вместе взятых. Это теоретически возможный способ обмануть блокчейн, просчитав более длинную цепочку транзакций. Но в реальности ни один датацентр не сравнится по мощности со всеми компьютерами в мире. Это примерно как выйти на улицу и пытаться убедить каждого человека в мире, что доллар теперь стоит 1 рубль и успеть до того, как в СМИ вас разоблачат. И вот если вы умудритесь убедить всех, то сможете обвалить мировую экономику. В теории ведь это возможно? Но на практике почему-то ни у кого не получалось.

- Цiноутворення в аграрному секторi
- Цiноутворення. Основи маркетинговоi дiяльностi фiрми
- Ц.А.Кюи
- Цао Кунь
- Царевна Софья
- Царевна Софья
- Царевна Софья Алексеевна
- ХХ ғасырда дүние жүзінің ғалымдарын толғандыратын мәселе ол қазіргі кезде жасөспірімдер арасында жиі кездесетін
- ХХ ҒАСЫРДЫҢ АЛҒАШҚЫ ШИРЕГІНДЕГІ ҚАЗАҚСТАНДЫҚ ЭЛИТАСЫНЫҢ ҚАЛЫПТАСУЫ ЖӘНЕ ҚОҒАМДЫҚ-САЯСИ ҚЫЗМЕТІ
- ХХ ғасыр философиясы
- Хьюсен, Роберт
- Хэджирование
- Хэдли Кэнтрил и начало его кросс-культурных зондажей общественного мнения
- Хэ нефритовый диск