Методы дискретного логарифмирования
Сущность p-метода Полларда для дискретного логарифмирования на языке Python. Идея алгоритма исчисления порядка. Способы решения арифметических уравнений в простых полях. Реализация методов логарифмирования в алгоритмах криптографии с открытым ключом.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 25.12.2013 |
Размер файла | 311,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Оглавление
- Введение
- 1. Детерминированные методы дискретного логарифмирования
- 2. С-метод Полларда для дискретного логарифмирования
- 3. Дискретное логарифмирование в простых полях
- 4. Алгоритм исчисления порядка (index-calculus algorithm)
- 5. Реализация метода с-метод Полларда
- Заключение
- Библиографический список
Введение
Задача дискретного логарифмирования применяется во многих алгоритмах криптографии с открытым ключом. Предложенная в 1976 году У. Диффи (W. Diffie) и М. Хеллманом (М. Hellman) для установления сеансового ключа, эта задача послужила основой для создания протоколов шифрования и цифровой подписи, доказательств с нулевым разглашением и других криптографических протоколов.
Следует отметить, что в криптографии эта задача возникла еще в 1950-х годах, когда вместо роторных машин стали использоваться регистры сдвига, и нужно было определить место конкретного элемента в данной последовательности сдвигов.
Пусть G - мультипликативная абелева группа, . Задачей дискретного логарифмирования в группе G называется задача нахождения решения уравнения .
Ее решение х называется дискретным логарифмом элемента b по основанию а и обозначается , если основание фиксировано и если решение существует;
, если .
Рассмотрим уравнение:
(1)
в группе , где р - простое число. Пусть порядок равен . Тогда уравнение (1) разрешимо, и решение х является элементом . Безопасность соответствующих криптосистем основана на том, что, зная числа а, х, р вычислить легко (например, алгоритмом В-арного возведения в степень), а решить задачу дискретного логарифмирования трудно.
Рассмотрим некоторые методы решения этой задачи.
1. Детерминированные методы дискретного логарифмирования
Методом перебора можно решить поставленное уравнение за арифметических операций.
Решение уравнения можно находить по формуле:
Однако сложность вычисления по этой формуле хуже, чем для метода перебора.
Алгоритм согласования имеет сложность:
.
1 этап. Присваиваем:
.
2 этап. Находим:
.
3 этап. Составляем и упорядочиваем таблицу значений:
,
4 этап. Составляем и упорядочиваем таблицу значений:
,
5 этап. Находим совпавшие элементы из полученных таблиц, для которых:
,
.
6 этап.
.
Предположим, что известно разложение на простые множители:
.
Тогда решение уравнения можно найти за:
арифметических операций с помощью алгоритма Полига-Хеллмана:
1 этап. Для каждого простого числа , составляем таблицу чисел:
.
2 этап. Для каждого простого , находим . Пусть:
,
где .
Тогда из (1) следует, что:
.
С помощью таблицы, полученной на первом шаге, находим .
Тогда выполнено сравнение:
.
По таблице находим , и т.д.. Значение находится из сравнения:
.
3 этап. Найдя , находим по китайской теореме об остатках.
2. с-метод Полларда для дискретного логарифмирования
.
Рассмотрим три числовые последовательности . определенные следующим образом:
;
.
Под понимаем наименьший неотрицательный вычет в данном классе вычетов. дискретное логарифмирование метод криптография
Далее рассматриваются наборы и ищем номер i, для которого . Из последнего равенства:
Если , то получим:
.
Откуда искомый х равен:
.
Эвристическая оценка сложности метода составляет операций.
Пример:
Дано:
Тогда .
Разбиение на подмножества произведем следующим образом: если , то , если , то , если , то .
Вычисления будут производиться по формулам:
.
i |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
xi |
1 |
8 |
7 |
18 |
17 |
4 |
13 |
9 |
18 |
|
ui |
0 |
0 |
0 |
0 |
1 |
2 |
2 |
2 |
3 |
|
vi |
0 |
1 |
2 |
3 |
3 |
6 |
7 |
8 |
8 |
|
S |
S1 |
S2 |
S1 |
S3 |
S2 |
S1 |
S1 |
S3 |
S3 |
. Логарифм найдем из сравнения:
.
.
.
.
.
Действительно, .
Ответ: .
3. Дискретное логарифмирование в простых полях
В данном параграфе мы рассмотрим алгоритмы решения уравнения:
.
где - простое число, имеющие эвристическую оценку сложности при некоторых значениях постоянной с. Мы будем считать, что имеет порядок .
Первый такой алгоритм предложил Адлеман.
Алгоритм Адлемана.
1 этап. Сформировать факторную базу, состоящую из всех простых чисел:
.
2 этап. С помощью некоторого перебора найти натуральные числа - такие, что:
.
Отсюда следует, что:
. (2)
3 этап. Набрав достаточно много соотношений (2), решить получившуюся систему линейных уравнений относительно неизвестных - дискретных логарифмов элементов факторной базы.
4 этап. С помощью некоторого перебора найти одно значение , для которого:
где - простые числа "средней" величины, т. е. ,
где - также некоторая субэкспоненциальная граница,
.
5 этап. С помощью вычислений, аналогичных 2 и 3 этапам алгоритма, найти дискретные логарифмы для фиксированных простых чисел средней величины из 4 этапа.
6 этап. Определить искомый:
.
4. Алгоритм исчисления порядка (index-calculus algorithm)
Основные идеи алгоритма исчисления порядка были известны с 20-х годов XX века, но лишь в 1979 году Адлерман указал на этот алгоритм как на средство вычисления дискретного логарифма и исследовал его трудоемкость. В настоящее время алгоритм исчисления порядка и его улучшенные варианты дают наиболее быстрый способ вычисления дискретных логарифмов в некоторых конечных группах, в частности, в группе Zp*.
Этот алгоритм в отличие от алгоритмов прямого поиска и ро-метода подходит не для всех циклических групп.
Алгоритм исчисления порядка.
Вход: - порождающий элемент циклической группы порядка - параметр надежности.
1 этап. Выбирается факторная база . (Если, то состоит из первых простых чисел.)
2 этап. Выбрать случайное и вычислить .
3 этап. Попытаться разложить по факторной базе:
.
Если это не удалось, вернуться на 2 этап.
4 этап. Логарифмируя обе части получившегося выражения, получаем:
. (3)
В этом выражении неизвестными являются логарифмы.
Это сравнение с неизвестными следует запомнить.
5 этап. Если сравнений вида (3), полученных на 4 этапе, меньше, чем , то вернуться на этап 2.
6 этап. Решить систему сравнений с неизвестными вида (3), составленную на этапах 2-5.
7 этап. Выбрать случайное и вычислить .
8 этап. Попытаться разложить по факторной базе:
.
Если это не удалось, вернуться на 7 этап.
9 этап. Логарифмируя обе части последнего равенства, получаем:
.
где вычислены на этапе 6 как решение системы сравнений.
Выход:
.
В том случае, когда , в качестве факторной базы берут первых простых чисел. Такой выбор оправдан следующим наблюдением. Число, наугад выбранное из множества целых чисел, с вероятностью 1/2 делится на 2, с вероятностью 1/3 - на 3, с вероятностью 1/5 - на 5 и т.д. Поэтому можно ожидать, что в промежутке от 1 до найдется достаточно много чисел, в разложении которых участвуют только маленькие простые делители из множества . Именно такие числа отыскиваются на шагах 2 и 7.
Параметр c вводится для того, чтобы система сравнений, решаемая на 6 этапе, имела единственное решение. Дело в том, что полученная система может содержать линейно зависимые сравнения. Считается, что при значении с порядка 10 и большом p система сравнений имеет единственное решение с высокой вероятностью.
5. Реализация метода с-метод Полларда
def pollard(g,a,p):
# g^x = a mod p
n = EulerPhi(p) # функция Эйлера дает возможность работать не только с простыми р
a1 = 0
a2 = 0
b1 = 0
b2 = 0
x1 = 1
x2 = 1
if(a == g):
return (True, 1)
start = True
while(x1!= x2 or start):
start = False
if(x1 < p<3):
x1 = mod(a * x1, p)
a1 = a1
b1 = mod(b1 + 1, p)
if(x1 >= p/3 and x1 < 2*p/3):
x1 = mod(x1 * x1, p)
a1 = mod(2 * a1, p)
b1 = mod(2 * b1, p)
if(x1 >= 2*p/3):
x1 = mod(g * x1, p)
a1 = mod(a1 + 1, p)
b1 = b1
for i in xrange(2):
if(x2 < p/3):
x2 = mod(a * x2, p)
a2 = a2
b2 = mod(b2 + 1, p)
if(x2 >= p/3 and x2 < 2*p/3):
x2 = mod(x2 * x2, p)
a2 = mod(2 * a2, p)
b2 = mod(2 * b2, p)
if(x2 >= 2*p/3):
x2 = mod(g * x2, p)
a2 = mod(a2 + 1, p)
b2 = b2
u = mod(a1 - a2, n)
v = mod(b2 - b1, n)
if(mod(v, n) == 0):
return (False, None)
d, nu, mu = ExtendedGCD(v, n)
'''
nu = v^(-1) mod n
'''
x = None
i = 0
while(i!= (d + 1)):
'''
g^n == a^v mod p
g^(u*nu) = a^(v*nu) = a^(d - n*nu) = a^(d) = g(x*d) mod p
xd = u * nu + w * n
'''
w = i
x = ((u * nu + w * n)/d) %n
if ((g**x - a) % p == 0):
return(True, x)
i += 1
return (False, x)
print 'x=', x.
Вспомогательные функции:
def mod(a,b):
'''
Функция добавлена для наглядности кода. Возвращает остаток от деления а на b
'''
return a % b
def ExtendedGCD(a, b):
'''
Нахождение наибольшего общего делителя (НОД) алгоритмом Евклида (рекурентной формулой).
d = НОД(a, b) = a*x + b*y
Возвращает d, x, y.
х и y полезны для нахождения обратных элементов в кольце вычетов
'''
if b == 0:
return a, 1, 0
d1, x1, y1 = ExtenedGCD(b, mod(a, b))
d, x, y = d1, y1, x1 - (a/b)*y1
return d, x, y
def EulerPhi(input):
'''
Функция Эйлера, возвращает количество натуральных чисел, небольших n и взаимно простых с ним
'''
res = 1
i = 2
while(i * 1 <= input):
p = 1
while(input % i == 0):
input /= i
p *= i
if (p!= 0):
res *= (p * (i-1))
i += 1
n = input - 1
if (n == 0):
return res
else:
return n * res.
Результат работы:
Полученный результат работы модуля совпадает с полученным ранее решением.
Заключение
В данной работе были рассмотрены методы дискретного логарифмирования и реализован метод р-Полларда на языке Python.
Дискретный логарифм составляет основу целого ряда алгоритмов криптографии. Дискретный логарифм широко применяется в:
1) криптосистеме с открытым ключом по Диффи-Хеллману;
2) DSA-алгоритме цифровой подписи;
3) криптосистеме Эль Гамаля.
Криптосистему, предложенную Эль Гамалем, можно использовать как для цифровых подписей, так и для шифрования. Криптостойкость определяется трудоемкостью вычисления дискретного логарифма в конечном поле.
Библиографический список
1. Василенко О.Н. Теоретико-числовые алгоритмы в криптографии. - М.: МЦНМО, 2003. - 328 с.
2. Маховенко Е.Б. Теоретико-числовые методы в криптографии: учебное пособие /Е.Б. Маховенко. - М: Гелиос АРВ, 2006. 320 с., ил.
3. Алгоритмы. Построение и анализ. (Т. Кормен, Ч. Лейзер, Р. Ривест, К. Штайн). 2006 г. 2 издание.
4. http://ru.wikiversity.org/wiki/Программирование_и_научные_вычисления_на_языке_Python.
Размещено на Allbest.ru
...Подобные документы
Изучение основных методов и алгоритмов криптографии с открытым ключом и их практического использования. Анализ и практическое применение алгоритмов криптографии с открытым ключом: шифрование данных, конфиденциальность, генерация и управление ключами.
дипломная работа [1,2 M], добавлен 20.06.2011Понятие и история изобретения криптосистемы с открытым ключом. Свойства односторонней функции и сложность раскрытия шифра. Описание алгоритма RSA: шифрование и дешифрование. Возможные атаки, способы взлома, обоснование и практическая реализация RSA.
курсовая работа [45,9 K], добавлен 24.12.2011Актуальность и предыстория проблемы построения систем связи с открытым ключом. Алгоритм кодирования, перевода из десятичного числа в двоичное, быстрого возведения числа в степень, поиска взаимно простых чисел. Дешифрование сообщения по криптоалгоритму.
курсовая работа [140,3 K], добавлен 20.06.2017Краткие сведения о истории криптографии. Симметричные криптосистемы (системы с секретным ключом) и системы с открытым ключом. Аутентификация и идентификация, электронная цифровая подпись. Управление ключами, их архивирование, хранение и восстановление.
доклад [458,9 K], добавлен 08.11.2013Сущность, принципы и описание методов и этапов имитационного моделирования. Процессы и применение дискретного и непрерывного алгоритма. Характеристика методов построения математических моделей для решения управленческих задач банковской системы.
курсовая работа [80,5 K], добавлен 29.05.2014Методика разработки и механизм отладки программы на языке Лисп, реализующей криптографический алгоритм кодирования информации с открытым ключом – RSA. Математические и алгоритмические основы решения задачи, его программная модель, составление блок-схемы.
курсовая работа [675,7 K], добавлен 20.01.2010Методы решения систем линейных алгебраических уравнений. Метод простых итераций и метод Зейделя. разработка программы для решения СЛАУ с произвольным количеством уравнений. Реализация методов Зейделя и простых итераций для получения вектора решений СЛАУ.
курсовая работа [25,0 K], добавлен 20.11.2008Сущность и особенности языка программирования Си. Основные этапы алгоритма решения системы линейных алгебраических уравнений методом Гаусса, реализация программы для их расчета. Инструкции пользователя и программиста. Тестирование функции решения.
курсовая работа [153,9 K], добавлен 18.02.2013Итерационные методы решения нелинейных уравнений, системы линейных алгебраических уравнений (СЛАУ). Решение нелинейных уравнений методом интерполирования. Программная реализация итерационных методов решения СЛАУ. Практическое применение метода Эйлера.
курсовая работа [1,6 M], добавлен 20.01.2010Представление полиномов в виде кольцевых списков и выполнение базовых арифметических действий над ними. Реализация алгоритмов сложения, умножения и вычитания полиномов класса List на языке программирования Python 2.7. в интегрированной среде Python IDLE.
курсовая работа [228,1 K], добавлен 11.01.2012Обыкновенное дифференциальное уравнение первого порядка. Задача Коши, суть метода Рунге-Кутта. Выбор среды разработки. Программная реализация метода Рунге-Кутта 4-го порядка. Определение порядка точности метода. Применение языка программирования C++.
курсовая работа [163,4 K], добавлен 16.05.2016Особенности метода неопределенных множителей Лагранжа, градиентного метода и метода перебора и динамического программирования. Конструирование алгоритма решения задачи. Структурная схема алгоритма сценария диалога и описание его программной реализации.
курсовая работа [1010,4 K], добавлен 10.08.2014Выполнение арифметических операций, этапы решения задач с помощью ЭВМ - постановка задачи, составление алгоритма решения, программная реализация алгоритма в среде Qbasic. Решение систем линейных уравнений по формулам Крамера. Графический режим Qbasic.
курсовая работа [101,7 K], добавлен 29.09.2009Решение нелинейных уравнений методом простых итераций и аналитическим, простым и модифицированным методом Ньютона. Программы на языке программирования Паскаль и С для вычислений по вариантам в порядке указанных методов. Изменение параметров задачи.
лабораторная работа [191,0 K], добавлен 24.06.2008Решение систем алгебраических линейных уравнений методом Крамера. Сущность метода прогонки. Программная реализация метода: блок-схема алгоритма, листинг программы. Проверка применимости данного способа решения для конкретной системы линейных уравнений.
курсовая работа [581,0 K], добавлен 15.06.2013Разработка алгоритма оптимизации коэффициентов дискретного регулятора с законом ПИД по минимуму интегрального квадратичного критерия. Расчёт оптимальных параметров регулятора на основе описанных алгоритмов. Анализ переходных процессов в замкнутой системе.
практическая работа [1,4 M], добавлен 25.12.2011Система электронного голосования (ЭГ). Взлом криптосистем с открытым ключом с помощью криптоанализа. Реализация протокола ЭГ с помощью алгоритма RSA. Использование открепительного талона в протоколе ЭГ. Задача RSA и уязвимость учебного алгоритма RSA.
курсовая работа [3,5 M], добавлен 20.12.2009Методы решения систем линейных уравнений трехдигонального вида: прогонки, встречных прогонок, циклической редукции. Параллельные алгоритмы решения. Метод декомпозиции области. Основные возможности и особенности технологии CUDA. Анализ ускорения алгоритма.
дипломная работа [1,4 M], добавлен 21.06.2013Предмет, постановка и особенности задач дискретного программирования. Задачи с неделимостями и с разрывными целевыми функциями. Экстремальные комбинаторные задачи. Примеры решений задач дискретного программирования методом ветвей и границ, методом Гомори.
курсовая работа [211,3 K], добавлен 22.05.2013Описание алгоритма создания программы для решения алгебраических или трансцендентных уравнений с помощью численного метода Бернулли. Нахождение значений корней алгебраического уравнения с заданными параметрами точности. Листинг программы на языке java.
контрольная работа [206,0 K], добавлен 19.06.2015