Я упомянул, что я использовал новый Борромео ringsig в качестве строительного блока для большего криптосистемы, вот это:
Конфиденциальные сделки
Один из самых мощных новых функций, в настоящее время изучаются в элементы сайдчейн является Конфиденциальные сделки, криптографическое средство для повышения конфиденциальности и безопасности Bitcoin. Эта функция сохраняет сумма передается видна только участникам сделки (и те, что они обозначают).
Безопасность гроссбух Bitcoin становится возможным благодаря универсальной проверки: каждый участник индивидуально и самостоятельно проверяет, что каждая сделка действительна, не доверяя какой-либо третьей стороне. Побочным эффектом является то, что все данные транзакции должны быть явно общественности, так что можно проверить, что находится в противоречии с нормальным ожиданием конфиденциальности для традиционных денежных инструментов.
Недостаточная финансовая конфиденциальность может иметь серьезные последствия для безопасности и конфиденциальности для коммерческих и личных сделок. Без адекватной защиты, воры и мошенники могут сосредоточить свои усилия на известных целей с высокой добавленной стоимостью, конкуренты могут узнать сведения о компании, а также переговорные позиции могут быть подорваны. Поскольку издательство часто требует тратить деньги, отсутствие личной жизни может охладить свободу слова. Недостаточная конфиденциальность также может привести к потере взаимозаменяемости - где некоторые монеты рассматриваются как более приемлемыми, чем другие - что бы еще больше подорвать полезность Bitcoin в качестве денег.
Bitcoin частично решает проблему конфиденциальности с помощью псевдонимных адресов. Если кто не знает, какие пользователи владеют какие адреса, воздействие конфиденциальности снижается. Но в любое время вести с кем-то вы узнаете, по крайней мере, один из их адресов. Оттуда, вы можете отслеживать другие связные адреса и оценить значения их сделок и холдингов. Например, предположим, что ваш работодатель платит вам Bitcoin и вы потом потратить эти монеты на арендную плату и бакалейные товары. Арендодатель и супермаркет будет как узнать ваш доход, и может взимать более высокие цены по мере изменения дохода или предназначаться за кражу.
Есть существующие развернутые методы, которые в дальнейшем улучшить частную жизнь в Bitcoin (например, CoinJoin, который сливает историю транзакций пользователей путем совместных платежей), но полезность этих методов сводится к тому, что можно отслеживать количество.
Там были предложены криптографические методы для повышения конфиденциальности в Bitcoin-подобных системах, но до сих пор все они приводят в прорыве "обрезка" (Раздел 7 из Bitcoin.pdf) и привести участник, нуждающихся в постоянно растущую базу для проверки новых транзакций, поскольку эти системы предотвращения обучения, которые монеты были потрачены. Большинство предлагаемых криптографические системы приватности также имеют низкую производительность, высокие накладные расходы, и / или требуют новых и очень сильных (и менее понятно) криптографических предположений.
Конфиденциальные сделки улучшает ситуацию путем совершения сделки составляет частный, сохраняя при этом способность сети общего пользования, чтобы проверить, что записи главной книги по-прежнему складываются. Он делает это без добавления каких-либо новых базовых криптографических допущений к системе Bitcoin, и с управляемым уровнем накладных расходов.
КТ возможна благодаря криптографической техники аддитивно гомоморфных обязательств. В качестве побочного эффекта его конструкции, КТ позволяет также дополнительный обмен частного "меморандум" данные (например, номера счетов-фактур или возврат адреса) без какого-либо дальнейшего увеличения размера сделки, по рекультивации большой части накладных расходов криптографических доказательств КТ.
Технология позади конфиденциальных сделок
Технический праймер высокого уровня
Эта работа была первоначально предложена Адам Вернуться на Bitcointalk в его потоке 2013 "Bitcoins с гомоморфным значением". Для того, чтобы построить КТ у меня был реализовать несколько новых криптосистем, которые работают совместно, и изобрел обобщение подписей кольца и нескольких новых оптимизаций, чтобы сделать результат достаточно эффективным.
Основной инструмент, который КТ основан на это обязательство Педерсен.
Схема обязательств позволяет сохранить часть секретных данных, но совершить его так, что вы не можете изменить его позже. Простая схема обязательств может быть построена с использованием криптографической хеш:
Приверженность = SHA256 (blinding_factor || данные)
Если вы скажете кому-то только обязательство, то они не могут определить, какие данные вы передаванием (при определенных предположениях о свойствах хэш), но позже можно выявить как данные и ослепительный фактор, и они могут запустить хэш и убедитесь, что данные, которые вы совершили в матчах. Ослепление фактор присутствует, потому что без него, кто-то может попытаться догадываясь данных; если ваши данные маленькие и простые, он может быть легко просто угадать его и сравнить предположение о приверженности.
Приверженность Педерсен работает как выше, но с дополнительным свойством: обязательства могут быть добавлены, а сумма множества обязательств является таким же, как обязательство на сумму данных (с ослепительным ключом, установленным в сумме ослепления ключи):
С (BF1, data1) + С (BF2, data2) == С (BF1 + BF2, data1 + data2) С (BF1, data1) - С (BF1, data1) == 0
Другими словами, обязательство сохраняет сложение и применяется свойство коммутативности.
Если data_n = {1,1,2} и {BF_n = 5,10,15}, то:
С (BF1, data1) + С (BF2, data2) - С (BF3, данные3) == 0
и так далее.
Наши конкретные обязательства Педерсен построены с использованием эллиптических точек кривой. [Читатель не должен понимать эллиптическую кривую криптографии, за принятие поведения черного ящика я описываю здесь.]
Довольно часто Публичная ECC создается путем умножения генератора для группы (G) с помощью секретного ключа (х):
Pub = XG
Результат, как правило, сериализовать в виде массива 33 байта.
открытые ключи ECC подчиняются аддитивно гомоморфной собственности упоминалась ранее:
Pub1 + Pub2 = (х1 + х2 (по модулю п)) G.
(Этот факт используется схемой бумажника BIP32 HD позволить третьим лицам генерировать свежий Bitcoin адрес для людей.)
Приверженность Педерсен создается путем выбора дополнительного генератора для группы (которую мы будем называть H) такое, что никто не знает, дискретный журнал для H относительно G (или наоборот), это означает, что никто не знает об й такое, что XG = H. Мы можем сделать это с помощью криптографической хэш G, чтобы выбрать H:
Н = to_point (SHA256 (КОДИРОВАНИЯ (G)))
С учетом наших двух генераторов мы можем построить схему обязательств, как это:
Приверженность = XG + аН
Здесь х наш секрет ослепление фактор, и это сумма, которую мы передаванием. Вы можете проверить, используя только коммутативное свойство того, что все отношения приведены для аддитивно гомоморфного трюма схемы обязательств.
Обязательства Педерсен информационно-теоретически частный: для каких-либо обязательств вы видите, существует какой-то ослепительный фактор, который сделает любое количество соответствует обязательству. Даже злоумышленник с бесконечной вычислительной мощностью не может сказать, что сумма, которую вы совершили, чтобы, если ослепление фактор был действительно случайным образом. Они вычислительно защищены от поддельных обязательств, в том, что вы не можете на самом деле вычислить, что произвольное отображение; если вы можете это означает, что вы можете найти дискретный логарифм генераторов по отношению друг к другу, а это значит, что безопасность группы находится под угрозой.
С помощью этого инструмента в руке мы можем пойти и заменить обычные 8-байтовые целые суммы в Bitcoin операций с 33-байтных обязательств Педерсен.
Если автор сделки берет на себя в выборе своих Ослепление факторов, так что они складываются правильно, то сеть может еще проверить сделку, удостоверившись, что обязательства добавить до нуля:
(In1 + In2 + In3 + plaintext_input_amount * H ...) -
(Out1 + Out2 + Out3 + ... плата * H) == 0.
Это требует внесения платы в транзакции явно, но это обычно желательно.
Приверженность и его проверки достаточно просты. К сожалению, без дополнительных мер эта схема является небезопасным.
Проблема состоит в том, что группа является циклической, и сложение по модулю Р (256-битное простое число, которое определяет порядок группы). В результате, добавление больших значений могут «перелив» и ведут себя как отрицательные суммы. Это означает, что поведение суммы к нулю по-прежнему имеет место, когда некоторые выходы отрицательны, позволяющие эффективно создавать 5 монет из ничего:
(1 + 1) - (-5 + 7) == 0
Это можно интерпретировать как "кто-то тратит два биткойны, получает «-5» Bitcoin, что они отбрасывать вне, и выход на 7 Bitcoin",
Для того чтобы предотвратить это, когда есть несколько выходов, мы должны доказать, что каждое совершенное выход находится в пределах диапазона, который не может переполнить (например, [0, 2 ^ 64)).
Мы могли бы просто раскрывать суммы и ослепляющие факторы, так что сеть может проверить, но это будет терять все уединение. Таким образом, вместо этого, мы должны доказать, что привержена сумма находится в пределах диапазона, но ничего не говорят еще об этом: нам нужны дополнительной криптосистеме, чтобы доказать диапазон приверженности Pedersen. Мы используем схему, подобную Schoenmakers†™ бинарной декомпозиции, но со многими оптимизаций (в том числе не использовать двоичный).
Для построения этого мы начнем с базовой подписью ЕС. Если подпись построена таким образом, что «сообщение» является хэш Публичных, подпись доказывает, что подписывающий знает секретный ключ, который является дискретным логарифм Публичных относительно некоторого генератора.
Для «» Публичных как P = Xg + ах, никто не знает, дискретный журнал Р по отношению к G из-за добавления H, потому что никто не знает об х при XG = H ----_ unless_ а равно 0. Если равен нулю, то Р = Xg и дискретный журнал просто х; кто мог бы подписать для этого Публичных.
Педерсен обязательство может быть доказано, что приверженность к нулю, просто подписав хэш обязательства с обязательством в качестве открытого ключа. Используя открытый ключ подписи требуется для предотвращения установки подписи на произвольные значения и решение для принятия окончательного решения. Закрытый ключ используется для подписи только ослепительный фактор.
Двигаясь дальше, let†™ s сказать, что я хочу доказать, C является приверженность к 1, не говоря вам ослепительный фактор. Все, что вам сделать, это вычислить
C»= C - 1H
и попросить меня предоставить подписи (относительно G) с Публичных C». Если я могу сделать это, C должно быть обязательство 1 (или же я нарушил дискретные безопасности журнала EC).
Для того, чтобы избежать раздавать сумму нам нужно еще одну криптографической конструкцию: кольцо подпись. Кольцо подпись представляет собой схему подписи, где есть два (или более) pubkeys и подпись доказывает, что подписывающий знает дискретный журнал, по меньшей мере, одного из pubkeys.
Так с, что мы можем построить схему, где я могу доказать, что обязательство C является либо 0 или 1 - мы называем это "ИЛИ доказательство",
Во-первых, я дам вам C, и вычислить C ':
C»= C - 1H
Тогда я обеспечиваю кольцо подпись над {C, C '}.
Если C было обязательство 1, то я не знаю его дискретный журнал, но C»становится стремление к 0, и я знаю его дискретный журнал (только ослепительный фактор). Если C была приверженность 0 Я знаю, что его дискретный журнал, и я не C». Если бы это было обязательство любой другой суммы, ни один из результатов не будет равна нулю, и я не буду в состоянии подписать.
Это работает для любой пары чисел, просто соответствующим образом предварительной обработки суммы, которые ставятся в кольцо ... или даже больше двух чисел.
Скажем, я хочу, чтобы доказать вам, что C находится в диапазоне [0, 32). Теперь, когда у нас есть доказательства или представьте, я посылаю вам коллекцию обязательств и OR доказательства для каждого из них:
C1 вл етс 0 или 1 С2 равно 0 или 2 С3 равно 0 или 4 С4 равно 0 или 8 С5 равно 0 или 16.
Если я выбираю ослепительный факторы для C1..5 правильно, то можно устроить так, чтобы C1 + C2 + C3 + C4 + C5 == С. Эффективно я застроенное число в двоичной системе, а также в 5-битном числе могу только быть в диапазоне [0,32).
Многочисленные оптимизации требуется, чтобы сделать это более эффективным:
Во-первых, я предлагаю новую формулировку кольца подписи, Борромео кольцо подпись
- , которая особенно эффективна: она требует только 32 байт на Публичный, плюс 32 байт, которые могут быть разделены на множество отдельных колец. Это имеет вдвое асимптотическую эффективность предложенных ранее конструкций для данного применения.
- https://github.com/Blockstream/borromean_paper/raw/master/borromean_draft_0.01_34241bb.pdf
Вместо того, чтобы выразить сумму непосредственно, количества CT выражены с использованием десятичной плавающей точкой, где цифры умножаются на основание 10 экспоненты. Это означает, что вы можете доказать, большие суммы с небольшими доказательствами, так долго, поскольку они имеют несколько значащих цифр в основании 10: например, 11,2345 и 0,0112345 могут иметь одинаковый размер доказательства, даже если один номер в тысячу раз больше.
Существует также не-частное "минимальная сумма" послал, что позволяет меньше доказательств, чтобы покрыть более широкий диапазон, если пользователь не возражает против утечки некоторой информации о минимальном количестве (который может быть уже общественности по внешним причинам); это также позволяет наименее значимые цифры, чтобы быть отлична от нуля, когда используется показатель. Минимальные суммы поддерживаются первым вычитание минимума, то доказать, что результат не является отрицательным.
Мантисса плавающей точки кодируются с использованием колец размера 4 (4) оснований, а не двоичной, так как это сводит к минимуму числа обязательств, отправленным в то время, не используя больше данных, чем подписей основания 2.
Окончательная мантисса цифра обязательство может быть пропущено, в обратном направлении построения его из значения доказанного и других цифр и т.д.
Наконец, путем тщательного использования derandomized подписания в доказывающей, это возможно для приемника монет - кто разделяет секрет с отправителем, из-за ECDH согласования ключей с Публичных приемников - к «перемотать» доказательства и использовать его чтобы извлечь сообщение, посланное отправителем, который составляет 80% от размера доказательства. Мы используем это, чтобы сигнализировать значение и ослепительный фактор к приемнику, но он также может быть использован для вещей, как ссылочные номера или адрес возврата.
Результатом является то, что доказательство для 32-битного значения составляет 2564 байт, и одновременно может передать 2048 байт сообщения. 32-битное доказательство может охватывать диапазон 42.94967296 BTC с 1e-8 точностью, или 429.4967296 BTC с 1e-7 точностью, и так далее. Моя реализация может проверить более 1300 доказательств 32-битный диапазон в секунду на качестве i7-4770R, и есть много оптимизации производительности все еще возможно.
Реализация поддерживает доказательства любого размера мантиссы или экспоненты, с параметрами, под контролем отправителя. Производительность и размер линейны по числу бит мантиссы, а нечетные числа бит поддерживаются (путем перехода на Radix-2 для последней цифры).
В элементах, диапазон доказательство необходимо только в тех случаях, когда имеется несколько конфиденциальных выходы стоимости (включая плату). Сделки, которые сливаются несколько конфиденциальных сумм в один выход не нужны доказательства диапазона с тем, что все входы были в диапазоне достаточно.
Делясь ключом сканирования, используемый для установления общего секрета, используемых доказательствами перематываемого диапазона, этот подход полностью совместит с просмотром кошельков; пользователи могут совместно использовать эти ключи с аудиторами, чтобы они могли просматривать их количество транзакций.
Будущая работа может использовать тот факт, что доказательства могут поддерживать минимальное значение, также позволяют пропускать доказательство диапазона, когда есть один конфиденциальный выход, даже если плата выплачивается, или разрешать узлы пропустить или задержку проверки большинства доказательств диапазона с помощью мошенничества доказательства.
Система, представленная здесь, зависит от каких-либо новых фундаментальных криптографических допущений, только твердость дискретной задачи журнала в secp256k1 группы и случайного оракула предположения, так же как и обычные подписи в Bitcoin.
Хотя размер доказательств диапазона не являются тривиальными, они все еще на порядок меньше и быстрее, чтобы проверить, чем некоторые альтернативы (например, Zerocoin), и большая часть их пространства может быть утилизирован для связи дополнительных данных между пользователями, функция, которая часто требуется, но трудно оправдать в сети общественного вещания. Подобно подпись, доказательство диапазона может быть размещено на отдельных ветвях дерев в блоках, чтобы позволить клиентам, что don†™ т заботиться о (например, исторических тот), чтобы пропустить их получение.
Самое главное, что эта схема совместима с обрезкой и не делает состояние проверки для Bitcoin расти вечно. Он также совместит с CoinJoin и CoinSwap, что позволяет транзакцию графа личной жизни и в то же время фиксируя наиболее серьезное ограничение этих подходов к личной жизни (эта сделка составляет угрозу их конфиденциальности).
В отличие от некоторых других предложений, эта система не просто спекуляция или чисто криптография без интеграции с системой Bitcoin.
Конфиденциальные сделки включена в элементы и по умолчанию используется всеми обычными операциями.
Исходный код только основной криптосистема так же доступно.