В криптографии алгоритм подписи Рабина представляет собой метод цифрового подпись, первоначально предложенная Майклом О. Рабином в 1979 году. Алгоритм подписи Рабина был одной из первых предложенных схем цифровой подписи, и это единственный метод, который напрямую связывает стойкость подделки с проблемой целочисленной факторизации. Алгоритм подписи Рабина экзистенциально неподдающийся в модели случайного оракула, если предположить, что проблема целочисленной факторизации неразрешима. Алгоритм подписи Рабина также тесно связан с криптосистемой Рабина.
, но криптосистема RSA играет заметную роль на заре криптографии с открытым ключом, и алгоритм подписи Рабина не рассматривается. в большинстве вводных курсов по криптографии.
Содержание
- 1 Уравнения
- 2 Исходный алгоритм - небезопасен без хэш-функции
- 3 Безопасный и упрощенный алгоритм
- 4 Безопасность
- 5 Ссылки
- 6 Внешние ссылки
Уравнения
Если H - устойчивая к коллизиям хеш-функция, m сообщение для подписи и
- и
сигнатура S задается уравнением
- .
Каждый может проверить
- ,
, если значение является общедоступным.
Исходный алгоритм - небезопасен без хеш-функции
- Генерация ключа
- Подписывающая сторона S выбирает простые числа p, q, каждое размером примерно k / 2 бит, и вычисляет произведение .
- S затем выбирает случайный b в .
- открытый ключ это (n, b).
- Закрытый ключ (p, q).
- Подписание
- Чтобы подписать сообщение m, подписывающая сторона S выбирает случайное заполнение U и вычисляет .
- S затем решает .
- Если решения нет, S выбирает новую площадку U и пытается снова.
- Подпись на m - это пара (U, x)
- Проверка
- Имеется сообщение m и подпись (U, x), проверяющий V вычисляет x (x + b) mod n и и проверяет, что они равны.
Безопасный и упрощенный алгоритм
Безопасный алгоритм основан на устойчивости к коллизиям хеш-функция nt .
В большинстве презентаций алгоритм упрощается путем выбора . Предполагается, что хеш-функция H с k выходными битами является случайным оракулом, и алгоритм работает следующим образом:
- Генерация ключа
- подписывающая сторона S выбирает простые числа p, q, каждое размером примерно k / 2 бита, и p, q mod 4 равно 3. Он вычисляет произведение .
- Открытый ключ - n.
- закрытый ключ - (p, q).
- Подпись
- Чтобы подписать сообщение m, подписывающая сторона S выбирает случайное заполнение U и вычисляет H (m, U).
- Если H (m, U) не является квадратом по модулю n, S выбирает новую площадку U.
- S вычисляет одно значение x, которое решает уравнение .
- Подпись на m - это пара (U, x).
- Проверка
- Учитывая сообщение m и подпись (U, x), проверяющий V вычисляет x mod n и H (m, U) и проверяет, что они равны.
Примечания
В некоторых случаях случайная набивка U исключается. Вместо этого мы можем в конечном итоге умножить хеш-значение на два числа a или b со свойствами и , где обозначает легендарный символ . Тогда для любого H по модулю n ровно одно из четырех чисел будет квадратом по модулю n, и подписывающий выбирает его для своей подписи.
Еще проще, мы меняем сообщение m до тех пор, пока подпись не будет проверена.
def root (m: str, p, q): "" "алгоритм подписи Рабина." "" While True: x = h (m) sig = pow (p, q - 2, q) * p * pow (x, (q + 1) / 4, q) sig = (pow (q, p - 2, p) * q * pow (x, (p + 1) / 4, p) + sig)% (nrabin) if (sig * sig)% nrabin == x: print ("Записать расширенное сообщение в файл m.txt") f = open ('m.txt', 'w') f.write (m) f.close () break m = m + '' return sig
Безопасность
Если хеш-функция H является случайным оракулом, т.е. ее вывод действительно случайный в , то подделать подпись для любого сообщения m так же сложно, как вычислить квадратный корень из случайного элемента в .
Чтобы доказать, что извлечение случайного квадратного корня так же сложно, как разложение на множители, сначала отметим, что в большинстве случаев существует четыре различных квадратных корня, поскольку n имеет два квадратных корня по модулю p и два квадратные корни по модулю q, и каждая пара дает квадратный корень по модулю n по китайской теореме об остатках. Некоторые из четырех корней могут иметь одинаковое значение, но только с крайне низкой вероятностью.
Теперь, если мы можем найти два разных квадратных корня, x, y, такие что но , тогда это немедленно приводит к факторизации n, поскольку n делит но это так не делить ни один из факторов. Таким образом, использование приведет к нетривиальной факторизации n.
Теперь мы предполагаем, что существует эффективный алгоритм для нахождения хотя бы одного квадратного корня. Затем мы выбираем случайное r по модулю n и возводим его в квадрат , затем, используя алгоритм, берем один квадрат корень из R по модулю n, мы получим новый квадратный корень , и с вероятностью половинной .
Ссылки
- Мишель Элиа, Давиде Скипани, О подписи Рабина, 2011 PDF
- Бухманн, Йоханнес. Einführung in die Kryptographie. Второе издание. Берлин: Springer, 2001. ISBN 3-540-41283-2
- Менезес, Альфред; van Oorschot, Paul C.; и Ванстон, Скотт А. Справочник по прикладной криптографии. CRC Press, октябрь 1996 г. ISBN 0-8493-8523-7
- Рабин, Майкл. Оцифрованные подписи и функции открытого ключа как трудноразрешимые как факторизация (в формате PDF). Лаборатория компьютерных наук Массачусетского технологического института, январь 1979 г.
- Скотт Линдхерст, Анализ алгоритма Шанка для вычисления квадратных корней в конечных полях. in R Gupta and KS Williams, Proc 5th Conf Can Nr Theo Assoc, 1999, vol 19 CRM Proc Lec Notes, AMS, Aug 1999.
- Р. Кумандури и К. Ромеро, Теория чисел с компьютерными приложениями, Alg 9.2.9, Prentice Hall, 1997. Вероятность квадратного корня из квадратичного остатка по модулю простого числа.
Внешние ссылки