prod-1698-egorov.diplomnazashchitu

advertisement
ГБОУ Гимназия № 1505
«Московская городская педагогическая гимназия – лаборатория»
ДИПЛОМ
Современные алгоритмы шифрования и хэширования
автор: Егоров Андрей, 10 класс «Б»
руководитель: Г.А.Пяткина.
Москва
2013
СОДЕРЖАНИЕ
Введение
1. Шифрование
1.1. Понятие шифрования и его назначение
1.2. Понятия криптосистемы и криптостойкости шифра. Виды
криптосистем
1.3 Квантовая криптография
2. Современные алгоритмы шифрования. Алгоритм RSA
3. Хэширование
3.1. Понятие хэширования
3.2. Рассмотрение проблем хэширования и их решение
4. Практическая часть. Программа построения ключей RSA, шифровка и
расшифровка информации по алгоритму RSA
Заключение
Список литературы
Приложения
2
Введение
С древнейших времен у людей возникала необходимость сохранять и
передавать секретную информацию, но при этом не было абсолютной
уверенности в том, что сведения дойдут до адресата. Возникал вопрос о том,
как защитить информацию от посторонних, для этой цели были придуманы
шифры.
Первым известным науке шифрованным сообщением был египетский текст,
в котором вместо общепринятых иероглифов использовались другие
символы. Вскоре появилась целая наука о способах шифрования –
криптография.
В наше время люди также хотят быть уверенными в сохранности своей
информации, поэтому техники шифрования постоянно развиваются. На
сегодняшний день существует огромное количество систем шифрования, но
самые популярные способы зашиты информации – хеширование по
алгоритмам MD5, SHA1 и ГОСТ Р34.11-94 и шифрование с помощью
алгоритма RSA. Как правило, именно эти способы используются во многих
социальных сетях, почтовых службах и электронных кошельках.
Исследовательская работа состоит из введения, теоретической и
практической частей, заключения и списка литературы. Теоретическая часть
посвящена науке криптографии, криптоустойчивости шифров и
современным алгоритмам шифрования. Практическая часть представляет
собой программу для работы с алгоритмом шифрования RSA.
Актуальность диплома обусловлена востребованностью защиты информации
от неправомерного доступа в современном мире. Сложность данного раздела
программирования для учащихся позволяет использовать практическую
часть работы при изучении темы «криптография» в профильных подгруппах
по информатике.
Целью работы является изучение алгоритма шифрования RSA и алгоритмов
хеширования, объяснение принципа их действия, сравнение и выявление
сильных сторон и недостатков алгоритма RSA, создание программы
построения открытого и закрытого ключа RSA и программы для шифрования
и дешифрования с помощью этих ключей.
Для достижения данной цели необходимо решить следующие задачи:
 Изучение подобранной литературы по теме шифрования
 Изучение основ криптографии
 Изучение и сравнение современных алгоритмов шифрования
 Разработка программы связанной с алгоритмом RSA
 Написание отчета об исследовании
3
Сведенья о шифровании по алгоритму RSA и хешировании, описанные в
теоретической части, взяты из учебника по информатике К. Ю. Полякова и
книги по криптографии В. А. Романьков «Введение в криптографию».
В практическую часть войдет программа построения открытого и секретного
ключа RSA и программа для шифровки и дешифровки с помощью выше
упомянутого ключа, которые станут главным результатом моей дипломной
работы.
4
Глава 1. Шифрование
§1.1 Понятие шифрования и его назначение
Шифрование – преобразование текста с целью скрыть его содержание
от
несанкционированного
прочтения.
Наука о способах защиты текста посредством шифра возникла
практически в одно время с письменностью примерно пять тысяч лет назад и
получила название криптография. Первым известным науке шифрованным
сообщением был египетский текст, в котором вместо общепринятых
иероглифов использовались другие символы. В военном деле шифры
впервые были применены спартанским полководцем Лисандром, который
использовал шифр «Сцитала» для защиты своих сообщений. Также известен
«шифр Цезаря», который был введен Юлием Цезарем. На Руси шифрование
также было известно с древнейших времен, оно носило название тайнопись.
Позднее Петром I был придуман метод шифрования под названием
«цифирная азбука».
Первая книга по криптографии и методам шифровки была написана
аббатом Трителлием, жившем в 1462 – 1516 годах в Германии.
Стремительное развитие криптографии как науки произошло в двадцатом
веке, после публикации трудов Клода Шеннона, заложившего основы новой
науки - теории информации, в 1948 году.
Главным правилом шифрования является возможность однозначно
восстановить исходный текст (тот который был подвержен шифровке) по
шифротексу (текст который получен в результате применения алгоритма
шифрования). Другими словами функция шифрования должна быть
обратимой. Такая функция называется односторонней y=f(x), в которой
нахождение y по x осуществляется просто, а нахождение x по y является
сложной задачей. Сложная задача – понятие обозначающие, что для решения
5
такой задачи, человеку, обладающему финансовыми средствами и мощной
оргтехникой, требуется
время, за которое зашифрованная информация
перестанет быть актуальной.
Для того чтобы человек, которому предназначена информация смог ее
расшифровать, используются односторонние функции с секретом. Секрет –
ключ для дешифрования, с его помощью можно легко найти функцию
обратную к исходной и расшифровать текст за короткое время.
При шифровании информации вводится понятие алфавита. Алфавит совокупность знаков, среди которых есть буквы, цифры, знаки препинания,
специальные
знаки,
знаки
пробелов
и
другие
символы,
которые
используются для шифрования текста. Другое название алфавита – знаковая
система. Еще одно понятие – единицы текста. Единицей текста можно
считать знаки из которых он состоит, а иногда в роли таких единиц
выступают последовательности знаков (диграфы и триграфы). Также
вводится
понятие
блока
информации,
это
некоторая
конечная
последовательность единиц текста, обычно длинна блока фиксирована при
шифровке. В современном мире для шифрования используются электронные
устройства, а не ручной перевод текста как раньше, по этому каждый
алфавит имеет свою оцифровку. Оцифровка – представление символов
алфавита в виде последовательности цифр.
6
§1.2 Понятия криптосистемы и криптостойкости шифра
Виды крипто систем
Криптосистема
(система
шифрования)
–
известный
способ
шифрования, обладающий сменными элементами – ключами. Чаще всего
рассматривают ключ шифрования и дешифрования.
Не редко случаются попытки получения информации людьми не
обладающими ключом расшифровки – взлом или раскалывание текста.
Взлом не конкретного текста, а всей системы и получение доступа ко всем
секретным данным называется взломом системы шифрования.
Криптостойкость
–
защищенность
системы
шифрования
от
возможного взлома. Криптостойкость зависти от правильности выбора
способа шифровки данных и от выбора сложности ключей.
Криптосистемы делятся на несколько видов:
- Симметричной или системой с секретным ключом называется
система, в которой ключ для шифровки информации и ключ для дешифровки
находятся в секрете. К явным плюсам такой системы относятся скорость
передачи данных, простота операций, ключ меньшей длинны чем в открытых
системах для сопоставимой надежности. Существенным недостатком
является сложность сохранения ключа в тайне при работе большого
количества пользователей.
-
Асимметричной или системой с открытым ключом называется
система, в которой секретным является только ключ, служащий для
расшифровки данных. Ключом шифровки может воспользоваться любой
желающий, так как ключ свободно распространяется. К плюсам такой
системы по сравнению с симметричной системой относится то, что нет
необходимости передавать отправителю информации ключ для шифровки по
секретным каналам связи или при личной встрече по договоренности. Эти
плюсы становятся особенно актуальны, когда информация передается между
7
большим количеством людей, в таком случае передать секретный ключ
каждому пользователю становиться практически невозможно.
На
схеме
1
представлен
алгоритм
шифрования
сообщения,
передаваемого от одного пользователя к другому, и процесс дешифровки.
Центр сертификации
Закрытый ключ дешифровки
Алгоритм
расшифровки
Открытый ключ шифровки
Дешифрованн
ое сообщение
Зашифрованное
Алгоритм шифровки
Передаваемое сообщение
сообщение
Канал связи
Отправитель
Зашифрованное
сообщение
Получатель
Схема 1
8
§1.3 Квантовая криптография
Данный раздел науки о защите информации основан на принципах
квантовой
физики. Информация передается посредством
физических
объектов, таких как электроны в электрическом токе или фотоны в линиях
волоконно-оптической связи. Перехватывать данные в такой системе
незаметно невозможно, так как параметры такой системы взаимно связанны.
При попытке измерения одного из параметров, взломщик невольно изменяет
другой.
Такая
взаимосвязанность
некоторых
параметров
физических
объектов известна как принцип неопределенности, сформулированный В.
Гейзенбергом в 1927 г.
Основываясь на данной теории можно создать
систему связи в которой законный пользователь моментально будет узнавать
о попытке прослушивания канала связи и будет иметь возможность
определить
уровень
активности
злоумышленника
по
интенсивности
изменения параметров физических носителей информации. На схеме 2
представлен правильно функционирующий канал связи, а на схеме 3 такой
же канал с именными взломщиком параметрами.
Схема 2
Схема 3
Отправитель
Отправитель
Источник сигнала
Источник сигнала
Носитель
сигнала
Носитель сигнала
с измененными
параметрами
Носитель
сигнала
Злоумышленник
Приемник сигнала
Приемник сигнала
Получатель
Получатель
9
Квантовая криптография - мало развитый раздел науки на сегодняшний день.
С появлением квантовых компьютеров необходимой мощности, квантовая
защита
информации
использования
и
станет
обеспечит
достаточно
более
простой
высокий
для
повсеместного
уровень
защищенности
информации.
10
Глава 2. Современные алгоритмы шифрования
Алгоритм RSA
Алгоритм RSA Одина из первых криптосистем с открытым ключом,
появившаяся в 1997 году и названная в честь ее создателей: Rivest, Shamir,
Adleman. Как и в любой системе с открытым ключом для зашифровки
информации в данном алгоритме используется односторонняя функция. Для
эффективной работы системы необходимо выполнение следующих условий:
1)
вычисление
значения
для
y=f(x)
любого
аргумента
x
выполняется за реальное время. (понятие реальное время
зависит
от
важности
решаемой
задачи,
мощности
используемого процессора и т. п.)
2)
нахождение элемента x по известному элементу y так что
верно равенство y=f(x) – трудная задача. (трудная задача –
задача
на
решение
которой
уйдет
время
за
которое
зашифрованная информация теряет свою актуальность)
3)
существует такой секрет (ключ) с помощью которого
получатель зашифрованного сообщения с легкостью находит
аргумент x из уравнения f(x)=y.
На первый взгляд условия 2 и 3 противоречат друг другу, так как
подходящих функций крайне мало. Функция, отвечающая сразу трем
условиям, имеет название односторонней функции с секретом. Например,
алгоритма
RSA
основан
на
сложности
разложения
на
множители
произведения двух больших простых чисел.
Основным преимуществом такой асимметричной криптосистемы
является отсутствие необходимости предварительной передачи ключа
отправителя с сохранением его секретности.
11
Работа алгоритма RSA:
1) Выбираются два больших простых числа P и Q. Данные числа
держатся в секрете.
2) Находится произведение выбранных чисел N=P*Q. N является
открытым элементом.
3) Вычисляется функция Эйлера F(N)=(P-1)(Q-1), выбирается такое число
E, что НОД (E) и (F(N)) = 1. Значение F(N) секретно.
4) Взаимная простота E и F(N) позволяет вычислить число D, такое, что
выполняется равенство E*D=1(mod F(N)).
5) Далее производится шифровка оцифрованного сообщения по формуле
y=xE(mod N). x – исходное значение оцифрованного символа, y –
зашифрованное значение того же символа.
6) Дешифровка проходит после передачи сообщения по формуле
x=yD(mod N). Значение х при правильной передаче данных получается
равное исходному.
Команда mod находит остаток от деления А на В.
Выбирая число D как ключ для дешифровки, мы руководствуемся
теоремой Лангранжа (французский математик, один из ведущих ученых
19 века), согласно которой для любого x мы имеем равенство xF(N)=1(mod
N),
создается
впечатление,
что
число
D
единственный
ключ,
дешифрирующий все тексты, но это не так. Если элемент x имеет некий
порядок g, то есть равенство mg=1(mod N) где g – наименьшее
натуральное число с указанным свойством, следовательно расшифровать
текст можно путем возведения y в степень f такую, что Ef=1(mod g). При
такой операции происходит замена F(N) на g, в таком случае f может
оказаться гораздо меньше чем D и подбор такого элемента не займет
много времени. Однако при использовании больших исходных чисел,
даже подборка элемента f не всегда возможна.
12
Криптостойкость алгоритма RSA:
Высокая степень надежности данной системы обусловлена тем, что на
данный момент нет ни одного эффективного алгоритма позволяющего
раскладывать в общем случае произведение на простые множители. Но так
же не существует и доказательств невозможности существования такого
алгоритма, если алгоритм, удовлетворяющий данным условиям будет
найден, то алгоритм RSA моментально потеряет свою секретность, ведь зная
исходные числа P и Q для взломщика не составит труда вычислить функцию
Эйлера, а затем секретный ключ D.
Цифровая подпись:
Цифровая подпись – набор символов, полученный в результате
шифрования с помощью личного секретного ключа отправителя.
Цифровая подпись служит для установления авторства информации и
защиты ее от несанкционированного изменения. Получение цифровой
подписи осуществляется так же, как и шифрование целого текста по
алгоритму RSA. Но в отличие от шифрования текста каждый пользователь
использует не общепринятый среди пользователей закрытый и открытый
ключи, а свой личный закрытый. А для расшифровки цифровой подписи
получатель использует личный открытый ключ отправителя. Цифровая
подпись на данный момент признается полным аналогом обычной подписи
человека в большинстве стран мира.
13
Глава 3. Хэширование
§3.1 Понятие хэширования
Хэширование – преобразование символьной строки любой длинны в число.
Название происходит от английского слова Hash – мешанина, крошить. В
русском языке встречаются названия хэш, хэш-сумма, хэш-код и хэшфункция. Простейшая хэш-функция преобразует строку символов путем
нахождения суммы символов. Например, строка A123 после такого
преобразования примет вид 215. Символ «А» имеет обще принятый код - 65,
«1» - 49, «2» - 50, «3» - 51. Складываем коды символов и получаем число 215
(65+49+50+51=215).
Отличительная
особенность
хэширования
–
необратимость. Получив хэш, невозможно определить из каких символов
состояла исходная строка.
Хэш-функции имеют широкое распространение в современных системах
шифрования, так как обладают неоспоримым преимуществами – малым
размером информации после ее шифрования и необратимостью самой
функции. Например, хэш-коды используются при авторизации на различных
Интернет ресурсах. Хранение паролей в исходном виде делает систему
слишком не надежной, по этому пароль хранится в виде хэш-суммы. При
введении пароля пользователем, повторно выполняется хэширование
введенных данных, если новый хэш совпадает с тем, что занесен в базу
данных, то пользователь получает доступ. Такой способ хранения паролей
защищает систему от утечки данных. Даже если взломщик получит доступ к
хэшам, он не сможет восстановить по ним пароли и получить доступ к
аккаунтам законных пользователей. Для получения достаточно надежного
хэша, исходную строку символов которого трудно подобрать за приемлемый
срок, требуется не менее 9-10 исходных символов. Раньше этот порог
14
составлял 6-8 символов, но с появлением мощных видеокарт хэш-функция
может обробатываться около миллиарда раз в секунду, следовательно,
подбор строки с нужной суммой не займет слишком много времени.
Например на расшифровку 8 символьного пароля уйдет не более 60 часов.
1. Пароль может содержать строчные, заглавные буквы и числа, что
составляет 62 (26+26+10) возможных символа.
2. 8-ми символьная строкам имеет 628 возможных вариантов. То есть
чуть более 218 трлн.
3. Со скоростью 1 млрд. хэшей в секунду, потребуется около 60 часов
для подбора пароля.
Следует использовать числа и буквы (строчные и заглавные), а так же
специальные символы, такие как подчеркивания. Строка не должна быть
часто используемым словом или осмысленным словом вообще, чтобы
исключить метод взлома подбором самых часто употребляемых слов. На
данный момент техническое развитие
все же позволяет за большой
временной отрезок подобрать строку с нужной хэш-суммой. Однако, если в
исходной строке больше 16 символов, то такая задача становиться
невозможной.
Второе наиболее распространенное применение хэширование –
проверка правильности данных при передаче. Перед отправкой информации
составляется ее хэш-сумма, затем после передачи, получатель составляет
хэш-сумму полученных данных, и если хэши получателя и отправителя
совпадают, то это значит, что передача прошла без потери или случайной
замены фрагментов исходного текста.
15
§3.2 Проблемы хэширования и их решение
Основная проблема хэш-функций – коллизия (от английского collision –
столкновение), совпадение сумм у двух символьных строк. Коллизии
невозможно избежать, так как при хэширование происходит сжатие
символьной строки во много раз. Однако, чем больше символов в исходной
строке, например пароле, тем меньше вероятность существования строки с
таким же контрольным числом, получаемым после хэширования. Обычно для
хранения хэша в различных системах отводится 128, 160 или 256 бит. Один
символ в строке в среднем занимает 16 бит, то хэш занимающий 256 бит,
может содержать строку длинной до 16 символов. Чем больше размер хэша
тем сложнее злоумышленнику подобрать строку с таким же контрольным
числом если он смог узнать хэш. На данный момент не существует алгоритма
для подбора строки. Подбор проводиться в ручную, перебором всех
возможных вариантов, этот метод получил название «метод грубой силы»
(от английского brute force). Данный метод крайне не эффективен, если
исходная строка состояла из 10 символов и включала строчные буквы,
символы и цифры, то при скорости 10 млн. паролей в секунду подбор грубой
силой займет около 2000 лет.
Для дополнительной надежности хэш-функций к исходным данным
добавляются случайные символьные строки, они не являются секретными и
хранятся в открытом доступе. Такое добавление символов получило название
– Хэширование с солью. Оно усложняет восстановление исходной строки по
хэшу, а иногда делает его совсем не возможным.
Вторая наиболее важная проблема хэш-кодов – радужные таблицы.
Данные таблицы содержат в себе уже готовые значения хэш-функций, для
наиболее распространенных слов и строк символов. Такие таблицы могут
содержать тысячи хэшей и значительно упростить взлом информационной
системы. Решить эту проблему позволяет «соль», если к строке, которая была
16
занесена в радужную таблицу, добавить соль, то строка не будет найдена.
Однако «соль» находится в открытом доступе, символы из которой состоит
«соль» может посмотреть любой желающий. Злоумышленнику приходиться
изменять таблицу, найдя хэш-сумму «соли» он вставляет ее в таблицу, и
тогда нужная сумма может быть найдена. Используя уникальную «соль» для
каждого пользователя (например - id) можно исключить вариант добавления
хэш-суммы в радужную таблицу. Теперь взломщику придется составлять для
каждого хэш-кода отдельную таблицу, учитывая соль этого хэша, что
нерационально со стороны злоумышленника.
17
Глава 4.
Практическая часть. Программа построения ключей RSA, шифровка и
расшифровка информации по алгоритму RSA
Основной проблемой при работе с шифрованием информации является
использование больших чисел, не позволяющих шифровать информацию
вручную за малый промежуток времени. Целью практической части является
написание программы по построению открытого и секретного ключей RSA, а
также шифрования и расшифровки числовой информации подающейся в
программу пользователем. Средой для реализации данной программы
выбран язык программирования Delphi. Данная среда является языком
высокого уровня объектно-ориентированного программирования, проста в
изучении и дает возможность наглядного представления результатов.
Проектная работа состоит из формы с размещенными на ней визуальными
объектами (кнопки, поля ввода/вывода) и программного кода привязанного к
каждому из объектов.
Рис.1
18
На рисунке 1 представлен общий вид проекта в среде Delphi. При нажатии
кнопки «построение ключей» программа находит два простых числа,
находит их произведение, вычисляет функцию Эйлера, подбирает секретный
ключ D, при котором выполняется равенство E*D=1(mod F(N)) (подробнее о
построении ключей см. стр. 12) и выводит уже готовые открытый ключ (E,N) и закрытый – (D,N). Далее пользователь вводит числа, которые
требуется зашифровать через пробел в первое поле (числа вводятся в
диапазоне от 1 до 53, чтобы избежать работы с большими числам). После
нажатия кнопки «зашифровать», в поле два выводиться результат работы
программы – числа, зашифрованные по алгоритму RSA. Человек, не
владеющий парой чисел N, D не может восстановить исходные числа по
зашифрованным.
При
нажатии
кнопки
«расшифровать»
программа
совершает процесс расшифровки тех числе, которые находятся в поле два (в
поле два числа могут быть получены путем ввода вручную пользователем, а
не только как результат шифрования). В третье поле выводится результат
расшифровки чисел. Кнопка «очистить поле ввода» обнуляет все три поля в
программе и позволяет избежать очистки полей в ручную. Кнопка «выход»
отвечает за закрытие программы. Далее на рисунках приведены блок-схемы
работы каждой из выше перечисленных кнопок.
19
начало
Randomize;
Запуск генератора
случайных чисел
Y:=0;
Y1:=0
a:=random(9)+3;
Присвоение случайного
значения a
b:=random(9)+3;
Присвоение случайного
значения b
2,
Trunc(Sqrt(a)),
1
Break;
Прерывание
цыкла
A mod I <>
0
Y:=1
нет
да
20
2,
Trunc(Sqrt(b)),
1
Break;
Прерывание
цыкла
b mod I <>
0
Y1:=1
нет
да
Y=0
Y1=0
n:=a*b;
f:=(a-1)*(b-1);
нахождение
ф. эйлера
e:=random(7)+2;
присвоение
случайного
значения е
z1:=NOD(e,f);
нахождение НОД
для e, f
Z1=1
21
d:=0;
d:=d+1;
(d*e)
mod f =
1;
Вывод n
Вывод e
Вывод d
конец
Кнопка «построение ключей»
22
начало
l:= edit1.Text;
считывание
данных
вводимых
пользователем
l1:=l;
q:=0;
w:= pos(' ',l1);
l2:=copy(l1,1,w-1);
q:=q+1;
g[q]:=strtoint(l2);
delete(l1,1,w);
pos(' ',l1)<>0
q:=q+1;
g[q]:=strtoint(l1);
23
l:='';
1,q,1
j:=1;
1,e,1
j:=(j*g[p])
g[p]:=j;
l1:=inttostr(g[p]);
l:=l+l1+' ';
delete(l,length(l),1);
edit2.Text:=l;
конец
Кнопка «зашифровать
24
начало
l:='';
очистка строки
1,q,1
j:=1;
1,d,1
j:=(j*g[p])
g[p]:=j;
l1:=inttostr(g[p]);
l:=l+l1+' ';
edit3.Text:=l;
конец
Кнопка «расшифровать»
25
начало
Close;
Завершение
программы
конец
Кнопка «выход»
начало
Edit1.text:=’’;
Очистка первого
поля ввода
Edit21.text:=’’;
Очистка второго
поля ввода
Edit3.text:=’’;
Очистка третьего
поля ввода
конец
Кнопка «очистить поле ввода»
26
Вывод
На рисунке 2 представлен вид программы после выполнения алгоритмов
шифровки и дешифровки.
Рис. 2
Проведем проверку верности алгоритма шифровки по основной формуле
y=xE(mod N).
2^7 = 128; 128 mod 77 = 51;
получаем число, равное числу, подсчитанному программой. Проводим
проверку для других чисел.
3^7 = 2187; 2187 mod 77 = 31;
4^7 = 16384; 16384 mod 77 = 50;
Числа, вычисленные по формуле, совпадают с результатами программы,
следовательно, алгоритм шифрования работает верно. Числа, полученные в
27
результате расшифровки соответствуют исходным, следовательно, алгоритм
корректно производит вычисления. Для точности можно провести проверку
по формуле x=yD(mod N).
51^43 mod 77 = 2;
31^43 mod 77 = 3;
60^43 mod 77 = 4;
Данные проверки позволяют убедиться, что программа работает верно, для
выбранного диапазона чисел. Данный вариант программы имеет отличие от
общепринятой реализации в виде уменьшенного количества ключей,
используемых в алгоритме (по современным стандартам под ключи
отводится не менее 1024 бит). Полный код программы представлен в разделе
приложения.
28
Заключение
В ходе исследовательской работы была выполнена поставленная цель –
изучение
алгоритма
шифрования
RSA
и
алгоритмов
хеширования,
объяснение принципа их действия, сравнение и выявление сильных сторон и
недостатков алгоритма RSA, создание программы для построения ключей
RSA и
реализации
алгоритма шифрования. Задачи, решенные для
достижения поставленной цели:
 Изучение литературы по теме шифрование и хеширование
 Написание теоретической части посвященной алгоритму RSA и
хэшированию
 Построение модели программы в среде объектно-ориентированного
программирования Delphi
 Подведение итога работы программы
Первая часть работы включает теорию по теме исследовательской работы.
В
ней
представленная
общая
информация
по
темам
шифрование,
криптография и квантовая криптография. Подробно описанная теория по
алгоритму RSA, общая информация по теме хэширование.
Вторая часть,
основанная на теории представленной в первой части, демонстрирует
верность работы выбранных алгоритмов, и правильность логических
утверждений на которых они основаны. Тема остается актуальной до
момента прекращения использования алгоритма RSA в мире.
29
Список литературы
1. Бегунц Александр Владимирович, к.ф.-м.н., доцент мех-мата МГУ.
Лекция
«Криптография:
вчера,
сегодня,
завтра» .
http://teacher.msu.ru/school/proforientir/math/crypto ссылка действительна на
09.02.2014.
2. Галисеев Г.В. Программирование в среде Delphi 7. Самоучитель.
:-
М.: Издательский дом "Вильямс", 2003. - 288 с. : ил.
3. Иван
Саломатин.
О
хэшах
и
безопасном
хранении
http://web-bricks.ru/comments/about_hashes_and_passwords/
паролей.
ссылка
действительна на 08.12.2013.
4. Поляков К.Ю. учебник по информатике для 10-11 классов. : -М.:
Издательский дом "Бином", 2013.
5. Романьков В.А. Введение в криптографию. Курс лекций/В.А. Романьков М.: Форум, 2012. - 240с.
30
Приложение
Программный код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label3: TLabel;
Label5: TLabel;
Label6: TLabel;
Button3: TButton;
Button5: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
31
Edit3: TEdit;
Label4: TLabel;
Button4: TButton;
Label7: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a,b,r,f,n,e,d,x,x1,r1,e1,z1,y,y1,q,h,j:Integer;
l:string;
g:array[1..1000] of integer;
g1:array[1..1000] of integer;
implementation
{$R *.dfm}
32
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
function NOD(a, b:integer):integer;
Begin
While a<>b do
If a>b then a:=a-b
else b:=b-a;
NOD:=a;
End;
begin
Randomize;
repeat
Repeat
y:=0;
y1:=0;
a:=random(9)+3;
b:=random(9)+3;
For I := 2 To Trunc(Sqrt(a)) Do
If a Mod I <> 0 Then continue else begin Y:=1; break; end;
For I := 2 To Trunc(Sqrt(b)) Do
If b Mod I <> 0 Then continue else begin Y1:=1; break; end;
until (y=0)and(y1=0);
n:=a*b;
f:=(a-1)*(b-1);
33
repeat
e:=random(7)+2;
z1:=NOD(e,f);
until z1=1 ;
d:=0;
repeat
d:=d+1;
Until (d*e) mod f = 1;
Until d<>e;
Label3.Caption:='открытый ключ n = '+IntToStr(n);
Label5.Caption:='открытый ключ e = '+IntToStr(e);
Label6.Caption:='закрытый ключ d = '+IntToStr(d);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
34
edit3.Text:='';
end;
procedure TForm1.Button3Click(Sender: TObject);
var w,p: integer;
l1,l2: string;
begin
l:= edit1.Text;
l1:=l;
q:=0;
while pos(' ',l1)<>0 do begin
w:= pos(' ',l1);
l2:=copy(l1,1,w-1);
q:=q+1;
g[q]:=strtoint(l2);
delete(l1,1,w);
end;
q:=q+1;
g[q]:=strtoint(l1);
l:='';
for p:=1 to q do begin
35
j:=1;
for h:=1 to e do j:=(j*g[p]) mod n;
g[p]:=j;
l1:=inttostr(g[p]);
l:=l+l1+' ';
end;
delete(l,length(l),1);
edit2.Text:=l;
end;
procedure TForm1.Button4Click(Sender: TObject);
var p: integer;
l1: string;
begin
l:='';
for p:=1 to q do begin
j:=1;
for h:=1 to d do j:=(j*g[p]) mod n;
g[p]:=j;
l1:=inttostr(g[p]);
l:=l+l1+' ';
end;
36
edit3.Text:=l;
end;
end.
37
Download