Протокол Фиата — Шамира: различия между версиями
[непроверенная версия] | [отпатрулированная версия] |
Skazi (обсуждение | вклад) отклонено последнее 1 изменение от 82.200.168.86 Метка: ручная отмена |
|||
(не показано 12 промежуточных версий 11 участников) | |||
Строка 3: | Строка 3: | ||
Пусть '''А''' знает некоторый секрет '''s'''. Необходимо доказать знание этого секрета некоторой стороне '''В''' без разглашения какой-либо секретной информации. Стойкость протокола основывается на сложности извлечения квадратного корня по модулю достаточно большого составного числа '''n''', [[факторизация]] которого неизвестна. |
Пусть '''А''' знает некоторый секрет '''s'''. Необходимо доказать знание этого секрета некоторой стороне '''В''' без разглашения какой-либо секретной информации. Стойкость протокола основывается на сложности извлечения квадратного корня по модулю достаточно большого составного числа '''n''', [[факторизация]] которого неизвестна. |
||
== Описание [[ |
== Описание [[Протокол передачи данных|протоколa]] == |
||
'''A''' доказывает '''B''' знание '''s''' в течение '''t''' раундов. Раунд называют также аккредитацией. Каждая аккредитация состоит из 3х этапов. |
'''A''' доказывает '''B''' знание '''s''' в течение '''t''' раундов. Раунд называют также аккредитацией. Каждая аккредитация состоит из 3х этапов. |
||
=== Предварительные действия === |
=== Предварительные действия === |
||
* Доверенный центр '''Т''' выбирает и публикует модуль <math>n=p*q</math>, где '''p''', '''q''' — [[простое число|простые]] и держатся в секрете. |
* Доверенный центр '''Т''' выбирает и публикует модуль <math>n=p*q</math>, где '''p''', '''q''' — [[простое число|простые]] и держатся в секрете. |
||
* Каждый претендент '''A''' выбирает '''s''' [[взаимно-простые числа|взаимно-простое]] с '''n''', где <math>s\in[1,n-1]</math>. Затем вычисляется '''V'''<math>=s^2\pmod n</math>. '''V''' регистрируется '''T''' в качестве [[открытый ключ|открытого ключа]] '''A''' |
* Каждый претендент '''A''' выбирает '''s''' [[взаимно-простые числа|взаимно-простое]] с '''n''', где <math>s\in[1,n-1]</math>. Затем вычисляется '''V'''<math>=s^2\pmod n</math>. '''V''' регистрируется '''T''' в качестве [[открытый ключ|открытого ключа]] '''A''' |
||
Строка 43: | Строка 43: | ||
[[Категория:Доказательства с нулевым разглашением]] |
[[Категория:Доказательства с нулевым разглашением]] |
||
[[de:Fiat-Shamir-Protokoll]] |
|||
[[en:Feige–Fiat–Shamir identification scheme]] |
|||
[[he:פרוטוקול פייגה-פיאט-שמיר]] |
|||
[[ja:Fiat-Shamirヒューリスティック]] |
Текущая версия от 08:36, 2 декабря 2022
Протокол Фиата — Шамира — это один из наиболее известных протоколов идентификации с нулевым разглашением (Zero-knowledge protocol). Протокол был предложен Амосом Фиатом (англ. Amos Fiat) и Ади Шамиром (англ. Adi Shamir)
Пусть А знает некоторый секрет s. Необходимо доказать знание этого секрета некоторой стороне В без разглашения какой-либо секретной информации. Стойкость протокола основывается на сложности извлечения квадратного корня по модулю достаточно большого составного числа n, факторизация которого неизвестна.
Описание протоколa
[править | править код]A доказывает B знание s в течение t раундов. Раунд называют также аккредитацией. Каждая аккредитация состоит из 3х этапов.
Предварительные действия
[править | править код]- Доверенный центр Т выбирает и публикует модуль , где p, q — простые и держатся в секрете.
- Каждый претендент A выбирает s взаимно-простое с n, где . Затем вычисляется V. V регистрируется T в качестве открытого ключа A
Передаваемые сообщения (этапы каждой аккредитации)
[править | править код]- AB :
- AB :
- AB :
Основные действия
[править | править код]Следующие действия последовательно и независимо выполняются t раз. В считает знание доказанным, если все t раундов прошли успешно.
- А выбирает случайное r , такое, что и отсылает стороне B (доказательство)
- B случайно выбирает бит e (e=0 или е=1) и отсылает его A (вызов)
- А вычисляет у и отправляет его обратно к B. Если e=0, то , иначе (ответ)
- Если y=0, то B отвергает доказательство или, другими словами, А не удалось доказать знание s. В противном случае, сторона B проверяет, действительно ли и, если это так, то происходит переход к следующему раунду протокола.
Выбор е из множества {0,1} предполагает, что если сторона А действительно знает секрет, то она всегда сможет правильно ответить, вне зависимости от выбранного e. Допустим, что А хочет обмануть B. В этом случае А, может отреагировать только на конкретное значение e. Например, если А знает, что получит е=0, то А следует действовать строго по инструкции и В примет ответ. В случае, если А знает, что получит е=1, то А выбирает случайное r и отсылает на сторону В, в результате получаем нам нужное . Проблема заключается в том, что А изначально не знает какое e он получит и поэтому не может со 100 % вероятностью выслать на сторону В нужные для обмана r и х ( при e=0 и при e=1). Поэтому вероятность обмана в одном раунде составляет 50 %. Чтобы снизить вероятность жульничества (она равна ) t выбирают достаточно большим (t=20, t=40). Таким образом, B удостоверяется в знании А тогда и только тогда, когда все t раундов прошли успешно.
Пример
[править | править код]- Пусть доверенный центр выбрал простые p=683 и q=811, тогда n=683*811=553913. А выбирает s=43215.
Откуда
- A выбирает r=38177 и считает
- Если B отправил e=0, то A возвращает y=38177. Иначе, A возвращает
- Проверка B:
Если e было равно 0, то Подтверждено.
Иначе,
и Подтверждено.
Литература
[править | править код]- Menezes A., van Oorschot P., Vanstone S. Handbook of Applied Cryptography. — CRC Press, 1996. — 816 с. — ISBN 0-8493-8523-7.
- Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. — М.: Триумф, 2002. — 816 с. — 3000 экз. — ISBN 5-89392-055-4.