Как стать автором
Обновить

Цифровые наличные на пальцах

Время на прочтение 16 мин
Количество просмотров 5.9K

На изображении — логотип цифровой Найры, валюты Нигерии. Это первая работающая CBDC в мире (после маленьких Багамских островов с их Send Dollar). Запущена в октябре 2021 года.

На Хабре были попытки обсуждения темы цифровых наличных (Digital Currency) и в частности фиатных цифровых наличных (Central Bank Digital Currency, CBDC). Однако, с моей точки зрения, не было ни одного удовлетворительного ни технического, ни социального описания "на пальцах" что это такое и зачем (а главное КОМУ) это нужно.

Если зайти на сайт https://cbdctracker.org/ то можно увидеть, что тема более чем хайповая с точки зрения многих государств... Так как инфобез понятие комплексное, думаю тема цифровых наличных обязательна к изучению для грамотных спецов хотя бы "на пальцах".

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

Кто не любит "социально-экономическое бла-бла-бла" (а зря!) — идите к главе "Пример протокола", там описание алгоритма цифровых наличных "на пальцах".

Занудство. О нюансах перевода: "цифровые наличные", "цифровые деньги" или "цифровая валюта"?

При переводе любых терминов нужно переводить не "в лоб", а стараться учесть техническую культуру обоих языков.

Currency можно перевести как "деньги" или "валюта". В русском языке — это не одно и то же. Валюта это инструмент выражающий обменную ценность ("меняем валюту: рубли на доллары"), а деньги — это универсальный меновой товар имеющий фиксированную измеримую стоимость: купюра в 100 рублей, монета в 10 рублей и т.д.

Так как в Digital Currency мы имеем не счёт, а набор цифровых купюр, то корректнее переводить этот термин как "Цифровые деньги".

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

Central Bank обозначает эмитента денег. То есть они не частные, а "центробанковские". "Центробанковские" криво звучить по русски, "цифровые наличные центрального банка" слишком длинно; поэтому я перевожу CBDC на русский язык как фиатные цифровые наличные.

Наличные, "безналичные деньги", криптовалюты, цифровые наличные

Разберёмся в понятиях.

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

Функции денег:

  1. Мера стоимости. Деньги позволяют оценивать стоимость товаров путем установления цен.

  2. Средство обращения. Деньги играют роль посредника в процессе обмена

  3. Средство платежа. В том числе функция денег, позволяющая времени платежа не совпадать со временем оплаты, то есть когда товары продают в кредит

  4. Средство накопления и\или сбережения. Способность денег участвовать в процессе формирования, распределения, перераспределения национального дохода, образования сбережений населения

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

Немого в сторону о функциях денег

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

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

Получается остаются только две функции: средство обращения и средство платежа.

Свойства денег:

  1. Однородность — отдельные экземпляры товара, монеты\купюры не
    обладают дополнительными свойствами, если они используются как деньги. То есть монета в 10 рублей как деньги равносильна другой монете в 10 рублей.

  2. Делимость — деньги можно оценить одним числом. Например, две кучки денег стоимостью a и b можно представить в виде одной кучки a+b.

  3. Портативность — деньги можно как-то переносить с места на место достаточно удобным способом. Поэтому камни раи это не совсем деньги...

  4. Безопасность:

    1. Неподдельность — деньги невозможно или очень сложно подделать. Фальшивомонетчество уголовное преступление и эмитент денег (почти всегда это государство) борется с этим явлением

    2. Атомарность передачи — передавая деньги другому лицу на сумму a, передающее лицо теряет деньги на ту же сумму a. Деньги не исчезают в никуда и не берутся из ниоткуда. За исключением естественного износа и эмиссии.

    3. Износостойкость — деньги не выходят из строя быстро при правильном хранении и перемещении.

  5. Приживаемость:

    1. Узнаваемость – деньги узнаваемы неким сообществом (обычно это страна или союз стран) как деньги

    2. Универсальность – деньги распространены на определённой
      территории

    3. Согласованность – общество определённой территории согласно
      воспринимать (добровольно или законом) данный товар или
      монету\купюру как деньги

[Физические] наличные — это деньги в каком-либо физическом представлении. Обычно в виде банкнот или монет. Хотя необязательно. Можно использовать шкуры новгородских белок, раковины каури или даже чёрный перец (В V веке король вестготов Аларих I потребовал дань от Рима... перцем). Тут всё понятно, идём дальше.

"Безналичные деньги" — это обязательство банка выплатить вам деньги по требованию. Самое важное что нужно понимать, это то, что "безналичные деньги" — не деньги! При легализации банковского мультипликатора и массовых вкладах почти каждого человека у вас нет атомарности передачи! (sic!) Страдает важнейшее свойство безопасности денег. Именно данный фокус и породил кризис 2008 года. Если ещё не смотрели артхаусный фильм от Paul Grignon по этому вопросу Money as Debt (2006), то обязательно посмотрите! Этот фильм уже классика.

Криптовалюта — совокупность расчётных единиц, учёт которых обеспечивается децентрализованной системой, работающей полностью в автоматизированном режиме по заданным криптографически стойким алгоритмам. Криптовалюты "не отключаемы" даже при наличии такого желания у создателей криптовалюты. Когда-то некоторые люди верили, что криптовалюты могут стать деньгами, но... не вышло. Отсутствует свойство приживаемости. Основная причина, с моей точки зрения: социальная. Так как обещания длятся достататочно долго, а в реальности криптовалюты по-прежнему just4fun, то де факто криптовалюты — это просто завуалированная финансовая пирамида, как МММ.

Цифровые наличные (Digital Currency) — это наличные деньги в цифровом представлении, передача которых осуществляется криптографически стойкими алгоритмами.

Самое сложное свойство этих алгоритмов — это атомарность. Если я перевёл 100 цифровых рублей, то повторно эти же 100 цифровых рублей перевести уже не могу. Атомарность можно обеспечить на доверенном чипе, например SIM-карте; или на удалённом сервере. Это card-based и network-based цифровые наличные соотвественно.

По анонимности цифровые наличные бывают полностью анонимные (никто ничего не знает), анонимно-персонифицированные (банк знает всех, а пользователи нет) и открыто-персонифицированные (все про всех знают)

Первая ласточка: анонимные цифровые деньги Чаума (eCash компании DigiCash)

Почти во всей работах посвящённых деньгам Чаума пишут что он "создал их задолго до биткоина" (например тут).

Это неверно. Деньги eCash были анонимными, но эмиссия (первоначальная инициализация) осуществлялась непосредственно DigiCash, организацией Чаума. Таким образом это цифровые наличные, а не криптовалюты. Сама DigiCash брала обязательство менять обратно свои деньги на доллары, как Яндекс.Деньги в 2000-е.

Проект по итогу умер... Когда я учился в Бауманке, многие криптографы-педагоги говорили что "помогли умереть" люди в чёрном (нет, не наши). Однако никакой "не жёлтой" информации на этот счёт мне не попадалось. Если кому-то что-либо известно — пишите в комментариях.

Мне кажется технология просто опередила своё время. Рано было. Вот и весь сказ.

Подробнее можно почитать например в интервью Чаума 1997 года DAVID CHAUM ON ELECTRONIC COMMERCE How Much Do You Trust Big Brother?

Зачем это нужно?

Offline операции

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


Теперь перейдём к государству.

Если цифровые деньги не анонимны — это меченые деньги. Каждая купюра имеет свой блокчейн и при отправке его online можно много что государству сделать.

Негативные стороны вопроса в стиле "Большого брата" перенесём на конец поста (Действительно, есть серьёзный риск для общества!) А пока перечислим позитивные моменты

Ликвидация коррупции (ну почти)

В легализме можно быть коррупционером, но "законным" коррупционером. Вы не можете расстрелять человека только потому что он враг народа (кстати, кто не в курсе, это придумали в Древнем Риме, а не при Сталине и не при якобинцах). Люди, которые берут взятки — не идиоты. Ранее взятки брали борзыми щенками, сейчас существуют более интересные схемы.

Представьте что будет, если вы законом ЗАСТАВИТЕ всех государственных и "окологосударственных" подрядчиков и субподрядчиков (вплоть до выдачи зарплаты сотрудникам) работать только с цифровыми наличными?... Далее на физлицах не важно. Все компании-"прокладки" будут видны как на ладони! Любые схемы будут палиться на раз! У вас будет жжёсткая доказательная база. Звёздочки ФСБ-шникам будут сыпаться пачками. Главное подумать, что делать с армией ФСБ-шников после ликвидации (ну почти) коррупции... Ой, чё то заговорился. Ладно, дальше.

Контроль вывоза\ввоза денежной массы из экономики

Экономика "адаптируется" к денежной массе дефицитом и\или инфляцией. Если резко вбросить денежную массу (или наоборот изъять) это может сильно повредить экономике.

По этой причине почти во всех странах есть лимиты на ввоз и вывоз наличности. Если хотите больше -- декларируйте.

При цифровых наличных нет такой проблемы.

Революция в науке экономике

Можно накрутить Data Science на объем всех транзакций и проводить экономические прогнозы. По сути цифровые деньги создадут новую экономику как науку!

Человечество больше не будет тыкаться палочкой, надеясь попасть куда нужно.

Это же прекрасно!

Плановая экономика 2.0

В плановой экономике есть три проблемы:

  1. Разрастание позиций производства — чем сложнее общество, тем больше позиций. Чем больше позиций тем сложнее сделать план.

  2. Контроль производства — проблема "приписок"

  3. Сбрасывание издержек профицита\дефицита — мир не идеальный. Когда виден дефицит или профицит, нужно сбрасывать издержки на другие экономические системы.

Первые две проблемы цифровые деньги не решают. А вот третью могут!

А как решить проблему 1 и 2 ?

Первая проблема решается просто автоматизацией. Большая компьютерная экспертная система, выводящая более-менее адекватный план на входных данных. И тогда не важно сколько наименований продукции. В СССР был проект ОГАС, гениальная идея В.М.Глушкова и А.И.Китова. Однако уже подгнившая номенклатура как господствующий квазикласс-квазисословие увидела угрозу своего господства и зарубило проект.

Проблема с приписками решается токенизацией продукции. Если есть продукция, она рано или поздно будет куплена (или утилизирована). Таким образом "подвисшие токены" в системе покажут приписки.

Третья проблема решалась в СССР взаимодействием с частным бизнесом (артелями), пока Хрущёв не запретил предпринимательство (1956-1960). Как только было понятно что "накосячили с планом" этой информацией делились с бизнесом. Утрировано: перепроизводство тканей; следовательно, частному бизнесу (артелям) нужно нарастить мощности и пошить больше одежды\штор и т.д.

Но как прогнозировать дефициты и профициты до того как они возникнут? И желательно как можно раньше. Чем быстрее среагируем, тем меньше будет проблем.

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

Эту систему, кстати, можно замкнуть как обратную связь на построение следующего плана. То есть плановая экономика будет на 99.9% сама себя регулировать. Действовать почти автономно.

Контроль инфляции

Вы видите здесь и сейчас как меняются цены в каждом уголке города, деревни.

Имея систему цифровых наличных, есть время сразу принять антиинфляционные меры по тому или иному товару\услуге, а не исправлять ситуацию после того как инфляция уже случилась.

Упрощение бюрократии

... или её полная автоматизация. Если видно куда ушла каждая купюра и если можно запросить статус получателя, то в чём проблема?

Вот ИП-шник. Покупает куриц, продаёт шаурму. Вот его цифровой счёт. Видно кто именно платил и кому платил он. Автоматически нельзя понять?


Пример протокола

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

Всего у нас будет три стороны:

  1. банк эмитент;

  2. кошелёк А;

  3. кошелёк Б.

Для того чтобы цифровые наличные работали, нужно прописать три алгоритма:

  1. инициация нового кошелька;

  2. эмиссия новой цифровой банкноты;

  3. перенос банкноты с сервера банка на кошелёк;

  4. перенос банкноты с кошелька на другой кошелёк.

Последний пункт у нас будет offline, так интересно! С network-based все могут.

Секреты на стороне эмитента

В системе будет использоваться какой-нибудь алгоритм асиметрического шифрования, например RSA или отечественный ГОСТ 34.10-2018.

Наш эмитент будет иметь два ключа:

  1. bpk — bank private key, закрытый ключ шифрования

  2. bok — bank open key, открытый ключ расшифрования

На этом всё. Для примера "на пальцах" этого достаточно.

Инициация нового кошелька. Секреты на стороне доверенного носителя кошелька.

Мы будем хранить ключи на доверенном носителе. Для нашей card-based системы это будет SIM карта. А сам кошелёк будет представлять собой приложение для телефона.

Можно ключи хранить на USB-токене или на другом доверенном носителе.

Введём обозначение:

(message)[private\_key]

Это значит что сообщение message было зашифровано приватным ключом private_key. Имея публичный открытый ключ можно расшифровать сообщение и получить искомый message.

Банк гененирует два ключа и одну подпись:

  1. spk — sim private key, закрытый ключ шифрования асиметрического алгоритма, хранящийся на доверенном носителе

  2. sok — sim open key, открытый ключ шифрования асиметрического алгоритма, хранящийся на доверенном носителе

  3. (sok)[bpk] — подпись хеша от sok приватным ключом bpk. Эмиссия новой банкноты

По (sok)[bpk] нужно важное пояснение. Чтобы расшифровать, нужен ключ bok, который публично доступен. Таким образом владелец пары (spk, sok) может доказать что пара ключей создана не им, а эмитентом.

Мы генерируем для стороны А свою пару ключей и подпись, для стороны B свою пару ключей и подпись. То есть это разные пары. Обозначим их для кошелька А как spkA, sokA, (sokA)[bpk], а для кошелька B как spkB, sokB, (sokB)[bpk].

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

Введём понятие bnid (banknote id) — как идентификатор банкноты. Ведём глобальную переменную сounter в доверенном носителе, которая никогда не уменьшается. Изначально установим его в 1.

Создадим словарь(map) wallet вида: counter -> bnid

Введём функцию get_counter(bnid), которая делает следующее:

  1. если bnid есть в значениях wallet, вернуть ошибку

  2. взять глобальную переменную counter

  3. Определяем wallet[counter] := bnid

  4. увеличиваем counter на 1

  5. вернуть на выходе counter.

Данная функция реализована в интерфейсе доверенно носителя. Обратите внимание что для какого-либо counter-а определён только один bnid

Эмиссия новой цифровой банкноты

Введём обозначение:

message_1 | message_2

Как побайтовую конкатенацию сообщений.

Введём обозначение:

hash(message)

как хеш от сообщения message. Какой именно хеш — решите сами. Например sha256 или Стрибог.

Первый блок цифровой банкноты — это структура данных, имеющая поля:

  1. bnid — banknote id, идентификатор банкноты

  2. amount — величина банкноты. Например "100 рублей"

  3. ... — какие-либо другие данные. Например время эмиссии банкноты, может быть код валюты, идентификатор банка (если у нас несколько эмитентов) и так далее

  4. h = hash (bnid | amount | ...) — хеш всех вышеперечисленных величин. Величины конкатенируются.

  5. (h)[bpk] — подпись хеша

Таким образом имея bok ключ можно убедится что цифровая банкнота настоящая. Для стороны А или Б нужно вычислить хеш от конкатенации всех величин, после расшифровать (h)[bpk] и убедится что хеши совпали.

Перенос банкноты с эмитента на кошелёк А

Здесь и далее вся коммуникация происходит в защищённом канале связи.

Итак мы хотим передать цифровую банкноту от банка эмитента кошельку A.

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

Благодаря полю (sokА)[bpkА] кошелёк А может доказать что он реальный кошелёк, созданный эмитентом.

На первом шаге сервер передаёт кошельку инициированную банкноту (первый блок)

Передача Блока 1 от эмитенту кошельку А.
Передача Блока 1 от эмитенту кошельку А.

Первым делом кошелёк А проверяет корректность блока 1. Для этого вычисляется хеш h_check=hash(bnid|amount|...), с помощью открытого bok расшифровывает (h)(bpk) и проверяет равенство хешей h==h_check.

Далее кошелёк А создаёт новый блок 2:

  1. bnid (banknote id), равный bnid первого блока

  2. parent_h = h — это значение h предыдущего блока.

  3. (sokA)[bpk] — подпись sokA банка-эмитента

  4. counter = get_counter(bnid) — вызов функции get_counter в доверенном носителе кошелька А. Записываем значение counter.

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

  6. h0 = hash (bnid | parent_h | counter | ... ) — хеш всех вышеперечисленных значений

  7. (h0)[spkA] — подпись, доказывающая, что блок создан кошельком А.

  8. пустое поле

  9. пустое поле

Важное замечание: процедура 4 и 7 являются атомарными. То есть доверенный носитель создаст counter и подпишет весь блок в рамках одного вызова! Процедура подписи, отдельная от counter-а отсутствует. Это важно с точки зрения информационной безопасности. Почему? Напишем позднее.

Далее кошелёк А передаёт блок 2 эмитенту

Структура данных на шаге передачи блока 2 от кошелька к банку-эмитенту. 
Одинаковые поля выделены одним цветом.
Структура данных на шаге передачи блока 2 от кошелька к банку-эмитенту. Одинаковые поля выделены одним цветом.

Эмитент подписывает блок 2:

  1. bnid

  2. parent_h

  3. (sokA)[bpk]

  4. counter

  5. ...

  6. h0

  7. (h0)[spkA]

  8. h = hash (bnid | parent_h | counter | ... | h0 | (h0)[spkA] )

  9. (h)[bpk]

После блок 2 передаётся кошельку А.

Итоговый блок 2 передаётся Кошельку А
Итоговый блок 2 передаётся Кошельку А

С этого момента банкнота bnid принадлежит кошельку А.

Важное замечание: мы считаем банк-эмитент порядочной стороной. То есть после передачи банкноты с номером bnid, данная банкнота более не будет передаваться никакой стороной. Это в интересах эмитента не порождать поддельные деньги, так как за каждый цифровой рубль\юань\найру эмитент обязуется предоставить физические наличные.

Перенос банкноты с кошелька А на кошелёк Б

Перенос между кошельками существенно отличается от переноса между банком-эмитентом и кошельком. Ведь одна из сторон может быть непорядочной и дважды передать одну и ту же банкноту между разными получателями. Таким образом мы получим "фальшивые" цифровые наличные.

Доверять мы можем только доверенной среде в кошельке А или Б. Но не самому приложению или сети передачи данных.

Итак, у нас есть некий Блок i (это не обязательно Блок 2) parrent_h указывает на Блок i-1, его parrent_h на предыдущий блок и так далее, пока не сошлёмся на Блок 1.

Кошелёк А передает все блоки кошельку Б

Кошелёк Б проверяет их корректность, последовательно проверяя все подписи. Далее, аналогично предыдущему алгоритму, создаёт новый Блок (i+1) c двумя пустыми полями:

  1. bnid (banknote id), равыный bnid первого блока

  2. parent_h = h — это значение h предыдущего блока.

  3. (sokB)[bpk] — подпись sokA банка-эмитента

  4. counter = get_counter(bnid) — вызов функции get_counter в доверенном носителе кошелька Б. Записываем значение counter.

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

  6. h0 = hash (bnid | parent_h | counter | ... ) — хеш всех вышеперечисленных значений

  7. (h0)[spkB] — подпись, доказывающая, что блок создан кошельком Б.

  8. пустое поле

  9. пустое поле

Аналогично предыдущему алгоритму передаем Блок (i+1) кошельку А.

А дальше вот такой фокус (для удобства см. ещё и картинку).

  1. Определим counterA как counter предыдущего Блока (i)

  2. Обращаемся к кошельку А. Проверяем что bnid == wallet[counterA]. Если это не так (в частности в словаре нет ключа), то ошибка и конец алгоритма

  3. Удаляем ключ counterA из wallet словаря кошелька А.

  4. Берём хеш и подписываем Блок (i+1)

Важные нюансы:

  • Пункты 2, 3, 4 делаем в доверенной среде!

  • Пункты 2, 3, 4 атомарны. То есть это одна функция.

Пример подписи Блока i+1 кошельком А. В словаре wallet есть четыре записи. Третья содержит counterA предыдущего блока, следовательно купюру bnid ещё НЕ передавали и можно подписать Блок i+1
Пример подписи Блока i+1 кошельком А. В словаре wallet есть четыре записи. Третья содержит counterA предыдущего блока, следовательно купюру bnid ещё НЕ передавали и можно подписать Блок i+1

Далее передаём по сети Блок (i+1)

Итоговое состояние блокчейна для купюры bnid. В wallet B появились (ключ, значение) в виде (counterB, bnid)
Итоговое состояние блокчейна для купюры bnid. В wallet B появились (ключ, значение) в виде (counterB, bnid)

C этого момента кошелёк Б владелец купюры с номером bnid. Обращаем внимание, что counterA уже отсутствует в кошельке А, следовательно данную купюру А повторно переслать не может. У кошелька Б есть counterB, следовательно он имеет возможность передачи купюры.

А если у нас online взаимодействие, а не offline ?

В этом случае не нужно городить никаких огородов с counter-ами и даже с доверенной средой.

Вся безопасность обеспечивается на сервере. Данная задача давно решена в прикладной криптографии.


Проблема больших хвостов

Есть проблема накопления блоков для каждой купюры... На определённом этапе к каждой купюре будет такой хвост блокчейнов, что хранить их будет крайне затруднительно...

Передавая банкноту из одного кошелька в другой мы увеличиваем блокчейн для КАЖДОЙ цифровой купюры. Это неудобно, необходим механизм обмена на купюры с более малым хвостом, либо "схлопывания" блокчейна
Передавая банкноту из одного кошелька в другой мы увеличиваем блокчейн для КАЖДОЙ цифровой купюры. Это неудобно, необходим механизм обмена на купюры с более малым хвостом, либо "схлопывания" блокчейна

Для этого, как только устройство будет доступно online, можно установить связь с сервером эмитента и поменяться банкнотами: отдать все банкноты с длинным хвостом на новые банкноты (у которых только блок 1).

Можно так же в каждый блок блокчейна добавлять пустое поле на случай подписи эмитента. Эмитент подписывает эти блоки как только их кто-то первый пришлёт. В этом случае можно хранить только первый блок и последний блок с подписью эмитента. А остальные блоки удалить из памяти.

Таким образом в цифровых наличных время от времени нужно быть online. Для удобства пользования.

Почему это безопасно?

Безопасность обеспечивается доверенной средой внутри каждого из кошельков. Без доверенной среды решить задачу offline передачи денег невозможно.

Для зануд Для любителей математики можно доказать формально. Кому интересно — см. под спойлером.

Доказательво необходимости существования доверенной среды в offline передаче цифровых наличных

Докажем от противного.

Предположим что можно решить задачу однократной передачи цифровой банкноты БЕЗ доверенной среды и offline (без доступа в глобальную сеть).

Любой алгоритм, работающий где угодно, можно абстрактно предствить в виде конечного автомата:

A=(S, X, Y, \delta, \lambda)

где S — множество состояний, X, Y — множество входа\выхода, δ — функция переходов,  λ — функция выходов.

Предположим что мы владеем купюрой в "100 рублей" и это соотвествует некоему состоянию a∈S. Предположим что мы передали купюру кому-либо и это соотвествует состоянию b∈S.

Так как среда не доверенная, то мы внутри неё можем произвольно менять память. Таким образом на формальном языке конечных автоматов имеем утверждение:

\forall s_0, s_1 \in S , \exists x \in X: \delta(s_0, x) = s_1

нетрудно догадаться что волшебный x для функции переходов δ это, например, команда dd для Linux оболочки с правами root. :)

Следовательно находясь в состоянии b, можно перейти в состояние a.

Но в состоянии a мы владеем 100 рублями, которые ранее передали. Следовательно мы можем повторно те же 100 рублей передать другому лицу.

Получили противоречие.

ч.т.д.

Что мы имеем в доверенной среде?

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

Следовательно подписывая новый блок мы можем быть убеждены что более никогда не подпишем никакой другой блок.

Таким образом counter — это что-то типа одноразового билетика.

А что если доверенную среду поломают?

Если это токен или SIM-ка, то задача нетривиальная. В конце концов мы же пользуемся банковскими картами? Пропусками? Ведём online-бухгалтерию?..

Но может показаться что риск с цифровыми наличными более существенен. Однако это не так. Даже если кто-то поломает SIM карту (или токен), он НЕ ПОЛУЧИТ доступ ко всем деньгам системы. Хакер просто сможет бесконтролько умножать только те bnid, которые у него находятся.

Во-первых эти bnid нужно как-то получить. Во-вторых, что более существенно, хакер должен эти bnid-ы как-то слить.

Если у пользователей будет привычка высылать блокчейны в online как только, как это будет возможно, это даст большой риск для "цифровых фальшивомонетчиков".

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

Социальная проблема: Большой Брат

"Никому нельзя будет ни покупать, ни продавать, кроме того, кто имеет это начертание, или имя зверя, или число имени его." (Откр, 13:17)

Давайте серьезно. Да, есть странные люди, которые против ИНН-нов... Но в современном цифровом мире есть реальные угрозы нашей свободе и безопасности.

Как быть с цифровыми наличными с точки зрения проблемы Большого Брата? Возможны три варианта:

  1. Просто забить и плыть по течению. Принять как неизбежность.

  2. Не внедрять технологию, не смотря на социальные преимущества.

  3. Осознать проблему и создать систему обратной связи для её контроля

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

Согласившись на п.2, мы отстанем в технолоическом развитии в XXI веке. Поэтому я против этого.

Остаётся п.3, если я ничего не напутал и нет других вариантов.

Любой анализ информации цифровых наличных должен рассматриваться либо в обобщённом виде (152 ФЗ, привет!), либо крайне деликатно по жжёстким законам и правилам.

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

Статистика подобной слежки ежегодно (без имён) должна публиковатся в открытом доступе.

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

Я думаю даже, что сама система цифровых наличных (как протокол передачи) должна быть Open Source. Много вопросов и страхов тогда сами собой отпадут. И внутри системы нужно предусмотреть физическую невозможность блокировки offline кошельков. Есть негодяй? Ловите его очно. Суд и только суд. Не должно быть физической возможности заблокировать кошелёк человека по нажатию кнопки.

Если увидите орфографическую ошибку — не поленитесь и напишите мне в личку.
Р.S.> Добавил тег "криптовалюты", так как тега "цифровые наличные" нет

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Хаба «цифровые наличные» нет, поэтому я добавил хаб «криптовалюты», что не верно. Попросить НЛО добавить тег «цифровые деньги»
44.44% Нет, тема пока ещё молодая! Пользуйся хабом «криптовалюты» 16
47.22% Да, конечно! 17
8.33% А это разве не одно и то же? (Да, я НЕ читал статью) 3
Проголосовали 36 пользователей. Воздержались 7 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Нужно ли внедрять цифровые наличные?
42.86% Нет, проблема Большого Брата неустранима. Цифровые наличные — зло 21
53.06% Да, но аккуратно и с умом. 26
4.08% Другой вариант (напишу в комментарии) 2
Проголосовали 49 пользователей. Воздержались 7 пользователей.
Теги:
Хабы:
+4
Комментарии 52
Комментарии Комментарии 52

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн