Криптография, 08 лекция (от 19 октября)

Материал из eSyr's wiki.

(Различия между версиями)
Перейти к: навигация, поиск

217.12.251.146 (Обсуждение)
(Новая: В прошлый раз познакомились с критерием Рабина, а в этот раз познакомимся с его криптосистемой. Может...)
К следующему изменению →

Версия 19:58, 24 ноября 2013

В прошлый раз познакомились с критерием Рабина, а в этот раз познакомимся с его криптосистемой.

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

Как происходит шифрование? шифрование есть возведение в квадрат.

Расшифрование -- решение квадратного уравнения.

Задача извлечения квадратного корня по модулю простого числа -- кандидат на одностороннюю функцию с секретом.

Доказано, что если суметь найти все корни такого уравнения, то это эквивалентно задачи факторизации.

В этом преимущество критериемы Рабины, у РСА это утверждение было только в одну сторону.

Сколько всего будет корней у такого уравнения? 2 в какой-то степени. В какой? Почему больше двух.

Очевидно, что если м -- решение, то -м тоже решение. Надо сказать, что если н составное и имеет только два делителя, то уравнение будет иметь 4 решения. Если делителей будет три, то у уравнения будет 8 решений. Степень двойки задается количеством простых делителей числа н.

Решение квадратного уравнения. Делаем редукцию по модулям п и ку. Как устроено решение? Берем решение по ку, и умножаем на некоторую константу, зависящую от п и ку. Вторая часть решения строится так же. И соответственно плюс-минус, в итоге получим 4 решения.

Кто-нибудь знает с помощью чего был сделан последний переход -- взяли частное решение и сделали общее? Почему? По китайской теореме об остатках.Осталось совсем немного, нужно научиться решать квадратные уравнения по простым модулям п и ку.

Перейдем к решению

x^2 = a mod p
1. Выделим из p-1 максимальную степень двойки. Назовем. м.
 1. Если m = 1, то решение +-a^{(p+1)/4}.  p-1 = 2*(2k + 1) = 4k+3, то есть p = 4k+3. Простые числа такогов вида называются числами Блюма.
 1. Что делать если m > 1. Тут начинается некий треш. Алгоритм вероятностный, но в среднем он полиномиален. +-c^j*a^{(s+1)/2}. с зависит только от p, а вот j искать уже сложнее. (p - 1 = 2^m*s). Как же найти j?

Побитово. Биты решения j_t выражаются через \eps_t, которая выражается рекурсивно через некое h(a) и с, того самого, что мы ввели раньше. J_i это такая простая функция, которая принимает значение 1, если j_i = 0 и a, если j_i = 1. Теперь, что такое c. Так вот c это элемент b^s mod p. Но тут возникает вопрос что такое b. Это квадратичный невычет по модулю p. Число b называется квадратичным невычетом, если x^2 = b mod p не имеет решения. Понятно, что не из любого числа извлекается квадратный корень. Мы априори предполагаем, что из a он извлекается. А теперь еще нам оказывается нужен элемент, из которого он не извлекается. К сожалению, детерменированного алгоритма поиска невычета нет. Поэтому мы случайно выбираем элемент от 1 до p и проверям, имеет ли оно решение. Но как мы определеяем, если мы решать то не умеем? Но оказывается, что задача определения существования решения очень простая и решается за полиномиальное время.Как определить? Вычисляя такую интересную штуку, как символ лежандра. Обозначаетя дробью в скобках.

Не путайте,это не просто скобки, а символ лежандра. (b|p) . Он равен 0, если b делится на p, 1 если b mod p -- вычет, и -1 если невычет. символ лежандра = b^{(p-1)/2}, то есть вычисляется по простой формуле.

Но можно еще проше.

Алгоритм основан на следующих свойствах:

 1. (1/p) = 1 (а для -1 не всегда так). Если p это число Блюма, то -1 будет невычетом. Именно поэтому так легко все можно решить. 
 1. (-1/p) = (-1)^{(p-1)/2}
 1. Доказывается трудно, но весьма полезно (2/p) = (-1)^{(p^2-1)/8}
 1. Квадратичный закон взаимности. Оказвается (p/q) = (-1)^{(p-1)/2}{(q-1)/2}(q/p)
 1. (ab^2/p) = (a/p)
 1. мультипликативность (a_1 a_2/p) = (a_1/p)(a_2/p)

Давайте что-нибудь решим.

x^2 = 3 mod 97 * 107

В соответствии с редукцией должны решить два уравнения x^2 = 3 mod 97 и x^2 = 3 mod 107

Начнем с mod 107.

1. Выделим старшую степень двойки из p-1, 106 = 2*53. Это число Блюма, у нас простая формула. Первое решение

x_{107} = +-3 ^{(p+1/4)} mod p = +-3 ^{108/4} mod 107 = +- 3 ^{27} mod 107 = +-3^{16+8+2+1} mod 107 = +-89

Со второй частью так красиво не получится.

x^2 = 3 mod 97 
p-2 = 2^5*3.

Определили m = 5 и s = 3.

Теперь нам нужен невычет. Понятно, что b != 1. Проверим 2.

(2/97) = (-1)((97^2-1)/2) = 1

Проверим 3.

(3/97) = (-1)(97-1.2)(3-1/2) (97/3) = (1/3) = 1

Из 4 извлечения корень, она сразу не подходит.

Подойдет 5. Проверим это. (5/97) = (97/5) = (2/5) = (-1)^{4*6/8} = -1

Итак, вырисовался третий параметр нашего алгоритма, это b = 5.

Итак, дальше нам надо вычисить c = b^s mod p и h = a^s mod p

c = 5^3 mod 97 = 28
h = 3^3 mod 97 = 27 

Теперь мы должны вычислить h^2^r для всех r от 1 до l-1

H 0 1 2 3
  h^2^0 h^2^1 h^2^2 h^2^3
  27 50 75 96

В данном случае j0 = 1

Составим таблицу для с

0  1  2  3
28 8 64 22


Все готово, чтобы вычислять биты для j.

e1 = 75*22 mod 97 = 1  j_1 = 0
e2 = h1*c2 = 96 = -1 j_2 = 1
e3 = h0 c1 *  c3 = -1 
j = 1 + 2^2 + 2^3 = 13 
x = +-c
x = +- 28^13 * 3^2 mod 97 = 87

Нашли частные решения +-87 *107 (107 ^ -1 mod97) +- 89 * 97 * (97 ^ -1 mod 107)

Надо найти два чисоа.

10^{-1} mod 97

Применяем расширенный алгоритм Евклида.

97/10 = [9, 10/7] = [9,1, 7/3] = [9, 1, 2, 3]
   9 1  2  3
0 1 9 10 29 97

Итого получили -29 mod 97

Осталось посчитать последний элемен 97^-1 ьщв 107

97/107 = [1, 97/10] = [1, 9, 1, 2, 3]
   1 9  1  2  3 
0 1 1 10 11 32 107
Личные инструменты
Разделы