- •«Разработка криптосистемы на основе шифра цезаря»
- •Введение
- •Описание шифра цезаря
- •2.1 Схема алгоритма
- •2.2 Начальная перестановка
- •2.3 Преобразования ключа
- •Задание
- •Варианты
- •«Разработка криптосистемы на основе симметричного алгоритма гост 28147-89»
- •Логика построения шифра и структура ключевой информации госТа.
- •. Основной шаг криптопреобразования.
- •Базовые циклы криптографических преобразований.
- •Задание
- •Варианты
- •Введение
- •Задание к лабораторной работе
- •Содержание отчета
- •Литература
Введение
Криптосистемы с открытым ключом позволяют обмениваться секретными сообщениями по открытому каналу, не договариваясь заранее о ключе шифра; даже перехватив весь разговор от начала до конца, враг (или, как говорят, «противник») не узнает секретного сообщения. Кроме того, эти же методы позволяют добавлять к сообщению «цифровую подпись», удостоверяющую, что сообщение не фальсифицировано врагами. Проверить аутентичность подписи легко, а подделать сё крайне трудно. Понятно, что такие методы находят широкое применение в банках, при подписывании контрактов, при денежных переводах.
Криптосистема RSA
Чтобы построить пару ключей для криптосистемы RSA (RSA cryptosystem), надо сделать следующее.
Взять два больших простых числа р и q (скажем, около 100 десятичных цифр в каждом).
Вычислить п = pq.
Взять небольшое нечётное число е, взаимно простое с
(n).
(Из соотношения следует, что
(n)
= (р - 1)(q
- 1).)Вычислить d = е-1 mod (n). (d существует и определено однозначно по модулю (n).)
Составить пару Р = (е,п) — открытый RSA-ключ (RSA public key).
Составить пару S= (d,n)— секретный RSA-ключ (RSA secret key).
Множеством
D
всех возможных сообщений для этой
криптосистемы является
Открытому ключу Р=
(е,
п)
соответствует преобразование
Р(М) = Ме mod n
а секретному ключу S = (d, п) — преобразование
S(C)= Cе mod n
Как уже говорилось, эти преобразования можно использовать и для шифрования, и для электронных подписей.
Проверка чисел на простоту
В этом разделе мы обсуждаем вопрос о том, как искать большие простые числа.
Распределение простых чисел
Как найти большое простое число? Естественный подход таков: взять большое случайное число и посмотреть, не окажется ли оно простым. Если нет, попробовать другое случайное число и так далее. Этот способ пригоден, лишь если простые числа не слишком редки — к счастью, это действительно так, как показывает теорема о распределении простых чисел, доказанная в конце прошлого века. Вот её формулировка.
Определим
функцию распределения простых чисел
(prime
distribution
function)
,
положив
(п)
равным количеству простых чисел, не
превосходящих п. Например, на отрезке
от 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;
числа
р1,р2,...,р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)
if Modular-Exponentiation(2, n - 1,n) 1 (mod n)
then return COMPOSITE
Заведомо.else return PRIME Возможно.
Эта
процедура может совершать ошибки, но
только в одну сторону. Если она сообщает,
что число п составное, то это действительно
так, но она может принять составное
число за простое (если оно является
псевдопростым по основанию 2).
Как часто такое происходит? Оказывается,
не так уж часто — среди чисел до
10000
есть только
22
числа, для которых процедура
Pseudoprime
даёт
неверный ответ (первые четыре из них —
341, 561, 645 и 1105). Можно показать, что доля
таких «плохих» чисел среди
-значных
чисел стремится к 0 при
.
Используя некоторые оценки, можно
показать, что доля составных чисел среди
50-разрядных псевдопростых по основанию
2 чисел не превосходит 10-6,
а среди 100-разрядных псевдопростых
чисел—10-13.
