русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Теорема Эйлера


Дата добавления: 2013-12-23; просмотров: 1645; Нарушение авторских прав


Шифрование с использованием алгоритма RSA

Идея, положенная в основу метода, состоит в том, чтобы найти такую функцию y=Φ(x), для которой получение обратной функции x=f-1(y) было бы в общем случае очень сложной задачей (NP-полной задачей). Например, получить произведение двух чисел n=p×q просто, а разложить n на множители, если p и q достаточно большие простые числа, – NP-полная задача с вычислительной сложностью ~ n10. Однако если знать некую секретную информацию, то найти обратную функцию x=f-1(y) существенно проще. Такие функции также называют односторонними функциями с лазейкой или потайным ходом.

Применяемые в RSA прямая и обратная функции просты. Они базируются на применении теоремы Эйлера из теории чисел.

Прежде чем сформулировать теорему Эйлера, необходимо определить важную функцию Φ(n) из теории чисел, называемую функцией Эйлера. Это число взаимно простых (взаимно простыми называются целые числа, не имеющие общих делителей) с n целых чисел, меньших n. Например, Φ(7)=6. Очевидно, что, если p и q – простые числа и pq, то Φ(p)=p-1, и Φ(pq)=(p-1)×(q-1).

Теорема Эйлера утверждает, что для любых взаимно простых чисел x и n (x < n)

xΦ(n)mod n = 1

или в более общем виде

xkΦ(n)+1mod n = 1

Сформулируем еще один важный результат. Для любого m>0 и 0<e<m, где e и m взаимно просты, найдется единственное 0<d<m, такое, что

de mod m = 1.

Здесь d легко можно найти по обобщенному алгоритму Евклида (см., например, Д. Кнут. Искусство программирования на ЭВМ, т.2, 4.5.2). Известно, что вычислительная сложность алгоритма Евклида ~ ln n.

Подставляя Φ(n) вместо m, получим de modΦ(n)=1

или

de = kΦ(n)+1

Тогда прямой функцией будет

Φ(x) = xe mod n

где x – положительное целое, x<n=pq, p и q – целые простые числа и, следовательно,



Φ(n)=(p-1)(q-1)

где e – положительное целое и e<Φ(n). Здесь e и n открыты. Однако p и q неизвестны (чтобы их найти, нужно выполнить разбиение n на множители), следовательно, неизвестна и Φ(n), а именно они и составляют потайной ход.

Вычислим обратную функцию

Φ-1(y) = yd mod n = xed mod n = xkΦ(n)+1 mod n = x

Последнее преобразование справедливо, поскольку x<n и x и n взаимно просты.

При практическом использовании алгоритма RSA вначале необходимо выполнить генерацию ключей. Для этого нужно:

  1. Выбрать два очень больших простых числа p и q;
  2. Вычислить произведение n=p×q;
  3. Выбрать большое случайное число d, не имеющее общих сомножителей с числом (p-1)×(q-1);
  4. Определить число e, чтобы выполнялось

(e×d)mod((p-1)×(q-1))=1.

Тогда открытым ключом будут числа e и n, а секретным ключом – числа d и n.

Теперь, чтобы зашифровать данные по известному ключу {e,n}, необходимо сделать следующее.

  • Разбить шифруемый текст на блоки, где i-й блок представить в виде числа M, величина которого меньше, чем n. Это можно сделать различными способами, например используя вместо букв их номера в алфавите.
  • Зашифровать текст, рассматриваемый как последовательность чисел m(i), по формуле c(i)=(m(i)e)mod n.

Чтобы расшифровать эти данные, используя секретный ключ {d,n}, необходимо вычислить: m(i) = (c(i)d) mod n. В результате будет получено множество чисел m(i), которые представляют собой часть исходного текста.

Например, зашифруем и расшифруем сообщение «AБВ», которое представим как число 123.

Выбираем p=5 и q=11 (числа на самом деле должны быть большими).

Находим n=5×11=55.

Определяем (p-1)×(q-1)=40. Тогда d будет равно, например, 7.

Выберем e, исходя из (e×7) mod 40=1. Например, e=3.

Теперь зашифруем сообщение, используя открытый ключ {3,55}

C1 = (13)mod 55 = 1C2 = (23)mod 55 = 8C3 = (33)mod 55 = 27

Теперь расшифруем эти данные, используя закрытый ключ {7,55}.

M1 = (17)mod 55 = 1M2 = (87)mod 55 = 2097152mod 55 = 2M3 = (277)mod 55 = 10460353203 mod 55 = 3

Таким образом, все данные расшифрованы.



<== предыдущая лекция | следующая лекция ==>
Криптография как одна из базовых технологий безопасности ОС | Пароли, уязвимость паролей


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.011 сек.