Улучшения

В протокол можно встроить идентификационные данные. Пусть / - это двоичная строка, представляющая идентификатор Пегги: имя, адрес, номер социального страхования, размер головного убора, любимый сорт про­хладительного напитка и другая личная информация. Используем однонаправленную хэш-функцию Щх) для вычисления H(IJ), где; - небольшое число, добавленное к /. Найдем набору, для которых H(IJ) - это квадратич­ный остаток по модулю п. Эти значения H(IJ) становятся vb v2, . . . vk (J не обязаны быть квадратичными остат­ками). Теперь открытым ключом Пегги служит / и перечень j. Пегги посылает / и перечень j Виктору перед ша­гом (1) протокола (или Виктор загружает эти значения с какой-то открытой доски объявлений ), И Виктор гене­рирует vb v2, . . . vk из H(Ij).

Теперь, после того, как Виктор успешно завершит протокол с Пегги, он будет убежден, что Трент, которому известно разложение модуля на множители, сертифицировал связь между / и Пегги, выдав ей квадратные корни из v„ полученные из /. (См. раздел 5.2.) Фейге, Фиат и Шамир добавили следующие замечания [544, 545]:

Для неидеальных хэш-функций можно посоветовать рандомизировать /, добавляя к нему длинную случайную строку R. Эта строка выбирается арбитром и открывается Виктору вместе с /.

В типичных реализациях к должно быть от 1 до 18. Большие значения к могут уменьшить время и трудности связи, уменьшая количество этапов.

Длина и должна быть не меньше 512 битов. (Конечно, с тех пор разложение на множители заметно продвинулось.)

Если каждый пользователь выберет свое собственное и и опубликует его в файле открытых ключей, то можно обойтись и без арбитра. Однако такой RSA-подобный вариант делает схему заметно менее удобной.