Знакомство с технологией Блокчейн (blockchain) и как реализовать блокчейн самомостоятельно

15.05.2018

Блокчейн (blockchain)
Блокчейн (blockchain)

Блокчейн (blockchain) – это технология распределенного хранения данных в одноранговой сети в виде непрерывной последовательности блоков взаимосвязанных с помощью алгоритма хеширования. Давайте подробнее познакомимся с этой технологией и рассмотрим пример ее реализации на языке программирования C#.

Что такое Блокчейн?

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

Как работает Блокчейн?

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

  • Data – поле, в котором сохранены сами полезные данные. Это может быть как простая строка, так и более сложные структуры.
  • CreatedOn – дата и время создания блока данных. Важно использовать универсальное UTC время, чтобы не возникало конфликтов из-за разных часовых поясов.
  • Hash – уникальный ключ, созданный на основе хранимых данных блока с помощью специализированной хеш-функции, которая подразумевает только одностороннее шифрование.
  • PreviousHash – указатель на предыдущий хеш-блока. Это необходимо для связывания блоков в единую цепочку.

Также возможно использование и дополнительных данных, в данном случае также использовались следующие поля:

  • User – данные о пользователе, создавшем блок
  • Algorithm – используемый алгоритм хеширования
  • Version – версия блока
Структура цепочки блокчейн
Структура цепочки блокчейн

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

Что такое хеширование?

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

Рассмотрим пример самой элементарной хеш-функции, это суммирование всех цифр числа. Например, если на вход мы получим число 73, то хешем данного числа будет 7 + 3 = 10. Это очень простая операция, которая позволяет получить хеш. Но вот обратное преобразование однозначно выполнить невозможно, так как существуют многие числа, дающие такой же результат: 64, 37, 181, 11116 и так далее.

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

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