Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 Мат Базис КП.pptx
Скачиваний:
9
Добавлен:
25.06.2024
Размер:
1.48 Mб
Скачать

1. Конструирование простых чисел

Доказуемо простые числа большего размера на основе простых чисел меньшего размера можно строить, используя теорему Диемитко.

Теорема Диемитко.

Пусть n=qR+1, где q – простое число, R – четное, R<4(q+1). Если найдется a<n:

1) an—1≡1(mod n);

 

n 1

2)

a q 1(mod n ) , то n – простое число.

Итак, если имеем простое число q, то, перебирая четные числа R,

строим числа n=qR+1 и испытываем их на простоту согласно теореме Диемитко, пока не получим простое число. По полученному числу можно построить еще одно простое число и т.д.

Пример. q=5, выберем R<4*6=24. Пусть R=14, тогда n=5*14+1=71.

Проверяем условия: пусть а=2, тогда 270 mod 71 1 и

270 / 5 214 mod 71 54 1

Условия выполняются n=71 –простое число,

 

2. Генерирование случайных простых чисел

. Обычно эта задача решается в два этапа:

1)генерирование случайного или псевдослучайного (если число не является секретным ключом) числа, которое по размерности удовлетворяет предъявленным требованиям;

2)проверка, является ли выбранное нечетное число простым. Если является, то оно принимается. Если же это число не является простым, тогда нужно повторять эти этапы до появления успешного результата.

Возникает вопрос: сколько потребуется сделать попыток (в среднем) для генерирования простого числа заданной размерности?

Ответом на данный вопрос является следующая теорема. Теорема [5]. Пусть П(n) – число простых чисел, которые n, тогда

lim

n

1

 

n n / ln n

 

(n) n ln n

s

Количество простых чисел ограничено сверху с снизу

Пример: n=1 000 000 7238378543 Фактически = 78449

Из этой теоремы можно получить аппроксимацию доли нечетных l-разрядных простых чисел в виде 2 , и найти среднее число попыток для генерирования l-разрядногоl ln 10 простого числа.

Заметим, что количество в точности l-разрядных нечетных чисел

равно

. Тогда

 

 

 

 

(10l 10l 1 ) / 2

 

 

 

 

доля простых чисел

 

 

 

 

 

(10l ) (10l 1 )

10l

/ ln10l 10l 1 / ln10l 1

 

2(9l 10)

2

(10l 10l 1 ) / 2

 

(10l 10l 1 ) / 2

 

 

 

 

9l(l 10) ln10

l ln10

Пример 1. Пусть l = 100, тогда

s

l ln 10

s l ln 10

100 ln 10

115

 

2

2

2

 

Важнейшие тесты по проверке простоты чисел

Все тесты делятся на детерминированные и вероятностные. Детерминированные тесты дают определенный ответ, является ли данное число простым или составным. Случайные (вероятностные) тесты дают такой же ответ, но с некоторой вероятностью (обычно близкой к 1) того, что он будет правильным.

До недавнего времени (до 2002 г.) не было известно ни одного детерминированного алгоритма с полиномиальной сложностью. В 2002 г. три индийских математика нашли такой метод [6]. Его сложность оказывается равной O((log n)12 ), хотя для специальных чисел вида 2p +1 сложность будет значительно меньше, а именно: O((log n)6 ). Ввиду значительной сложности этого алгоритма предпочтение, однако, отдается вероятностным алгоритмам, удовлетворяющим следующему условию.

Если n простое, то оно всегда проходит тест (т. е. то, что оно простое, определяется однозначно), если же оно составное, то может случиться, что оно пройдет тест, однако вероятность такого события может быть сделана сколь угодно малой.

Рассмотрим далее два важнейших примера подобных алгоритмов тестирования чисел на простоту.

Тест Ферма

Вспомним малую теорему Ферма, которая гласит, что если n простое число и n не делит a, то a n-1 = 1 mod n. Поэтому необходимо выполнить следующие шаги:

1.Сгенерировать тестируемое число n и выбрать параметр «секретности» t.

2.Сгенерировать случайное число a1 : 2 a1 . n 1

3.Вычислить r = a1n-1 mod n.

4.Если r 1 , тогда n – составное число.

Если r = 1, то перейти к шагу 2 и повторить все то же самое с числом a2 и так далее, вплоть до повторения t шагов. При получении

a1n-1 =1 mod n, a2n-1 =1 mod n, …, arn-1 =1 mod n, считать n простым числом.

Данный тест может привести к ошибке, когда на всех шагах это условие выполняется, но число n тем не менее является составным.

Пример 2. Если n = 341, то легко проверить, что 2340 mod 341 = 1, то есть оно проходит условие т. Ферма.

Но 3340 mod 341 = 56. Действительно, n = 11∙ 31 .

Поэтому проверку нужно проводить при нескольких значениях а.

Случай, когда для любых чисел

a1 , a2

, , at

 

составное число n проходит тест, является

особым. Такие числа n называются числами Кармайкла при условии, что gcd (a, n) = 1. Наименьшее число Кармайкла – это число n = 561 = 3∙ 11∙ 17 . Числа Кармайкла встречаются, однако, довольно редко.

Всего имеется 2163 числа Кармайкла в диапазоне 1 до 25 109, а в диапазоне 1 до 1 105 всего 16 таких чисел: 561,1105,1729….75361. В тесте Ферма эти числа не различимы.

Утверждение 5. При использовании теста Ферма, если число n не является числом

Кармайкла, вероятность ошибки тестирования будет равна , где t – число проверок.

2 t

Таким образом, выбирая параметр «секретности» t достаточно большим, можно обеспечить высокую надежность тестирования простых чисел.

Тест Миллера–Рабина.

Пусть заданы тестируемое нечетное число n и параметр «секретности» t. Данный тест базируется на следующем утверждении, доказываемом в теории чисел [2, 3].

Утверждение 6. Пусть n нечетное простое число и пусть для него справедливо представление: n – 1 = 2s ∙ r , где s, r – числа, причем r –

нечетное2 j

.rПусть a – такое, что НОД(a, n) = 1, тогда: ar = 1 mod n или

a

1mod n

0 j s 1

 

, где

 

Тест Миллера–Рабина представляет комбинацию двух тестов:

проверки квадратным корнем и теста Ферма

Соседние файлы в предмете Криптографические протоколы