Автор работы: Пользователь скрыл имя, 04 Декабря 2011 в 02:24, лабораторная работа
Алгоритм шифрування RSA відноситься до криптографічних систем з відкритим ключем. Криптосистеми з відкритим ключем (асиметричні криптосистеми) були розроблені в другій половині сімдесятих років ХХ сторіччя. У асиметричних криптосистемах процедури прямого і зворотного криптоперетворення виконуються на різних ключах і не мають між собою очевидних і таких зв'язків, що легко простежуються, що дозволяють по одному ключу визначити інший. У такій схемі знання тільки ключа шифрування не дозволяє розшифрувати повідомлення, тому він не є секретним елементом шифру і зазвичай публікується учасником обміну для того, щоб будь-який охочий міг послати йому шифроване повідомлення.
Лабораторна робота №9
Тема:
«Вивчення асиметричної
криптографії на основі
шифросистеми RSA»
Мета: вивчення асиметричної криптографії на основі шифросистеми RSA.
Теоретична частина:
Алгоритм шифрування RSA відноситься до криптографічних систем з відкритим ключем. Криптосистеми з відкритим ключем (асиметричні криптосистеми) були розроблені в другій половині сімдесятих років ХХ сторіччя. У асиметричних криптосистемах процедури прямого і зворотного криптоперетворення виконуються на різних ключах і не мають між собою очевидних і таких зв'язків, що легко простежуються, що дозволяють по одному ключу визначити інший. У такій схемі знання тільки ключа шифрування не дозволяє розшифрувати повідомлення, тому він не є секретним елементом шифру і зазвичай публікується учасником обміну для того, щоб будь-який охочий міг послати йому шифроване повідомлення.
Принцип функціонування асиметричної криптосистеми полягає в наступному:
Пари { відкритий ключ; секретний ключ} обчислюються за допомогою спеціальних алгоритмів, причому жоден ключ не може бути виведений з іншого.
Авторами алгоритму RSA, запропонованого в 1977 р., є Р.Рівест (Rivest), А.Шамір (Shamir) і А.Адлеман (Adleman). Надійність алгоритму грунтується на трудності факторизації (розкладання на множники) великих чисел і труднощі обчислення дискретних алгоритмів (знаходження x при відомих а, b і n з рівняння ах = b (mod n) ).
Алгоритм RSA складається з трьох частин: генерації ключів, шифрування і дешифрування.
Криптосистема RSA
Схему шифрования данных RSA, предложили в 1978г. три автора: P. Ривест (R.Rivest), А. Шамир (A. Shamir) и Л. Адлеман (L. Adleman). Схема получила свое название по первым буквам фамилий его авторов. RSA стала первой полноценной схемой с открытым ключом, так как она может работать как в режиме шифрования данных, так и в режиме электронной цифровой подписи.
Криптостойкость RSA основана на трудоемкости разложения на простые множители (факторизации) больших чисел. Открытый и секретные ключи являются функциями двух больших (100 - 200 десятичных разрядов или даже больше) простых чисел. Предполагается, что задача восстановления текста по шифротексту эквивалентна задаче факторизации.
В криптосхеме RSA сообщение T и криптограмма ST принадлежат полной системе вычетов по (mod N):
ZN={0, 1, 2,..., N-1)
где:
N=P*Q
Здесь P и Q случайные большие простые числа. Для обеспечения максимальной безопасности выбирают P и Q равной длины и хранят в секрете.
Открытый ключ К1 выбирают случайным образом так, чтобы выполнялись условия:
К1– нечетное целое,
1< К1<φ(N),
НОД(К1,φ(N))=1;
φ (N)=(P-l)(Q-l),
где φ (N) – функция Эйлера.
Третье из указанных выше условий означает, что открытый ключ и функция Эйлера должны быть взаимно простыми.
Далее c помощью расширенного алгоритма Евклида вычисляется секретный ключ K2, такой, что K1*K2 ≡ l(mod φ(N))
Преобразование зашифрования определяет криптограмму ST через пару (открытый ключ К1, сообщение T) в соответствии со следующей формулой:
ST ≡ T K1 (mod N)
Обращение функции ST ≡ T K1 (mod N), т. е. определение значения T по известным ST, K1, и N практически не осуществимо при N=2512
Однако обратную задачу, т. е. задачу расшифрования криптограммы ST, можно решить, используя пару (секретный ключ K2, криптограмма ST) по следующей формуле:
T=(ST) K2 (mod N)≡ Т К1*K2 (mod N) ≡T,
т.к. К1* К2 ≡1 (mod φ(N)) ≡1.
Таким образом, получатель закрывает секретный ключ K2 и пару чисел (P, Q), произведение которых дает значение модуля N. С другой стороны, получатель открывает значение модуля N и открытый ключ К1.
Противнику известны лишь значения N и К1. Если бы он смог разложить число N на множители P и Q, то он вычислил бы значение функции Эйлера и определил значение секретного ключа.
Однако
разложение большого N на множители
вычислительно не осуществимо (при
условии, что длины P и Q составляют не
менее 100 десятичных знаков).
Процедуры зашифрования и расшифрования в схеме RSA
Предположим, что абонент А хочет передать абоненту В сообщение в зашифрованном виде, используя схему шифрования данных RSA. В таком случае абонент А выступает в роли отправителя сообщения, а абонент В – в роли получателя.
Как отмечалось выше, параметры шифрования в схеме RSA должен сформировать получатель сообщения, то есть абонент В. Рассмотрим последовательность действий абонента В и абонента А.
Действия абонента В (получателя):
1.
Выбирает два произвольных
2. Вычисляет значение модуля N = Р *Q .
3. Вычисляет функцию Эйлера φ(N ) = (Р – 1) * (Q – 1) .
4.
Выбирает случайным образом
а) К1– нечетное число
б) l< К1< φ(N ),
в) НОД(К1,( φ(N )) = 1 .
5. Вычисляет значение секретного ключа К2, используя расширенный алгоритм Евклида для сравнения
К2*К1≡ 1 (mod φ(N ))
т.е. К2 является обратным мультипликативным элементом для К1 по mod φ(N )
6. Пересылает абоненту А пару чисел (N, К1) по незащищенному каналу.
Действия абонента А (отправителя):
Если абонент А хочет передать абоненту В сообщение Т , он выполняет следующие шаги.
1. Разбивает исходный открытый текст T на блоки, каждый из которых может быть представлен в виде числа Ti, причем 1 ≤ Ti ≤ N-1, т.к. Ti Є ZN.
2.
Зашифровывает текст,
STi =TiK1 (mod N),
и отправляет криптограмму
ST1, ST2, ST3, … STi, …
абоненту В.
Практична частина:
Повідомлення, яке будемо шифрувати: 250.
р = 61, q = 31
n
= p*q=61*31 = 1891
Листинг программы:
Public Class UserForm
Dim p, q, n, phi, d, KeyE As Integer
Dim Crypt() As String
Dim TempText As String
'-----------------Нахождение
простого числа-------------------------
Private Function Simple(ByVal x As Integer) As Boolean
Dim
y As Integer = 2
While (x / 2 >= y) And (x Mod y > 0)
y += 1
End While
If x / 2 < y Then
Simple = True
Else
Simple = False
End If
End Function
'-----------------Алгоритм Евклида для нахождения НОД чисел --------------------'
Private Function GCD(ByVal a As Integer, ByVal b As Integer) As Integer
If b = 0 Then Return a
Return GCD(b, a Mod b)
End Function
Private Function GetD() As Integer
Randomize()
Dim
x As Integer
Do
x = CInt(127 * Rnd() + 2)
Loop Until (GCD(x, phi) = 1) And (x Mod 2) = 1
GetD = x
End Function
'-----------------Нахождение E расширенным алгоритмом Евклида-------------------'
Private Sub FindE(ByVal a As Integer, ByVal b As Integer, ByRef x As Integer, ByRef y As Integer)
Информация о работе Вивчення асиметричної криптографії на основі шифросистеми RSA