Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задания для лабораторных занятий.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
279.03 Кб
Скачать

Введение

Криптосистемы с открытым ключом позволяют обмениваться секретными сообщениями по открытому каналу, не договариваясь заранее о ключе шифра; даже перехватив весь разговор от начала до конца, враг (или, как говорят, «противник») не узнает секретного сообщения. Кроме того, эти же методы позволяют добавлять к сообщению «цифровую подпись», удостоверяющую, что сообщение не фальсифицировано врагами. Проверить аутентичность подписи легко, а подделать сё крайне трудно. Понятно, что такие методы находят широкое применение в банках, при подписывании контрактов, при денежных переводах.

Криптосистема RSA

Чтобы построить пару ключей для криптосистемы RSA (RSA cryptosystem), надо сделать следующее.

  1. Взять два больших простых числа р и q (скажем, около 100 десятичных цифр в каждом).

  2. Вычислить п = pq.

  3. Взять небольшое нечётное число е, взаимно простое с (n). (Из соотношения следует, что (n) = (р - 1)(q - 1).)

  4. Вычислить d = е-1 mod (n). (d существует и определено однозначно по модулю (n).)

  5. Составить пару Р = (е,п) — открытый RSA-ключ (RSA public key).

  6. Составить пару S= (d,n)— секретный RSA-ключ (RSA secret key).

Множеством D всех возможных сообщений для этой криптосистемы явля­ется Открытому ключу Р= (е, п) соответствует преобразование

Р(М) = Ме mod n

а секретному ключу S = (d, п) — преобразование

S(C)= Cе mod n

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

Проверка чисел на простоту

В этом разделе мы обсуждаем вопрос о том, как искать большие простые числа.

Распределение простых чисел

Как найти большое простое число? Естественный подход таков: взять боль­шое случайное число и посмотреть, не окажется ли оно простым. Если нет, попробовать другое случайное число и так далее. Этот способ пригоден, лишь если простые числа не слишком редки — к счастью, это действительно так, как показывает теорема о распределении простых чисел, доказанная в конце прошлого века. Вот её формулировка.

Определим функцию распределения простых чисел (prime distribution func­tion) , положив (п) равным количеству простых чисел, не превосходящих п. Например, на отрезке от 1 до 10 есть 4 простых числа 2, 3. 5 и 7, поэтому (10) = 4.

Асимптотический закон распределения простых чисел.

Выражение n/ln n даёт неплохое приближение к (п) даже при небольших значениях п. Уже при п= 109 (небольшое число с точки зрения специалистов по теории чисел) погрешность приближения не превосходит 6% ( (109) = 50 847 534, 109/ln 109 48 254 942).

Асимптотический закон позволяет оценить вероятность, с которой целое число, наугад выбранное из отрезка от 1 до п, является простым - это примерно 1/ln n. Тем самым для отыскания простого числа от 1 до п нужно проверить на простоту порядка ln n случайно выбранных чисел. Например, чтобы найти простое число из 100 десятичных знаков, надо перебрать порядка ln 10100 230 случайных чисел от 1 до 10100. (Эта оценка по очевидным причинам может быть уменьшена вдвое: проверять на простоту стоит только нечётные числа. Заметим также, что число десятичных знаков в наугад взятом числе от 1 до 10100 с большой вероятностью близко к 100—около 90% всех чисел в этом диапазоне имеют 100 знаков, около 99%--99 или более знаков, около 99,9% — 98 или более знаков и т.д.)

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

п =

(r 1; числа р12,...,рr— различные простые делители n) из единственного простого числа (r = 1, е1 = 1).

Самый простой способ проверки — перебор делителей (trial division). Бу­дем пытаться разделить п на 2,3,..., (чётные числа, большие 2, можно пропускать). Если п не делится ни на одно из этих чисел, то оно простое (если п разлагается в произведение двух или более множителей, то один из множителей не превосходит ). Но дело это долгое — уже число делений есть ( ), и время работы экспоненциально зависит от длины записи числа п (напомним, что двоичное представление п занимает = [log(n + 1)] битов, так что = ( )). Таким образом, такой подход применим, лишь есть число п мало или имеет небольшой делитель.

Если при переборе делителей мы обнаруживаем, что число п составное, то одновременно находится и делитель числа п. Для других способов проверки простоты это не так— можно убедиться, что число составное, так и не указав никакого его делителя. Это не удивительно, так как задача разложения числа на множители, по-видимому, гораздо сложнее задачи проверки простоты. К задаче разложения на множители мы вернёмся в следующем разделе.

МОДУЛЬ 4. КРИПТОСИСТЕМЫ С ОТКРЫТЫМ КЛЮЧОМ.

Лабораторная работа № 5

«Разработка криптосистемы на основе ассиметричного алгоритма RSA открытым ключом» ЧАСть 2.

Псевдопростые числа

Сейчас мы опишем «почти правильный» алгоритм проверки числа на просто­ту, приемлемый для многих практических приложений. (Небольшое усложнение этого алгоритма, делающее его совсем правильным, будет описано дальше.)

Обозначим через множество всех ненулевых вычетов по модулю п:

Если число n, простое, то =

Назовем число п псевдопростым по основанию a (base-a pseudoprime), если выполнено утверждение малой теоремы Ферма:

аn-1 1 (mod п). (1.42)

Любое простое число п является пссвдопростым по любому основанию a . Поэтому если нам удалось найти основание а., по которому п не является псев­допростым, то мы можем быть уверены, что п— составное. Оказывается, что во многих случаях достаточно проверить основание а =2.

PseudoPRIME(n)

  1. if Modular-Exponentiation(2, n - 1,n) 1 (mod n)

  2. then return COMPOSITE Заведомо.

  3. else return PRIME Возможно.

Эта процедура может совершать ошибки, но только в одну сторону. Если она сообщает, что число п составное, то это действительно так, но она может принять составное число за простое (если оно является псевдопростым по осно­ванию 2). Как часто такое происходит? Оказывается, не так уж часто — среди чисел до 10000 есть только 22 числа, для которых процедура Pseudoprime даёт неверный ответ (первые четыре из них — 341, 561, 645 и 1105). Можно показать, что доля таких «плохих» чисел среди -значных чисел стремится к 0 при . Используя некоторые оценки, можно показать, что доля составных чисел среди 50-разрядных псевдопростых по основанию 2 чисел не превосходит 10-6, а среди 100-разрядных псевдопростых чисел—10-13.