Кейсы By / 08.02.2018 / 17:22

Как формируются блоки в сети биткоин и можно ли их подделать

Павел Кравченко в ходе онлайн-курса по блокчейн, который стартовал 9 января, рассказал, как формируются блоки в сети биткоина, в которых хранится информация о всех транзакциях в сети. MC Today публикует конспект с кратким содержанием курса и самыми интересными выжимками.


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

Почему нет смысла воровать чек? Все просто — его может обналичить только человек, указанный в графе «Получатель». Также в чеке указаны данные о том, кто, кому и сколько средств передал, а также подпись отправителя. В случае подделки подписи чек становится недействительным.

Блоки в сети Биткоина

Блоки в сети Биткоина

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

Если пользователь создает два перевода с одинаковыми данными, то не исключена ситуация, в которой он может сказать, что заплатил дважды, а на самом деле это будет одна операция.

Для защиты от подобных ситуаций применяется уникальный для каждой транзакции серийный номер — идентификатор. Теперь отличить копию перевода от его оригинала нетрудно. Идентификатор транзакция получает в результате вычисления хеш-функции от текста транзакции.

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

Если происходит платеж, то получатель чека может проверить, был ли этот чек использован ранее. Если получатель находит идентификатор в своей базе, он понимает, что платеж не действителен.

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

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

Голосование транзакции

Голосование транзакции

А что произойдет, если кто-то анонимный будет специально всегда голосовать против? Подобная ситуация является классической DDoS-атакой на систему. Поэтому чтобы принять или отклонить транзакцию, необходимо большинство голосов.

Техническая справка — в биткоин база транзакций обновляется примерно каждые 10 минут. Транзакции накапливаются и формируются в блоки, которые добавляются в базу каждые 10 минут. Отсюда и название базы транзакций — блокчейн — цепь блоков.

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

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

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

За эту услугу он передаст им какое-то вознаграждение. Инициируется транзакция, в которой монеты платятся первому продавцу, при этом подкупленная половина молчит, а транзакция якобы проходит.

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

Таким образом возможно потратить одни и те же деньги дважды. Что с этим делать? Как обеспечить честность голосования, когда количество пользователей неизвестно, они анонимны и друг другу не доверяют?

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

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

  • Она должна быть такой, чтобы самый быстрый компьютер не мог всегда решать ее первым. В решении должна присутствовать случайность — у всех должны быть шансы.
  • Преждевременного доступа к задачам не должно быть ни у кого. Таким образом, никто не может выбрать для себя задачи полегче.
  • Все остальные участники должны иметь возможность проверить результаты решения. Иначе — возможна коррупция.
  • Необходимо исключить возможность украсть чужое решение — задачи должны для каждого отличаться.
  • Решение задачи должно занимать некоторое время, которое можно прогнозировать, это время не может быть зафиксировано точно.
  • Каждый участник должен ставить для себя задачу самостоятельно, без необходимости ее получать с некоторого сервера. Это крайне сложные условия для задачи.

В Биткоине такой задачей является поиск прообраза хеш-функции, что идеально соответствует всем критериям. Предположим, что пять компьютеров в системе умеют перебирать числа с одинаковой скоростью.

С какой вероятностью один из них будет первым? Двадцать процентов. Если два компьютера объединят свои мощности, вероятность кратно возрастет и составит сорок процентов. В определенный момент кто-то находит ответ и сообщает его всем. Все остальные проверяют решение и, если оно верно, прекращают работу над задачей.

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

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

Это и есть процесс подтверждения транзакций. Приблизительно каждые десять минут, вне зависимости от усилий участников, система выдает 12,5 монет, и они принадлежат тому, кто первым нашел правильное решение. Фактически, майнинг — это простой перебор чисел, который не связан с проверкой транзакций, он нужен только для того, чтобы препятствовать подкупу голосов.

Отсюда следует несколько выводов:

  1. Вероятность стать первым равна проценту вычислительных ресурсов, который вы контролируете.
  2. Время, за которое вы  решите задачу, равно отношению среднего времени, за которое вся сеть находит решение (это приблизительно 10 минут), к проценту ваших вычислительных ресурсов. Если вы владеете десятью процентами мощности сети, вы будете решать задачу в среднем за сто минут.
  3. Контролировать сеть может только тот, кто контролирует 51% ресурсов. Этот пользователь чаще других будет находить решение задачи первым и сможет навязывать свои интересы остальным.
  4. До тех пор, пока честные пользователи контролируют пятьдесят один процент вычислительной мощности сети, система в безопасности.

Как определить, кто был первым? Каждый следующий блок содержит идентификатор предыдущего. Благодаря использованию криптографии, разорвать цепочку транзакций невозможно. Если вы измените что-то в предыдущем блоке, следующий тоже нужно будет изменить.

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

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

Криптография

Криптография

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

Существует одно важное правило — все новые блоки должны строиться на базе самой длинной из альтернативных ветвей. То есть, если вы выбрали определенную цепочку и работаете над следующим блоком в ней, а кто-то посылает вам готовый новый блок, который базируется на альтернативной цепочке — вы должны переключиться на него.

Криптография

Криптография

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

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

Согласно правилам, самая длинная цепочка блоков содержит достоверное состояние балансов, но технически остается возможность переписать историю. Для этого необходимо построить цепочку, которая будет длиннее существующей.

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

Транзакция считается подтвержденной, когда содержащий ее блок находится в самой длинной цепочке, а после него существует еще пять блоков. Это значит, что для полного подтверждения транзакции потребуется около одного часа.

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

***

Понравился текст? Здесь мы рассказываем, что думаем о материалах и делимся личными историями: наш Telegram-канал и страницы редакторов Веры Черныш и Тимура Вороны в Facebook.

  1. Павел Кравченко: как устроен майнинг, что такое реестр биткоина и где купить криптовалюту
  2. Павел Кравченко: как работают транзакции между биткоин-кошельками и можно ли их взломать
  3. Павел Кравченко: что такое биткоин, как появились криптовалюты и почему они так дорого стоят

Подписывайтесь на нас в Facebook!

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

«Уанет делится на две эпохи.
До MC Today и после. Читаю каждый
день вдохновляющие истории про
предпринимателей и вдохновляюсь сам»
Давид Браун, создатель TemplateMonster и Weblium

Подписывайтесь
на MC Today


Telegram-канал

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: