программа шифрование данный
5ka.ru - Математика -> Применение алгоритма RSA для шифрования потоков данных
Применение алгоритма RSA для шифрования потоков данных">
Соблазни ЛЮБУЮ
девушку, ЛЮБОГО парня! Легко программа шифрование данный без усилий! Эффект 100%. Читать »
Скачать | Найти похожие документы
Математика -> Применение алгоритма RSA для шифрования потоков данных
СОДЕРЖАНИЕ
|Введение |5 |
| |10 |
|1.Постановка задачи | |
|2. Алгоритм RSA |11 |
| 2.1. Система шифрования RSA |12 |
| 2.2.Сложность теоретико-числовых алгоритмов |16 |
| 2.2.1. Алгоритм вычисления |17 |
| 2.2.2. Алгоритм Евклида |18 |
| 2.2.3. Алгоритм решения уравнения |18 |
| 2.2.4. Алгоритм нахождения делителей многочлена в кольце |21 |
|3. Качественная теория алгоритма RSA |23 |
| 3.1. Алгоритм, доказывающий непростоту числа |24 |
| 3.2. Нахождение больших простых чисел |26 |
| 3.3. Проверка большого числа на простоту |30 |
|4. Практическая реализация алгоритма |37 |
| 4.1. Реализованные алгоритмы |37 |
| 4.2. Анализ результатов |38 |
|5. Выводы |39 |
| 5.1 Алгоритм |39 |
| 5.2 Алгоритм программа шифрование данный программа |39 |
|Заключение |41 |
|Список использованных источников |42 |
|Приложение 1. Листинг программы |43 |
|Приложение 2. Главная форма программы |46 |
|Приложение 3. Форма базы данных абонентов |47 |
|Приложение 4. Форма нахождения простых чисел программа шифрование данный генерации ключей |48 |
ВВЕДЕНИЕ
Проблема защиты информации путем ее преобразования, исключающего ее
прочтение посторонним лицом, волновала человеческий ум с давних времен.
История криптографии - ровесница истории человеческого языка. Более того,
первоначально письменность сама по себе была своеобразной криптографической
системой, так как в древних обществах ею владели только избранные.
Священные книги древнего Египта, древней Индии тому примеры.
История криптографии условно можно разделить на 4 этапа.
1) наивная криптография.
2) формальная криптография.
3) научная криптография.
4) компьютерная криптография.
Для наивной криптографии (до нач. XVI века) характерно использование
любых (обычно примитивных) способов запутывания противника относительно
содержания шифруемых текстов. На начальном этапе для защиты информации
использовались методы кодирования программа шифрование данный стеганографии, которые родственны, но
не тождественны криптографии.
Большинство из используемых шифров сводились к перестановке или
моноалфавитной подстановке. Одним из первых зафиксированных примеров
является шифр Цезаря, состоящий в замене каждой буквы исходного текста на
другую, отстоящую от нее в алфавите на определенное число позиций. Другой
шифр, полибианский квадрат, авторство которого приписывается греческому
писателю Полибию, является общей моноалфавитной подстановкой, которая
проводится с помощью случайно заполненной алфавитом квадратной таблицейдля
греческого алфавита размер составляет 5x5). Каждая буква исходного текста
заменяется на букву, стоящую в квадрате снизу от нее.
Этап формальной криптографии (кон. XV века - нач. XX века) связан с
появлением формализованных программа шифрование данный относительно стойких к ручному криптоанализу
шифров. В европейских странах это произошло в эпоху Возрождения, когда
развитие науки программа шифрование данный торговли вызвало спрос на надежные способы защиты
информации. Важная роль на этом этапе принадлежит Леону Батисте Альберти,
итальянскому архитектору, который одним из первых предложил многоалфавитную
подстановку. Данный шифр, получивший имя дипломата XVI века Блеза Вижинера,
состоял в последовательном «сложении» букв исходного текста с ключом
(процедуру можно облегчить с помощью специальной таблицы). Его работа
«Трактат о шифре» (1466) считается первой научной работой по криптологии.
Одной из первых печатных работ, в которой обобщены программа шифрование данный сформулированы
известные на тот момент алгоритмы шифрования является труд «Полиграфия»
(1508 г.) немецкого аббата Иоганна Трисемуса. Ему принадлежат два
небольших, но важных открытия: способ заполнения полибианского квадрата
(первые позиции заполняются с помощью легко запоминаемого ключевого слова,
остальные - оставшимися буквами алфавита) программа шифрование данный шифрование пар букв (биграмм).
Простым но стойким способом многоалфавитной замены (подстановки
биграмм) является шифр Плейфера, который был открыт в начале XIX века
Чарльзом Уитстоном. Уитстону принадлежит программа шифрование данный важное усовершенствование -
шифрование «двойным квадратом». Шифры Плейфера программа шифрование данный Уитстона использовались
вплоть до первой мировой войны, так как с трудом поддавались ручному
криптоанализу.
В XIX веке голландец Керкхофф сформулировал главное требование к
криптографическим системам, которое остается актуальным программа шифрование данный поныне:
секретность шифров должна быть основана на секретности ключа, но не
алгоритма.
Наконец, последним словом в донаучной криптографии, которое
обеспечили еще более высокую криптостойкосить, программа шифрование данный также позволило
автоматизировать (в смысле механизировать) процесс шифрования стали
роторные криптосистемы.
Одной из первых подобных систем стала изобретенная в 1790 году
Томасом Джефферсоном, будущим президентом США механическая машина.
Многоалфавитная подстановка с помощью роторной машины реализуется вариацией
взаимного положения вращающихся роторов, каждый из которых осуществляет
«прошитую» в нем подстановку.
Практическое распространение роторные машины получили только в начале
XX века. Одной из первых практически используемых машин, стала немецкая
Enigma, разработанная в 1917 году Эдвардом Хеберном программа шифрование данный усовершенствованная
Артуром Кирхом. Роторные машины активно использовались во время второй
мировой войны. Помимо немецкой машины Enigma использовались также
устройства Sigaba (США), Турех (Великобритания), Red, Orange программа шифрование данный Purple2
(Япония). Роторные системы -вершина формальной криптографии так как
относительно просто реализовывали очень стойкие шифры. Успешные криптоатаки
на роторные системы стали возможны только с появлением ЭВМ в начале 40-х
годов.
Главная отличительная черта научной криптографии (30-е - 60-е годы XX
века) - появление криптосистем со строгим математическим обоснованием
криптостойкости. К началу 30-х годов окончательно сформировались разделы
математики, являющиеся научной основой криптологии: теория вероятностей и
математическая статистика, общая алгебра, теория чисел, начали активно
развиваться теория алгоритмов, теория информации, кибернетика. Своеобразным
водоразделом стала работа Клода Шеннона «Теория связи в секретных системах»
(1949), где сформулированы теоретические принципы криптографической защиты
информации. Шеннон ввел понятия «рассеивание» программа шифрование данный «перемешивание», обосновал
возможность создания сколь угодно стойких криптосистем.
В 60-х годах ведущие криптографические школы подошли к созданию
блочных шифров, еще более стойких по сравнению с роторными криптосистемами,
однако допускающие практическую реализацию только в виде цифровых
электронных устройств.
Компьютерная криптография (с 70-х годов XX века) обязана своим
появлением вычислительным средствам с производительностью, достаточной для
реализации критосистем, обеспечивающих при большой скорости шифрования на
несколько порядков более высокую криптостойкость, чем «ручные» и
«механические» шифры.
Первым классом криптосистем, практическое применение которых стало
возможно с появлением мощных программа шифрование данный компактных вычислительных средств, стали
блочные шифры. В 70-е годы был разработан американский стандарт шифрования
DES (принят в 1978 году). Один из его авторов, Хорст Фейстел (сотрудник
IBM), описал модель блочных шифров, на основе которой были построены
другие, более стойкие симметричные криптосистемы, в том числе отечественный
стандарт шифрования ГОСТ 28147-89.
С появлением DES обогатился программа шифрование данный криптоанализ, для атак на американский
алгоритм был создано несколько новых видов криптоанализа (линейный,
дифференциальный программа шифрование данный т.д.), практическая реализация которых опять же была
возможна только с появлением мощных вычислительных систем.
В середине 70-х годов произошел настоящий прорыв в современной
криптографии - появление асимметричных криптосистем, которые не требовали
передачи секретного ключа между сторонами. Здесь отправной точкой принято
считать работу, опубликованную Уитфилдом Диффи программа шифрование данный Мартином Хеллманом в 1976
году под названием «Новые направления в современной криптографии». В ней
впервые сформулированы принципы обмена шифрованной информацией без обмена
секретным ключом. Независимо к идее асимметричных криптосистем подошел
Ральф Меркли. Несколькими годами позже Рон Ривест, Ади Шамир программа шифрование данный Леонард
Адлеман открыли систему RSA, первую практическую асимметричную
криптосистему, стойкость которой была основана на проблеме факторизации
больших простых чисел. Асимметричная криптография открыла сразу несколько
новых прикладных направлений, в частности системы электронной цифровой
подписи (ЭЦП) программа шифрование данный электронных денег.
В 80-90-е годы появились совершенно новые направления криптографии:
вероятностное шифрование, квантовая криптография программа шифрование данный другие. Осознание их
практической ценности еще впереди. Актуальной остается программа шифрование данный задача
совершенствования симметричных криптосистем. В 80-90-х годах были
разработаны нефейстеловские шифры (SAFER, RC6 программа шифрование данный др.), программа шифрование данный в 2000 году после
открытого международного конкурса был принят новый национальный стандарт
шифрования США - AES.
1. ПОСТАНОВКА ЗАДАЧИ
Безопасность передачи данных по каналам связи является актуальной.
Современные компьютерные сети не исключение. К сожалению, в сетевых
операционных системах (Windows NT/XP, Novell программа шифрование данный т.д.) иностранного
производства, как следствие, из-за экспортных соображений уровень
алгоритмов шифрования заметно снижен.
Задача: исследовать современные методы шифрования программа шифрование данный их приложимость к
шифрованию потоков данных. Разработать собственную библиотеку алгоритмов
шифрования программа шифрование данный программный продукт, демонстрирующий работу этих алгоритмов
при передаче данных в сети.
2. АЛГОРИТМ RSA
Труды Евклида программа шифрование данный Диофанта, Ферма программа шифрование данный Эйлера, Гаусса, Чебышева программа шифрование данный Эрмита
содержат остроумные программа шифрование данный весьма эффективные алгоритмы решения диофантовых
уравнений, выяснения разрешимости сравнений, построения больших по тем
временам простых чисел, нахождения наилучших приближений программа шифрование данный т.д. В последние
два десятилетия, благодаря в первую очередь запросам криптографии и
широкому распространению ЭВМ, исследования по алгоритмическим вопросам
теории чисел переживают период бурного программа шифрование данный весьма плодотворного развития.
Вычислительные машины программа шифрование данный электронные средства связи проникли
практически во все сферы человеческой деятельности. Немыслима без них и
современная криптография. Шифрование программа шифрование данный дешифрование текстов можно
представлять себе как процессы переработки целых чисел при помощи ЭВМ, а
способы, которыми выполняются эти операции, как некоторые функции,
определённые на множестве целых чисел. Всё это делает естественным
появление в криптографии методов теории чисел. Кроме того, стойкость ряда
современных криптосистем обосновывается только сложностью некоторых
теоретико-числовых задач.
Но возможности ЭВМ имеют определённые границы. Приходится разбивать
длинную цифровую последовательность на блоки ограниченной длины программа шифрование данный шифровать
каждый такой блок отдельно. Мы будем считать в дальнейшем, что все
шифруемые целые числа неотрицательны программа шифрование данный по величине меньше некоторого
заданного (скажем, техническими ограничениями) числа m. Таким же условиям
будут удовлетворять программа шифрование данный числа, получаемые в процессе шифрования. Это
позволяет считать программа шифрование данный те, программа шифрование данный другие числа элементами кольца вычетов [pic].
Шифрующая функция при этом может рассматриваться как взаимнооднозначное
отображение колец вычетов
[pic]
а число [pic] представляет собой сообщение [pic] в зашифрованном виде.
Простейший шифр такого рода - шифр замены, соответствует отображению
[pic] при некотором фиксированном целом k. Подобный шифр использовал еще
Юлий Цезарь. Конечно, не каждое отображение [pic] подходит для целей
надежного сокрытия информации.
В 1978 г. американцы Р. Ривест, А. Шамир программа шифрование данный Л. Адлеман (R.L.Rivest.
A.Shamir. L.Adleman) предложили пример функции [pic], обладающей рядом
замечательных достоинств. На её основе была построена реально используемая
система шифрования, получившая название по первым буквам имен авторов
-система RSA. Эта функция такова, что
1) существует достаточно быстрый алгоритм вычисления значений [pic];
2) существует достаточно быстрый алгоритм вычисления значений обратной
функции [pic];
3) функция [pic] обладает некоторым «секретом», знание которого
позволяет быстро вычислять значения [pic]; в противном же случае вычисление
[pic] становится трудно разрешимой в вычислительном отношении задачей,
требующей для своего решения столь много времени, что по его
прошествии зашифрованная информация перестает представлять интерес для лиц,
использующих отображение [pic] в качестве шифра.
Еще до выхода из печати статьи копия доклада в Массачусетском
Технологическом институте, посвящённого системе RSA. была послана
известному популяризатору математики М. Гарднеру, который в 1977 г. в
журнале Scientific American опубликовал статью посвящённую этой системе
шифрования. В русском переводе заглавие статьи Гарднера звучит так: Новый
вид шифра, на расшифровку которого потребуются миллионы лет. Именно эта
статья сыграла важнейшую роль в распространении информации об RSA,
привлекла к криптографии внимание широких кругов неспециалистов и
фактически способствовала бурному прогрессу этой области, произошедшему в
последовавшие 20 лет.
2.1. система шифрования RSA
Пусть [pic] программа шифрование данный [pic] натуральные числа. Функция [pic] реализующая
схему RSA, устроена следующим образом
[pic].
(1)
Для расшифровки сообщения [pic] достаточно решить сравнение
[pic]. (2)
При некоторых условиях на [pic] программа шифрование данный [pic] это сравнение имеет единственное
решение [pic].
Для того, чтобы описать эти условия программа шифрование данный объяснить, как можно найти
решение, нам потребуется одна теоретико-числовая функция, так называемая
функция Эйлера. Эта функция натурального аргумента [pic] обозначается [pic]
и равняется количеству целых чисел на отрезке от 1 до [pic], взаимно
простых с [pic]. Так [pic] программа шифрование данный [pic] для любого простого числа [pic] и
натурального [pic]. Кроме того, [pic] для любых натуральных взаимно простых
[pic] программа шифрование данный [pic]. Эти свойства позволяют легко вычислить значение [pic], если
известно разложение числа [pic] на простые сомножители.
Если показатель степени [pic] в сравнении (2) взаимно прост с [pic],
то сравнение (2) имеет единственное решение. Для того, чтобы найти его,
определим целое число [pic], удовлетворяющее условиям
[pic]. (3)
Такое число существует, поскольку [pic], программа шифрование данный притом единственно. Здесь и
далее символом [pic] будет обозначаться наибольший общий делитель чисел
[pic] программа шифрование данный [pic]. Классическая теорема Эйлера, утверждает, что для каждого
числа [pic], взаимно простого с [pic], выполняется сравнение [pic] и,
следовательно.
[pic].
(4)
Таким образом, в предположении [pic], единственное решение сравнения (2)
может быть найдено в виде
[pic].
(5)
Если дополнительно предположить, что число [pic] состоит из различных
простых сомножителей, то сравнение (5) будет выполняться программа шифрование данный без
предположения [pic]. Действительно, обозначим [pic] программа шифрование данный [pic]. Тогда [pic]
делится на [pic], программа шифрование данный из (2) следует, что [pic]. Подобно (4), теперь легко
находим [pic]. А кроме того, имеем [pic]. Получившиеся сравнения в силу
[pic] дают нам (5).
Функция (1), принятая в системе RSA, может быть вычислена достаточно
быстро. Обратная к [pic] функция [pic] вычисляется по тем же правилам, что
и [pic], лишь с заменой показателя степени [pic] на [pic]. Таким образом,
для функции (1) будут выполнены указанные выше свойства 1) программа шифрование данный 2).
Для вычисления функции (1) достаточно знать лишь числа [pic] программа шифрование данный [pic].
Именно они составляют открытый ключ для шифрования. А вот для вычисления
обратной функции требуется знать число [pic]. оно программа шифрование данный является «секретом», о
котором речь идёт в пункте в). Казалось бы. ничего не стоит. зная число
[pic]. разложить его на простые сомножители, вычислить затем с помощью
известных правил значение [pic] и, наконец, с помощью (3) определить нужное
число [pic]. Все шаги этого вычисления могут быть реализованы достаточно
быстро, за исключением первого. Именно разложение числа [pic] на простые
множители программа шифрование данный составляет наиболее трудоемкую часть вычислений. В теории чисел
несмотря на многолетнюю её историю программа шифрование данный на очень интенсивные поиски в течение
последних 20 лет, эффективный алгоритм разложения натуральных чисел на
множители так программа шифрование данный не найден. Конечно, можно, перебирая все простые числа до
[pic], и. деля на них [pic], найти требуемое разложение. Но, учитывая, что
количество простых в этом промежутке, асимптотически равно [pic], находим,
что при [pic], записываемом 100 десятичными цифрами, найдётся не менее
[pic] простых чисел, на которые придётся делить [pic] при разложении его на
множители. Очень грубые прикидки показывают, что компьютеру, выполняющему
миллион делений в секунду, для разложения числа [pic] таким способом на
простые сомножители потребуется не менее, чем [pic] лет. Известны программа шифрование данный более
эффективные способы разложения целых чисел на множители, чем простой
перебор простых делителей, но программа шифрование данный они работают очень медленно.
Авторы схемы RSA предложили выбирать число [pic] в виде произведения
двух простых множителей [pic] программа шифрование данный [pic], примерно одинаковых по величине. Так
как
[pic],
(6)
то единственное условие на выбор показателя степени [pic] в отображении (1)
есть
[pic].
(7)
Итак, лицо, заинтересованное в организации шифрованной переписки с
помощью схемы RSA, выбирает два достаточно больших простых числа [pic] и
[pic]. Перемножая их, оно находит число [pic]. Затем выбирается число
[pic], удовлетворяющее условиям (7), вычисляется с помощью (6) число [pic]
и с помощью (3) - число [pic]. Числа [pic] программа шифрование данный [pic] публикуются, число [pic]
остается секретным. Теперь любой может отправлять зашифрованные с помощью
(1) сообщения организатору этой системы, программа шифрование данный организатор легко сможет
расшифровывать их с помощью (5).
Для иллюстрации своего метода Ривест, Шамир программа шифрование данный Адлеман зашифровали
таким способом некоторую английскую фразу. Сначала она стандартным образом
(а=01, b=02, .... z=26, пробел=00) была записана в виде целого числа [pic],
а затем зашифрована с помощью отображения (1) при
m=11438162575788886766932577997614661201021829672124236256256184293570
6935245733897830597123563958705058989075147599290026879543541
и [pic]. Эти два числа были опубликованы, причем дополнительно сообщалось,
что [pic]. где [pic] программа шифрование данный [pic] - простые числа, записываемые соответственно
64 программа шифрование данный 65 десятичными знаками. Первому, кто расшифрует соответствующее
сообщение
[pic],
была обещана награда в 100$.
Эта история завершилась спустя 17 лет в 1994 г., когда D. Atkins, M.
Graff, А. К. Lenstra программа шифрование данный Р. С. Leyland сообщили о расшифровке фразы. Числа
[pic] программа шифрование данный [pic] оказались равными
[pic],
[pic].
Этот замечательный результат (разложение на множители 129-значного
десятичного числа) был достигнут благодаря использованию алгоритма
разложения чисел на множители, называемого методом квадратичного решета.
Выполнение вычислений потребовало колоссальных ресурсов. В работе,
возглавлявшейся четырьмя авторами проекта, программа шифрование данный продолжавшейся после
предварительной теоретической подготовки примерно 220 дней, на добровольных
началах участвовало около 600 человек программа шифрование данный примерно 1600 компьютеров,
объединённых сетью Internet. Наконец, отметим, что премия в 100$ была
передана в Free Software Foundation.
2.2.Сложность теоретико-числовых алгоритмов
Сложность алгоритмов теории чисел обычно принято измерять количеством
арифметических операций (сложений, вычитаний, умножений программа шифрование данный делений с
остатком), необходимых для выполнения всех действий, предписанных
алгоритмом. Впрочем, это определение не учитывает величины чисел,
участвующих в вычислениях. Ясно, что перемножить два стозначных числа
значительно сложнее, чем два однозначных, хотя при этом программа шифрование данный в том, программа шифрование данный в другом
случае выполняется лишь одна арифметическая операция. Поэтому иногда
учитывают ещё программа шифрование данный величину чисел, сводя дело к так называемым битовым
операциям, т. е. оценивая количество необходимых операций с цифрами 0 программа шифрование данный 1,
в двоичной записи чисел.
Говоря о сложности алгоритмов, мы будем иметь в виду количество
арифметических операций. При построении эффективных алгоритмов программа шифрование данный обсуждении
верхних оценок сложности обычно хватает интуитивных понятий той области
математики, которой принадлежит алгоритм. Формализация же этих понятий
требуется лишь тогда, когда речь идёт об отсутствии алгоритма или
доказательстве нижних опенок сложности.
Приведем теперь примеры достаточно быстрых алгоритмов с опенками их
сложности. Здесь программа шифрование данный в дальнейшем мы не будем придерживаться формального
описания алгоритмов, стараясь в первую очередь объяснить смысл выполняемых
действий.
Следующий алгоритм вычисляет [pic] за [pic] арифметических операций.
При этом, конечно, предполагается, что натуральные числа [pic] программа шифрование данный [pic] не
превосходят по величине [pic].
2.2.1. Алгоритм вычисления [pic]
1) Представим [pic] в двоичной системе счисления [pic], где [pic], цифры в
двоичном представлении, равны 0 или 1, [pic].
2) Положим [pic] программа шифрование данный затем для [pic] вычислим
[pic].
3) [pic] есть искомый вычет [pic].
Справедливость этого алгоритма вытекает из сравнения
[pic],
легко доказываемого индукцией по [pic].
Так как каждое вычисление на шаге 2 требует не более трёх умножений
по модулю [pic] программа шифрование данный этот шаг выполняется [pic] раз, то сложность алгоритма
может быть оценена величиной [pic].
Второй алгоритм - это классический алгоритм Евклида вычисления
наибольшего общего делителя целых чисел. Мы предполагаем заданными два
натуральных числа [pic] программа шифрование данный [pic] программа шифрование данный вычисляем их наибольший общий делитель
[pic].
2.2.2. Алгоритм Евклида
1) Вычислим [pic] - остаток от деления числа [pic] на [pic], [pic], [pic].
2) Если [pic], то [pic] есть искомое число.
3) Если [pic], то заменим пару чисел [pic] парой [pic] программа шифрование данный перейдем к
шагу 1.
Теорема 1. При вычислении наибольшего общего делителя [pic] с помощью
алгоритма Евклида будет выполнено не более [pic] операций деления с
остатком, где [pic] есть количество цифр в десятичной записи меньшего из
чисел [pic] программа шифрование данный [pic].
Доказательство. Положим [pic] программа шифрование данный определим [pic] - последовательность
делителей, появляющихся в процессе выполнения шага 1 алгоритма Евклида.
Тогда
[pic].
Пусть также [pic], [pic], [pic], [pic], - последовательность Фибоначчи.
Индукцией по [pic] от [pic] до [pic] легко доказывается неравенство [pic].
А так как [pic], то имеем неравенства [pic] программа шифрование данный [pic].
Немного подправив алгоритм Евклида, можно достаточно быстро решать
сравнения [pic] при условии, что [pic]. Эта задача равносильна поиску целых
решений уравнения [pic].
2.2.3. Алгоритм решения уравнения [pic]
0) Определим матрицу [pic].
1) Вычислим [pic] - остаток от деления числа [pic] на [pic], [pic],
[pic].
Если [pic], то второй столбец матрицы [pic] даёт вектор [pic]
решений уравнения.
3) Если [pic], то заменим матрицу [pic] матрицей [pic].
4) Заменим пару чисел [pic] парой [pic] программа шифрование данный перейдем к шагу 1.
Если обозначить через [pic] матрицу [pic], возникающую в процессе
работы алгоритма перед шагом 2 после [pic] делений с остатком (шаг 1), то в
обозначениях из доказательства теоремы 1 в этот момент выполняется
векторное равенство [pic]. Поскольку числа [pic] программа шифрование данный [pic] взаимно просты,
имеем [pic], программа шифрование данный это доказывает, что алгоритм действительно даёт решение
уравнения [pic]. Буквой [pic] мы обозначили количество делений с остатком,
которое в точности такое же, как программа шифрование данный в алгоритме Евклида.
Три приведённых выше алгоритма относятся к разряду так называемых
полиномиальных алгоритмов. Это название носят алгоритмы, сложность которых
оценивается сверху степенным образом в зависимости от длины записи входящих
чисел. Если наибольшее из чисел, подаваемых на вход алгоритма, не
превосходит [pic], то сложность алгоритмов этого типа оценивается величиной
[pic], где [pic] - некоторая абсолютная постоянная. Во всех приведённых
выше примерах [pic].
Полиномиальные алгоритмы в теории чисел - большая редкость. Да и
опенки сложности алгоритмов чаше всего опираются на какие-либо не
доказанные, но правдоподобные гипотезы, обычно относящиеся к аналитической
теории чисел.
Для некоторых задач эффективные алгоритмы вообще не известны. Иногда
в таких случаях все же можно предложить последовательность действий,
которая, «если повезет», быстро приводит к требуемому результату.
Существует класс так называемых вероятностных алгоритмов, которые дают
правильный результат, но имеют вероятностную опенку времени работы. Обычно
работа этих алгоритмов зависит от одного или нескольких параметров. В
худшем случае они работают достаточно долго. Но удачный выбор параметра
определяет быстрое завершение работы. Такие алгоритмы, если множество
«хороших» значений параметров велико, на практике работают достаточно
эффективно, хотя программа шифрование данный не имеют хороших опенок сложности.
Мы будем иногда использовать слова детерминированный алгоритм, чтобы
отличать алгоритмы в обычном смысле от вероятностных алгоритмов.
Как пример, рассмотрим вероятностный алгоритм, позволяющий эффективно
находить решения полиномиальных сравнений по простому модулю. Пусть [pic] —
простое число, которое предполагается большим, программа шифрование данный [pic] - многочлен, степень
которого предполагается ограниченной. Задача состоит в отыскании решений
сравнения
[pic].
(8)
Например, речь может идти о решении квадратичных сравнений, если степень
многочлена [pic] равна 2. Другими словами, мы должны отыскать в поле [pic]
все элементы, удовлетворяющие уравнению [pic].
Согласно малой теореме Ферма, все элементы поля [pic] являются
однократными корнями многочлена [pic]. Поэтому, вычислив наибольший общий
делитель [pic], мы найдем многочлен [pic], множество корней которого в поле
[pic] совпадает с множеством корней многочлена [pic], причем все эти корни
однократны. Если окажется, что многочлен [pic] имеет нулевую степень, т. е.
лежит в поле [pic], это будет означать, что сравнение (8) не имеет решений.
Для вычисления многочлена [pic] удобно сначала вычислить многочлен
[pic], пользуясь алгоритмом, подобным описанному выше алгоритму возведения
в степень (напомним, что число [pic] предполагается большим). А затем с
помощью аналога алгоритма Евклида вычислить [pic]. Всё это выполняется за
полиномиальное количество арифметических операций.
Таким образом, обсуждая далее задачу нахождения решений сравнения
(8), мы можем предполагать, что в кольце многочленов [pic] справедливо
равенство
[pic]
2.2.4. Алгоритм нахождения делителей многочлена [pic] в кольце [pic]
1) Выберем каким-либо способом элемент [pic].
2) Вычислим наибольший общий делитель [pic].
3) Если многочлен [pic] окажется собственным делителем [pic], то многочлен
[pic] распадётся на два множителя программа шифрование данный с каждым из них независимо нужно
будет проделать все операции, предписываемые настоящим алгоритмом для
многочлена [pic].
4) Если окажется, что [pic] или [pic], следует перейти к шагу 1 и. выбрав
новое значение [pic], продолжить выполнение алгоритма.
Количество операций на шаге 2 оценивается величиной [pic], если
вычисления проводить так, как это указывалось выше при нахождении [pic].
Выясним теперь, сколь долго придётся выбирать числа [pic], пока на шаге 2
не будет найден собственный делитель [pic].
Количество решений уравнения [pic] в поле [pic] не превосходит [pic]. Это
означает, что подмножество [pic] элементов [pic], удовлетворяющих условиям
[pic],
состоит не менее, чем из [pic] элементов. Учитывая теперь, что каждый
ненулевой элемент [pic] удовлетворяет одному из равенств [pic], либо [pic],
заключаем, что для [pic] одно из чисел [pic] будет корнем многочлена [pic],
а другое - нет. Для таких элементов [pic] многочлен [pic], определённый на
шаге 2 алгоритма, будет собственным делителем многочлена [pic].
Итак, существует не менее [pic] «удачных» выборов элемента [pic], при
которых на шаге 2 алгоритма многочлен [pic] распадётся на два собственных
множителя. Следовательно, при «случайном» выборе элемента [pic],
вероятность того, что многочлен не разложится на множители после [pic]
повторений шагов алгоритма 1-4. не превосходит [pic]. Вероятность с ростом
[pic] убывает очень быстро. И действительно, на практике этот алгоритм
работает достаточно эффективно.
Заметим, что при опенке вероятности мы использовали только два корня
многочлена [pic]. При [pic] эта вероятность, конечно, еще меньше. Более
тонкий анализ с использованием опенок А. Вейля для сумм характеров
показывает, что вероятность для многочлена [pic] не распасться на множители
при однократном проходе шагов алгоритма 1-4. не превосходит [pic]. Здесь
постоянная в [pic] зависит от [pic].
Если в сравнении (8) заменить простой модуль [pic] составным модулем
[pic], то задача нахождения решений соответствующего сравнения становится
намного более сложной. Известные алгоритмы её решения основаны на сведении
сравнения к совокупности сравнений (8) по простым модулям — делителям
[pic], и. следовательно, они требуют разложения числа то на простые
сомножители, что, как уже указывалось, является достаточно трудоемкой
задачей.
3. КАЧЕСТВЕННАЯ ТЕОРИЯ АЛГОРИТМА RSA
Существует довольно эффективный способ убедиться, что заданное число
является составным, не разлагая это число на множители. Согласно малой
теореме Ферма, если число [pic] простое, то для любого целого [pic], не
делящегося на [pic], выполняется сравнение
[pic].
(9)
Если же при каком-то [pic] это сравнение нарушается, можно утверждать, что
[pic] - составное. Проверка (9) не требует больших вычислений, это следует
из алгоритма 1. Вопрос только в том, как найти для составного [pic] целое
число [pic], не удовлетворяющее (9). Можно, например, пытаться найти
необходимое число [pic], испытывая все целые числа подряд, начиная с 2. Или
попробовать выбирать эти числа случайным образом на отрезке [pic].
К сожалению, такой подход не всегда даёт то, что хотелось бы. Имеются
составные числа [pic], обладающие свойством (9) для любого целого [pic] с
условием [pic]. Такие числа называются числами Кармайкла. Рассмотрим,
например, число [pic]. Так как 560 делится на каждое из чисел 2, 10, 16, то
с помощью малой теоремы Ферма легко проверить, что 561 есть число
Кармайкла. Можно доказать, что любое из чисел Кармайкла имеет вид [pic],
где все простые [pic] различны, причем [pic] делится на каждую разность
[pic]. Лишь недавно, была решена проблема о бесконечности множества таких
чисел.
В 1976 г. Миллер предложил заменить проверку (9) проверкой несколько
иного условия. Если [pic] - простое число, [pic], где [pic] нечётно, то
согласно малой теореме Ферма для каждого [pic] с условием [pic] хотя бы
одна из скобок в произведении
[pic]
делится на [pic]. Обращение этого свойства можно использовать, чтобы
отличать составные числа от простых.
Пусть [pic] - нечётное составное число, [pic], где [pic] нечётно.
Назовем целое число [pic], [pic], «хорошим» для [pic], если нарушается одно
из двух условий:
1) [pic] не делится на [pic];
2) [pic] или существует целое [pic], [pic], такое, что
[pic].
Из сказанного ранее следует, что для простого числа [pic] не
существует хороших чисел [pic]. Если же [pic] составное число, то, как
доказал Рабин, их существует не менее [pic].
Теперь можно построить вероятностный алгоритм, отличающий составные
числа от простых.
3.1. Алгоритм, доказывающий непростоту числа
1) Выберем случайным образом число [pic], [pic], программа шифрование данный проверим для
этого числа указанные выше свойства 1) программа шифрование данный 2) п.2.
2) Если хотя бы одно из них нарушается, то число [pic] составное.
3) Если выполнены оба условия 1) программа шифрование данный 2) п.2, возвращаемся к шагу 1.
Из сказанного выше следует, что составное число не будет определено
как составное после однократного выполнения шагов 1-3 с вероятностью не
большей [pic]. А вероятность не определить его после [pic] повторений не
превосходит [pic]. т. е. убывает очень быстро.
Миллер предложил детерминированный алгоритм определения составных
чисел, имеющий сложность [pic], однако справедливость его результата
зависит от недоказанной в настоящее время так называемой расширенной
гипотезы Римана. Согласно этому алгоритму достаточно проверить условия 1) и
2) п.2 для всех целых чисел [pic], [pic]. Если при каком-нибудь [pic] из
указанного промежутка нарушается одно из условий а) или б), число [pic]
составное. В противном случае оно будет простым или степенью простого
числа. Последняя возможность, конечно, легко проверяется.
Напомним некоторые понятия, необходимые для формулировки расширенной
гипотезы Римана. Они понадобятся нам программа шифрование данный в дальнейшем. Пусть [pic] - целое
число. Функция [pic] называется характером Дирихле по модулю [pic], или
просто характером, если эта функция периодична с периодом [pic], отлична от
нуля только на числах, взаимно простых с [pic], программа шифрование данный мультипликативна, т. е.
для любых целых [pic] выполняется равенство [pic]. Для каждого [pic]
существует ровно [pic] характеров Дирихле. Они образуют группу по
умножению. Единичным элементом этой группы является так называемый главный
характер [pic], равный 1 на всех числах, взаимно простых с [pic], программа шифрование данный 0 на
остальных целых числах. Порядком характера называется его порядок как
элемента мультипликативной группы характеров.
С каждым характером может быть связана так называемая [pic] - функция
Дирихле - функция комплексного переменного [pic], определённая рядом[pic].
Сумма этого ряда аналитична в области [pic] программа шифрование данный может быть аналитически
продолжена на всю комплексную плоскость. Следующее соотношение [pic]
связывает L - функцию, отвечающую главному характеру, с дзета-функцией
Римана [pic]. Расширенная гипотеза Римана утверждает, что комплексные нули
всех L -функций Дирихле, расположенные в полосе [pic], лежат на прямой
[pic]. В настоящее время не доказана даже простейшая форма этой гипотезы -
классическая гипотеза Римана, утверждающая такой же факт о нулях дзета-
функции.
В 1952 г. Анкени с помощью расширенной гипотезы Римана доказал, что
для каждого простого числа [pic] существует квадратичный невычет [pic],
удовлетворяющий неравенствам [pic]. Константа 70 была сосчитана позднее.
Именно это утверждение программа шифрование данный лежит в основе алгоритма Миллера. В 1957 г.
Берджесс доказал существование такого невычета без использования
расширенной гипотезы Римана, но с худшей оценкой [pic], справедливой при
любом положительном [pic] программа шифрование данный [pic], большем некоторой границы, зависящей
от[pic].
Алгоритм Миллера принципиально отличается от алгоритма 2.1., так как
полученное с его помощью утверждение о том, что число [pic] - составное,
опирается на недоказанную расширенную гипотезу Римана программа шифрование данный потому может быть
неверным. В то время как вероятностный алгоритм 2.1. даёт совершенно
правильный ответ для составных чисел. Несмотря на отсутствие оценок
сложности, на практике он работает вполне удовлетворительно.
3.2. Нахождение больших простых чисел
Конечно же, большие простые числа можно строить сравнительно быстро.
При этом можно обеспечить их случайное распределение в заданном диапазоне
величин. В противном случае теряла бы всякий практический смысл система
шифрования RSA. Наиболее эффективным средством построения простых чисел
является несколько модифицированная малая теорема Ферма.
Теорема 2. Пусть [pic] - нечётные натуральные числа, [pic], причем
для каждого простого делителя [pic] числа [pic] существует целое число
[pic] такое, что
[pic]. (10)
Тогда каждый простой делитель [pic] числа [pic] удовлетворяет сравнению
[pic].
Доказательство. Пусть [pic] - простой делитель числа [pic], a [pic] -
некоторый делитель [pic]. Из условий (10) следует, что в поле вычетов [pic]
справедливы соотношения
[pic].
(11)
Обозначим буквой [pic] порядок элемента [pic] в мультипликативной группе
поля [pic]. Первые два из соотношений (11) означают, что [pic] входит в
разложение на простые множители числа [pic] в степени такой же, как программа шифрование данный в
разложение [pic], программа шифрование данный последнее - что [pic] делится на [pic]. Таким образом,
каждый простой делитель числа [pic] входит в разложение [pic] в степени не
меньшей, чем в [pic], так что [pic] делится на [pic]. Кроме того, [pic]
четно. Теорема 2 доказана.
Следствие. Если выполнены условия теоремы 2 программа шифрование данный [pic], то [pic] -
простое число.
Действительно, пусть [pic] равняется произведению не менее двух
простых чисел. Каждое из них, согласно утверждению теоремы 2, не меньше,
чем [pic]. Но тогда [pic]. Противоречие программа шифрование данный доказывает следствие.
Покажем теперь, как с помощью последнего утверждения, имея большое
простое число [pic], можно построить существенно большее простое число
[pic]. Выберем для этого случайным образом чётное число [pic] на промежутке
[pic] программа шифрование данный положим [pic]. Затем проверим число [pic] на отсутствие малых
простых делителей, разделив его на малые простые числа; испытаем [pic]
некоторое количество раз с помощью алгоритма 5. Если при этом выяснится,
что [pic] - составное число, следует выбрать новое значение [pic] программа шифрование данный опять
повторить вычисления. Так следует делать до тех пор, пока не будет найдено
число [pic], выдержавшее испытания алгоритмом 5 достаточно много раз. В
этом случае появляется надежда на то, что [pic] - простое число, программа шифрование данный следует
попытаться доказать простоту с помощью тестов теоремы 2.
Для этого можно случайным образом выбирать число [pic], программа шифрование данный проверять
для него выполнимость соотношений
[pic].
(12)
Если при выбранном [pic] эти соотношения выполняются, то, согласно
следствию из теоремы 2, можно утверждать, что число [pic] простое. Если же
эти условия нарушаются, нужно выбрать другое значение [pic] программа шифрование данный повторять эти
операции до тех пор, пока такое число не будет обнаружено.
Предположим, что построенное число [pic] действительно является
простым. Зададимся вопросом, сколь долго придётся перебирать числа [pic],
пока не будет найдено такое, для которого будут выполнены условия (12).
Заметим, что для простого числа [pic] первое условие (12), согласно малой
теореме Ферма, будет выполняться всегда. Те же числа [pic], для которых
нарушается второе условие (12), удовлетворяют сравнению [pic]. Как
известно, уравнение [pic] в поле вычетов [pic] имеет не более [pic]
решений. Одно из них [pic]. Поэтому на промежутке [pic] имеется не более
[pic] чисел, для которых не выполняются условия (12). Это означает, что,
выбирая случайным образом числа [pic] на промежутке [pic], при простом
[pic] можно с вероятностью большей, чем [pic], найти число [pic], для
которого будут выполнены условия теоремы 2, программа шифрование данный тем доказать, что [pic]
действительно является простым числом.
Заметим, что построенное таким способом простое число [pic] будет
удовлетворять неравенству [pic], т. е. будет записываться вдвое большим
количеством цифр, чем исходное простое число [pic]. Заменив теперь число
[pic] на найденное простое число [pic] программа шифрование данный повторив с этим новым [pic] все
указанные выше действия, можно построить еще большее простое число. Начав с
какого-нибудь простого числа, скажем, записанного 10 десятичными цифрами
(простоту его можно проверить, например, делением на маленькие табличные
простые числа), программа шифрование данный повторив указанную процедуру достаточное число раз. можно
построить простые числа нужной величины.
Обсудим теперь некоторые теоретические вопросы, возникающие в связи с
нахождением числа [pic], удовлетворяющего неравенствам [pic], программа шифрование данный такого, что
[pic] - простое число. Прежде всего, согласно теореме Дирихле, доказанной
еще в 1839 г., прогрессия [pic], [pic] содержит бесконечное количество
простых чисел. Нас интересуют простые числа, лежащие недалеко от начала
прогрессии. Опенка наименьшего простого числа в арифметической прогрессии
была получена в 1944 г. Ю. В. Линником. Соответствующая теорема утверждает,
что наименьшее простое число в арифметической прогрессии [pic] не
превосходит [pic], где [pic] - некоторая достаточно большая абсолютная
постоянная.
Таким образом, в настоящее время никаких теоретических гарантий для
существования простого числа [pic] не существует. Тем не менее опыт
вычислений на ЭВМ показывает, что простые числа в арифметической прогрессии
встречаются достаточно близко к её началу. Упомянем в этой связи гипотезу о
существовании бесконечного количества простых чисел [pic] с условием, что
число [pic] также простое, т. е. простым является уже первый член
прогрессии.
Очень важен в связи с описываемым методом построения простых чисел
также вопрос о расстоянии между соседними простыми числами в арифметической
прогрессии. Ведь убедившись, что при некотором [pic] число [pic] составное,
можно следующее значение [pic] взять равным [pic] программа шифрование данный действовать так далее,
пока не будет найдено простое число [pic]. И если расстояние между
соседними простыми числами в прогрессии велико, нет надежды быстро
построить нужное число [pic]. Перебор чисел [pic] до того момента, как мы
наткнемся на простое число [pic] окажется слишком долгим. В более простом
вопросе о расстоянии между соседними простыми числами [pic] программа шифрование данный [pic] в
натуральном ряде доказано лишь, что [pic], что, конечно, не очень хорошо
для наших целей. Вместе с тем существует так называемая гипотеза Крамера
(1936 г.), что [pic], дающая вполне приемлемую опенку. Примерно такой же
результат следует программа шифрование данный из расширенной гипотезы Римана. Вычисления на ЭВМ
показывают, что простые числа в арифметических прогрессиях расположены
достаточно плотно.
В качестве итога обсуждения в этом пункте подчеркнём следующее: если
принять на веру, что наименьшее простое число, программа шифрование данный также расстояние между
соседними простыми числами в прогрессии [pic] при [pic] оцениваются
величиной [pic], то описанная схема построения больших простых чисел имеет
полиномиальную опенку сложности. Кроме того, несмотря на отсутствие
теоретических опенок времени работы алгоритмов, отыскивающих простые числа
в арифметических прогрессиях со сравнительно большой разностью, на практике
эти алгоритмы работают вполне удовлетворительно. На обычном персональном
компьютере без особых затрат времени строятся таким способом простые числа
порядка [pic].
Конечно, способ конструирования простых чисел для использования в
схеме RSA должен быть массовым, программа шифрование данный сами простые числа должны быть в каком-то
смысле хорошо распределёнными. Это вносит ряд дополнительных осложнений в
работу алгоритмов.
Наконец, отметим, что существуют методы построения больших простых
чисел, использующие не только простые делители [pic], но программа шифрование данный делители чисел
[pic]. В основе их лежит использование последовательностей целых чисел,
удовлетворяющих линейным рекуррентным уравнениям различных порядков.
Отметим, что последовательность [pic], члены которой присутствуют в
формулировке малой теоремы Ферма, составляет решение рекуррентного
уравнения первого порядка [pic].
3.3. Проверка большого числа на простоту
Есть некоторое отличие в постановках задач предыдущего программа шифрование данный настоящего
пунктов. Когда мы строим простое число [pic], мы обладаем некоторой
дополнительной информацией о нем, возникающей в процессе построения.
Например, такой информацией является знание простых делителей числа [pic].
Эта информация иногда облегчает доказательство простоты [pic].
В этом пункте мы предполагаем лишь, что нам задано некоторое число
[pic], например, выбранное случайным образом на каком-то промежутке, и
требуется установить его простоту, или доказать, что оно является
составным. Эту задачу за полиномиальное количество операций решает
указанный в п. 3 алгоритм Миллера. Однако, справедливость полученного с его
помощью утверждения зависит от недоказанной расширенной гипотезы Римана.
Если число [pic] выдержало испытания алгоритмом 5 для 100 различных
значений параметра [pic], то, по-видимому, можно утверждать, что оно
является простым с вероятностью большей, чем [pic]. Эта вероятность очень
близка к единице, однако всё же оставляет некоторую тень сомнения на
простоте числа [pic]. В дальнейшем в этом пункте мы будем считать, что
заданное число [pic] является простым, программа шифрование данный нам требуется лишь доказать это.
В настоящее время известны детерминированные алгоритмы различной
сложности для доказательства простоты чисел. Мы остановимся подробнее на
одном из них, предложенном в 1983 г. в совместной работе Адлемана.
Померанца программа шифрование данный Рамели. Для доказательства простоты или непростоты числа [pic]
этот алгоритм требует [pic] арифметических операций. Здесь [pic] -
некоторая положительная абсолютная постоянная. Функция [pic] хоть и
медленно, но всё же возрастает с ростом [pic], поэтому алгоритм не является
полиномиальным. Но всё же его практические реализации позволяют достаточно
быстро тестировать числа на простоту. Существенные усовершенствования и
упрощения в первоначальный вариант алгоритма были внесены в работах X.
Ленстры программа шифрование данный А. Коена. Мы будем называть описываемый ниже алгоритм алгоритмом
Адлемана - Ленстры.
В основе алгоритма лежит использование сравнений типа малой теоремы
Ферма, но в кольцах целых чисел круговых полей, т. е. полей. порождённых
над полем [pic] числами [pic] - корнями из 1. Пусть [pic] - простое
нечётное число программа шифрование данный [pic] — первообразный корень по модулю [pic], т. е.
образующий элемент мультипликативной группы поля [pic], которая пиклична.
Для каждого целого числа [pic], не делящегося на [pic], можно определить
его индекс, [pic], называемый также дискретным логарифмом, с помощью
сравнения [pic]. Рассмотрим далее два простых числа [pic], [pic] с
условием, что [pic] делится на [pic], но не делится на [pic].
Следующая функция, определённая на множестве целых чисел.
[pic]
является характером по модулю [pic] программа шифрование данный порядок этого характера равен [pic].
Сумма
[pic]
называется суммой Гаусса. Формулируемая ниже теорема 3 представляет собой
аналог малой теоремы Ферма, используемый в алгоритме Адлемана - Ленстры.
Теорема 3. Пусть [pic] - нечетное простое число, [pic]. Тогда в
кольце [pic] выполняется сравнение
[pic].
Если при каких-либо числах [pic] сравнение из теоремы 3 нарушается. можно
утверждать, что [pic] составное число. В противном случае, если сравнение
выполняется, оно даёт некоторую информацию о возможных простых делителях
числа [pic]. Собрав такую информацию для различных [pic], в конце концов
удаётся установить, что [pic] имеет лишь один простой делитель программа шифрование данный является
простым.
В случае [pic] легко проверить, что сравнение из теоремы 3
равносильно хорошо известному в элементарной теории чисел сравнению
[pic], (13)
где [pic] - так называемый символ Якоби. Хорошо известно также, что
последнее сравнение выполняется не только для простых [pic], но программа шифрование данный для любых
целых [pic], взаимно простых с [pic]. Заметим также, что для вычисления
символа Якоби существует быстрый алгоритм, основанный на законе взаимности
Гаусса и. в некотором смысле, подобный алгоритму Евклида вычисления
наибольшего общего делителя. Следующий пример показывает. каким образом
выполнимость нескольких сравнений типа (13) даёт некоторую информацию о
возможных простых делителях числа [pic].
Пример (X. Ленстра). Пусть [pic] — натуральное число, [pic]. для
которого выполнены сравнения
[pic], (14)
а кроме того с некоторым целым числом [pic] имеем
[pic].
(15)
Как уже указывалось, при простом [pic] сравнения (14) выполняются для
любого [pic], взаимно простого с [pic], программа шифрование данный сравнение (15) означает, что
[pic] есть первообразный корень по модулю [pic]. Количество первообразных
корней равно [pic], т. е. достаточно велико. Таким образом, число [pic] с
условием (15) при простом [pic] может быть найдено достаточно быстро с
помощью разделы
консультирование организация
полиолефиновая пленка
жаростойкий краска
басейны intex
эксимер лазер
прайс сушильный машина
детский мир wow
оповещение
kyiv apartments service
измеритель фаза нуль
электрокардиограф
серверные корпус консольный переключатель
lida
здание лмк
пп-пленка
купить конвертер
время кострома
заказ обед
конкурентный анализ
схема зал вахтангова
корпоративный иностранный
100 девчонка одна лифт
вкус цвет
доставка кулеров
близорукость
здание лмк
холодильник оптом
организация видеоконференция
лад
pki
установка hotbird
сглаз
огнестойкий краска
пассажирский лифт
холодный обзвон
этикетировщик
электрокамин dimplex model magic (sp8)
лечение алкоголизма
скачать длинный нард
ножной пластырь
пежо 307
холодильник норд
аэрография
спецобувь
эфирный антенна
дезинфекция белье
хлеборезка ахм
карл гиря
очки защитный
герб вышивка
фейрверк праздник
дружкова кружка
купить актуатор
сушильный машина electrolux
бахила
грунт стяжка
thuraya sg 2510
очки ночной видение
кулер винчестер
штукатурка фасадный
банковский ячейка
сушильный машина electrolux
лечение слух
банковский ячейка
авиатакси
диспетчеризация
omega
варочный поверхность hansa
герб область
гуп ритуал
детский мир wow
газонокосилка stiga
варочный поверхность hansa
клеить 88 люкс
варочный поверхность hansa
иномарка
двухтарифные электросчетчик
курьерский почта
домашний очаг здоровье
анимация 3d график
изготовление презентация
купить электроэнцефалограф
изолента
стеклянный перегородка
шелковый ковры
дермато-венеролог
оформление свадеб
флаг заказ
зеркало багуа
кулер процессор
купить мобильник
брэнд
жила кострома
позитивный психология
кулер бесшумный
мва
учет данный автошкола
услуга кострома
вечерний платье
градирня вентиляторные
мини пекарня
ивановец
спецобувь
новосельский доломит
купить хлебопечку
man гильза
сенсорный экран устройство
программа шифрование данный