Математические основы биткойн-блокчейна / Bitfury Group corporate blog / Habr
Сегодня биткойн продолжает набирать популярность, а индустрия разрабатывать все новые приложения для работы с криптовалютой. Одной из причин такой популярности является строгая математическая база, на которой строится биткойн.Благодаря этому система функционирует в условиях полного отсутствия доверия между участниками сети, исключая воздействие человеческого фактора.
Поэтому в сегодняшней статье мы бы хотели поговорить о математических основах биткойн-блокчейна — эллиптических кривых, ECDSA и ключах.
/ Изображение Hernán Piñera CC BY
Фундаментальной частью биткойна являются криптографические алгоритмы. В частности, алгоритм ECDSA — Elliptic Curve Digital Signature Algorithm, который использует эллиптические кривые (elliptic curve) и конечные поля (finite field) для подписи данных, чтобы третья сторона могла подтвердить аутентичность подписи, исключив возможность её подделки. В ECDSA для подписи и верификации используются разные процедуры, состоящие из нескольких арифметических операций.
Эллиптические кривые
Эллиптическая кривая над полем K — это кубическая кривая над алгебраическим замыканием поля K, задаваемая уравнением третьей степени с коэффициентами из поля K и «точкой на бесконечности». Одной из форм эллиптических кривых являются кривые Вейерштрасса.
y² = x³ + ax + b
Для коэффициентов a = 0 и b = 7 (используемых в биткойне), график функции принимает следующий вид:
Эллиптическая кривая
Эллиптические кривые имеют несколько интересных свойств, например, невертикальная линия, пересекающая две некасательные точки на кривой, пересечет третью точку на кривой. Суммой двух точек на кривой P + Q называется точка R, которая является отражением точки -R (построенной путем продолжения прямой (P; Q) до пересечения с кривой) относительно оси X.
Сумма двух точек на кривой (источник)
Если же провести прямую через две точки, имеющие координаты вида P (a, b) и Q (a, -b), то она будет параллельна оси ординат. В этом случае не будет третьей точки пересечения. Чтобы решить эту проблему, вводится так называемая точка на бесконечности (point of infinity), обозначаемая как O. Поэтому, если пересечение отсутствует, уравнение принимает следующий вид P + Q = O.
Если мы хотим сложить точку саму с собой (удвоить её), то в этом случае просто проводится касательная к точке Q. Полученная точка пересечения отражается симметрично относительно оси X.
Удвоение точки (источник)
Эти операции позволяют провести скалярное умножение точки R = k*P, складывая точку P саму с собой k раз. Однако отметим, что для работы с большими числами используются более быстрые методы.
Эллиптическая кривая над конечным полем
В эллиптической криптографии (ECC) используется такая же кривая, только рассматриваемая над некоторым конечным полем. Конечное поле в контексте ECC можно представить как предопределенный набор положительных чисел, в котором должен оказываться результат каждого вычисления.
y² = x³ + ax + b (mod p)
Например, 9 mod 7 = 2. Здесь мы имеем конечное поле от 0 до 6, и все операции по модулю 7, над каким бы числом они ни осуществлялись, дадут результат, попадающий в этот диапазон.
Все названные выше свойства (сложение, умножение, точка в бесконечности) для такой функции остаются в силе, хотя график этой кривой не будет походить на эллиптическую кривую. Эллиптическая кривая биткойна, y² = x³ + 7, определенная на конечном поле по модулю 67, выглядит следующим образом:
Эллиптическая кривая биткойна, определенная на конечном поле по модулю 67 (источник)
Это множество точек, в которых все значения х и у представляют собой целые числа между 0 и 66. Прямые линии, нарисованные на этом графике, теперь будут как бы «оборачиваться» вокруг поля, как только достигнут барьера 67, и продолжатся с другого его конца, сохраняя прежний наклон, но со сдвигом. Например, сложение точек (2, 22) и (6, 25) в этом конкретном случае выглядит так:
Сложение точек (2, 22) и (6, 25) (источник)
Если хотите посмотреть, как выглядят другие эллиптические кривые, то поэкспериментировать можно на этом сайте.
ECDSA в биткойне
В протоколе биткойна зафиксирован набор параметров для эллиптической кривой и её конечного поля, чтобы каждый пользователь использовал строго определенный набор уравнений. Среди зафиксированных параметров выделяют уравнение кривой (equation), значение модуля поля (prime modulo), базовую точку на кривой (base point) и порядок базовой точки (order). О вычислении порядка базовой точки вы можете почитать здесь. Этот параметр подбирается специально и является очень большим простым числом.
Уравнение эллиптической кривой: y² = x³ + 7
Простой модуль: 2256— 232 — 29 — 28 — 27 — 26 — 24 — 1 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
Базовая точка:
04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
Жирным шрифтом выделена координата X в шестнадцатеричной записи. За ней сразу следует координата Y.
Порядок: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
Этот набор параметров для эллиптической кривой известен как secp256k1 и является частью семейства стандартов SEC (Standards for Efficient Cryptography), предлагаемых для использования в криптографии. В биткойне кривая secp256k1 используется совместно с алгоритмом цифровой подписи ECDSA (elliptic curve digital signature algorithm). В ECDSA секретный ключ — это случайное число между единицей и значением порядка. Открытый ключ формируется на основании секретного: последний умножается на значение базовой точки. Уравнение имеет следующий вид:
Открытый ключ = секретный ключ * G
Это показывает, что максимальное количество секретных ключей (следовательно, биткойн-адресов) — конечно, и равняется порядку. Однако порядок является невероятно большим числом, так что случайно или намеренно подобрать секретный ключ другого пользователя нереально.
Вычисление открытого ключа выполняется с помощью тех же операций удвоения и сложения точек. Это тривиальная задача, которую обычный персональный компьютер или смартфон решает за миллисекунды. А вот обратная задача (получение секретного ключа по публичному) — является проблемой дискретного логарифмирования, которая считается вычислительно сложной (хотя строгого доказательства этому факту нет). Лучшие известные алгоритмы ее решения, вроде ро Полларда, имеют экспоненциальную сложность. Для secp256k1, чтобы решить задачу, нужно порядка 2
Когда пара секретный/публичный ключ получена, её можно использовать для подписи данных. Эти данные могут быть любой длины. Обычно первым шагом выполняется хеширование данных с целью получения уникального значения с числом битов, равным битности порядка кривой (256). После хеширования, алгоритм подписи данных z выглядит следующим образом. Здесь, G — базовая точка, n — порядок, а d — секретный ключ.
- Выбирается некоторое целое k в пределах от 1 до n-1
- Рассчитывается точка (х, у) = k * G с использованием скалярного умножения
- Находится r = х mod n. Если r = 0, то возврат к шагу 1
- Находится s = (z + r * d) / k mod n. Если s = 0, то возврат к шагу 1
- Полученная пара (r, s) является нашей подписью
После получения данных и подписи к ним, третья сторона, зная публичный ключ, может их верифицировать. Шаги для проверки подписи такие (Q — открытый ключ):
- Проверка, что и r, и s находятся в диапазоне от 1 до n-1
- Рассчитывается w = s-1 mod n
- Рассчитывается u = z * w mod n
- Рассчитывается v = r * w mod n
- Рассчитывается точка (x, y) = uG + vQ
- Если r = x mod n, то подпись верна, иначе — недействительна
В самом деле,
uG + vQ = u + vdG = (u + vd)G = (zs-1 + rds-1)G = (z + rd) s-1G = kG
Последнее равенство использует определение s на этапе создания подписи.
Безопасность ECDSA связана со сложностью задачи поиска секретного ключа, описанной выше. Помимо этого, безопасность исходной схемы зависит от «случайности» выбора k при создании подписи. Если одно и то же значение k использовать более одного раза, то из подписей можно извлечь секретный ключ, что и произошло с PlayStation 3. Поэтому современные реализации ECDSA, в том числе используемые в большинстве биткойн-кошельков, генерируют k детерминировано на основе секретного ключа и подписываемого сообщения.
P.S. Bitfury Group Russia в Vk и Fb.
habr.com
Математика Биткойна: Теория |
Одна из причин, почему Биткойн многих сбивает с толку, заключается в том, что эта технология пересматривает одну из базовых концепций человеческого общества: понятие собственности.
В традиционном смысле, если вы являетесь собственником чего-либо: будь то дом или денежная сумма — это означает, что либо эта вещь находится у вас лично, вы ей владеете и распоряжаетесь непосредственно, либо вы поручили управление ей доверенному третьему лицу, такому как банк.
С Биткойном эта простая схема не работает. Сами по себе биткойны не хранятся ни централизованно, ни локально — и поэтому нельзя сказать, кто отвечает за их доверенное хранение. Биткойны существуют лишь как записи в распределенной бухгалтерской книге, называемой блокчейном, копии которой распределены среди добровольной сети подключенных компьютеров. Быть «владельцем» биткойнов просто означает иметь возможность передать контроль над этими записями кому-то еще, зафиксировав факт этой передачи на блокчейне. Что дает вам эту способность? Эксклюзивный доступ к паре ключей ECDSA: секретному и публичному. Хорошо, но что конкретно это означает, и почему это вдруг гарантирует безопасность этих самых биткойнов?
Давайте-ка попробуем заглянуть под капот.
Что это за ECDSA такая?
ECDSA — это акроним для Алгоритма Цифровой Подписи с Эллиптическими Кривыми. Это процесс, который использует эллиптические кривые и конечные поля, чтобы «подписать» данные таким образом, что третьи лица могут легко проверить подлинность подписи, но при этом сам подписывающий оставляет за собой эксклюзивную возможность создавать подписи. В случае Биткойна «данные», которые подписываются — это транзакция, которая передает право собственности на биткойны.
ECDSA имеет две отдельные процедуры для подписи и ее проверки. Каждая процедура представляет собой алгоритм, состоящий из нескольких арифметических операций. Алгоритм подписи использует секретный ключ, а алгоритм проверки использует только открытый ключ. Мы покажем это на примере позже.
Но для начала давайте пройдем ускоренный курс молодого бойца по эллиптическим кривым и конечным полям.
Эллиптические кривые
В эллиптических кривых нет ничего сложного. Алгебраически каждая такая кривая может быть представлена как уравнение вида:
y² = x³ + ах + b
Для а = 0 и b = 7 (а это именно та версия, которую использует Биткойн) эта кривая выглядит так:
Эллиптические кривые имеют некоторые полезные свойства. Например, не-вертикальная прямая, пересекающая кривую в двух точках, всегда будет пересекать ее и в третьей точке, лежащей на кривой. Другим свойством является то, что если не-вертикальная прямая является касательной к кривой в одной из точек, то она обязательно пересекает кривую еще ровно в одной точке.
Мы можем использовать эти свойства, чтобы определить две операции над точками, составляющими кривую: сложение точек и удвоение.
Для сложения точек, P + Q = R мы проводим через точки P и Q прямую, которая, по свойствам эллиптических кривых, пересекает кривую в некоторой третьей точке R‘. Затем мы находим точку на кривой, симметричную точке R‘ относительно оси X. Именно эта точка R и будет считаться суммой P и Q. Это легче всего понять, глядя на следующую схему:
Это все хорошо, но как бы нам сложить точку саму с собой? Для этого определяется операция удвоения точки, P + P = R. При удвоении мы проводим прямую, касательную к данной эллиптической кривой в точке P, которая, согласно свойствам кривой, должна пересекать ее еще в одной точке R‘. Точка R, симметричная R‘ относительно оси X, и будет считаться точкой удвоения P. На графике это выглядит следующим образом:
Эти две операции можно использовать, чтобы определить операцию скалярного умножения, R = a P, определяемую как добавление точки Р самой к себе a раз. Например:
R = 7P
R = P + (P + (P + (P + (P + (P + P)))))
Процесс скалярного умножения, как правило, можно упростить, используя комбинацию сложения и удвоения точек. Например:
R = 7P
R = P + 6P
R = P + 2 (3P)
R = P + 2 (Р + 2P)
Здесь операция 7P была разбита на два этапа удвоения точек и два сложения точек — в итоге, вместо 7 операций нужно произвести всего четыре.
Собственно, теперь вы знаете об эллиптических кривых все, что о них стоит знать.
Конечные поля
Теперь поговорим немного о конечных полях. Конечное поле, в контексте ECDSA, можно рассматривать как заданный диапазон положительных чисел. Любые операции должны осуществляться в рамках этого диапазона — если же результат операции выходит за пределы этого диапазона, мы не расстраиваемся, а просто по окончании диапазона возвращаемся к его началу и продолжаем считать как ни в чем ни бывало. Таким образом, результат все равно окажется внутри нашего диапазона, как бы он ни хотел из него выбраться.
Самый простой способ проиллюстрировать это — расчет операции «остаток от целочисленного деления», или оператор модуло (MOD). Например, 9/7 дает 1 с остатком 2:
9 MOD 7 = 2
Здесь мы имеем конечное поле от 0 до 6, и все операции по модулю 7, над каким бы числом они не осуществлялись, дадут результат попадающий в этот диапазон.
Скрещиваем кривые с полями
ECDSA использует не просто эллиптические кривые, а эллиптические кривые в контексте конечного поля, что значительно меняет их внешний вид. Причем, меняет его так, что теперь эти самые кривые даже родная мама не узнает. Допустим, та же самая красивая эллиптическая кривая Биткойна, y² = x³ + 7, которая изображена выше, но только определенная на конечном поле по модулю 67, выглядит как такая вот странная крякозябра:
Однако заметим в ее оправдание, что, хотя она и стала неузнаваемой для непосвященных, лежащие в основе этой «кривой» уравнения или ее особые свойства ничуть не изменились. Просто теперь это множество точек, в которых все х и у значения представляют собой целые между 0 и 66 Отметим также, что «кривая» по-прежнему сохраняет свою горизонтальную симметрию.
Правда, процесс операций над точками: сложения и удвоения — сейчас будет немного отличаться визуально. «Прямые линии», нарисованные на этом графике, теперь будут оборачиваться «вокруг поля», как только они достигнут магического барьера 67, как в древней аркадной игре «Asteroids», и продолжаться с другого его конца, сохраняя прежний наклон, но со сдвигом. Поэтому сложение точек (2, 22) и (6, 25) в данном дискретном варианте выглядит следующим образом:
«Оборачивающаяся прямая», проходящая через эти две точки, в итоге уперлась в третью точку (47, 39), а симметричная ей «относительно оси X» будет (47, 28). Вот эта-то точка и станет результатом нашей операции.
Применим свою математическую мудрость к криптографии
Чтобы использовать ECDSA, такой протокол как Биткойн должен зафиксировать набор параметров для эллиптической кривой и ее конечного поля, чтобы эти параметры знали и применяли все пользователи протокола. Иначе каждый будет решать свои собственные уравнения, которые не будут сходиться друг с другом, и они никогда ни о чем не договорятся.
Эти зафиксированные параметры включают в себя уравнение кривой, значение модуля поля и базовую точку, которая лежит на кривой. Последним параметром является порядок базовой точки, который в графическом виде можно представить себе как количество раз, которое базовая точка может быть прибавлена к себе до тех пор, пока ее касательная кривая не станет вертикальной. Этот параметр подбирается таким образом, чтобы он являлся очень большим простым числом.
Для всех этих параметров Биткойн использует очень-очень большие (ну просто офигенно невообразимо огромные) числа. Это важно. На самом деле, все практические применения ECDSA используют огромные числа. Ведь безопасность этого алгоритма опирается на то, что эти значения слишком большие, чтобы подобрать что-то простым перебором или «брутфорсом».
В случае Биткойна эти значения таковы (запись чисел дана не в десятичном, а в более компактном шестнадцатеричном виде, привычном программистам):
Уравнение эллиптической кривой: y² = x³ + 7
Простой модуль = 2256 — 232 — 29 — 28 — 27 — 26 — 24 — 1 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
Базовая точка = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
Порядок = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
Кто выбрал эти цифры, и почему? Большое количество исследований и изрядная интрига всегда окружают выбор соответствующих параметров. В конце концов, большое и, казалось бы, случайное число может скрывать в себе какую-нибудь «заднюю дверцу» для упрощения вычислений, которая может быть доступна только посвященным. Если вкратце, данная конкретная реализация ECDSA известна как secp256k1 и является частью семейства стандартов, предлагаемых для использования в криптографии.
Вооружившись всеми этими базовыми знаниями, в следующей статье мы будем готовы применить эту математику к Биткойну и выяснить, наконец, что же там происходит в недрах нашего биткойн-клиента, когда мы нажимаем на кнопку «Оплатить». Ну а пока вы ждете второй части, можете слегка освежить свои знания относительно анатомии биткойн-адресов и транзакций. А если вы разработчик, то можно полюбопытствовать, что же там происходит внутри этого таинственного API биткойн-протокола.
(Продолжение следует)
Источник: Coindesk
Aвтор: Eric Rykwalder
Поделиться ссылкой:
Related
bitnovosti.com
Как устроен блокчейн?
Цель этой статьи – объяснить, как работает блокчейн, не вдаваясь в технические детали. Но краткой выжимки достаточно, чтобы дать вам общее представление о лежащих в основе логике и механизмах.
Технологию блокчейн можно назвать одной из самых значительных инноваций после появления интернета. Блокчейн позволяет обменять валюту, обходясь без доверия третьих лиц или участия центрального надзорного органа. Представьте, мы с вами заключаем пари по поводу завтрашней погоды в Сан-Франциско. Я ставлю $50, что будет солнечно, а вы ставите свои $50 на то, что будет дождь.
На сегодняшний день есть 3 возможности управления этой транзакцией:
1. Мы можем довериться друг другу. Дождливо или солнечно — неважно, проигравший отдает победителю $50. Если бы мы были друзьями, нам было бы проще управлять этим процессом. Независимо от того, друзья мы или незнакомцы, один может отказаться платить другому.
2. Мы можем подкрепить наше пари контрактом. Если же будет заключен контракт, обе стороны будут обязаны его соблюдать (заплатить в случае проигрыша). Кто-либо из них все же можеть решить не платить, победителю тогда придется нести дополнительные расходы, чтобы покрыть судебные издержки. Вынесение приговора может занять много времени. Если сумма небольшая, то этот способ не является оптимальным.
3. Мы можем привлечь нейтральную третью сторону. Каждый из нас дает $50 гаранту, затем он отдаст общую сумму победителю. Но нейтральная сторона может скрыться со всеми нашими деньгами и потребует комиссию. Таким образом, мы получаем один из первых двух вариантов: доверие или контракт.
Ни доверие, ни контракт не являются оптимальными решениями: мы не можем доверять незнакомцам, а для работы по договору требуются время и деньги. Технология блокчейн интересна тем, что предлагает нам третий вариант, который является безопасным, быстрым и дешевым.
Блокчейн позволяет нам отправить по $50, написав лишь пару строчек кода. Программа будет обеспечивать сохранность $100 и автоматически проверять завтрашнюю погоду в нескольких источниках.
Получив информацию от оракулов (Что такое блокчейн-оракулы?), программа автоматически передаст всю сумму победителю. Каждая сторона может проверить логику (после того, как она запущена на блокчейне, ее нельзя изменить или остановить). Возможно, эти усилия могут быть неоправданны для ставки в $50, но представьте, если вы продаете дом или компанию.
Биткоин – наиболее известное и обсуждаемое применение технологии блокчейн. Цифровая валюта, которая может использоваться для обмена продуктами и услугами, как доллар США (USD), евро (EUR), китайский юань (CNY) и другие национальные валюты. Давайте рассмотрим этот вариант применения технологии блокчейн, чтобы понять, как это работает.
Биткоин впервые дал нам возможность перевести уникальную часть цифрового имущества другому пользователю интернета и гарантировал при этом безопасность перевода. Технология позволяет оповестить пользователей о состоявшейся передаче и гарантирует ее легитимность. Значение этого прорыва трудно переоценить.
Итак, что же такое Биткоин?
Один биткоин — это единица цифровой валюты сети Биткоин (BTC). Так же, как и доллар, она не имеет ценности сама по себе, она принимается только потому, что мы соглашаемся торговать товарами и услугами в обмен на более высокую сумму валюты под нашим контролем и мы считаем, что другие будут делать то же самое. Чтобы отслеживать количество Биткоинов, каждый из нас владеет блокчейном, использует реестр, который отслеживает все транзакции биткоинов.
Рис. 1
Файл реестра не хранится на центральных серверах, таких как банк или центр обработки и хранения данных.
Он распространяется по всему миру через сеть частных компьютеров, которые одновременно хранят данные и выполняют вычисления. Каждый из этих компьютеров представляет собой «узел» сети блокчейн и имеет копию файла регистра.
Если Дэвид хочет отправить биткоины Сандре, он транслирует сообщение в сеть, в котором говорит, что количество биткоинов в его учетной записи должно снизиться на 5 BTC, а баланс счета Сандры должна увеличиться на то же количество. Каждый узел в сети получит сообщение и применит запрошенную транзакцию в свою копию книги (реестра), тем самым обновив балансы.
Рис. 2
Тот факт, что книга хранится группой подключенных компьютеров, а не централизованной организацией, такой как банк, влечет за собой несколько условий:
— В то время, как в нашей банковской системе только мы видим собственные транзакции и балансы счетов, в блокчейне каждый может видеть транзакции любых других людей.
— Обычно вы доверяете своему банку. Сеть же биткоина распределена, и если что-то пойдет не так, нет никакой справочной службы или возможности подать в суд.
— Блокчейн работает таким образом, что не требует никакого доверия. Безопасность и надежность обеспечиваются с помощью специальных математических функций и кода.
Мы можем определить блокчейн как систему, которая позволяет группе подключенных компьютеров поддерживать и обновлять единый безопасный журнал.
Чтобы иметь возможность выполнять транзакции в блокчейне, вам нужен кошелек − программа, которая позволяет хранить и обменивать ваши биткоины. Поскольку только вы можете тратить свои токены, каждый кошелек защищен специальным криптографическим методом, который использует уникальную пару разных, но связанных ключей: приватный и публичный ключ. Если сообщение зашифровано с помощью специального публичного ключа, то только владелец парного приватного ключа сможет расшифровать и прочитать его. С другой стороны, если вы шифруете сообщение своим приватным ключом, то для его расшифровки можно использоваться только парный публичный ключ. Подробнее о ключах читайте в статье «В чем разница между публичным и приватным ключом».
Если Дэвид хочет отправить биткоины, ему нужно передать сообщение, зашифрованное приватным ключом его кошелька, поэтому он и только он может потратить токены. Каждый узел в сети может перекрестно проверить, что запрос транзакции поступает от Дэвида, дешифруя сообщение на запрос транзакции с помощью публичного ключа от его кошелька. При шифровании запроса транзакции с помощью приватного ключа вашего кошелька вы генерируете цифровую подпись, которая используется компьютерами, чтобы дважды проверить источник и подлинность транзакции. Цифровая подпись представляет собой строку текста, которая является результатом комбинации запроса транзакции и вашего приватного ключа, поэтому она не может использоваться для других транзакций. Если вы измените один символ в сообщении о запросе транзакции, цифровая подпись изменится, поэтому потенциальный злоумышленник не сможет изменить переводимое вами количество биткоинов.
Рис. 3
Чтобы отправить биткоин, вам нужно доказать, что у вас есть приватный ключ от определенного кошелька, поскольку вам нужно его использовать для шифрования сообщения о запросе транзакции. Обратите внимание, что вы передаете сообщение только после того, как оно было зашифровано, то есть вам никогда не придется раскрывать свой приватный ключ. Каждый узел блокчейна хранит копию реестра. Итак, как же узел узнает баланс вашего аккаунта? Биткоин вообще не отслеживает остатки на счетах (как показано на рисунке 1), она регистрирует только каждую запрошенную транзакцию. В действительности книга не отслеживает баланс, она отслеживает только каждую транзакцию, транслируемую в сети биткоина (рисунок 4). Чтобы узнать баланс своего кошелька, вам необходимо проанализировать и проверить все транзакции, которые когда-либо происходили во всей сети, относящиеся к вашему кошельку.
Рис. 4
Эта проверка «баланса» выполняется благодаря ссылкам на предыдущие транзакции. Чтобы отправить 10 Биткоинов Джону, Мэри должна сгенерировать запрос транзакции, который включает ссылки на предыдущие входящие транзакции, общий баланс которых равен или превышает 10 Биткоинов. Эти ссылки называются входами, узлы в сети будут проверять, что общая сумма этих транзакций равна или превышает 10 биткоинов и что эти токены еще не были потрачены. Фактически каждый раз, когда вы ссылаетесь на входы в транзакции, они будут считаться недействительными в будущей транзакции. Все это выполняется автоматически в кошельке Мэри и дважды проверяется сетевыми узлами Биткоина. После этого происходит отправка 10 BTC на адрес Джона, используя публичный ключ.
Рис. 5
Итак, как система может доверять входным транзакциям и считать их действительными? Система проверяет все предыдущие транзакции, которые коррелируют с кошельком, который вы используете для отправки биткоинов, по ссылкам, которые каждый имеет в качестве входных данных. Для упрощения и ускорения процесса проверки сетевые узлы поддерживают специальную запись неизрасходованных транзакций. Благодаря этой проверке безопасности невозможно дважды потратить полученные биткоины.
Владение биткоинами означает, что в реестре есть транзакции, указывающие на ваш кошелек и не используемые в качестве входных данных.
Весь код для выполнения транзакций в сети Биткоин является открытым исходным кодом, это означает, что любой, у кого есть ноутбук и доступ к интернету, может работать с транзакциями. Однако, если в коде, который используется для трансляции сообщения запроса, будет допущена ошибка, все биткоины будут потеряны. Помните, что, поскольку сеть распределена, нет службы поддержки и никого, кто мог бы помочь вам восстановить потерянные монеты или забытый пароль от кошелька. По этой причине, если вы заинтересованы в совершении транзакций в сети Биткоин, рекомендуется использовать открытую исходную и официальную версию программного обеспечения Биткоин-кошелька (например, Jaxx) и хранить пароль своего кошелька или приватный ключ в очень надежном месте.
Действительно ли блокчейн безопасен? И почему он называется именно blockchain?
Любой пользователь может получить доступ к сети Биткоин через анонимное соединение (т. е. Сеть TOR или сеть VPN), а также отправлять или получать транзакции, не раскрывая ничего, кроме своего публичного ключа. Однако, если кто-то использует один и тот же публичный ключ снова и снова, можно связать все транзакции с одним и тем же владельцем. Сеть Биткоин позволяет создавать столько кошельков, сколько вам хочется, каждый из которых имеет свой приватный и общественный ключи. Это позволяет получать платежи на разные кошельки, которые нельзя связать воедино. Невозможно узнать, что вы владеете всеми этими кошельками и приватными ключами, если вы не отправляете все полученные биткоины в один кошелек.
Общее количество возможных адресов Биткоинов — 2¹⁶⁰ или 1461501637330902918203684832716283019655932542976. Это большое количество защищает сеть от возможных атак.
Сеть Биткоин вносит транзакцию, складывая их в группы, называемые блоками, каждый блок содержит определенное количество транзакций и ссылку на предыдущий блок. Это механизм, который ставит один блок за другим во времени. Поэтому блоки организованы во цепочку (рис. 6), которая и дает имя всей системе: blockchain (цепь блоков).
Рис. 6
Сделки в одном и том же блоке должны выполняться одновременно, а транзакции, которые еще не были включены в блок, считаются неподтвержденными. Каждый узел может группировать транзакции и транслировать их в сеть как предложение для следующего блока. Если любой узел может предложить новый блок, то как система определяет, какой блок должен быть следующим?
Чтобы быть добавленным к блокчейну, каждый блок должен содержать ответ на сложную математическую задачу, созданную с использованием необратимой криптографической хэш-функции. Единственный способ решить такую математическую задачу — угадать случайные числа, которые в сочетании с предыдущим блочным контентом, генерируют определенный результат (обычно число ниже определенного значения). Простому компьютеру может потребоваться около года, чтобы угадать правильное число и решить математическую проблему. Однако из-за большого числа компьютеров в сети, которые угадывают числа, блок решается в среднем каждые 10 минут. Узел, который первым успешно решает такую математическую задачу, получает право размещать следующий блок в цепочке и транслировать его по всей сети.
А что, если два узла одновременно решают задачу и одновременно расширяют свои блоки в сети? В этом случае оба блока передаются, и каждый узел фокусируется на блоке, который он получил первым, однако система блокчейн требует, чтобы каждый узел строился сразу на самой длинной доступной цепочке блоков. Поэтому, если есть двусмысленность в отношении того, что является последним блоком, и первое время каждый узел будет использовать самую длинную цепочку в качестве единственного варианта.
Рис. 7
Вероятность одновременного решения блоков низкая. Очень маловероятно, что несколько блоков одновременно создадут разные «концы» цепи, поэтому вся цепочка блокчейн быстро приходит к одной цепочке блоков, на которую соглашается каждый узел. Разногласия в отношении того, какой блок представляет собой конец цепи, снова создает возможности для мошенничества. Если транзакция происходит в блоке, который принадлежит более короткому хвосту (например, блок B на рис.7), такая транзакция вернется к неподтвержденным транзакциям, сразу поле того как будет присоединен следующий блок, как и все остальные, включенные в блок B.
Рис. 8
Итак, как система предотвращает мошенничество? Каждый блок содержит ссылку на предыдущий блок (см. рис. 6), и эта ссылка является частью математической загадки, которая должна быть решена, чтобы распространить следующий блок в сети. Мэри участвует в гонке против остальной сети в решении математической загадки, успех в нахождении ответа на которую позволит ей разместить следующий блок в цепочке. И даже если она угадает код быстрее остальных, вряд ли она сможет проделывать это 2, 3 или более раз подряд, так как она конкурирует со всей сетью. Итак, стоит ли Мэри использовать компьютер, чтобы конкурировать со всей сетью при присоединении блоков? Да, но даже с очень быстрым компьютером, из-за большого количества членов в сети, очень маловероятно, что Мэри могла бы решить несколько загадок подряд самой первой.
Ей нужно было бы контролировать 50% вычислительной мощности всей сети, чтобы иметь 50-процентный шанс решить блок до того, как какой-либо другой узел выполнит это задание. И даже в этом случае у нее был бы только 25-процентный шанс решить два блока подряд. Чем больше блоков подряд будет присоединено, тем меньше вероятность успеха Мэри.
Транзакции в блокчейн системе Биткоина защищены математической голомовломкой: любой злоумышленник конкурирует со всей сетью.
Транзакции становятся все более и более безопасными с течением времени. Те, что были включены в блоки раньше, более безопасны, чем те, которые включены в последний блок. Рис. 9
Чтобы иметь возможность отправлять биткоины, вам нужно ссылаться на транзакцию, которая отправляет Биткоин на ваш кошелек, и это относится ко всем транзакциям, которые когда-либо занимали место в сети.
Итак, откуда взялись биткоины?
В качестве способа сбалансировать дефляционный характер Биткоинов из-за ошибок программного обеспечения и потери паролей от кошельков, вознаграждение предоставляется тем, кто решает математическую задачу.
Деятельность по запуску программного обеспечения блокчейна для получения вознаграждений называется «добыча» — очень похожа на добычу золота.
Эта награда — основной стимул, который подталкивает частных лиц к управлению узлами, обеспечивая тем самым необходимую вычислительную мощность, способную обработать транзакции Биткоина и стабилизировать сеть блокчейна.
Типичному компьютеру требуется много времени для верификации блока, поэтому узлы объединяются в группы, которые делят награду за большое количество предлагаемых решений. Такие группы называются майнинговыми пулами. Таким образом, группа быстрее угадывает правильное число и получает вознаграждение.
Некоторые из этих майнинговых пулов довольно большие и составляют более 20% от общей вычислительной мощности сети. Это имеет последствия для сетевой безопасности, как показано выше в примере с двойной тратой Мэри.
Тем не менее, некоторые из этих майнинг-пулов, которые объединяют значительную долю вычислительной мощности, решили ограничить количество своих членов, чтобы защитить сеть.
Чтобы не допустить остановки узлов, взимается небольшая сетевая комиссия, которая привязана к каждой транзакции. Вознаграждения собираются узлом, который успешно включает такие транзакции в блок и решает свою математическую загадку.
Благодаря этому механизму транзакции, связанные с более высокой наградой, обычно обрабатываются быстрее, чем транзакции, связанные с низкой наградой. Это означает, что при отправке транзакции вы можете решить, хотите ли вы быстрее ее обрабатывать (= дороже) или дешевле (что занимает больше времени).
Сборы за транзакции в сети биткоинов в настоящее время очень малы по сравнению с суммами, которые взимают банки.
Теперь, когда у вас есть общее представление о том, как работает блокчейн, давайте быстро оговорим, почему это так интересно.
Преимущества использования технологии блокчейн
— У вас полный контроль над стоимостью, нет третьей стороны, которая придерживала бы часть вашего счета или могла бы ограничить доступ к нему.
— Сумма может быть переведена за несколько минут, и транзакция может считаться безопасной в течение нескольких часов, а не дней или недель.
— Так как любой человек в любое время может проверить каждую транзакцию, совершенную на блокчейне, предоставляется полная прозрачность.
— Можно использовать технологию блокчейн для создания децентрализованных приложений, которые могли бы быстро и надежно управлять передачей информации и стоимостью.
Недостатки технологии
— Сделки можно осуществлять анонимно. С одной стороны, это сохраняет конфиденциальность пользователей, а с другой позволяет осуществлять нелегальную деятельность в сети, поскольку учреждения не могут отслеживать идентификацию пользователей
— Несмотря на большое количество обменных платформ, по-прежнему не так просто обменять биткоины на товары и услуги.
— Биткоин, как и многие другие криптовалюты, очень изменчив: на рынке не так много токенов, и спрос на них быстро меняется. Цена остается очень волатильной.
— Технология все еще находится в зачаточном состоянии. Новые инструменты разрабатываются каждый день, чтобы улучшить стабильность технологии, предлагая более широкий спектр функций, инструментов и услуг.
В целом, технология блокчейна имеет потенциал для проведения коренных изменений в нескольких отраслей промышленности от рекламы до распределения энергии. Основная сила технологии заключается в децентрализации. Мы наблюдаем все больше кейсов использования блокчейна (создание полностью децентрализованной платформы, на которой выполняются интеллектуальные контракты, такие как Ethereum), если вы хотите узнать об этом больше, пожалуйста, перейдите по приведенным ниже ссылкам.
Интернет – это информация, которую оценивает блокчейн.
Полезные ссылки:
Источник
chainmedia.ru
что такое блокчейн / Emercoin corporate blog / Habr
В 2017 году блокчейн стал предметом научного интереса, когда в Торонто открылся первый институт исследований блокчейна. Около 30 ведущих экспертов приступили к разработке различных проектов, связанных с этой технологией.Блокчейн — это надёжный способ хранения данных о сделках, контрактах, транзакциях, обо всём, что необходимо записать и проверить. Сегодня блокчейн проник практически во все сферы жизнедеятельности, готов в корне изменить финансовую систему государства и в разы упростить работу среднего и крупного бизнеса. Блокчейн не секретная технология: в сети огромное количество статей о том, как он устроен и по какому принципу работает. Мы собрали самые интересные и нужные факты в одну статью, на которую можно давать ссылку, когда вас спросят: «Что же такое блокчейн?»
Эта технология начала завоёвывать внимание с 2008 года. Поначалу блокчейн ассоциировался лишь с криптовалютой Биткоин. Но кто-то вовремя разглядел его многофункциональность и большие возможности.
Принцип работы
Суть работы блокчейна как цепочки блоков можно сравнить с пазлом. Блок — массив данных, в него вносится информация о транзакциях, которые попали в сеть после создания предыдущего блока (примерно за последние 10 минут). Каждый новый блок данных крепится к предыдущему с помощью сложных математических алгоритмов, что позволяет скрепить эти блоки на века. Чтобы создать новый блок, необходимо вычислить его криптографический отпечаток (хеш), удовлетворяющий определённым условиям.
Этот процесс производится большим количеством разных компьютеров, работающих в одной сети, которые решают некую сложную криптозадачу, в ходе которой необходимо рассчитать хеш (выходные данные) заголовка блока в блокчейне. Другими словами, подобрать особый код, который позволит получить хеш, содержащий определённое количество нулей в начале этого хеша. Процесс поиска блоков называется майнингом. Когда задача решена, формируется новый блок, который нельзя ни удалить, ни изменить. Зато каждый пользователь сети может увидеть всю информацию, находящуюся в блокчейне. Как если бы вы собирали пазлы по онлайн-трансляции перед многомиллионной аудиторией.
На криптографических хешах держится вся надёжность и защищённость блокчейна. Хеш выдаётся системой в формате огромного числа. Для заданного набора данных хэш-функция даёт один хеш, который обладает двумя крайне важными свойствами:
- первое заключается в том, что, даже обладая ключом, нельзя узнать исходный набор данных;
- второе свойство — практически невозможно найти другой набор данных, дающий такой же хеш.
Здесь тот случай, когда у медали две стороны: открытость и защищённость. К тому же при малейших изменениях данных результирующий хеш полностью меняется.
Это одно из главных правил технологии. Все данные блокчейн-блоков открыты для всех и всегда. Их легко проверить, легко отследить любое изменение информации. Поэтому вам не придётся гадать о том, насколько достоверны интересующие вас сведения — проверка их подлинности проста и доступна.
Техническая сторона более-менее понятна. А как это выглядит в реальном действии для обычных пользователей? Всем известно, как работает электронная почта. Представим, что одно письмо равно одной денежной единице, и мы можем отправить эти деньги конкретному адресату. Только, в отличие от электронной почты, у нас есть определённый лимит на письма (наличие денежных средств) и одно письмо мы можем отправить лишь одному адресату. После чего лимит наших писем сразу уменьшится, а информация об отправленном переводе зафиксируется как у отправителя, так и у получателя. При этом все письма надёжно защищены. Информацию о проведённой транзакции нельзя ни удалить, ни изменить. К тому же её видят все пользователи сети — адресаты вашей электронной книги.
Наше «письмо» может быть не только денежной единицей, но и ценной бумагой, акцией. Всем, чем угодно, что необходимо записать и проверить.
Блокчейн полностью децентрализирован, над ним не стоит никакой орган власти, который может запретить транзакции или заблокировать доступ к блокчейну. Не нужна никакая третья сторона для подтверждения передачи информации. Если мы передаем деньги, то необходимо подтверждение банка, если отправляем права на собственность, то требуется участие нотариуса. Блокчейн полностью исключает необходимость участия третьего доверенного лица.
Сегодня блокчейн перестаёт ассоциироваться с биткоином и становится самостоятельной технологией, которая ложится в основу новых приложений и систем. Эксперты уверены: как в своё время конные повозки уступили место автомобилям, так и блокчейн становится логичным эволюционным продолжением традиционных инструментов учёта. К тому же, если раньше о блокчейне говорили, как о хранилище данных, то теперь его возможности становятся гораздо шире, потому что он также может исполнять программы. Некоторые блокчейны позволяют каждому факту содержать мини-программу. В криптовалюте это можно проследить при совершении транзакций с условиями, например: пользователь А передаст пользователю B 12 BTC, если сегодня 15 апреля, 13:30.
В блокчейне нет магии, лишь математика. И всё же одно важное свойство этой технологии не перестаёт удивлять даже самых видных экспертов: возможности блокчейна ограничены лишь человеческой фантазией. Поэтому время покажет, на что ещё способен блокчейн.
Алгоритмы
2002 год. Америка. Агентство национальной безопасности США объявляет о создании хеш-функции SHA-2. Криптография выходит на новый уровень.
Пройдёт шесть лет, и алгоритм SHA-256 (один из видов SHA-2) ляжет в основу самой первой в мире криптовалюты, и до сегодняшнего дня останется той самой классикой, которую не истребят даже новомодные разработки.
Хеширование необходимо для того, чтобы преобразовать входные данные какой угодно длины в битовую или иначе выходную строку определённого размера. Происходит это преобразование благодаря хеш-функции или функции свёртки.
Применяется хеширование в различных приложениях, созданных для защиты информации. Не обошлось без хеш-функции и в блокчейне.
Чтобы закрыть блок, необходимо перебрать различные комбинации и подобрать правильный хэш. На первый взгляд, кажется, что хэш — это случайная последовательность букв и цифр. Но на самом деле это надёжная гарантия того, что, если в блоке изменится хотя бы один бит, каждый узел быстро узнает о попытке фальсификации истории транзакций.
Технически алгоритм SHA-256 работает так: исходное сообщение разбивается на блоки, затем каждый блок делится на 16 слов. Каждый блок сообщения алгоритм пропускает через цикл с 64 или 80 раундами. Результаты обработки каждого блока складываются, полученная сумма и является значением хеш-функции.
Для данного алгоритма необходимо мощное оборудование, тогда процесс будет эффективным. Сильное железо способно вычислять более 2 миллиардов хэшей в секунду. SHA-256 стал прототипом для самого массового алгоритма хеширования.
С целью противодействия вычислениям хеша на специализированном оборудовании (ASIC), был изобретён алгоритм хеширования под названием Scrypt. Его задача та же: найти хеш, только здесь упор сделан не на мощность оборудования, а на оперативную память и время, которое требуется для вычисления хеша.
Данный алгоритм во время производимых операций хранит в памяти более одной тысячи различных значений хэша. На выходе он комбинирует все значения и даёт конечный результат. Поэтому, по сравнению с SHA-256, здесь необходим большой объем памяти для вычисления scrypt-хэшей.
Есть и ещё один довольно популярный вид алгоритмов группы Х, и его разновидности Х15, Х13, Х11. Цифра после Х — это то количество последовательных функций, которые используются для вычисления блока. Эти алгоритмы достаточно часто используют различные форки криптовалют. Такие криптовалюты очень нравятся майнерам-любителям, так как эти криптовалюты можно майнить на видеокартах, без затрат на покупку специализированного оборудования.
Следующий алгоритм называется Blake. Как и SHA-2, BLAKE имеет два варианта: первый использует 32-битные слова, используемые для вычисления хешей длиной до 256 бит, а второй использует 64-битные слова, используемые для вычисления хешей длиной до 512 бит. Преобразование базового блока объединяет 16 слов ввода с 16 рабочими переменными, но между блоками сохраняется только 8 слов (256 или 512 бит).
На этом алгоритмы не заканчиваются, каждый год программисты придумывают что-то новенькое. Постепенно популярность набирают алгоритмы крипто 2.0: N-Scrypt, Scrypt-jane и CryptoNote.
Зачем так много и так часто? Создатели криптовалют стремятся создать алгоритмы, которые было бы трудно перевести на специализированное оборудование, ASIC. Мы в этом подходе видим сразу четыре потенциально слабых места:
- Асики всё равно делают, и уже сделаны асики под Скрипт и N-Скрипт;
- Ошибочно полагают, что таким образом можно избежать централизации. На самом деле в любом бизнесе, а майнинг это бизнес, централизация неизбежна;
- Алгоритмы, выполняемые на процессорах общего назначения, это неиссякаемый источник мотивации для вирусописателя-ботнетовода;
- Новые алгоритмы, созданные «на коленке», серьёзно не тестированы, какие там могут быть уязвимости и дыры, неизвестно.
Что такое PoW и PoS?
Каждому из нас хотя бы раз приходилось отчитываться о проделанной работе. Кто-то это делает постоянно, кто-то — от случая к случаю, но, так или иначе, если хочешь получить зарплату, докажи, что усердно работал. К чему бы вся эта демагогия? Так проще понять, что такое PoW.
Мы уже писали об одном потрясающем свойстве блокчейна — децентрализации. Чтобы подтвердить транзакцию или сделку, не нужна третья сторона. Но необходим особый алгоритм. Proof of Work или доказательство выполнения работы — принцип защиты распределённых систем от хакерских атак или спама. Главное назначение Proof of Work — проверить вычисления, произведённые при создании нового блока. Из-за того, что процесс вычисления блока сложен и случаен, нельзя точно предсказать, какой из майнеров решит задачу и закроет блок. Чтобы блок признали истинным, нужно, чтобы значение его хеша было меньше, чем текущая цель. Таким образом, каждый блок показывает, что была проделана работа по его нахождению.
В первой части мы писали, что все блоки имеют хеш предыдущего блока. Изменить какой-либо блок нельзя, но возможно создать новый. Для этого нужно найти все предыдущие блоки. Высокая сложность этого процесса и защищает блокчейн от хакерских атак и несанкционированных модификаций.
Для более простого понимания приведём пример: какой-то человек совершает сложную и долгую работу, затем результаты этой работы отправляет в систему на проверку. У этой системы есть специальный «шаблон проверок», благодаря которому правильность решения устанавливается за секунды. Важная особенность этого алгоритма заключается в разности затрат времени — большой срок запроса и быстрая скорость ответа. Очень долго что-то вычисляем, но быстро проверяем.
Но, помимо преимуществ, у алгоритма есть и недостатки. Главный минус — огромные затраты вычислительных мощностей. Многие видные обозреватели крипто и блокчейн технологий сравнивали PoW со страшным монстром, который день и ночь пожирает электричество.
Альтернативу долго ждать не пришлось. Многие майнеры возликовали, когда появился новый алгоритм под названием Proof of Stake, или, иначе, подтверждение доли. И здесь важны не мощность вашей техники, не количество затраченного времени, а баланс вашего кошелька. Это тот принцип, когда деньги делают деньги: чем больше денег у вас есть в кошельке, тем большую прибыль вы получите. Если приводить примеры, то PoW-модель — это когда вы идёте на работу и зарабатываете деньги (работник), а PoS-система — это когда вы свои сбережения кладете в надёжный банк и живёте на проценты (рантье).
Степень защиты от атак при PoS гораздо выше. Так как, чтобы провести атаку, нужно хорошенько потратиться. Но если купить 51% монет, то рынок отреагирует быстрым ростом цены. Кроме того, какой смысл делать атаку на сеть, если большая часть ресурсов атакующего вложены в виртуальные монеты этой же сети, и атака ударит по самому больному — по кошельку? Если у атакующего найдётся много средств, и он её произведёт, то он сам же и пострадает от атаки, поскольку это нарушит устойчивость криптовалюты. Минусы у Proof of Stake, к сожалению, тоже имеются.
Поэтому кому-то из гениев блокчейн сообщества пришла в голову идея — найти золотую середину, объединив два алгоритма Proof of Stake и Proof of Work.
Гибридная схема PoW + PoS
Ресурсы, расходуемые на хеширование блоков при алгоритме PoW, огромны и намного превышают мощности крупнейших суперкомпьютеров. К тому же PoW-криптовалюту можно атаковать, временно арендовав огромные вычислительные мощности.
PoS-криптовалюты потенциально уязвимы для других видов атак. К примеру, атакующий захотел создать форк блокчейна — более длинную альтернативную цепочку за счёт траты «несуществующих» ресурсов. К тому же он может получить поддержку других майнеров, ведь им также не придётся расходовать «подлинные» ресурсы.
С помощью форка атакующий может блокировать те или иные транзакции и производить атаки «двойного расхода». Подобные атаки могут делиться на ближние и дальние. При ближних атаках происходит замена большинства последних блоков, а в момент дальней атак атакующий может заменить всю историю сети.
Гибридный же механизм наиболее безопасен, поэтому и лёг в основу проекта Emercoin и ряда других.
При стандартной гибридной схеме блокчейн состоит из двух типов блоков. Одновременно ищутся как блоки PoW, так и PoS. «Доказательство работы» можно сравнить с пропускным пунктом, ведь в основном PoW используется для распределения новых монет. Подтверждение доли необходимо для защиты транзакций, то есть в качестве основного средства для генерации блоков транзакций.
Для успешной атаки на проект с гибридным механизмом атакующий должен иметь 51% всей вычислительной мощности сети и 51% всей денежной массы. Это создаёт для атакующего два барьера разной природы, которые и защищают сеть от компрометации.
Как мы уже упоминали, Emercoin имеет гибридный механизм консенсуса, но в нашем проекте упор больше сделан на PoS. По сути, Emer является PoS-криптовалютой, в которой механизм PoW оставлен по соображениям безопасности, и играет хоть и важную, но вспомогательную роль, а примерно 80% блоков закрываются именно PoS-ом.
habr.com
Математические основы биткойн-блокчейна
Сегодня биткойн продолжает набирать популярность, а индустрия разрабатывать все новые приложения для работы с криптовалютой. Одной из причин такой популярности является строгая математическая база, на которой строится биткойн.
Благодаря этому система функционирует в условиях полного отсутствия доверия между участниками сети, исключая воздействие человеческого фактора.
Поэтому в сегодняшней статье мы бы хотели поговорить о математических основах биткойн-блокчейна — эллиптических кривых, ECDSA и ключах.
/ Изображение Hernán Piñera CC BY
Фундаментальной частью биткойна являются криптографические алгоритмы. В частности, алгоритм ECDSA — Elliptic Curve Digital Signature Algorithm, который использует эллиптические кривые (elliptic curve) и конечные поля (finite field) для подписи данных, чтобы третья сторона могла подтвердить аутентичность подписи, исключив возможность её подделки. В ECDSA для подписи и верификации используются разные процедуры, состоящие из нескольких арифметических операций.
Эллиптические кривые
Эллиптическая кривая над полем K — это кубическая кривая над алгебраическим замыканием поля K, задаваемая уравнением третьей степени с коэффициентами из поля K и «точкой на бесконечности». Одной из форм эллиптических кривых являются кривые Вейерштрасса.
y² = x³ + ax + b
Для коэффициентов a = 0 и b = 7 (используемых в биткойне), график функции принимает следующий вид:
Эллиптическая кривая
Эллиптические кривые имеют несколько интересных свойств, например, невертикальная линия, пересекающая две некасательные точки на кривой, пересечет третью точку на кривой. Суммой двух точек на кривой P + Q называется точка R, которая является отражением точки -R (построенной путем продолжения прямой (P; Q) до пересечения с кривой) относительно оси X.
Сумма двух точек на кривой (источник)
Если же провести прямую через две точки, имеющие координаты вида P (a, b) и Q (a, -b), то она будет параллельна оси ординат. В этом случае не будет третьей точки пересечения. Чтобы решить эту проблему, вводится так называемая точка на бесконечности (point of infinity), обозначаемая как O. Поэтому, если пересечение отсутствует, уравнение принимает следующий вид P + Q = O.
Если мы хотим сложить точку саму с собой (удвоить её), то в этом случае просто проводится касательная к точке Q. Полученная точка пересечения отражается симметрично относительно оси X.
Удвоение точки (источник)
Эти операции позволяют провести скалярное умножение точки R = k*P, складывая точку P саму с собой k раз. Однако отметим, что для работы с большими числами используются более быстрые методы.
Эллиптическая кривая над конечным полем
В эллиптической криптографии (ECC) используется такая же кривая, только рассматриваемая над некоторым конечным полем. Конечное поле в контексте ECC можно представить как предопределенный набор положительных чисел, в котором должен оказываться результат каждого вычисления.
y² = x³ + ax + b (mod p)
Например, 9 mod 7 = 2. Здесь мы имеем конечное поле от 0 до 6, и все операции по модулю 7, над каким бы числом они ни осуществлялись, дадут результат, попадающий в этот диапазон.
Все названные выше свойства (сложение, умножение, точка в бесконечности) для такой функции остаются в силе, хотя график этой кривой не будет походить на эллиптическую кривую. Эллиптическая кривая биткойна, y² = x³ + 7, определенная на конечном поле по модулю 67, выглядит следующим образом:
Эллиптическая кривая биткойна, определенная на конечном поле по модулю 67 (источник)
Это множество точек, в которых все значения х и у представляют собой целые числа между 0 и 66. Прямые линии, нарисованные на этом графике, теперь будут как бы «оборачиваться» вокруг поля, как только достигнут барьера 67, и продолжатся с другого его конца, сохраняя прежний наклон, но со сдвигом. Например, сложение точек (2, 22) и (6, 25) в этом конкретном случае выглядит так:
Сложение точек (2, 22) и (6, 25) (источник)
Если хотите посмотреть, как выглядят другие эллиптические кривые, то поэкспериментировать можно на этом сайте.
ECDSA в биткойне
В протоколе биткойна зафиксирован набор параметров для эллиптической кривой и её конечного поля, чтобы каждый пользователь использовал строго определенный набор уравнений. Среди зафиксированных параметров выделяют уравнение кривой (equation), значение модуля поля (prime modulo), базовую точку на кривой (base point) и порядок базовой точки (order). О вычислении порядка базовой точки вы можете почитать здесь. Этот параметр подбирается специально и является очень большим простым числом.
В случае биткойна используются следующие значения:
Уравнение эллиптической кривой: y² = x³ + 7
Простой модуль: 2256 — 232 — 29 — 28 — 27 — 26 — 24 — 1 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
Базовая точка:
04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
Жирным шрифтом выделена координата X в шестнадцатеричной записи. За ней сразу следует координата Y.
Порядок: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
Этот набор параметров для эллиптической кривой известен как secp256k1 и является частью семейства стандартов SEC (Standards for Efficient Cryptography), предлагаемых для использования в криптографии. В биткойне кривая secp256k1 используется совместно с алгоритмом цифровой подписи ECDSA (elliptic curve digital signature algorithm). В ECDSA секретный ключ — это случайное число между единицей и значением порядка. Открытый ключ формируется на основании секретного: последний умножается на значение базовой точки. Уравнение имеет следующий вид:
Открытый ключ = секретный ключ * G
Это показывает, что максимальное количество секретных ключей (следовательно, биткойн-адресов) — конечно, и равняется порядку. Однако порядок является невероятно большим числом, так что случайно или намеренно подобрать секретный ключ другого пользователя нереально.
Вычисление открытого ключа выполняется с помощью тех же операций удвоения и сложения точек. Это тривиальная задача, которую обычный персональный компьютер или смартфон решает за миллисекунды. А вот обратная задача (получение секретного ключа по публичному) — является проблемой дискретного логарифмирования, которая считается вычислительно сложной (хотя строгого доказательства этому факту нет). Лучшие известные алгоритмы ее решения, вроде ро Полларда, имеют экспоненциальную сложность. Для secp256k1, чтобы решить задачу, нужно порядка 2128 операций, что потребует времени вычисления на обычном компьютере, сопоставимого со временем существования Вселенной.
Когда пара секретный/публичный ключ получена, её можно использовать для подписи данных. Эти данные могут быть любой длины. Обычно первым шагом выполняется хеширование данных с целью получения уникального значения с числом битов, равным битности порядка кривой (256). После хеширования, алгоритм подписи данных z выглядит следующим образом. Здесь, G — базовая точка, n — порядок, а d — секретный ключ.
- Выбирается некоторое целое k в пределах от 1 до n-1
- Рассчитывается точка (х, у) = k * G с использованием скалярного умножения
- Находится r = х mod n. Если r = 0, то возврат к шагу 1
- Находится s = (z + r * d) / k mod n. Если s = 0, то возврат к шагу 1
- Полученная пара (r, s) является нашей подписью
После получения данных и подписи к ним, третья сторона, зная публичный ключ, может их верифицировать. Шаги для проверки подписи такие (Q — открытый ключ):
- Проверка, что и r, и s находятся в диапазоне от 1 до n-1
- Рассчитывается w = s-1 mod n
- Рассчитывается u = z * w mod n
- Рассчитывается v = r * w mod n
- Рассчитывается точка (x, y) = uG + vQ
- Если r = x mod n, то подпись верна, иначе — недействительна
В самом деле,
uG + vQ = u + vdG = (u + vd)G = (zs-1 + rds-1)G = (z + rd) s-1G = kG
Последнее равенство использует определение s на этапе создания подписи.
Безопасность ECDSA связана со сложностью задачи поиска секретного ключа, описанной выше. Помимо этого, безопасность исходной схемы зависит от «случайности» выбора k при создании подписи. Если одно и то же значение k использовать более одного раза, то из подписей можно извлечь секретный ключ, что и произошло с PlayStation 3. Поэтому современные реализации ECDSA, в том числе используемые в большинстве биткойн-кошельков, генерируют k детерминировано на основе секретного ключа и подписываемого сообщения.
Автор: alinatestova
Источник
www.pvsm.ru
Что есть биткоин с точки зрения математики
«Оборачивающаяся прямая», проходящая через эти две точки, в итоге уперлась в третью точку (47, 39), а симметричная ей «относительно оси X» будет (47, 28). Вот эта-то точка и станет результатом нашей операции.
Применим свою математическую мудрость к криптографии
Чтобы использовать ECDSA, такой протокол как Биткойн должен зафиксировать набор параметров для эллиптической кривой и ее конечного поля, чтобы эти параметры знали и применяли все пользователи протокола. Иначе, каждый будет решать свои собственные уравнения, которые не будут сходиться друг с другом, и они никогда ни о чем не договорятся.
Эти зафиксированные параметры включают в себя уравнение кривой, значение модуля поля, и базовую точку, которая лежит на кривой. Последним параметром является порядок базовой точки, который в графическом виде можно представить себе как количество раз, которое базовая точка может быть прибавлена к себе до тех пор, пока ее касательная кривая не станет вертикальной. Этот параметр подбирается таким образом, чтобы он являлся очень большим простым числом.
Для всех этих параметров, Биткойн использует очень-очень большие (ну просто офигенно невообразимо огромные) числа. Это важно. На самом деле, все практические применения ECDSA используют огромные числа. Ведь безопасность этого алгоритма опирается на то, что эти значения слишком большие чтобы подобрать что-то простым перебором или «брутфорсом».
В случае Биткойна, эти значения таковы (запись чисел дана не в десятичном, а в более компактном шестнадцатеричном виде, привычном программистам):
Уравнение эллиптической кривой: y² = x³ + 7
Простой модуль = 2256 — 232 — 29 — 28 — 27 — 26 — 24 — 1 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
Базовая точка = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
Порядок = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
Кто выбрал эти цифры, и почему? Большое количество исследований, и изрядная интрига, всегда окружает выбор соответствующих параметров. В конце концов, большое и, казалось бы, случайное число может скрывать в себе какую-нибудь «заднюю дверцу» для упрощения вычислений, которая может быть доступна только посвященным. Если вкратце, данная конкретная реализация ECDSA известна как secp256k1 и является частью семейства стандартов, предлагаемых для использования в криптографии.
Вооружившись всеми этими базовыми знаниями, в следующей статье мы будем готовы применить эту математику к Биткойну и выяснить, наконец, что же там происходит в недрах нашего биткойн-клиента, когда мы нажимаем на кнопку «Оплатить». Ну, а пока вы ждете второй части, можете слегка освежить свои знания относительно анатомии биткойн-адресов и транзакций. А если вы разработчик, то можно полюбопытствовать, что же там происходит внутри этого таинственного API биткойн-протокола.
cryptorussia.ru
Какие задачи может решить технология блокчейн?
Существует мнение, что вскоре технология блокчейн изменит мир до неузнаваемости. Она исключает мошенничество, кражу персональных данных, обеспечивает максимальный уровень безопасности транзакций. Некоторые пользователи сайта Quora полагают, что блокчейн даже уничтожит банковскую систему и валютный рынок. Что же, посмотрим…
Девин Милсом, горячий поклонник технологии блокчейн, инвестор и блогер
Какие задачи решал интернет на начальных этапах его введения и использования? Ведь только недавно разработанная технология в то время была мало кому известной и доступной, а ее влияние на нашу продуктивность и работоспособность было минимальным. Реальное значение интернета мы смогли осознать только тогда, когда он развернулся на всю свою мощь и стал использоваться повсеместно.
С блокчейном та же ситуация: ему сначала необходимо заработать доверие, а после он окажет на финансовую систему столь же значительное влияние, какое в свое время оказал интернет на процесс общения между людьми.
И вот вам один из наглядных примеров того, каким образом блокчейн сможет подорвать саму основу финансовой системы.
Давайте я начну с объяснения, почему я считаю банки всего лишь обременительной структурой, которая усложняет нам жизнь.
Я живу в Великобритании, но не так давно заказал товар в США. Этот товар должен был обойтись мне в 700 английских фунтов стерлингов, однако благодаря «помощи» банков мне придется заплатить чуть более 900 фунтов.
Я был несколько озадачен тем, как получилось так, что за товар, который по факту стоит 1 000 долларов, мне придется заплатить больше 1 200 долларов. Совершив несколько гневных звонков и потратив некоторое время на поиск в интернете, я выяснил следующее:
1. Банки выбирают удобные им курсы обмена валют:
Когда я высчитывал конверсионный курс между фунтом стерлингов и долларом, я использовал рыночный курс на тот момент. Не помню точную процентную ставку, но, поверьте мне, она и рядом не стояла с той, которую использовал банк!
В итоге только за это мне пришлось доплатить где-то 150 фунтов.
2. Банковские сборы
Однако банки не только используют удобный им коэффициент пересчета, но и начисляют достаточно высокую комиссию. Пересылка моих денег на «заграничный банковский счет» обошлась мне в 9,50 фунтов.
Также следует учитывать, что транзакция денег занимает несколько дней, а иногда и недель. Кроме того, сама передача производится только в рабочие дни – и это в мире, где торговля ведется 24 часа 7 дней в неделю! По сути, 15% времени банки банально бесполезны.
Как вы можете себе представить, подобная форма работы значительным образом снижает общую продуктивность, так как компания не может отправить заказанную продукцию до того, как придет платеж, а покрывать все эти дополнительные затраты приходится покупателю. Таким образом, единственный, кто в данной ситуации остается в чистом плюсе, это банк.
Никогда прежде не были созданы настолько комфортные условия для проведения торговли, поэтому как покупатели, так и компании ожидают того, что сам процесс торговли будет упрощаться и становиться более быстрым в глобальном масштабе. Однако перечисленные выше причины являются существенным препятствием на пути оптимизации. И это при том, что ежедневный торговый оборот на мировом валютном рынке составляет около 5 триллионов долларов.
А теперь позвольте мне объяснить, почему именно блокчейн уничтожит банковскую систему и валютный рынок в привычном нам виде.
1. Отсутствие необходимости в посредниках.
Банки обеспечивают некоторую степень безопасности. Точнее, вы доверяете какому-то банку свои деньги и просите сопроводить их до определенного получателя. Все, что вам остается после, это надеяться, что ваши средства максимально быстро будут доставлены в указанное вами место. И это при том, что вы не можете не то что управлять, но даже следить за ходом транзакции, которая осуществляется в банковской системе – все, что вы можете, это лишь терпеливо ждать, пока перевод все-таки достигнет получателя.
Блокчейн устраняет необходимость в подобных посредниках: вы можете переслать свои электронные деньги со своего виртуального кошелька на виртуальный кошелек принимающей стороны. Сделать это вы можете при помощи набора определенных ключей, которые по своей сути напоминают адрес. Или же вы можете перевести свои деньги, используя свой номер счета в качестве публичного ключа, которым можно поделиться с другими пользователями в системе блокчейн.
Так, к примеру, если я хочу послать своему другу в Африку 10 биткоинов, то все, что ему нужно сделать, это выслать мне свой публичный адрес биткоин-кошелька, после чего я смогу переслать средства со своего счета на его, при этом мне не придется ждать несколько недель до завершения операции.
Однако в этом случае следует четко учитывать и понимать разницу между публичными и приватными ключами.
2. Комиссионный сбор.
Как я уже упоминал, мне пришлось заплатить 9,50 фунтов за пересылку денег на заграничный счет. Если бы я решил отправить бОльшую сумму денег, то комиссия увеличилась бы соответственно.
Комиссионный сбор в системе биткоин зависит от многих факторов. Но если вы не хотите платить даже ту минимальную комиссию, то существует возможность совершить транзакцию абсолютно бесплатно. Правда, в таком случае единственной проблемой может стать то, что вашей транзакции будет присвоен низкий приоритет, и она может застрять в мемпуле (очередь всех транзакций, ожидающих включения в блок).
Давайте сравним комиссионный сбор, взимаемый банками, с комиссией системы биткоин.
В среднем, система биткоин берет от 0,0001 до 0,0003 BTC за транзакцию. Возвращаясь к моему предыдущему примеру, можем легко посчитать, что если бы я решил совершить пересылку денег в США при помощи данной системы, то это обошлось бы мне где-то в 0,18 BTC (в соответствии с нынешней рыночной ставкой). В таком случае комиссионный сбор составил бы 0,0003 BTC – это где-то 1,7 доллара или 1,28 фунта. По факту комиссия за такую пересылку вышла бы в 7,5 раз дешевле той, которую выставил мне банк.
3. Вопрос доверия
Все транзакции в системе блокчейн записываются в некое подобие цифровой бухгалтерской книги, в которой любой пользователь может в любое время посмотреть нужную ему информацию (при наличии необходимых данных).
Благодаря технологии блокчейн информация о вашей транзакции хранится на каждом компьютере, подключенном к сети, а значит, любой пользователь данной сети может проконтролировать, куда, когда и кому был отправлен перевод. Такое положение вещей значительно снижает вероятность мошенничества, вследствие чего доверие к этой системе возрастает, а доверие к банкам, скорее, уменьшается.
Надеюсь, люди смогут понять крайнюю степень неэффективности банков, а также тот факт, что в скором времени банки просто исчезнут за ненадобностью, если только не начнут сами использовать технологию блокчейна.
Сара Кайо, изучает компьютерные науки в Стэнфорде
Блокчейн представляет собой непрерывно растущий список записей, которые называются блоками. Такие блоки соединены между собой и защищены при помощи криптографии. Каждый блок включает хеш предыдущего блока, хеш транзакции и время создания файла. По определению данные в системе блокчейн не могут быть подделаны.
Компания Chronicled – это одна из фирм, которая осуществляет управление цепочками в системах блокчейн и «интернет вещей». Будучи основанной на базе Центра инноваций в Сан-Франциско, данная компания использует блокчейн и технологии «интернета вещей» для создания безопасных смарт-систем, которые будут контролировать цепи поставок. Данная фирма защищает журналы системных событий, общую информацию и идентификационные данные устройств в системе «интернета вещей». Кроме того, компания является также одним из членов-основателей «Союза интернета вещей» («Trusted IoT Alliance»), главной целью которого является дальнейшая разработка стандарта для системы блокчейн с открытым исходным кодом, а также поддержание и внедрение технологии IoT в разных отраслях по всему миру.
На самом-то деле, блокчейн решает только одну важную проблему – это повышение уровня доверия к проведению денежной транзакции, исходя из того, что ее обеспечивают и контролируют одновременно многие участники.
Отличным примером в данном случае может послужить обработка файлов. Так как система проверяет сертификацию файла, то если файлы были обработаны в данной системе и при этом были проверены не только самой системой, но и многими участниками, то уровень доверия к ним однозначно повышается.
Дэвид Кайо, специалист по ПО
Технология блокчейн главным образом взаимодействует с цифровыми активами, которые заносятся в так называемый цифровой реестр учета. Считается, что все находящиеся в системе данные неизменны и защищены от незаконных действий. Технология значительно ускоряет оборот средств, а также исключает человеческий фактор, равно как и необходимость в третьих лицах.
А теперь давайте рассмотрим более подробно, чем же хороша данная технология и в каких сферах она может быть использована.
- Международные расчеты: при помощи технологии блокчейн криптовалюту Эфир (Ethereum) можно переслать человеку или компании, находящейся на другом конце света. Кроме того, в отличие от банков, у которых есть выходные и перерывы, цифровой реестр учета не нуждается в отдыхе или сне.
- Использование технологии для защиты нашей собственности: благодаря технологии блокчейн электронные ключи доступа станут использоваться повсеместно. По сути, мы уже сейчас пользуемся ими – например, при блокировке наших девайсов. Таким образом, вы имеете дело с криптографией каждый раз, когда вводите пароль на своем телефоне. Это и есть то, что предлагает нам технология блокчейн – использование шифрования для защиты того, что принадлежит нам.
- Более высокий уровень безопасности: технология обеспечивает максимальный уровень безопасности для девайсов в системе «интернет вещей» (IoT). Специалистам по безопасности приходится непрерывно заботиться о защите информации и сохранении ее неприкосновенности.
Майк Лин, изучает блокчейн в университете
Если рассматривать блокчейн с чисто технической точки зрения, то эта технология представляет собой ряд неизменяемых записей в цифровом реестре учета, защищенных шифрованием. Данные записи могут быть синхронизированы в децентрализованной сети. Эта технология может использоваться в самых разных сферах, однако наиболее широкое распространение она получила благодаря следующим особенностям:
- Если вы все делаете в соответствии с регламентом системы и следуете всем ее правилам, то ваши данные обязательно будут обработаны.
- Все, что вам нужно, это создать ключи шифрования, действующие в системе блокчейн. При этом нет никакой необходимости в участии каких-либо банков.
- Если вам известны правила действия системы, то вы заметите, что блокчейн всегда действует в соответствии с этими правилами. Благодаря тому, что в процессе не задействованы люди, отсутствует всякая предубежденность и двоякость, нет злоупотребления положением и лоббирования личных интересов. Вы каждый раз имеете дело с огромным количеством компьютеров, которые организованы в одну сеть, обрабатывают те же самые точные числа и выводят тот же самый результат.
- Данная технология достойна максимального доверия, потому что выглядит чуть ли не бесконечной, ведь блокчейн – это вычислительное устройство, которое будет продолжать работать, пока хотя бы на одном девайсе есть интернет.
Биткоин стал первой широко используемой криптовалютой в системе блокчейн. В качестве концепта он был впервые представлен Сатоши Накамото.
Биткоин представляет собой одноранговую систему электронных денег, защищенную шифрованием, благодаря которой вы можете безопасно переслать важные данные или средства прямо с вашего компьютера. Но также крайне важным является то, что никто не может заставить вас совершать транзакцию при помощи именно этой системы: это только ваш выбор – использовать блокчейн или нет.
Блокчейн – это полностью прозрачная система. Даже совершая операции с криптовалютами, которые используют доказательство с нулевым разглашением для защиты информации (например, Monero, ZCash или Эфир), вы можете быть уверены в безопасности проводимого платежа. По факту блокчейн – это «книга» записей в цифровом реестре учета, и количество этих записей неуклонно растет. Будучи пользователем, вы подписываете транзакцию приватным ключом, тем самым создавая сообщение и добавляя свою подпись. Ваша транзакция будет действительна только в том случае, если у вас будет достаточно средств на счете, чтобы совершить пересылку, и если вы укажете правильный публичный ключ и подпись. Весь описанный процесс – чистая математика.
Безопасность блокчейна обеспечивается теми фактическими деньгами, которые вложены в саму систему. Так, к примеру, биткоин использует электричество в качестве вычислительной мощности, тем самым генерируя четкие математические алгоритмы доказательства работы. И эти алгоритмы не подлежат изменению. Casper CBC, еще один протокол, позволяет использовать криптовалюту для активации блоков. Те люди, которые вкладываются в систему, в ответ получают «родную» для блокчейна валюту, которая также действует в соответствии с общими правилами в системе блокчейн.
Используя блокчейн в качестве базы для «идеальных» вычислительных операций, мы сможем на его основе создавать приложения, которые поддаются честному, основанному на чистой математике контролю – приложения, которые никогда не «падают», пока где-то работает хоть один компьютер, зарегистрированный в системе.
www.kv.by