Протокол Фиата — Шамира: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Новая страница: «'''Протокол Фиата-Шамира'''-это один из наиболее известных протоколов идентификац...»
 
отклонено последнее 1 изменение от 82.200.168.86
Метка: ручная отмена
 
(не показано 36 промежуточных версий 27 участников)
Строка 1: Строка 1:
'''Протокол Фиата-Шамира'''-это один из наиболее известных протоколов идентификации с нулевым разглашением (Zero-knowledge protocol). Протокол был предложен Амосом Фиатом(Amos Fiat) и [[Ади Шамир|Ади Шамиром]](Adi Shamir)
'''Протокол Фиата — Шамира''' — это один из наиболее известных протоколов [[доказательство с нулевым разглашением|идентификации с нулевым разглашением]] (Zero-knowledge protocol). Протокол был предложен Амосом Фиатом ({{lang-en|Amos Fiat}}) и [[Ади Шамир]]ом ({{lang-en|Adi Shamir}})


Пусть '''А''' знает некоторый секрет '''s'''. Необходимо доказать знание этого секрета некоторой стороне '''В''' без разглашение какой-либо секретной информации. Стойкость протокола основывается на сложности извлечения квадратного корня по модулю достаточно большого составного числа '''n''', [[факторизация]] которого неизвестна.
Пусть '''А''' знает некоторый секрет '''s'''. Необходимо доказать знание этого секрета некоторой стороне '''В''' без разглашения какой-либо секретной информации. Стойкость протокола основывается на сложности извлечения квадратного корня по модулю достаточно большого составного числа '''n''', [[факторизация]] которого неизвестна.


== Описание [[Протокол передачи данных|протоколa]] ==


'''A''' доказывает '''B''' знание '''s''' в течение '''t''' раундов. Раунд называют также аккредитацией. Каждая аккредитация состоит из 3х этапов.
== Описание [[протокол|протоколa]] ==


=== Предварительные действия ===
'''A''' доказывает '''B''' знание '''s''' в течение '''t''' раундов. Раунд называют также аккредитацией. Каждая аккредитация состоит из 3х этапов.
* Доверенный центр '''Т''' выбирает и публикует модуль <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'''


=== Передаваемые сообщения (этапы каждой аккредитации) ===
===Предварительные действия===
* Доверенный центр '''Т''' выбирает и публикует модуль <math>n=p*q</math>, где '''p''', '''q''' [[простое число|простые]] и держатся в секрете.
* Каждый претендент '''A''' выбирает '''s''' [[взаимно-простые числа|взаимно-простое]] с '''n''', где <math>s\in[1,n-1]</math>. Затем вычисляется <math>v=s^2\pmod n</math>. '''V''' регистрируется '''T''' в качестве [[открытый ключ|открытого ключа]] '''A'''

===Передаваемые сообщения (этапы каждой аккредитации)===
* A<math>\Rightarrow</math>B : <math>x=r^2\pmod n</math>
* A<math>\Rightarrow</math>B : <math>x=r^2\pmod n</math>
* A<math>\Leftarrow</math>B : <math>e\in{0,1}</math>
* A<math>\Leftarrow</math>B : <math>e\in{0,1}</math>
* A<math>\Rightarrow</math>B : <math>y=r*s^e\pmod n</math>
* A<math>\Rightarrow</math>B : <math>y=r*s^e\pmod n</math>


===Основные действия ===
=== Основные действия ===
Следующие действия последовательно и независимо выполняются '''t''' раз. '''В''' считает знание доказанным, если все '''t''' раундов прошли успешно.
Следующие действия последовательно и независимо выполняются '''t''' раз. '''В''' считает знание доказанным, если все '''t''' раундов прошли успешно.
* '''А''' выбирает случайное '''r''' , такое, что <math>r\in[1,n-1]</math> и отсылает <math>x=r^2\pmod n</math> стороне '''B''' (доказательство)
* '''А''' выбирает случайное '''r''' , такое, что <math>r\in[1,n-1]</math> и отсылает <math>x=r^2\pmod n</math> стороне '''B''' (доказательство)
* '''B''' случайно выбирает бит '''e''' ('''e'''=0 или '''е'''=1) и отсылает его '''A''' (вызов)
* '''B''' случайно выбирает бит '''e''' ('''e'''=0 или '''е'''=1) и отсылает его '''A''' (вызов)
Строка 24: Строка 23:
* Если '''y'''=0, то '''B''' отвергает доказательство или, другими словами, '''А''' не удалось доказать знание '''s'''. В противном случае, сторона '''B''' проверяет, действительно ли <math>y^2= x*v^e\pmod n</math> и, если это так, то происходит переход к следующему раунду протокола.
* Если '''y'''=0, то '''B''' отвергает доказательство или, другими словами, '''А''' не удалось доказать знание '''s'''. В противном случае, сторона '''B''' проверяет, действительно ли <math>y^2= x*v^e\pmod n</math> и, если это так, то происходит переход к следующему раунду протокола.


Выбор '''е''' из множества {0,1} предполагает, что если сторона '''А''' действительно знает секрет, то она всегда сможет правильно ответить, вне зависимости от выбранного '''e'''. Допустим, что '''А''' хочет обмануть '''B'''. '''А''' выбирает случайное '''r''' и отсылает <math>x=r^2/v</math>, тогда если '''е'''=0, то '''А''' удачно возвращает '''B''' <math>y=r</math>, в случае же '''е'''=1, '''А''' не сможет правильно ответить, т.к. не знает '''s''', а извлечь квадратный корень из '''v''' по модулю '''n''' достаточно сложно.
Выбор '''е''' из множества {0,1} предполагает, что если сторона '''А''' действительно знает секрет, то она всегда сможет правильно ответить, вне зависимости от выбранного '''e'''. Допустим, что '''А''' хочет обмануть '''B'''. В этом случае '''А''', может отреагировать только на конкретное значение '''e'''. Например, если '''А''' знает, что получит '''е'''=0, то '''А''' следует действовать строго по инструкции и '''В''' примет ответ. В случае, если '''А''' знает, что получит '''е'''=1, то '''А''' выбирает случайное '''r''' и отсылает <math>x=r^2/v</math> на сторону '''В''', в результате получаем нам нужное <math>y=r</math>. Проблема заключается в том, что '''А''' изначально не знает какое '''e''' он получит и поэтому не может со 100 % вероятностью выслать на сторону '''В''' нужные для обмана '''r''' и '''х''' (<math>x=r^2</math> при '''e'''=0 и <math>x=r^2/v</math> при '''e'''=1). Поэтому вероятность обмана в одном раунде составляет 50 %.
Чтобы снизить вероятность жульничества (она равна <math>1/2^t)</math>) '''t''' выбирают достаточно большим ('''t'''=20, '''t'''=40). Таким образом, '''B''' удостоверяется в знании '''А''' тогда и только тогда, когда все '''t''' раундов прошли успешно.
Чтобы снизить вероятность жульничества (она равна <math>1/2^t)</math>) '''t''' выбирают достаточно большим ('''t'''=20, '''t'''=40). Таким образом, '''B''' удостоверяется в знании '''А''' тогда и только тогда, когда все '''t''' раундов прошли успешно.



== Пример ==
== Пример ==

* Пусть доверенный центр выбрал простые '''p'''=683 и '''q'''=811, тогда '''n'''=683*811=553913. '''А''' выбирает '''s'''=43215.
* Пусть доверенный центр выбрал простые '''p'''=683 и '''q'''=811, тогда '''n'''=683*811=553913. '''А''' выбирает '''s'''=43215.
Откуда <math>v=43215^2 \pmod{553913}= 1867536225 \pmod{553913}=295502</math>
Откуда <math>v=43215^2 \pmod{553913}= 1867536225 \pmod{553913}=295502</math>
Строка 36: Строка 33:
* Проверка '''B''': <math>y^2 \equiv x*v^e \pmod n</math>
* Проверка '''B''': <math>y^2 \equiv x*v^e \pmod n</math>
Если '''e''' было равно 0, то <math>y^2=38177^2\pmod{553913}=1457483329=138266</math> Подтверждено.
Если '''e''' было равно 0, то <math>y^2=38177^2\pmod{553913}=1457483329=138266</math> Подтверждено.

Иначе, <math>y^2=266141^2 \pmod {553913}=70831031881 \pmod {553913}=514832</math>
Иначе, <math>y^2=266141^2 \pmod {553913}=70831031881 \pmod {553913}=514832</math>

и <math>x*v=138226*295502 \pmod {553913}=40846059452 \pmod {553913}=514832</math> Подтверждено.
и <math>x*v=138226*295502 \pmod {553913}=40846059452 \pmod {553913}=514832</math> Подтверждено.



== Литература ==
== Литература ==
*{{книга|автор = A.Menezes, P.van Oorschot, S.Vanstone.|заглавие = Handbook of Applied Cryptography.|издательство = CRC Press|год = 1996|страницы = |страниц = 816|isbn = 0-8493-8523-7}}
* {{книга|автор = Menezes A., van Oorschot P., Vanstone S.|заглавие = Handbook of Applied Cryptography|издательство = CRC Press|год = 1996|страницы = |страниц = 816|isbn = 0-8493-8523-7}}
* {{Книга:Шнайер Б.: Прикладная криптография}}
* {{Книга:Шнайер Б.: Прикладная криптография}}

[[Категория:Доказательства с нулевым разглашением]]

Текущая версия от 08:36, 2 декабря 2022

Протокол Фиата — Шамира — это один из наиболее известных протоколов идентификации с нулевым разглашением (Zero-knowledge protocol). Протокол был предложен Амосом Фиатом (англ. Amos Fiat) и Ади Шамиром (англ. Adi Shamir)

Пусть А знает некоторый секрет s. Необходимо доказать знание этого секрета некоторой стороне В без разглашения какой-либо секретной информации. Стойкость протокола основывается на сложности извлечения квадратного корня по модулю достаточно большого составного числа n, факторизация которого неизвестна.

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.