Математика криптографии и теория шифрования

Квадратичное сравнение

Разбить на страницы
Показывать лекцию целиком

Мы ограничим наше обсуждение только квадратичными уравнениями, в которых a2 = 1 и a1 = 0. Тогда рассмотрение будет касаться уравнений следующей формы:

$${x^2} \equiv a{\text{ }}({\text{mod }}n).$$

Квадратичное сравнение с модулем в виде простого числа

Мы сначала рассматриваем случай, в котором модуль является простым числом. Другими словами, мы хотим найти решения уравнения формы $${x^2} \equiv ({\text{mod }}p)$$, в котором p является простым числом и a — целое число, такое, что p и a — взаимно простые. Может быть доказано, что этот тип уравнения либо не имеет никакого решения, либо имеет только два неконгруэнтных решения.

Пример 13.1

Уравнение $${x^2} \equiv 3{\text{ }}({\text{mod }}11)$$ имеет два решения: $$x \equiv 5{\text{ }}({\text{mod 11}})$$ и $$x \equiv -5{\text{ }}({\text{mod 11}})$$. Но заметим, что $$-5 \equiv 6{\text{ }}({\text{mod 11}})$$, так что фактически эти два решения 5 и 6. Также обратите внимание, что эти два решения неконгруэнтны (несравнимы).

Пример 13.2

Уравнение $${x^2} \equiv 2{\text{ }}({\text{mod }}11)$$ не имеет решения. Не может быть найдено ни одного целого числа x, такого, что квадрат равен 2 mod 11.

Квадратичные вычеты и невычет

В уравнении $${x^2} \equiv a{\text{ }}({\text{mod }}p)$$. a называется квадратичным вычетом (QR), если уравнение имеет два решения; a называется квадратичным невычетом (QNR), если уравнение не имеет решений. Может быть доказано, что в ZP* с p – 1 элементами (p – 1)/2 элементов — квадратичные вычеты и (p – 1)/2 являются квадратичными невычетами.

Пример 13.3

Есть 10 элементов в Z11*. Пять из них – квадратичные вычеты, и пять — невычеты. Другими словами, Z11* может быть разделен на два отдельных множества, QR и QNR, как это показано на рис. 13.1.

Критерий Эйлера

Как мы можем проверить, является ли целое число QR по модулю p? Критерий Эйлера дает признаки:

a. Если $${a^{(p - 1)/2}} \equiv 1(\bmod p)$$ — квадратичный вычет по модулю p.

b. Если $${a^{(p - 1)/2}} \equiv -1(\bmod p)$$ — квадратичный невычет по модулю p.

(рис 13.1) Разделение Z11* на QR и QNR

Пример 13.4

Для того чтобы узнать, является ли 14 или 16 QR в Z11*, сделаем следующие вычисления:

14(23-1)/2 mod 23	1411 mod 23	->  22 mod 23 -> –1 mod 23  невычет
16(23-1)/2 mod 23	1611 mod 23  ->   1 mod 23	  	     вычет

Решение квадратичного сравнения с модулем в виде простого числа

Хотя критерий Эйлера позволяет нам определить, является ли целое число a QR или QNR в Zp*, он не может найти решение $${x^2} \equiv ({\text{mod }}p)$$. Чтобы найти решение этого квадратного уравнения, мы заметим, что простое число может быть представлено либо как p = 4k + 1, либо как p = 4 к + 3, в котором k является положительным целым числом. Решение квадратного уравнения — очень сложное в первом случае и более простое во втором. Мы обсудим только второй случай, который мы будем использовать в лекциях 14-15, когда будем рассматривать криптографическую систему Рабина.

Специальный случай: p = 4 К + 3, если p находится в форме 4 К + 3 (то есть p = 3 mod 4 ) и a есть QR в Zp*, то

$$x \equiv a^{(p+1)/4}(mod \ p) и x \equiv -a^{(p+1)/4}(mod \ p)$$

Пример 13.5

Решите следующие квадратные уравнения:

a. $${x^2} \equiv 3{\text{ }}({\text{mod }}23)$$

b. $${x^2} \equiv 2{\text{ }}({\text{mod }}11)$$

c. $${x^2} \equiv 7{\text{ }}({\text{mod }}19)$$

Решения

a. В первом уравнении 3 - QR в Z23, решение - $$x \equiv \pm 16\left( {\bmod {\text{ }}23} \right)$$. Другими словами, $$\sqrt 3 \equiv \pm 16(\bmod 23)$$.

b.Во втором уравнении 2 - QNR в Z11. Нет решения для $$\sqrt 2 $$ в Z11.

c. В третьем уравнении 7 - QR в Z19, решение - $$x \equiv \pm 11\left( {\bmod {\text{ 19}}} \right)$$. Другими словами $$\sqrt 7 \equiv \pm 11\left( {\bmod {\text{ 19}}} \right)$$.

Квадратичное сравнение по составному модулю

Квадратичное сравнение по составному модулю может быть приведено к решению системы сравнений по модулю в виде простого числа. Другими словами, мы можем анализировать $${x^2} \equiv a(\bmod n)$$, если имеем разложение n на множители. Теперь мы можем решить каждое анализируемое уравнение (если оно разрешимо) и найти k пар ответов для x, как показано на рис. 13.2.

(рис 13.2) Декомпозиция сравнения по составному модулю

Из k пар ответов мы можем составить 2 системы уравнений, которые могут быть решены с использованием китайской теоремы об остатках, чтобы найти 2 значения для x. В криптографии обычно n выбирают так, чтобы $$n = p \times q$$, — это означает k = 2, и мы имеем в целом только четыре ответа.

Пример 13.6

Предположим, что $${x^2} \equiv 36\left( {\bmod 77} \right)$$. Мы знаем, что $$77 = 7 \times 11$$. Мы можем написать

$$x^{2} = 36 (mod \ 7) \equiv 1 (mod \ 7) и x^{2} \equiv 36 (mod \ 11)$$

Обратите внимание, что мы выбрали 3 и 7, чтобы иметь форму 4k + 3 — так, чтобы мы могли решить уравнения, основываясь на предыдущих рассуждениях. Из этих уравнений мы имеем квадратичные вычеты в собственном множестве. Ответы $$x \equiv +1\left( {\bmod {\text{ }}7} \right)$$, $$x \equiv -1\left( {\bmod {\text{ }}7} \right)$$, $$x \equiv +5\left( {\bmod {\text{ }}11} \right)$$ и $$x \equiv -5\left( {\bmod {\text{ }}11} \right)$$. Теперь мы можем из них составить четыре системы уравнений:

$$\tt\parindent0pt Система 1: $x \equiv +1(mod\ 7)$ $x \equiv +5(mod\ 11)$ Система 2: $x \equiv +1(mod\ 7)$ $x \equiv –5(mod\ 11)$ Система 3: $x \equiv –1(mod\ 7)$ $x \equiv +5(mod\ 11)$ Система 4: $x \equiv –1(mod\ 7)$ $x \equiv –5(mod\ 11)$ $$

Ответы : $$x = \pm 6$$ и $$\pm 27$$.

Сложность

Как сложно решить квадратичное сравнение по составному модулю? Главная задача — это разложение модуля на множители. Другими словами, сложность решения квадратичного сравнения по составному модулю — такая же, как и разложения на множители составного целого числа. Как мы видели раньше, если n очень большое, то разложение на множители неосуществимо.

Сложность решения квадратичного сравнения по составному модулю имеет ту же сложность, что и разложение модуля на множители.

13.2. Возведение в степень и логарифмы

Возведение в степень и логарифм инверсны друг другу. Следующие разделы показывают отношения между ними, в которых a называется основой возведения в степень или логарифма.

Возведение в степень: y = ax -> логарифм: x = logay

Возведение в степень

В криптографии общая модульная операция — возведение в степень. Мы часто должны вычислять

y = ax mod n

Криптографическая система RSA, которая будет обсуждаться влекциях 14-15, использует возведение в степень для шифрования и для дешифрования очень больших чисел. К сожалению, большинство компьютерных языков не имеет операторов, которые могут эффективно вычислять степень, особенно для очень больших чисел. Чтобы сделать эту операцию более эффективной при вычислении, мы нуждаемся в эффективных алгоритмах.

Быстрое возведение в степень

Быстрое возведение в степень возможно при использовании специальных методов возведения в квадрат и умножения. В традиционных алгоритмах, чтобы возводить в степень, применяется только умножение, но быстрый алгоритм возведения в степень использует и возведение в квадрат, и умножение. Главная идея этого метода — выполнение возведения в степень с помощью обработки двоичного числа с nb битами ( $${x_0}$$ до $${x_{{n_b}}}_{ - 1}$$ ). Например, x = 22 = (10110) 2. Вообще, число x может быть записано как

$$x = {x_{{n_b} - 1}} \times {2^{k - 1}} + {x_{{n_b} - 2}} \times {2^{k - 2}} + \cdot \cdot \cdot + {x_2} \times {2^2} + {x_1} \times {2^1} + {x_0} \times {2^0}$$

Теперь мы можем написать y = ax, как это показано на рис. 13.3.

(рис 13.3) Идея метода "возведения в квадрат и умножения"

Обратите внимание, что y — произведение элементов числа n. Каждый элемент — либо 1 (если соответствующий бит — 0 ), либо a2i (если соответствующий бит — 1 ). Другими словами, элемент a2i участвует в умножении, если бит — 1, или не участвует, если бит — 0 (умножение на 1 не меняет числа). Рисунок 13.3 дает общую идею, как написать алгоритм. Мы можем непрерывно взводить в квадрат $$a,{a^2},{a^4} \ldots {a^{{2^{{n_b}}} - 1}}$$ Если соответствующий бит — 0, элемент не участвует в процессе умножения; если бит — 1, то участвует. Алгоритм 13.1 отражает эти два свойства.

Возведение_в_ квадрат_и_умножение (a,x,n)
{
  y <- 1
  for (i <- 0 to nb - 1)        //nb — число бит в x
  {
    if (xi = 1)   y <- a x y mod n      //умножение, только если бит 1
    a <- a2 mod n
  }              //в последней итерации возведение в степень не нужно
  return y
}

Алгоритм 13.1 использует nb итерации. В каждой итерации он проверяет значение соответствующего бита. Если значение бита равно 1, он умножает текущее значение на предыдущее значение результата. Затем полученный результат является базой для следующей итерации. Обратите внимание, что возведение в квадрат в последнем шаге не нужно (результат не используется).

Пример 13.7

Рисунок 13.4 показывает процесс для подсчета y = ax с использованием алгоритма 13.1 (для простоты изображения модули не показаны). В этом случае x = 22 = (10110) 2. Это число имеет 5 бит.

(рис 13.4) Демонстрация вычисления a22 с использованием метода "возведения в квадрат и умножения"

Возведение в квадрат делается на каждом шаге за исключением последнего. Умножение делается, если соответствующий бит равен 1. На рисунке 13.4 показано, как постепенно формируется значение y до значения y = a22. Затемненный прямоугольник означает, что умножение не делается и предыдущее значение переносится на следующий шаг. Таблица 13.1 показывает, как вычисляется значение для y = 1722 mod 21. Результат — y = 4.

i xi Умножение (Инициализация y = 1) Возведение в степень (Инициализация a = 17)
0 0 a = 172 mod 21 =16
1 1 y = 1 x 16 mod 21 =16 $$\to$$ a = 162 mod 21 = 4
2 1 y = 16 x 4 mod 21 =1 $$\to$$ a = 42 mod 21 =16
3 0 a = 162 mod 21 = 4
4 1 y = 1 x 4 mod 21 = 4 $$\to$$

Сложность. Алгоритм 13.1 использует максимально 2nb арифметических операций, в которых nb является длиной модуля в битах (nb = log2n). Сложность в битовых операциях алгоритма — O(nb) или полиномиальная сложность.

Сложность разрядной операции быстрого показательного алгоритма — полиномиальная.

Альтернативный алгоритм. Заметим, что алгоритм 13.1 проверяет значение битов в x справа налево (от самого младшего до самого старшего). Может быть написан другой алгоритм, чтобы использовать обратный порядок. Мы выбрали вышеупомянутый алгоритм, потому что операция возведения в квадрат полностью независима от операции умножения; они могут быть сделаны параллельно, чтобы увеличить скорость обработки. Альтернативные алгоритмы оставляем как упражнение.

Логарифм

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

Полный перебор

Первое решение, которое могло бы прийти на ум, для решения x = loga y (mod n): мы можем написать алгоритм, который непрерывно вычисляет y = ax mod n, пока не находит заданное значение y. Алгоритм 13.2 показывает этот подход.

$$\tt\parindent0pt

Modular\_Logarithm (a, y, n\} 

\{ 

\ \ for (x = 1 to n — 1)         // k число бит в x

\ \ \{ 

\ \ \ \ if ($y \equiv  a^{x} \mod\ n$) return x

\ \ \}  

\ \ return failure

\}	$$

Алгоритм 13.2 явно очень неэффективен. Сложность разрядной операции — 0 (2n) или показательна.

Дискретный логарифм

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

Конечная мультипликативная группа. В криптографии мы часто используем мультипликативную конечную группу: $$G = \<{Z_{n*}}, \times \>$$, в которой применяемая операция является умножением. Множество Zn* содержит целые числа от 1 до n–1, которые являются взаимно простыми с n, нейтральный элемент — e = 1. Обратите внимание, что когда модуль группы — простое число, мы имеем $$G = \<{Z_{p*}}, \times \>$$. Эта группа — специальный случай группы первого типа, так что мы концентрируемся на этой группе.

Порядок группы. В лекцииях 5-6 мы обсуждали порядок конечной группы |G| для того, чтобы определить число элементов в группе G. Было доказано, что в группе $$G = \<{Z_{n*}}, \times \>$$ порядок группы (число элементов) — число Эйлера $$\varphi (n)$$. Мы показали, как вычислить $$\varphi (n)$$, когда n может быть разложено на множители в виде простых чисел.

Пример 13.8

Найти порядок группы $$G = \<{Z_{21*}}, \times \>,$$ $$|G| = \varphi (21) = \varphi (3) \times \varphi (7) = 2 \times 6 = 12$$. В этой группе 12 элементов: 1, 2, 4, 5, 8, 10, 11, 13, 16, 17, 19 и 20. Все — взаимно простые с 21.

Порядок элемента. В лекциях 5-6 мы также обсуждали порядок элемента — ord (a). В $$G = \<{Z_{n*}}, \times \>,$$ мы продолжаем определение. Порядок элемента a есть наименьшее целое число, такое, что $${a^i} \equiv e(\bmod n)$$. В этом случае нейтральный элемент e равен 1.

Пример 13.9

Найдите порядок всех элементов в $$G = \<{Z_{10*}}, \times \>$$.

Решение

Эта группа имеет только $$\varphi (10) = 4$$ элемента: 1, 3, 7, 9. Мы можем найти порядок каждого элемента методом "проб и ошибок". Однако, согласно результатам лекций 5-6, порядок элемента является делителем порядка группы (теорема Лагранжа). Целые числа, которые делят 4, — 1, 2 и 4. Это означает, что в каждом случае мы должны проверить только эти числа и найти порядок элемента,

a. $${1^1} = 1\bmod \left( {10} \right) \to ord\left( {10} \right) = 1$$.

b. $${3^1} = 3\bmod \left( {10} \right);{3^2} \equiv 9\bmod \left( {10} \right);{3^4} \equiv 1\bmod \left( {10} \right) \to ord\left( 3 \right) = 4$$.

c. $${7^1} = 7\bmod \left( {10} \right);{7^2} \equiv 9\bmod \left( {10} \right);{7^4} \equiv 1\bmod \left( {10} \right) \to ord\left( 7 \right) = 4$$

d. $${9^1} = 9\bmod \left( {10} \right);{9^2} \equiv 1\bmod \left( {10} \right) \to ord\left( 9 \right) = 2$$.

Теорема Эйлера. Другая теорема, относящаяся к этому вопросу, — это теорема Эйлера, которая говорит, что если a является членом $$G = \<{Z_{n^*}}, \times \>$$, то $${a^{\varphi (n)}} = 1\bmod n$$ ;

Эта теорема очень полезна, потому что показывает, что равенство Ai = 1 mod n сохраняется, если $$i = \varphi (n)$$. Заметим: это не отрицает, что равенство может выполняться и если $$i < \varphi (n)$$. Другими словами, это отношение показывает, что равенство выполняется по меньшей мере однажды.

Пример 13.10

Таблица 13.2 показывает результат ai = x (mod 8) для группы $$G = \<{Z_{8^*}}, \times \>$$. Обратите внимание, что $$\varphi (8) = 4$$. Это элементы — 1, 3, 5 и 7.

Нахождение порядка элементов в примере 13.10
i=1 i=2 i=3 i=4 i=5 i=6 i=7
a=1 x:1x:1 x:1 x:1 x:1 x:1 x:1
a=3 x:3 x:1x:3 x:1 x:3 x:1 x:3
a=5 x:5 x:1x:5 x:1 x:5 x:1 x:5
a=7 x:7 x:1x:7 x:1 x:7 x:1 x:7

Таблица 13.2 показывает некоторые моменты вычислений. Первый: затемненная область показывает результат применения теоремы Эйлера. Когда $$i=\varphi (8) = 4$$, результат равен x = 1 для каждого a. Второй момент: когда таблица показывает, что значение 1 может быть получено для многих значений i — в первую очередь, значение i, равное порядку элемента (обведено в таблице жирной линией). Порядок элементов: ord (1) = 1, ord (3) = 2, ord (5) = 2 и ord (7) = 2.

Первообразные корни. Очень интересное понятие в мультипликативной группе — группы первообразного корня, которые используются в криптографической системе El Gamal (эль Гамаля) в лекциях 14-15. В группе $$G = \<{Z_{n^*}}, \times \>$$, когда порядок элемента равен $$\varphi (n)$$, этот элемент называется первообразным корнем группы.

Пример 13.11

Таблица 13.2 показывает, что там нет первообразных корней $$G = \<{Z_{8^*}}, \times \>$$, потому что ни один элемент не имеет порядок, равный $$\varphi (8) = 4$$. Порядок всех элементов — меньше, чем 4.

Пример 13.12

Таблица 13.3 показывает результат $${a^i} \equiv x\left( {\bmod {\text{ }}7} \right)$$ для группы $$G = \<{Z_{7^*}}, \times \>$$. В этой группе $$\varphi (7) = 6$$.

Пример 13.12
i=1 i=2 i=3 i=4 i=5 i=6
a=1 x:1x:1 x:1 x:1 x:1 x:1
a=2 x:2 x:4 x:1x:2 x:4 x:1
a=3 x:3 x:2 x:6 x:4 x:5 x:1
a=4 x:4 x:2 x:1x:4 x:2 x:1
a=5 x:5 x:4 x:6 x:2 x:3 x:1
a=6 x:6 x:1 x:6 x:1x:6 x:1

Порядок элементов – $$ord\left( 1 \right) = 1$$, $$ord\left( 2 \right) = 3$$, $$ord\left( 3 \right) = \underline 6 $$, $$ord\left( 4 \right) = 3$$, $$ord\left( 5 \right) = \underline 6 $$ и $$ord\left( 6 \right) = 1$$. Таблица 13.3 показывает, что только два элемента, 3 и 5, имеют порядок в $$i = \varphi (n) = 6$$. Поэтому эта группа имеет только два примитивных корня: 3 и 5.

Было доказано, что группа $$G = \<{Z_{n^*}}, \times \>$$ имеет примитивный корень, только если n = 2, 4, pt, или 2pt, в которой p является нечетным простым числом (не 2 ) и t — целое число.

.

Пример 13.13

Для какого значения n группа $$G = \<{Z_{n^*}}, \times \>$$ имеет примитивные корни: 17, 20, 38 и 50?

Решение

a. $$G = \<{Z_{17^*}}, \times \>$$ имеет примитивные корни, потому что 17 — простое число ( pt, где t равно 1 ).

b. $$G = \<{Z_{20^*}}, \times \>$$ не имеет никаких примитивных корней.

c. $$G = \<{Z_{38^*}}, \times \>$$ имеет первообразные корни, потому что $$38 = 2 \times 19$$ и 19 — простое число.

d. $$G = \<{Z_{50^*}}, \times \>$$ имеет первообразные корни, потому что $$50 = 2 \times {5^2}$$, а 5 — простое число.

Если группа имеет примитивный корень, то обычно она имеет несколько таких корней. Число примитивных корней может быть вычислено как — $$\varphi (\varphi (n))$$. Например, число примитивных корней $$G = \<{Z_{17^*}}, \times \>$$ — это — $$\varphi (\varphi (n)) = \varphi (16) = 8$$. Обращаем внимание, что нужно сначала проверить, имеет ли группа какой-либо примитивный корень, прежде чем находить число корней.

Если группа G = < Z n* , x > имеет хотя бы один примитивный корень, то число примитивных корней — $$\phi$$ ( $$\phi$$ (n))

Рассмотрим три вопроса:

1. Если дан элемент a и группа $$G = \<{Z_{n^*}}, \times \>$$, как можно определить, является ли a примитивным корнем G? Это не такая легкая задача.

а. Мы должны найти $$\varphi (n)$$, — эта задача по сложности подобна задаче разложения на множители числа n.

б. Мы должны найти $$ord(a) = \varphi (n)$$.

2. Если дана группа $$G = \<{Z_{n^*}}, \times \>$$, как найти все примитивные корни $$\varphi $$? Эта задача более трудная, чем первая задача, потому что мы должны повторить вычисления по п.1.б для всей группы.

3. Если дана группа $$G = \<{Z_{n^*}}, \times \>$$, то как выбирать примитивный корень G? В криптографии мы должны найти, по крайней мере, один примитивный корень в группе. Однако в этом случае значение n выбирается пользователем, и пользователь знает $$\varphi (n)$$. Пользователь пробует последовательно несколько элементов, пока не находит первый из них.

Циклическая группа. Циклические группы уже обсуждались в лекциях 5-6. Обратите внимание на то, что, если группа $$G = \<{Z_{n^*}}, \times \>$$ имеет примитивные корни, то они циклически повторяются. Каждый примитивный корень — генератор и может использоваться для создания целого набора. Другими словами, если g — примитивный корень в группе, мы можем генерировать набор Zn* как

$${Z_n}^* = \{ {g^1},{g^2},{g^3}, \ldots ,{g^{\varphi (n)}}\}$$

Пример 13.14

Группа $$G = \<{Z_{10^*}}, \times \>$$ имеет два примитивных корня, потому что $$\varphi (10) = 4$$ и $$\varphi (\varphi (10)) = 2$$. Можно найти примитивные корни - это 3 и 7. Ниже показано, как можно создать целый набор Z10*, использующий каждый примитивный корень.

g = 3 -> g1 mod 10 = 3   g2 mod 10 = 9   g3 mod 10 = 7   g4 mod 10 = 1
g = 7 -> g1 mod 10 = 7   g2 mod 10 = 9   g3 mod 10 = 3   g4 mod 10 = 1

Обратите внимание, что группа $$G = \<{Z_{p^*}}, \times \>$$ всегда циклическая, потому что p — простое.

Группа G = < Zn*, x > является циклической группой, если она имеет примитивные корни.
Группа G = < Zp*, x > всегда является циклической.

Идея дискретного логарифма. Группа $$G = \<{Z_p}^*, \times \>$$ имеет несколько интересных свойств.

  • Её элементы включают все целые числа от 1 до p – 1.
  • Она всегда имеет примитивные корни.
  • Она всегда является циклической. Элементы могут быть созданы с использованием gx, где x — целое число от 1 до $$\varphi (n) = p - 1$$.
  • Примитивные корни можно представлять себе как основание логарифма. Если группа имеет k примитивных корней, то вычисления могут быть сделаны для k различных оснований. Данный x = logg y для любого элемента y в данном множестве, но есть другой элемент x, который является логарифмом y по основанию g. Этот тип логарифма называют дискретным логарифмом. Дискретный логарифм в литературе определяется несколькими различными символами, но мы будем использовать обозначение Lg, чтобы показать, что основание — g (сравнение по модулю).
  • Решение модульного логарифма с использованием дискретных логарифмов

    Теперь рассмотрим, как решаются задачи типа y = ax (mod n), т. е. дано y, а мы должны найти x.

    Табулирование дискретных логарифмов. Один из способов решения вышеупомянутой проблемы — использовать таблицу для каждого Zp* и различных оснований. Этот тип таблицы может быть предварительно рассчитан и сохранен. Например, таблица 13.4 показывает значения дискретного логарифма для Z7*. Мы знаем, что мы имеем два примитивных корня или основания в данном множестве.

    Дискретный логарифм для G = <Zp*,х>
    y 1 2 3 4 5 6
    x = L3y 6 2 1 4 5 3
    x = L5y 6 4 5 2 1 3

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

    Пример 13.15

    Найдите x в каждом из следующих случаев:

    a. $$4 \equiv {3^x}\left( {\bmod {\text{ }}7} \right)$$

    b. $$6 \equiv {5^x}\left( {\bmod {\text{ }}7} \right)$$

    Решение

    Мы можем легко использовать таблицу 13.4 дискретного логарифма.

    a. $$4 \equiv {3^x}\left( {\bmod {\text{ }}7} \right) \to {L_3}4\left( {\bmod {\text{ }}7} \right) = 4{\text{ }}\bmod {\text{ }}7$$

    b. $$6 \equiv {5^x}\left( {\bmod {\text{ }}7} \right) \to {L_5}6\left( {\bmod {\text{ }}7} \right) = 3{\text{ }}\bmod {\text{ }}7$$

    Использование свойств дискретных логарифмов. Чтобы показать, что дискретные логарифмы ведут себя точно так же, как традиционные логарифмы, в таблице 13.5 приводится несколько свойств обоих типов логарифмов. Обратите внимание, что основание модуля — $$\varphi (n)$$ вместо n.

    Сравнение традиционных и дискретных логарифмов
    Традиционные логарифмы Дискретные логарифмы
    loga 1 = 0 Lg $$\equiv$$ 0(mod $$\phi$$ (n))
    loga (x x y) = logax + logay Lg(x x y) $$\equiv$$ Lgx + Lgy
    logaxk = k x logax Lgx $$\equiv$$ k x Lgx(mod $$\phi$$ (n))

    Использование алгоритмов, основанных на дискретных логарифмах. Таблицы и свойства дискретных логарифмов не могут быть использованы для решения уравнения y = a x (mod n), когда n является очень большим. Для решения этой проблемы были разработаны несколько алгоритмов, в которых используется основная идея дискретных логарифмов. Хотя все эти алгоритмы более эффективны, чем алгоритмы полного перебора, которые мы упоминали в начале этого раздела, но ни один из них не имеет полиномиальную сложность. Большинство этих алгоритмов имеет такой же уровень сложности, как проблема разложения на множители.

    Проблема дискретного логарифма имеет такую же сложность, как проблема разложения на множители.

    13.3. Рекомендованная литература

    Нижеследующие книги и сайты дают более детальную информацию о предметах, рассмотренных в этой лекции. Пункты, приведенные в квадратных скобках, содержатся в списке в конце книги.

    Книги

    [Ros06] [Cou99], [BW00] и [Bla03] — для тем, которые обсуждаются в этой лекции.

    Сайты

    Нижеследующие сайты дают больше информации о темах, обсужденных в этой лекции.

  • http://en.wikipedia.org/wiki/Prime_number
  • http://primes.utm.edu/mersenne/
  • http://en.wikipedia.org/wiki/Primality__test
  • www..cl.cam.ac.uk/~jehl004/research/talks/miller-talk.pdf
  • http://mathworld.wolfram.com/TotientFunction.html
  • http: // en.wikipedia.org/wiki/Proofs_of_Fermat's_little_theorem
  • faculty.cs.tamu.edu/klappi/629/analytic.pdf
  • 13.4. Итоги

  • Положительные целые числа могут быть разделены на три группы: число 1, простые числа и составные объекты. Положительное целое число — простое число, такое и только такое, если оно точно делится без остатка на два различных целых числа, а именно на 1 и непосредственно само на себя. Составной объект — положительное целое число по крайней мере с двумя делителями.
  • Эйлеровская phi -функция $$\varphi (n)$$, которую иногда называют функцией-тотиентом Эйлера, играет очень важную роль в криптографии. Функция указывает число целых чисел, которые меньше чем n и являются взаимно простыми с n.
  • В таблице 13.6 показаны малая теорема Ферма и теорема Эйлера, которые рассмотрены в этой лекции.
    Малая теорема Ферма и теорема Эйлера
    Ферма Первая версия : Если НОД(a,p) = 1, то ap-1 $$\equiv$$ 1(mod p)
    Вторая версия: ap $$\equiv$$ a(mod p)
    Эйлер Первая версия: Если НОД(a,n) = 1, то a $$\phi$$ (n) $$\equiv$$ 1 (mod p)
    Вторая версия: Если n= p x q и a < n, то a>kx $$\phi$$ (n)+1 $$\equiv$$ a(mod n)
  • Чтобы получить большое простое число, мы выбираем большое случайное число и проверяем его — убеждаемся, что оно простое. Алгоритмы, которые решают эту проблему, могут быть разделены на две обширные категории: детерминированные алгоритмы и вероятностные алгоритмы. Некоторые вероятностные алгоритмы для испытания простоты чисел – это испытание Ферма, испытание квадратного корня и испытание Миллера-Рабина. Некоторые детерминированные алгоритмы — испытание на делимости и AKS-алгоритм.
  • Согласно основной теореме арифметики, любое положительное целое число, большее, чем 1, может быть разложено на множители в виде простых чисел. Мы рассмотрели несколько методов разложения на множители, включая проверку делением — Ферма, метод Полларда p – 1, метод РО ( $$\rho $$ ) Полларда, квадратичное решето и решето поля чисел.
  • Китайская теорема об остатках (Chinese Reminder Theorem — CRT) используется, чтобы решить систему уравнений для вычетов с одной переменной, но с различными взаимно простыми модулями.
  • Мы рассмотрели решение квадратичного сравнения по модулю в виде простого числа и квадратичного сравнения по составному модулю. Однако, если модуль является большим, решение квадратичного сравнения по сложности совпадает с разложением модуля на множители.
  • В криптографии применяется операция по модулю — возведение в степень. Для быстрого возведения в степень можно использовать метод "возведения в квадрат и умножения". Криптография также включает модульные логарифмы. Если возведение в степень применяется, чтобы зашифровать или расшифровывать информацию, то противник может использовать логарифмы для организации "атаки". Сложность операции, обратной возведению в степень, велика. Хотя возведение в степень может быть сделано с помощью быстрого алгоритма, применение модульного логарифма для больших значений модуля имеет ту же сложность, что и проблема разложения на множители.
  • 13.5. Набор для практики

    Обзорные вопросы

  • Объясните разницу между простым числом и составным целым числом.
  • Определите взаимно простые числа и их свойства.
  • Определите следующие функции и их приложения:
  • $$\pi (n)$$ функция
  • Функция (тотиент) Эйлера
  • Объясните "решето Эратосфена" и его приложения.
  • Определите малую теорему Ферма и объяснить ее приложения.
  • Определите теорему Эйлера и объясните ее приложения.
  • Что такое простые числа Мерсенны? Что такое простые числа Ферма?
  • Объясните разницу между детерминированными и вероятностными алгоритмами для определения простых чисел.
  • Перечислите некоторые алгоритмы для разложения на множители простых чисел.
  • Определите Китайскую теорему об остатках и ее приложения.
  • Определите квадратичное сравнение и важность вычетов (QRs) и невычетов (QNRs) в решении квадратных уравнений.
  • Определите дискретные логарифмы и объяснить их важность в решении логарифмических уравнений.
  • Упражнения

  • Используя аппроксимацию, найдите:
  • число простых чисел между 100 000 и 200 000.
  • число составных целых чисел между 100 000 и 200 000
  • отношение простых чисел к составным в вышеупомянутом диапазоне и сравните это с тем же самым между 1 – 10.
  • Найти наибольший простой сомножитель следующих составных целых чисел: 100, 1000, 10 000, 100 000 и 1 000 000. Также найти наибольший простой сомножитель 101, 1001, 10 001, 100 001 и 1 000 01.
  • Покажите, что каждое простое число может быть представлено в форме либо 4k + 1, либо 4k + 3, где k — положительное целое число.
  • Найдите некоторые простые числа в форме 5k + 1, 5k + 2, 5 k + 3 и 5k + 4, где k: является положительным целым числом.
  • Найдите значение $$\varphi (29)$$, $$\varphi (32)$$, $$\varphi (80) $$, $$\varphi (100)$$, $$\varphi (101)$$
  • Покажите, что 224 – 1 и 216 – 1 – составные числа. Подсказка: используйте выражение (a2 – b2).
  • Есть предположение, что каждое целое число, большее, чем 2, может быть представлено как сумма двух простых чисел. Проверьте это предположение для 10, 24, 28 и 100.
  • Есть предположение, что есть много простых чисел в форме n2 + 1. Найдите некоторые из них.
  • Найдите результаты после использования малой теоремы Ферма:
  • 515 mod 13
  • 1518 mod 17
  • 45617 mod 17
  • 145 mod 101
  • Найдите, используя Малую теорему Ферма, результаты выражений, приведенных ниже:
  • 5-1 mod 13
  • 15-1 mod 17
  • 27-l mod 41
  • 70-1 mod 101
  • Обратите внимание, что все модули — простые числа.

  • Найдите, используя теорему Эйлера, результаты выражений, приведенных ниже:
  • 12-1 mod 77
  • 16-1 mod 323
  • 20-1 mod 403
  • 44-1 mod 667
  • Обратите внимание, что $$77 = 7 \times 11$$, $$323 = 17 \times 19$$, $$403 = 31 \times 13$$ и $$667 = 23 \times 29$$.

  • Определите, являются ли следующие числа Мерсенны простыми числами: М23, М29 и М31. Подсказка: любой делитель числа Мерсенны имеет форму 2kp + 1.
  • Приведите некоторые примеры, чтобы показать, что если 2n – 1 — простое число, то n — простое число. Этот факт может использоваться для проверки на простоту? Объясните, как.
  • Определите, сколько из следующих целых чисел пройдут испытание Ферма на простоту чисел: 100, 110, 130, 150, 200, 250, 271, 341, 561. Используйте основание 2.
  • Определите, сколько из следующих целых чисел пройдут испытание Миллера-Рабина на простоту чисел: 100, 109, 201, 271, 341, 349. Используйте основание 2.
  • Используйте рекомендованное испытание, чтобы определить, является ли любое из следующих целых чисел простым числом: 271, 3149, 9673.
  • Используйте a = 2, x = 3 и несколько простых чисел, чтобы показать, что если p — простое число, то выполняется следующее сравнение: (x – a) p = (xp – a) (mod p).
  • Говорят, что n -ное простое число может быть приближенно вычислено как pn = n ln n. Проверьте это на нескольких простых числах.
  • Найдите значение x для следующих наборов сравнений, используя китайскую теорему об остатках.
  • $$x \equiv 2\bmod {\text{ }}7$$, и $$x \equiv 3\bmod {\text{ }}9$$
  • $$x \equiv 4\bmod {\text{ }}5$$, и $$x \equiv 10\bmod {\text{ }}11$$
  • $$x \equiv 7\bmod {\text{ }}13$$, и $$x \equiv 11\bmod {\text{ }}12$$
  • Найдите весь QRs и QNRs в Z13*, Z17* и Z23*.
  • Используя квадратичные вычеты, решите следующие сравнения:
  • $${x^2} \equiv 4\bmod {\text{ }}7$$
  • $${x^2} \equiv 5\bmod {\text{ }}11$$
  • $${x^2} \equiv 7\bmod {\text{ }}13$$
  • $${x^2} \equiv 12\bmod {\text{ }}17$$
  • Используя квадратичные вычеты, решите следующие сравнения:
  • $${x^2} \equiv 4\bmod {\text{ }}14$$
  • $${x^2} \equiv 5\bmod {\text{ }}10$$
  • $${x^2} \equiv 7\bmod {\text{ }}33$$
  • $${x^2} \equiv 12\bmod {\text{ }}34$$
  • Найдите результаты приведенных ниже выражений, используя метод "возведения в квадрат и умножения".
  • 2124 mod 8
  • 32023 mod 461
  • 173641 mod 2134
  • 200135 mod 2000
  • Для группы $$G = \<{Z_{19^*}}, \times \>$$:
  • Найдите порядок группы
  • Найдите порядок каждого элемента в группе
  • Найдите число первообразных корней в группе
  • Найдите первообразные корни в группе
  • Покажите, что группа является циклической
  • Составьте таблицу дискретных логарифмов
  • Используя свойства дискретных логарифмов, покажите, как решить сравнения:
  • $${x^5} \equiv 11\bmod {\text{ }}17$$
  • $$2{x^{11}} \equiv 22\bmod {\text{ }}19$$
  • $$5{x^{12}} + 6x \equiv 8\bmod {\text{ }}23$$
  • Пусть мы имеем компьютер, выполняющий операции со скоростью 1 миллион бит в секунду. Вы хотите затратить только 1 час на испытание простоты чисел. Какое наибольшее число вы можете проверить, используя следующие методы, проверяющие простоту чисел?
  • теория делимости
  • AKS-алгоритм
  • Ферма
  • извлечением квадратного корня
  • Миллера-Рабина
  • Пусть мы имеем компьютер, выполняющий операции со скоростью 1 миллион бит в секунду. Вы хотите потратить только 1 час на разложение составного целого числа. Какое наибольшее число вы можете разложить на множители, используя следующие методы разложения на множители?
  • проверка делением
  • Ферма
  • Полларда (РО)
  • квадратичное решето
  • решето поля чисел
  • Метод "возведения в квадрат и умножения" — быстрый алгоритм возведения в степень — позволяет нам останавливать программу, если значение основания становится равным 1. Измените алгоритм 13.1, чтобы показать это.
  • Перепишите алгоритм 13.1, чтобы проверить биты в порядке от самого старшего к самому младшему.
  • Метод "возведения в квадрат и умножения" — быстрый алгоритм возведения в степень — может также быть спроектирован для проверки, является ли число четным или нечетным, вместо того чтобы проверять его разряды. Перепишите алгоритм 13.1, чтобы показать это.
  • Напишите алгоритм в псевдокоде для испытания простоты чисел по методу Ферма.
  • Напишите алгоритм в псевдокоде для испытания простоты чисел методом извлечения квадратного корня.
  • Напишите алгоритм в псевдокоде для китайской теоремы об остатках.
  • Напишите алгоритм в псевдокоде, чтобы найти вычет (QR) и невычет (QNR) для любого Zp*.
  • Напишите алгоритм в псевдокоде для нахождения первообразного корня для множества Zp*.
  • Напишите алгоритм в псевдокоде, чтобы найти все первообразные корни для множества Zp*.
  • Напишите алгоритм, чтобы найти и хранить дискретные логарифмы для множества Zp*.
  • Страницы:

    Мы ограничим наше обсуждение только квадратичными уравнениями, в которых a2 = 1 и a1 = 0. Тогда рассмотрение будет касаться уравнений следующей формы:

    $${x^2} \equiv a{\text{ }}({\text{mod }}n).$$

    Квадратичное сравнение с модулем в виде простого числа

    Мы сначала рассматриваем случай, в котором модуль является простым числом. Другими словами, мы хотим найти решения уравнения формы $${x^2} \equiv ({\text{mod }}p)$$, в котором p является простым числом и a — целое число, такое, что p и a — взаимно простые. Может быть доказано, что этот тип уравнения либо не имеет никакого решения, либо имеет только два неконгруэнтных решения.

    Пример 13.1

    Уравнение $${x^2} \equiv 3{\text{ }}({\text{mod }}11)$$ имеет два решения: $$x \equiv 5{\text{ }}({\text{mod 11}})$$ и $$x \equiv -5{\text{ }}({\text{mod 11}})$$. Но заметим, что $$-5 \equiv 6{\text{ }}({\text{mod 11}})$$, так что фактически эти два решения 5 и 6. Также обратите внимание, что эти два решения неконгруэнтны (несравнимы).

    Пример 13.2

    Уравнение $${x^2} \equiv 2{\text{ }}({\text{mod }}11)$$ не имеет решения. Не может быть найдено ни одного целого числа x, такого, что квадрат равен 2 mod 11.

    Квадратичные вычеты и невычет

    В уравнении $${x^2} \equiv a{\text{ }}({\text{mod }}p)$$. a называется квадратичным вычетом (QR), если уравнение имеет два решения; a называется квадратичным невычетом (QNR), если уравнение не имеет решений. Может быть доказано, что в ZP* с p – 1 элементами (p – 1)/2 элементов — квадратичные вычеты и (p – 1)/2 являются квадратичными невычетами.

    Пример 13.3

    Есть 10 элементов в Z11*. Пять из них – квадратичные вычеты, и пять — невычеты. Другими словами, Z11* может быть разделен на два отдельных множества, QR и QNR, как это показано на рис. 13.1.

    Критерий Эйлера

    Как мы можем проверить, является ли целое число QR по модулю p? Критерий Эйлера дает признаки:

    a. Если $${a^{(p - 1)/2}} \equiv 1(\bmod p)$$ — квадратичный вычет по модулю p.

    b. Если $${a^{(p - 1)/2}} \equiv -1(\bmod p)$$ — квадратичный невычет по модулю p.

    (рис 13.1) Разделение Z11* на QR и QNR

    Пример 13.4

    Для того чтобы узнать, является ли 14 или 16 QR в Z11*, сделаем следующие вычисления:

    14(23-1)/2 mod 23	1411 mod 23	->  22 mod 23 -> –1 mod 23  невычет
    16(23-1)/2 mod 23	1611 mod 23  ->   1 mod 23	  	     вычет

    Решение квадратичного сравнения с модулем в виде простого числа

    Хотя критерий Эйлера позволяет нам определить, является ли целое число a QR или QNR в Zp*, он не может найти решение $${x^2} \equiv ({\text{mod }}p)$$. Чтобы найти решение этого квадратного уравнения, мы заметим, что простое число может быть представлено либо как p = 4k + 1, либо как p = 4 к + 3, в котором k является положительным целым числом. Решение квадратного уравнения — очень сложное в первом случае и более простое во втором. Мы обсудим только второй случай, который мы будем использовать в лекциях 14-15, когда будем рассматривать криптографическую систему Рабина.

    Специальный случай: p = 4 К + 3, если p находится в форме 4 К + 3 (то есть p = 3 mod 4 ) и a есть QR в Zp*, то

    $$x \equiv a^{(p+1)/4}(mod \ p) и x \equiv -a^{(p+1)/4}(mod \ p)$$

    Пример 13.5

    Решите следующие квадратные уравнения:

    a. $${x^2} \equiv 3{\text{ }}({\text{mod }}23)$$

    b. $${x^2} \equiv 2{\text{ }}({\text{mod }}11)$$

    c. $${x^2} \equiv 7{\text{ }}({\text{mod }}19)$$

    Решения

    a. В первом уравнении 3 - QR в Z23, решение - $$x \equiv \pm 16\left( {\bmod {\text{ }}23} \right)$$. Другими словами, $$\sqrt 3 \equiv \pm 16(\bmod 23)$$.

    b.Во втором уравнении 2 - QNR в Z11. Нет решения для $$\sqrt 2 $$ в Z11.

    c. В третьем уравнении 7 - QR в Z19, решение - $$x \equiv \pm 11\left( {\bmod {\text{ 19}}} \right)$$. Другими словами $$\sqrt 7 \equiv \pm 11\left( {\bmod {\text{ 19}}} \right)$$.

    Квадратичное сравнение по составному модулю

    Квадратичное сравнение по составному модулю может быть приведено к решению системы сравнений по модулю в виде простого числа. Другими словами, мы можем анализировать $${x^2} \equiv a(\bmod n)$$, если имеем разложение n на множители. Теперь мы можем решить каждое анализируемое уравнение (если оно разрешимо) и найти k пар ответов для x, как показано на рис. 13.2.

    (рис 13.2) Декомпозиция сравнения по составному модулю

    Из k пар ответов мы можем составить 2 системы уравнений, которые могут быть решены с использованием китайской теоремы об остатках, чтобы найти 2 значения для x. В криптографии обычно n выбирают так, чтобы $$n = p \times q$$, — это означает k = 2, и мы имеем в целом только четыре ответа.

    Пример 13.6

    Предположим, что $${x^2} \equiv 36\left( {\bmod 77} \right)$$. Мы знаем, что $$77 = 7 \times 11$$. Мы можем написать

    $$x^{2} = 36 (mod \ 7) \equiv 1 (mod \ 7) и x^{2} \equiv 36 (mod \ 11)$$

    Обратите внимание, что мы выбрали 3 и 7, чтобы иметь форму 4k + 3 — так, чтобы мы могли решить уравнения, основываясь на предыдущих рассуждениях. Из этих уравнений мы имеем квадратичные вычеты в собственном множестве. Ответы $$x \equiv +1\left( {\bmod {\text{ }}7} \right)$$, $$x \equiv -1\left( {\bmod {\text{ }}7} \right)$$, $$x \equiv +5\left( {\bmod {\text{ }}11} \right)$$ и $$x \equiv -5\left( {\bmod {\text{ }}11} \right)$$. Теперь мы можем из них составить четыре системы уравнений:

    $$\tt\parindent0pt Система 1: $x \equiv +1(mod\ 7)$ $x \equiv +5(mod\ 11)$ Система 2: $x \equiv +1(mod\ 7)$ $x \equiv –5(mod\ 11)$ Система 3: $x \equiv –1(mod\ 7)$ $x \equiv +5(mod\ 11)$ Система 4: $x \equiv –1(mod\ 7)$ $x \equiv –5(mod\ 11)$ $$

    Ответы : $$x = \pm 6$$ и $$\pm 27$$.

    Сложность

    Как сложно решить квадратичное сравнение по составному модулю? Главная задача — это разложение модуля на множители. Другими словами, сложность решения квадратичного сравнения по составному модулю — такая же, как и разложения на множители составного целого числа. Как мы видели раньше, если n очень большое, то разложение на множители неосуществимо.

    Сложность решения квадратичного сравнения по составному модулю имеет ту же сложность, что и разложение модуля на множители.

    13.2. Возведение в степень и логарифмы

    Возведение в степень и логарифм инверсны друг другу. Следующие разделы показывают отношения между ними, в которых a называется основой возведения в степень или логарифма.

    Возведение в степень: y = ax -> логарифм: x = logay

    Возведение в степень

    В криптографии общая модульная операция — возведение в степень. Мы часто должны вычислять

    y = ax mod n

    Криптографическая система RSA, которая будет обсуждаться влекциях 14-15, использует возведение в степень для шифрования и для дешифрования очень больших чисел. К сожалению, большинство компьютерных языков не имеет операторов, которые могут эффективно вычислять степень, особенно для очень больших чисел. Чтобы сделать эту операцию более эффективной при вычислении, мы нуждаемся в эффективных алгоритмах.

    Быстрое возведение в степень

    Быстрое возведение в степень возможно при использовании специальных методов возведения в квадрат и умножения. В традиционных алгоритмах, чтобы возводить в степень, применяется только умножение, но быстрый алгоритм возведения в степень использует и возведение в квадрат, и умножение. Главная идея этого метода — выполнение возведения в степень с помощью обработки двоичного числа с nb битами ( $${x_0}$$ до $${x_{{n_b}}}_{ - 1}$$ ). Например, x = 22 = (10110) 2. Вообще, число x может быть записано как

    $$x = {x_{{n_b} - 1}} \times {2^{k - 1}} + {x_{{n_b} - 2}} \times {2^{k - 2}} + \cdot \cdot \cdot + {x_2} \times {2^2} + {x_1} \times {2^1} + {x_0} \times {2^0}$$

    Теперь мы можем написать y = ax, как это показано на рис. 13.3.

    (рис 13.3) Идея метода "возведения в квадрат и умножения"

    Обратите внимание, что y — произведение элементов числа n. Каждый элемент — либо 1 (если соответствующий бит — 0 ), либо a2i (если соответствующий бит — 1 ). Другими словами, элемент a2i участвует в умножении, если бит — 1, или не участвует, если бит — 0 (умножение на 1 не меняет числа). Рисунок 13.3 дает общую идею, как написать алгоритм. Мы можем непрерывно взводить в квадрат $$a,{a^2},{a^4} \ldots {a^{{2^{{n_b}}} - 1}}$$ Если соответствующий бит — 0, элемент не участвует в процессе умножения; если бит — 1, то участвует. Алгоритм 13.1 отражает эти два свойства.

    Возведение_в_ квадрат_и_умножение (a,x,n)
    {
      y <- 1
      for (i <- 0 to nb - 1)        //nb — число бит в x
      {
        if (xi = 1)   y <- a x y mod n      //умножение, только если бит 1
        a <- a2 mod n
      }              //в последней итерации возведение в степень не нужно
      return y
    }

    Алгоритм 13.1 использует nb итерации. В каждой итерации он проверяет значение соответствующего бита. Если значение бита равно 1, он умножает текущее значение на предыдущее значение результата. Затем полученный результат является базой для следующей итерации. Обратите внимание, что возведение в квадрат в последнем шаге не нужно (результат не используется).

    Пример 13.7

    Рисунок 13.4 показывает процесс для подсчета y = ax с использованием алгоритма 13.1 (для простоты изображения модули не показаны). В этом случае x = 22 = (10110) 2. Это число имеет 5 бит.

    (рис 13.4) Демонстрация вычисления a22 с использованием метода "возведения в квадрат и умножения"

    Возведение в квадрат делается на каждом шаге за исключением последнего. Умножение делается, если соответствующий бит равен 1. На рисунке 13.4 показано, как постепенно формируется значение y до значения y = a22. Затемненный прямоугольник означает, что умножение не делается и предыдущее значение переносится на следующий шаг. Таблица 13.1 показывает, как вычисляется значение для y = 1722 mod 21. Результат — y = 4.

    i xi Умножение (Инициализация y = 1) Возведение в степень (Инициализация a = 17)
    0 0 a = 172 mod 21 =16
    1 1 y = 1 x 16 mod 21 =16 $$\to$$ a = 162 mod 21 = 4
    2 1 y = 16 x 4 mod 21 =1 $$\to$$ a = 42 mod 21 =16
    3 0 a = 162 mod 21 = 4
    4 1 y = 1 x 4 mod 21 = 4 $$\to$$

    Сложность. Алгоритм 13.1 использует максимально 2nb арифметических операций, в которых nb является длиной модуля в битах (nb = log2n). Сложность в битовых операциях алгоритма — O(nb) или полиномиальная сложность.

    Сложность разрядной операции быстрого показательного алгоритма — полиномиальная.

    Альтернативный алгоритм. Заметим, что алгоритм 13.1 проверяет значение битов в x справа налево (от самого младшего до самого старшего). Может быть написан другой алгоритм, чтобы использовать обратный порядок. Мы выбрали вышеупомянутый алгоритм, потому что операция возведения в квадрат полностью независима от операции умножения; они могут быть сделаны параллельно, чтобы увеличить скорость обработки. Альтернативные алгоритмы оставляем как упражнение.

    Логарифм

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

    Полный перебор

    Первое решение, которое могло бы прийти на ум, для решения x = loga y (mod n): мы можем написать алгоритм, который непрерывно вычисляет y = ax mod n, пока не находит заданное значение y. Алгоритм 13.2 показывает этот подход.

    $$\tt\parindent0pt
    
    Modular\_Logarithm (a, y, n\} 
    
    \{ 
    
    \ \ for (x = 1 to n — 1)         // k число бит в x
    
    \ \ \{ 
    
    \ \ \ \ if ($y \equiv  a^{x} \mod\ n$) return x
    
    \ \ \}  
    
    \ \ return failure
    
    \}	$$

    Алгоритм 13.2 явно очень неэффективен. Сложность разрядной операции — 0 (2n) или показательна.

    Дискретный логарифм

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

    Конечная мультипликативная группа. В криптографии мы часто используем мультипликативную конечную группу: $$G = \<{Z_{n*}}, \times \>$$, в которой применяемая операция является умножением. Множество Zn* содержит целые числа от 1 до n–1, которые являются взаимно простыми с n, нейтральный элемент — e = 1. Обратите внимание, что когда модуль группы — простое число, мы имеем $$G = \<{Z_{p*}}, \times \>$$. Эта группа — специальный случай группы первого типа, так что мы концентрируемся на этой группе.

    Порядок группы. В лекцииях 5-6 мы обсуждали порядок конечной группы |G| для того, чтобы определить число элементов в группе G. Было доказано, что в группе $$G = \<{Z_{n*}}, \times \>$$ порядок группы (число элементов) — число Эйлера $$\varphi (n)$$. Мы показали, как вычислить $$\varphi (n)$$, когда n может быть разложено на множители в виде простых чисел.

    Пример 13.8

    Найти порядок группы $$G = \<{Z_{21*}}, \times \>,$$ $$|G| = \varphi (21) = \varphi (3) \times \varphi (7) = 2 \times 6 = 12$$. В этой группе 12 элементов: 1, 2, 4, 5, 8, 10, 11, 13, 16, 17, 19 и 20. Все — взаимно простые с 21.

    Порядок элемента. В лекциях 5-6 мы также обсуждали порядок элемента — ord (a). В $$G = \<{Z_{n*}}, \times \>,$$ мы продолжаем определение. Порядок элемента a есть наименьшее целое число, такое, что $${a^i} \equiv e(\bmod n)$$. В этом случае нейтральный элемент e равен 1.

    Пример 13.9

    Найдите порядок всех элементов в $$G = \<{Z_{10*}}, \times \>$$.

    Решение

    Эта группа имеет только $$\varphi (10) = 4$$ элемента: 1, 3, 7, 9. Мы можем найти порядок каждого элемента методом "проб и ошибок". Однако, согласно результатам лекций 5-6, порядок элемента является делителем порядка группы (теорема Лагранжа). Целые числа, которые делят 4, — 1, 2 и 4. Это означает, что в каждом случае мы должны проверить только эти числа и найти порядок элемента,

    a. $${1^1} = 1\bmod \left( {10} \right) \to ord\left( {10} \right) = 1$$.

    b. $${3^1} = 3\bmod \left( {10} \right);{3^2} \equiv 9\bmod \left( {10} \right);{3^4} \equiv 1\bmod \left( {10} \right) \to ord\left( 3 \right) = 4$$.

    c. $${7^1} = 7\bmod \left( {10} \right);{7^2} \equiv 9\bmod \left( {10} \right);{7^4} \equiv 1\bmod \left( {10} \right) \to ord\left( 7 \right) = 4$$

    d. $${9^1} = 9\bmod \left( {10} \right);{9^2} \equiv 1\bmod \left( {10} \right) \to ord\left( 9 \right) = 2$$.

    Теорема Эйлера. Другая теорема, относящаяся к этому вопросу, — это теорема Эйлера, которая говорит, что если a является членом $$G = \<{Z_{n^*}}, \times \>$$, то $${a^{\varphi (n)}} = 1\bmod n$$ ;

    Эта теорема очень полезна, потому что показывает, что равенство Ai = 1 mod n сохраняется, если $$i = \varphi (n)$$. Заметим: это не отрицает, что равенство может выполняться и если $$i < \varphi (n)$$. Другими словами, это отношение показывает, что равенство выполняется по меньшей мере однажды.

    Пример 13.10

    Таблица 13.2 показывает результат ai = x (mod 8) для группы $$G = \<{Z_{8^*}}, \times \>$$. Обратите внимание, что $$\varphi (8) = 4$$. Это элементы — 1, 3, 5 и 7.

    Нахождение порядка элементов в примере 13.10
    i=1 i=2 i=3 i=4 i=5 i=6 i=7
    a=1 x:1x:1 x:1 x:1 x:1 x:1 x:1
    a=3 x:3 x:1x:3 x:1 x:3 x:1 x:3
    a=5 x:5 x:1x:5 x:1 x:5 x:1 x:5
    a=7 x:7 x:1x:7 x:1 x:7 x:1 x:7

    Таблица 13.2 показывает некоторые моменты вычислений. Первый: затемненная область показывает результат применения теоремы Эйлера. Когда $$i=\varphi (8) = 4$$, результат равен x = 1 для каждого a. Второй момент: когда таблица показывает, что значение 1 может быть получено для многих значений i — в первую очередь, значение i, равное порядку элемента (обведено в таблице жирной линией). Порядок элементов: ord (1) = 1, ord (3) = 2, ord (5) = 2 и ord (7) = 2.

    Первообразные корни. Очень интересное понятие в мультипликативной группе — группы первообразного корня, которые используются в криптографической системе El Gamal (эль Гамаля) в лекциях 14-15. В группе $$G = \<{Z_{n^*}}, \times \>$$, когда порядок элемента равен $$\varphi (n)$$, этот элемент называется первообразным корнем группы.

    Пример 13.11

    Таблица 13.2 показывает, что там нет первообразных корней $$G = \<{Z_{8^*}}, \times \>$$, потому что ни один элемент не имеет порядок, равный $$\varphi (8) = 4$$. Порядок всех элементов — меньше, чем 4.

    Пример 13.12

    Таблица 13.3 показывает результат $${a^i} \equiv x\left( {\bmod {\text{ }}7} \right)$$ для группы $$G = \<{Z_{7^*}}, \times \>$$. В этой группе $$\varphi (7) = 6$$.

    Пример 13.12
    i=1 i=2 i=3 i=4 i=5 i=6
    a=1 x:1x:1 x:1 x:1 x:1 x:1
    a=2 x:2 x:4 x:1x:2 x:4 x:1
    a=3 x:3 x:2 x:6 x:4 x:5 x:1
    a=4 x:4 x:2 x:1x:4 x:2 x:1
    a=5 x:5 x:4 x:6 x:2 x:3 x:1
    a=6 x:6 x:1 x:6 x:1x:6 x:1

    Порядок элементов – $$ord\left( 1 \right) = 1$$, $$ord\left( 2 \right) = 3$$, $$ord\left( 3 \right) = \underline 6 $$, $$ord\left( 4 \right) = 3$$, $$ord\left( 5 \right) = \underline 6 $$ и $$ord\left( 6 \right) = 1$$. Таблица 13.3 показывает, что только два элемента, 3 и 5, имеют порядок в $$i = \varphi (n) = 6$$. Поэтому эта группа имеет только два примитивных корня: 3 и 5.

    Было доказано, что группа $$G = \<{Z_{n^*}}, \times \>$$ имеет примитивный корень, только если n = 2, 4, pt, или 2pt, в которой p является нечетным простым числом (не 2 ) и t — целое число.

    .

    Пример 13.13

    Для какого значения n группа $$G = \<{Z_{n^*}}, \times \>$$ имеет примитивные корни: 17, 20, 38 и 50?

    Решение

    a. $$G = \<{Z_{17^*}}, \times \>$$ имеет примитивные корни, потому что 17 — простое число ( pt, где t равно 1 ).

    b. $$G = \<{Z_{20^*}}, \times \>$$ не имеет никаких примитивных корней.

    c. $$G = \<{Z_{38^*}}, \times \>$$ имеет первообразные корни, потому что $$38 = 2 \times 19$$ и 19 — простое число.

    d. $$G = \<{Z_{50^*}}, \times \>$$ имеет первообразные корни, потому что $$50 = 2 \times {5^2}$$, а 5 — простое число.

    Если группа имеет примитивный корень, то обычно она имеет несколько таких корней. Число примитивных корней может быть вычислено как — $$\varphi (\varphi (n))$$. Например, число примитивных корней $$G = \<{Z_{17^*}}, \times \>$$ — это — $$\varphi (\varphi (n)) = \varphi (16) = 8$$. Обращаем внимание, что нужно сначала проверить, имеет ли группа какой-либо примитивный корень, прежде чем находить число корней.

    Если группа G = < Z n* , x > имеет хотя бы один примитивный корень, то число примитивных корней — $$\phi$$ ( $$\phi$$ (n))

    Рассмотрим три вопроса:

    1. Если дан элемент a и группа $$G = \<{Z_{n^*}}, \times \>$$, как можно определить, является ли a примитивным корнем G? Это не такая легкая задача.

    а. Мы должны найти $$\varphi (n)$$, — эта задача по сложности подобна задаче разложения на множители числа n.

    б. Мы должны найти $$ord(a) = \varphi (n)$$.

    2. Если дана группа $$G = \<{Z_{n^*}}, \times \>$$, как найти все примитивные корни $$\varphi $$? Эта задача более трудная, чем первая задача, потому что мы должны повторить вычисления по п.1.б для всей группы.

    3. Если дана группа $$G = \<{Z_{n^*}}, \times \>$$, то как выбирать примитивный корень G? В криптографии мы должны найти, по крайней мере, один примитивный корень в группе. Однако в этом случае значение n выбирается пользователем, и пользователь знает $$\varphi (n)$$. Пользователь пробует последовательно несколько элементов, пока не находит первый из них.

    Циклическая группа. Циклические группы уже обсуждались в лекциях 5-6. Обратите внимание на то, что, если группа $$G = \<{Z_{n^*}}, \times \>$$ имеет примитивные корни, то они циклически повторяются. Каждый примитивный корень — генератор и может использоваться для создания целого набора. Другими словами, если g — примитивный корень в группе, мы можем генерировать набор Zn* как

    $${Z_n}^* = \{ {g^1},{g^2},{g^3}, \ldots ,{g^{\varphi (n)}}\}$$

    Пример 13.14

    Группа $$G = \<{Z_{10^*}}, \times \>$$ имеет два примитивных корня, потому что $$\varphi (10) = 4$$ и $$\varphi (\varphi (10)) = 2$$. Можно найти примитивные корни - это 3 и 7. Ниже показано, как можно создать целый набор Z10*, использующий каждый примитивный корень.

    g = 3 -> g1 mod 10 = 3   g2 mod 10 = 9   g3 mod 10 = 7   g4 mod 10 = 1
    g = 7 -> g1 mod 10 = 7   g2 mod 10 = 9   g3 mod 10 = 3   g4 mod 10 = 1

    Обратите внимание, что группа $$G = \<{Z_{p^*}}, \times \>$$ всегда циклическая, потому что p — простое.

    Группа G = < Zn*, x > является циклической группой, если она имеет примитивные корни.
    Группа G = < Zp*, x > всегда является циклической.

    Идея дискретного логарифма. Группа $$G = \<{Z_p}^*, \times \>$$ имеет несколько интересных свойств.

  • Её элементы включают все целые числа от 1 до p – 1.
  • Она всегда имеет примитивные корни.
  • Она всегда является циклической. Элементы могут быть созданы с использованием gx, где x — целое число от 1 до $$\varphi (n) = p - 1$$.
  • Примитивные корни можно представлять себе как основание логарифма. Если группа имеет k примитивных корней, то вычисления могут быть сделаны для k различных оснований. Данный x = logg y для любого элемента y в данном множестве, но есть другой элемент x, который является логарифмом y по основанию g. Этот тип логарифма называют дискретным логарифмом. Дискретный логарифм в литературе определяется несколькими различными символами, но мы будем использовать обозначение Lg, чтобы показать, что основание — g (сравнение по модулю).
  • Решение модульного логарифма с использованием дискретных логарифмов

    Теперь рассмотрим, как решаются задачи типа y = ax (mod n), т. е. дано y, а мы должны найти x.

    Табулирование дискретных логарифмов. Один из способов решения вышеупомянутой проблемы — использовать таблицу для каждого Zp* и различных оснований. Этот тип таблицы может быть предварительно рассчитан и сохранен. Например, таблица 13.4 показывает значения дискретного логарифма для Z7*. Мы знаем, что мы имеем два примитивных корня или основания в данном множестве.

    Дискретный логарифм для G = <Zp*,х>
    y 1 2 3 4 5 6
    x = L3y 6 2 1 4 5 3
    x = L5y 6 4 5 2 1 3

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

    Пример 13.15

    Найдите x в каждом из следующих случаев:

    a. $$4 \equiv {3^x}\left( {\bmod {\text{ }}7} \right)$$

    b. $$6 \equiv {5^x}\left( {\bmod {\text{ }}7} \right)$$

    Решение

    Мы можем легко использовать таблицу 13.4 дискретного логарифма.

    a. $$4 \equiv {3^x}\left( {\bmod {\text{ }}7} \right) \to {L_3}4\left( {\bmod {\text{ }}7} \right) = 4{\text{ }}\bmod {\text{ }}7$$

    b. $$6 \equiv {5^x}\left( {\bmod {\text{ }}7} \right) \to {L_5}6\left( {\bmod {\text{ }}7} \right) = 3{\text{ }}\bmod {\text{ }}7$$

    Использование свойств дискретных логарифмов. Чтобы показать, что дискретные логарифмы ведут себя точно так же, как традиционные логарифмы, в таблице 13.5 приводится несколько свойств обоих типов логарифмов. Обратите внимание, что основание модуля — $$\varphi (n)$$ вместо n.

    Сравнение традиционных и дискретных логарифмов
    Традиционные логарифмы Дискретные логарифмы
    loga 1 = 0 Lg $$\equiv$$ 0(mod $$\phi$$ (n))
    loga (x x y) = logax + logay Lg(x x y) $$\equiv$$ Lgx + Lgy
    logaxk = k x logax Lgx $$\equiv$$ k x Lgx(mod $$\phi$$ (n))

    Использование алгоритмов, основанных на дискретных логарифмах. Таблицы и свойства дискретных логарифмов не могут быть использованы для решения уравнения y = a x (mod n), когда n является очень большим. Для решения этой проблемы были разработаны несколько алгоритмов, в которых используется основная идея дискретных логарифмов. Хотя все эти алгоритмы более эффективны, чем алгоритмы полного перебора, которые мы упоминали в начале этого раздела, но ни один из них не имеет полиномиальную сложность. Большинство этих алгоритмов имеет такой же уровень сложности, как проблема разложения на множители.

    Проблема дискретного логарифма имеет такую же сложность, как проблема разложения на множители.

    13.3. Рекомендованная литература

    Нижеследующие книги и сайты дают более детальную информацию о предметах, рассмотренных в этой лекции. Пункты, приведенные в квадратных скобках, содержатся в списке в конце книги.

    Книги

    [Ros06] [Cou99], [BW00] и [Bla03] — для тем, которые обсуждаются в этой лекции.

    Сайты

    Нижеследующие сайты дают больше информации о темах, обсужденных в этой лекции.

  • http://en.wikipedia.org/wiki/Prime_number
  • http://primes.utm.edu/mersenne/
  • http://en.wikipedia.org/wiki/Primality__test
  • www..cl.cam.ac.uk/~jehl004/research/talks/miller-talk.pdf
  • http://mathworld.wolfram.com/TotientFunction.html
  • http: // en.wikipedia.org/wiki/Proofs_of_Fermat's_little_theorem
  • faculty.cs.tamu.edu/klappi/629/analytic.pdf
  • 13.4. Итоги

  • Положительные целые числа могут быть разделены на три группы: число 1, простые числа и составные объекты. Положительное целое число — простое число, такое и только такое, если оно точно делится без остатка на два различных целых числа, а именно на 1 и непосредственно само на себя. Составной объект — положительное целое число по крайней мере с двумя делителями.
  • Эйлеровская phi -функция $$\varphi (n)$$, которую иногда называют функцией-тотиентом Эйлера, играет очень важную роль в криптографии. Функция указывает число целых чисел, которые меньше чем n и являются взаимно простыми с n.
  • В таблице 13.6 показаны малая теорема Ферма и теорема Эйлера, которые рассмотрены в этой лекции.
    Малая теорема Ферма и теорема Эйлера
    Ферма Первая версия : Если НОД(a,p) = 1, то ap-1 $$\equiv$$ 1(mod p)
    Вторая версия: ap $$\equiv$$ a(mod p)
    Эйлер Первая версия: Если НОД(a,n) = 1, то a $$\phi$$ (n) $$\equiv$$ 1 (mod p)
    Вторая версия: Если n= p x q и a < n, то a>kx $$\phi$$ (n)+1 $$\equiv$$ a(mod n)
  • Чтобы получить большое простое число, мы выбираем большое случайное число и проверяем его — убеждаемся, что оно простое. Алгоритмы, которые решают эту проблему, могут быть разделены на две обширные категории: детерминированные алгоритмы и вероятностные алгоритмы. Некоторые вероятностные алгоритмы для испытания простоты чисел – это испытание Ферма, испытание квадратного корня и испытание Миллера-Рабина. Некоторые детерминированные алгоритмы — испытание на делимости и AKS-алгоритм.
  • Согласно основной теореме арифметики, любое положительное целое число, большее, чем 1, может быть разложено на множители в виде простых чисел. Мы рассмотрели несколько методов разложения на множители, включая проверку делением — Ферма, метод Полларда p – 1, метод РО ( $$\rho $$ ) Полларда, квадратичное решето и решето поля чисел.
  • Китайская теорема об остатках (Chinese Reminder Theorem — CRT) используется, чтобы решить систему уравнений для вычетов с одной переменной, но с различными взаимно простыми модулями.
  • Мы рассмотрели решение квадратичного сравнения по модулю в виде простого числа и квадратичного сравнения по составному модулю. Однако, если модуль является большим, решение квадратичного сравнения по сложности совпадает с разложением модуля на множители.
  • В криптографии применяется операция по модулю — возведение в степень. Для быстрого возведения в степень можно использовать метод "возведения в квадрат и умножения". Криптография также включает модульные логарифмы. Если возведение в степень применяется, чтобы зашифровать или расшифровывать информацию, то противник может использовать логарифмы для организации "атаки". Сложность операции, обратной возведению в степень, велика. Хотя возведение в степень может быть сделано с помощью быстрого алгоритма, применение модульного логарифма для больших значений модуля имеет ту же сложность, что и проблема разложения на множители.
  • 13.5. Набор для практики

    Обзорные вопросы

  • Объясните разницу между простым числом и составным целым числом.
  • Определите взаимно простые числа и их свойства.
  • Определите следующие функции и их приложения:
  • $$\pi (n)$$ функция
  • Функция (тотиент) Эйлера
  • Объясните "решето Эратосфена" и его приложения.
  • Определите малую теорему Ферма и объяснить ее приложения.
  • Определите теорему Эйлера и объясните ее приложения.
  • Что такое простые числа Мерсенны? Что такое простые числа Ферма?
  • Объясните разницу между детерминированными и вероятностными алгоритмами для определения простых чисел.
  • Перечислите некоторые алгоритмы для разложения на множители простых чисел.
  • Определите Китайскую теорему об остатках и ее приложения.
  • Определите квадратичное сравнение и важность вычетов (QRs) и невычетов (QNRs) в решении квадратных уравнений.
  • Определите дискретные логарифмы и объяснить их важность в решении логарифмических уравнений.
  • Упражнения

  • Используя аппроксимацию, найдите:
  • число простых чисел между 100 000 и 200 000.
  • число составных целых чисел между 100 000 и 200 000
  • отношение простых чисел к составным в вышеупомянутом диапазоне и сравните это с тем же самым между 1 – 10.
  • Найти наибольший простой сомножитель следующих составных целых чисел: 100, 1000, 10 000, 100 000 и 1 000 000. Также найти наибольший простой сомножитель 101, 1001, 10 001, 100 001 и 1 000 01.
  • Покажите, что каждое простое число может быть представлено в форме либо 4k + 1, либо 4k + 3, где k — положительное целое число.
  • Найдите некоторые простые числа в форме 5k + 1, 5k + 2, 5 k + 3 и 5k + 4, где k: является положительным целым числом.
  • Найдите значение $$\varphi (29)$$, $$\varphi (32)$$, $$\varphi (80) $$, $$\varphi (100)$$, $$\varphi (101)$$
  • Покажите, что 224 – 1 и 216 – 1 – составные числа. Подсказка: используйте выражение (a2 – b2).
  • Есть предположение, что каждое целое число, большее, чем 2, может быть представлено как сумма двух простых чисел. Проверьте это предположение для 10, 24, 28 и 100.
  • Есть предположение, что есть много простых чисел в форме n2 + 1. Найдите некоторые из них.
  • Найдите результаты после использования малой теоремы Ферма:
  • 515 mod 13
  • 1518 mod 17
  • 45617 mod 17
  • 145 mod 101
  • Найдите, используя Малую теорему Ферма, результаты выражений, приведенных ниже:
  • 5-1 mod 13
  • 15-1 mod 17
  • 27-l mod 41
  • 70-1 mod 101
  • Обратите внимание, что все модули — простые числа.

  • Найдите, используя теорему Эйлера, результаты выражений, приведенных ниже:
  • 12-1 mod 77
  • 16-1 mod 323
  • 20-1 mod 403
  • 44-1 mod 667
  • Обратите внимание, что $$77 = 7 \times 11$$, $$323 = 17 \times 19$$, $$403 = 31 \times 13$$ и $$667 = 23 \times 29$$.

  • Определите, являются ли следующие числа Мерсенны простыми числами: М23, М29 и М31. Подсказка: любой делитель числа Мерсенны имеет форму 2kp + 1.
  • Приведите некоторые примеры, чтобы показать, что если 2n – 1 — простое число, то n — простое число. Этот факт может использоваться для проверки на простоту? Объясните, как.
  • Определите, сколько из следующих целых чисел пройдут испытание Ферма на простоту чисел: 100, 110, 130, 150, 200, 250, 271, 341, 561. Используйте основание 2.
  • Определите, сколько из следующих целых чисел пройдут испытание Миллера-Рабина на простоту чисел: 100, 109, 201, 271, 341, 349. Используйте основание 2.
  • Используйте рекомендованное испытание, чтобы определить, является ли любое из следующих целых чисел простым числом: 271, 3149, 9673.
  • Используйте a = 2, x = 3 и несколько простых чисел, чтобы показать, что если p — простое число, то выполняется следующее сравнение: (x – a) p = (xp – a) (mod p).
  • Говорят, что n -ное простое число может быть приближенно вычислено как pn = n ln n. Проверьте это на нескольких простых числах.
  • Найдите значение x для следующих наборов сравнений, используя китайскую теорему об остатках.
  • $$x \equiv 2\bmod {\text{ }}7$$, и $$x \equiv 3\bmod {\text{ }}9$$
  • $$x \equiv 4\bmod {\text{ }}5$$, и $$x \equiv 10\bmod {\text{ }}11$$
  • $$x \equiv 7\bmod {\text{ }}13$$, и $$x \equiv 11\bmod {\text{ }}12$$
  • Найдите весь QRs и QNRs в Z13*, Z17* и Z23*.
  • Используя квадратичные вычеты, решите следующие сравнения:
  • $${x^2} \equiv 4\bmod {\text{ }}7$$
  • $${x^2} \equiv 5\bmod {\text{ }}11$$
  • $${x^2} \equiv 7\bmod {\text{ }}13$$
  • $${x^2} \equiv 12\bmod {\text{ }}17$$
  • Используя квадратичные вычеты, решите следующие сравнения:
  • $${x^2} \equiv 4\bmod {\text{ }}14$$
  • $${x^2} \equiv 5\bmod {\text{ }}10$$
  • $${x^2} \equiv 7\bmod {\text{ }}33$$
  • $${x^2} \equiv 12\bmod {\text{ }}34$$
  • Найдите результаты приведенных ниже выражений, используя метод "возведения в квадрат и умножения".
  • 2124 mod 8
  • 32023 mod 461
  • 173641 mod 2134
  • 200135 mod 2000
  • Для группы $$G = \<{Z_{19^*}}, \times \>$$:
  • Найдите порядок группы
  • Найдите порядок каждого элемента в группе
  • Найдите число первообразных корней в группе
  • Найдите первообразные корни в группе
  • Покажите, что группа является циклической
  • Составьте таблицу дискретных логарифмов
  • Используя свойства дискретных логарифмов, покажите, как решить сравнения:
  • $${x^5} \equiv 11\bmod {\text{ }}17$$
  • $$2{x^{11}} \equiv 22\bmod {\text{ }}19$$
  • $$5{x^{12}} + 6x \equiv 8\bmod {\text{ }}23$$
  • Пусть мы имеем компьютер, выполняющий операции со скоростью 1 миллион бит в секунду. Вы хотите затратить только 1 час на испытание простоты чисел. Какое наибольшее число вы можете проверить, используя следующие методы, проверяющие простоту чисел?
  • теория делимости
  • AKS-алгоритм
  • Ферма
  • извлечением квадратного корня
  • Миллера-Рабина
  • Пусть мы имеем компьютер, выполняющий операции со скоростью 1 миллион бит в секунду. Вы хотите потратить только 1 час на разложение составного целого числа. Какое наибольшее число вы можете разложить на множители, используя следующие методы разложения на множители?
  • проверка делением
  • Ферма
  • Полларда (РО)
  • квадратичное решето
  • решето поля чисел
  • Метод "возведения в квадрат и умножения" — быстрый алгоритм возведения в степень — позволяет нам останавливать программу, если значение основания становится равным 1. Измените алгоритм 13.1, чтобы показать это.
  • Перепишите алгоритм 13.1, чтобы проверить биты в порядке от самого старшего к самому младшему.
  • Метод "возведения в квадрат и умножения" — быстрый алгоритм возведения в степень — может также быть спроектирован для проверки, является ли число четным или нечетным, вместо того чтобы проверять его разряды. Перепишите алгоритм 13.1, чтобы показать это.
  • Напишите алгоритм в псевдокоде для испытания простоты чисел по методу Ферма.
  • Напишите алгоритм в псевдокоде для испытания простоты чисел методом извлечения квадратного корня.
  • Напишите алгоритм в псевдокоде для китайской теоремы об остатках.
  • Напишите алгоритм в псевдокоде, чтобы найти вычет (QR) и невычет (QNR) для любого Zp*.
  • Напишите алгоритм в псевдокоде для нахождения первообразного корня для множества Zp*.
  • Напишите алгоритм в псевдокоде, чтобы найти все первообразные корни для множества Zp*.
  • Напишите алгоритм, чтобы найти и хранить дискретные логарифмы для множества Zp*.
  • Вернуться к учебному плану