Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
cyberevents
6 лет назад

Структуры данных для блокчейна. Спикер: Александр Чепурной

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

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

Снимок экрана 2018-01-24 в 18.42.04.png

Можно выделить следующие виды хеш функций:

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

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

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

Рассмотрим стандартное определение криптографической хеш функции:

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

Разберем подробнее:

Снимок экрана 2018-01-24 в 19.15.58.png

Есть ключ S с длинной L, есть функция его генерации ⇠ - стрелочка влево показывает, что генерация идет случайным образом
Есть хеш функция, которая получает сгенерированный ключ S и на выход дает битовую строку, той же самой длины L
Игра заключается в том, что нам известен S и мы просим атакующего показать x и x’ и он выигрывает, если хеш от х равен х’ при условии x≠x’
Вероятность атакующего выиграть практически равна нулю.

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

Снимок экрана 2018-01-24 в 19.17.49.png

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

Теперь проанализируем хеш функцию, которую можно назвать ранним прототипом Блокчейн:

Снимок экрана 2018-01-24 в 19.19.34.png

На данном конкретном примере:
Стартап из Эстонии располагал определенной информацие от клиентов, собирая все файлы с данной информацией, в конце недели высчитывался общий хеш от этих данных и публиковался в газете Financial Times.

Структура называется «Цепочка хешей» (Hashchain) и функционирует она следующим образом:

Вычисляется хеш первого документа (h) и идет в хеш функцию (H), далее выход этой хеш функции вместе с хешем следующего документа идет в хеш функцию второго уровня и т.д. На выходе получается хеш, который удостоверяет все документы.

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

Дерево Меркла - изначально идеально сбалансированное дерево, число элементов (листьев) - это степень двойки, соответственно есть четыре блока внизу.

Снимок экрана 2018-01-24 в 19.22.25.png

Рассчитаем как получить единственный хеш, который заносится в архив: считаем хеши от всех четырех документов, затем группируем хеши по два и количество таких пар будет четным, так как внизу степень два. Сгруппировав, считаем хеши от получившихся двух блоков. В результате получаем два узла, которые находятся на втором уровне, от них вычисляем хеш и получаем корневой хеш.

Данная структура позволяет эффективно доказать существование одного узла, если известен архивный хеш:

Снимок экрана 2018-01-24 в 19.27.25.png

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

Дерево Меркла в Bitcoin

Дерево Меркла в Bitcoin используется для того, чтобы подтвердить существование транзакций в блоке.

Снимок экрана 2018-01-24 в 19.29.09.png

Дерево в Bitcoin строится по такому же принципу, кроме одного существенного отличия - число транзакций в блоке не в степени двойки. По данной причине, последняя транзакция в Bitcoin дублируется, пока не добивается до двойки.
Это означает, что реализовано дерево Меркла в Bitcoin неграмотно, в связи с чем, возникают некоторые проблемы:

  • Набор транзакций внизу можно менять

Снимок экрана 2018-01-24 в 20.00.05.png

Об этом можно почитать в Bitcoin, в файле Merkle.cpp.

  • Нет данных о количестве элементов и высоте дерева, что делает дерево менее устойчивым к коллизиям

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

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

6
2.940 GOLOS
На Golos с August 2017
Комментарии (2)
Сортировать по:
Сначала старые