Протокол Гиллу — Кискатра (Hjkmktkl Inllr — Tnvtgmjg)
Протокол Guillou-Quisquater — это протокол идентификации с нулевым разглашением, расширение более раннего протокола Фиата — Шамира, разработанный Луи Гиллу (англ. Louis Guillou), Жан-Жак Кискатр (англ. Jean-Jacques Quisquater) в 1988 году.
Протокол позволяет одному участнику (доказывающему A) доказать другому участнику (проверяющему B), что он обладает секретной информацией, не раскрывая ни единого бита этой информации.
Безопасность протокола основана на сложности извлечения квадратного корня по модулю достаточно большого составного числа по заданному модулю n.
В сравнении с протоколом Фиата-Шамира протокол Guillou-Quisquater имеет меньшее число сообщений, которыми необходимо поменяться сторонам для идентификации. Протокол требует только один раунд обмена сообщениями, имеет более низкие требования к памяти, используемой для хранения секретов пользователей, однако требует большего объёма вычислений.
Кроме того, схему идентификации Guillou-Quisquater можно легко преобразовать в схему подписи.
Свойства
[править | править код]Протокол Guillou-Quisquater — интерактивный протокол, который позволяет доказать, что доказываемое утверждение верно, и доказывающий знает это доказательство, в то же время не предоставляя никакой информации о самом доказательстве данного утверждения. Данный криптографический протокол обладает тремя свойствами:
- Полнота: если утверждение действительно верно, то доказывающий убедит в этом проверяющего с любой наперед заданной точностью.
- Корректность: если утверждение неверно, то любой, даже «нечестный», доказывающий не сможет убедить проверяющего.
- Нулевое разглашение: если утверждение верно, то любой, даже «нечестный», проверяющий не узнает ничего кроме самого факта, что утверждение верно.
Общая структура раунда
[править | править код]Протокол Guillou-Quisquater требует только один раунд обмена сообщениями и состоит из трёх этапов. Схематично их можно изобразить следующим образом:
- : доказательство (witness)
- : вызов (challenge)
- : ответ (response)
Сначала A выбирает из заранее определённого непустого множества некоторый элемент, который становится её секретом — закрытым ключом. По этому элементу вычисляется, а затем публикуется открытый ключ. Знание секрета определяет множество вопросов, на которые А всегда сможет дать правильные ответы. Затем A выбирает случайный элемент из множества, по определённым правилам вычисляет доказательство и затем отсылает его B. После этого B выбирает из всего множества вопросов один и просит A ответить на него (вызов). В зависимости от вопроса, А посылает B ответ. Полученной информации B достаточно, чтобы проверить действительно ли А владеет секретом.
Схема идентификации
[править | править код]Сторона A отправляет стороне В свои атрибуты . Стороне A необходимо убедить сторону В, что это именно её атрибуты. Для этого сторона A доказывает своё знание секрета стороне B, не раскрывая при этом ни одного бита самого секрета . Для этого сторонам потребуется всего 1 раунд.
Алгоритм создания открытого и закрытого ключей
[править | править код]- Центр доверия T выбирает два различных случайных простых числа и , после чего вычисляет их произведение .
- T выбирает целое число (), взаимно простое со значением функции . Функция является функцией Эйлера.
- T вычисляет и секрет .
- T вычисляет .
- Тройка публикуется в качестве открытого ключа.
- играет роль закрытого ключа, и передается стороне A.
Обмен сообщениями
[править | править код]- А выбирает случайное целое , находящееся в диапазоне от до . А вычисляет и отправляет его В.
- В выбирает случайное целое , находящееся в диапазоне от до . В посылает стороне А.
- А вычисляет и посылает его В.
- B проверяет: если , то подлинность доказана.
Действительно .
Схема подписи
[править | править код]Эту схему идентификации можно превратить в схему подписи. Открытый и закрытый ключи не меняются.
Подпись сообщения
[править | править код]Пусть А хочет подписать сообщение .
- А выбирает случайное целое , находящееся в диапазоне от до . А вычисляет .
- А вычисляет , где — подписываемое сообщение, а — однонаправленная хеш-функция. Значение , полученное с помощью хеш-функции, должно быть в диапазоне от до . Если выход хеш-функции выходит за этот диапазон, он должен быть приведен по модулю .
- А вычисляет . Подпись состоит из сообщения , двух вычисленных значений and , и её атрибутов . А посылает подпись B.
Проверка подписи
[править | править код]Пусть В хочет проверить подпись.
- B вычисляет . Затем он вычисляет . Если , то А знает B, и её подпись действительна.
Схема множественной подписи
[править | править код]Схема подписи может быть переделана на случай, когда несколько человек хотят подписать один и тот же документ. Пусть А и B подписывают документ, а K проверяет подписи, но в процесс подписания может быть вовлечено произвольное количество людей. Как и раньше, А и B обладают уникальными значениями и : (,) и (,). Значения и являются общими для всей системы.
Подпись сообщения
[править | править код]Пусть А и B хотят подписать сообщение .
- А выбирает случайное целое , находящееся в диапазоне от до . Она вычисляет и посылает B.
- B выбирает случайное целое , находящееся в диапазоне от до . Она вычисляет и посылает А.
- А и B, каждый вычисляет .
- А и B, каждый вычисляет , где — подписываемое сообщение, а — однонаправленная хеш-функция. Значение , полученное с помощью хеш-функции, должно быть в диапазоне от до . Если выход хеш-функции выходит за этот диапазон, он должен быть приведен по модулю .
- А вычисляет и посылает B.
- B вычисляет и посылает А.
- А и B, каждый вычисляет . Подпись состоит из сообщения , двух вычисленных значений and , и атрибутов обоих подписывающих: и .
Проверка подписи
[править | править код]Пусть К хочет проверить подпись.
- K вычисляет .
- К вычисляет . Затем она вычисляет . Если , то множественная подпись действительна.
Этот протокол может быть расширен на любое количество людей. Для этого подписывающие сообщение люди должны перемножить свои значения на этапе (3), и свои значения на этапе (7). Чтобы проверить множественную подпись, нужно на этапе (1) перемножить значения подписывающих. Либо все подписи правильны, либо существует по крайней мере одна неправильная подпись.
Примечания
[править | править код]Литература
[править | править код]- Feige, Uriel; Fiat, Amos; Shamir, Adi. Zero-knowledge proofs of identity (англ.) // Journal of Cryptology[англ.] : journal. — 1988. — Vol. 1, no. 2. — P. 77—94. — doi:10.1007/BF02351717. Архивировано 17 декабря 2012 года.
- Menezes A., van Oorschot P., Vanstone S. Handbook of Applied Cryptography. — CRC Press, 1996. — 816 с. — ISBN 0-8493-8523-7.
- Louis Guillou, Jean-Jacques Quisquater. A Practical Zero-Knowledge Protocol Fitted to Security Microprocessor Minimizing Both Transmission and Memory (англ.). — 1988.
- Саломаа А. Криптография с открытым ключом — М.: Мир, 1995. — 318 с. — ISBN 978-5-03-001991-8
- Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. — М.: Триумф, 2002. — 816 с. — 3000 экз. — ISBN 5-89392-055-4.