Дискретное логарифмирование

advertisement
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Институт математики и компьютерных наук
Кафедра информационной безопасности
Допустить к защите в ГАК
Заведующий кафедрой
информационной
безопасности,
д.т.н., профессор
А.А. Захаров
“____” _________ 2010 г.
Майзаков Максим Александрович
Разработка модулей автоматической генерации заданий с решениями по теме
«Дискретное логарифмирование»
(дипломная работа)
Научный руководитель:
к.ф.-м.н., доцент кафедры ИБ
__________ Ниссенбаум О.В.
Автор работы:
__________ Майзаков М. А.
Тюмень – 2010
Оглавление
ВВЕДЕНИЕ .................................................................................................................................... 3
ГЛАВА 1. Алгоритмы дискретного логарифмирования ...................................................... 7
1.1 Общие сведения .................................................................................................................. 7
1.2 Шаг младенца – шаг великана ........................................................................................ 8
1.2 Ро-метод Полларда для дискретного логарифмирования........................................ 10
1.3 Алгоритм Полига-Хеллмана .......................................................................................... 13
1.4 Алгоритм исчисления порядка (index-calculus algorithm) ........................................ 16
1.5 Оценка сложности решения ........................................................................................... 19
ГЛАВА 2. Обзор существующих методов контроля знаний .............................................. 20
2.1 Методы контроля знаний при изучении курса «Теоретико-числовые методы в
криптографии» ........................................................................................................................ 20
2.2 Тесты ................................................................................................................................... 21
2.3 Контрольные и самостоятельные работы ................................................................... 25
2.4 Итоги ................................................................................................................................... 26
ГЛАВА 3. Реализация модулей ................................................................................................ 27
3.1 Среда разработки.............................................................................................................. 27
3.2 Взаимодействие с ядром .................................................................................................. 28
3.3 Экспорт данных ................................................................................................................ 30
3.4 Документация.................................................................................................................... 31
3.5 Модуль BABYSTEP (Шаг младенца - шаг великана) ............................................... 31
3.6 Модуль POLARD (Ро-метод Полларда дискретного логарифмирования) ........... 34
3.7 Модуль POLIHELL (дискретное логарифмирование при помощи алгоритма
Полига-Хеллмана) .................................................................................................................. 36
3.8 Модуль INDEXCLCL (Алгоритм исчисления порядка (index-calculus algorithm)38
ЗАКЛЮЧЕНИЕ .......................................................................................................................... 39
СПИСОК ЛИТЕРАТУРЫ ........................................................................................................ 40
Приложение 1. Документация для пользователя. ................................................................ 42
Приложение 2. Документация для программиста. .............................................................. 46
Приложение 3. Примеры генерируемых заданий. ............................................................... 49
2
ВВЕДЕНИЕ
Современная криптография в значительной мере использует результаты
таких дисциплин как алгебра, теория чисел, теория сложности. Студентам,
изучающим криптографию, необходимо знание ее математических основ.
Среди этих основ одно из ведущих мест занимает проблема дискретного
логарифмирования.
Дискретное логарифмирование – задача обращения функции gx в
некоторой конечной мультипликативной группе G.
Для заданных g и a решение x уравнения gx = a называется дискретным
логарифмом элемента a по основанию g.
Решение задачи дискретного логарифмирования состоит в нахождении
некоторого целого неотрицательного числа x удовлетворяющего данному
уравнению. Если оно разрешимо, у него должно быть хотя бы одно
натуральное решение, не превышающее порядок группы.
В отличие от логарифма непрерывного, дискретный логарифм не
является дифференцируемой монотонной функцией, его нельзя найти
приближенно, разложив в ряд Тейлора, и вообще никакого приближенного
значения здесь не может быть, ведь x – целое число.
Именно трудность решения этой задачи лежит в основе многих
криптосистем. Это и шифр Эль-Гамаля, Шамира, такие криптостандарты как
подпись DSA , ГОСТ Р 34.10-94, ГОСТ Р 34.10-2001 и другие.
Например в том же шифре Эль-Гамаля открытым ключом является
тройка (p, g, y), закрытым ключом — число x, и связаны они между собой
cоотношением y=gxmod p. А процедура восстановления закрытого ключа по
открытому есть решение задачи дискретного логарифмирования.
К тому же очень важное место в криптоанализе асимметричных шифров
занимает эффективность используемых алгоритмов. Если, к примеру, в
симметричной криптографии для взлома шифра используется в основном
только полный перебор, то для взлома асимметричных шифров применяются
3
специальные алгоритмы, сокращающие время в разы. Чем лучше алгоритм,
тем более быстро он приводит к желаемому результату.
Наиболее очевидным и легким в реализации является алгоритм
исчерпывающего поиска (прямого перебора). Этот наивный метод является
самым трудоемким, он требует O(n) умножений, то есть обладает
экспоненциальной сложностью.
Состоит он в следующем: вычисляются g0, g1, g2,…, gp—1 пока не
попадется
gi≡a(mod
p).
Полученное
i
будет
искомым
дискретным
логарифмом i=logga(mod p—1).
Как видим, алгоритм абсолютно неэффективен в реальных условиях при
больших p, которые используются в криптографии.
Первым алгоритмом, позволяющим не использовать обычный перебор,
был Baby-step-giant-step (Шаг младенца, шаг великана), предложенный
Даниелем Шэнксом (Shanks) в 1973 году.
Сложность данного алгоритма составляет O(
и O(
) умножений по модулю
) операций сравнения.
Как видим, алгоритм эффективнее прямого перебора, но в связи с малой
распространенностью асимметричных шифров он оставался малоизвестным.
Но уже в конце 70х, в 80х вместе с развитием асимметричных шифров и
подписей, данная тема получила большое распространение. Стали появляться
все новые и новые алгоритмы с все большой и большой скоростью работы.
К
примеру,
ρ-алгоритм
Полларда для
вычисления
дискретного
логарифма.
Основные идеи этого алгоритма известны в теории чисел довольно
долгое время, однако только в 1979 г. американским ученым Адлеманом был
предложен данный алгоритм как метод решения задачи нахождения
дискретного
логарифма. В реальных
условиях
использования
этого
алгоритма (в том числе и его усовершенствованных вариантов) дает
довольно быстрое решение задачи нахождения дискретного логарифма.
Самым быстрым на данное время считается алгоритм Полига-Хеллмана.
4
Этот алгоритм используется в случае известной факторизации порядка p
группы G. Алгоритм Полига-Хеллмана является наиболее сложным для
написания, так как требует
реализации других теоретико-числовых
алгоритмов, таких как китайская теорема об остатках.
Трудоемкость данного метода составляет:
умножений в группе при условии, что разложение n известно.
Как видим, выбор алгоритма напрямую влияет на скорость. Поэтому для
будущего
специалиста
в
области
компьютерной
безопасности
и
криптоанализа так важно понимание и корректное усвоение основ
дискретного логарифмирования.
Один из способов обеспечения объективной оценки – использование
индивидуальных вариантов контрольных и домашних заданий. Такой подход
снижает вероятность списывания и
помогает в раннем выявлении
неуспевающих студентов.
Но внедрению такого подхода мешает большой объем подготовительной
работы, необходимой для создания проверочных заданий, и время,
затрачиваемое преподавателем для проверки работ студентов.
К тому же данные алгоритмы обладают следующей особенностью: при
одних входных параметрах процесс решения может занять две-три итерации,
а при других – десятки.
Если у нас, к примеру:
g – порождающий элемент,
p – простое число,
a – аргумент логарифма,
то количество итераций любого метода может насчитывать от 1 до p-1,
при этом при одних a количество итераций будет не велико (1-3), а при
5
других a очень большим (до p-1). Причем заранее выяснить количество
невозможно.
Поэтому, прежде чем
дать студенту задание, преподавателю
необходимо предварительно узнать степень его сложности.
Так, в курсе «Теоретико-числовые методы в криптографии» ТюмГУ
общий объем домашних и контрольных работ составляет около 150 задач на
студента, а число студентов на курсе – от 30 до 45 человек. Таким образом,
для обучения одного потока студентов необходимо составить и решить более
4500 различных задач.
Поэтому цель моей дипломной работы – разработка модулей
автоматической генерации случайных заданий и решений к ним по теме
«Алгоритмы дискретного логарифмирования» в дисциплине «Теоретикочисловые методы в криптографии».
Для ее достижения были поставлены следующие задачи:
 определить необходимый набор модулей;
 cпроектировать и разработать учебные модули;
 создать документацию;
 сформировать базу учебных заданий по теме "Дискретное
логарифмирование";
 обеспечить интеграцию созданных модулей с основным ядром
системы.
6
ГЛАВА 1. Алгоритмы дискретного логарифмирования
1.1 Общие сведения
Для реализации в виде модулей были выбраны следующие алгоритмы:
 шаг Младенца – шаг Великана;
 ро-метод Полларда;
 алгоритм Полинг-Хэмминга;
 алгоритм исчисления порядков (index-calculus algorithm).
Все эти алгоритмы являются обязательными для изучения в курсе
"Теоретико-числовых методов в криптографии". К тому же все они
достаточно просты для самостоятельного применения и являются базисом
для более сложных.
К каждому из модулей предъявляются следующие требования:
 формирование
произвольного
количества
индивидуальных
вариантов;
 наличие в каждом варианте любого количества заданий;
 возможность выбора степени сложности заданий;
 генерация соответствующих решений к данным заданиям;
 взаимосвязь с ядром системы.
В качестве входных параметров в модуль передается: количество
заданий и параметры, определяющие их сложность:
 пределы в которых находится модуль - число p;
 пределы в которых находится количество итераций;
 размер факторной базы для некоторых алгоритмов.
Все входные параметры приводятся к разумным значениям, не
допустимые исключаются. Количество итераций в не должно превышать 30,
а генерируемых заданий больше 2000.
7
Каждый модуль должен работать в двух режимах: в первом он
выступает как отдельное приложение, работает независимо и имеет
собственный интерфейс; во втором – он общается с основным ядром
системы, получая входные данные только от него.
В результате работы формируется два текстовых файла: один с самими
заданиями, а другой с их решениями.
Рассмотрим каждый модуль подробно по отдельности.
1.2 Шаг младенца – шаг великана
В открытой литературе этот метод впервые был описан Шенксом (Daniel
Shanks), ссылки на него известны с 1973 года. Это был один из первых
методов, более быстрый чем метод прямого перебора.
Общая схема алгоритма такова:
Берем два целых числа m и k, таких что mk>p (как правило,
m=k=  p ). Затем вычисляются два ряда чисел:
a, ga, g2a, … , gm—1a (mod p)
gm, g2m, g3m, … , gkm (mod p)
(все вычисления произведены по модулю p).
Найдем такие i и j, для которых gia=gjm. Тогда x=jm—i.
Справедливость последнего равенства подтверждается следующей
цепочкой, все вычисления в которой произведены по модулю p:
gx=gjm-i=gjm(gi)-1=gjma(gia)-1=gjma(gjm)-1=a.
Заметим, что числа i и j непременно будут найдены, поскольку при
i= 0, m  1, j=1, k выполняется jm—i=1, km , причем km>p. То есть среди всех
чисел вида jm—i обязательно содержится 0 < x ≤ p.
Замечание: Указанный метод можно применять для разыскания
дискретных логарифмов в любой циклической группе порядка n.
Приведем этот метод в форме алгоритма.
8
Алгоритм «Шаг младенца-шаг великана»:
Вход: g - порождающий элемент конечной группы G порядка n; a G.
Ш.1. Вычислить m=  p  .
Ш.2. Вычислить b=gm.
Ш.3. Вычислить последовательности ui=bi, vj=agj Для i,j=1, m .
Ш.4. Найти i, j такие что ui=vj. x=mi—j mod n. Идти на Выход.
Выход: logga=x.
Одна из трудоемких частей этого алгоритма – это поиск на Шаге 4. Он
может быть осуществлен несколькими способами:
1) Сначала построить таблицу (i, ui), отсортировать ее по второй
компоненте а затем произволить сравнения по мере нахождения
компонент vj.
2) Построить две таблицы (i, ui) и (j, vj), отсортировать каждую из
них, а затем произвести поиск совпадений.
3) Объединить u, v в одну таблицу, снабдив их номером в
соответствующей последовательности и битом принадлежности к одной
из
двух
последовательностей,
а
затем
применить
совместную
сортировку.
Сложность данного алгоритма составляет O( n ) умножений по модулю
и O( n log n) операций сравнения.
Пример:
Пусть n=229 (простое число), g=6, a=12.
Ш.1. m=16.
Ш.2. b=ga mod n =612 mod 229 = 183.
Ш.3. В этом примере вычислим сначала ряд ui, а затем будем вычислять
компоненты vj до тех пор, пока не найдется совпадение.
i, j
1
2
3
4
5
6
9
7
8
9
10
ui
183 55
vj
72
218 48
203 73
82
121 159 14
43 83
209 109 196
11 12
13 14 15
75 214 3
16
91 165 196
i=16, j=6. x=mi—j mod n = 250 mod 228 = 22.
Проверка:
622 mod 229= 12.
Ответ:
log612 mod 228 = 22.
1.2 Ро-метод Полларда для дискретного логарифмирования
Этот алгоритм осуществляет случайный поиск дискретных логарифмов,
как и метод «шаг ребенка – шаг великана», но он требует меньшего объема
памяти для хранения данных, поэтому предпочтительней для практических
целей. В основе данного метода лежит та же идея, что и в основе ро-метода
для факторизации – строится псевдослучайная последовательность, в
которой находятся совпадающие элементы при помощи метода Флойда, а
затем на основании полученной величины вычисляется искомый дискретный
логарифм.
Пусть требуется вычислить logga в конечной группе G порядка n.
Группа G разбивается на три непересекающихся подмножества
примерно равной мощности: G=S1US2US3, так чтобы 1 S2. Причем
разбиение должно быть построено таким образом, чтобы проверка, к какому
подмножеству принадлежит данный элемент x, была простой.
10
Например, если G=Zp, где p – простое число, то можно задать разбиение
 p
 p
2 p
2 p
S1={1,…,   }, S2={   ,…,   }, S3={   , … , p—1}, или разбиение
3
3
 3 
 3 
может быть таким: если x mod 3=1, то x S1, если x mod 3=2, то x S2, если x
mod 3=0, то x S3.
Далее на G задается последовательность x0, x1, x2, … , где x0=1, xi+1
вычисляется по xi посредством функции f для i≥0:
 axi , если xi  S1

xi+1=f(xi)=  xi2 , если xi  S 2
 gx , если x  S
i
3
 i
Вычисления проводятся в группе G, то есть если G=Zm, то вычисления
следует производить по модулю m.
Такая
последовательность
групповых
элементов
может
быть
представлена двумя последовательностями u0, u1, u2,… и v0, v1, v2,… такими,
что xi= g ui a vi , u0=v0=0,
 ui , если xi  S1

ui+1=  2ui , если xi  S 2 ,
u  1, если x  S
i
3
 i
vi  1, если xi  S1

vi+1=  2vi , если xi  S 2
 v , если x  S
i
i
3

Вычисления в последовательностях u и v производятся по модулю n.
В силу того, что группа G – конечная, при помощи метода Флойда
можно найти такие xi и x2i, что xi = x2i. Тогда
g ui a vi = g u2 i a v2 i
 a ( vi v2i )  g (u2i ui ) . Логарифмируя по основанию g обе части данного
уравнения, получим
(vi—v2i)logga≡(u2i—ui) (mod n)
Решая это сравнение, получим искомый логарифм. (Заметим, что если
G=Z*m, то n=φ(m)).
11
Сложность данного метода составляет O( n ) , где n – порядок группы
G.
Замечание 1:
Метод может дать отказ в том случае, когда vi =v2i. Тогда следует
назначить случайные значения от 0 до n—1 переменным u0, v0 , вычислить
x0= g u0 a v0 и повторить все шаги алгоритма.
Замечание 2:
В том случае, когда имеется достаточно места для хранения данных в
процессе вычислений (например, когда G невелико или вычисления
производятся вручную), можно обойтись без метода Флойда. Тогда следует
хранить все члены последовательностей x, u и v до того, как xi = xj и
дискретный логарифм находится из сравнения (vi—vj)logga≡(uj—ui) (mod n).
Пример:
G=Z*19, a=8, g=2.
Тогда n=φ(19)=18. Поскольку решение будем производить вручную, то
не будем пользоваться методом Флойда.
Разбиение G на подмножества произведем следующим образом: если x
mod 3=1, то x S1, если x mod 3=2, то x S2, если x mod 3=0, то x S3.
Вычисления будут производиться по формулам:
8 xi mod19, если xi  S1

xi+1=f(xi)=  xi2 mod19, если xi  S 2
2 x mod19, если x  S
i
3
 i
 ui mod18, если xi  S1

ui+1=  2ui mod18, если xi  S 2 ,
u  1mod18, если x  S
i
3
 i
vi  1mod18, если xi  S1

vi+1=  2vi mod18, если xi  S 2
 v mod18, если x  S
i
i
3

12
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
x3=x8.
Логарифм найдем из сравнения (v3—v8)log28≡(u8—u3) (mod 18)
-5 log28≡3(mod 18)
13 log28≡3(mod 18)
log28≡3·7(mod 18)
log28≡3(mod 18).
Действительно, 23≡8 (mod 19).
Ответ:
log28≡3(mod 18).
1.3 Алгоритм Полига-Хеллмана
Этот алгоритм использует следующий подход: пусть G – группа порядка
n, и n= p11 p2 2 .... pk k – каноническое разложение на простые сомножители.
Если x=logga mod n, то, вычислив xi=logga mod pii , для 1 ≤ i ≤ k, можно
восстановить x, используя китайскую теорему об остатках.
Для того чтобы вычислить xi, вычисляют коэффициенты l0, l1,…, l k 1 в
pi-чном представлении числа xi: xi=l0+l1pi+…+ l k 1 pi k 1 , где 0 ≤ lj ≤ pi—1.
Представим метод Полига-Хеллмана следующим алгоритмом:
Алгоритм Полига-Хеллмана:
Вход: g – порождающий элемент циклической группы порядка n, a G.
Ш.1. Найти каноническое разложение n= p11 p2 2 .... pk k .
Ш.2. Для i от 1 до k выполнить следующие действия:
13
1. Задать q=pi, α=αi.
2. Задать γ=1, l-1=0.
n
q
3. Вычислить g  g .
4. Для j от 1 до α—1 выполнить:
4.1. Вычислить γ=γ g
l j 1q
j 1
n
, a  (a 1 ) q
j 1
4.2. Вычислить li= log g a . (например, используя алгоритм «шаг
младенца - шаг великана» или прямой поиск).
5. Вычислить xi=l0+l1q+…+lα—1qα—1.
Ш.3. Используя Китайскую теорему об остатках, решить систему
сравнений x≡xi(mod pii ) .
Выход:
x=logga mod n.
Замечание 1:
Все вычисления производятся в группе G кроме случаев, когда
оговорено иное.
Замечание 2:
Поскольку порядок
l
элемента a  ( g ) j (в чем нетрудно убедиться,
подставив вместо a его выражение из 4.2 и учитывая, что порядок a есть q),
то li= log g a .
Заметим, что вычисление логарифма прямым поиском на этапе 4.2.
происходит сравнительно быстро, так как приходится перебирать не более q
значений.
Данный метод эффективен в случаях, когда n является большим числом,
а все его простые сомножители – малыми числами.
14
Сложность
данного
алгоритма
составляет
k
O(  i (log n 
i 1
pi ) )
умножений в группе при условии, что разложение n известно.
Пример:
Пусть G=Z*p, p=61, g=2, a=7.
Ш.1.
n=φ(p)=p—1=60=22·3·5.
Ш.2.
1. q=2, α=2.
2. γ=1, l-1=0.
3. g =230 mod 61=60.
4. j=0  γ=1, a =730 mod 61 = 60  l0=log6060 mod 61=1.
j=1  γ=2, a =(7·2-1)30mod 61=(7·31)30mod 61=1  l0=log601 mod
61=0.
5. x1=1+0·2=1.
1. q=3, α=1.
2. γ=1, l-1=0.
3. g =220 mod 61=47.
4. j=0  γ=1, a =720 mod 61 = 47  l0=log4747 mod 61=1.
5. x2=1.
1. q=5, α=1.
2. γ=1, l-1=0.
3. g =212 mod 61=9.
4. j=0  γ=1, a =712 mod 61 = 34  l0=log934 mod 61=4 (этот
логарифм нашли прямым перебором).
5. x3=4.
15
 x  1(mod 4)

Ш.3. Составим и решим систему  x  1(mod 3) .
 x  4(mod 5)

Решением этой системы будет:
x≡48 (mod 60).
Проверка:
248mod 61=7.
Ответ:
log27 mod 60 = 48.
1.4 Алгоритм исчисления порядка (index-calculus algorithm)
Основные идеи алгоритма исчисления порядка были известны с 20-х
годов XX века, но лишь в 1979 году Адлерман указал на этот алгоритм как на
средство вычисления дискретного логарифма и исследовал его трудоемкость.
В настоящее время алгоритм исчисления порядка и его улучшенные
варианты
дают
наиболее
быстрый
способ
вычисления
дискретных
логарифмов в некоторых конечных группах, в частности, в группе Zp*.
Этот алгоритм в отличие от алгоритмов прямого поиска и ро-метода
подходит не для всех циклических групп.
Алгоритм состоит в следующем:
Алгоритм исчисления порядка
Вход: g – порождающий элемент циклической группы порядка n, a G,
с≈10 – параметр надежности.
Ш.1. Выбирается факторная база S={p1, p2,…,pt}. (Если G=Zp*, то S
состоит из t первых простых чисел.)
Ш.2. Выбрать случайное k: 0≤k<n и вычислить gk.
Ш.3. Попытаться разложить gk по факторной базе:
t
g   pii , αi≥0.
k
i 1
16
Если это не удалось, вернуться на Шаг 2.
Ш.4. Логарифмируя обе части получившегося выражения, получаем
t
k   i log g pi (mod n) *
i 1
В этом выражении неизвестными являются логарифмы.
Это сравнение с t неизвестными следует запомнить.
Ш.5. Если сравнений вида (*), полученных на Шаге 4, меньше, чем t+c,
то вернуться на Шаг 2.
Ш.6. Решить систему t+c сравнений с t неизвестными вида (*),
составленную на Шагах 2-5.
Ш.7. Выбрать случайное k: 0≤k<n и вычислить agk.
Ш.8. Попытаться разложить agk по факторной базе:
t
ag   pii , βi≥0.
k
i 1
Если это не удалось, вернуться на Шаг 7.
Ш.9. Логарифмируя обе части последнего равенства, получаем
t
x= log g a    i log g pi  k mod n ,
i 1
где loggpi (1≤i≤t) вычислены на Шаге 6 как решение системы сравнений.
Выход:
x = logga mod n.
В том случае, когда G=Zp*, в качестве факторной базы S берут t первых
простых чисел. Такой выбор оправдан следующим наблюдением. Число,
наугад выбранное из множества целых чисел, с вероятностью 1/2 делится на
2, с вероятностью 1/3 – на 3, с вероятностью 1/5 – на 5 и т.д. Поэтому можно
ожидать, что в промежутке от 1 до p—1 найдется достаточно много чисел, в
разложении которых участвуют только маленькие простые делители из
множества S. Именно такие числа отыскиваются на шагах 2 и 7.
Параметр c вводится для того, чтобы система сравнений, решаемая на
Шаге 6, имела единственное решение. Дело в том, что полученная система
17
может содержать линейно зависимые сравнения. Считается, что при
значении с порядка 10 и большом p система сравнений имеет единственное
решение с высокой вероятностью.
Пример:
G=Z*71, g=7, a=17, n=φ(71)=70.
S={2, 3, 5, 7} (Шаг 1). (Можем сразу указать log77 mod 70=1).
Теперь будем перебирать k для составления системы сравнений вида *
(Шаги 2—5).
k=2, 72 mod 71=49=7·7. (поскольку log77 уже вычислен, это сравнение
нам не пригодится).
k=3, 73 mod 71=59.
k=4, 74 mod 71=58=2·29.
k=5, 75 mod 71=51=3·17.
k=6, 76 mod 71=2

6≡log72(mod 70)
k=7, 77 mod 71=14=2·7

7≡log72+log77(mod 70)
k=8, 78 mod 71=27=33

8≡3log73(mod 70)
k=9, 79 mod 71=47.
k=10, 710 mod 71=45=32·5 
10≡2log73+log75(mod 70)
Теперь имеем достаточно сравнений для того, чтобы определить
логарифмы от элементов факторной базы. Вот эти сравнения:
6≡log72(mod 70)
7≡log72+log77(mod 70)
8≡3log73(mod 70)
10≡2log73+log75(mod 70)
Решая полученную систему, получаем (Шаг 6):
log72≡6(mod 70),
log73≡26(mod 70),
log75≡28(mod 70), log77≡1(mod 70).
Перейдем к Шагам 7—9:
18
k=1, 26·7 mod 71=40=23·5  log726≡3log72+log75—1(mod 70) 
log726≡3·6+28—1(mod 70)
log726≡45(mod 70)
Проверка:
745 mod 71 = 26. Верно.
Ответ:
log726≡45(mod 70).
Замечание:
Для случая G=Zp и для случая G=F2m составляет Lq[1/2,c], где q есть
мощность G, с > 0 – константа.
1.5 Оценка сложности решения
Рассмотрим от чего зависит сложность решения заданий в каждом из
методов:
Шаг младенца - шаг великана. Количество итераций фиксировано и
составляет примерно
. Таким образом, сложность зависит только от
размера простого числа p.
Ро-метод Полларда. Количество итераций – это произвольное число от
1 до
. Сложность зависит и от простого числа p, и от количества итераций,
но основным критерием сложности все же является количество итераций.
Алгоритм Полига-Хеллмана. Количество итераций требуемых для
вычисления логарифма в основном зависит от размера простого числа.
Поэтому итоговая сложность определяется этим параметром.
Алгоритм исчисления порядка. В данном алгоритме, количество
итераций зависит, как от размера p, так и от размера факторной базы. Но
факторную базу мы выбираем заранее, и ее размер является фиксированным.
Поэтому итоговая сложность определяется только размером простого числа.
19
ГЛАВА 2. Обзор существующих методов контроля знаний
2.1 Методы контроля знаний при изучении
«Теоретико-числовые методы в криптографии»
курса
Контроль знаний учащихся является составной частью процесса
обучения. По определению контроль - это соотношение достигнутых
результатов с запланированными целями обучения. От его правильной
организации во многом зависят эффективность управления учебновоспитательным процессом и качество подготовки специалиста. Правильно
поставленный
контроль
учебной
деятельности
учащихся
позволяет
преподавателю оценивать получаемые ими знания, умения и навыки,
вовремя оказать необходимую помощь и добиться поставленных целей
обучения. Все это в совокупности создает благоприятные условия для
развития познавательных способностей учащихся и активизации их
самостоятельной работы на занятиях.
В
системе
высшего
профессионального
образования
приняты
следующие способы контроля знаний:
1) тестирование;
2) контрольные и самостоятельные работы;
3) устный экзамен;
4) письменный теоретический опрос;
5) лабораторные работы;
6) коллоквиумы.
Учебный
обеспечивает
курс
«Теоретико-числовые
приобретение
знаний
по
методы
в
криптографии»
математическим
основам
криптографической защиты информации. В курсе рассказывается об
алгебраических основах теории чисел, криптографических алгоритмах
базирующихся на теоретико-числовых прицепах, описываются различные
алгоритмы криптоанализа
двухключевых криптосистем - алгоритмы
факторизации и дискретного логарифмирования.
20
В ходе изучения дисциплины студенты должны овладеть навыками
применения основных математических методов и алгоритмов к вопросам
построения криптосистем и их анализу.
Так как изучаемый курс в большей степени является математическим, то
для
контроля знаний, отработки и закрепления навыков у студентов, из
существующих методов контроля наиболее подходит тестирование и
использование контрольных и самостоятельных работ.
2.2 Тесты
Педагогический тест - это система заданий специфической формы,
позволяющая измерить уровень знаний студентов, совокупность их
представлений и навыков на той или иной области содержания.
Педагогический тест рассматривается именно как система, как
упорядоченное множество тестовых заданий. Задания - это те элементы,
"кирпичики", из которых составляется педагогический тест. Педагогический
тест, в большинстве случаев, не требует квалифицированных преподавателей
для проверки результатов тестирования. Педагогический тест, как правило,
не требует большого количества учебного времени на его проверку.
Планомерное
осуществление
тестового
контроля
позволяет
преподавателю, оценить степень усвоения учебного материала студентами за
определенный период. Выявить успехи в учении, пробелы и недостатки в
знаниях, умениях и навыках у отдельных студентов и у всей группы в целом,
определить качество усвоения пройденного материала. Объективный анализ
результатов тестового контроля за учебной деятельностью студентов служит
для преподавателей основой определения состояния учебно-воспитательной
работы и мер, необходимых для ее совершенствования. Тестовый контроль,
осуществляемый преподавателем, в сочетании с другими формами контроля
и самоконтролем дает возможность каждому студенту видеть результаты
обучения и принимать меры к устранению обнаруженных недостатков.
21
При продуманной организации тестовый контроль воспринимается
испытуемыми как обычный элемент учебного процесса и не вызывает
отрицательных эмоций. Более того, как показывают отечественные и
зарубежные психологические исследования, уровень стресса при тестовом
контроле значительно ниже, чем при традиционных (особенно устных)
формах субъективного контроля.
Как известно, самоконтроль студентов обеспечивает функционирование
внутренней обратной связи в процессе обучения, получение самим
обучаемым информации о полноте и качестве изучения программного
материала, прочности сформированных умений и навыков, возникших
трудностях и недостатках. Самопроверка с помощью диагностических тестов
имеет большое психологическое значение, стимулирует обучение. С ее
помощью студент реально убеждается в том, как он овладел знаниями,
проверяет правильность выполнения действий, оценивает практическую
значимость результатов выполненных заданий. В организации самоконтроля
студентов применяются как обычные "бумажные" диагностические тестовые
материалы, так и компьютеризованные тестовые средства контроля.
Классификация тестов:
1) педагогические
интерпретации
тесты
классифицируются
результатов
тестирования
по
на
методологии
нормативно-
ориентированные и критериально-ориентированные.
2) педагогические
тесты
различаются
на
гомогенные
и
гетерогенные.
3) педагогические тесты в системе профессионального образования
подразделяются
на
виды:
вступительные,
текущие,
на
тесты
промежуточной и итоговой аттестации.
4) по форме предъявления тесты различаются на "бумажные"
(бланковые), когда испытуемому предоставляется распечатка теста на
бумаге, и на компьютерные, когда студент должен отвечать на задания
работая на компьютере.
Приведем краткое описание различных видов педагогических тестов.
22
Нормативно-ориентированный педагогический тест (по-английски normreferenced
test) позволяет
сравнивать
учебные достижения
(уровень
подготовки, уровень профессиональных знаний и умений) отдельных
испытуемых друг с другом. Критериально-ориентированный педагогический
тест (по-английски criterion-referenced test) позволяет оценивать, в какой
степени испытуемые овладели необходимым учебным материалом.
Нормативно-ориентированные педагогические тесты используются для
того, чтобы получить надежные и нормально распределенные баллы для
сравнения тестируемых.
Критериально-ориентированные педагогические тесты применяются для
того, чтобы интерпретировать результаты тестирования в соответствии
уровнем обученности испытуемых на хорошо определенной области
содержания.
Гомогенный педагогический тест основывается на содержании какойлибо одной дисциплины. При его разработке авторы должны четко
отслеживать, чтобы каждое задание не выходило по своему содержанию за
рамки данной дисциплины. Гомогенный тест может быть как нормативноориентированным, так и критериально-ориентированным, в зависимости от
цели его создания. Такой тип педагогического теста наиболее распространен
в учебном процессе.
Гетерогенный педагогический тест основывается на содержании
нескольких дисциплин. Гетерогенный педагогический тест является по
своему существу междисциплинарным. В большинстве случаев каждое
задание гетерогенного теста включает в себя элементы содержания
нескольких дисциплин. При его разработке авторы должны представлять
себе цели его создания и быть компетентными во многих дисциплинах.
Естественно, гетерогенный тест гораздо более труден для авторов, чем
гомогенный. Одной из разновидностей гетерогенного теста является набор
гомогенных тестов, т.е. гетерогенный тест может состоять из ряда
гомогенных частей (субтестов). Наибольшее распространение гетерогенные
23
тесты
получили
при
итоговом
контроле
студентов,
а
также
при
профессиональной аттестации кадров.
Основными видами контроля над учебной деятельностью студентов
являются текущий, периодический (рубежный, поэтапный, промежуточный)
и итоговый контроль.
Вступительный тестовый контроль осуществляется при приеме в
среднее
специальное
испытания.
учебное
Вступительное
заведение
тестирование
в
качестве
проводится
вступительного
по
нескольким
дисциплинам предусмотренным в нормативных документах о приеме в
учебные заведения. Для стандартизации требований к абитуриентам и
унификации (единообразия) процедуры вступительных испытаний тестовый
контроль абитуриентов должен быть организован централизовано. Для
вступительных тестов можно рекомендовать гомогенный нормативноориентированный подход к интерпретации результатов тестирования.
Текущий тестовый контроль может осуществляться в ходе повседневной
учебной работы. Текущий тестовый контроль проводится с помощью
нескольких параллельных форм (вариантов) теста, разработанного самим
преподавателем или группой преподавателей. Этот вид контроля имеет
большое
значение
для
стимулирования
у
студентов
стремления
к
самостоятельной систематической работе над выполнением классных и
домашних заданий, повышения интереса к учению и чувства ответственности
за его результаты.
Промежуточный (рубежный, поэтапный, периодический) тестовый
контроль проводится обычно после изучения логически законченной части
(раздела, модуля) программы или в конце учебного периода (семестра,
курса). Он состоит в проверке учебной деятельности студентов по освоению
сравнительно большего объема материала. Поэтому к промежуточному
педагогическому тесту предъявляются повышенные требования. Он должен
обладать достаточно высокой надежностью и валидностью. К его разработке
должны привлекаться самые опытные преподаватели. Каждый тест для
24
промежуточной
аттестации
должен
быть
гомогенным,
однако
для
соблюдения комплексности аттестации и междисциплинарных связей,
необходимо разработка батарей (целых серий) гомогенных критериальноориентированных тестов.
Итоговый тестовый контроль осуществляется в конце каждого учебного
года, а также при завершении изучения дисциплины (курса) с обязательным
учетом результатов текущего и промежуточного (периодического) контроля.
Итоговый тест (или батарея итоговых тестов) совместно с другими
аттестационными процедурами может существенно повысить качество
подготовки специалистов. Однако, итоговый аттестационный педагогический
тест должен обладать высокой содержательной валидностью и полностью
соответствовать ГОС СПО по специальности. Разрабатывать такой вид теста
должны
опытные
преподаватели
и
методисты
под
руководством
профессиональных тестологов. Процесс разработки итогового теста должен
проходить централизовано и включать в себя все научно-обоснованные
этапы создания педагогического теста.
Педагогические тесты, предъявляемые испытуемым на бумажном
носителе в виде распечатки, наиболее распространены и традиционны как у
нас, так и за рубежом. С экономической точки зрения "бумажные" тесты
продолжают оставаться наиболее доступными и дешевыми. Однако,
хранение, редактирование и вариативная распечатка педагогического теста в
современных условиях должна происходить с помощью специализированных
программных средств.
2.3 Контрольные и самостоятельные работы
Контрольные работы являются необходимым условием достижения
планируемых результатов обучения. В процессе изучения курса «Теоретикочисловые
методы
количеством
в
криптографии»
математических
и
студент
аналитических
овладевает
большим
методов,
поэтому
контрольные задания должны быть направлены на отработку основных
25
навыков, обеспечивать достоверную проверку уровня обучения, должны
стимулировать учащихся, позволять им продемонстрировать прогресс в
своей общей подготовке.
Так же очень важна самостоятельная работа студентов, ведь именно она
является наиболее эффективной формой их учебной работы. При этом
правильная, рациональная организация самостоятельной работы - один из
наиболее
мощных
способов
изучения
нового
материала.
Работая
самостоятельно и осуществляя самоконтроль, учащийся сам определяет
адекватный для себя метод добывания информации и задача учителя обеспечить его исчерпывающим набором источников.
2.4 Итоги
Как видим, существует большое количество методов контроля, обучения
и оценки остаточных знаний студентов. Применительно к курсу «Теоретикочисловые методы в криптографии» для оценки знаний студентов нужно
использовать критериально-ориентированные тесты. Гомогенные тесты
подойдут для использования в текущим тестовом контроле для оценки
остаточных знаний после изучения очередного раздела. А гетерогенные
нужно применять для итогового контроля после полного изучения данной
темы. Сложность тестового контроля по данному курсу заключается в том,
что нельзя создавать вопросы типа «Вычислите дискретный логарифм .. »,
потому что студент довольно просто сможет из предложенных вариантов
сможет выбрать правильный не вычисляя сам логарифм. Следовательно, если
мы создаем тесты, то нужно отказаться от вариантов ответов вообще или же
использовать их в другой форме. Например, можно использовать такой
подход: указывать в списке не точные значения, а требовать отметить все
подходящие варианты из предложенного списка, такого как:
а) результат больше 200;
б) результат меньше 50;
в) результат больше 5;
26
г) результат меньше 100.
При этом ответ считается правильным, если выбраны все нужные
варианты, и не выбран ни один из ненужных. Вероятность случайно угадать
правильный результат здесь составляет 2-k, где k - количество вариантов в
вопросе.
Например для обеспечения 5% -й вероятности угадывания
требуется всего 5 вариантов ответов в вопросе, для 1%-й вероятности – 7
вариантов.
Такой
подход
делает
малоэффективным
прямой
подбор
правильных вариантов, побуждая студента прорешать само задание.
Если же мы хотим не просто оценить уровень знаний студента, но и
обучить
его,
самостоятельные
то
предпочтительнее
работы.
Поэтому
использовать
разрабатываемая
контрольные
система
и
будет
генерировать проверочные задания именно в таком виде. Их можно будет
использовать для:
1) текущего контроля успеваемости, в форме аудиторных и
домашних контрольных работ. Преподаватель определяет необходимый
набор, тем самым формируя базу задач и соответствующих решений.
Задачи раздаются студентам, а при помощи готовых решений
сокращается время, затрачиваемое на проверку.
2) самоподготовки студентов, в форме выполнения домашних
заданий и контрольных работ. При этом студентам вручаются сами
задания и образцы их решений.
3) обучения с участием преподавателя в ходе решения задач на
практических занятиях.
ГЛАВА 3. Реализация модулей
3.1 Среда разработки
В качестве языка программирования выбран язык C# и его версия 3.0, в
качестве среды разработки программных проектов - Visual Studio 2008 и
Framework.Net в версии 3.5. C# — объектно-ориентированный язык
программирования. Разработан в 1998—2001 годах группой инженеров под
руководством Андерса Хейлсберга в компании Microsoft как основной язык
27
разработки приложений для платформы Microsoft .NET. Компилятор с C#
входит в стандартную установку самой .NET, поэтому программы на нём
можно создавать и компилировать даже без инструментальных средств,
вроде Visual Studio.
C# относится к семье языков с C - подобным синтаксисом, из них его
синтаксис наиболее близок к C++ и Java. Язык имеет статическую
типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе
операторов явного и неявного приведения типа), делегаты, атрибуты,
события, свойства, обобщённые типы и методы, итераторы, анонимные
функции с поддержкой замыканий, LINQ, исключения, комментарии в
формате XML.
Переняв многое от своих предшественников — языков C++, Java, Delphi,
Модула и Smalltalk — С#, опираясь на практику их использования,
исключает некоторые модели, зарекомендовавшие себя как проблематичные
при
разработке
программных
систем:
так,
C#
не
поддерживает
множественное наследование классов (в отличие от C++).
3.2 Взаимодействие с ядром
Все разрабатываемые модели будут выполнены в виде отдельных
динамически подключаемых библиотек DLL (Dynamic-link library).
От разработчика управляющего ядра были получены следующие
указания:
 использовать один класс для всего модуля (название не имеет
значения);
 в модуле обязательно должна присутствовать функция расчета
Calc (входящие параметры), создающая файлы: task.doc (с заданиями) и
solution.doc (с решениями) в папке проекта (Application.StartupPath);
 все параметры для функции Calc имеют строковый тип;
 в модуле обязательно должна быть функция Build, при вызове
которой создается файл построения формы (Form.xml).
28
Как видим, для взаимодействия с основным ядром системы, каждый
модуль формирует XML документ.
XML (eXtensible Markup Language) — расширяемый язык разметки,
фактически представляющий собой свод общих синтаксических правил.
XML
—
текстовый
формат,
предназначенный
для
хранения
структурированных данных (взамен существующих файлов баз данных), для
обмена информацией между программами, а также для создания на его
основе более специализированных языков разметки (например, XHTML),
иногда называемых словарями. XML является упрощённым подмножеством
языка SGML.
Целью создания XML было обеспечение совместимости при передаче
структурированных
данных
между
разными
системами
обработки
информации.
В нашем случае XML документ используется для описания внешнего
вида формы, входных параметров
и другой необходимой служебной
информации. На основе этих данных ядро строит внешний программный
интерфейс и обеспечивает нормальное функционирование всего комплекса.
Примерный вид XML – файла:
<?xml version="1.0" encoding="UTF-8" ?>
<form x="0" y="0" width="271" height="161">
Ро-метод Полларда.
<label name="l1" x="28" y="15" width="116" height="13">
Кол-во заданий:
</label>
<label name="l2" x="12" y="41" width="132" height="13">
Максимальный модуль:
</label>
<textbox name="Count" x="147" y="12" width="100" height="20">
10
</textbox>
<textbox name="MaxSimple" x="147" y="38" width="100" height="20">
1000
</textbox>
<button name="RunBtn" x="128" y="95" width="122" height="23">
Сгенерировать
<param>
Cnt
</param>
<param>
MaxSmlp
29
</param>
</button>
</form>
3.3 Экспорт данных
Экспорт данных происходит при помощи работы с COM – объектами
Microsoft Office.
COM (Component Object Model — Объектная Модель Компонентов) —
это технологический стандарт от компании Microsoft, предназначенный для
создания
программного
обеспечения
на
основе
взаимодействующих
распределённых компонентов, каждый из которых может использоваться во
многих программах одновременно. Стандарт воплощает в себе идеи
полиморфизма
и
инкапсуляции
объектно-ориентированного
программирования. Стандарт COM мог бы быть универсальным и
платформо-независимым, но закрепился в основном на операционных
системах семейства Microsoft Windows и в современных версиях технология
СOM используется очень широко.
Основным понятием, которым оперирует стандарт COM, является COMкомпонент. Программы, построенные на стандарте COM, фактически не
являются
автономными
программами,
а
представляют
собой
набор
взаимодействующих между собой COM-компонентов. Каждый компонент
имеет
уникальный
идентификатор
(GUID)
и
может
одновременно
использоваться многими программами. Компонент взаимодействует с
другими программами через COM-интерфейсы — наборы абстрактных
функций и свойств. Каждый COM-компонент должен, как минимум,
поддерживать стандартный интерфейс «IUnknown», который предоставляет
базовые средства для работы с компонентом. Windows API предоставляет
базовые функции, позволяющие использовать COM-компоненты.
Для экспорта данных в Microsoft Office Word необходимо в каждый
разрабатываемый модуль добавить ссылку на COM-объект:
Microsoft Word 12.0 Object Library.
30
Используем двенадцатую версию, так как она позволяет работать как с
Microsoft Office Word 2007, так и с предыдущими версиями.
После
этого
мы
можем
общаться
напрямую
с
объектом
Word.Application, обеспечивающим доступ к экземпляру приложения, и
Word.Document для доступа к документам Word.
3.4 Документация
Для каждого модуля разрабатывается подробная документация для
пользователей. Описываются правила заполнения входных параметров
программы, значения каждого параметра и его влияние на остальные
параметры. Руководство пользователя приведено в Приложении 1.
Поскольку данный проект имеет перспективы на дальнейшее развитее,
составляется документация для программиста, в которой описываются все
параметры, переменные и функции, использующиеся в каждом модуле. Это
облегчит работу для будущих программистов, которые будут заниматься
разработкой дополнительных модулей на различные темы и дисциплины.
Документация программиста приведена в Приложении 2.
Так же для удобства пользования создана справочная информация с
описанием основных принципов работы с данными модулями.
3.5 Модуль BABYSTEP (Шаг младенца - шаг великана)
Модуль BABYSTEP создает задания и прорешивает их методом «Шаг
младенца – шаг великана».
Входные параметры модуля:
1) k – количество заданий, диапазон значений лежит в интервале от 1
до 25;
2) max – максимальный модуль, может принимать значения от 3 до
1000. Является единственным параметром влияющим на сложность
заданий.
31
В работе используются заранее сгенерированные таблицы простых
чисел(simple) и их порождающие элементы (porogd). Возведение в степень по
модулю реализовано в виде отдельной процедуры.
В результате работы модуля, согласная требованиям интеграции с
основным ядром, создается 2 файла Task.doc и Solution.doc, содержащие
соответственно задания и решения с ответами.
32
Блок схема алгоритма выглядит следующим образом:
Begin
k, max
L=0;L<k;1
J=max;
r=random[4,j];
p=simple[r];
g=porogd[r];
a=random[2,p-1];
mreal=p1/2;
m=round(mreal);
L=L+1;
Нет
Round(mreal)<mreal
Да
m=m+1
b=gm mod p
U0=a
V0=1
i=1;i<m;1
U[i]=(U[i-1]*g)mod p
V[i]=(V[i-1]*b) mod p
i=i+1
i=1;i<m;1
i=1;i<m;1
Нет
V[i]=U[j]
Да
x=(m*i-j)mod p-1
End
33
3.6 Модуль POLARD (Ро-метод Полларда дискретного
логарифмирования)
Данный модуль создает задания и прорешивает их Ро-методом
Полларда.
Входные параметры модуля:
1) k – количество заданий, может принимать значения от 1 до 25;
2) max – максимальный модуль n, принимает значения от 3 до 1000;
3) itmin, itmax – минимально и максимальное количество итераций
требуемых для решения.
В работе так же используются заранее сгенерированные таблицы
простых чисел(simple) и их порождающие элементы (porogd).
Особенность этого метода в том, что заранее неизвестно, сколько
потребуется итераций для нахождения решения, поэтому введены две
дополнительные переменные itmin и itmax, отвечающие за то, чтобы
сгенерированный пример не был слишком прост или же напротив, очень
сложен. Если при решении количество итераций выйдет за эти пределы, то
решаемый пример будет отброшен, и сгенерирован новый, но уже с другими
параметрами.
В модуле используется вычисление наибольшего общего делителя и
поиск обратного элемента в поле по модулю. Данные алгоритмы вынесены в
отдельные независимые процедуры. Также в качестве процедур реализовано
возведение в степень по модулю и разбиение группы G на три
непересекающихся подмножества примерно равной мощности.
В результате работы модуля получится 2 файла Task.doc и Solution.doc,
содержащие соответственно задания и решения с ответами.
34
Блок-схема имеет следующий вид:
Begin
K; max; itmax;
itmin;
L=0; k; 1;
jsimple=max
r=random(4,jsimple)
p=simple[r]
g=porogd[r]
i++;
X[i]=func(X[i-1]);
U[i]=funcu(U[i-1], X[i-1]);
V[i]=funcv(V[i-1], X[i-1]);
a=random(2,p-2);
X[0]=1; U[0]=0;V[0]=0
i=0;
Нет
I==itmax
j=0;i-1;
1;
b=(U[j]-U[i])mod(p-1);
c=(V[i])-V[j]mod(p-1);
z=NOD(c,p);
X[i]==X[j
Нет
i<itmin
Да
Нет
Да
Да
]
Нет
(b/z)!=round(b/z)
j=1; z; 1;
b=b/z; m=(p-1); c=c/z;
log[0]=(b*obr(c,m))mod(p-1);
log[j]=log[j-1]+m*(j-1);
1]+m*(j-1);
End
35
Да
3.7 Модуль POLIHELL (дискретное логарифмирование при
помощи алгоритма Полига-Хеллмана)
Данный модуль для генерации заданий и решений использует алгоритм
Полига-Хеллмана.
Входные параметры модуля:
1) k – количество заданий, может принимать значения от 1 до 25;
2) max – максимальный модуль n, может принимать значения от 3
до 1000;
3) itmin, itmax – минимально и максимальное количество итераций
требуемых для решения.
В работе так же используются заранее сгенерированные таблицы
простых чисел(simple) и их порождающие элементы (porogd). К тому же в
данном алгоритме, как и в Ро-методе Полларда, невозможно заранее
выяснить количество итераций требуемых для решения, поэтому аналогично
введены
две переменные (itmin, itmax), задающие ограничения
на
максимальное и минимальное их значение. Возведение в степень по модулю,
вычисление НОДа и поиск обратного элемента для удобства использования
вынесены в отдельные процедуры.
Вычисление
простого
дискретного
логарифма
внутри
модуля
происходит с использованием прямого поиска, а итоговая система сравнений
решается при помощи Китайской теоремы. Оба этих алгоритма реализованы
так же вне основной процедуры.
36
Блок-схема:
Begin
K; max; itmax;
itmin;
L=0; k; 1;
jsimple=max;
r=random(4,jsimple);
p=simple[r];
g=porogd[r];
a=random(2,p-2);
n=p-1=p[1]alf[1]..p[m] alf[1]
i=1;m; 1;
q=p[i]; alf=alf[i];
gamma=1; L[0]=0;
gnew=gn/q mod p;
j=0;alf-1; 1;
z=0;alf; 1;
gamma=(gamma*g(L[j]*q^(j-1)) mod n) mod p;
stepen=n/qj+1;
anew=(a*obrgamma)stepen mod p;
L[j+1]=loggnew anew mod (p[i]alf[i])
X[z]= (x[z-1]+ (L[z]*qalf-1)mod n);
i=0;m; 1;
End
m[i] = p[i]alf[i];
M[i]=n/m[i];
Mobr = obr (M[i],m[i]);
x=(x+(x[i]*M[i]*Mobr[i])mod n);
37
3.8 Модуль INDEXCLCL (Алгоритм исчисления порядка (indexcalculus algorithm)
Данный модуль создает задания и их решения при помощи алгоритма
исчисления порядка.
Параметры, подающиеся на вход аналогичны входным параметрам в
предыдущих модулях:
1) k – количество заданий, принимает значения от 1 до 25;
2) max – максимальный модуль, может принимать значения от 3 до
1000. Влияет на сложность генерируемых заданий.
3) t – размер факторной базы, по умолчанию равен 3.
4) nmax – максимальное количество чисел для перебора, по
умолчанию данный параметр равен 10. Не должен быть слишком
большим, так как от напрямую зависит объем работы, которой
потребуется студенту для решения.
В работе, как и во всех других модулях, так же используются заранее
сгенерированные таблицы простых чисел и их порождающие элементы.
В процессе работы производится разложение на факторную базу,
состоящую из t последовательных простых чисел начиная 2. Сама факторная
база указывается отдельно в тексте задания. Очень важно, что бы студент при
решении использовал именно ее, иначе ход его решения будет кардинально
отличаться от предложенного системой.
38
ЗАКЛЮЧЕНИЕ
В ходе выполнения дипломной работы были изучены материалы по
теме «Дискретное логарифмирование» и решена намеченная цель – созданы
модули автоматической генерации заданий и решений по данной теме. Для
достижения этой цели, мной в ходе выполнения работы были решены
следующие задачи:
 Определен набор тем для создания модулей, максимально полно
покрывающий тему «Дискретного логарифмирования»
 Спроектированы и разработаны сами модули генерации заданий
и решений по выбранным темам. Обладают дружественным, интуитивно
понятным интерфейсом и простотой использования.
 Реализована интеграция модулей в программный комплекс.
Данный комплекс объединяет все модули в одно цело. Имеет
дружественный,
интуитивно
понятный
интерфейс
и
прост
в
использовании.
 Составлена документация двух видов. Для пользователя – с
иллюстрациями интерфейса и объяснением всех параметров и правил их
заполнения. Для программиста – с объяснениями исходного кода,
параметров и функций, использующихся в данных модулях.
 Произведена апробация генерируемых заданий на студентах 5
курса специальности «Компьютерная безопасность», с целью проверки
корректности их составления и правильности решения.
 Сформирована база учебных задач по теме «Дискретное
логарифмирование», и успешное ее использование в ходе аудиторных
практических занятий по предмету «Теоретико-числовые методы в
криптографии».
39
СПИСОК ЛИТЕРАТУРЫ
1. А.В.Рожков, О.В. Ниссенбаум. Теоретико-числовые методы в
криптографии: Учебное пособие. Тюмень: Издательство Тюменского
государственного университета, 2007. 160с.
2. Виноградов И.М. Основы теории чисел. М.: Наука, 1972. 402с.
3. Бухштаб А.А. Теория чисел. Издательство: Лань. Серия:
Учебники для вузов. Специальная литература. 2008 г. ISBN: 978-5-81140847-4
4. Алферов А.П., Зубов А.Ю., Кузьмин А.С., Черемушкин А.В.
Основы криптографии. Учебное пособие. М.: Гелиос-АРВ, 2001.
5. Б. Я. Рябко, А. Н. Фионов. Основы современной криптографии
для специалистов в информационных технологиях. Издательство Научный мир, 2004 год. ISBN: 5-89176-233-1
6. Трей Нэш. C# 2008: ускоренный курс для профессионалов. Язык
программирования C# 3.0 для .NET 3.5. М.: Вильямс, 2008. 576c.
7. Эндрю Троелсен. С# 2008 и платформа .NET 3.5 Framework =
Pro C# 2008 and the .NET 3.5 Framework. — 4-е изд. — М.: Вильямс,
2009. — С. 1368. — ISBN 978-5-8459-1589-4
8. Герберт Шилдт. C# 3.0: полное руководство = C# 3.0: The
Complete Reference. — 4-е изд. — М.: Вильямс, 2009. — С. 992. — ISBN
978-5-8459-1565-8
9. Кристиан Нейгел, Карли Уотсон и др. Visual C# 2008: базовый
курс. Visual Studio® 2008 = Beginning Visual C# 2008. — М.: Диалектика,
2009. — ISBN 978-5-8459-1317-3
40
10.
Кристиан Нейгел, Билл Ивьен и др. C# 2008 и платформа
.NET 3.5 для профессионалов = Professional C# 2008. — М.: Диалектика,
2008. — ISBN 978-5-8459-1458-3
11.
В.В. Гузеев. Образовательная технология: от приёма до
философии. М.:Сентябрь, 1996.
12.
В.И. Загвязинский - Теория обучения: Современная
интерпретация: Учеб. пособие для студ. высш. пед. учеб. заведений. М.: Издательский центр «Академия», 2001-192 с.
41
Приложение 1. Документация для пользователя.
Модуль BABYSTEP:
На рисунке изображен интерфейс модуля генерирующего задания и
решения методом Шаг младенца – шаг великана.
Модуль имеет следующие параметры:
 Количество
заданий.
Числовое
значение,
отвечающее
за
количество создаваемых заданий с решениями. Может быть только
числовым значением от 1 до 25.
 Максимальное простое число. Это максимальное значение
модуля, которое он может при генерации заданий. Может быть только
числовым значением от 3 до 2000. Напрямую влияет на сложность
генерируемых заданий. Чем больше число, тем более сложные
вычисления потребуется произвести студенту.
После ввода всех параметров нужно нажать кнопку «Сгенерировать».
Модуль создаст и сохранит файлы по указанному пути. При завершении
работы модуля появится информационное сообщение, что файлы созданы.
42
Модуль POLARD:
На рисунке изображен интерфейс модуля генерирующего задания и
решения Ро-методом Полларда.
Модуль имеет следующие параметры:
 Количество заданий. Принимает значения от 1 до 25.
 Максимальное простое число. Это максимальное значение
модуля, которое он принимает в процессе генерации заданий. Имеет
только числовое значением от 3 до 2000. От этого параметра зависит
сложность расчетов, выполняемых студентов в ходе решения.
 Минимальное
количество
итераций.
Числовое
значение,
ограничивающее снизу количество расчетов, которые понадобятся для
решения, тем самым, этот параметр исключает слишком простые
задания. Значение поля лежит в интервале от 2 до 17, но не больше
максимального значения итераций.
 Максимальное
количество
итераций.
Этот
параметр
устанавливает ограничение сверху на количество расчетов, которые
придется выполнить студентом в ходе решения, тем самым отбрасывает
слишком сложные задания. Может принимать значения от 3 до 18, но не
меньше предыдущего параметра.
43
После ввода всех данных нажимается кнопка «Сгенерировать». Модуль
начинает работу, создает задания и решения в соответствии с заданной
сложности. По окончании работы, информирует пользователя об окончании
работы.
Модуль POLIHELL:
На рисунке представлен интерфейс модуля генерирующего задания и
решения
алгоритмом
Поллига-Хэллмана.
Как
видим,
он
идентичен
интерфейсу у предыдущего модуля, соответственно входные параметры
схожи:
 Количество заданий. Количество генерируемых заданий с
решениями, которые получатся в результате работы модуля. Принимает
числовые значения числовые значения от 1 до 25.
 Максимальное простое число. Это максимальное значение
модуля, принимаемое им в результате генерации чисел. Может быть
только числовым значением от 3 до 2000. Влияет на сложность расчетов
в итоговых заданиях.
 Параметры, ограничивающие количество итераций снизу и
сверху, для задания нужной сложности. Минимальное значение
составляет 2, а максимальное 15.
44
По нажатию на «Сгенерировать» модуль создаст и сохранит задания в
соответствующие файлы, о чем проинформирует пользователя всплывающим
окном.
45
Приложение 2. Документация для программиста.
Общая информация относительно всех модулей.
Таблица простых чисел и соответствующие им порождающие элементы
заранее сгенерированы и хранятся в двух текстовых файлах: simple.txt
содержит все простые числа от 7 до 2557, а файл gener.txt – их порождающие.
Чтение данных из файла и заполнение соответствующих массивов
происходит следующим образом:
string[] SimpleArr = System.IO.File.ReadAllLines(@"prost.txt");
string[] PorojArr = System.IO.File.ReadAllLines(@"poroj.txt");
Так же в каждом модуле присутствует массив символов:
private char[] abc = { 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'к', 'л',
'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ы',
'э', 'ю', 'я'};
Его элементы используется для нумерации заданий при экспорте в
Microsoft Office Word.
Экспорт данных происходит в Microsoft Office Word через COM - объект
Microsoft.Office.Interop.Word. Поэтому в каждый проект нужно добавить на
него ссылку:
Используем именно двенадцатую версию, так как она является наиболее
универсальной и позволяет работать как с Microsoft Office Word 2003, так и с
Microsoft Office Word 2007:
46
Затем внутри каждого модуля создаем два экземпляра приложения:
Word.Application wa1 = new Word.Application();
Word.Application wa1 = new Word.Application();
И добавляем по документу в каждый из них:
wrdDoc1 = wa1.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref
oMissing);
wrdDoc2 = wa2.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref
oMissing);
Вставка текста в документ происходит следующим образом:
wa1.Selection.TypeText("Решение:\n");
Для сохранения используется следующая конструкция:
Object oName = @Application.StartupPath + "/task.doc";
wrdDoc1.SaveAs(ref oName, ref oMissing, ref oMissing, ref oMissing, ref
oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref
oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref
oMissing, ref oMissing);
Object saveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
Object originalFormat = Word.WdOriginalFormat.wdWordDocument;
Object routeDocument = Type.Missing;
((Word._Application)wa1).Quit(ref saveChanges, ref originalFormat, ref
routeDocument);
wa1 = null;
47
Ро-метод Полларда.
В данном методе дополнительно используется нестандартная функция
по вычислению наибольшего общего делителя двух чисел:
private int NOD(int x, int y)
{
…
Return x;
}
И функция поиска обратного элемента в поле по модулю:
private int INV(int x, int y)
{
…
Return x;
}
Метод Полига-Хеллмана.
Из особенностей данного метода стоит отметить использование
отдельной процедуры для канонического разложения числа:
private void KANON(int x)
{
...
}
Число, поступающее на вход, раскладывается на простые сомножители.
Для хранения множителей применяется массив P[], а для их степеней массив
Alf[].
48
Приложение 3. Примеры генерируемых заданий.
Вычислить дискретный логарифм методом Шаг-младенца. Шаг-великана:
а) log22 mod 19-1.
Решение:
a = 2; p = 19; g = 2; m = 5;
U[0] = 2; V[0] = 1; b=gm mod p = 25 mod 19 = 13;
i,j
1
2
U[i]
8
4
V[j]
17
13
i = 1, j = 4; x=m*i-j mod (p-1) = 1;
Ответ:
log22 mod 18 = 1.
3
16
12
б) log369 mod 113-1.
Решение:
a = 69; p = 113; g = 3; m = 11;
U[0] = 69; V[0] = 1; b=gm mod p = 311 mod 113 = 76;
i,j
1
2
3
4
5
U[i]
94
55
52
43
56
V[j]
76
13
84
75
56
i = 4, j = 2; x=m*i-j mod (p-1) = 42;
Ответ:
log369 mod 112 = 42.
4
13
4
6
16
50
в) log672 mod 229-1.
Решение:
a = 72; p = 229; g = 6; m = 16;
U[0] = 72; V[0] = 1; b=gm mod p = 616 mod 229 = 183;
i,j
1
2
3
4
5
6
7
8
U[i] 203 73
209 109 196 31
186 200
V[j] 183 55
218 48
82
121 159 14
i = 2, j = 9; x=m*i-j mod (p-1) = 23;
Ответ:
log672 mod 228 = 23.
г) log622 mod 109-1
Решение:
a = 22; p = 109; g = 6; m = 11;
U[0] = 22; V[0] = 1; b=gm mod p = 611 mod 109 = 39;
i,j
1
2
3
4
5
U[i]
29
65
63
51
23
V[j]
39
104
25
103
23
i = 3, j = 1; x=m*i-j mod (p-1) = 32;
Ответ:
log622mod108 = 32.
6
88
93
д) log346 mod 281-1
Решение:
a = 46; p = 281; g = 3; m = 17;
U[0] = 46; V[0] = 1; b=gm mod p = 317 mod 281 = 150;
i,j
1
2
3
4
5
6
7
8
U[i] 138 133 118 73
219 95
4
12
V[j] 150 20
190 119 147 132 130 111
i = 8, j = 15; x=m*i-j mod (p-1) = 121/
Ответ:
log346mod280 = 121
9
36
71
7
48
71
9
55
43
8
31
85
10
101
83
11
148
75
7
92
30
10
108
253
8
7
80
11
43
15
Вычислить дискретный логарифм Ро-методом Полларда:
49
5
7
14
12
129
2
9
93
19
12
201
214
10
53
88
13
61
3
9
42
68
13
106
19
14
137
91
10
34
36
14
37
40
15
111
99
11
46
21
15
135
165
16
123
196
11
95
96
16
52
238
17
156
13
а) log329 mod 31.
Решение:
I
0
1
2
X(i)
1
29
4
U(i)
0
0
0
V(i)
0
1
2
S
S1
S2
S1
X5 = X 2
Теперь вычисляем логарифм:
log329 ≡ (U[2] - U[5]) * (V[5] - V[2])-1 mod 30
log329 ≡ (0 - 0) * (12 - 2)-1 mod 30
log329 ≡ 0 * 10-1 mod 30
log329 ≡ 0 * 1-1 mod 30
Сравнение имеет 10 решений..
Возможные значения логарифма: 0, 3, 6, 9, 12, 15, 18, 21, 24, 27
Ответ:
log329 ≡ 9 mod 31
б) log314 mod 31.
Решение:
i
0
1
2
3
4
5
X(i) 1
14
10
16
7
5
U(i) 0
0
0
0
0
0
V(i) 0
1
2
3
4
5
S
S1
S2
S1
S1
S1
S2
X14 = X6
Теперь вычисляем логарифм:
log314 ≡ (U[6] - U[14]) * (V[14] - V[6])-1 mod 30
log314 ≡ (0 - 12) * (19 - 10)-1 mod 30
log314 ≡ 18 * 9-1 mod 30
Сравнение имеет 1 решений..
Ответ:
log314 ≡ 6 mod 31
в) log25 mod 29.
Решение:
i
0
1
2
3
4
X(i)
1
5
25
9
18
U(i)
0
0
0
0
1
V(i)
0
1
2
3
3
S
S1
S2
S1
S3
S3
X11 = X6
Теперь вычисляем логарифм:
log25 ≡ (U[6] - U[11]) * (V[11] - V[6])-1 mod 28
log25 ≡ (2 - 10) * (10 - 4)-1 mod 28
log25 ≡ 20 * 6-1 mod 28
log25 ≡ 10 * 3-1 mod 28
Сравнение имеет 2 решений..
Возможные значения логарифма: 22, 36
Ответ:
log25 ≡ 22 mod 29
г) log627 mod 41.
Решение:
i
0
1
X(i)
1
27
U(i)
0
0
V(i)
0
1
S
S1
S3
X13 = X7
2
39
1
1
S3
3
29
2
1
S2
4
21
4
2
S3
5
3
5
2
S3
6
25
0
10
S1
7
9
0
11
S3
4
2
0
6
S2
8
27
1
11
S3
5
7
2
3
S1
6
6
2
4
S3
6
18
6
2
S3
7
26
7
2
S2
50
3
23
0
3
S2
9
19
2
11
S1
10
18
2
12
S3
7
12
3
4
S3
8
20
14
4
S2
5
4
0
12
S1
11
23
3
12
S2
8
24
4
4
S3
9
31
28
8
S1
12
2
6
24
S2
9
19
5
4
S1
10
17
28
9
S2
13
4
12
18
S1
10
8
5
5
S2
11
2
16
18
S2
12
4
32
36
S1
14
25
12
19
S1
11
6
10
10
S3
13
26
32
37
S2
Теперь вычисляем логарифм:
log627 ≡ (U[7] - U[13]) * (V[13] - V[7])-1 mod 40
log627 ≡ (7 - 32) * (37 - 2)-1 mod 40
log627 ≡ 15 * 35-1 mod 40
Сравнение имеет 1 решений..
Ответ:
log627 ≡ 25 mod 41
д) log517 mod 23.
Решение:
I
0
1
X(i)
1
17
U(i)
0
0
V(i)
0
1
S
S1
S2
X5 = X 3
Теперь вычисляем логарифм:
log517 ≡ (U[3] - U[5]) * (V[5] - V[3])-1 mod 22
log517 ≡ (0 - 1) * (6 - 3)-1 mod 22
log517 ≡ 21 * 3-1 mod 22
Сравнение имеет 1 решений..
Ответ:
log517 ≡ 7 mod 23
2
13
0
2
S1
3
14
0
3
S2
4
12
0
6
S3
Вычислить дискретный логарифм методом Полига-Хеллмана:
а) log38 mod 127-1.
Решение:
n = p — 1 = 126 = 21 • 32 • 71;
q = 2; α = 1;
γ = 1; l0 = 0;
g' = 363 mod 127 = 126;
j = 0 => γ = 1, a' = 863 mod 127 = 1 => l0 = log1261 mod 127 = 0;
x0 = 0 • 20 = 0;
q = 3; α = 2;
γ = 1; l0 = 0;
g' = 342 mod 127 = 107;
j = 0 => γ = 1, a' = 842 mod 127 = 1 => l0 = log1071 mod 127 = 0;
j = 1 => γ = 1, a' = 814 mod 127 = 1 => l1 = log1071 mod 127 = 0;
x1 = 0 • 30 + 0 • 31 = 0;
q = 7; α = 1;
γ = 1; l0 = 0;
g' = 318 mod 127 = 4;
j = 0 => γ = 1, a' = 818 mod 127 = 32 => l0 = log432 mod 127 = 6;
x2 = 6 • 70 = 6;
Составим систему:
x ≡ 0 (mod 21)
x ≡ 0 (mod 32)
x ≡ 6 (mod 71)
Решая систему получим:
x ≡ 90(mod 126).
Проверка:
390 mod 127 = 8.
Ответ:
log38 mod 126 = 90.
б) log355 mod 137-1
Решение:
n = p — 1 = 136 = 23 • 171;
q = 2; α = 3;
γ = 1; l0 = 0;
g' = 368 mod 137 = 136;
j = 0 => γ = 1, a' = 5568 mod 137 = 136 => l0 = log136136 mod 137 = 1;
51
5
14
1
6
S2
j = 1 => γ = 3, a' = 5534 mod 137 = 1 => l1 = log1361 mod 137 = 0;
j = 2 => γ = 3, a' = 5517 mod 137 = 136 => l2 = log136136 mod 137 = 1;
x0 = 1 • 20 + 0 • 21 + 1 • 22 = 5;
q = 17; α = 1;
γ = 1; l0 = 0;
g' = 38 mod 137 = 122;
j = 0 => γ = 1, a' = 558 mod 137 = 119 => l0 = log122119 mod 137 = 10;
x1 = 10 • 170 = 10;
Составим систему:
x ≡ 5 (mod 23)
x ≡ 10 (mod 171)
Решая систему получим:
x ≡ 61(mod 136).
Проверка:
361 mod 137 = 55.
Ответ:
log355 mod 136 = 61.
в) log541 mod 307-1.
Решение:
n = p — 1 = 306 = 21 • 32 • 171;
q = 2; α = 1;
γ = 1; l0 = 0;
g' = 5153 mod 307 = 306;
j = 0 => γ = 1, a' = 41153 mod 307 = 1 => l0 = log3061 mod 307 = 0;
x0 = 0 • 20 = 0;
q = 3; α = 2;
γ = 1; l0 = 0;
g' = 5102 mod 307 = 289;
j = 0 => γ = 1, a' = 41102 mod 307 = 17 => l0 = log28917 mod 307 = 2;
j = 1 => γ = 25, a' = 4134 mod 307 = 17 => l1 = log28917 mod 307 = 2;
x1 = 2 • 30 + 2 • 31 = 8;
q = 17; α = 1;
γ = 1; l0 = 0;
g' = 518 mod 307 = 81;
j = 0 => γ = 1, a' = 4118 mod 307 = 24 => l0 = log8124 mod 307 = 3;
x2 = 3 • 170 = 3;
Составим систему:
x ≡ 0 (mod 21)
x ≡ 8 (mod 32)
x ≡ 3 (mod 171)
Решая систему получим:
x ≡ 224(mod 306).
Проверка:
5224 mod 307 = 41.
Ответ:
log541 mod 306 = 224.
г) log5191 mod 193-1
Решение:
n = p — 1 = 192 = 26 • 31;
q = 2; α = 6;
γ = 1; l0 = 0;
g' = 596 mod 193 = 192;
j = 0 => γ = 1, a' = 19196 mod 193 = 1 => l0 = log1921 mod 193 = 0;
j = 1 => γ = 1, a' = 19148 mod 193 = 192 => l1 = log192192 mod 193 = 1;
j = 2 => γ = 25, a' = 19124 mod 193 = 1 => l2 = log1921 mod 193 = 0;
j = 3 => γ = 25, a' = 19112 mod 193 = 1 => l3 = log1921 mod 193 = 0;
j = 4 => γ = 25, a' = 1916 mod 193 = 1 => l4 = log1921 mod 193 = 0;
j = 5 => γ = 25, a' = 1913 mod 193 = 1 => l5 = log1921 mod 193 = 0;
x0 = 0 • 20 + 1 • 21 + 0 • 22 + 0 • 23 + 0 • 24 + 0 • 25 = 2;
q = 3; α = 1;
γ = 1; l0 = 0;
g' = 564 mod 193 = 84;
52
j = 0 => γ = 1, a' = 19164 mod 193 = 84 => l0 = log8484 mod 193 = 1;
x1 = 1 • 30 = 1
Составим систему:
x ≡ 2 (mod 26)
x ≡ 1 (mod 31)
Решая систему получим:
x ≡ 130(mod 192).
Проверка:
5130 mod 193 = 191.
Ответ:
log5191 mod 192 = 130.
д) log250 mod 419-1
Решение:
n = p — 1 = 418 = 21 • 111 • 191;
q = 2; α = 1;
γ = 1; l0 = 0;
g' = 2209 mod 419 = 418;
j = 0 => γ = 1, a' = 50209 mod 419 = 418 => l0 = log418418 mod 419 = 1;
x0 = 1 • 20 = 1
q = 11; α = 1;
γ = 1; l0 = 0;
g' = 238 mod 419 = 334;
j = 0 => γ = 1, a' = 5038 mod 419 = 300 => l0 = log334300 mod 419 = 6;
x1 = 6 • 110 = 6
q = 19; α = 1;
γ = 1; l0 = 0;
g' = 222 mod 419 = 114;
j = 0 => γ = 1, a' = 5022 mod 419 = 215 => l0 = log114215 mod 419 = 13;
x2 = 13 • 190 = 13;
Составим систему:
x ≡ 1 (mod 21)
x ≡ 6 (mod 111)
x ≡ 13 (mod 191)
Решая систему получим:
x ≡ 127(mod 418).
Проверка:
2127 mod 419 = 50.
Ответ:
log250 mod 418 = 127.
53
Download