- •Лабораторная работа №6. Изучение алгоритма хэш – функции системы sha – 1…………………………………………………………………
- •Введение
- •1. Математические операции криптографических систем Введение
- •1.1. Понятие группы
- •1.2. Конечные поля
- •1.3. Операции в полях Галуа
- •Как проверить, является ли число простым
- •Поиск наибольшего общего делителя
- •1.4. Свойства арифметических операций в классах вычетов
- •1.5. Операции над многочленами
- •2.2. Примитивные элементы
- •2.2.1 . Структура конечного поля
- •2.4. Построение устройств генерации ключей
1.4. Свойства арифметических операций в классах вычетов
При сравнении по модулю n множество всех целых чисел отображается во множество Zn = {0, 1, ..., (n - 1)}. При этом возникает вопрос: можно ли определить арифметические операции в рамках данного множества? Оказывается, можно, и соответствующий набор операций называется арифметикой в классах вычетов [6,10].
Операции арифметики в классах вычетов обладают следующими свойствами.
1. [(a mod n) + (b mod n)] mod п = (а + b) mod n.
2. [(а mod п) - (b mod n)] mod n = (а - b) mod п.
3. [(а mod п) (b mod n)] mod n = (а b) mod n.
Вот несколько примеров, иллюстрирующих указанные три свойства:
19 mod 8=3, 14 mod 8=6;
[(19 mod 8) + (14 mod 8)] mod 8 = 9 mod 8=1; (19 + 14) mod 8 = 33 mod 8=1;
[(19 mod 8) - (14 mod 8)] mod 8 = - 3 mod 8=5; (19 - 14) mod 8 = 4 mod 8=4;
[(19 mod 8) (14 mod 8)] mod 8 = 18 mod 8=2; (19 14) mod 8 = 266 mod 8=2.
Возведение в степень выполняется с помощью повторного умножения, как и в обычной арифметике.
Чтобы найти 117 mod 13, будем действовать следующим образом:
112 = 121 4 mod 13,
114 42 3 mod 13,
117 11 4 3 132 2 mod 13.
Итак, правила выполнения обычных арифметических операций — сложения, вычитания и умножения — можно применять и в арифметике классов вычетов.
Для арифметических операций по модулю п в этом множестве выполняются следующие свойства.
Свойство |
Выражение |
Коммутативный закон |
(x + y) mod n = (y + x) mod n (x y) mod n = (y x) mod n |
Ассоциативный закон |
[(x + y) +z)] mod n = [(x + (y + z)] mod n [(x y) z)] mod n = [(x (y z)] mod n |
Дистрибутивный закон |
[(x y) z)] mod n = [(x y) (y z)] mod n |
Тождества |
(0 + y) mod n = y mod n (1 y) mod n = y mod n |
Аддитивный обратный (- y) |
Для любого yZ существует такое z, что (y + z) mod n ≡ 0 mod n |
Существует одна особенность арифметики в классах вычетов, которая делает ее отличной от обычной арифметики. Заметим сначала, что, как и в обычно арифметике, имеет место следующее свойство.
Если (а + b) (а + с) mod п , то b с mod п, (1.8)
(7 + 21) (7 + 5) mod 8; 21 5 mod 8
Свойство (1.7) согласуется с существованием аддитивного обратного. Прибавив к обеим частям равенства (1.7) аддитивное обратное элемента а, получим ((-а) + а + b) = ((-a) + а + с) mod п, b с mod п.
Однако следующее утверждение выполняется только при указанном ниже условии:
Если (а b) (а с) mod п, то b с mod п при условии, что а и п взаимно просты. (1.9)
Рассмотрим пример, когда данное условие не выполнено:
4 3 = 12 4 mod 8,
4 5 = 20 4 mod 8. Однако 3 5 mod 8.
1.5. Операции над многочленами
Многочленом над полем GF(q) называется математическое выражение:
,
(1.10)
где х - называется фиктивной переменной, коэффициенты fn-1, fn-2,…, f0 принадлежат полю GF(q), а показатели степеней являются целыми числами.
Нулевым многочленом называется многочлен f(x) = 0.
Приведенными многочленами называются многочлены, старший коэффициент которых fn-1=1. Степенью ненулевого многочлена f(x), которая обозначается deg f(x), называется индекс старшего коэффициента fn-1.
Множество всех многочленов над полем GF(q) образует кольцо относительно сложения и умножения, определяемых по обычным принципам сложения и умножения многочленов. Такое полиномиальное кольцо можно определить для каждого поля Галуа GF(q). Такое кольцо обозначается GF(q)[x]. Элементы кольца GF(q) называют скалярами.
Суммой двух многочленов f(x) и q(x) из GF(q)[x] называется многочлен из GF(q)[x], определяемый равенством:
.
(1.11)
Например, для поля GF(2)
(х4 + х 2 + х +1)+( х 5 + х 4 + х 3 +1)=
= х 5 +(11) х 4 + х 3 + х 2 + х +(11)=
= х 5 + х 3 + х 2 + х.
Произведением двух многочленов из GF(q)[x] называется многочлен, определяемый равенством:
.
(1.12)
Например, над GF(2)
(х4 + х 2 +1)( х 2 +1)= х 6 +1
Кольцо многочленов во многих отношениях соответствует кольцу целых чисел. Многочлен S(x) делится на многочлен d(x), если существует многочлен a(x), такой, что
d(x) a(x) = S(x).
Многочлен p(x) делящийся на многочлен a p(x) или a, называется неприводимым многочленом, где a – произвольный ненулевой элемент поля GF(q). Приведенный неприводимый многочлен называется простым многочленом.
Если S(x) одновременно делится на d(x) и делит d(x), то S(x) = a d(x).
Для каждой пары многочленов S(x) и d(x) (при d(x) 0) существует единственная пара многочленов a(x) (частное) и r(x) (остаток), таких, что
S(x) = d(x) a(x) + r(x), (1.13)
где deg S(x) < deg d(x).
Практическое вычисление частного и остатка осуществляется по обычным правилам деления многочленов. В теории кодирования большое значение имеет остаток. Остаток можно записать в виде:
r(x) = Rd(x)[ S(x)]. (1.14)
Часто остаток называется вычетом многочлена S(x) по модулю многочлена d(x).
r(x) = S(x)[mod d(x)], (1.15)
Несколько отличным понятием является сравнение, которое означает, что при делении на d(x) многочлены S(x) и A(x) дают один и тот же остаток, но deg A(x) необязательно меньше deg d(x).
A(x) ≡ S(x)[mod d(x)], (1.16)
Ненулевой многочлен p(x) над некоторым полем однозначно разлагается в произведение элемента поля и простых многочленов над этим полем.
Наибольший общий делитель двух многочленов S(x) и d(x) НОД [S(x), d(x)] определяется как приведенный многочлен наибольшей степени, делящий одновременно оба из них. Если НОД [S(x), d(x)] = 1, то они называются взаимно простыми.
Наибольший общий делитель двух многочленов S(x) и d(x) над полем GF(q) можно вычислить с помощью итеративного алгоритма деления Евклида. Если deg S(x) deg d(x) 0, то последовательность вычислений такова:
.
(1.16)
Процесс обрывается, как только будет получен нулевой остаток.
Наибольший общий делитель двух многочленов S(x) и d(x) на основе алгоритма в общем виде (аналогично целым числам) можно записать в виде:
НОД [S(x), d(x)] = a(x) d(x) + b(x) S(x), (1.17)
где a(x) и b(x) многочлены над GF(q), которые можно найти из представленной выше системы уравнений (1.16).
Наименьшее общее кратное двух многочленов S(x) и d(x) НОК[S(x), d(x)] определяется как приведенный многочлен наименьшей степени, делящийся на оба из них. Значение НОК можно вычислить по формуле:
.
(1.18)
Для произвольного элемента из GF(q) можно вычислить значение многочлена над GF(q) в этой точке, подставив элемент вместо x. Например, в поле GF(3), (q={0,1,2})
.
Тогда
.
Можно вычислить значение многочлена над GF(q) в расширении поля GF(q). Это вычисление проводится подстановкой элементов из расширения поля вместо фиктивной переменной х и выполнением операций в расширении поля. Например, пусть GF(2)
.
Пусть для элементов поля GF(4) имеем следующие правила сложения и умножения:
Таблица 1.3 Таблица 1.4
|
0 |
1 |
2 |
3 |
|
|
|
|
+ |
0 |
1 |
2 |
3 |
0 |
0 |
0 |
0 |
0 |
|
|
|
|
0 |
0 |
1 |
2 |
3 |
1 |
0 |
1 |
2 |
3 |
|
|
|
|
1 |
1 |
2 |
3 |
0 |
2 |
0 |
2 |
3 |
1 |
|
|
|
|
2 |
2 |
3 |
0 |
1 |
3 |
0 |
3 |
1 |
2 |
|
|
|
|
3 |
3 |
0 |
1 |
2 |
Тогда
.
Если р()=0, то элемент называется корнем многочлена р(х).
Многочлен необязательно имеет корни в собственном поле. Многочлен не имеет корней в GF(2), но имеет корень в расширении поля, т. е. в GF(4).
Элемент является корнем многочлена р(х) тогда и только тогда, когда (x-) делит р(х). У р(х) степени n не более n корней.
2. Генерация ключей для шифрования на основе
конечных полей
Введение
Один из методов генерации ключей основан на теории конечных полей. Средства генерации конечных полей за цикл длиной qn вырабатывают qn-1 различных последовательностей (элементов) без их повторения, где q – характеристика поля (основание системы счисления), n - степень расширения поля [3,7]. Последовательности, вырабатываемые согласно теории конечных полей, являются псевдослучайными (они не вырабатывают нулевой элемент), также при генерации ключей для шифрования случайный их характер является одним из основных требований, обеспечивающим необходимую стойкость шифра. Стойкость криптографической системы увеличивается с увеличением длины последовательности и степени их случайности. Рассмотрим методику генерации псевдослучайных элементов конечных полей.
2.1. Конечные поля на основе колец многочленов
Конечные поля можно построить из колец многочленов так же, как строятся поля из кольца целых чисел. Пусть имеется кольцо многочленов GF(q)[x] над полем q. Выбирая из GF(q)[x] произвольный многочлен p(x), можно построить кольцо отношений, используя p(x) в качестве модуля для заданной арифметики этого кольца. Для произвольного приведенного p(x) над полем q кольцом многочленов по модулю p(x) называется множество всех многочленов GF(q)[x], степень которых не превосходит степени p(x), с операциями сложения и умножения по модулю p(x). Это кольцо принято обозначать GF(q)[x]/p(x). Произвольный многочлен r(x) кольца GF(q)[x] можно отобразить в многочлен кольца GF(q)[x]/p(x) с помощью соответствия r(x) Rp(x) GF(q)[x] - остаток от деления GF(q)[x]/p(x). Два многочлена a(x) и r(x) из GF(q)[x], отображаемые в один и тот же многочлен из GF(q)[x]/p(x), называются сравнимыми:
r(x) = a(x)[mod p(x)]. (2.1)
Тогда a(x) = p(x) S(x) + r(x) для некоторого многочлена S(x).
Пример: в кольце многочленов над GF(2) выберем p(x) = x3+1. Тогда кольцо многочленов по модулю p(x) GF(2)[x]/(x3+1). Оно состоит из элементов {0, 1, x , x+1, x2, x2+1, x2+x, x2+x+1}. В этом кольце умножение выполняется так:
(x2+1)(x2)
= R
[(x2+1)(x2)]
= R
[x(x3+1)+
x2+
x]
= x2+
x.
Здесь использована редукция x 4= x(x3+1)+ x.
Кольцо многочленов по модулю приведенного многочлена является полем тогда и только тогда, когда p(x) прост. Если над полем GF(q) найден простой многочлен p(x), то можно построить поле GF(qn), содержащее qn элементов, где q – характеристика поля, n – степень pасширения поля. В этом построении элементы представляются многочленами над GF(q) степени n – 1. Всего существует qn таких многочленов и, следовательно, столько же элементов поля.
Например, поле GF(22) можно построить по полю GF(2), используя примитивный полином p(x) = x2+ x+ 1. Перебирая все возможные разложения, легко проверить непроводимость этого многочлена. Элементы поля задаются многочленами (0, 1, x, x+1).
В таблице 2.1 показаны способы представления элементов поля GF(4), а таблицы сложения и умножения их (таблицы 2.2 и 2.3) даны ниже.
Таблица 2.1
Многочленные обозначения |
Двоичные обозначения |
Целочисленные Обозначения |
Степенные обозначения |
0 |
00 |
0 |
0 |
1 |
01 |
1 |
х0 |
х |
10 |
2 |
х1 |
х+1 |
11 |
3 |
х2 |
Таблица 2.2
+ |
0 |
1 |
х |
х+1 |
0 1 x x +1 |
0 1 x x +1 |
1 0 x +1 x |
х x +1 0 1 |
х+1 х 1 0 |
Таблица 2.3
* |
0 |
1 |
х |
х +1 |
0 1 х х +1 |
0 0 0 0 |
0 1 х х +1 |
0 х х +1 1 |
0 х +1 1 х |
