Перейти к содержанию
  • записей
    14
  • комментариев
    28
  • просмотра
    43 914

Знакомство с Monero (часть 1)


TheFuzzStone

3 653 просмотра

5X32q0P.pngPzHu2yli-180x180.png

 

 

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

 

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

 

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

 

 

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

 

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

 

 

Эллиптическая криптография

 

Итак, что такое эллиптическая криптография (ECC)? В Википедии по этому поводу написано следующее: «Эллиптическая криптография – раздел криптографии, который изучает асимметричные криптосистемы, основанные на эллиптических кривых над конечными полями».

 

Что это значит? Понятия не имею.

 

 

А если серьезно, то давайте погрузимся в детали вопроса:

  • Криптография с открытым ключом, или асимметричная криптография использует пару ключей вместо одного приватного ключа, как в симметричной криптографии (например, в симметричном алгоритме блочного шифрования AES): открытый ключ, который должен быть предоставлен "миру" и приватный ключ, который держится в тайне. Для обеспечения безопасности приватный ключ должен быть трудно разрешимым, не должно быть возможности получить приватный ключ имея открытый; для практичности с помощью закрытого ключа должен легко вычисляться открытый. Эллиптическая криптография в своей безопасности полагается на задачу ECDLP. В итоге имеем: пара ключей публичный/приватный; имея приватный ключ легко получить публичный, но имея публичный получить приватный «невозможно».

  • Что такое «алгебраическая структура эллиптических кривых»? Это плоская кривая удовлетворяющая условиям y2 = x3 + ax + b. Её график выглядит следующим образом:

h_1488149041_7461745_4795e7880e.png

 

 

Кому есть до этого дело? Правильно, скорее всего никому. В случае, если кого-то это все-таки интересует – в сети есть множество статей (многие из них связаны с Биткойном), в которых подробно объясняется, как они работают, каким образом осуществляется добавление т.д. Некоторые примеры: A, B, C (входят в саму серию статей). Также в сети есть большое количество видео, если вам интересна эта тема.

 

Примечание: нет, эта забавная кривая не поможет вам понять как выглядит кривая Monero.

  • «Над конечными полями» – это означает, что точки кривой берутся по модулю некоторого (большого, простого) числа. Все мы знакомы со сложением и вычитанием по модулю (даже если никогда не слышали таких слов) например по подсчёту времени. Если сейчас 10 часов утра, то который час будет через 5 часов? Поздравляю, вы только что выполнили модульное дополнение. Эллиптическая кривая над конечным полем выглядит как-то так:

h_1488149085_2632701_cce5b52b2a.png

 

 

Вау, смотрится странно. Да. Но на самом деле нет. Обратите внимание, как точки «отражаются» вдоль воображаемой линии по центру.

 

Основным преимуществом использования ECC по сравнению с чем-то вроде RSA является то, что ключи гораздо проще для аналогичных уровней безопасности.

 

 

 

Я считаю, что единственное, что вам нужно знать, чтобы читать дальше следующее:

  1. Точка на кривой может быть добавлена или вычтена из другой точки или сама из себя;
  2. Точка не может быть умножена или разделена на другую точку;
  3. Добавление точки к самой себе позволяет произвести «скалярное умножение» и именно здесь происходит волшебство.

Вычитать точку из самой себя не несёт большой пользы, так как в этом случае мы просто возвращаем эквивалент ECC равный 0. Деление на целое число не представляется возможным (выполнение эквивалентной модульной операции - модульной мультипликативной инверсии - да, но только при понимании термина «скаляр»).

 

Скалярное умножение просто добавляет точку к себе снова и снова; если дана точка А, то 5А = A + A + A + A + A. Поскольку мы используем астрономически больших размеров скаляры, то чтобы уйти от использования метода грубой силы, используется такой метод, как удвоенное добавление, который позволяет производить вычисления почти за логарифмическое время (то есть, действительно быстро!). Вот простой пример:

 

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

  1. Добавляем А к самой себе, получаем 2А. Назовем эту новую точку B;
  2. Добавляем В к самой себе, получаем 2В. 2B = 4A = C;
  3. Добавляем C к себе: 2C = 4В = 8А = D;
  4. Добавляем D к себе: 2D = 4C = 8В = 16A = Е;
  5. Добавляем D в E: 24A = F;
  6. Добавляем В к F: 26А = G;
  7. Добавляем А к G: 27A.

Таким образом 26 дополнений мы сократили до 7. Эта разница экспоненциально растет при больших скалярах. Разница в скорости вычисления для среднего размера скаляра колеблется между «не хватит всей энергии во Вселенной» и «займёт менее 1/100-ой секунды на среднем компьютере», над чем было бы интересно поразмыслить.

Вот и всё, что касается общего материала по эллиптической криптографии!

 

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

 

 

Кривая Monero, приватные и публичные "ключи"

 

В заключение теперь рассмотрим конкретные вещи по Monero.

 

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

 

h_1488150308_1164734_c0ab1370f4.png

 

Мы имеем дело с кривой Ed25519, которая представляет собой криптостойкую кривую Эдвардса. Хорошо, теперь поговорим о более бессмысленных деталях!

 

Давайте вкратце разберёмся с этим:

  • q: это общее число точек на этой кривой. Это в основном не имеет отношения к нашему вопросу;
  • d: элемент, используемый в уравнении кривой ниже. Это тоже неважно;
  • E: уравнение для нашей кривой Ed25519. Вау, круто! Но тоже неважно;
  • G: базовая точка или точка генератора. Это важно! Это основа, с которой начинаются многие операции. Это как «А» в приведенном выше примере. В шестнадцатеричном коде, в котором, как правило, представлены все наши ключи, это выглядит следующим образом: "5866666666666666666666666666666666666666666666666666666666666666". Отлично, мы снова вернулись к бесполезной информации.
  • 1: «расположение» указанной выше базовой точки. Это важно, так как оно определяет максимальное количество точек, которое мы можем использовать и тот максимальный размер скаляра, который может быть. Это число, как число «12» на часах; совместное добавление точек или скаляров для «обхода» означает, что они вместо этого будут «обтекать» базовую точку. Если бы была возможность добавлять G к себе снова, снова и снова, пока не будет достигнут l-1 номер дополнения, в конечном итоге вы бы вернулись обратно в G.
  • Hs и Hp: s означает скаляр, р означает точку. По этому поводу будет обсуждение в одной из следующих статей.

Примечание:

  1. Скаляры (приватные ключи, на самом деле просто большие числа) всегда представляются строчными буквами в уравнениях.
  2. Точки (публичные ключи, действительно закодированные координаты на кривой) всегда представляются прописными буквами.

В "реальном мире" (пользовательском) как приватные, так и публичные ключи в Monero представлены 64-мя шестнадцатеричными символами, аналогично с приведённым выше описанием G.

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

 

 

Если принять, что x – приватный ключ, а P – публичный ключ, то Р = xG.

 

Некоторые примеры «для веселья»:

  • х = 1 или "0100000000000000000000000000000000000000000000000000000000000000" (помним о прямом порядке байтов); P = "5866666666666666666666666666666666666666666666666666666666666666" или G. (1G = G)

  • х = l - 1 или "ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010";
    P = "58666666666666666666666666666666666666666666666666666666666666e6" (отмечаем сходство с G); Это последняя точка перед обтеканием. Вы можете представить ее как -G. В результате добавления G к этому значению появится специальный единичный элемент, такой же, как умножение точки на 0 или последовательность l, или вычитание точки из себя.

  • Целое число (l + 1) / 2, "f7e97a2e8d31092c6bce7b51ef7c6f0a00000000000000000000000000000008", создаёт точку дальше от G (достаточно близко, так что эта и следующая точки оказываются связанными из-за того, что l - нечётное), "ac1999070321b2c6309cc8e31aa89a8b3baa75b5f8febf47855555a3e744bcf0", подобно тому, как на циферблате часов 6 находится дальше от всех по отношению к 12. Эта точка (так же, как и точка G или любая другая точка) является дополнительной (которая в данном случае возникла по формуле (l-1) / 2), суммируя значение которой с любой другой точкой, мы получим единицу.

Monero счета и адреса

 

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

  • Выбираем случайный приватный ключ, отвечающий за трату средств (private spend key), как правило, путём создания 256 случайных бит, затем «сокращаем» его по модулю l. Назовем этот ключ b (чтобы это соответствовало официальному документу – хотя это и заблуждение, я знаю).

  • Хэш b с выбранным алгоритмом, H (Keccak_256 используется в нашем случае). Интерпретируем результат как целое число и сокращаем его по модулю l, как мы это делали раньше. Назовём этот ключ а.

  • Подсчитаем: B = Bg и A = aG. Это будут ваши публичный ключ для трат (public spend key) и публичный ключ для обзора (public view key).

  • Хэш (префикс (0x12 в стандартном Monero) + B + A) вместе с H.

  • Добавим первые четыре байта результата к (префикс + B + A). В итоге получим 69 байт (1 + 32 + 32 + 4).

  • Преобразование в cnBase58. Это не так просто, как с обычным base58, поскольку он использует блоки и отступы, что приводит к конвертации фиксированной длины. 69 байт – это всегда будет 95 cnBase58-символов.

Интегрированные адреса (описанные в этой статье) такие же, как и выше, но с 8-байтным платёжным ID, добавленным к A на шаге 4 выше и с другим префиксом (0x13).

 

 

Это всё, что хотелось рассказать во вступительной статье. Надеюсь, она не получилась полностью беспорядочной и неясной. Дополнительные статьи по адресам-невидимкам (stealth addresses)и по технологии кольцевой подписи (ring signatures) будут выходить в ближайшее время.

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

________________________________________________________________________

У дочери обнаружили нейробластому, 4 стадия с метастазами в шейных лимфоузлах.

Подробности в группах на фейсбуке и вконтакте:

https://www.facebook.com/groups/1862662937341925/

https://vk.com/club140309312

Всех небезразличных прошу помочь.

Мой BTC-кошелек: 1JDLdjTNvkDFmpiXAKuvN4RZNxqnRynsyc

Дополнительные реквизиты указаны в постах по ссылкам.

Спасибо!

________________________________________________________________________

0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...