СПИСОК ЛИТЕРАТУРЫ
1. Баричев С.Г., Серов Р.Е. Основы современной криптографии: Учебное
пособие. - М.: Горячая линия - Телеком, 2002.
2. Болотов А.А., Гашков С.Б., Фролов А.Б. Элементарное введение в
эллиптическую криптографию. Протоколы криптографии на эллиптических
кривых. -М.: КомКнига, 2006.
3. Рябко Б.Я., Фионов А.Н. Криптографические методы защиты информации. -
М.: Горячая линия - Телеком, 2005.
4. Смарт Н.Г. Криптография. -М.: Техносфера, 2005.
5. Кнепп Э. Эллиптические кривые. -М.: Факториал Пресс, 2004.
6. Жданов О.Н., Чалкин В.А. Эллиптические кривые. Основы теории и
криптографические приложения. -М.: Кн. дом «ЛИБРОКОМ», 2012.
7. Соловьев Ю.П. и др. Эллиптические кривые и современные алгоритмы
теории чисел. -Москва-Ижевск: Ин-т компьютерных исследований, 2003.
8. Коблиц Н. Курс теории чисел и криптографии — Москва: Научное изд-во
ТВП, 2001. — 254 c.
9. Панасенко С.П. Алгоритмы шифрования. Специальный справочник. – СПб.:
БХВ-Петербург, 2009 – 576 с.
10. Жельников В. Криптография от папируса до компьютера. – М.: ABF, 1996. –
336с.
11. Кассами Т., Токура Н., Ивадари Е., Инагаки Я. Теория кодирования/ Пер. с
япон. под ред. Б. С. Цыбакова и С. И. Гельфанда. – М.: Мир, 1978. – 576с.
12. Оков И.Н. Криптографические системы защиты информации. – СПб.: ВУС,
2001. – 236с.
13. Романец Ю.В., Тимофеев П.А., Шаньгин В.Ф. Защита информации в
компьютерных системах и сетях/ Под ред. В.Ф. Шаньгина. – М.: Радио и
связь, 2001. – 376с.
47
14. Ю.А.Гатчин, А. Г. Коробейников. Основы криптографических алгоритмов
Учебное пособие. СПб: ГИТМО (ТУ), 2002. 29 с.
15. Ленг С. Эллиптические функции - М.: Наука, 1984. — 312 с.
16. Н. П. Варновский. Математическая криптография. Несколько этюдов. - М.,
2003, с. 98–121.
17. О. Н. Василенко. Теоретико-числовые алгоритмы в криптографии. МЦНМО,
М., 2003 (1-е изд.)
18. Б. Шнайер. Прикладная криптография. Протоколы, алгоритмы, исходные
тексты на языке Си. Издательство ТРИУМФ, М., 2002.
19. Х. К. А. ван Тилборг. Основы криптологии. Профессиональное руководство
и интерактивный учебник. – М., Мир, 2006.
20. Жиль Брассар. Современная криптология. Руководство. Пер. с англ. М.:
"Полимед", 1999. - 176 с
21. Koblitz N. A course in number theory and cryptography. Graduate texts in math.
114 New-York: Springer-Verlag, 1994.
22. ElCamal. A public-key cryptosystem and a signature scheme based on discrete
logarithms. IEEE Transaction on Informatoin Theory, 1985
23. Myasnikov A., Shpilrain V., Ushakov A. Group-based cryptography.Advanced
courses in mathematics CRM Barselona. Basel-Boston-Berlin: Birkhauser, 2008.
183 с.
48
ПРИЛОЖЕНИЕ
Алгоритм шифрования и дешифрования Эль-Гамаля, Алгоритм шифрования и
дешифрования Диффи-Хеллмана.
Входные параметры – текст из файла
Выходные параметры – расшифрованный текст
Алгоритм Атаки на выбранные алгоритмы
Imports
System.Globalization
Imports
System.Numerics
Module
Module1
Dim
a
As
Integer
Dim
b
As
Integer
Dim
p
As
String
Dim
x1
As
Integer
Dim
y1
As
Integer
Dim
x2
As
Integer
Dim
y2
As
Integer
Dim
x3
As
Integer
Dim
y3
As
Integer
Dim
chislitel
As
Integer
Dim
znamenatel
As
Integer
Dim
k
As
Integer
Dim
r
As
Integer
Dim
m
As
String
Function
obratni(
ByVal
t
As
Integer
)
Dim
i
As
Integer
= 0
Do
While
True
If
i * t
Mod
p = 1
Then
Exit Do
Else
i += 1
End
If
Loop
Return
i
End
Function
Sub
udvoenie(
ByVal
x1
As
Integer
,
ByVal
y1
As
Integer
)
Dim
i
As
Integer
= 0
chislitel = 3 * x1 * x1 + a
znamenatel = 2 * y1
''Нахождение обратного числа знаменателя
i = obratni(znamenatel)
''Вычисление углового коэффициента
k = (chislitel) * (i)
k = k
Mod
p
49
x3 = (k * k - 2 * x1)
''Проверка на попадание в поле координаты x
If
x3 < 0
Then
Do
While
x3 < 0
x3 += p
Loop
Else
x3 = x3
Mod
p
End
If
y3 = (k * (x1 - x3) - y1)
''Проверка на попадание в поле координаты y
If
y3 < 0
Then
Do
While
y3 < 0
y3 += p
Loop
Else
y3 = y3
Mod
p
End
If
End
Sub
Sub
slojenie(
ByVal
x1
As
Integer
,
ByVal
y1
As
Integer
,
ByVal
x2
As
Integer
,
ByVal
y2
As
Integer
)
chislitel = y2 - y1
If
chislitel < 0
Then
Do
While
chislitel < 0
chislitel += p
Loop
End
If
znamenatel = x2 - x1
If
znamenatel < 0
Then
znamenatel += p
End
If
Dim
i
As
Integer
= 0
''Нахождение обратного числа знаменателя
i = obratni(znamenatel)
''Вычисление углового коэффициента
k = (chislitel) * (i)
k = k
Mod
p
x3 = (k * k - x1 - x2)
''Проверка на попадание в поле координаты x
If
x3 < 0
Then
Do
While
x3 < 0
x3 += p
Loop
Else
x3 = x3
Mod
p
End
If
y3 = (k * (x1 - x3) - y1)
''Проверка на попадание в поле координаты y
If
y3 < 0
Then
50
Do
While
y3 < 0
y3 += p
Loop
Else
y3 = y3
Mod
p
End
If
End
Sub
Sub
Main()
Dim
fileReader
As
String
Dim
dlina_file
As
Integer
Dim
o
As
Integer
fileReader =
My
.Computer.FileSystem.ReadAllText(
"C:\users\alekud\шифр.txt"
)
dlina_file = Len(fileReader)
Dim
mass(dlina_file + 1)
As
String
Dim
y
As
Integer
= 0
For
o = 1
To
dlina_file
If
(Asc(fileReader.Chars(o - 1))) = 10
Or
(Asc(fileReader.Chars(o - 1))) = 13
Then
y += 1
Else
If
Asc(fileReader.Chars(o - 1)) = 0
Then
Exit For
Else
m += Str(Asc(fileReader.Chars(o - 1)))
End
If
End
If
Next
Dim
soobsh
As
String
soobsh = Int(m)
dlina_file = Len(soobsh)
Dim
tim
As
New
System.Timers.
Timer
Dim
start
As
String
Dim
finish
As
String
''Описание эллиптической кривой
a =
Integer
.Parse(
"-3"
)
b =
Integer
.Parse(
"60"
)
p = 59
Dim
dlina_p
As
Integer
dlina_p = Len(p)
''Точка на эллиптической кривой
x1 = 36
y1 = 23
Dim
Gx, Gy
As
Integer
Gx =
Integer
.Parse(
"36"
)
Gy =
Integer
.Parse(
"23"
)
Dim
inv
As
Integer
Dim
disk
As
Integer
disk = (4 * a * a * a + 27 * b * b)
Do
While
disk < 0
disk += p
Loop
51
disk = disk
Mod
p
disk = obratni(disk)
inv = -1728 * 4 * a * a * a * disk
Do
While
inv < 0
inv += p
Loop
inv = inv
Mod
p
''шифр эль гамеля на эллиптических кривых
''выбор секретного ключа
Dim
rx
As
Integer
Dim
ry
As
Integer
Dim
Cb
As
Integer
= 0
Dim
u
As
Integer
= 0
Dim
l
As
String
Console
.WriteLine(
"Шифр эль гамеля на эллиптических кривых "
)
Console
.WriteLine()
Do
While
True
Console
.WriteLine(
"Введите секретный ключ Cb, 0
, inv)
Cb =
Console
.ReadLine()
Console
.WriteLine()
If
Cb < inv
And
0 < Cb
Then
Console
.WriteLine(
"Выбран секретный ключ Cb={0}"
, Cb)
Exit Do
Else
Console
.WriteLine(
"Вы ввели недопустимые значени"
)
Console
.WriteLine()
End
If
Loop
start = Timer
tim.Start()
''Вычисляем открытый ключ
udvoenie(x1, y1)
For
i = 0
To
Cb - 3
slojenie(x1, y1, x3, y3)
Next
finish = Timer
start = finish - start
tim.Stop()
Console
.WriteLine(
"Время вычисления открытого ключа {0}"
, start)
Console
.WriteLine(
"Открытый ключ Db = [Cb]G = ({0}, {1}) выбран"
, x3, y3)
Console
.WriteLine()
''Вводим сообщения которое будем кодировать
Dim
Dbx, Dby
As
Integer
Dbx = x3
Dby = y3
Dim
n
As
Integer
52
''выбор случайного числа
Do
While
True
Console
.WriteLine(
"Выберите случайное число u
, inv)
u =
Console
.ReadLine()
Console
.WriteLine()
If
u < inv
Then
Console
.WriteLine(
"Выбрано число u={0}"
, u)
Console
.WriteLine()
Exit Do
Else
Console
.WriteLine(
"Вы ввели недопустимые значени"
)
Console
.WriteLine()
End
If
Loop
udvoenie(x1, y1)
For
i = 0
To
u - 3
slojenie(x1, y1, x3, y3)
Next
Console
.Write(
"Вычисляем R=[u]G "
)
Console
.WriteLine(
"R=[u]G= ({0}, {1}) "
, x3, y3)
rx = x3
ry = y3
udvoenie(Dbx, Dby)
For
i = 0
To
u - 3
slojenie(Dbx, Dby, x3, y3)
Next
Console
.Write(
"Вычисляем P = [u]Db "
)
Console
.WriteLine(
"P = [u]Db = ({0}, {1}) "
, x3, y3)
Do
While
True
''Шифруем
Dim
flaf3
As
Boolean
=
False
Dim
shifr
As
String
For
i = n
To
dlina_p - 1 + n
If
n >= dlina_file
Then
Exit Do
If
flaf3
Then
shifr += soobsh(i)
Else
shifr = soobsh(i)
flaf3 =
True
End
If
Next
53
l += Str(shifr * x3
Mod
p)
n += dlina_p
Loop
''Передаем получателю R и l
Console
.WriteLine(
"Шифровка {0}"
, l)
''Расшифровка
''Умножаем открытый ключ на R
Console
.WriteLine(
"Пробуем расшифровать"
)
Console
.WriteLine()
x1 = rx
y1 = ry
udvoenie(x1, y1)
For
i = 0
To
Cb - 3
slojenie(x1, y1, x3, y3)
Next
Dim
pl
As
Integer
= 0
Do
While
True
If
pl * x3
Mod
p = 1
Then
Exit Do
Else
pl += 1
End
If
Loop
Do
While
True
''Шифруем
Dim
flaf3
As
Boolean
=
False
Dim
shifr
As
String
For
i = n
To
dlina_p - 1 + n
If
n >= dlina_file
Then
Exit Do
If
flaf3
Then
shifr += l(i)
Else
shifr = l(i)
flaf3 =
True
End
If
Next
m += Str(shifr * x3
Mod
p)
n += dlina_p
Loop
start = start + start * 0.2
Console
.WriteLine(
"Время для расшифровки {0}"
, start)
Console
.WriteLine(
"Расшифрованное сообщение - {0}"
, m)
Console
.ReadKey()
'' Console.Clear()
54
'' '' Шифр Эль-Гамеля
Dim
mlg
As
Integer
= 5
Dim
plg
As
Integer
Dim
glg
As
Integer
Console
.WriteLine(
"Введите простое число"
)
Console
.Write(
"p="
)
plg =
Console
.ReadLine()
Dim
flag
As
Boolean
flag =
True
Dim
rez
As
Integer
Dim
x
As
Integer
For
i = 2
To
plg - 1
If
plg
Mod
i = 0
Then
Console
.WriteLine(
"Это не простое число"
)
flag =
False
Exit For
End
If
Next
Console
.WriteLine(
"Введите любое число"
)
Console
.Write(
"g="
)
glg =
Console
.ReadLine()
Console
.WriteLine(
"Введите число 1
, plg)
Console
.Write(
"x="
)
x =
Console
.ReadLine()
Console
.WriteLine()
Console
.WriteLine(
"Вычисляем y = g^x mod p"
)
Console
.Write(
"y="
)
rez = (glg ^ x)
Mod
plg
Console
.WriteLine(rez)
Console
.WriteLine()
Console
.WriteLine(
"Открытым ключем является тройка ({0},{1},{2})"
, plg, glg, rez)
Dim
klg
As
Integer
Console
.WriteLine()
Console
.WriteLine(
"Введите число 1
, plg - 1)
Console
.Write(
"k="
)
klg =
Console
.ReadLine()
Dim
alg
As
Integer
Console
.WriteLine(
"Вычисляем a = g^k mod p"
)
Console
.Write(
"a="
)
alg = (glg ^ klg)
Mod
plg
Console
.WriteLine(alg)
Dim
blg
As
Integer
Console
.WriteLine(
"Вычисляем b = y^k * M mod p"
)
Console
.Write(
"b="
)
blg = ((rez ^ klg) * mlg)
Mod
plg
Console
.WriteLine(blg)
55
Console
.WriteLine(
"Пара ({0},{1}) является шифротекстом"
, alg, blg)
''Расшифровываем
Console
.WriteLine(
"Пробуем расшифровать"
)
Dim
ilg
As
Integer
= 0
Dim
f
As
Integer
= alg ^ x
Do
While
True
If
ilg * f
Mod
plg = 1
Then
Exit Do
Else
ilg += 1
End
If
Loop
mlg = (blg * ilg)
Mod
plg
Console
.WriteLine(
"Было зашифровано сообщение '{0}'"
, mlg)
Console
.ReadKey()
'' атака на алгоритм эльгамаля
''Допустим что мы знаем пораждающую точку и эллиптическую кривую
'' Console.Clear()
Console
.WriteLine(
"атака на алгоритм эль-гамаля"
)
start = Timer
tim.Start()
Dim
flag1
As
Boolean
=
False
Dim
x4, x5
As
Integer
x4 = rx
x5 = ry
Do
While
True
Dim
t
As
Integer
= 0
Do
While
True
If
t * rx
Mod
p = 1
Then
Exit Do
Else
t += 1
End
If
Loop
If
(l * t)
Mod
p = m
Then
Console
.WriteLine(
"Ура"
)
Console
.WriteLine(
"rx={0},ry={1},шифровка - {2}, зашифрованно было - {3}"
,
rx, ry, l, m)
finish = Timer
start = finish - start
Console
.WriteLine(
"Время на взлом {0}"
, start)
tim.Stop()
Console
.ReadKey()
Exit Do
Else
If
flag1 =
True
Then
slojenie(x4, x5, rx, ry)
56
rx = x3
ry = y3
Else
udvoenie(rx, ry)
rx = x3
ry = y3
flag1 =
True
End
If
End
If
Loop
''Алгоритм Диффи-Хельмана
Dim
cb1
As
Integer
Dim
cb2
As
Integer
Dim
kdx
As
Integer
Console
.Clear()
Console
.WriteLine(
"Алгоритм Дифии-Хельмана"
)
Console
.WriteLine(
"Введите сообщение"
)
m =
Console
.ReadLine
Console
.Clear()
Console
.WriteLine(
"Алгоритм Дифии-Хельмана"
)
Console
.WriteLine(
"Было выбрано сообщение для кодирования m={0}"
, m)
Console
.WriteLine(
"Параметры эллиптической кривой a={0}, b={1}, p={2} q={3},
G({4},{5})"
, a, b, p, inv, Gx, Gy)
Console
.WriteLine()
''Вводим секретный ключ
Do
While
True
Console
.WriteLine(
"Введите секретный ключ Cb1 для пользователя 1, 0
q={0}"
, inv)
cb1 =
Console
.ReadLine()
Console
.WriteLine()
If
cb1 < inv
And
0 < cb1
Then
Console
.WriteLine(
"Выбран секретный ключ Cb1={0}"
, cb1)
Exit Do
Else
Console
.WriteLine(
"Вы ввели недопустимые значени"
)
Console
.WriteLine()
End
If
Loop
Do
While
True
Console
.WriteLine(
"Введите секретный ключ Cb2 для пользователя 2, 0
q={0}"
, inv)
cb2 =
Console
.ReadLine()
Console
.WriteLine()
If
cb2 < inv
And
0 < cb2
Then
Console
.WriteLine(
"Выбран секретный ключ Cb2={0}"
, cb2)
Exit Do
Else
Console
.WriteLine(
"Вы ввели недопустимые значени"
)
Console
.WriteLine()
End
If
Loop
''Вычисляем открытый ключ
57
udvoenie(Gx, Gy)
For
i = 0
To
cb1 - 3
slojenie(Gx, Gy, x3, y3)
Next
Console
.WriteLine(
"Открытый ключ Xa=({0},{1})"
, x3, y3)
Dim
h
As
Integer
h = 29
Console
.WriteLine()
Do
While
True
Console
.WriteLine(
"Введите случайное число, 0
, inv)
kdx =
Console
.ReadLine()
Console
.WriteLine()
If
kdx < inv
And
0 < kdx
Then
Console
.WriteLine(
"Выбрано число k={0}"
, kdx)
Exit Do
Else
Console
.WriteLine(
"Вы ввели недопустимые значени"
)
Console
.WriteLine()
End
If
Loop
''Вычисляем точку P
udvoenie(Gx, Gy)
For
i = 0
To
kdx - 3
slojenie(Gx, Gy, x3, y3)
Next
Console
.WriteLine(
" P=kG=({0},{1})"
, x3, y3)
Dim
rdx
As
Integer
rdx = x3
Mod
inv
Console
.WriteLine(rdx)
Dim
sdx
As
Integer
sdx = (kdx * h + rdx * x3)
Mod
inv
Console
.WriteLine(sdx)
Console
.ReadKey()
End
Sub
End
Module
58
Заключительный лист работы
Дипломный̆ проект выполнен мною самостоятельно. Использованные в
работе материалы и концепции из опубликованной научной литературы и других
источников имеют ссылки на них.
Список использованной литературы (источников) 23 наименований.
Работа выполнена на 45 листах.
Приложения к работе на 10 листах.
Один экземпляр сдан на кафедру.
Подпись______________/_________________/
(фамилия, инициалы)
Дата «______» _______________ 20______г.
Достарыңызбен бөлісу: |