==Распределенные реестры и технология блокчейн== ===Предпосылки и этапы== **1970-90**. Развитие технологий открытых ключей шифрования и надежных хеш-функций. **2009.** Выпуск первой криптовалюты биткоин (BTC) **2018.** Фанат виртуальной многопользовательской (количество одновременно играющих игроков достигает $ 900\, 000$) игры ((https://ru.wikipedia.org/wiki/Counter-Strike:_Global_Offensive Counter-Strike)) приобрел невероятно редкую винтовку с автографом известного профессионального игрока за $ 61\, 000 $ USD (см. сайт ((https://cs.money/ru/csgo/store/ магазина))) **01.04.2024.** Существует $ > 10\, 000 $ криптовалют. Обменный курс: $ 1 $ BTC = $ 69\,968.1 $ USD ===Математика== Модулярная арифметика (арифметика остатков): степенная функция $$ f(x)=x^{n} \pmod{M} \ , $$ где $ M=p $ или $ M=p_1p_2 $, а $ p,p_1, p_2 $ простые числа. Достаточно большие: $ \sim 10^{60}, \sim 10^{100}, \sim 10^{150} $ $ f(x) $ определена на множестве $ \{0,1,\dots,M-1 \} $ и отображает это множество в себя. 1. Сравнительно ((:modular#vychislenie_ostatkov_stepennyx_vyrazhenij просто вычисляется)) (стандартный персональный компьютер). 2. Генератор случайных чисел: если уже известно $ f(x_1) $, то предсказать в каких пределах лежит $ f(x_2) $ невозможно (даже если $ x_2 $ рядом с $ x_1 $). ===Шифрование== Односторонняя функция: при $ M=p_1p_2 \sim 10^{300} $ обратную функцию к $ f(x) $ реально найти только если известны сомножители $ p_1 $ и $ p_2 $ (математическая задача факторизации большого целого числа не имеет алгоритмического решения, реализуемого за на всех компьютерах мира за разумное время). **Вывод.** Любой человек в состоянии сгенерировать себе ключи шифрования, абсолютно стойкие к взлому. (И это --- головная боль всех спецслужб мира!). Ключи ((:crypto#algoritm_rsa алгоритма RSA)): $$ p_1,p_2, {\mathbf E}, {\mathbf D} \, . $$ Числа $ p_1,p_2, {\mathbf D} $ держатся в секрете, числа $ {\mathbf E} $ и $ M= p_1p_2 $ публично известны. Шифрование открытого текста $ x \in \{0,1,\dots,M-1\} $ (цифрового его представления) производится по правилу: $$ c= x^{\mathbf E} \pmod{M} $$ и его может выполнить любой человек планеты. А вот дешифрование может произвести либо создатель ключа: $$ x=c^{\mathbf D} \pmod{M} \ , $$ либо тот, кто сможет разложить число $ M $ на множители. ===Цифровая подпись== Создатель шифра может совершить еще одну операцию над открытым текстом $ x \in \{0,1,\dots,M-1\} $. Он может применить к нему функцию дешифрования: $$ s=x^{\mathbf D} \pmod{M} \, . $$ Результатом будет число $ s \in \{0,1,\dots,M-1\} $, представляющее собой абсолютно случайную последовательность цифр. Если это число посылается любому человеку планеты, то последний может применить к нему открытый ключ шифрования $ (\mathbf E, M) $ (который известен публично!). Если результатом действия $$ \left(\widetilde s \right)^\mathbb E \pmod{M} $$ будет __осмысленный__ текст, то сообщение $ \widetilde s $ считается принадлежащим именно предполагаемому отправителю, т.е. создателю ключа $ (\mathbf E, \mathbf D, M) $. Число $ s $ называется **(электронно)-цифровой подписью** (ЭЦП) сообщения $ x $. Тем самым, созданный ключ $ (\mathbf E, \mathbf D, M) $ может служить представителем его создателя в интернете. С одной стороны, решая проблему безопасности переписки, а, с другой стороны, обеспечивая **аутентификацию** сообщения (т.е. принадлежность присланного сообщения именно создателю ключа). Последнее обстоятельство важно в финансовой переписке: отправитель платежного поручения не сможет впоследствии отказаться "отвечать" за его содержание: дескать, "враги подделали при пересылке". ===Хеширование== Что делать если сообщение $ x $ оказывается слишком длинным, т.е. $ x > M $? Тогда к нему применяют дополнительную операцию --- **хеширование** (или просто **хеш**). Разбивают на небольшие блоки: $$ x=x_1 \mid x_2 \mid \dots \mid x_k $$ и вычисляют **контрольную сумму**: $$ h(x) = x_1 + x_2 + \dots + x_k \pmod{\widetilde M} \, $$ где $ \widetilde M \in \mathbb N $ --- произвольное, достаточно большое, но $ \widetilde M < M $. После этого отсылке подлежит пара $$ (x, \left[ h(x) \right]^{\mathbf D} \pmod{M}) \, . $$ Получатель, получив пару $ (\widetilde x, \widetilde s) $ вычисляет $ h(\widetilde x) $ и сравнивает это число с $$ \widetilde s^{\mathbf E} \pmod{M} \, . $$ В случае совпадения считается, что сообщение пришло именно от предполагаемого отправителя, и пришло неповрежденным. На практике используют более сложные хеши, например рекурсивно вычисляемую функцию Девиса-Мейера: $$ h(x)= H_k, \quad \mbox{ где } \ H_j= H_{j-1} \oplus \left[ H_{j-1}^{x_j} \pmod{\tilde M} \right] \quad \mbox{ для } \ j\in \{1,\dots,k \}\ . $$ Здесь значение $ H_0\in \{2,\dots, \tilde M -1\} $ берется произвольным фиксированным, а $ \oplus $ означает операцию побитного сложения по модулю $ 2_{} $ чисел, представленных в двоичной системе счисления. Цель: усложнить возможность подделки любой стороной корреспонденции, а именно, отравителем, получателем или же посторонним злоумышленником. Функция $ h(x) $ уже не будет однозначной на множестве $\{0,1,\dots, \widetilde M-1\} $. Обязательно будут существовать **коллизии**: $$ h(x_1)=h(x_2) \quad \mbox{при} \ x_1\ne x_2 \, . $$ Важно, чтобы эти коллизии были трудно обнаруживаемыми, т.е. чтобы функция $ h(x) $ вела себя как генератор случайных чисел. ==Реестр== (//Англ.//) **ledger**. Другой перевод --- **банковская книга** (**гроссбух**). ===Централизованный реестр== {{ :users:au:share:bc3.png?600 |}} ---- {{ :users:au:share:bc4.png?600 |}} **Недостатки.** Высокая банковская комиссия за транзакционные услуги. и отсутствие анонимности (как самих услуг, так и вовлеченных клиентов). Вся история --- не только финансовая, но и персональные данные --- в "одних руках", чистота которых зачастую сомнительна. И допуск клиента к его же средствам не всегда гарантирован. **Пример.** В **2018** г. Bank of England конфисковал $ 14 $ тонн золота, принадлежавшие Центральному банку Венесуэлы. **Достоинства.** Блокировка нечестного поведения клиента: проблема double spending, когда клиент пытается расплатиться за $2 $ разных товара (две услуги) одной и той же суммой со своего счета. ===Распределенный (децентрализованный) реестр== (//Англ.//) distributed ledger {{ :users:au:share:bc5.png?600 |}} Количество криптовалюты ("крипты") во всей системе и ее распределение по узлам известно каждому узлу в любой момент времени. Если узел $ 1$ намеревается перевести определенное количество крипты узлу $ 2$, то он сначала информирует об этом все узлы системы. {{ :users:au:share:bc6.png?600 |}} Все узлы сначала проверяют выполнимость (валидность) заявки: узел $1 $ обладает необходимым количеством крипты. ===Консенсус == или как добавить запись в реестр? Какому-то узлу нужно поручить создание новой записи и включение ее в реестр. Решить задачу: найти такое число $ x $, чтобы $$ h(x) = \underbrace{0000\dots 000}_{20 \ \mbox{нулей}}\overbrace{*****\dots********}^{\widetilde M-20 \ \mbox{произвольных цифр}} \ ; $$ здесь $ h(x) $ --- упомянутый выше хеш $$ h(x)= H_k, \quad \mbox{ где } \ H_j= H_{j-1} \oplus \left[ H_{j-1}^{x_j} \pmod{\widetilde M} \right] \quad \mbox{ для } \ j\in \{1,\dots,k \}\ . $$ Здесь значение $ H_0\in \{2,\dots, \widetilde M -1\} $ берется уже не произвольным, а зависящим от последней записи в реестре. Кто первый подберет хотя бы одно число $ x $ (и покажет его всем остальным) --- тот и получает право добавить запись в реестр. А в качестве бонуса получает некоторое количество крипты. Этот процесс называется **майнингом** (добычей) крипты. Принятие решения узлами системы на основе реализации такой схемы (или иного алгоритма, требующего использования вычислительных мощностей) называется **консенсусом на основе proof-of-work** (доказательства выполненной работы). А на следующем цикле (для новой записи в реестр) потребуется решить задачу в уже "усиленном" варианте: $$ h(x)= \underbrace{0000\dots 000}_{21 \ \mbox{нулей}}\overbrace{*****\dots********}^{\widetilde M-21 \ \mbox{произвольных цифр}} \, . $$ То есть майнинг дорожает с каждым циклом. А, кстати, сколько он стоит в смысле затрат электроэнергии (не считаю уж необходимость закупки подходящей техники --- //ферм// крипты)? Можно посмотреть ((https://bitexpert.io/wiki/skolko-elektrichestva-potreblyaet-majning-ferma-v-den-i-v-mesyats/ ЗДЕСЬ)). ===Блокчейн == (//Англ.//) Chain --- цепь. Схеме реестра представляет собой последовательность блоков, каждый из которых содержит в себе информацию о предыдущем. То есть, действительно --- цепь {{ :users:au:share:bc2.png?600 |}} ---- {{ :users:au:share:bc7_1.png?400 |}} ===Попытки взлома== Создание "разветвления" (//англ.// fork). Обнаружить коллизию для хеша блока $ N $ и попытаться оспорить приоритет: {{ :users:au:share:bc8.png?600 |}} уговаривая узлы присоединиться к альтернативной цепи блокчейна. **Правило** для узлов: всегда следовать за цепью, имеющей в настоящий момент наибольшую длину. Основное условие стойкости системы: большинство ее участников действуют честно, т.е. соблюдая правила. ===Альтернативы== Достоинства proof-of-work-блокчейна: надежность, взломоустойчивость Недостатки: дороговизна майнинга, низкая пропускная способность (скорость проведения транзакций). Альтернативы? --- Организация консенсуса на других принципах. Например, голосование. Можно и такое, при котором процедура голосования сама ((:interpolation/shamir#decentralizovannyj_protokol_golosovanija делается децентрализованной)). {{ :users:au:share:bc1.png?600 |}} Основные опасности: double spending и "сговор большинства". ===А где деньги?== Как производится конвертация крипты в реальные (фиатные) деньги? Разными способами --- например ((https://novayagazeta.ru/articles/2019/03/13/79856-pod-kryshey-druzhby вот так)). ===Почем нынче биток?== Обменный курс: $ 1 $ BTC = $ 69\,968.1 $ USD Почему так дорого?!