Главная страница

Атаки на эллиптические кривые


Скачать 191.67 Kb.
НазваниеАтаки на эллиптические кривые
Дата06.03.2022
Размер191.67 Kb.
Формат файлаdocx
Имя файлаReferat (1).docx
ТипРеферат
#384804
страница19 из 19
1   ...   11   12   13   14   15   16   17   18   19
= [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
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()

'' '' Шифр Эль-Гамеля 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("Это не простое число")



Next

flag = False Exit For

End If



Console.WriteLine("Введите любое число") Console.Write("g=")

glg = Console.ReadLine()

Console.WriteLine("Введите число 1 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 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)


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)




Else

finish = Timer

start = finish - start Console.WriteLine("Время на взлом {0}", start) tim.Stop()

Console.ReadKey() Exit Do


If flag1 = True Then slojenie(x4, x5, rx, ry)


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



q={0}", inv)

Console.WriteLine("Введите секретный ключ Cb1 для пользователя 1, 0cb1 = 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



q={0}", inv)

Console.WriteLine("Введите секретный ключ Cb2 для пользователя 2, 0cb2 = 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

''Вычисляем открытый ключ


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 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
1   ...   11   12   13   14   15   16   17   18   19


написать администратору сайта