лаб№4

advertisement
УрФУ
Кафедра технической физики
ОТЧЕТ
по лабораторной работе
«Взлом криптопреобразования RSA»
Студент: Куконов Э.С
Группа: Фт-420203
Преподаватель: Александров О.Е.
Екатеринбург 2015
Цель работы.
1. Установить экспериментально наибольшие и наименьшие значения P и
Q, при которых программа функционирует правильно. Изменяя P и Q в
пределах от нижней границы, до верхней границы работоспособности
программы произвести измерения затрат времени t на шифрование,
дешифрование и криптоанализ по методу безключевого чтения RSA.
Замеры произвести на одном и том же компьютере не менее чем в 20
точках диапазона. Повторить измерения на сообщениях длиной 100,
1000 и 10000 знаков. Построить графики зависимости t от log2(N).
Предложить и обосновать теоретическую зависимость t от log2(N) в
пределе больших N.
2. Ответить на вопросы:
1) Какие алгоритмы криптоанализа вам известны? Желательно не
перечисление массы «умных назаваний», а пусть названий будет не
так много, но будет пояснение «как это работает».
2) Предложите простейший алгоритм криптоанализа (взлома)
симметричного шифра, например, ГОСТ 28147-89.
3) Подробно опишите метод автоматического определения факта
нахождения правильного ключа для метода прямого перебора
ключей симметричного криптоалгоритма.
Выполненные задания
1.
В ходе лабораторной работы было установлено, что наименьшее
значение, которое может принять P или Q не меньше 29. Нужно чтобы
выполнялось следующее условие для N=P*Q: 1100<N<2147117569
(грубо говоря, 210<N<231). В противном случае программа не
функционирует.
Изменяя P и Q в пределах от нижней границы, до верхней
границы работоспособности программы произвели измерения затрат
времени t на шифрование, дешифрование и криптоанализ по методу
безключевого чтения RSA. Измерения были повторены на сообщениях
длиной 100, 1000 и 10000 знаков. Ниже приведены графики
зависимости t от log2(N). Если обратить внимание на формулу
надо сначала исходное сообщение возвести в
степень, равную ключу, а потом взять остаток от деления этого числа
на N. Также известно, что возведение в степень операция сложная в
отличие от других операций (*,+ и т.д.), т.е. в таком случае скорость
шифрования напрямую связана с открытым ключом и зависит от него
по экспоненциальному закону.
Рисунок 1. Работа программы с использованием 100 символов
Рисунок 2. Работа программы с использованием 1000 символов
Рисунок 3. Работа программы с использованием 10 000 символов
2. Ответы на вопросы
2.1.1. Метод Полларда
Ниже будут приведены две версии данного метода: оригинальная и
современная. Обе делятся на две стадии.
2.1.2. Оригинальный алгоритм
Первая стадия
1) Задача состоит в том, чтобы найти делитель числа N отличный от
единицы. Прежде всего необходимо выбрать 2 числа L, M, такие,
что
,.
2) Вычислим теперь число
, где - все простые числа меньше
L. Здесь допускается некотарая свобода в выборе , днако точно
известно, что для маленьких ,
должно быть больше единицы.
3) Выберем небольшое целое
и вычислим
если
мы нашли делитель N , в противном случае
переходим ко второй стадии.
Вторая стадия
1) На этом шаге необходимо вычислить последовательность
где m — простое,
, надеясь, что на
каком-нибудь шаге получится
2) Легче всегоэто сделать вычислением
для каждого нечётного m
домножением на
, беря
через равные промежутки. Если
делитель найден. Если же
необходимо точнее исследовать этот участок.
, то
Замечание
С помощью данного метода мы сможем найти только такие простые
делители p числа N, для которых выполнено:
p-1 = A или p-1 = Aq , где A является L-гладким, а q — простое, такое что
L < q < M.
2.1.3. Современный версия
Эта переработанная по сравнению с оригинальной версия алгоритма
использует понятия гладкости и ориентирована на практическое
применение. Значительные изменения претерпела первая стадия, в то
время, как вторая сохранилась практически без изменений, опять же, с
теоретической точки зрения, ничего значительного, по сравнению
предыдущей версией, добавлено не было.
Первая стадия
1) Пусть n гладкое степени B, и требуется найти делитель числа n. В
первую очередь вычисляется число
где произведение
ведётся по всем простым pi в максимальных степенях ki :
2) Тогда искомый делитель
Пример
Пусть n = 10001 выберем B = 10 , тогда M(B) = 23 * 32 * 5 * 7 = 2520, возьмём
a = 2 и вычислим теперь aM(B) = 22520 mod 10001 = 3578, и наконец
(aM(B) - 1, n) = (22520 - 1, 10 001) = 73 .
Замечания
1) При больших B число M(B) может оказаться весьма большим,
сравнимым по значению с B!, в таких случаях может оказаться
целесообразно разбить M(B) на множители приблизительно
одинаковой величины
и вычислять последовательность
2) Возможно два случая, в которых приведенный выше алгоритм не даст
результата.
 В случае, когда (aM(B) - 1, n) = n точно можно сказать, что у n есть
делитель, являющийся гладким степени B и проблему должен
решить иной выбор a.
 В более частом случае, когда (aM(B) - 1, n) = n стоит перейти ко
второй стадии алгоритма, которая значительно повышает
вероятность результата, хотя и не гарантирует его.
Вторая стадия
1) Прежде всего необходимо зафиксировать границы B1 = B, B2>> B,
обычно B2 ≤ B2
2) Вторая стадия алгоритма находит делители n, такие что p-1 = q* f, где f
- гладкое степени B, а q простое, такое что B1<q<B2 .
 Для дальнейшего нам потребуется вектор из простых чисел qi от
B1 до B2, из которого легко получить вектор разностей между
этими простыми числами D = (D1,D2, ...), Di = qi+1 - qi, причём Di
- относительно небольшие числа, и Di€∆, где ∆ - конечно
множество. Для ускорения работы алгоритма полезно
предварительно вычислить все
,
и при пользоваться
уже готовыми значениями.
 Теперь необходимо последовательно вычислять c0 = b \mod n,
, где
, вычисленное в первой
стадии, на каждом шаге считая Q = (ci-1, n). Как только Q ≠ 1,
можно прекращать вычисления.
2.1.4. Линейный метод криптоанализа
Обычно при шифровании используется сложение по модулю 2 текста с
ключом и операции рассеивания и перемешивания. Задача
криптоаналитика - найти наилучшую линейную аппроксимацию (после
всех циклов шифрования ) выражения
xi1+ .... + xir + yj1 +….+ yjs=zk1 + .... + zkt , где xn,yn,zn – n-ые биты текста,
шифротекста и ключа.
Пусть P - вероятность того, что верхнее вырожение выполняется, при
этом необходимо, чтобы P - 1/2 и величина | P-1/2 | должна быть
максимальна. Если | P-1/2 | достаточно велика и криптоаналитику
известно достаточное число пар открытых и соответствующих
зашифрованных текстов, то сумма по модулю 2 бит ключа на
соответствующей позиции в правой части уравнения равна наиболее
вероятному значению суммы по модулю 2 соответствующих бит
открытых и зашифрованных текстов в левой части. Если P > 1/2, то сумма
бит ключа в правой части уравнения равна нулю, если сумма бит в левой
части равна нулю больше, чем для половины пар зашифрованных текстов,
и сумма бит ключа в правой части уравнения равна единице, если сумма
бит в левой части равна единице больше, чем для половины текстов . Если
P< 1/2 , то наоборот : сумма бит ключа в правой части уравнения равна
нулю , если сумма бит в левой части равна единице больше , чем для
половины пар открытых и зашифрованных текстов, и сумма бит ключа в
правой части уравнения равна единице, если сумма бит в левой части
равна нулю больше, чем для половины текстов. Для нахождени каждого
бита собственно ключа теперь нужно решить систему линейных
уравнений для известных линейных комбинаций этих бит, но эта
процедура не представляет сложности, так как сложность решения
системы линейных уравнений описываетс полиномом не более третьей
степени от длины ключа.
2.1.5. Метод встречи по середине
Если множество ключей криптоалгоритма замкнуто относительно
композиции, то есть для любых ключей zi и zj найдется ключ zk такой,что
результат шифрования любого текста последовательно на zi и zj равен
шифрограмме этого же числа на zk , то есть Fzj (Fzi , x))= Fzk(x), то можно
воспользоваться этим свойством. Пусть нам нужно найти ключ zk. Тогда
для нахождения ключа zk, необходимо найти эквивалентную ему пару
ключей zi , zj. Данный метод криптоанализа основан на "парадоксе дней
рождения". Поиск ключа zk сведем к поиску эквивалентной ему пару
ключей zi, zj. Для текста x построим базу данных, содержащую случайное
множество ключей zi и соответствующих криптограмм w = Ek(x), и
упорядочим её по криптограммам w. Объём базы данных выбираем
, где
- мощность множества ключей.
Затем подбираем случайным образом ключи zj для расшифровки
текстов y и результат расшифрования v = Ezj(y) сравниваем с базой
данных. Если текст v окажется равным одной из криптограмм w, то ключ
zi zj эквивалентен искомому ключу k.
Обозначим α = |{k}| – общее количество возможных ключей k.
Временная сложность метода составляет
.
Множитель logα учитывает сложность сортировки. Требуемая память
равна
бит, или
блоков
(предполагается, что длина блока и длина ключа различаются на
ограниченную константу).
2.2.
2.3.
Рассмотрим алгоритм линейного криптоанализа симметричного
шифра на DES. Принцип его работы приведен в 2.1.4.. Реализация
успешной атаки можно просмотреть по ссылки
http://habrahabr.ru/post/233905/. В процессе реализации были
замечены некоторые недочеты, но в комментариях все это
разъяснено.
Полученное зашифрованное сообщение переводиться в двоичную
систему (число). Далее используется метод цикл в цикле. В первом
цикле генерируется ключ по следующему принципу: Берется
минимальное значение (задается вручную) ключа и с каждым
последующим циклом возрастает. Далее в этом цикле запускается
цикл выполняющий следующие действия: 1.Генерация текста
(задается минимальный и максимальный размер и перебираются все
возможные варианты (в каждой итерации один вариант)) 2. Текст
шифруется с ключом 3. Зашифрованный текст переводиться в
двоичную систему и сравнивается с заданным числом. Данный
метод можно использовать только для одного блока
зашифрованного сообщения, затем использовать полученный ключ
для расшифровки полученного сообщения.
В приложенном файле RSA.XMCD приведена простая реализация
данного метода (в конце). Кусок кода работает только с
десятичными целыми числами и с определенным ключом.
Если честно – ничего я не понял
Download