Jump to content

Арифметика конечных полей

В математике , арифметика конечных полей — это арифметика в конечном поле ( поле содержащем конечное число элементов ) в отличие от арифметики в поле с бесконечным числом элементов, например поле рациональных чисел .

Существует бесконечно много различных конечных полей. Их число элементов обязательно имеет вид p н где p простое число , n — целое положительное число , а два конечных поля одинакового размера изоморфны . Простое число p называется характеристикой поля, а целое положительное число n называется размерностью поля над его простым полем .

Конечные поля используются во множестве приложений, в том числе в классической теории кодирования в линейных блочных кодах, таких как коды BCH и коррекция ошибок Рида-Соломона , в алгоритмах криптографии , таких как алгоритм шифрования Rijndael ( AES ), в планировании турниров и в план экспериментов .

Эффективное полиномиальное представление

Конечное поле с p н элементов обозначается GF( p н ) и называется также полем Галуа порядка p н , в честь основателя теории конечного поля Эвариста Галуа . GF( p ), где p — простое число, представляет собой просто кольцо целых чисел по модулю p . То есть можно выполнять операции (сложение, вычитание, умножение), используя обычную операцию над целыми числами с последующим сокращением по модулю p . Например, в GF(5) 4 + 3 = 7 сокращается до 2 по модулю 5. Деление — это умножение на обратный модуль p , который можно вычислить с помощью расширенного алгоритма Евклида .

Частным случаем является GF(2) , где сложение — это исключающее ИЛИ (XOR), а умножение — AND . Поскольку единственным обратимым элементом является 1, деление является тождественной функцией .

Элементы GF( p н ) можно представить в виде полиномов степени строго меньше n над GF( p ). Затем операции выполняются по модулю m(x) , где m(x) неприводимый многочлен степени n над GF( p ), например, с использованием полиномиального деления в длину . Сложение — это обычное сложение многочленов, но коэффициенты уменьшаются по модулю p . Умножение также является обычным умножением многочленов, но с коэффициентами, умноженными по модулю p , и многочленами, умноженными по модулю многочлена m(x) . [1] Это представление в терминах полиномиальных коэффициентов называется мономиальным базисом (также известным как «полиномиальный базис»).

Существуют и другие представления элементов GF( p н ); некоторые из них изоморфны полиномиальному представлению, приведенному выше, а другие выглядят совершенно иначе (например, с использованием матриц). Использование обычного базиса может иметь преимущества в некоторых контекстах.

Когда штрих равен 2, принято выражать элементы GF( p н ) в виде двоичных чисел , где коэффициент каждого члена многочлена представлен одним битом в двоичном выражении соответствующего элемента. Фигурные скобки («{» и «}») или подобные разделители обычно добавляются к двоичным числам или их шестнадцатеричным эквивалентам, чтобы указать, что значение дает коэффициенты основы поля, таким образом представляя элемент поля. Например, ниже приведены эквивалентные представления одного и того же значения в конечном поле характеристики 2:

Полиномиальный х 6 + х 4 + х + 1
Двоичный {01010011}
Шестнадцатеричный {53}

Примитивные полиномы [ править ]

Существует множество неприводимых полиномов (иногда называемых приводящими полиномами ), которые можно использовать для создания конечного поля, но не все они приводят к одному и тому же представлению поля.

Монический имеющий неприводимый полином степени n, коэффициенты из конечного поля GF( q ), где q = p т для некоторого простого числа p и натурального числа t называется примитивным многочленом , если все его корни являются примитивными элементами GF( q н ). [2] [3] В полиномиальном представлении конечного поля это означает, что x является примитивным элементом. Существует хотя бы один неприводимый многочлен, для которого x является примитивным элементом. [4] Другими словами, для примитивного многочлена степени x порождают каждое ненулевое значение в поле.

В следующих примерах лучше не использовать полиномиальное представление, поскольку значение x меняется между примерами. Монический неприводимый полином x 8 + х 4 + х 3 + x + 1 над GF(2) не является примитивным. Пусть λ — корень этого многочлена (в полиномиальном представлении это будет x ), то есть λ 8 + л 4 + л 3 + λ + 1 знак равно 0 . Теперь я 51 = 1 , поэтому λ не является примитивным элементом GF(2 8 ) и порождает мультипликативную подгруппу порядка 51. [5] Монический неприводимый полином x 8 + х 4 + х 3 + х 2 + 1 над GF(2) является примитивным, и все 8 корней являются генераторами GF(2 8 ) .

Все подружки(2 8 ) имеют всего 128 образующих (см. Число примитивных элементов ), причем для примитивного многочлена 8 из них являются корнями приводящего многочлена. Наличие x в качестве генератора конечного поля полезно для многих вычислительных математических операций.

Сложение и вычитание [ править ]

Сложение и вычитание выполняются путем сложения или вычитания двух таких полиномов вместе и уменьшения результата по модулю характеристики.

В конечном поле с характеристикой 2 сложение по модулю 2, вычитание по модулю 2 и исключающее ИЛИ идентичны. Таким образом,

Полиномиальный ( х 6 + х 4 + х + 1) + ( х 7 + х 6 + х 3 + х ) = х 7 + х 4 + х 3 + 1
Двоичный {01010011} + {11001010} = {10011001}
Шестнадцатеричный {53} + {CA} = {99}

При регулярном сложении многочленов в сумме будет слагаемое 2 x 6 . Этот член становится 0 x 6 и отбрасывается, когда ответ уменьшается по модулю 2.

Вот таблица с нормальной алгебраической суммой и конечной полевой суммой характеристики 2 нескольких полиномов:

п 1 п 2 п 1 + п 2 под...
К[ х ] ГФ(2 н )
х 3 + х + 1 х 3 + х 2 22x 3 + х 2 + х + 1 х 2 + х + 1
х 4 + х 2 х 6 + х 2 х 6 + х 4 + 2x 2 х 6 + х 4
х + 1 х 2 + 1 х 2 + х + 2 х 2 + х
х 3 + х х 2 + 1 х 3 + х 2 + х + 1 х 3 + х 2 + х + 1
х 2 + х х 2 + х 22x 2 + 2x 0

В приложениях информатики операции упрощаются для конечных полей характеристики 2, также называемой GF(2 н ) Поля Галуа , что делает эти поля особенно популярным выбором для приложений.

Умножение [ править ]

Умножение в конечном поле — это умножение по модулю приводящего многочлена неприводимого , используемого для определения конечного поля. (То есть, это умножение с последующим делением с использованием уменьшающего полинома в качестве делителя - остаток является произведением.) Символ «•» может использоваться для обозначения умножения в конечном поле.

Конечное поле Рейндала (AES) [ править ]

Рейндал (стандартизованный как AES) использует конечное поле характеристики 2 с 256 элементами, которое также можно назвать полем Галуа GF(2 8 ). Он использует следующий уменьшающий полином для умножения:

х 8 + х 4 + х 3 + х + 1.

Например, {53} • {CA} = {01} в поле Рейндала, потому что

( х 6 + х 4 + х + 1)( х 7 + х 6 + х 3 + х )
= ( х 13 + х 12 + х 9 + х 7 ) + ( х 11 + х 10 + х 7 + х 5 ) + ( х 8 + х 7 + х 4 + х 2 ) + ( х 7 + х 6 + х 3 + х )
= х 13 + х 12 + х 9 + х 11 + х 10 + х 5 + х 8 + х 4 + х 2 + х 6 + х 3 + х
= х 13 + х 12 + х 11 + х 10 + х 9 + х 8 + х 6 + х 5 + х 4 + х 3 + х 2 + х

и

х 13 + х 12 + х 11 + х 10 + х 9 + х 8 + х 6 + х 5 + х 4 + х 3 + х 2 + х мод х 8 + х 4 + х 3 + х 1 + 1
= (11111101111110 против 100011011)
= {3F7E мод 11B} = {01}
= 1 (десятичный)

Последнее можно продемонстрировать с помощью деления в столбики (показано с использованием двоичной записи, поскольку оно хорошо подходит для этой задачи. Обратите внимание, что исключающее ИЛИ в примере применяется , а не арифметическое вычитание, которое можно использовать при делении в столбик в начальной школе):

                        
          11111101111110 (mod) 100011011
         ^100011011     
          01110000011110
          ^100011011    
           0110110101110
           ^100011011   
            010101110110
            ^100011011  
             00100011010
              ^100011011  
               000000001

(Элементы {53} и {CA} являются мультипликативными инверсиями друг друга, поскольку их произведение равно 1. )

Умножение в этом конкретном конечном поле можно выполнить и с помощью модифицированной версии « крестьянского алгоритма ». Каждый полином представлен в той же двоичной записи, что и выше. Восьми бит достаточно, поскольку в терминах каждого (приведенного) полинома возможны только степени от 0 до 7.

Этот алгоритм использует три переменные (в смысле компьютерного программирования), каждая из которых содержит восьмибитное представление. a и b инициализируются множимыми; p накапливает произведение и должно быть инициализировано значением 0.

В начале и конце алгоритма, а также в начале и конце каждой итерации этот инвариант верен: a b + p — произведение. Это очевидно верно, когда алгоритм запускается. Когда алгоритм завершится, a или b будут равны нулю, поэтому p будет содержать произведение.

  • Запустите следующий цикл восемь раз (по одному на бит). Можно остановиться, когда a или b равно нулю перед итерацией:
    1. самый правый бит b Если установлен , выполняется исключающее ИЛИ произведение p на значение a . Это полиномиальное сложение.
    2. Сдвиньте b на один бит вправо, отбросив самый правый бит и сделав самый левый бит равным нулю. Это делит полином на x , отбрасывая x 0 срок.
    3. Следите за тем, ли самый левый бит a установлен в единицу, и вызывайте это значение переносом .
    4. Сместите один бит влево, отбросив самый левый бит и сделав новый самый правый бит нулевым. Это умножает полином на x , но нам все равно нужно учитывать перенос , который представляет собой коэффициент при x. 7 .
    5. Если переноса значение числу было равно единице, исключающему или шестнадцатеричному 0x1b (00011011 в двоичном формате). 0x1b соответствует неприводимому многочлену с удаленным старшим членом. Концептуально, старший член неприводимого многочлена и перенос добавляются по модулю 2 к 0.
  • у p теперь есть продукт

Этот алгоритм легко обобщается на умножение на другие поля характеристики 2, изменяя длины a , b и p и значение 0x1b соответствующим образом.

Мультипликативное обратное [ править ]

Мультипликативное обратное для элемента a конечного поля можно вычислить несколькими различными способами:

Хитрости реализации [ править ]

Таблицы на основе генератора [ править ]

При разработке алгоритмов вычисления поля Галуа на небольших полях Галуа общий подход к оптимизации производительности состоит в том, чтобы найти генератор g и использовать тождество:

реализовать умножение как последовательность поиска в таблице для журнала g ( a ) и g и функции и операцию сложения целых чисел. При этом используется то свойство, что каждое конечное поле содержит генераторы. В примере поля Рейндала полином x + 1 (или {03}) является одним из таких генераторов. Необходимым, но не достаточным условием того, чтобы многочлен был генератором, является его неприводимость .

Реализация должна проверять особый случай, когда a или b равны нулю, поскольку произведение также будет равно нулю.

Эту же стратегию можно использовать для определения мультипликативного обратного тождества:

Здесь порядок генератора | g |, — количество ненулевых элементов поля. В случае GF(2 8 ) это 2 8 − 1 = 255 . То есть для примера Рейндала: ( x + 1) 255 = 1 . Таким образом, это можно выполнить с помощью двух справочных таблиц и целочисленного вычитания. Использование этой идеи для возведения в степень также приносит пользу:

Для этого требуется два поиска в таблице: целочисленное умножение и операция целого числа по модулю. проверку для особого случая a = 0 Снова необходимо выполнить .

Однако в криптографических реализациях с такими реализациями следует быть осторожными, поскольку архитектура кэша многих микропроцессоров приводит к переменному времени доступа к памяти. Это может привести к реализациям, уязвимым для временной атаки .

Умножение без переноса [ править ]

Для бинарных полей GF(2 н ), умножение полей может быть реализовано с использованием умножения без переноса, такого как набор команд CLMUL , который подходит для n ≤ 64. При умножении используется одно умножение без переноса для получения продукта (до 2 n - 1 бит), другое умножение без переноса предварительно вычисленное обратное значение полинома поля, чтобы получить частное = ⌊продукт / (полиномиал поля)⌋, умножение частного на полином поля, а затем xor: результат = продукт ⊕ ((полиномиал поля) ⌊продукт / (поле полином)⌋). Последние 3 шага (pclmulqdq, pclmulqdq, xor) используются на этапе сокращения Барретта для быстрого вычисления CRC с использованием инструкции x86 pclmulqdq. [7]

Составное поле [ править ]

Когда k составное число , будут существовать изоморфизмы из двоичного поля GF(2 к ) в поле расширения одного из его подполей, т.е. GF((2 м ) н ) где k знак равно м п . Использование одного из этих изоморфизмов может упростить математические соображения, поскольку степень расширения меньше, но при этом элементы теперь представляются в более крупном подполе. [8] Чтобы уменьшить количество вентилей для аппаратных реализаций, процесс может включать множественное вложение, например отображение из GF(2 8 ) до GF(((2 2 ) 2 ) 2 ). [9] Существует ограничение реализации: операции в двух представлениях должны быть совместимы, поэтому необходимо явное использование изоморфизма. Точнее, изоморфизм будет обозначаться через map(), это биекция , отображающая элемент из GF(2 к ) в GF((2 м ) н ), удовлетворяющее: map( a + b ) = map( a ) + map( b ) и map( a b ) = map( a ) map( b ) , где операции с левой стороны происходят в GF(2 к ) до отображения и операции в правой части происходят в GF((2 м ) н ) после картирования. [10] Изоморфизм обычно реализуется с помощью матрицы k строк на k бит, используемой для выполнения умножения матрицы на GF(2) элемента GF(2). к ) рассматривается как k строка 1-битной матрицы. Определим α как примитивный элемент GF(2 к ) и β как примитивный элемент GF((2 м ) н ). Тогда β дж = карта( ​​а дж ) и дж = карта −1 ( б дж ). Значения α и β определяют матрицу отображения и ее обратную. Поскольку фактическая математика выполняется в GF((2 м ) н ), приводящий полином для GF((2 м ) н ) обычно примитивен и β = x в GF((2 м ) н ). Чтобы удовлетворить ограничению совместимости при сложении и умножении, выполняется поиск для выбора любого примитивного элемента α из GF(2 к ), который будет соответствовать ограничению. В случае, когда приводящий полином для GF(2 к ) примитивен, возможен альтернативный метод отображения: 1-битные коэффициенты уменьшающего полинома для GF(2 к ) интерпретируются как m битовых элементов 0 или 1 из GF(2 м ), и будет m примитивных множителей степени n , любой из которых можно использовать как приводящий полином для GF((2 м ) н ). Отображение составного поля можно обобщить для отображения GF( p к ) в составное поле, такое как GF(( p м ) н ), для любого простого числа p .

Примеры программ [ править ]

Пример программирования на языке C [ править ]

Вот некоторый код C , который будет складывать и умножать числа в конечном поле характеристики 2 порядка 2. 8 , используемый, например, алгоритмом Рейндала или Рида – Соломона с использованием алгоритма умножения русского крестьянина :

/* Add two numbers in the GF(2^8) finite field */
uint8_t gadd(uint8_t a, uint8_t b) {
	return a ^ b;
}

/* Multiply two numbers in the GF(2^8) finite field defined 
 * by the modulo polynomial relation x^8 + x^4 + x^3 + x + 1 = 0
 * (the other way being to do carryless multiplication followed by a modular reduction)
 */
uint8_t gmul(uint8_t a, uint8_t b) {
	uint8_t p = 0; /* accumulator for the product of the multiplication */
	while (a != 0 && b != 0) {
        if (b & 1) /* if the polynomial for b has a constant term, add the corresponding a to p */
            p ^= a; /* addition in GF(2^m) is an XOR of the polynomial coefficients */

        if (a & 0x80) /* GF modulo: if a has a nonzero term x^7, then must be reduced when it becomes x^8 */
            a = (a << 1) ^ 0x11b; /* subtract (XOR) the primitive polynomial x^8 + x^4 + x^3 + x + 1 (0b1_0001_1011) – you can change it but it must be irreducible */
        else
            a <<= 1; /* equivalent to a*x */
        b >>= 1;
	}
	return p;
}

В этом примере есть утечки побочного канала кэша, синхронизации и прогнозирования ветвей , и он не подходит для использования в криптографии.

Пример программирования D [ править ]

Эта программа D умножит числа в конечном поле Рейндала и сгенерирует изображение PGM :

/**
Multiply two numbers in the GF(2^8) finite field defined
by the polynomial x^8 + x^4 + x^3 + x + 1.
*/
ubyte gMul(ubyte a, ubyte b) pure nothrow {
    ubyte p = 0;

    foreach (immutable ubyte counter; 0 .. 8) {
        p ^= -(b & 1) & a;
        auto mask = -((a >> 7) & 1);
        // 0b1_0001_1011 is x^8 + x^4 + x^3 + x + 1.
        a = cast(ubyte)((a << 1) ^ (0b1_0001_1011 & mask));
        b >>= 1;
    }

    return p;
}

void main() {
    import std.stdio, std.conv;
    enum width = ubyte.max + 1, height = width;

    auto f = File("rijndael_finite_field_multiplication.pgm", "wb");
    f.writefln("P5\n%d %d\n255", width, height);
    foreach (immutable y; 0 .. height)
        foreach (immutable x; 0 .. width) {
            immutable char c = gMul(x.to!ubyte, y.to!ubyte);
            f.write(c);
        }
}

В этом примере не используются какие-либо ветки или поиск по таблицам, чтобы избежать побочных каналов, и поэтому он подходит для использования в криптографии.

См. также [ править ]

Ссылки [ править ]

  1. ^ Ханкерсон, Ванстон и Менезес 2004 , стр. 28
  2. ^ Корни такого многочлена должны лежать в поле расширения GF( q ), поскольку многочлен неприводим и, следовательно, не имеет корней в GF( q ).
  3. ^ Маллен и Панарио 2013 , с. 17
  4. ^ Планирование и анализ экспериментов . John Wiley & Sons, Ltd., 8 августа 2005 г., стр. 716–720. дои : 10.1002/0471709948.app1 .
  5. ^ Lidl & Niederreiter 1983 , с. 553
  6. ^ Грошек О.; Фабшич, Т. (2018), «Вычисление мультипликативных обратных чисел в конечных полях путем деления в столбики» (PDF) , Journal of Electrical Engineering , 69 (5): 400–402, doi : 10.2478/jee-2018-0059 , S2CID   115440420
  7. ^ «Быстрое вычисление CRC для универсальных полиномов с использованием инструкции PCLMULQDQ» (PDF) . www.intel.com . 2009 . Проверено 8 августа 2020 г.
  8. ^ «Эффективная программная реализация больших FiniteFieldsGF(2n) для приложений безопасного хранения» (PDF) . www.ccs.neu.edu . Проверено 8 августа 2020 г.
  9. ^ "bpdegnan/aes" . Гитхаб .
  10. ^ [1] [ мертвая ссылка ]

Источники [ править ]

  • Лидл, Рудольф; Нидеррайтер, Харальд (1983), Конечные поля , Аддисон-Уэсли, ISBN  0-201-13519-1 (переиздан в 1984 году издательством Cambridge University Press ISBN   0-521-30240-4 ).
  • Маллен, Гэри Л.; Панарио, Дэниел (2013), Справочник по конечным полям , CRC Press, ISBN  978-1-4398-7378-6
  • Хэнкерсон, Даррел; Ванстон, Скотт; Менезес, Альфред (2004), Руководство по криптографии эллиптических кривых , Springer, ISBN  978-0-387-21846-5

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9a2ba5f62f8be91cb2a7123fccf5f649__1705868040
URL1:https://arc.ask3.ru/arc/aa/9a/49/9a2ba5f62f8be91cb2a7123fccf5f649.html
Заголовок, (Title) документа по адресу, URL1:
Finite field arithmetic - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)