Способы представления элементов поля GF(2n)
Для представления элементов в полях Галуа вида GF(2n) существуют различные способы, образующие изоморфные поля:
- полиномиальное;
- стандартный базис;
- при помощи сопровождающей матрицы;
- параллельные массивы;
- нормальный базис - в виде:
- значения степеней примитивного элемента ξ,
- степеней примитивного элемента ξ.
I. Полиномиальное представление.
Каждый элемент GF(2n) можно представить в виде некоторого многочлена
f(x) = a0 + a1x + … + an−1xn-1, (3.1)
- степени deg(f(x)) ≤ n-1
- с коэффициентами ai ÎGF(2).
II. Стандартный базис(векторное представление):
- элементы поля задаются полиномами вида (3.1);
- хранятся коэффициенты полинома f(x) в виде двоичного вектора. Используются 2 метода расположения старших степеней полинома f(x):
- математическая форма записи (запись слева направо):
- слева располагается старшая степень полинома,
- оптимально для операций деления и увеличения степени полиномов;
- обратный порядок (запись справа налево):
- оптимально для операций умножения и сложения полиномов. Достоинствами векторного представления является следующее:
- рационально используется память,
- простота выполнения операций сложения и вычитания полиномов
(например, на регистровых структурах).
Недостатком векторного представления является то, что требуется дополнительное время ЭВМ для выборки коэффициентов, так как обработка данных в ЭВМ выполняется байтами, а не битами.
Операция получения бинарного коэффициента полинома реализуется следующим образом:
1) находится байт, содержащий требуемый коэффициент в виде бита;
2) байт сдвигается вправо, чтобы бит оказался на младшей позиции байта;
3) байт логически умножается на двоичную единицу:
- для обнуления остальных бит,
как:
- и выделения нужного бита.
На языке программирования Сиоперацияполучения бита выполняется
(x >> i) & 1,
где x - значение машинного слова,
i - позиция искомого бита,
>> - сдвиг значения переменной x на i позиций вправо (слева добавляются нули),
& - операция логического умножения.
Для установки значения y (y Î{0, 1}) для i-го бита используется операция:
(x & ~(1 << i)) | (y << i),
где << - операция сдвига значения переменной y на i позиций влево (справа добавляются нули),
~(…) - двоичная инверсия значения в скобках,
| - операция логического сложения,
(x & ~(1 << i)) - обнуление i-го бита в переменной x (демаскирование i-го бита).
Левая часть выражения обнуляет i-ый бит в числе x, а правая часть -
устанавливает новое значение y в i-ю позицию.
Стандартный базис применяется:
- для перевода между собой двух типов представления элементов нормального базиса:
- из степени примитивного элемента в его значение,
- и обратно.
III. Представление элементов конечного поля GF(2n) при помощи
сопровождающей матрицы A, заданной примитивным многочленом
ψ(x) = a0 + a1x + … + an−1xn-1 + xn, где ai Î{0, 1}.
Сопровождающая матрица A строится на базе полинома-модуля ψ(x)
следующим образом.
1. Матрица A = (aij), aij Î{0, 1}, i, j = 0, n - 1, заполняется нулями.
2. Единицами заполняется главная нижняя поддиагональ:
- для "i = 1, n - 2 выполняется аi+1,I = 1.
3. В верхнюю строку матрицы записываются коэффициенты при неизвестных ψ(x) в порядке убывания степеней неизвестных:
- для i = 0, n - 1: a0,i = an-i-1.
|
Степени этой матрицы A, A2, …,
определяют элементы поля GF(2n):
A2 -1
вместе с нулевой матрицей
- нижняя строка матрицы А i в виде вектора (a(n-1)0, a(n-1)1, …, a(n-1)(n-1))
задает
- соответствующий i-ый элемент поля GF(2n) - степень примитивного элемента ξ i, "i = 0,2 n - 2 .
an-1 an-2 an-3 … a2 a1 a0
1 0 0 0 0 0
An?n = 0 1 0 …0 0 0
0 0 1 0 0 0
… … …
0 0 0 0 1 0
Рис.3.1. Структура сопровождающей матрицы
Пример 3.1. Представим элементы поля GF(23) в виде степеней сопровождающей матрицы.
Для многочлена ψ(x) = x3 + x + 1 сопровождающая матрица имеет вид
(рис. 3.2):
A3?3 = | |||
Рис.3.2. Сопровождающая матрица для полинома ψ(x) = x3 + x + 1
Получим следующее множество элементов поля: (0, E, А, А2, А3, А4, А5,
А6) (рис. 3.3), где E - единичная матрица размера n? n и А7 совпадает с E:
0 = | ; | E= | ; | A= | |||||||||
A2= | ; | A3= | ; | A4= | |||||||||
A5= | ; | A6= | ; | A7= | |||||||||
Рис. 3.3. Степени матрицы A
Для хранения элементов поля требуется объем памяти:
- равный 2n? n? n = 2n? n2 бит,
- где n? n - объем памяти под одну матрицу. Для операций:
- редко использующих все значения степеней матрицы A,
- можно хранить только матрицу A.
При вычислении матрицы A i, "i = 2, 2n - 2 :
- потребуется выполнить (n-1)? n2? (i-1) операций сложения и
- n? n2? (i-1) операций умножения,
- где (i-1) - количество последовательных возведений в степень,
- (n - 1) - количество операций для получения одного элемента результирующей матрицы при умножении матриц Ai-1 и A.
Данный способ представления элементов поля применяется:
- при умножении двух полиномов методом Paar [16]:
- замена комплексной операции умножения
- на множество умножений и сложений полиномов меньших степеней;
- для получения значений степеней примитивного элемента при использовании нормального базиса.
IV. Представление полиномов в виде параллельных массивов, где элементы:
- первого массива хранят степени неизвестных полинома (степень при неизвестной с ненулевым коэффициентом),
- а элементы второго - коэффициенты при неизвестных.
Способ применим для полиномов с неравномерным распределением одних двоичных коэффициентов относительно других:
- хранятся коэффициенты и степени при неизвестных полиномов только для степеней,
- при которых находятся коэффициенты,
- общее количество которых меньше числа коэффициентов, противоположных по значению.
V. Нормальный базис. Элементы поля представляются в виде:
- степеней примитивного элемента,
- которым сопоставлены бинарные значения элементов поля (элементы в стандартном базисе).
Для поля GF(2n) требуется вычислить и хранить:
- (2n - 1) степеней примитивного элемента,
- каждая из которых имеет длину n-1 бит.
Все элементы поля GF(2n) можно записать в виде множества:
|
где ξ - примитивный элемент.
Для получения элементов поля GF(2n) в этом базисе можно использовать:
- способ последовательного умножения ξ i на ξ (то есть ξ используется
как образующий элемент поля GF(2n));
- вычисление сопровождающей матрицы A. Пример 3.2. Построим поле GF(2n), где n = 3. Пусть даны:
- неприводимый полином-модуль ψ(x) = x3 + x + 1 и
- ξ - заранее известный примитивный элемент поля, являющийся корнем модуля, т.е. если ψ(ξ) = ξ3 + ξ + 1 = 0.
Тогда GF(23) = (0, 1, ξ, ξ2, ξ3, ξ4, ξ5, ξ6).
Элементы поля GF(23) в нормальном базисе можно построить следующим образом:
1) на каждом шаге будем умножать предыдущий элемент поля на ξ;
2) если получается полином, степень которого ≥ deg ψ(ξ) (x заменили на
ξ), то осуществляется взятие остатка от деления текущего результата на полином ψ.
ξ0=1 = (001) ξ1=ξ = (010) ξ2=ξ2 = (100) ξ3=1+ξ = (011)
ξ4=ξ+ξ2 = (110) ξ5=ξ3+ξ2 = (111) ξ6=ξ4+ξ3 = (101) ξ7=1=ξ0.
В скобках записаны двоичные коэффициенты при неизвестных полинома, задающего текущий элемент поля.
Способ представления данных с помощью нормального базиса:
- нерационален,
- так как хранится большое количество информации.
Существует 2 формы представления элементов поля в нормальномбазисе - в виде:
- значения степеней примитивного элемента;
- степеней примитивного элемента.
а) Хранение значений степеней примитивного элемента(эквивалент стандартного базиса):
- примитивный элемент в некоторой степени хранится в виде бинарного вектора;
- значение ξ i представляется в виде двоичных коэффициентов
|
- для хранения поля GF(2n) = (0, 1, ξ, …, ξ i, …,
двумерный вектор - матрица,
x2 -2 ) используется
- каждая i-ая строка матрицы содержит двоичное значение элемента ξ i.
Матрица будет иметь следующий размер:
- количество строк (количество степеней примитивного элемента)
равно 2n-1,
- количество столбцов n,
- где n - максимальная степень полинома-модуля,
- то размер равен (2n-1)? n ячеек.
б) Хранение степеней примитивного элемента, а не значения степеней примитивного элемента:
- для задания элемента ξ i хранится степень i;
- элемент, равный 1, заменяется на ξ 0, а соответственно его степень равна 0;
- если значение степени примитивного элемента равно 0, то принимается:
- что показатель степени примитивного элемента равен неопределенности,
- обозначаемой символом "¥".
Использование данного метода хранения:
- дает выигрыш в памяти,
- так как требуется хранить не вектор-полином, а целое число, размером в машинное слово;
- упрощает операции умножения элементов и возведения их в степень,
- так как операции выполняются не с векторами, а с целыми числами -
степенями элементов.
В качестве недостатков можно отметить:
- так как в основном в операциях с элементами поля участвуют сами значения элементов поля,
- то требуется система перевода степени примитивного элемента в его значение;
- неэффективен при сложении элементов;
- увеличивается время работы алгоритма:
- на преобразование из степени в значение и обратно;
- для этого используется предварительно полученная матрица из пункта а).
При вычислении некоторой операции с элементами, заданными в видестепеней (например, сложение элементов):
- элементы поля записываются в стандартном базисе (в векторном представлении);
- над ними выполняются арифметические операции;
- в конце возможно обратное преобразование результата:
- результирующий бинарный вектор ищется в матрице из пункта а),
- номер найденной строки i и будет задавать степень элемента ξ i.
Пример 3.3. В табл. 3.1 записаны элементы поля GF(24) в разных представлениях для полинома-модуля ψ(x) = x4 + x + 1.
В полиномиальном представлении следующий элемент получается:
- путем умножения предыдущего элемента, заданного в виде полинома,
на x;
- если максимальная степень результата операции получается равной
степени модуля,
- то выполняется нормирование результата - поразрядное сложение по модулю 2 результата и полинома ψ(x).
Таблица 3.1 (начало). Элементы поля в разных представлениях
Номер элемента | Нормальный базис ξ i (степенное) | Стандарт- ный базис (векторное) | Полиномиальное |
ξ ¥ | |||
ξ 0 | |||
ξ 1 | x | ||
ξ 2 | x2 | ||
ξ 3 | x3 | ||
ξ 4 | x+1 | ||
ξ 5 = ξ 4ξ | (x+1)x = x2+x | ||
ξ 6= ξ 5ξ | (x2+x)x = x3+x2 | ||
ξ 7= ξ 6ξ mod φ(x) | (x3+x2)x = (x4+x3)mod φ(x) = x3+x+1 |
Таблица 3.1 (окончание). Элементы поля в разных представлениях
ξ 8 = ξ 7ξ mod φ(x) | (x3+x+1)x = (x4+x2+x)mod φ(x) = x2+1 | ||
ξ 9 = ξ 8ξ | (x2+1)x = x3+x | ||
ξ10= ξ 9ξ mod φ(x) | (x3+x)x = (x4+x2)mod φ(x) = x2+x+1 | ||
ξ11= ξ10ξ | (x2+x+1)x = x3+x2+x | ||
ξ12=ξ11ξ mod φ(x) | (x3+x2+x)x = (x4+x3+x2) mod φ(x) = x3+x2+x+1 | ||
ξ13=ξ12ξ mod φ(x) | (x3+x2+x+1)x = (x4+x3+x2+x) mod φ(x)= x3+x2+1 | ||
ξ14=ξ13ξ mod φ(x) | (x3+x2+1)x = (x4+x3+x) mod φ(x) = x3+1 |
Рассмотрим получение 11-го элемента. Для получения 11-го элемента
10−ый элемент умножается на x:
(x3 + x)·x = x4 + x2.
Поразрядно сложим векторы коэффициентов для полинома
x4+x2 (101002) и полинома-модуля x4 + x + 1 (100112):
Å100112
001112.
Получаем 11-ый элемент, равный:
- в стандартном базисе 01112,
- или в полиномиальном x2 + x + 1.
Если степень результата будет > степени модуля ψ(x), то осуществляется деление результата на ψ(x). Например:
- получим 11-ый элемент через 7-ой;
- умножим полином, соответствующий 7-му элементу, на x4: (x3 + x2)·x4= x7 + x6;
- так как степень результата > степени модуля, то выполняется деление результата на модуль ψ(x) (например, столбиком), а не сложение с ним:
x7 +x6
Å
x7 +
x4 +x3
x 4 + x + 1
x3 +x2 +1
x6 +x4 +x3
Å x6 +
x4 +
Å x4 +
x3 + x 2
x2
x + 1
x2 +x +1
Получим остаток x2 + x + 1, который и является 11-м элементом поля.