Написать нам
Категория: Блокчейн
03.12.2019

Безопасность Блокчейн Технологии

Хотите Внедрить Блокчейн?
Компания Merehead занимается криптовалютной и блокчейн разработкой. Свяжитесь с нами и получите бесплатную консультацию! Поговорить с Менеджером
Блокчейн позиционируют как самый безопасный способ хранения информации, который исключает кражу важных данных, мошеннические действия, защищает имущественные права и тому подобное. В статье мы старательно развинтим новую технологию на составляющие и посмотрим, сколько в этом тезисе правды, а сколько — рекламы.

Общие сведения



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



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



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

Техническое описание



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



В блокчейн-сети есть два типа участников:



  1. Полные ноды (валидаторы или майнеры). Участники (узлы), которые проверяют подлинность данных, сопоставляя записи новых транзакций с предыдущими.


  2. Простые ноды (они же обычные участники, пользователи). Обычные участники осуществляют финансовые или другие операции, например перевод денег. Запись об операции (сумма, адрес получателя, комиссия) направляется в блокчейн сети, где она уже считается транзакцией.




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



Из блоков система формирует упорядоченную «назад» структуру. Блок в такой структуре может быть идентифицирован с использованием криптографического хеша (также известного как цифровой отпечаток) — алгоритма (секретного ключа, или хеш-ключа) для шифрования данных с помощью криптографии. Расшифровывают данные с помощью этого же ключа или другого, также сгенерированного с помощью криптографии. Таким образом, все данные могут быть связаны через структуру связанного списка.





Визуальная иллюстрация блокчейна — «цепочки» блоков


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







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





Визуализация блокчейна в виде стопки блоков привела к тому, что программисты начали использовать термин «высота» для обозначения зрелости цепочки


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



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

Что внутри блока



Блок состоит из заголовка (Head), содержащего метаданные. Далее идет длинный список транзакций (Payload), который занимает большую часть всего объема блока. Так, на старте блок Биткоина мог вместить более 500 транзакций, поскольку он был объемом 80 байт (сейчас размер больше), а транзакции требовали по 250 байт.





Визуализации разделения блока на заголовок и данные транзакции


Содержание блоков, которые были присоединены к цепочке, невозможно изменить или удалить. Вообще, любое изменение данных (например, о переводах криптомонет в сети Биткоин) в блокчейне невозможно в принципе. Система позволяет лишь добавлять новые блоки, которые суммируют итоговый «баланс» информации. Это важная особенность блокчейна, обеспечивающая безопасность истории активов, например, истории транзакций в сети Биткоина.



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

Как блоки связаны друг с другом





Содержание блока


Заголовок блока содержит следующую информацию:



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







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



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



Работает это так:



  1. Сначала подсчитываются хеши всех транзакций.


  2. Затем считается сумма всех хешей пар транзакций.


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




Именно заголовки позволяют отслеживать целостность содержания самих блоков.



Как уже говорилось ранее, блокчейн сети Биткоин — это база данных, которая записывает и хранит информацию о транзакциях виртуальных монет (биткоинов). Транзакция в такой сети в упрощенном представлении имеет следующий вид:

С < address 1> отправитель < N> биткоинов на < address 2>



В компьютерном коде транзакция, записанная в блок блокчейна, несколько сложнее, поскольку протокол Биткоина оперирует такими понятиями, как Входы (Inputs или In) и Выходы (Outputs или Out).



В цифровой валюте новые транзакции через Входы (один или несколько) ссылаются на Выходы (один или несколько) предыдущих транзакций и формируют Выходы (также один или несколько) для использования уже в следующих транзакциях.





Транзакция C имеет ссылки на две входные транзакции — A и B. В результате на входе в транзакцию С мы имеем 0.008 BTC (0.005 + 0.003), которые разделены на два выхода: на первый адрес отправляется 0.003 BTC, а на второй 0.004 BTC. Остаток (0.001 BTC) — комиссия майнера


Блок генезиса



Первый блок в blockchain называется блоком генезиса. В сети Биткоин такой блок был создан в 2009 году, он является общим прародителем всех блоков в данной экосистеме. Это означает, что если вы выберете любой блок и проследите цепочку назад во времени, то в конечном итоге придете к блоку генезиса. Каждая цепочка блокчейна всегда начинается по крайней мере из одного блока, и так как блок генезиса закодирован статически в клиентском программном обеспечении любого блокчейна (это его исходная точка), то он не может быть модифицирован.



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







Или так (если использовать базовый клиент Bitcoin Core с командной строкой Windows):







Интересный факт. Блок генезиса Биткоина содержит скрытое сообщение: «Таймс 03 / Янв / 2009 Министр экономики на рубеже второго раунда в спасении банков». Это символическое сообщение, которое содержит ссылку на заголовок британской газеты The Times. Это отсылка к важности создания надежной, безопасной и независимой монетарной системы, вроде Биткоина, которая будет «гаванью» стабильности во времена финансовых кризисов. Данное сообщение было заложено в первый блок Сатоши Накамото, создателя Биткоина.
Написать нам
Имя*:
Email*:
Сообщение: