Майзаков Максим Александрович Разработка модулей автоматической генерации заданий с решениями по теме «Дискретное логарифмирование» диплом
Вид материала | Диплом |
Содержание1.2 Ро-метод Полларда для дискретного логарифмирования |
- Мозжевилов Максим Александрович Разработка модулей генерации заданий и решений по теме, 891.19kb.
- Дидин Максим Александрович Переславль-Залесский Гимназия 7 7 7 7 7 7 7 7 56 диплом, 189.17kb.
- Дидин Максим Александрович Переславль-Залесский Гимназия 10 8 3 10 10 15 8 64 диплом, 103.28kb.
- Разработка урока по теме: «Развитие мышления через постановку проблемно творческих, 84.71kb.
- Отчет о выполеннии ниокр по теме Разработка унифицированных функциональных модулей, 219.08kb.
- Методы подготовки тестов по информатике и программированию, 55.02kb.
- Лоскутов Савва Александрович г. Асбест >26,5 диплом, 483.81kb.
- От двоичного кодирования к системам автоматической генерации кода, 2820.18kb.
- Тест №1 (из 6 заданий); Тест №2 (из 5 заданий); Тест №3 (в двух вариантах из 10 заданий);, 336.57kb.
- Название проекта, 6.03kb.
1.2 Ро-метод Полларда для дискретного логарифмирования
Этот алгоритм осуществляет случайный поиск дискретных логарифмов, как и метод «шаг ребенка – шаг великана», но он требует меньшего объема памяти для хранения данных, поэтому предпочтительней для практических целей. В основе данного метода лежит та же идея, что и в основе ро-метода для факторизации – строится псевдослучайная последовательность, в которой находятся совпадающие элементы при помощи метода Флойда, а затем на основании полученной величины вычисляется искомый дискретный логарифм.
Пусть требуется вычислить logga в конечной группе G порядка n.
Группа G разбивается на три непересекающихся подмножества примерно равной мощности: G=S1US2US3, так чтобы 1
![](images/100735-nomer-2f0749ea.gif)
Например, если G=Zp, где p – простое число, то можно задать разбиение S1={1,…,
![](images/100735-nomer-m498c0ce.gif)
![](images/100735-nomer-493b4b9f.gif)
![](images/100735-nomer-m43b54b0b.gif)
![](images/100735-nomer-m63850c53.gif)
![](images/100735-nomer-m1b762db3.gif)
![](images/100735-nomer-m1b762db3.gif)
![](images/100735-nomer-m1b762db3.gif)
Далее на G задается последовательность x0, x1, x2, … , где x0=1, xi+1 вычисляется по xi посредством функции f для i≥0:
xi+1=f(xi)=
![](images/100735-nomer-2267dee3.gif)
Вычисления проводятся в группе G, то есть если G=Zm, то вычисления следует производить по модулю m.
Такая последовательность групповых элементов может быть представлена двумя последовательностями u0, u1, u2,… и v0, v1, v2,… такими, что xi=
![](images/100735-nomer-m5d2aeb6.gif)
ui+1=
![](images/100735-nomer-77cb794b.gif)
![](images/100735-nomer-m2a7b7fa1.gif)
Вычисления в последовательностях u и v производятся по модулю n.
В силу того, что группа G – конечная, при помощи метода Флойда можно найти такие xi и x2i, что xi = x2i. Тогда
![](images/100735-nomer-m5d2aeb6.gif)
![](images/100735-nomer-m6d184952.gif)
![](images/100735-nomer-m7323a272.gif)
![](images/100735-nomer-m4c1290d6.gif)
(vi—v2i)logga≡(u2i—ui) (mod n)
Решая это сравнение, получим искомый логарифм. (Заметим, что если G=Z*m, то n=φ(m)).
Сложность данного метода составляет O(
![](images/100735-nomer-m35645686.gif)
Замечание 1:
Метод может дать отказ в том случае, когда vi =v2i. Тогда следует назначить случайные значения от 0 до n—1 переменным u0, v0 , вычислить x0=
![](images/100735-nomer-m7e0ed85f.gif)
Замечание 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
![](images/100735-nomer-m1b762db3.gif)
![](images/100735-nomer-m1b762db3.gif)
![](images/100735-nomer-m1b762db3.gif)
Вычисления будут производиться по формулам:
xi+1=f(xi)=
![](images/100735-nomer-260a8a89.gif)
ui+1=
![](images/100735-nomer-m26cf8c15.gif)
![](images/100735-nomer-m45eb810f.gif)
-
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).