Во времена, когда люди все меньше и меньше доверяют государству, возникает, словно соответствующая нашим потребностям, криптовалюта. А если говорить точнее - стала популярна она именно тогда, когда многие стали понимать важность анонимности и, следовательно, безопасности в современном мире. Все же хотят сохранить свои данные от непонятно кого, не так ли?
Главное преимущество криптовалют - децентрализованность, а именно отсутсвие "третьих" лиц в процессе передачи и хранения информации о ваших покупках и переводах. Благодаря блокчейну и методам достижения консенсуса экстремально сложно или даже почти невозможно получить какую-либо информацию о вас и ваших транзакциях. Если, конечно, не получить физический доступ к вашему компьютеру и телефону.
На чем строится блокчейн и моя анонимность?
Говоря простым языком, блокчейн - цепочка блоков, содержащих ваши транзакции. Каждая транзакция имеет подпись(Signature), зависящую от моего секретного ключа, так что никто не может подделать вашу подпись без знания секретного ключа и контекста(сообщения о транзакции), в котором был применен ключ.
Блок же отображает состояние о ваших транзакциях
А зашифрована подпись так, что единственным способом узнать её и пройти функцию Verify - перебрать 2 в 256 степени комбинаций числа (поверьте, это намного более чем астрономически большое число, даже говорить так - сильно переоценивать астрономию).
То есть, когда вы совершаете транзакцию:
- Она подписывается моим секретным ключом
- Возникает подпись (Signature), состоящая из 256 нулей и единиц (256 бит)
- Подпись проверяется
- Если проверка пройдена, транзакция считается валидной и записывается в блок
- Блок рассылается всем участникам обмена криптовалютой
Чему верить?
Если все обмениваются блоками с транзакциями, то каким блокам я могу доверять? Как удостовериться, что мне не прислали неправильный блок с транзакцией, согласно которой я переслал 10000 биткоинов Антону из 3-го подъезда?
То есть, нам (всем участникам обмена криптовалютой), нужно достичь консенсуса - договориться, какие блоки мы будем считать "правильными", говорящими лишь о взаимно верной информации.
Именно тут и запускаются механизмы достижения консенсуса: Proof-of-Work и Proof-of-Stake. Отвечают они именно за то, как мы (участники обмена криптовалютой), будете договариваться друг с другом о взаимной записи друг у друга каждого блока, и каким блокам мы можем доверять.
Доказательство работы
Proof-of-Work, оно же доказательство работы, основано на доверии именно тому блоку, ради которого было выполнено наибольшее количество работы.
Каждый блок представляет собой массив данных, который хешируется и преобразуется в уже известную нам 256 битовую цепочку нулей и единиц. Результатом хеширования называется хеш-сумма. Она всегда одна и та же для одного и того же массива данных.
Опять же, хеширование одностороннее - нельзя получить массив данных по хеш-сумме, можно только "угадать" весь или почти весь массив данных, засовывая его в хеш-функцию, получая хеш-сумму и сравнивая его с текущей хеш-суммой.
При таких условиях, если вы обладаете текущей хеш-суммой, значит вы смогли совершить огромное количество работы по её нахождению. Это и называется Proof-of-Work'ом.
Этим нахождением хеш-суммы и занимаются известные всем майнеры, именно они решают математическую задачу определенной сложности - подбирают специальный параметр nonce для хеш-функции чтобы получить определенный хеш-сумму.
А знаете почему определенной? Потому что система сама рассчитывает сложность вычислений каждый раз, когда майнится валюта: числовое значение хеша должно быть не больше некоторого заданного числа - оно носит название difficulty target.
Что происходит:
- Массив данных из блока преобразуется в хеш-сумму
- Майнеры решают задачу по нахождению nonce
- Проверяют, совпадает ли хеш-сумма
- Если совпадает, то такому блоку можно доверять
- Проверенный блок рассылается всем участникам сети
Для того, чтобы обмануть такую систему, нужно:
- Узнать секретный ключ либо подобрать подпись с контекстом.
- Подделать весь массив таких ключей и записать их блок.
- Создать блок раньше всех майнеров.
- Даже если удалось создать блок раньше всех, нужно обладать более чем 50% вычислительной мощности в системе чтобы продолжать создавать блоки раньше остальных. Так как даже если каждому пользователю пришло несколько разных блоков, система всегда будет выбирать самую длинную цепочку блоков.
Доказательство владения
Proof-of-Stake - доказательство доли владения, так нашумевшее в последнее время. И эфир перешел на него, и все так расхваливают эту штуку чудеснейшую. Что же в ней такого?
А вот "такого" тут предостаточно. Этот механизм дарует право на создание блоков (которые мы описали выше) тем пользователям, которые владеют наибольшим количеством валюты по сравнению с остальными. Тех, кто держит(блокирует) или же стейкает эту валюту, называют валидаторами.
Система доверяет владельцу большого количества крипты именно потому, что ему невыгодно ее терять при подделке блока.
Проще всего понять на аналогии с PoW:
- Вместо майнеров, создающих блоки майнингом, валидаторы блокируют свою валюту и создают блоки.
- Вместо решения головоломок компьютером, пользователи голосуют за блок, созданный валидатором, и подписывают его цифровой подписью.
- Побеждает не блок/цепочка блоков, на который было потрачено большее количество работы, а блок, за который проголосовало большее количество участников.
Сразу понятно и бросается в глаза, что никаких затрат электроэнергии по сравнению с ПоВом не производится. Но плюсов гораздо больше, чем кажется, хоть электроэнергия и является самым важным из них.
Также:
- Экспоненциально растет пропускная способность сети.
- Снижаются траты участников.
- Система молодая, имеет большой потенциал.
Однако
Именно так бы я описал механизм работы этой сети в действительности. Безусловно, на бумаге все выглядит прекрасно: стейкаем, создаем блоки, не потребляем электричество, так еще и зарабатываем.
Рано или поздно, все заблокированные средства валидатора будут, как ни странно, разблокированы. И тогда он сможет подписывать уже существующие блоки (не факт, что правильные) без какого-либо наказания при соблюдении некоторых правил. Система борется с этим ограничениями по времени и доверии первому созданному блоку.
Только проблема в том, что у нас нет никакого понятия о том, какой блок был создан первым и какой блок подписывать в ситуации, где мы синхронизируемся с сетью на, допустим, уже 200 блоке. То есть злоумышленники могут просто создать форк на большом расстоянии и подписывать блоки без возможности для остальных участников узнать, который из них был создан первым.
Эту уязвимость в системе можно смело называть фатальной. Исправить ее можно, по словам самих разработчиков, лишь проведя фундаментальные изменения в системе оценивания угроз.
Если система может зваться безопасной только в случае снижения стандартов, по которым она оценивается, то можно ли говорить о "безопасности"? Наверное, еще рановато.
--------------------------------------------------
С уважением, @NICKCHEL