Рисуем электронные деньги

в 11:35, , рубрики: bitcoin, Dura Lex, Qiwi, webmoney, криптография, платежи, платежная система, платежные системы, Стеганография, электронные деньги, эмиссия, метки: , , , , , , , ,

imageСегодня я расскажу об идеи, которая наверняка хоть раз приходила в голову каждому, кто впервые сталкивался с электронными средствами платежа. А именно о том, как было бы здорово, если бы с электронными деньгами можно было обращаться как с обычными файлами: создавать, перемещать, отправлять по эл. почте, выкладывать на FTP.

В большинстве случаев для этого достаточно штатных средств любой ОС.

Предупреждение. Описанные способы оборота денежных средств и их эквивалентов носят концептуальный характер.
Использование лишь описанных средств может подвергать рискам ваше имущество и имущественные права.

Вводная

Идея использования файлов для денежных расчетов родилась сразу после знакомства с системой Webmoney, а точнее одним из её сервисов — paymer.com
К слову сказать, черновик этой заметки появился более 6-ти лет назад и уверен на 100%, что уже тогда об этом же подумало ещё куча народа.

Напомню, что с помощью сервиса paymer.com возможен выпуск расчетных ордеров, обеспеченных активами эмитента ордера, находящихся или не находящихся в распоряжении у агента системы. Агентов на текущий момент два:
* E-currency — учитывает обязательства в валюте WM. Активы находятся в распоряжении агента;
* Obligation — учитывает обязательства в свободной форме. Агент обеспечением по ордерам не распоряжается.

Выпустить ордера, обеспеченные WM, может любой пользователь системы Webmoney.
На требованиях и процедуре выпуска останавливаться смысла нет, они просты и описаны на сайте сервиса.
На выходе мы получаем список реквизитов выпущенных ордеров, обеспеченных, допустим, WMR, а именно номер и код каждого ордера. Любой пользователь, знающий номер и код ордера может получить по нему деньги на свой WMR кошелёк. В частности, именно через paymer были реализованы коды карт пополнения WMR и WMZ.

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

Сейчас вместо paymer мы можем использовать любого гаранта платежей или escrow-сервис, предоставляющий
доступ к финансовым активам посредством уникального кода.
Например, раньше у QIWI были «переводы на емайл», позднее переименованные в QIWI.Яйца.
Закрытый ключ от Биткоин кошелька с деньгами, тоже является хорошим примером.

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

Реализация

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

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

В итоге мы получим россыпь файловых монет, которую нужно где-то хранить. Можно хранить в папке на рабочем столе.
Но лучше для этих целей подойдёт любой файл-архив (рекомендую RAR), который будет выполнять роль кошелька.
Опять же регистрируем в системе отдельное расширение под него и соответствующую картинку.

Теперь интуитивно понятным методом «тащи/кидай» мы можем пополнять свой кошелёк свежими купюрами.
А для надёжности даже ставить на него пароль. Сам кошелёчек можно везде с собой носить на флешке.

Улучшаем идею

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

Один из принципов ТРИЗ: механизма нет, а функции его выполняются.

Выше у нас получился текстовый файл и иконка, зарегистрированная в системе, т.е. два файла.

Зачем нам текстовые файлы для хранения платежных кодов, когда мы уже используем
иконки для обозначения этих файлов?! Убираем посредника методом стеганографии.
И так как я обещал использовать штатные средства ОС, сделаем это обычной склейкой файлов.
В консоле это может выглядеть так:

copy /b filename.txt+filename.ico filename.ico

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

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

Очевидно, для кошелька такое решение будет менее удобным. Текстовым редактором содержимое архива не посмотришь.
Да, мы можем по сигнатуре вычислить начало архива, вырезать его и, вставив в новый файл, открыть.
Но для архивов RAR (не зря же я его рекомендовал) есть более элегантый способ: при склеивании его с картинкой *.jpeg вышеописанным способом, указанную картинку мы можем открывать архиватором напрямую. Об этом даже была статья на Хабре.

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

На этом использование штатных средств ОС заканчивается. Все дальнейшие улучшения требуют разработки дополнительных утилит. Но даже в таком виде файловые монеты можно использовать для однонаправленной передачи, например на форумах.
Подробнее ниже.

Добавим стеганографию

Строго говоря, склейка текстового файла с файлом иконки уже является стеганографией, но мы можем продвинуться глубже — зашивать платежные реквизиты напрямую в *.ICO файл методом LSB.
Штатными средствами ОС тут уже вряд ли обойдёшься, но зато и файл кошелька с паролем нам уже будет не нужен.

Для работы с большими кошельками (конвертами) в силу размера файла и (или) необходимости скрытности вместо *.ICO файлов можно использовать jpeg (как для обычной склейки, так и для LSB). Тем более большинство сервисов для загрузки чаще разрешают именно jpeg, а не ICO.

При склейке jpeg картинки с кошельком она продолжает открываться графическими редакторами и вьюверами.
При отображении миникартинок (thumbnail) в системе этот вариант ничем не проигрывает варианту с иконками.

Практическое использование

Заметка была бы неполной, если бы я не упомянул о практических примерах использования всего описанного выше и возможных путях развития идеи.
Во-первых, такие файловые монеты вполне могли бы заменить «лайки», «спасибо» на многих форумах. Отображаются они штатными средствами браузера и не требует отдельных толстых клиентов, паролей в личные кабинеты и прочие ЭЦП. Интеграция в движок наипростейшая: нажимает пользователь «спасибо», ему предлагается загрузить файл-монету. Блок с картинками монет отображается только автору поста.

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

Файловые монеты удобно использовать для поощерении пользователей того или иного ресурса.
При этом получатели таких бонусов через системы личных сообщений легко могут ими поделиться с другими пользователями.

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

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

Там, где стеганография, там и криптография

[img src=«картинка с ДиКаприо» alt=«дань моде» title=«Глубже» /]

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

При желании, зашифровавав реквизиты своим закрытым ключом, мы даже можем выпустить свою собственную валюту, обеспеченную рублями например, выступив при этом гарантом по ней. При такой реализации каждый участник может убедиться:
1) что монета действительно выпущена гарантом;
2) по номеру узнать номинал монеты;
3) при необходимости «обналичить» монету у гаранта;
Эта схема вполне подходит для небольших интернет-сообществ (форумов, пользователей групповых IRC чатов, групп в социальных сетях) как средство внутренних расчетов при проведении аукционов или прямых сделок купли-продажи между участниками.
В этом случае защитой от банального копирования файла является доверие и страх перед исключением из группы навсегда.
Гарантом может выступить админ ресурса.

Если же на доверие рассчитывать не приходится, но исключение из группы всё ещё весомый фактор для каждого участника, то можно усложнить схему, добавив обязательную подпись монеты плательщиком своим ключом (ЭЦП) при передачи. Т.е. в каждой монете будет формироваться непрерывный список подписей, каждая из которых основана на подписи предыдущего владельца и будущего. Да-да, опять вспоминаем про Bitcoin. Такая схема обеспечит целостность списка от изменений. И позволит при предъявлении гаранту копированной монеты, сразу выявить на каком участнике это произошло. А чтобы список не разрастался, на уровне системы можно ввести ограничение на его размер, по достижении которого, монета обязана быть предъявлена к гаранту, который её либо заменит, либо оплатит.

Я привёл лишь часть схем использования двусторонних сделок, основанных на криптографии двух пар ключей (на стороне передающего и принимающего). Неисчерпаемым источником идей практического использования может стать применение криптографических алгоритмов с несколькими открытыми ключами, и в частности схемы разделения секрета.

Если кратко, то секретный ключ разделяется на несколько частей (долей) и передается нескольким участникам системы.
Каждый участник сам по себе не может восстановить секретный ключ, но объединившись вместе с другими участниками по определённым правилам это сделать можно.

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

  • Совместное использование с мошенниками
  • Совместное использование без Трента*
  • Совместное использование без раскрытия долей
  • Подтверждаемое совместное использование секрета
  • Схемы совместного использования секрета с мерами предохранения
    (голосавание «да»/«нет» за раскрытие секрета)

* Трент — участник разделяющий секрет на части.

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

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

А как же всё-таки нарисовать именно свои электронные деньги?

Итак, чего мы добились:

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

Но остался один минус — привязка к уже существующим платежным и расчетным системам и сервисам.
И хотя у того же paymera, по словам разработчиков, юридическая схема позволяет в случае чего обратиться в суд для взыскание денег. Мы попробуем использовать более привычные юридические конструкции.
Помогут нам в этом ФЗ об Электронной подписи и ФЗ о Копирастии четвертая часть ГК, там где разговор об авторском праве.

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

Не вдаваясь глубоко в юридические ньюансы, для первого способа нам понадобится:

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

Сразу сниму опасения некоторых людей, которые боятся долгов и кредиторов. Договор на 49 лет, заключить вы его можете только после 18 лет, а это значит, что, если вы живёте в РФ, то статистически не застанет момент исполнения договораю.

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

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

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

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

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

Если же вы не обладаете известностью, то построить свою платежную систему на займах можно по образцу ripple. Суть такова: займы оформляются только между друзьями, но не выше определённого лимита. Если нужно отправить или получить деньги от кого, кто не входит в Ваши круги, выстраивается цепочка между друзьями друзей и т.д. Работоспособность такого вариант держится полностью на теории «шести рукопожатий», а минимальная нагрузка на каждого человека ограничена «Числом Донбара».

Второй способ связан с авторским правом.
Для этого Вам необходимо нарисовать свою оригинальную иконку для файла-монетки. В качестве эмиссии вы будете просто её продавать, как картину.
При этом важно каждую картинку снабжать уникальным номером, подписанным Вашим ЭЦП. И поскольку при встраивании этой информации в файл он будет немного изменяться (младшие биты будут разные, нужно следить за коллизиями), юридически каждый раз вы будете продавать чуть-чуть изменённую картину.
А чтобы придать «вес» своим деньгам, на сайте можно вывесить публичную оферту о том, что, например, каждый последний день месяца вы готовы выкупать свои картины по цене продажи. Т.е. придать некоторую конвертируемость своей новой валюте. Кстати, схожим путём действовал один наш соотечественник в 1994 году, объявив свою подпись произведением искусства.
С «фальшимонетчиками» можно бороться, используя свои авторские права. Ибо при продаже картины исключительная права на неё автоматом новому владельцу не переходят.
Для осуществления обращения такой валюты уже нет нужды делать повторные договора купли-продажи. Юридическая чистота при «оплате» картиной не требуется. А чтобы эмитент был уверен в человеке обращающемуся за выкупом картины, достаточно в конце файл вести связный список ЭЦП владельцев, как это происходит в Биткоине.

Минус указанного способа в необходимости платить НДФЛ с продажи «картин». Но если срок обращения каждой конкретной «картины» ограничить как минимум двумя годами, то процентами от использования денег НДФЛ можно отбить.

Первый и второй способ наверняка можно объединить.

Заключение

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

Автор: RomanPyr

Источник

Поделиться

* - обязательные к заполнению поля