Эта статья входит в число добротных статей

Протокол Фейга — Фиата — Шамира

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Протокол Фейга — Фиата — Шамира — протокол идентификации с нулевым разглашением, обобщение более раннего протокола Фиата — Шамира, разработанный Уриэлем Фейге (англ. Uriel Feige), Амосом Фиатом[en] (англ. Amos Fiat) и Ади Шамиром (англ. Adi Shamir) в 1986 году. Эта простая для реализации и коммерчески значимая схема была запатентована авторами через год после её разработки.

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

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

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

Кроме того, схему идентификации Фейга-Фиата-Шамира можно легко преобразовать в схему подписи.

История[править | править код]

В 1986 году израильские учёные из Института Ваймана Уриэль Фейге, Амос Фиат и Ади Шамир разработали практичную схему идентификации с нулевым разглашением, которая могла быть имплементирована даже на устройствах с маломощными процессорами, таких как смарт-карты, персональные компьютеры, документы идентификации личности[1]. Из коммерческих соображений 9 июля 1986 года авторы подали заявку на получение патента США. Ведомство по патентам и товарным знакам США в течение полугода должно было определиться с решением о вынесении приказа об устранении режима секретности[2][3].

Буквально за несколько дней до истечения определённого срока Ведомство по патентам вынесло приказ, запрещающий всякое раскрытие или публикацию информации о протоколе, объясняя это угрозой причинения ущерба национальной безопасности. Более того, авторы должны были уведомить всех граждан США, располагающих знаниями о схеме Фейга — Фиата — Шамира, о том, что их разглашение могло привести к серьёзным санкциям - двум годам тюремного заключения или штрафу в десять тысяч долларов. Также необходимо было доложить обо всех иностранных государствах, которым была раскрыта информация о проведенном исследовании[2][3].

К этому моменту Фейге, Фиат и Шамир уже успели выступить с многочисленными докладами в университетах Израиля, Европы и США и подали заявку на конференцию Ассоциации вычислительной техники, которая должна была состояться в Нью-Йорке в мае 1987 года[2][3].

Хотя разработчики протокола и надеялись на то, что Институт Вейцмана, где проводилось исследование, будет обжаловать вынесенный приказ, они все же отправили письмо в комитет конференции, в котором объяснили сложившуюся ситуацию. После этого многие организации, такие как «Лаборатории Белла» и The New York Times, быстро подключились к решению возникшей проблемы. Наибольший вклад был внесён Агентством национальной безопасности (АНБ), которому изначально было неизвестно об изданном приказе. После того как АНБ о нём сообщили, в течение двух суток приказ был аннулирован[2][3].

Шамир выступил на конференции Ассоциации вычислительной техники 26 мая[4], а ещё через 5 дней авторы получили патент на разработанный протокол[5].

Схема идентификации[править | править код]

A доказывает своё знание секрета стороне B в течение раундов, не раскрывая при этом ни одного бита самого секрета[1].

Выбор параметров системы[править | править код]

Доверенный центр T публикует большое число , где и — простые числа, которые держатся в секрете. Также выбираются целые числа и - параметры безопасности[6].

Генерация секретов для участников[править | править код]

Каждый участник выбирает случайных целых чисел и случайных бит .

Затем вычисляет .

Участник идентифицирует себя окружающим с помощью значений , которые выступают в качестве его открытого ключа, в то время как секретный ключ известен только самому участнику[6].

Действия протокола в рамках одного раунда[править | править код]

  1. A выбирает случайное целое число
    вычисляет: и отправляет стороне B.
  2. B отправляет A случайный -битный вектор , где или .
  3. A вычисляет и отправляет B: .
  4. B вычисляет: и проверяет, что и [7][6].

Безопасность[править | править код]

Лемма 1: Если A и B следуют протоколу, то B всегда принимает доказательства A: Доказательство: по определению

Amos Fiat, Adi Shamir «How To Prove Yourself: Practical Solutions to Identification and Signature Problems»

В предположении, что разложение на множители - вычислительно невозможная задача, вероятность успешной атаки на протокол составляет . Злоумышленник может попытаться выдать себя за честного пользователя путём угадывания правильных значений , подготовления для первого шага и предоставления на третьем шаге. Тогда B убедится, что . Но вероятность правильно выбрать значений составляет в одном раунде и, следовательно, во всем протоколе[1].

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

Протокол доказывает, что A обладает своим секретным ключом, не раскрывая никакого знания о нём, когда и [1].

Пример[править | править код]

  1. Пусть доверенный центр T выбрал простые числа и и опубликовал . Параметры безопасности системы: , .
  2. Для участника A выбираются случайные числа: , , и 3 бита: , , .
    вычисляются значения: , , .
    Публичный ключ A: , секретный ключ: .
  3. (a) A выбирает случайное число , случайный бит , вычисляет: и пересылает его B.
(b) B посылает A 3-битный вектор: .
(c) A вычисляет и отправляет B: .
(d) B вычисляет: и принимает доказательство A, так как и .

Улучшения и модификации схемы идентификации[править | править код]

  1. Можно отказаться от выбора общего для всех участников числа и позволить каждому из них выбирать своё собственное. Однако существование доверенного центра T по-прежнему будет необходимо для того, чтобы ассоциировать каждого участника с его модулем[6].
  2. Для того чтобы снизить сложность взаимодействия между A и B, можно заменить первое посылаемое от A к B сообщение на значение хеш-функции . Соответственно, на последней итерации протокола B должен будет оперировать вместо самого [6].
  3. Схему можно изменить так, чтобы она основывалась на идентичности каждого участника. Для этого каждому пользователю A доверенный центр T назначает уникальную идентифицирующую строку с информацией об участнике (например, имя, адрес, номер паспорта и т. д.). Затем центр вычисляет значения , где должна быть неотличима от случайной функции за полиномиальное время. Потом, зная факторизацию , доверенный центр вычисляет и выдает их значения A. Значения и становятся, соответственно, открытым и секретным ключами участника A, и дальнейшие действия выполняются по схеме, описанной выше[7][6][3].
  4. Описанный протокол можно выполнять параллельно. В таком случае сообщения, передаваемые от A к B и обратно, должны содержать данные для всех раундов одновременно. Плюс данного подхода в том, что он позволяет снизить сложность выполнения за счёт уменьшения количества производимых итераций. Такая схема является безопасной, но в силу технических причин теряет своё свойство нулевого разглашения. Дело в том, что параллельное выполнение может позволить нечестному проверяющему B определять не случайным образом, а как функции от всего набора , присылаемого ему от A на первом шаге. Если B будет делать это, используя одностороннюю хеш-функцию, то он сможет получить информацию, которую иначе мог бы вычислить только при условии знания секрета A. Однако считается, что эта информация не является «полезной» (зная её, B не сможет выдать себя за A какому-то другому участнику), что позволяет считать схему по-прежнему надёжной[1][8].

Подпись Фейга — Фиата — Шамира[править | править код]

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

Для того чтобы переделать схему идентификации в схему подписи, достаточно изменить это действие B на использование секретной хеш-функции для вычисления [7][6][3].

Подпись сообщения[править | править код]

Пусть A хочет подписать сообщение .

  1. A выбирает случайное целое число и вычисляет: .
  2. A вычисляет: .
  3. A вычисляет: .
  4. A отправляет B сообщение , подпись и .

Проверка подписи[править | править код]

Пусть B хочет проверить подпись под сообщением .

  1. B вычисляет: .
  2. B использует для вычисления : .
  3. Если вычисленные значения совпадают с полученной от A подписью , то B принимает подпись .

Примечания[править | править код]

  1. 1 2 3 4 5 Feige, Uriel; Fiat, Amos; Shamir, Adi. Zero-knowledge proofs of identity (англ.) (1987). Дата обращения: 10 ноября 2015. Архивировано из оригинала 17 ноября 2015 года.
  2. 1 2 3 4 Susan Landau. Zero Knowledge and the Department of Defense (англ.) (1988). Дата обращения: 10 ноября 2015. Архивировано 16 января 2016 года.
  3. 1 2 3 4 5 6 Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си (2002). Дата обращения: 10 ноября 2015. Архивировано 20 ноября 2015 года.
  4. Alfred V. Aho. STOC'87 19th Annual ACM Conference on Theory of Computing (англ.). ACM New York, NY, USA (1987).
  5. Method, apparatus and article for identification and signature (англ.) (31 мая 1987). Дата обращения: 11 ноября 2015. Архивировано 21 ноября 2015 года.
  6. 1 2 3 4 5 6 7 A. Menezes, P. van Oorschot, and S. Vanstone. Handbook of Applied Cryptography (англ.) (1996). Дата обращения: 10 ноября 2015. Архивировано 8 декабря 2015 года.
  7. 1 2 3 Amos Fiat, Adi Shamir. How To Prove Yourself: Practical Solutions to Identification and Signature Problems (англ.) (1986). Дата обращения: 10 ноября 2015. Архивировано из оригинала 3 марта 2016 года.
  8. Gilles Brassard, Claude Crepeau, Moti Yung. Everything in NP can be argued in perfect zero-knowledge in a bounded number of rounds (англ.) (1989). Дата обращения: 13 ноября 2015. Архивировано 17 ноября 2015 года.

Литература[править | править код]