ТЧМК. 02 - ТЧМК - ПЗ-2 - НДВ. Занятие 2 Решение задач по алгебраическим основам криптографии
Скачать 18.3 Kb.
|
Практическое занятие №2«Решение задач по алгебраическим основам криптографии» Цель занятия: приобретение навыков решения типовых задач по алгебраическим основам криптографии. Теоретическаячасть.Одной из актуальных теоретико-числовых задач, используемых в криптографии, является отыскание наибольшего общего делителя двух чисел и его линейного представления. Пусть MOD(a, b) есть операция взятия остатка от деления a на b, а QUO(a, b) есть частное от деления a на b. Алгоритм Евклида позволяет без разложения двух целых чисел на множители находить их наибольший общий делитель. В данном алгоритме используется следующее утверждение: если a= bq + r, где b 0, и число dделит aи b, то оно делит и r, т. е. имеем d| (a– bq). Это утверждение верно для любого делителя, включая наибольший общий делитель d = НОД(a, b). Отсюда следует, что НОД(a,b) = НОД[b, MOD (a, b)]. Для всякого aимеем также НОД(a,0) = |a|. Определит также НОД(0,0) = 0. Пусть заданы целое число aи ненулевое целое число b. Алгоритм Евклида предполагает выполнение следующей последовательности делений, где принято обозначение a0 = aи a1 = b: a0 = a1q1 + a2, 0 < a2 < |a1|, a1 = a2q2 + a3, 0 < a3 < a2, … ak-2 = ak-1qk-1 + ak, 0 < ak<ak-1, ak-1 = akqk+ 0. Процесс деления имеет конечное число шагов, поскольку остатки убывают по абсолютной величине |a1| > a2 > a3 >…> 0 (значение a1 может быть отрицательным, поэтому оно взято по абсолютной величине; остальные остатки положительны). Значение akявляется наибольшим общим делителем. С учетом указанного выше утверждения имеем НОД(a0, a1) = НОД(a1, a2) =…= НОД(ak, 0) = ak, т. е. на самом деле akявляется наибольшим общим делителем чисел a и b. Одновременно мы показали, что приведенный ниже алгоритм работает правильно. Обозначим операцию присвоения следующим образом: x := yозначает присвоение переменной xзначения y; (x,y) := (x1,y1) означает выполнение операций x:=x1 и y:=y1. Алгоритм Евклида (нахождение НОД(a, b)) Вход: aи b 0. 1. (a0, a1) := (a, b). 2. Пока a1 0 выполнять (a0, a1) := [a1, MOD (a0, a1)] 3. d := a0. Выход: d= НОД(a, b). В любой строке, описанного выше алгоритма Евклида, каждый остаток представляет собой линейное представление делимого и делителя. Очевидно, что, начиная с одного из ненулевых остатков (например, последнего, т. е. начиная с ak) и выражая остатки, полученные на последующих шагах алгоритма Евклида, через остатки, полученные на предыдущих шагах, можно представить значение ai(соответственно, ak) в следующем виде ai= ax + by (соответственно, ak= ax + by), где xи yнекоторые целочисленные коэффициенты. Расширенный алгоритм Евклида позволяет вычислить значения коэффициентов xи yв указанном линейном представлении НОД(a, b), т. е. в выражении ak= ax + by. Работа расширенного алгоритма Евклида организуется так, что значения x и y вычисляются в серии шагов, в каждом из которых мы выражаем aiв виде указанного представления. Каждый остаток, вычисленный в процессе работы алгоритма Евклида можно представить в виде axi+ byi.Рассмотрим следующую последовательность такого представления остатков: a0 = a, a0 = ax0 + by0, a1 = b, a1 = ax1 + by1, a2 = a0 – a1 q1, a2 = ax2 + by2, … ai= ai-2 – ai-1 qi-1, ai= axi+ byi, … ak= ak-2 – ak-1 qk-1, ak= axk+ byk, 0=ak-1 – akqk, 0 = axk+1 + byk+1. В левом столбце фактически приведена последовательность делений, полученная в алгоритме Евклида, но записанная в виде выражения для вычисления остатков. В правом столбце каждый остаток выражен в интересующем нас виде axi+ byi. Пока мы не знаем коэффициентов. Нашей целью является вычисление xiи yiдля любого i, а следовательно и для i = k. Очевидно, что x0=1, y0=0 и x1=0, y1=1. Сравнивая обе части на i-м шаге, получаем ai= axi+byi= ai-2–ai-1qi-1 = (axi-2+byi-2) – (axi-1+byi-1)qi-1 = a(xi-2–xi-1qi-1) + b(yi-2–yi- 1qi-1), откуда получатся следующая индуктивная процедура вычисления xiи yi: qi-1 = QUO(ai-2, ai-1) ai = ai-2 – ai-1qi-1, xi = xi-2 – xi-1qi-1, yi= yi-2 – yi-1qi-1. Отметим, что значение aiможет быть вычислено как MOD(ai-2, ai-1), но достоинство приведенного выше выражение заключается в том, что aiвычисляется аналогично вычислению коэффициентов xiи yi. Этот факт используется в следующем алгоритме. Расширенный алгоритм ЕвклидаВход: aи b 0 1. (a0, a1) := (a, b); (x0, x1) := (1, 0); (y0, y1) := (0, 1). 2. Пока a1 0 выполнять {q := QUO(a0, a1); (a0, a1) := (a1, a0-a1q); (x0, x1) := (x1, x0-x1q); (y0, y1) := (y1, y0-y1q)}. 3. (d, x, y) := (a0, x0, y0). Выход: Значения d, x, y, такие, что d = НОД(a, b) = ax+ by. Вычисление функции ЭйлераОпределение Функция : , ставящая в соответствие каждому натуральному числу тколичество m натуральных чисел, меньших т и взаимно простых с т,называется функциейЭйлера.При этом полагают 1 1. Функция Эйлера обладает свойством мультипликативности: если НОД(т,п) 1, то mn m n. Если число p простое, то случай теоремы Эйлера. p p 1. Отсюда получаем частный Теорема (малая теорема Ферма). Пусть число pпростое, число a целое, aне делится на р. Тогда аp1 1(modp). Рассмотрим способ вычисления функции Эйлера. Теорема. Если число р простое, число п натуральное, то pn pn pn1. Заданиена Практическоезанятие№2.Разработать программу, реализующую алгоритмы: Евклида и расширенный алгоритм Евклида; вычисления функции Эйлера, символов Лежандра и Якоби; поиска квадратичных и кубических вычетов. |