Алгоритм Фиата-Шамира на языке программирования C#.
Описание алгоритма:
Одним из наиболее известных протоколов идентификации личности с помощью доказательства с нулевым знанием является протокол, предложенный Амосом Фиатом и Ади Шамиром. Стойкость данного протокола основывается на сложности извлечения квадратного корня по модулю достаточно большого составного числа , факторизация которого неизвестна. Доверенный центр выбирает и публикует модуль , где — простые числа и держатся в секрете, при этом достаточно большое число, разложить на множители которое трудно. Каждый пользователь выбирает секретное взаимно-простое с . Затем вычисляется открытый ключ. Полученное регистрируется центром доверия в качестве открытого ключа пользователя , а значение является секретом . Именно знание этого секрета необходимо доказать некоторой стороне (проверяющему) без его разглашения за раундов (аккредитаций). Каждая аккредитация состоит из следующих этапов:
- выбирает случайное и отсылает стороне В.
- случайно выбирает бит и отсылает его .
- вычисляет по формуле и отправляет его обратно к .
- Сторона проверяет равенство .
Если оно верно, то происходит переход к следующему раунду протокола, иначе доказательство не принимается. Вероятность того, что пользователь не знает секрета , но убеждает в обратном проверяющего , будет оцениваться вероятностью равной , где – число аккредитаций. Для достижения высокой достоверности его выбирают достаточно большим. Таким образом, удостоверяется в знании тогда и только тогда, когда все раундов прошли успешно.
Архив содержит исходный код C#.
Pasha_Goroshko