Каким образом сложность (по сути, случайный перебор кучи вариантов в поисках того, хеш которого удовлетворяет неким условиям) позволяет защититься от атак и повышает надёжность системы в целом?
Как происходит транзакция? Рассмотрим упрощённый вариант. Отправитель передаёт в сеть пакет информации, содержащий:
- один из адресов (адрес = открытый ключ) отправителя;
- адрес получателя;
- количество монет;
- какую-то другую информацию;
- электронную подпись пакета, полученную с помощью соответствующего секретного ключа отправителя.
Узлы системы проверяют транзакцию с помощью истории и распространяют её по сети. После завершения транзакции, все монеты списываются с указанного адреса отправителя и получатель получает право распоряжаться ими. Подвох здесь заключается в том, что
нечестный отправитель может отправить монеты с того же адреса ещё раз, уже на другой адрес. В итоге, система может признать только одну из этих транзакций. Решение о закреплении транзакций в истории принимают майнеры. Чтобы доказать своё право на запись блока в историю (и получение премии), майнеры решают какую-то бесполезную задачу. Другие узлы признают блоки на основе предполагаемой сложности решённой задачи. Если появятся несколько конкурирующих блоков (хвостов цепочки), то
истинным будет признан тот хвост, суммарная "сложность" блоков в котором будет наибольшей. После добавления блока в историю, последующие блоки будут вычисляться исходя из него, и чем больше блоков будет добавлено, тем сложнее надо будет решить задачу, чтобы сгенерировать другой, альтернативный хвост. Таким образом,
не имея достаточной вычислительной мощности, не получится вертеть историей по своему желанию. А вот если такие мощности есть в наличии, то можно попробовать смухлевать.
- Создаём свою сеть майнеров.
- Изолируем её от общей сети.
- В общую сеть передаём транзакцию на много BTC какому-нибудь трейдеру, например.
- В свою сеть передаём такую же транзакцию, но уже на какой-то свой адрес.
- Ждём подтверждение транзакции трейдером и получаем от него то, что нам полагается.
- Объединяем нашу сеть с общей сетью. Если в нашей сети суммарная "сложность" новых блоков превысит сложность новых блоков в общей сети, то наш хвост будет признан истинным, и все транзакции, прошедшие в общей сети, будут отменены. (Отменённые транзакции могут быть автоматически восстановлены, кроме нашей "фальшивой" транзакции.)
- Трейдеры SOSNOOLEY.
- ...
- PROFIT!
Так как монеты при этом остаются у мошенника, он может проделать всё это несколько раз. И это - довольно простая схема. Я слышал, что есть варианты атак, требующих меньший процент вычислительной мощности всей сети.