Русский
Русский
English
Статистика
Реклама

Crypto

Самописная криптуха. Vulnerable by design

08.09.2020 12:21:09 | Автор: admin

Автор: Иннокентий Сенновский (rumata888)


Как заинтересовать студента скучным предметом? Придать учебе форму игры. Довольно давно кто-то придумал такую игру в области безопасности Capture the Flag, или CTF. Так ленивым студентам было интереснее изучать, как реверсить программы, куда лучше вставить кавычки и почему проприетарное шифрование это как с разбегу прыгнуть на грабли.


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


А переборщишь с хардкором и взвоют команды, у которых это непрофильная предметная область или первый серьезный CTF.


В статье я расскажу, как наша команда нашла баланс между хм, нечто новенькое и это какая-то жесть, разрабатывая таск по крипте для финала CTFZone в этом году.


Финальный scoreboard CTFZone 2020


Финальный scoreboard CTFZone 2020


Содержание


  1. Необязательное введение: объясняем CTF за 2 минуты
  2. Как мы поняли, что нам нужна крипта
  3. Как мы выбрали стек
  4. Как мы нашли идею для задания
    4.1. А. Что такое Гамильтоновость графов
    4.2. Б. Как идентифицировать себя с помощью Гамильтонова цикла
  5. Как мы построили задание
    5.1. Протокол: вид сверху
    5.2. Протокол: внутренности
    5.3. Последняя уязвимость
  6. Как мы разрабатывали таск
  7. Как мы тестировали таск
  8. Как мы боролись с читерством
  9. Заключение

Необязательное введение: объясняем CTF за 2 минуты


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


Различают два вида турниров: jeopardy и attack-defense.


Турниры jeopardy проходят онлайн. Он устроены по формату американской телевикторины Jeopardy!, в российской версии известной как Своя игра. Участникам предлагают разнообразные задания, за выполнение которых начисляют очки. Чем сложнее задание, тем дороже правильный ответ. Выигрывает команда, у которой больше всего очков.


Турниры attack-defense (AD) немного сложнее. Участники соревнуются в предоставленной организатором инфраструктуре, поэтому такие соревнования обычно проводят офлайн например на конференциях. Часто в этом формате проходят финалы: для участия в attack-defense командам нужно попасть в топ-10 или топ-20 по итогам отборочного турнира jeopardy.


На старте соревнования AD команды получают vulnboxes виртуальные машины или хосты с уязвимыми сервисами, которые необходимо защищать. У всех команд vulnboxes одинаковые. Задача участников защитить свои хосты, при этом сохранить их доступность для сервера проверки (checker). То есть нельзя обеспечить безопасность хоста, просто закрыв к нему доступ.


Одновременно нужно атаковать хосты соперников, чтобы захватить флаги уникальные идентификаторы, которые сервер проверки размещает на хостах на каждом раунде. Как правило, раунд длится 5 минут. За захват флага команды получают очки. Если vulnbox не доступен для сервера проверки, очки отнимаются.


Итак, перед каждой командой стоят следующие цели:


  • поддержать функционирование vulnbox;
  • устранять ошибки, чтобы защитить его отатак;
  • атаковать хосты соперников, чтобы захватить флаги.

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


  • web,
  • pwn,
  • misc,
  • PPC,
  • forensic,
  • reverse,
  • crypto (то есть криптография, а не криптовалюта).

Бывают и миксы, и задания вне категорий, но вообще этот список скорей описывает задания для турниров jeopardy. У некоторых тасков нет интерактивного компонента, и для AD они плохо подходят. В категории Криптография тоже есть свои нюансы, из-за которых мы долго сомневались, включать ли крипту в финал нашего соревнования CTFZone.


Как мы поняли, что нам нужна крипта


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


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


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


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


Иными словами, криптографические задания довольно часто разочаровывают либо организаторов (потому что команды недостаточно углубляются в задание), либо участников. Поэтому у нас были большие сомнения, стоит ли вообще делать крипту.


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


Таск должен был быть сложным, но одновременно под силу новичкам, но чтобы решение стоило потраченных усилий. Элементарно, не правда ли? :)


Как мы выбрали стек


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


Мы подумали, что для квалификационного этапа DEF CON это несерьезно, поэтому для нашего стека решили использовать Python + C (звучит убийственно, знаю). Большая часть функциональности была реализована на языке C, тогда как Python обеспечивал удобную обертку для манипуляций с сокетами, а также функциональность сервера.


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


Как мы нашли идею для задания


Мы не хотели, чтобы в задании было много уязвимостей, известных любому участнику CTF, поэтому решили остановиться на менее стандартном решении Zero Knowledge Proofs of Knowledge (ZKPoK), то есть протоколе доказательства с нулевым разглашением. Идея заключается в том, чтобы доказать, что вам известна какая-либо секретная информация, не раскрывая эту информацию. Было решено использовать ZKPoK в качестве схемы идентификации: если сервер проверки сможет что-либо доказать, он получает флаг. В основу нашей схемы была положена гамильтоновость графов.


А. Что такое Гамильтоновость графов


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


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


Найти Гамильтонов цикл для графа сложная задача. С другой стороны, создать граф с Гамильтоновым циклом проще простого. Я покажу, как это сделать.




Но сначала немного вводной информации.


Мы решили представить наши графы с помощью матриц смежности. Это квадратные матрицы, в которых две вершины, соединенные ребром, обозначаются единицей в соответствующей ячейке, и нулем, если они не соединяются. Например, имеется 4 вершины: A, B, C, D. A соединена с B, C соединена с D.


Матрица будет выглядеть следующим образом:
Матрица


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


Итак, если вы создаете граф с известным Гамильтоновым циклом, первым делом нужно перемешать массив вершин: например, ABCD BADC. Из этого массива вы определяете циклический порядок следования вершин (контур): BADCB.




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


Матрица


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


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


Один из возможных результатов таких действий это следующая матрица смежности:


Матрица смежности


Как видно, каждому ребру (x, y) соответствует (y, x), и я добавил ребро между B и D.


Б. Как идентифицировать себя с помощью Гамильтонова цикла


Схема простая:


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

Часть с доказательством проходит в три этапа, не считая подготовительного, при этом мы принимаем роль Доказывающего (Prover), а сервер выполняет роль Проверяющего (Verifier).


0. Подготовительный этап. Мы переставляем вершины графа в случайном порядке, например: ABCDA. Используя эту перестановку, мы получаем новый граф, который будет изоморфным (т. е. все отношения между элементами сохранятся) по отношению к первому. Это достигается за счет представления перестановки в виде графа и выполнения нескольких операций по умножению и транспонированию (симметричному отображению элементов относительно диагонали) матриц.


Умножение и транспонирование матриц


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


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


Обязательства должны обладать двумя важными свойствами:


  1. скрывать данные. У Проверяющего не должно быть возможности открыть контейнеры без помощи Доказывающего;
  2. носить обязательный характер. Если Доказывающий принял на себя обязательство, у него не должно быть возможности изменить содержимое контейнеров. У него есть только один выбор: оставить крышку открытой или закрытой.

2. Этап вызова. После того как Доказывающий направил свои обязательства, Проверяющий произвольно выбирает бит вызова (challenge) $b \in \{0,1\}$ и отправляет Доказывающему. В ответ на это Доказывающий направляет информацию, в которой открывается или первый (если $b=0$) или второй (если $b=1$) контейнер обязательства.


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


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


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


Последнее можно легко доказать путем моделирования. Представим, что мы как Доказывающий можем обратить часть этапов в протоколе и изменить обязательство уже после получения бита вызова $b$. Зная $b$, мы всегда можем обмануть Проверяющего: если $b=0$, сгенерировать случайную перестановку и изоморфный граф на ее основе, а если $b=1$, сгенерировать граф с новым гамильтоновым циклом. Далее мы принимаем обязательства в отношении первого или второго согласно известному $b$, Проверяющий выпускает такой же бит вызова еще раз и проверяет открытое обязательство. Так как в этом случае доказательства были сгенерированы не на основе гамильтонового цикла на изначальном графе, Проверяющий не может выжать какую-либо информацию из доказательства (в случае с реальным Доказывающим, то есть не в ходе моделирования).


Как вы, наверное, поняли, всегда есть 50-процентная вероятность, что злонамеренный Доказывающий успешно проведет атаку, не имея информации об исходном цикле. Если это выполнить только один раз, о безопасности не будет и речи. Но такая последовательность и не предполагает разового выполнения. Цель состоит в том, чтобы Проверяющий и Доказывающий проделали все этапы несколько раз. При одном повторе вероятность обмана составит 25%, при двух уже 12,5% и т. д. Всегда можно задать количество повторов, которые вписываются в ваши границы риска.


Вот такую систему мы решили внедрить в качестве схемы идентификации для сервера проверки.


P.S. Если вы мало что поняли из сказанного выше или хотите больше узнать о Zero Knowledge, почитайте блог д-ра Мэтью Грина Zero Knowledge Proofs: An illustrated primer. Он объясняет концепцию куда понятнее меня.


Как мы построили задание


Примечание. Далее по тексту сервер команды = Проверяющий, сервер проверки = Доказывающий, атакующая команда = злонамеренный Доказывающий.


Протокол: вид сверху


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


  • граф;
  • флаг для соответствующего раунда;
  • 16-байтовую произвольную строку RANDOMR, полученную с сервера команды;
  • RSA-подпись всех вышеуказанных величин.

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


Кстати, здесь и была заложена первая ошибка: флаг таким способом нельзя было украсть, но можно было произвести DoS-атаку на команду противника. Мы выбрали схему подписи PKCS#1 v1.5. Она в целом не является уязвимой, за исключением некоторых ее реализаций, которые могут быть уязвимы к атаке Блейхенбахера на подпись с экспонентой 3 (Bleichenbacher's e=3 signature attack). Чтобы создать возможности для проведения такой атаки, мы выбрали значение 3 для открытой экспоненты открытого ключа и реализовали уязвимый алгоритм снятия дополнения (очевидно, что SAFE_VERSION macro не был определен):


 uint8_t* badPKCSUnpadHash(uint8_t* pDecryptedSignature, uint32_t dsSize){    uint32_t i;    if (dsSize<MIN_PKCS_SIG_SIZE) return NULL;    if ((pDecryptedSignature[0]!=0)||(pDecryptedSignature[1]!=1))return NULL;    i=2;    while ((i<dsSize) && (pDecryptedSignature[i]==0xff)) i=i+1;    if (i==2 || i>=dsSize) return NULL;    if (pDecryptedSignature[i]!=0) return NULL;    i=i+1;    if ((i>=dsSize)||((dsSize-i)<SHA256_SIZE)) return NULL;    #ifdef SAFE_VERSION    //Check that there are no bytes left, apart from hash itself    //(We presume that the caller did not truncate the signature afteк exponentiation    // and the dsSize is the equal to modulus size in bytes    if ((dsSize-i)!=SHA256_SIZE) return NULL;    #endif    return pDecryptedSignature+i;}

После настройки графа сервер проверки каждые 30 секунд делал следующее:


  • подключался к серверу каждой команды;
  • запрашивал число проверок, которые хочет провести сервер команды;
  • доказывал, что ему точно известен Гамильтонов цикл.

Предполагалось, что в случае верного доказательства сервер команды отдает флаг.


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


Протокол: внутренности


Мы рассмотрели общий протокол, а теперь обратимся к уязвимостям, которые мы предусмотрели.


Наш языковой стек Python + C. Мы создали библиотеку C, содержащую 95% функциональности приложения. Затем мы создали классы поддержки на Python для Доказывающего и Проверяющего. Они включали указатели на соответствующие структуры и обертывали вызовы библиотеки. (Кстати, будьте внимательны при работе с void_p в ctypes. В 64-битных системах он может быть урезан до 32 бит при передаче в качестве аргумента в функцию).


Основной скрипт сервера команды на Python содержал инициализацию Проверяющего:


verifier=Verifier(4,4,7)

Аргументы были следующие:


  1. Желательное количество вершин в графе.
  2. Количество одновременных доказательств.
  3. Выбранные алгоритмы обязательств.

Разберем их по порядку.


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


Что касается максимально разрешенного количества вершин, то мы остановились на 256. Не стали увеличивать его по двум причинам:


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

Количество одновременных доказательств. Как и в случае с вершинами, четырех параллельных доказательств недостаточно, чтобы говорить о какой-то безопасности. Вероятность правильного угадывания битов доказательства составляет $\frac{1}{16}$. Можно пробовать несколько раз и после ряда попыток все получится.


Максимальное значение, поддерживаемое функцией инициализации, составляло 64, что означало вероятность читерства $\frac{1}{2^{64}}$. При наших времени раунда и мощностях злоумышленника практически никаких шансов.


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


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


  • обязательства, в основе которых лежат "хеши" CRC32;
  • обязательства, в основе которых лежат хеши SHA-256;
  • обязательства, в основе которых лежит шифрование при помощи AES-128 в режиме CBC.

Правильными значениями для данной битовой маски будут $1-7$, так что командам необходимо выбрать хотя бы один алгоритм. Сервер проверки выбирает их в следующей последовательности: CRC32, SHA-256, AES. Так, если доступны CRC32 и AES, приоритетным будет CRC32.


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


  1. Доказывающий запрашивает конфигурацию доказательства у Проверяющего (количество доказательств и поддерживаемые алгоритмы).
  2. Проверяющий в ответ направляет конфигурацию.
  3. Доказывающий создает доказательства, обязательства из доказательств и отправляет 1. Доказывающему обязательства по количеству доказательств proof_count.
  4. Проверяющий направляет Доказывающему вызов (случайные биты в количестве proof_count).
  5. В ответ Доказывающий направляет информацию, которая раскрывает обязательства в соответствии с вызовом.
  6. Проверяющий проверяет корректность доказательств и, если все верно, возвращает флаг.
  7. Доказывающий на этом останавливается либо начинает заново с шага 3.

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


Теперь вернемся к алгоритмам обязательств. Они работают следующим образом.


В случае с обязательствами CRC32 и SHA-256 перестановка, графы с перестановленными вершинами и перестановленные циклические матрицы упаковываются. Упаковывание состоит в том, что размер квадратной матрицы размещается в пределах одного двухбайтного слова (uint16_t), а битовый поток плотно упаковывается в байты таким образом, чтобы каждый байт содержал 8 бит из ячеек исходного представления матрицы. После того, как матрицы упакованы, к каждому упакованному массиву применяется выбранная хеш-функция. В итоге на одно доказательство приходится три хеша:


$Hash(Pack(permutation)) | Hash(Pack(permuted\_graph)) | Hash(Pack(permuted\_cycle))$


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


Если это обязательство AES, Доказывающий создает два ключа: $K_1$ и $K_2$. Он упаковывает матрицы тем же способом, как и в случае с другими обязательствами, но затем он шифрует упакованную перестановку при помощи $K_1$ и упакованный перестановочный цикл при помощи $K_2$. Он отправляет оба шифротекста и упакованный граф с перестановленными вершинами в виде открытого текста:


$Enc(Pack(permutation),K_1) | Enc(Pack(permuted\_cycle),K_2) | Pack(permuted\_graph)$


После получения бита вызова $b$ от Проверяющего Доказывающий направляет ему $K_b$. Проверяющий дешифрует соответствующий зашифрованный текст и проверяет достоверность доказательства.


Как видите, обязательство, основанное на AES, успешно скрывает доказательство и не дает Доказывающему себя нарушить (невозможно получить перестановку и перестановленный цикл без ключей, и Доказывающий не может найти другой ключ, который бы позволил ему обмануть Проверяющего). Обязательство, основанное на SHA-256, также носит обязательный характер с точки зрения расчетов (нужно обнаружить коллизию), а так как мы по факту направляем не сами матрицы в каком-либо виде или форме, они действительно удовлетворяют свойству скрытия.


CRC32, однако, не в полной мере удовлетворяет условиям скрытия, и это четвертая ошибка. Для поиска противоречия можно подобрать CRC32 с ориентировочным уровнем сложности $2^{32}$. Но его можно обнаружить еще быстрее при помощи подхода Meet-in-the-Middle (Встреча посередине), ориентировочный уровень сложности которого составляет $2^{17}$.
Обновление: Как мне подсказали, можно еще быстрее. Пример здесь. Но узнать про MitM всё равно полезно, т.к. этот метод можно применить и в других местах.


Атака Meet-in-the-Middle может быть использована, потому что можно обратить раунды CRC32. Допустим, у нас есть


$y=CRC32(x_0)$


и надо найти некое $x_1$ таким образом, чтобы


$CRC32(x_1)=y$


Давайте зафиксируем длину искомого $x_1$, пусть она будет 6 байтов (позже это нам пригодится). CRC32 состоит из трех фаз:


  1. Инициализация $Init$.
  2. Цикл прохода по байтам сообщения $t_{i+1}=Round(t_i,b_i)$, где ($t_i$ внутреннее состояние, а $b_i$ байт).
  3. Постпроцессинг $Finish$.

Итак, для 6 байтов:


$CRC32_6(x)=Finish(Round(Round(Round(Round(Round(Round(Init()\\,b_1),b_2),b_3),b_4),b_5),b_6))$


или произведение функций от $t$:
Произведение функций от t
Теперь можно разбить $CRC32_6$ на две части:


$CRC32_6=CRC32_{FH}CRC32_{SH}$


где


$CRC32_{FH}=InitRound_{b_1}Round_{b_2}Round_{b_3}$


$CRC32_{SH}=Round_{b_4}Round_{b_5}Round_{b_6}Finish$


Мы разделили CRC32 пополам. Более того, функции $Round_{b_i}$ и $Finish$ являются обратимыми, что делает $CRC32_{SH}$ тоже обратимой:


$CRC32_{SH\_INV}=CRC32^{1}_{SH}$


Теперь вместо подбора $CRC32_6$ мы:


  1. Рассчитываем около $2^{17}$ значений $CRC32_{FH}$ с различными $b_1b_2b_3$ и помещаем эти значения в хеш-таблицу, чтобы можно было посмотреть результаты $b_1b_2b_3$ для каждого значения за константное время.
  2. Рассчитываем значения $CRC32_{SH\_INV}(y)$ для различных $b_4b_5b_6$. После расчета каждого значения проверяем, отражено ли оно в хеш-таблице. Как только мы найдем одно из них, прекращаем процесс. Шанс найти одно значение при каждой попытке находится в диапазоне $\frac{1}{2^{16}}-\frac{1}{2^{15}}$.
  3. Получаем значение: $t=CRC32_{FH}(b_1,b_2,b_3)=CRC32_{SH\_INV}(y,b_6,b_5,b_4)$, и это означает, что $y=CRC32(b_1b_2b_3b_4b_5b_6)$, и мы обнаружили коллизию.

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


$SIZE (2\space bytes)\space |\space PACKED\_DATA$


Очень важно, что при проверке HASHES Проверяющий хеширует весь этот объект но, когда матрицы распаковываются, алгоритм принимает только биты $size^2$ из $packed\_data$, и все лишнее отбрасывается. Итак, мы можем добавить еще 6 байтов:


$ SIZE (2\space bytes)\space |\space PACKED\_DATA \space|\space e_1\space|\space e_2\space|\space e_3\space|\space e_4\space|\space e_5\space|\space e_6$


И произвести такую же атаку, но теперь $CRC32_{FH}$ будет обрабатывать


$ SIZE (2\space bytes) \space |\space PACKED\_DATA \space|\space e_1\space|\space e_2\space|\space e_3$


тогда как $CRC32_{SH\_INV}$ будет обрабатывать


$e_4\space|\space e_5\space|\space e_6$


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


Последняя уязвимость


Мы рассказали о работе всей системы и рассмотрели 4 запланированных уязвимости. Однако была еще и пятая ошибка. Биты вызова, предоставляемые Доказывающим, были из небезопасного источника ГПСЧ (PRNG или генератор псевдослучайных чисел).


Обычно в таких случаях выбор падает на небезопасный примитив языка C rand, но нам хотелось чего-то более интересного. В последние годы было опубликовано несколько исследований о Legendre PRF, поэтому мы решили реализовать его в качестве ГПСЧ вместо избитого Вихря Мерсенна.


Идея, положенная в основу этого ГПСЧ, это поле Галуа $GF(p)$, то есть фактор-модулей простого числа $p$. Каждый элемент этого поля либо является квадратичным вычетом, либо нет. Таким образом, в поле $\frac{(p-1)}{2}$ квадратичных вычетов (если исключить 0) и столько же неквадратичных вычетов.


Если вы случайным образом выбираете какой-либо элемент этого поля, за исключением элемента $0$, вероятность того, что он представляет собой квадратичный вычет, будет равна $\frac{1}{2}$. Довольно легко проверить, является ли данный элемент (исключая нулевой $r0$) квадратичным вычетом или нет. Для этого необходимо вычислить его символ Лежандра. Если для элемента $r$ выполняется равенство $r^\frac{p1}{2}=1\space mod \space p$, тогда он является квадратичным вычетом. Так как вероятность для каждого элемента $r$ представлять собой квадратичный вычет составляет 50%, а квадратичные вычеты соседствуют с неквадратичными в случайном порядке, то можно создать искомый ГПСЧ.


Мы инициализируем ГПСЧ с произвольным элементом $a\in GF(p)$. Алгоритм в Python будет выглядеть следующим образом:


def LegendrePRNG(a,p):    if a==0:        a+=1    while True:        next_bit=pow(a,(p-1)//2,p)        if next_bit==1:            yield 1        else:            yield 0        a=(a+1)%p        if a==0:            a+=1

Мы специально выбрали 32-битный $p$, чтобы команды смогли его использовать в атаке Meet-in-the-Middle. Идея заключается в том, чтобы получить $2^{16}+31$ бит из ГПСЧ, направляя постоянные запросы на вызовы. Как только вы их получите, можно конвертировать этот битовый поток в $2^{16}$ 32-битовых целых чисел, преобразуя каждую последовательность из 32 бит внутри потока в целое число. Неважно, какой порядок использовать big-endian или little-endian, главное использовать один и тот же везде.


Поместите эти целые числа в словарь в виде ключей, а значения будут означать их позиции в битовом потоке. Теперь инициализируйте свой собственный экземпляр Legendre PRNG. Выберите $a=1$ и сгенерируйте 32 псевдослучайных бита при помощи ГПСЧ. Преобразуйте эти биты в целое число и проверьте, есть ли оно в словаре (предполагается, что алгоритмическая сложность поиска будет приближаться к константе).


Если его там нет, измените инициализацию на $a=1+2^{16}$ и повторите. Увеличивайте $a$ шагом $2^{16}$ до тех пор, пока не найдете совпадение. Когда вы его обнаружите, то узнаете, каким было значение внутреннего состояния ГПСЧ Проверяющего несколько шагов назад. Обновите $a$ так, чтобы оно соответствовало текущему внутреннему состоянию ГПСЧ и вы успешно клонировали ГПСЧ Проверяющего. Если вы заранее знаете, какие будут вызовы, то обмануть Проверяющего не составит труда.


Возможно, вы подумали, что при нескольких одновременных атаках могут возникнуть проблемы. Мы предвидели это и спроектировали сервис так, что отдельные подключения порождают независимые состояния ГПСЧ. Таким образом, команды не могли влиять на подключения друг друга.


Итак, в сервисе присутствуют следующие уязвимости:


  1. Атака через подделку подписи Bleichenbachers e=3.
  2. Небезопасные параметры Проверяющего.
  3. Включенный режим симуляции.
  4. Обязательство CRC32.
  5. Небезопасный ГПСЧ.

Как мы разрабатывали таск


Писать задание было довольно весело, так как некоторые задачи пришлось решать нестандартно.


Например, на ранних этапах мы решили, что не будем добавлять никаких зависимостей, за исключением стандартных библиотек. Из-за этого нам пришлось использовать Linux Usermode Kernel CryptoAPI для хеширования и шифрования.


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


Допустим, имеется граф или циклическая матрица $M$ и матрица перестановки $P$. Чтобы найти перестановленную матрицу $M_p$, нужно произвести следующий расчет: $M_p=P^TMP$. Матрицы перестановки это особый случай. В каждом ряду и каждом столбце матрицы перестановки встречается только одна ячейка со значением $1$, во всех остальных ячейках значение равно $0$. То же самое относится к транспонированной матрице перестановки. Давайте умножим такую матрицу $P$ на $M$, $R=PM$.


Как известно, ряды матрицы умножаются на столбцы. Следовательно, зная, что в каждом ряду и в каждом столбце значение $1$ встречается только один раз, мы можем:


  1. Взять первую строку $P$.
  2. Искать положение $1$, скажем, это будет $j$.
  3. Взять $j$-й ряд $M$ и скопировать в первый ряд $R$.
  4. Повторить эти действия с другими рядами.

Давайте попробуем на примере:


Пример


Сначала мы ищем в первой строке матрицы $P'$ (той, что слева) первую и единственную единицу.


Матрица


Единица находится на второй позиции, считая с нуля. Поэтому берем вторую строку $M'$ и копируем в первую строку итоговой матрицы $R$.


Матрица


Повторяем то же самое со второй строкой $P'$. Ищем единицу.


Матрица


Она на первой позиции, поэтому берем первую строку $M'$ и кладем на место второй строки в итоговой матрице.


Матрица


Так можно легко получить итоговую матрицу.


Итоговая матрица


Поскольку мы знаем, что в каждом ряду значение $1$ встречается только один раз, нам также известно, что только $j$-е значение каждого столбца будет влиять на полученную в результате ячейку. Кроме того, используя memcpy для копирования, мы ускоряем умножение с помощью SIMD, так как memcpy задействует его для более быстрого копирования. Этот метод позволил значительно ускорить вычисления.


Финальная версия сервиса была встроена в докер-контейнер в два этапа. Сначала библиотека Zero Knowledge собиралась отдельно, затем скомпилированная библиотека копировалась в финальную версию контейнера вместе с оберткой на Python, серверным скриптом и открытым ключом сервера проверки в формате PEM. Все символы, за исключением импорта и экспорта, были удалены из библиотеки, чтобы командам пришлось реверсить основную функциональность.


Как мы тестировали таск


Как вы догадываетесь, задание нужно было тщательно протестировать.


Сначала мы запустили непрерывное нагрузочное тестирование серверов команды и проверки на 24 часа, убрав интервалы между запросами, при этом сервер проверки направлял сервису несколько сотен запросов в секунду. Так мы выявили сложную для обнаружения ошибку в использовании CryptoAPI: я забыл закрыть один из сокетов AF_ALG, в результате чего у сервиса быстро закончились доступные дескрипторы файлов.


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


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


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


Вот что мы сделали, чтобы снизить этот риск:


  • Во-первых, мы полностью воссоздали взаимодействие между Доказывающим и Проверяющим на языке C со всеми обязательствами, с наименьшим и наибольшим возможным количеством вершин и доказательств. Тест создавался с использованием ASAN (Address Sanitizer), с помощью которого мы нашли несколько утечек.
  • Во-вторых, мы выписали все интерфейсы, которые будут принимать входные данные из недоверенных источников, будь то на стороне Проверяющего или Доказывающего. Для каждого из этих интерфейсов мы сохранили входные значения, получаемые при взаимодействии сервера проверки с сервером команды. Затем мы написали обвязки под Libfuzzer для каждой точки входа, включая всю необходимую инициализацию и очистку.
    Однако невозможно было так просто подготовить нашу библиотеку к фаззингу: при данном виде тестирования все должно быть по максимуму детерминировано. Поэтому мы заменили получение значений из /dev/urandom вызовами к randrand, а также заменили инициализацию ГПСЧ (не Legendre PRF, а основного) на srand(0). Также было очевидно, что в ходе фаззинга нельзя получить правильный хеш или шифротекст с корректными матрицами. Поэтому мы выключили все хеш-проверки и заменили AES-шифрование простым копированием данных для фаззинга.
    В общей сложности фаззинг длился несколько дней, и за это время мы обнаружили множество ошибок. Но после этого мы чувствовали себя немного уверенней, когда отдавали нашу библиотеку на анализ соревнующимся командам.

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


Как мы боролись с читерством


Для эксплуатации Legendre PRNG нужно отправлять множество запросов Доказывающему. Нам не хотелось, чтобы командные серверы обрывали соединения в случае нескольких последовательных запросов на получение вызова. Чтобы команды отказались от реализации таких простых и скучных способов митигации, мы разнообразили функциональность сервера проверки.


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


  1. Простое доказательство. Сервер проверки просто доказывает, что знает цикл. Если что-то идет неправильно, то у команды отнимаются очки SLA (соглашения об уровне сервиса).
  2. Сервер проверки создает валидные обязательства, но перед отправкой на сервер команды повреждает их случайным образом, чтобы Доказывающий счел полученное обязательство ошибочным. Он повторяет цикл неверных доказательств в течение нескольких секунд. Затем он реализует правильное взаимодействие и получает флаг. Если в какой-то момент от сервера команды придет неожиданный ответ или сервер оборвет соединение, то команда теряет очки SLA.
  3. Сервер проверки инициализирует протокол и направляет валидное обязательство. Далее он дает команду Проверяющему на отправку вызова в цикле на протяжении пары секунд. По истечении этого времени он выбирает последний вызов, создает пакет, который раскрывает обязательство, и направляет его на сервер команды. Если сервер отдает флаг, значит, все сделано правильно. За любые отклонения от ожиданий сервера проверки отнимаются очки SLA.

У одной из команд (Bushwhackers) показатель SLA составил только 65%, потому что они провалили вторую стратегию. Кстати, все причины неудач выводились на scoreboard, чтобы команды могли сделать вывод об ошибочности определенных стратегий защиты.


Заключение


Когда я начал писать статью, я не думал, что она настоооооолько затянется. Но мне не хотелось упустить ни одной важной детали.


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


Если у вас будет желание, можно собрать и запустить наш таск самостоятельно по ссылке https://github.com/bi-zone/CTFZone-2020-Finals-LittleKnowledge. Мы выложили его в открытый доступ, чтобы любой мог попробовать его решить. Там есть подробные комментарии по всем функциям внутри библиотеки, так что вы можете пойти путем команд (без информации о внутренностях библиотеки) либо посмотреть исходный код. Также доступна примитивная реализация сервера проверки. Учитывая все усилия, надеемся, что этот труд не пропадет. Возможно, кто-нибудь возьмет наш материал на вооружение при подготовке к CTF.


Спасибо, что прочитали до конца, и удачи!

Подробнее..

Web Cryptography API пример использования

16.09.2020 14:04:44 | Автор: admin


Доброго времени суток, друзья!

В этом туториале мы рассмотрим Web Cryptography API: интерфейс шифрования данных на стороне клиента.

Данный туториал основан на этой статье.

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

Что конкретно мы будем делать?

Мы напишем простой сервер, который будет принимать зашифрованные данные от клиента и возвращать их ему по запросу. Сами данные будут обрабатываться на стороне клиента.

Сервер будет реализован на Node.js с помощью Express, клиент на JavaScript. Для стилизации будет использоваться Bootstrap.

Код проекта находится здесь.

Поиграть с кодом можно здесь.

Если вам это интересно, прошу следовать за мной.

Подготовка


Создаем директорию crypto-tut:

mkdir crypto-tut

Заходим в нее и инициализируем проект:

cd crypto-tutnpm init -y

Устанавливаем express:

npm i express

Устанавливаем nodemon:

npm i -D nodemon

Редактируем package.json:

"main": "server.js","scripts": {    "start": "nodemon"},

Структура проекта:

crypto-tut    --node_modules    --src        --client.js        --index.html        --style.css    --package-lock.json    --package.json    --server.js

Содержание index.html:

<head>    <!-- Bootstrap CSS -->    <link rel="stylesheet" href="http://personeltest.ru/aways/stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">    <link rel="stylesheet" href="style.css">    <script src="client.js" defer></source></head><body>    <div class="container">        <h3>Web Cryptography API Tutorial</h3>        <input type="text" value="Hello, World!" class="form-control">        <div class="btn-box">            <button class="btn btn-primary btn-send">Send message</button>            <button class="btn btn-success btn-get" disabled>Get message</button>        </div>        <output></output>    </div></body>

Содержание style.css:

h3,.btn-box {    margin: .5em;    text-align: center;}input,output {    display: block;    margin: 1em auto;    text-align: center;}output span {    color: green;}

Сервер


Приступаем к созданию сервера.

Открываем server.js.

Подключаем express и создаем экземпляры приложения и маршрутизатора:

const express = require('express')const app = express()const router = express.Router()

Подключаем middleware (промежуточный слой между запросом и ответом):

// разбор запросаapp.use(express.json({    type: ['application/json', 'text/plain']}))// подключение роутераapp.use(router)// директория со статическими файламиapp.use(express.static('src'))

Создаем переменную для хранения данных:

let data

Обрабатываем получение данных от клиента:

router.post('/secure-api', (req, res) => {    // получаем данные из тела запроса    data = req.body    // выводим данные в терминал    console.log(data)    // закрываем соединение    res.end()})

Обрабатываем отправку данных клиенту:

router.get('/secure-api', (req, res) => {    // данные отправляются в формате JSON,    // после чего соединение автоматически закрывается    res.json(data)})

Запускаем сервер:

app.listen(3000, () => console.log('Server ready'))

Выполняем команду npm start. В терминале появляется сообщение Server ready. Открываем http://localhost:3000:



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

Клиент


Здесь начинается самое интересное.

Открываем файл client.js.

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

Создаем функцию генерации симметричного ключа:

// https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/generateKeyconst generateKey = async () =>    window.crypto.subtle.generateKey({        name: 'AES-GCM',        length: 256,    }, true, ['encrypt', 'decrypt'])

Перед шифрованием данные необходимо закодировать в поток байтов. Это легко сделать с помощью класса TextEncoder:

// https://developer.mozilla.org/en-US/docs/Web/API/TextEncoderconst encode = data => {    const encoder = new TextEncoder()    return encoder.encode(data)}

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

// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValuesconst generateIv = () =>    // https://developer.mozilla.org/en-US/docs/Web/API/AesGcmParams    window.crypto.getRandomValues(new Uint8Array(12))

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

const encrypt = async (data, key) => {    const encoded = encode(data)    const iv = generateIv()    const cipher = await window.crypto.subtle.encrypt({        name: 'AES-GCM',        iv    }, key, encoded)    return {            cipher,            iv        }}

После шифрования данных с помощью SubtleCrypto, они представляют собой буферы необработанных двоичных данных. Это не лучший формат для передачи и хранения. Давайте это исправим.

Данные, обычно, передаются в формате JSON и хранятся в базе данных. Поэтому имеет смысл упаковать данные в портируемый формат. Одним из способов это сделать является конвертация данных в строки в формате base64:

// https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-Stringconst pack = buffer => window.btoa(    String.fromCharCode.apply(null, new Uint8Array(buffer)))

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

// https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-Stringconst unpack = packed => {    const string = window.atob(packed)    const buffer = new ArrayBuffer(string.length)    const bufferView = new Uint8Array(buffer)    for (let i = 0; i < string.length; i++) {        bufferView[i] = string.charCodeAt(i)    }    return buffer}

Остается расшифровать полученные данные. Однако, после расшифровки нам необходимо декодировать поток байтов в исходный формат. Это можно сделать с помощью класса TextDecoder:

// https://developer.mozilla.org/en-US/docs/Web/API/TextDecoderconst decode = byteStream => {    const decoder = new TextDecoder()    return decoder.decode(byteStream)}

Функция расшифровки представляет собой инверсию функции шифрования:

// https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/decryptconst decrypt = async (cipher, key, iv) => {    const encoded = await window.crypto.subtle.decrypt({        name: 'AES-GCM',        iv    }, key, cipher)    return decode(encoded)}

На данном этапе содержимое client.js выглядит так:

const generateKey = async () =>    window.crypto.subtle.generateKey({        name: 'AES-GCM',        length: 256,    }, true, ['encrypt', 'decrypt'])const encode = data => {    const encoder = new TextEncoder()    return encoder.encode(data)}const generateIv = () =>    window.crypto.getRandomValues(new Uint8Array(12))const encrypt = async (data, key) => {    const encoded = encode(data)    const iv = generateIv()    const cipher = await window.crypto.subtle.encrypt({        name: 'AES-GCM',        iv    }, key, encoded)    return {        cipher,        iv    }}const pack = buffer => window.btoa(    String.fromCharCode.apply(null, new Uint8Array(buffer)))const unpack = packed => {    const string = window.atob(packed)    const buffer = new ArrayBuffer(string.length)    const bufferView = new Uint8Array(buffer)    for (let i = 0; i < string.length; i++) {        bufferView[i] = string.charCodeAt(i)    }    return buffer}const decode = byteStream => {    const decoder = new TextDecoder()    return decoder.decode(byteStream)}const decrypt = async (cipher, key, iv) => {    const encoded = await window.crypto.subtle.decrypt({        name: 'AES-GCM',        iv    }, key, cipher)    return decode(encoded)}

Теперь реализуем отправку и получение данных.

Создаем переменные:

// поле для ввода сообщения, которое будет зашифрованоconst input = document.querySelector('input')// контейнер для вывода результатовconst output = document.querySelector('output')// ключlet key

Шифрование и отправка данных:

const encryptAndSendMsg = async () => {    const msg = input.value     // шифрование    key = await generateKey()    const {        cipher,        iv    } = await encrypt(msg, key)    // упаковка и отправка    await fetch('http://localhost:3000/secure-api', {        method: 'POST',        body: JSON.stringify({            cipher: pack(cipher),            iv: pack(iv)        })    })    output.innerHTML = `Сообщение <span>"${msg}"</span> зашифровано.<br>Данные отправлены на сервер.`}

Получение и расшифровка данных:

const getAndDecryptMsg = async () => {    const res = await fetch('http://localhost:3000/secure-api')    const data = await res.json()    // выводим данные в консоль    console.log(data)    // распаковка и расшифровка    const msg = await decrypt(unpack(data.cipher), key, unpack(data.iv))    output.innerHTML = `Данные от сервера получены.<br>Сообщение <span>"${msg}"</span> расшифровано.`}

Обработка нажатия кнопок:

document.querySelector('.btn-box').addEventListener('click', e => {    if (e.target.classList.contains('btn-send')) {        encryptAndSendMsg()        e.target.nextElementSibling.removeAttribute('disabled')    } else if (e.target.classList.contains('btn-get')) {        getAndDecryptMsg()    }})

На всякий случай перезапускаем сервер. Открываем http://localhost:3000. Нажимаем на кнопку Send message:



Видим данные, полученные сервером, в терминале:

{  cipher: 'j8XqWlLIrFxyfA2easXkJTLLIt9x8zLHei/tTKI=',  iv: 'F8doVULJzbEQs3M1'}

Нажимаем на кнопку Get message:



Видим те же самые данные, полученные клиентом, в консоли:

{  cipher: 'j8XqWlLIrFxyfA2easXkJTLLIt9x8zLHei/tTKI=',  iv: 'F8doVULJzbEQs3M1'}

Web Cryptography API открывает перед нами интересные возможности по защите конфиденциальной информации на стороне клиента. Еще один шаг в сторону бессерверной веб-разработки.

Поддержка данной технологии на сегодняшний день составляет 96%:



Надеюсь, статья вам понравилась. Благодарю за внимание.
Подробнее..

Принимаем криптовалютные платежи с Coinbase Commerce

27.09.2020 00:06:12 | Автор: admin


Если Вы планиуете подключать криптовалютные платежи и еще не знакомы с Coinbase Commerce, стоит потратить 5 минуты Вашего времени. Расскажу о подключении, настройке и поделюсь готовым open source решениями для Nodejs.


Coinbase Commerce это крипто-эквайринг без комиссий, паспортов, с отличным API и Вашим личным счетом.


Привет, Хабр!


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


Главный вопросом был выбор сервиса, который подходит для целевой аудитории. В нашем случае, целевая аудитория это "штаты". Как известно, есть Америка и есть остальной мир, поэтому количество сервисов, которые нам подходят, быстро уменьшилось.


Список доступных криптовалют: USD Coin, Dai, Bitcoin, Bitcoin Cash, Ethereum, Litecoin


Coinbase Commerce (далее CC).


Плюсы и минусы


  • Быстрая настройка
  • Нет комиссий клиент переводит деньги напрямую на Ваш счет
  • Принимает стейблкоины USD Coin & DAI, а также много других
  • Глобальный сервис у Америки в приоритете биржа "Coinbase", имеет фактор доверия даже со стороны государства. Для всего остального мира не принципиально
  • Нет посредников. Только Ваш кошелек и Ваш аккаунт
  • Отсутствие возвратных платежей. Конечно, клиенту можно вернуть средства по требованию, но это на Ваше усмотрение
  • Тестирование хуков с панели сервиса можно отправлять тестовые вебхуки

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


Регистрация



Процесс проходит в 5 этапов.


  1. Регистрация аккаунта email + пароль
  2. Подключение 2х этапной верификации
  3. Настройка кошелька
  4. Бекап кошелька
  5. Доступ к интерфейсу и прием платежей

Подключение 2х этапной верификации




Настройка кошелька



При создании кошелька, CC генерирует seed-фразы, которые нужно сохранить.




После ручного ввода seed-фраз, CC предлагает использовать Google Drive для бекапа кошелька.




Доступ к интерфейсу и прием платежей



Прием платежей


Есть два способа приема платежей, мы рассмотрим оба.


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

С использованием интерфейса



Создание позиции товара\услуги с фиксированной ценой.



Прием пожертвований.



Последним этапом, CC предлагает выбрать, какую информацию о пользователе будет собирать.



После того, как создаем позицию для оплаты, система нам предлагает варианты интеграции (ссылка или скрипт).




// link// https://commerce.coinbase.com/checkout/<id><a href="http://personeltest.ru/aways/commerce.coinbase.com/checkout/<id>" target="_blank">// embed<div>  <a class="buy-with-crypto"     href="http://personeltest.ru/aways/commerce.coinbase.com/checkout/<id>">Buy with Crypto</a>  <script src="http://personeltest.ru/aways/commerce.coinbase.com/v1/checkout.js?version=201807">  </script></div>

С использованием API


Вариант с API формирует платежку вручную и она активна ограниченное количество времени.


Схема работы


С клиента передаем информацию о сумме платежа на сервер, далее формируем временный
"checkout" и возвращаем ссылку https://commerce.coinbase.com/checkout/<id> на клиент, по которой пользователь переходит на страницу оплаты или происходит автоматическая переадресация.


В случае успешной оплаты, отмены или, если время платежки истечет, CC направит информацию на вебхук.


Настройка WebHook


Необходимо добавить url публичного вебхука Settings => Webhook subscriptions.



Протестировать работу вебхука можно на бесплатном сервисе Webhook.site.


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


// install$ npm install ngrok -g// `http://localhost:3000/coinbase-webhook` => `https://<ngrok-host>/coinbase-webhook`$ ngrok http 3000

Как вариант, можно использовать пример ответа вебхука с сайта Webhook.site и далее отправлять через Postman на локальную точку доступа.


После добавления вебхука, его можно протестировать. Интерфейс позволяет менять только события: charge:created, charge:confirmed, charge:failed, charge:delayed, charge:pending, charge:resolved.


Документация Webhook



Open Source


Подготовил вариант c использованием API coinbase-commerce-node.



Заключение


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


Спасибо за внимание!

Подробнее..

Who let the Doge out или зачем приобретать альткоины

12.02.2021 12:08:58 | Автор: admin
image

Курс Биткоина растет и бьет собственные рекорды. И вы человек, который до этого не задумывавшийся о криптовалютах, на волне всеобщего интереса решили попробовать приобрести крипту, но не уверены, удачное ли это вложение. А вдруг это финансовый пузырь, который скоро лопнет? Вы не хотите рисковать, но вы серьезно заинтересовались этой темой. Думаете, что необязательно терять голову и приобретать Биткоин (цена которого давно выше 40000$), ведь есть альткоины, криптовалюты, появившиеся после Биткоина. Например, один из таких, Dogecoin, который, поднялся в топ-10 криптовалют по капитализации на фоне последних новостей.

Dogecoin, криптовалюта с логотипом в виде изображения собаки шиба-ину, задумывалась как шутка в 2013 году. Создатели Dogecoin видели ее как забавную и ненапряжную криптовалюту, которая будет более привлекательна за пределами основной аудитории Биткоин, раз уж он отсылает к известному мему-собаке. Проект быстро набрал популярность в криптовалютном сообществе. Основатель проекта Джексон Палмер покинул криптоиндустрию в 2015 году, сославшись на ее токсичность. По его словам, вместо инноваций и новых разработок отрасль плодит плутов и мошенников.

Однако, несмотря на уход Палмера, проект не развалился и продолжил развиваться. Сейчас его активно рекламируют многие знаменитости, включая Илона Маска, Джина Симмонса и рэпера Келвина Кордозара Бродуса-младшего, известного под псевдонимом Снуп Догг (Snoop Dogg).

5 февраля 71-летний бывший солист группы Kiss написал в Твиттере: Я купил Dogecoin на шестизначную сумму своим 922000 подписчикам.


6 февраля Снуп Догг запостил в Твиттер изображение Snoop Doge своим 19,2 миллионам подписчиков.


Позже Илон Маск запостил в том же Твиттере картинку из Короля-льва, на которой голова Маска изображена вместо головы обезьяны, держащей обезьяну с головой Джина Симмонса, держащей обезьяну с головой Снуп Догга, держащей собаку сиба-ину (символизирующую Dogecoin). Текст сообщения его 45,9 миллионам подписчиков: В итоге получилось это ... (он также позже написал в Твиттере Dogecoin to the Moooonn.)


Несколько часов спустя Bloomberg сообщил, что Dogecoin вырос на 46% за последние 24 часа до 7,4 цента. Фактически, Dogecoin сейчас приближается к своему историческому максимуму с рыночной стоимостью в 10 миллиардов долларов, что делает его 10-й по величине криптовалютой в мире.

Business Insider указывают, что доходность Dogecoin с начала года до настоящего момента составила около 1032,91% (согласно расчетам CoinDesk).


Основатель компании криптобанка Galaxy Digital Майк Новограц считает, что DOGE-лихорадка добром не кончится:
Думаю, что с DOGE все закончится плохо. Примерно то же самое случилось и с GME. Жадность и силы притяжения сделали свое дело. У DOGE нет реальной цели. Держитесь BTC, ETH и монеты defi-проектов. Есть много куда более разумных способов заработать на крипто-ралли.

Dogecoin годами бурлил на уровне плинтуса, но в 2018 году подскочил до максимума почти в 2 цента. Это длилось недолго в течение дня снова стоило меньше 1 цента но это установило схему, по которой любой, от TikTokker'а до Маска, мог повысить цену. Тем не менее, потребовался недавний рост запасов, чтобы поднять валюту до беспрецедентной вершины, поскольку комментаторы умоляли друг друга не продавать, чтобы поддерживать высокую цену.

Взлет котировок криптовалюты начался после ее обсуждения в соцсетях. Пользователь Twitter WSB Chairman 28 января спросил у своих 380 тыс. подписчиков (к 29 января их число выросло до 750 тыс.), какие монеты они держат. Позже он выделил среди названых подписчиками активов Doge, за чем последовал резкий рост цены монеты. Cкупать криптовалюту начали и участники сообществ r/CryptoCurrency и r/SatoshiStreetBets на Reddit. Разогрев актива шел по той же логике, что и скупка акций компании GameStop, которые за последние недели подорожали на тысячи процентов, а также некоторых других активов, которые, как считали участники Reddit, недооценены рынком. Рост подогревал и тот фактор, что купить Doge можно на популярной в США торговой платформе RobinHood.

Джа'Мал Грин, активист Black Lives Matter и бывший кандидат в мэры Чикаго, сказал, что у него есть тысячи Dogecoins, и он видит в валюте способ для людей без больших денег или финансовых знаний участвовать в игре с хедж-фондами и миллиардерами. Мне нравится, как эти группы собираются вместе, чтобы действительно обсудить, что значит играть с криптовалютой или акциями, играть на рынке, сказал он. Приятно видеть, что нижние 99% собрались вместе, чтобы выяснить, как они могут вместе достичь богатства и немного преодолеть этот экономический разрыв.

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

Нельсон Моралес, инженер центра обработки данных из Бич-Парка, штат Иллинойс, руководит группой в Facebook под названием Cryptocurrency of Greater Chicago, сомневается в валюте. Он беспокоится о том, что неопытные инвесторы будут втянуты в рулетку, которая может закончиться катастрофическим крахом.
Тем не менее, это не помешало ему вложить 50 долларов в Dogecoin. Я просто хочу завести канарейку в тоннеле, сказал он. Канарейка еще жива. Я впечатлен.


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

Михаил Кархалёв, аналитик Currency.com: Здравомыслящие люди не ждут роста на тысячи процентов от всех криптовалют. Подавляющее большинство монет действительно уже не принесут прибыли. Но самые ликвидные и востребованные по-прежнему сохраняют мощнейший потенциал. Вокруг этих валют строится индустрия, которая активно интегрируется в традиционную финансовую систему. Государственное регулирование усиливается и улучшается, а крупные корпорации запускают серьёзные проекты. Прежде чем выходить на рынок, следует его изучить, оценить потенциал и риски, а потом уже принимать решение об инвестировании. Но это не значит, что нужно дни напролёт исследовать малоизвестные монеты. Разнообразие криптоактивов значительно больше, чем может показаться. Можно инвестировать в знакомый фондовый рынок и сырьевые товары, только в токенизированном виде.

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

Ведущий аналитик инвесткомпании 8848 Invest Виктор Першиков согласился, что в скором времени могут произойти новые пампы (взлеты). На рынок криптовалют, вероятно, придут трейдеры, которые не успели принять участие во взлетах котировок акций, которые происходили ранее на фондовом рынке.
Следующими претендентами на памп могут быть токены Ripple (XRP), Ethereum Classic (ETC), Uniswap (UNI), Sushiswap (SUSHI), Burgerswap (BURGER), Eos (EOS), Tron (TRX), Bittorent (BTT) или OmiseGO (OMG), допустил Першиков. Он объяснил, что эти монеты объединяет то, что они не отреагировали на рост рынка в конце прошлого начале текущего года, поэтому на них может влиять эффект низкой базы. Для пампа будет выбрана дешевая монета, возможно, одна из перечисленных, но вместе с тем ее капитализация будет соответствовать уровню первой сотни крипторынка. Вряд ли для пампа будет выбран неизвестный токен, скорее наоборот, это будет доступная на крупнейших биржах монета с хорошей ликвидностью, рассуждает Першиков.

Dogecoin отличается в плане майнинга от proof-of-work протокола Bitcoin. В первую очередь благодаря унаследованному от Litecoin алгоритму Scrypt. Этот альткойн также может похвастаться временем генерации блока в 1 минуту и отсутствием потолка на общее количество блоков, а значит и токенов Dogecoin, которые можно намайнить.
Dogecoin, подобно Bitcoin и Litecoin, использует адресацию на основе хэша открытых ключей. Адреса Dogecoin состоят из 34 символов (как в верхнем, так и нижнем регистре) и начинаются с буквы D.

Майнить Dogecoin можно в одиночку или присоединившись к майнинговому пулу. Майнить цифровую валюту Doge можно на любом процессоре или видеокарте, на Windows, Mac или Linux. В 2014 года процессы майнинга Litecoin и Dogecoin были объединены, и теперь их можно майнить одновременно.

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

Большинство криптовалют имеют заранее оговоренный лимит эмиссии. Dogecoin не имеет подобного ограничения. Изначально был лимит в 100 миллиардов DOGE. В феврале 2014 года основатель Dogecoin Джексон Палмер объявил, что ограничение будет снято и не будет никакого ограничения. При этом за создание блока будет фиксированное вознаграждение 10 тыс. DOGE (ранее размер вознаграждения был случайным).





На правах рекламы


Закажите сервер и сразу начинайте работать! Создание VDS любой конфигурации в течение минуты, в том числе серверов для хранения большого объёма данных до 4000 ГБ. Эпичненько :)

Подробнее..

Earth2 виртуальная реальность, новая криптовалюта, или мир NFTs?

20.03.2021 00:14:27 | Автор: admin

Вот уже несколько месяцев умы геймеров и криптоинвесторов будоражит новое явление под названием Earth 2. Вдохновлённая футуристическими вселенными Ready Player One и Snow Crash, игра была запущена в декабре 2020, и с этого момента успела привлечь более 300.000 игроков, продать сотни миллионов частиц будущего мира, создать дорогостоящие NFT, и получить освещение в прессе и на телевидении.

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

Идея и философия игры

Вселенная Earth 2 представляет собой оцифрованную копию Земли (aka Earth 1). Вся планета представлена с помощью карт Mapbox и разбита на маленькие ячейки (tiles), размерами не менее 10 на 10 метров, всего примерно 5.1 триллионов ячеек. Игроки могут покупать эти ячейки за игровую валюту (а ее, в свою очередь, за реальные деньги), продавать друг другу, или выкладывать на торги.

Согласно блогу Mapbox, их команда работала совместно с создателями Earth 2 по реализации этого грандиозного проекта и разработке нового функционала (такого, например, как Heatmap, показывающего распределение наиболее популярных зон на планете).

Сейчас вселенная находится на самой начальной стадии (об этом чуть ниже), но попутно идет разработка самого 3D-мира этой параллельной реальности. Этот мир разработчики создают на основе Unity, что по идее говорит о возможности как игры на PC, так и реализации различного VR функционала.

Первое превью ландшафта нового мира разработчики недавно выкладывали в 4K и обсуждали со своими фанатами:

https://www.youtube.com/watch?v=pmx161RADWw

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

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

Открытым остается вопрос, что именно игроки смогут делать в этом мире, какие будут правила, и будет ли мир созидательным или враждебным. Пока разработчики не имеют однозначного ответа на этот вопрос, но допускают возможность существования одного и того же мира в нескольких ипостасях когда можно будет жить и наслаждаться миром по типу San Junipero, и в то же время использовать тот же самый мир для шутеров с монстрами a-la Resident Evil и т.п.

Команда создателей

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

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

  • Shane Isaac основатель компании с более чем 20 годами опыта в разработке и менеджменте, главный автор идеи Earth2.

  • Dillon Seo со-основатель Oculus VR, которую в итоге приобрел Facebook за $2 миллиарда. В Earth 2 выступает в качестве советника.

  • Steve Bennett гуру MapBox, специализирующийся на генерации векторных тайлов со сложными наборами данных. Отвечает за построение глобальной сети ячеек на карте Earth 2.

  • Wolfgang Walk эксперт гейм дизайна с более чем 25-летним опытом, участвовавший в создании десятков разнообразных игр. Отвечает за геймплей и игровой дизайн мира Earth 2.

  • Ralf C Adam гейм продюсер, с большим опытом и авторитетом в игровой индустрии.

Полный список можно найти здесь.

Фазы развития

Разработчики заранее объявили, как они планируют создавать и развивать вселенную Earth 2 и чего можно ожидать от каждой из фаз. На данный момент мы знаем только о трех фазах, но понятно, что в будущем их должно быть гораздо больше.

Первая фаза Распределение земель

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

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

Цена за ячейку в любой стране начинается с $0.10, а затем постепенно увеличивается в зависимости от количества проданных ячеек. Ячеек по изначальной цене уже не осталось ни в одной стране (кроме нескольких недоступных, см Дубай ниже), однако до сих пор есть много стран, где можно купить ячейку по цене меньше доллара.

Также все ячейки каждой страны распределены на классы: Class 1, Class 2, Class 3 и так далее. В зависимости от класса ячейки, на них периодически начисляется LIT (Land Income Tax), который собирается с покупок новых ячеек в этой стране и их часть распределяется между всеми текущими владельцами. Подробнее про функционал новой фазы можно почитать здесь: https://earth2.io/about.

Hint: если будете покупать ячейки, не забудьте использовать код на 5% кэшбэк 9R3E6WFFY6

Вторая фаза Появление ресурсов

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

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

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

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

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

Третья фаза Появление ландшафта

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

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

Уникальные явления

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

Ватикан

Как известно, самое маленькое государство на планете. Так как количество ячеек на Earth 2 в Ватикане безумно мало, то его раскупили в первые же несколько дней. Теперь землю в Ватикане почти невозможно купить и ее цена доходит до заоблачных высот. Некоторые игроки продают землю под видом Ватикана, но на поверку оказывается Рим. Смотрите, не перепутайте!

NFTs

Так как Earth2 это изначально повторение карты обычной Земли, то конечно же культовые места на Земле сразу стали невзаимозаменямыми токенами в этом мире. Пирамиды, Статуя Свободы, Эйфелева башня, Московский кремль, Эверест и т.д. и т.п. Пока не очень ясно, будет ли возможность в этих местах повторить сооружения Земли или создать что-то своё, уникальное ясно одно: ячейки вокруг этих мест стоят безумно дорого и их почти не купить.

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

Mega cities

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

Полное описание всех мега-городов можно найти в соответствующем Discord-канале.

Dubai

Ну и конечно, Дубай. С самого начала игры некоторые страны были закрыты для продажи (то ли по юридическим, то ли по религиозным соображениям). И одна из самых популярных стран, где игроки до сих пор не могли купить ячейки, это ОАЭ (в простонародье, "Дубай"). "Почему нельзя купить Дубай?" и "Когда можно купить Дубай" этими вопросами раздражает каждый второй новичок. Зачем он вообще им нужен? Вроде как просто много красивых зданий, плюс потенциально нефть и подобные ресурсы, которые могут пригодиться на следующих фазах игры. Ну и начальная цена 10 центов за ячейку такой в мире Earth 2 уже нет и больше не будет.

Апдейт от разработчиков: Дубай наконец-то будет доступен для продажи! Уже завтра 20 марта, в ночь с субботы на воскресенье, игроки всего мира будут настраивать своих ботов лихорадочно жать "купить" и растащут всю землю ОАЭ на кусочки. Если вы хотите поучаствовать в этом безобразии желаю удачи, но сразу оговорюсь надежды мало. Интерес будет колоссальный.

Стратегии заработка

Вложив реальные деньги, игроки хотят (зачастую быстрой) отдачи и вывода своих средств. Пока самым успешным способом заработка является перепродажа так, купив большие участки земли за несколько долларов в популярном месте, некоторые умудряются продавать позднее за несколько сотен, а то и тысяч. Также каждый участок сейчас периодически приносит LIT (Land Income Tax), но пока это совсем небольшие средства.

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

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

Идей много, но всё зависит от того, насколько сами создатели Earth 2 способны это всё поднять и сделать мир пригодным для созидания другими игроками. Пока серьезно об этом мечтать довольно рано.

Вердикт

Игра безусловно имеет потенциал, в основном из-за большой виральности. Основные причины этой виральности: привязка к реальной земле и ее реальным объектам (каждый хочет купить что-то крутое) и замес сразу нескольких популярных трендов крипто-эйфории и VR/AR-технологий.

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

Некоторые люди предпочитают купить немного ячеек на всякий случай например, известные места в своём родном городе, чтобы сделать там порталы и в будущем удобно перемещаться по новому виртуальному миру (если будет реализована привязка к геопозиции, как в Pokemon Go и подобным концептам). Еще можно подарить кому-то на день рождения кусочек новой виртуальной земли гораздо лучше, чем фиктивный сертификат на Луне. Если кто-то всё-таки захочет купить несколько ячеек Earth2, вот вам код для 5% скидки: 9R3E6WFFY6

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

Подробнее..

НАЛОГООБЛОЖЕНИЕ МАЙНИНГА И ПУТИ ЕГО РАЗВИТИЯ

04.03.2021 18:06:42 | Автор: admin

А.С. Ерашов, Высшая банковская школа Гданьска (aerashow@gmail.com)

Аннотация. Активное развитие Интернет технологий в 21 веке, и в частности развитие Блокчейн технологий последние 12 лет с момента создания первой криптовалюты Биткоина, вызывает необходимость пересмотра существующих налоговых взаимоотношений бизнеса и государства. В статье рассматривается вопрос возникшей в последние годы и активно развивающейся сферы майнинга. При этом существующие налоговые системы государств не только отличаются друг от друга, что создает майнерам сложности при международном бизнесе, но и созданные в прошлых веках налоговые системы не могут проводить эффективное налогообложение новейших технологий. В статье авторы предлагают вариант решения универсального для всех стран налогообложения майнинга, что позволит оптимизировать налогообложение майнинга. В настоящее время отсутствие международных налоговых стандартов может затруднять развитие отрасли и вести к недополучению доходов бюджетами разных стран. При этом, учитывая развитие новейших ИТ технологий, налогообложение рационально и эффективно было бы организовать на основе современных смарт-контрактов, которые легко можно встроить в сами агрегаторы майнинговых пулов для автоматически расчетов и оплат.

Abstract. The active development of Internet technologies in the 21st century, and in particular the development of Blockchain technologies for the last 12 years since the creation of the first bitcoin cryptocurrency, necessitates a revision of the existing tax relationship between business and the state. The article discusses the issue of the mining industry that has arisen in recent years and is actively developing. At the same time, the existing tax systems of states not only differ from each other, which creates difficulties for miners in international business, but also the tax systems created in past centuries cannot effectively tax the latest technologies. In the article, the authors propose a solution to the universal taxation of mining for all countries, which will optimize the taxation of mining. At present, the lack of international tax standards can hinder the development of the industry and lead to a shortfall in revenues for the budgets of different countries. At the same time, taking into account the development of the latest IT technologies, it would be rational and efficient to organize taxation on the basis of modern smart contracts, which can be easily built into the aggregators of mining pools themselves for automatic payments and payments.

Ключевые слова: майнинг, децентрализованная генерация, Доказательство выполнения работы, доказательство доли владения, налогообложение майнинга, криптовалюта, блокчейн, mining, decentralized generation, Proof of Work, Proof of Stake, Mining taxation, cryptocurrency, blockchain


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

Методы и материалы. В 21 веке с появлением майнинга возник феномен децентрализованной генерации потребительной стоимости информации [1]. И если, например, налогообложение генерации, распределения, хранения, продажи электроэнергии легко контролируемы, то для грамотного контроля налогообложения майнинга необходимо уже сейчас развивать современные механизмы взаимодействия между всеми сторонами процесса. В данной статье речь пойдет о самых распространенных системах майнинга POW и POS и вариантах их налогообложения

Майнинг POW это Доказательство выполнения работы (Proof of Work), принцип защиты систем от злоупотребления (например, от DoS-атак или спама), основанный на необходимости выполнения на стороне клиента некоторой достаточно длительной работы (нахождение решения задачи), результат которой легко и быстро проверяется на стороне сервера1.

Алгоритм POW, лежащий в основе первой криптовалюты Биткоина, позволял при ее создании энтузиастам майнить на компьютерах. Но сейчас для этого в основном необходимо дорогостоящее оборудование, в основном ASIC, и электричество, занимающее в расходах на майнинг львиную долю. Только сеть майнинга Биткоина, не учитывая другие криптовалюты, потребляет в год порядка 78 ТВт\ч электричества, что сравнимо с энергопотреблением целых стран (таких как Бельгия, Чили или Казахстан), но децентрализовано распределено по миру.

Майнинг POS это доказательство доли владения (Proof of Stake, дословно: подтверждение доли) метод защиты в криптовалютах, при котором вероятность формирования участником очередного блока в блокчейне пропорциональна доле, которую составляют принадлежащие этому участнику расчётные единицы данной криптовалюты от их общего количества.

Алгоритм POS в какой-то мере считается более совершенным именно из за отсутствия необходимости потребления большого количества электроэнергии и нанесения тем самым вреда экономике, хотя и считается что 75% майнеров используют энергию солнца, ветра и воды. Очевидно, что для становления крипто-сообщества POW был единственным возможным решением времени, в т.ч. для привлечения энтузиастов в мир блокчейна и заработка на майнинге с обычного ноутбука. В настоящее время не только Биткоин, но и некоторые новые криптовалюты также поддерживают протокол POW и он на ряду с POS будет занимать в мире майнинга большую долю ещё долгое время. При этом несмотря на то, что принцип PoS был описан уже давно, до изобретения Биткоина, именно PoW считается наиболее защищенным в смысле децентрализации.

Сегодня всё больше происходит централизация населения внутри крупных городах и вокруг них. При этом добыча электроэнергии выстроена по всей территории планеты. Электростанции расположены в порой отдаленных районах и цена электричества включает в себя большую долю доставки его до мегаполиса, обслуживания сетей и т.д. При этом не только цена самого электричества может быть в разы меньше вблизи мест его генерации, но и электростанции можно запустить на полные мощности, а некоторые из них вынужденны не работать на 100% из за отсутствия полного сбыта, в т.ч. из за дорогой с учетом доставки конечной для потребителя цены [2]. В отдаленных районах РФ, Канады и других стран также стоит проблема сжигания попутного газа при добыче нефти, в основном также из-за дороговизны его доставки конечному потребителю. Несмотря на подписанные большинством нефтедобывающих компаний соглашений о не превышении 5% выброса в атмосферу попутных газов, добываемых вместе с нефтью, и снижению его выбросов до 0% доли к 2030 году, некоторые добывающие компании до сих пор вынуждены платить огромные штрафы, так как газ просто некому продать, а его транспортировка и переработка не выгодны. Проблему перепроизводства электроэнергии некоторых районов и выброса попутного газа уже стали успешно решать майнинговые компании. По их инициативе (а в ряде случаев уже даже по инициативе нефтедобывающих компаний), на месторождениях ставятся газогенераторы и майнинг-контейнеры. Также майнинг ставится в местах переизбытка генерации электроэнергии крупными электростанциями, так как в моменты пиковой нагрузки перепады электроэнергии приходится куда то скидывать. Создаваемые таким образом майнинговые фермы в основном ради добычи Биткоинов в настоящее время решают и экологическую проблему мирового масштаба и экономические проблемы нефтедобытчиков и производителей электроэнергии [3]. При этом в будущем такой рационализаторский подход будет все чаще (как в случаях с арбитражем в трейдинге) выискивать дешевые точки покупки электроэнергии, устанавливать майнинговые фермы, и тем самым оптимизировать энергопотребление планеты и улучшать экологию. Также в связи с развитием ИТ-технологий и развитием блокчейна в различных сферах, подобные майнинговые фермы будут являться вычислительными центрами различных проектов, в т.ч. децентрализованного хранения данных (по типу проекта filecoin).

В будущем целые поселения, расположенные вблизи добычи газа или попутного газа, смогут благодаря дешевой электроэнергии стать центрами обработки информации благодаря майнингу, и уже сейчас нужно создавать технологические механизмы корректного налогообложения, чтобы налоги оптимально распределялись по данным территориям, а не уплачивались по месту регистрации крупной ИТ компании, владеющей майнинговой фермой через офшор. Для этих целей необходимо (в том числе на уровне смарт-контрактов) предусмотреть возможность автоматической оплаты электроэнергии, что позволит вести корректный учет её потребления в конкретном месте и автоматически оплачивать налоги по территориальной принадлежности, создавая блага за счет них в месте их оплаты [4; 5].

Можно предположить, что было бы правильно обложить налогом майнинг в процентном отношении от количества используемого электричества. Но такой подход будет стимулировать их избегать официальных регистраций и подключать неучтенное электричество, а частные майнеры и вообще массово уйдут в серую зону. Тем не менее, учитывая что майнинг и информация о нем доступна в общественном блокчейне, налогообложению должен подлежать исключительно полученный майнером доход от найденных им блоков (с учётом сложности их добычи и понесенных расходов). Предлагается в смарт-контракты расчета налогов импортировать публичные данные из сетей блокчейн о добыче официально зарегистрированными майнерами определенного количества криптовалют. Далее уже в ручном (а в последствии и автоматическом режиме) при постепенном переходе на оплату электроэнергии и других расходов криптовалютами, смарт-контракты смогут автоматически рассчитывать суммы налогов к уплате и производить оплату из кошельков майнеров в бюджеты различных уровней. При этом страны, полностью запрещающие оплату товаров криптовалютами, теряют в своём развитии из-за невозможности автоматизации налоговых платежей смарт-контрактами, а также отсутствия публичных блокчейн-реестров проведенных транзакций. Единственным вариантом не отстать от прогресса будет введение CBDC как контролируемого государствами блокчейна и переводом в расчеты на него государственных и частных компаний [6].

Если в начале 21 века такой подход к цифровизации и обеспечению публичности платежей лежал больше в политической сфере, то с учетом развития блокчейн технологий и массового создания новых экономических ценностей (благодаря децентрализованной обработке информации), необходимость налогового учета их уже является вопросом выживания национальной экономики в условиях цифровой глобализации [7; 8].

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

Результаты. Выше был описан пример налогообложения майнинга POW. При этом налогообложение майнинга POS как доказательства доли оставляет не меньше вопросов. Если при POW можно хотя бы по наличию большого потребления электричества определить территориальную принадлежность майнера, то при майнинге POS такой учет происходит исходя из наличия на кошельках майнеров определенного количества монет для подтверждения транзакций (например, 32 монеты для ETH). Для налогообложения таких майнеров также необходимо выработать международные стандарты получения и передачи в налоговые резиденции информации из сети блокчейн. При этом следует учитывать, что за децентрализацией далеко не все майнеры желают скрывать своё местоположение и избегать уплаты налогов. Крупные компании, такие например как ETHEREUM, организующие пулы майнинга для своих сторонников и уже сейчас переходящие на POS, могут передавать в автоматическом режиме в налоговые органы данные о необходимом к уплате налоге по месту физического расположения владельца крипто-кошелька. При этом со временем можно было бы автоматически изымать часть средств майнера и распределять их на налоговые кошельки, но для этого вначале нужно перейти на платежи в криптовалютах, чтобы помимо учета прибыли учитывать также и в затратах майнера. И даже в случае если со временем налоговые инструкции по международным стандартам и соглашениям смогут обязывать майнинговые пулы автоматизировать в смарт-контрактах налоговые отчисления, то скорее всего необходимо будет лишь откладывать на специальные кошельки данные средства, автоматически изъятые у пользователей, а затем при согласовании годового отчета (уже учитывая понесенные затраты) часть средств возмещать, а часть переводить на налоговый крипто-счет.

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

Обсуждение. Необходимо начать научное обсуждение возможности создания новых налогов на майнинг, по аналогии акциза (на единицу ASIC, например) и вменённого дохода для небольших майнеров. Орадно, что уже существует понимание необходимости координации деятельности государств в сфере налогообложения майнинговой деятельности3. Такие новые системы налогообложения могут заменить, например, принятые в домайнинговом мире налоги, сделав налообложение майнинга более оптимальным и соответственно быстрее добровольно принятым в майнинг сообществе, так как основной задачей налогов считается не репреcсивные меры, а построение сбалансированной экономики.

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

1 Cryptocurrency Market Capitalizations // CoinMarketCap.com (http://personeltest.ru/aways/coinmarketcap.com/currencies/bitcoin Дата обращения: 12.02.2021).

2Рейтинг криптовалют на 2021 год: онлайн-курс топ-10 в реальном времени. Список лучших криптомонет по капитализации и популярности // Profinvestment.com (http://personeltest.ru/away/profinvestment.com/crypto-currency-rating Дата обращения: 12.02.2021).

3https://youtu.be/tDXwHFwn1NI

Список литературы

  1. Генкин, А.С. (2005). Частные деньги: осмысление роли и места в современном мире // Финансы и кредит, 29 (197), 80 с.

  2. Бортников М.А., Каранина Е.В. Становление и развитие концепции энергетической безопасности // Сборник материалов XIII Всероссийской научно-практической конференции с международным участием Экономические аспекты развития России: Микро- и Макроуровни. Киров, 2020, с. 820-828

  3. Вайсулов К.М., Алибеков Ш.И. Проблемы развития цифровой экономики региона (на примере Республики Дагестан) // Социально-экономические и финансовые аспекты развития Российской Федерации и её регионов В современных условиях. Материалы I всероссийской научно-практической конференции. Грозный, 2020, Издательство: Чеченский государственный университет (Грозный), С.282-284

  4. Сайдулаев Д.Д., Сулейманов И.Р. Основные подходы к понятию налогового администрирования // Modern Science, 10-1, 2019, с. 64-67

  5. Сайдулаев Д.Д. Концептуальные основы налогового менеджмента // Экономика и предпринимательство, 7 (108), 2019. С. 951-954.

  6. Чаплыгин, В.Г., Дельцова, Т.А. (2018). Анализ взаимосвязи криптовалюты биткоин с использованием корреляционного-регрессионного анализа // Вестник Балтийского федерального университета им. И. Канта. Серия Гуманитарные и общественные науки, 2, 70-79.

  7. Чаплыгин В.Г. Устойчивость и равновесие, кооперация и координация в глобальном пространстве: Дж. Нэш versus Г. Штакельберг // Известия Томского политехнического университета. 2004. 2(307). с.173-176

  8. Чаплыгин В.Г., Курьянов А.М. Актуальные проблемы денежно-кредитной политики в странах Центральной и Восточной Европы и методы их решения // Вестник Калининградского юридического института. 2005. 2(8)

  9. Пашковская И.В. Перспективы развития национального денежного обращения в условиях цифровой экономики // Вестник Евразийской науки, 2018 2, https://esj.today/PDF/75ECVN218.pdf (доступ свободный). Загл. с экрана. Яз. рус., англ.

  10. Попова Е.М., Бандурко С.А. Анализ финансовых рисков в криптоэкономике с учетом информационного влияния // Известия СПбГЭУ 2017 6(108), 36-40.

    Оригинал статьи находится в журналеУправленческий учет Выпуск 1 (2021) стр. 152-156. Ссылка на автора и источник при копировании обязательна.

    Ссылка общую информацию о статье в Российском индексе научного цитирования


Подробнее..

Криптовалюта как инструмент налогового администрирования

04.03.2021 18:06:42 | Автор: admin

А.С. Ерашов, Высшая банковская школа в Гданьске (e-mail: aerashow@gmail.com)


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

Abstract. One of the principles of the classic election campaign is the competition of ideas and methods of distribution of public goods obtained from taxes and the tax rates themselves. At the same time, it is important not only to be able to create and maintain an optimal system for collecting and distributing taxes, but also to provide the public with open information about the processes and prospects taking place in this matter as clearly as pos sible. And the more democratic a society is, the more such an understanding is in demand. New technologies of blockchain and cryptocurrencies, in particular, make it possible to create improved systems for both collecting and distributing information, and conveniently involving public control. And the sooner countries adopt it for mass use, the more successful their economies will be.

Ключевые слова: блокчейн, криптовалюта, криптотехнологии, стайблкоины, Биткоин, ETH,
смарт-контракт. blockchain, cryptocurrency, cryptotechnologies, stablecoins, Bitcoin, ETH, smart contract.


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

Основные результаты исследования. В современной финансовой системе, к сожалению, не имеется достаточно технологий для контроля налоговой системы, которую готовы принять даже убеждённые либертарианцы. Нет не только технической возможности открытого контроля за сбором и распределением налогов, но и законодательно и ментально общество не готово открывать данные о своих счетах, оборотах товаров и накопленном благосостоянии. Тем не менее, принятие криптовалют и свойственных им публичным данным о транзакциях, происходит повсеместно по мере взросления молодежи, привыкшей к интернет-деньгам. Начиная с компьютерных игр, молодежь знает, что деньги как универсальные товары обменивающиеся на любые другие товары/услуги, могут быть не только деньгами центрального (национального) банка страны, но и виртуальными, игровыми и т.д. Широко распространенный обмен геймкоинами и NFT (non-fungible tokens - новый класс виртуальных активов) на реальные товары, в т.ч. через через блокчейн технологии, ускоряет внедрение криптовалют в масмаркет. Уже сейчас купить некоторые товары и услуги проще за интернет деньги, нежели с помощью классических денег [6].

Многие современные финансовые киты, такие как Bank of America и другие, опасаются массового перехода граждан на использование криптовалют. Они публикуют результаты исследований, что чем глубже будет внедрение электронных денег, тем быстрее будут уменьшаться депозиты граждан на счетах в банках (тогда как наличие депозитов и их использование банками позволяет банкам получать значительные доходы). Также банки понимают, что постепенно возможности их контроля за распределением бюджетных средств будет сведена к минимуму. К сожалению, некоторые крупные финансовые институты активно препятствуют переходу к криптовалютным платежам, и в отличии от, например производителей бумаги, при переходе на электронные деньги, у финансовых организаций гораздо сильнее лобби для блокировки принятия политических решений правительствами. Есть мнение, что вскоре банки будут похожи на амбары, которые хранили и меняли рис как универсальное средство платежа, во время появления металлических и бумажных денег. Банкам уже сейчас стоит перестраиваться используя имеющиеся перед блокчейн-компаниями преимущества (такие как реальные офисы, проведение KYC, управление активами вкладчиков и т.д.) [4]. Учитывая объемы имеющихся у банков баз данных, можно предположить, что те банки, которые первыми включатся в борьбу за криптоплатежи пользователей, еще смогут успеть составить конкуренцию даже крупных криптовалютным системам. В связи с этим банки уже сейчас охотятся за специалистами не просто в банковском секторе и не просто фриками крипто-энтузиастами, с универсальными профессионалами. Можно предположить, что передовые коммерческие банки сольются с биржами и примут эти технологии как когда-то приняли кредитные деньги вместо золота. События 2020 года в сфере слияний и поглощений в крипто-мире, по объему не уступающим доковидному 2019 году, подтверждают это. Также хорошим сигналом для крипто-мира стал прорывной рост Биткоина выше 24000 долларов. В 2020 году многие страны, пытаясь бороться с последствиями корона вируса для своих экономик, стали проводить политику мягких денег, значительно увеличили бюджетные расходы и т.д. Например, только за 2020 год ФРС США выпустила в оборот порядка 21% всех напечатанных за последние 30 лет долларов. Это стало одним из важнейших факторов прихода в крипто-мир крупный финансовых организаций с целью защиты средств от обесценивания.

Используя криптобиржи и прямые удобные инвестиции в криптоакции (Security Tokens, Equity Tokens, ETH, NFT), большое количество домохозяйств имеет возможность сглаживать колебания мирового фондового рынка и ещё больше снизят возможности ценовых манипуляций крупными игроками. Так же они получат дополнительные доходы от сбережений, которые дадут плюсы в экономики их стран не только виде налогов, но и новых тратами, росте ВВП в целом. При этом риски снижения депозитов в банках и изымания денег из экономики нивелируются инвестиционными вложениями домохозяйств, но произойдет это при по настоящему удобном, простом, но в то же время безопасном механизме реализации таких инвестиций. Чтобы бегство частных инвесторов из инфляционного фиатного мира не разгоняло криптоинфляцию и не создавало необоснованных хайпов роста криптовалют, крайне важно запустить возможность удобного инвестирования средств граждан, изъятых в т.ч. из депозитов в криптоэкономику и в криптоакции реальных компаний. При этом также важно создать минимально необходимые обязательные курсы инвестора, на знания которых будут обязаны проверять онлайн банки/биржи, как же как осуществляют сейчас проверку KYC, для недопущения перехода средств из криптовалют в криптоакции, по аналогии с печальным опытом ICO [5].

2019 год многие называли годом стейблкоинов. Многие биржи, компании и даже частные обменные пункты поняли удобство использования стейблкоинов пользователями и стали их применять в своей работе. Европейский ЦБ совместно с ФРС стали осознавать, что теряют контроль над валютами и начали вводить как общие запреты на стейблкоины (в Европе например https://ru.crypto-news.io/news/evrosoyuz-zapretil-steiblkoiny-iz-za-kriptovalyuty-libra.html), так и бороться с попытками введения мультивалютного стейблкоина компанией Фейсбук. В связи с всевозрастающим приходом в криптомир трейдеров из мира фиатных валют, стейблкоины стали инструментом, по отношению к которому ведутся все остальные торги. Частные и коммерческие международные переводы, которые зачастую сложно делать в банковской системе, тоже все чаще стали использовать вместо Биткоина стейблкоины, а Биткоин стал скорее средством инвестиций как цифровое золото, а не средством платежа. Мелкие обменные пункты, специализирующиеся на обмене криптовалют на фиатные деньги, также в основном используют стейблкоины в операциях с клиентами и между собой, во избежание риска колебаний курсов в процессе осуществления даже краткосрочных операций. Благодаря всем этим факторам в 2020 году рынок стейблкоинов продолжал развиваться и достиг нескольких десятков миллиардов долларов, предоставляя пользователям в технологическом мире блокчейна и криптовалют защищенную гавань сохранения капиталов во время финансового шторма.

В 2020 году также знаменательным стал факт оплаты американскими властями помощи венесуэльским врачам, используя частные стейблкоины USDC (https://forklog.com/pravitelstvo-ssha-privleklo-emitenta-stejblkoina-usdc-dlya-podderzhki-oppozitsii-v-venesuele). Возможно поняв все удобство использования стабильной криптовалюты и в т.ч. обхода даже международных ограничений, в конце 2020 года власти США всерьез взялись за регулирование стейблкоинов, изъявив намерение лицензировать их выпуск (https://beincrypto.ru/v-ssha-predlozhili-zapretit-neliczenzionnye-stejblkoiny ).

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

Сами стейблкоины как криптовалюта, основанная на Блокчейне как защищенной публичной базе данных, привязаны к какой-либо фиатной валюте по установленному курсу (обычно 1:1 к американскому доллару). Гарантом такой привязки к курсу формально является обеспечение, хранящееся у компании, выпустившей такой стейблкоин. В этой связи у многих экономистов возникают вопросы почему сами страны не выпускают стейблкоины, привязанные к их валютам, где гарантом выступает Центробанк страны, отвечающий за финансовую политику и по сути обеспечением является вся масса выпущенных под такою стабильную криптовалюту фиатных аналогов, да и сама экономика страны [1]. Если бы Центробанки были бы коммерческими организациями, нацеленными на получение прибыли в т.ч. за счет быстрого внедрения новый технологий, то можно предположить, что государственные CBDC были бы выпущены уже несколько лет назад. Отметим, что государственные финансовые организации очень консервативны, а многие чиновники не имеют достаточного образования и опыта в новых технологиях, чтобы оперативно применять их в целях развития организации.. Такая задержка внедрения Блокчейн технологий со стороны государств уже сказывается на политических рейтингах их руководителей.

В этом плане Китай, как один из мировых лидеров, является показательным примером успешного дальновидного планирования и своевременного применения новых технологий. Китайские власти уже несколько лет разрабатывают собственную криптовалютную систему, и пока в мире шло публичное частное тестирование многих технологий, впитывали все новинки и запустили CBDC для массовых платежей в 2020 году. Уже прошли многомиллионные испытания с айрдропом раздачи криптовалюты для тестов гражданам и страна открыто заявляет, что к моменту проведения олимпиады старается потеснить США в плане лидера финансового мира. Да, в Азиатско-Тихоокеанском регионе есть и недовольные частные компании, например казино в Макао (https://forklog.com/bloomberg-vnedrenie-tsifrovogo-yuanya-izmenit-igrovuyu-industriyu-makao ), опасающиеся внедрения цифрового юаня, но это скорее всего частные случаи и еще сама практика массового применения китайского CBDC только начинает формироваться и многие уверены, что плюсов от таких технологий будет больше чем минусов. Китайские власти, разумеется, пытаются усилить контроль за доходами и расходами граждан и по этому в использовании китайской CBDC есть много ограничений, но это скорее связано со спецификой общественных взаимоотношений и управления 1,5 миллиардным населением страны. При всем при этом развитие CBDC как финансовой технологии в целом ставит Китай на шаг впереди по сравнению даже со странами Европы и Северной Америки.

Российские власти в конце 2020 года ввели значительные ограничения и усилили контроль за криптовалютами, вплоть до уголовной ответственности. Хотя ЦБ РФ и проводит консультации и совещания с ключевыми игроками финансового рынка (такими как платежная система QIWI и крупные банки), но все же политика запретов и ограничений показывает, что правительство РФ выбрало путь скорее похожий на китайский, чем на более открытый, применяемый в иных государствах.

Технология Блокчейна KYP (Know Your Partner), разрабатываемая автором статьи совместно с командой программистов в настоящее время, может быть полезна с точки зрения удобной идентификации блокчейн кошельков. Ведь для многих пользователей, отпугивающим фактором является именно абсурдное по их мнению непонятное название номер кошелька. В Блокчейне KYP кошельки могут быть как такие же анонимные с произвольными набором букв и цифр, так и именные [2]. Благодаря именным кошелькам создается возможность построения понятной системы обращения, подобной уже привычной всеми системы DNS, применяемой к названиям сайтов. Как и до появления удобной классификации сайтов, при раннем написании их адресов номерами типа 192.168.0.1 массовое принятие обывателями интернета было бы затрудненно, так и запуск блокчейна KYP вполне может дать прорывной толчок в массовом развитии криптотехнологий в ежедневном обращении. Такая структурированная именная технология, которая вскоре будет опубликована в WhitePaper KYP и представлена после проведения дополнительных тестов, может вполне быть применима и в государственных блокчейнах CBDC при их проектировании и снимет барьер принятия блокчейна обывателями.

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

Уже сегодня существую различные смарт-контракты по оптимизации приема криптовалютных платежей. Например сервис потокового видео Spotify уже заявил о удобном использовании криптоплатежей, такие же технологии можно довольно просто применять для любого прослушивании/просматривании контента, учебных занятиях, игр, коуч-мероприятиях, онлайн тренировках и т.д. Плагин EthereumAds, работающий в системе WordPress, позволяет получать доход от баннерной рекламы напрямую на кошельки Ethereum. ООН совместно с компанией LTO Network запустило программу верификации прав на недвижимость goLandRegistry. В недавнем опросе среди пользователей Paypal 65% из них заявили, что им было бы удобно платить криптовалютами и с использованием QR-кодов. При этом и Центробанк РФ обязал банки страны ввести возможность оплат и переводов оп QR-кодам, понимая технологическое удобство таких методов, а такие оплаты изначально приняты в крипто-мире и являются техническим шагом на встречу для массового применения криптовалют.(http://personeltest.ru/aways/www.forbes.ru/newsroom/finansy-i-investicii/413719-cb-ustanovil-dedlayn-dlya-vvedeniya-bankami-qr-platezhey-cherez ). Власти Таиланда объявили о проекте учете налогов в блокчейне, старясь поднять не сами налоги, а их собираемость. Также они подтверждают, что придерживаются мнения, что учет продаж товаров в блокчейне поможет за счет его прозрачности собирать статистику и получить правдивые данные о реальном экспорте нефти.(http://personeltest.ru/aways/www.bangkokpost.com/business/2031099/). Как заявлял глава комитета Госдумы РФ по финансовому рынку Анатолий Аксаков, одним из основных аргументов принятия закона о криптовалютах в РФ была необходимость налогообложения криптовалютных доходов [3].

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

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

Библиографический список

  1. Вайсулов К.М., Алибеков Ш.И. Проблемы развития цифровой экономики региона (на примере Республики Дагестан) // Социально-экономические и финансовые аспекты развития Российской Федерации и её регионов В современных условиях. Материалы I всероссийской научно-практической конференции. Грозный, 2020, Издательство: Чеченский государственный университет (Грозный), С.282-284

  2. Сайдулаев Д.Д., Сулейманов И.Р. Основные подходы к понятию налогового администрирования // Modern Science, 10-1, 2019, с. 64-67

  3. Сайдулаев Д.Д. Концептуальные основы налогового менеджмента // Экономика и предпринимательство, 7 (108), 2019. С. 951-954.

  4. Чаплыгин, В.Г., Дельцова, Т.А. (2018). Анализ взаимосвязи криптовалюты биткоин с использованием корреляционного-регрессионного анализа // Вестник Балтийского федерального университета им. И. Канта. Серия Гуманитарные и общественные науки, 2, 70-79.

  5. Чаплыгин В.Г. Устойчивость и равновесие, кооперация и координация в глобальном пространстве: Дж. Нэш versus Г. Штакельберг // Известия Томского политехнического университета. 2004. 2(307). с.173-176

  6. Чаплыгин В.Г., Курьянов А.М. Актуальные проблемы денежно-кредитной политики в странах Центральной и Восточной Европы и методы их решения // Вестник Калининградского юридического института. 2005. 2(8)

  7. Cryptocurrency Market Capitalizations // CoinMarketCap.com (http://personeltest.ru/aways/coinmarketcap.com/currencies/bitcoin Дата обращения: 24.11.2020).


Оригинал статьи находится только в бумажном виде журналеЭКОНОМИКА И ПРЕДПРИНИМАТЕЛЬСТВОISSN:1999-2300 Выпуск 12 (125) стр. 1024-1027. Ссылка на автора и источник при копировании обязательна.

Ссылка на информацию о статье в Российском индексе научного цитирования

Подробнее..

Перевод Рынок NFT рухнул, о нет

03.06.2021 18:21:18 | Автор: admin
RIPRIP

Кто-нибудь помнит март 2021 года, когда некоторые техногики и художники были убеждены, что NFT (невзаимозаменяемые токены) изменят мир? Ну привет, сейчас июнь 2021 года, и этот пузырь лопнул.

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

Однако этот золотой век, определенно, позади. Весьма исчерпывающее исследование компании "Protos" демонстрирует следующие цифры:

  • Общий рынок NFT с момента своего пика пережил "почти 90-процентный коллапс".

  • Его пик, пришедшийся на 3 мая, всего за один день принес 100 миллионов долларов в продажах коллекционируемых крипто-предметов. За последнюю неделю их продажи составили всего 19,4 миллиона долларов.

  • С продажами NFT-искусства все еще хуже, упав с нескольких миллионов за один день, сегодня они приносят всего лишь около 3 миллионов долларов по всему миру за неделю, включая как первичные, так и вторичные продажи.

  • Количество активных NFT-кошельков, используемых для покупки токенов, сократилось с более чем 12 000 до 3900.

Вот как выглядит рынок крипто-искусства по состоянию на эту неделю:

Protoss / Nonfungible.comProtoss / Nonfungible.com

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

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

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru