Кольцевая подпись - Ring signature

В криптография, а кольцевая подпись это тип цифровой подписи который может быть выполнен любым членом группы пользователей, у каждого из которых есть ключи. Следовательно, сообщение, подписанное кольцевой подписью, одобряется кем-то из определенной группы людей. Одно из свойств безопасности кольцевой подписи заключается в том, что определение который ключей членов группы использовались для создания подписи. Кольцевые подписи похожи на групповые подписи но отличаются двумя ключевыми способами: во-первых, нет способа отменить анонимность отдельной подписи, а во-вторых, любую группу пользователей можно использовать как группу без дополнительных настроек. Кольцевые подписи были изобретены Рон Ривест, Ади Шамир, и Яэль Тауман Калаи, и представлен на ASIACRYPT в 2001.[1] Название, кольцевая подпись, происходит от кольцевой структуры подписи алгоритм.

Определение

Предположим, что каждая группа объектов имеет пары открытого / закрытого ключей, (п1, S1), (п2, S2), ..., (пп, Sп). Партия я может вычислить кольцевую подпись σ для сообщения м, на входе (м, Sя, п1, ..., пп). Любой может проверить действительность кольцевой подписи при условии σ, м, и задействованные открытые ключи, п1, ..., пп. Если кольцевая подпись рассчитана правильно, она должна пройти проверку. С другой стороны, кому-либо должно быть трудно создать действительную кольцевую подпись для любого сообщения для любой группы, не зная каких-либо закрытых ключей для этой группы.[2]

Приложения и модификации

Поведение схемы кольцевой подписи Ривест, Шамир, Тауман

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

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

Были разные работы, вводящие новые функции и основанные на разных предположениях:

Пороговые кольцевые подписи
[3] В отличие от стандартного "т-снаружи-п" пороговая подпись, куда т из п пользователи должны сотрудничать, чтобы расшифровать сообщение, этот вариант кольцевой подписи требует т пользователей сотрудничать в подписании протокол. А именно, т стороны (я1, я2, ..., ят) может вычислить (т, п) -кольцо сигнатуры, σ, в сообщении, м, на входе (м, Sя1, Sя2, ..., Sят, п1, ..., пп).
Связанные кольцевые подписи
[4] Свойство связываемости позволяет определить, были ли какие-либо две подписи созданы одним и тем же членом (под одним и тем же закрытым ключом). Тем не менее личность подписавшего сохраняется. Одним из возможных приложений может быть офлайн электронная кассовая система.
Прослеживаемая кольцевая подпись
[5] В дополнение к предыдущей схеме раскрывается открытый ключ подписывающей стороны (если они выдают более одной подписи под одним и тем же закрытым ключом). An система электронного голосования могут быть реализованы с использованием этого протокола.

Эффективность

Большинство предложенных алгоритмов имеют асимптотический размер вывода ; то есть размер результирующей подписи увеличивается линейно с размером ввода (количества открытых ключей). Это означает, что такие схемы неприменимы для реальных случаев использования с достаточно большими (например, электронное голосование с миллионами участников). Но для некоторых приложений с относительно небольшими медиана размер ввода такая оценка может быть приемлемой. CryptoNote орудия схема кольцевой подписи от Fujisaki и Suzuki[5] в p2p-платежах, чтобы избежать отслеживания отправителя.

В последнее время появились более эффективные алгоритмы. Есть схемы с сублинейным размером подписи,[6] а также с постоянным размером.[7]

Выполнение

Оригинальная схема

В исходной статье описывается ЮАР схема на основе кольцевой подписи, а также схема на основе Подписи Рабина. Они определяют ключ "функция комбинирования" который берет ключ , значение инициализации , и список произвольных значений . Он выводит одно значение . Уравнение разрешимо для любого отдельного входа, но невозможно решить за если злоумышленник не может инвертировать какой-либо из (здесь на основе RSA) люк функции . Функция называется уравнением кольца и определяется ниже. Уравнение основано на функция симметричного шифрования :

В схеме кольцевой подписи на выходе совпадает с входом. Эта функция тривиально обратима, если параметры.

Генерация подписи

Генерация кольцевой подписи включает шесть шагов. Открытый текст обозначается , открытые ключи кольца .

  1. Рассчитать ключ , используя криптографическая хеш-функция. Этот шаг предполагает случайный оракул за , поскольку будет использоваться как ключ для .
  2. Выберите случайное значение клея .
  3. Выбрать случайный для всех участников кольца, кроме себя ( будет рассчитываться с использованием sзакрытый ключ igner) и вычислить соответствующий .
  4. Решите уравнение кольца для
  5. Рассчитать используя закрытый ключ подписывающей стороны:
  6. Кольцевая подпись теперь - пара

Проверка подписи

Проверка подписи включает три этапа.

  1. Применить люк открытого ключа ко всем : .
  2. Вычислить симметричный ключ .
  3. Убедитесь, что уравнение кольца выполнено .

Реализация Python

Вот Python реализация оригинальной статьи с использованием ЮАР.

импорт Операционные системы, хэшлиб, случайный, Крипто.Публичный ключ.RSAучебный класс Звенеть:    "" "Реализация RSA." ""    def __в этом__(себя, k, L: int = 1024) -> Никто:        себя.k = k        себя.л = L        себя.п = len(k)        себя.q = 1 << (L - 1)    def знак(себя, м: ул, z: int):        "" "Подпишите сообщение." ""        себя._пермут(м)        s = [Никто] * себя.п        ты = случайный.Randint(0, себя.q)        c = v = себя._E(ты)        за я в классифицировать(z + 1, себя.п) + классифицировать(z):            s[я] = случайный.Randint(0, себя.q)            е = себя._грамм(s[я], себя.k[я].е, себя.k[я].п)            v = себя._E(v ^ е)            если (я + 1) % себя.п == 0:                c = v        s[z] = себя._грамм(v ^ ты, себя.k[z].d, себя.k[z].п)        возвращаться [c] + s    def проверять(себя, м: ул, Икс) -> bool:        "" "Проверить сообщение." ""        себя._пермут(м)        def _f(я):            возвращаться себя._грамм(Икс[я + 1], себя.k[я].е, себя.k[я].п)        у = карта(_f, классифицировать(len(Икс) - 1))        def _грамм(Икс, я):            возвращаться себя._E(Икс ^ у[я])        р = уменьшать(_грамм, классифицировать(себя.п), Икс[0])        возвращаться р == Икс[0]    def _пермут(себя, м):        себя.п = int(хэшлиб.sha1("% s" % м).hexdigest(), 16)    def _E(себя, Икс):        сообщение = "%SS" % (Икс, себя.п)        возвращаться int(хэшлиб.sha1(сообщение).hexdigest(), 16)    def _грамм(себя, Икс, е, п):        q, р = divmod(Икс, п)        если ((q + 1) * п) <= ((1 << себя.л) - 1):            результат = q * п + пау(р, е, п)        еще:            результат = Икс        возвращаться результат

Чтобы подписать и проверить 2 сообщения в кольце из 4 пользователей:

размер = 4msg1, msg2 = "Привет", "Мир!"def _rn(_):    возвращаться Крипто.PublicKey.ЮАР.генерировать(1024, Операционные системы.случайный)ключ = карта(_rn, классифицировать(размер))р = Звенеть(ключ)за я в классифицировать(размер):    s1 = р.знак(msg1, я)    s2 = р.знак(msg2, я)    утверждать р.проверять(msg1, s1) и р.проверять(msg2, s2) и нет р.проверять(msg1, s2)

Криптовалюты

В CryptoNote технология использует кольцевые подписи.[8] Впервые он был реализован Bytecoin.

ShadowCash

Криптовалюта ShadowCash использует отслеживаемую кольцевую подпись, чтобы анонимизировать отправителя транзакции.[9] Однако изначально они были реализованы неправильно, что привело к частичной деанонимизации ShadowCash с момента их первой реализации до февраля 2016 г. Монеро Исследователь исследовательских лабораторий Шен Нётер.[10] К счастью, только 20% всех одноразовых ключей в системе были затронуты этой ошибкой, анонимность отправителя была нарушена, но анонимность получателя осталась неизменной. Своевременно был отправлен патч для устранения ошибки.[11]

Монеро

В период с 10 января 2017 года по 18 октября 2018 года Monero использовала технологию Ring Confidential Transaction, чтобы скрыть суммы транзакций в блокчейне. Это позволяло только отправителю и получателю средств узнать истинное количество отправленных средств.[12] С тех пор валюта перешла на Bulletproofs.[13]

Рекомендации

  1. ^ Как раскрыть секрет, Рон Ривест, Ади Шамир, и Яэль Тауман Калаи, ASIACRYPT 2001. Том 2248 конспектов лекций по информатике, страницы 552–565.
  2. ^ Дебнат, Ашмита; Сингаравелу, Прадхипкумар; Верма, Шекхар (19 декабря 2012 г.). «Эффективная схема сохранения пространственной конфиденциальности для сенсорной сети». Центральноевропейский инженерный журнал. 3 (1): 1–10. Дои:10.2478 / s13531-012-0048-7. S2CID  137248994.
  3. ^ Э. Брессон; Дж. Стерн; М. Шидло (2002). «Пороговые кольцевые подписи и приложения для специальных групп» (PDF). Достижения в криптологии: Crypto 2002. Конспект лекций по информатике. 2442: 465–480. Дои:10.1007/3-540-45708-9_30. ISBN  978-3-540-44050-5.
  4. ^ Лю, Джозеф К .; Вонг, Дункан С. (2005). Связанные кольцевые подписи: модели безопасности и новые схемы. ICCSA. Конспект лекций по информатике. 2. С. 614–623. Дои:10.1007/11424826_65. ISBN  978-3-540-25861-2.
  5. ^ а б Фудзисаки, Эйитиро; Судзуки, Котароу (2007). «Прослеживаемая кольцевая подпись». Криптография с открытым ключом: 181–200.
  6. ^ Фудзисаки, Эйитиро (2011). «Отслеживаемые кольцевые подписи сублинейного размера без случайных оракулов». CTRSA. 95 (1): 393–415. Bibcode:2012IEITF..95..151F. Дои:10.1587 / transfun.E95.A.151.
  7. ^ Ау, Ман Хо; Лю, Джозеф К .; Сусило, Вилли; Юэн, Цз Хон (2006). Связанная кольцевая подпись на основе идентификатора постоянного и отменяемого размера. Конспект лекций по информатике. 4329. С. 364–378. Дои:10.1007/11941378_26. ISBN  978-3-540-49767-7.
  8. ^ Технология CryptoNote - Платежи без отслеживания
  9. ^ Shadow - Анонимные распределенные электронные деньги с нулевым разглашением через отслеживаемые кольцевые подписи
  10. ^ Сломанная криптовалюта в Shadowcash В архиве 2016-09-27 в Wayback Machine
  11. ^ https://blog.shadowproject.io/2016/03/07/development-update-march-phoenix/
  12. ^ «Простое объяснение механики Монеро и Биткойн на простом английском».
  13. ^ Бунц, Бенедикт (1 ноября 2017 г.). "Bulletproofs: краткие доказательства конфиденциальных транзакций и многое другое". iarc.org. Получено 14 февраля, 2019.