Алгоритм подписи Рабина

редактировать

В криптографии алгоритм подписи Рабина представляет собой метод цифрового подпись, первоначально предложенная Майклом О. Рабином в 1979 году. Алгоритм подписи Рабина был одной из первых предложенных схем цифровой подписи, и это единственный метод, который напрямую связывает стойкость подделки с проблемой целочисленной факторизации. Алгоритм подписи Рабина экзистенциально неподдающийся в модели случайного оракула, если предположить, что проблема целочисленной факторизации неразрешима. Алгоритм подписи Рабина также тесно связан с криптосистемой Рабина.

, но криптосистема RSA играет заметную роль на заре криптографии с открытым ключом, и алгоритм подписи Рабина не рассматривается. в большинстве вводных курсов по криптографии.

Содержание
  • 1 Уравнения
  • 2 Исходный алгоритм - небезопасен без хэш-функции
  • 3 Безопасный и упрощенный алгоритм
    • 3.1 Замечания
  • 4 Безопасность
  • 5 Ссылки
  • 6 Внешние ссылки
Уравнения

Если H - устойчивая к коллизиям хеш-функция, m сообщение для подписи и

H (m) p - 1 2 mod p = 1 {\ displaystyle H ( m) ^ {\ frac {p-1} {2}} {\ bmod {p}} = 1}{\ displaystyle H ( m) ^ {\ frac {p-1} {2}} {\ bmod {p}} = 1} и
H (m) q - 1 2 mod q = 1 {\ displaystyle H (m) ^ {\ frac {q-1} {2}} {\ bmod {q}} = 1}{\ displaystyle H (m) ^ {\ гидроразрыв {q-1} {2}} {\ bmod {q}} = 1}

сигнатура S задается уравнением

S = ((pq - 2 H ( м) q + 1 4 модуль q) п + (qp - 2 ЧАС (м) п + 1 4 модуль p) q) модуль (p ⋅ q) {\ displaystyle S = \ left (\ left (p ^ {q- 2} H (m) ^ {\ frac {q + 1} {4}} {\ bmod {q}} \ right) p + \ left (q ^ {p-2} H (m) ^ {\ frac {p +1} {4}} {\ bmod {p}} \ right) q \ right) {\ bmod {(}} p \ cdot q)}{\ displaystyle S = \ left (\ left (p ^ {q-2} H (m) ^ {\ frac {q +) 1} {4}} {\ bmod {q}} \ right) p + \ left (q ^ {p-2} H (m) ^ {\ frac {p + 1} {4}} {\ bmod {p} } \ right) q \ right) {\ bmod {(}} p \ cdot q)} .

Каждый может проверить

H (m) = S 2 mod (p ⋅ q) {\ displaystyle H (m) = S ^ {2} {\ bmod {(}} p \ cdot q)}{\ displaystyle H (т) = S ^ {2} {\ bmod {(}} p \ cdot q) } ,

, если значение n = p ⋅ q {\ displaystyle n = p \ cdot q}n = p \ cdot q является общедоступным.

Исходный алгоритм - небезопасен без хеш-функции
  • Генерация ключа
    • Подписывающая сторона S выбирает простые числа p, q, каждое размером примерно k / 2 бит, и вычисляет произведение n = p ⋅ q {\ displaystyle n = p \ cdot q}n = p \ cdot q .
    • S затем выбирает случайный b в {1,…, n} {\ displaystyle \ {1, \ ldots, n \}}\ {1, \ ldots, n \} .
    • открытый ключ это (n, b).
    • Закрытый ключ (p, q).
  • Подписание
    • Чтобы подписать сообщение m, подписывающая сторона S выбирает случайное заполнение U и вычисляет m ⋅ U mod n {\ displaystyle m \ cdot U \ mod n}{\ displaystyle m \ cdot U \ mod n} .
    • S затем решает x (x + b) mod n = m ⋅ U mod n {\ displaystyle x (x + b) \ mod n = m \ cdot U \ mod n}{\ displaystyle x (x + b) \ mod n = m \ cdot U \ mod n} .
    • Если решения нет, S выбирает новую площадку U и пытается снова.
    • Подпись на m - это пара (U, x)
  • Проверка
    • Имеется сообщение m и подпись (U, x), проверяющий V вычисляет x (x + b) mod n и m ⋅ U mod n {\ displaystyle m \ cdot U \ mod n}{\ displaystyle m \ cdot U \ mod n} и проверяет, что они равны.
Безопасный и упрощенный алгоритм

Безопасный алгоритм основан на устойчивости к коллизиям хеш-функция nt H: {0, 1} ∗ → {0, 1} k {\ displaystyle H: \ {0,1 \} ^ {*} \ rightarrow \ {0,1 \} ^ {k} }H: \ {0,1 \} ^ * \ rightarrow \ {0,1 \} ^ k .

В большинстве презентаций алгоритм упрощается путем выбора b = 0 {\ displaystyle b = 0}{\ displaystyle b = 0 } . Предполагается, что хеш-функция H с k выходными битами является случайным оракулом, и алгоритм работает следующим образом:

Генерация ключа
  1. подписывающая сторона S выбирает простые числа p, q, каждое размером примерно k / 2 бита, и p, q mod 4 равно 3. Он вычисляет произведение n = p ⋅ q {\ displaystyle n = p \ cdot q}n = p \ cdot q .
  2. Открытый ключ - n.
  3. закрытый ключ - (p, q).
Подпись
  1. Чтобы подписать сообщение m, подписывающая сторона S выбирает случайное заполнение U и вычисляет H (m, U).
  2. Если H (m, U) не является квадратом по модулю n, S выбирает новую площадку U.
  3. S вычисляет одно значение x, которое решает уравнение x 2 = H (m, U) mod n {\ displaystyle x ^ {2 } = H (m, U) \ mod n}{\ displaystyle x ^ {2} = H (m, U) \ mod n} .
  4. Подпись на m - это пара (U, x).
Проверка
  1. Учитывая сообщение m и подпись (U, x), проверяющий V вычисляет x mod n и H (m, U) и проверяет, что они равны.

Примечания

В некоторых случаях случайная набивка U исключается. Вместо этого мы можем в конечном итоге умножить хеш-значение на два числа a или b со свойствами (ap) = - (aq) = - 1 {\ displaystyle \ left ({\ tfrac {a} {p}} \ right) = - \ left ({\ tfrac {a} {q}} \ right) = - 1}{\ displaystyle \ left ({\ tfrac {a} {p}} \ right) = - \ left ( {\ tfrac {a} {q}} \ right) = - 1} и (bq) = - (bp) = - 1 {\ displaystyle \ left ({ \ tfrac {b} {q}} \ right) = - \ left ({\ tfrac {b} {p}} \ right) = - 1}{\ displaystyle \ left ({\ tfrac {b} {q}} \ right) = - \ left ({\ tfrac {b} {p}} \ right) = - 1} , где (⋅) {\ displaystyle (\ cdot)}(\ cdot) обозначает легендарный символ . Тогда для любого H по модулю n ровно одно из четырех чисел H, a H, b H, ab H {\ displaystyle H, aH, bH, abH}{\ displaystyle H, aH, bH, abH} будет квадратом по модулю 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 является случайным оракулом, т.е. ее вывод действительно случайный в Z / n Z {\ displaystyle \ mathbb {Z } / n \ mathbb {Z}}\ mathbb {Z} / n \ mathbb {Z} , то подделать подпись для любого сообщения m так же сложно, как вычислить квадратный корень из случайного элемента в Z / n Z {\ displaystyle \ mathbb { Z} / n \ mathbb {Z}}\ mathbb {Z} / n \ mathbb {Z} .

Чтобы доказать, что извлечение случайного квадратного корня так же сложно, как разложение на множители, сначала отметим, что в большинстве случаев существует четыре различных квадратных корня, поскольку n имеет два квадратных корня по модулю p и два квадратные корни по модулю q, и каждая пара дает квадратный корень по модулю n по китайской теореме об остатках. Некоторые из четырех корней могут иметь одинаковое значение, но только с крайне низкой вероятностью.

Теперь, если мы можем найти два разных квадратных корня, x, y, такие что x 2 = y 2 mod n {\ displaystyle x ^ {2} = y ^ {2} \ mod n}x ^ 2 = y ^ 2 \ mod n но x ≠ ± y mod n {\ displaystyle x \ neq \ pm y \ mod n}x \ ne \ pm y \ mod n , тогда это немедленно приводит к факторизации n, поскольку n делит x 2 - y 2 = (x - y) (x + y) {\ displaystyle x ^ {2} -y ^ {2} = (xy) (x + y)}x ^ 2 - y ^ 2 = (xy) (x + y) но это так не делить ни один из факторов. Таким образом, использование gcd ⁡ (x ± y, n) {\ displaystyle \ operatorname {gcd} (x \ pm y, n)}{\ displaystyle \ operatorname {gcd} (x \ pm y, n)} приведет к нетривиальной факторизации n.

Теперь мы предполагаем, что существует эффективный алгоритм для нахождения хотя бы одного квадратного корня. Затем мы выбираем случайное r по модулю n и возводим его в квадрат r 2 = R mod n {\ displaystyle r ^ {2} = R \ mod n}r ^ 2 = R \ mod n , затем, используя алгоритм, берем один квадрат корень из R по модулю n, мы получим новый квадратный корень r ′ {\ displaystyle r ^ {\ prime}}r ^ \ prime , и с вероятностью половинной r ≠ ± r ′ mod n { \ displaystyle r \ neq \ pm r ^ {\ prime} \ mod n}r \ ne \ pm r ^ \ prime \ mod 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. Вероятность квадратного корня из квадратичного остатка по модулю простого числа.
Внешние ссылки
Последняя правка сделана 2021-06-03 05:27:40
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте