유한장 연산

Finite field arithmetic

수학에서, 유한장 산술유한장(유한 수의 요소를 포함하는 장)의 산술과 반대로 유리수의 장과 같은 무한 수의 요소가 있는 장에서의 산술이다.

무한히 많은 다양한 유한 필드가 있습니다.이들 요소의 는 필연적으로 p 형식이다n.여기서 p는 소수이고 n은 의 정수이며, 같은 크기의 두 개의 유한 필드는 동형이다.소수 p는 필드의 특성이라고 하며 양의 정수 n은 필드의 소수 p에 대한 필드의 차원이라고 합니다.

유한 필드는 BCH 코드 및 리드-솔로몬 오류 수정과 같은 선형 블록 코드의 고전 부호화 이론, Rijndael(AES) 암호화 알고리즘, 토너먼트 스케줄링 및 실험 설계에서 다양한 응용 프로그램에서 사용됩니다.

유효 다항식 표현

p 원소가 있는n 유한장은 GF(pn)로 불리며, 유한장 이론의 창시자인 에바리스 갈로아에게 경의를 표하기 위해 p 순서갈로아n 필드라고도 불린다.여기서 p는 소수인 GF(p)는 단순히 정수 모듈로 p의 입니다.즉, 정수에 대한 일반적인 연산을 사용하여 연산(더하기, 빼기, 곱하기)을 수행하고, 이어서 감소 모듈로 p를 사용할 수 있다.예를 들어 GF(5)에서 4 + 3 = 7은 2 모듈로 5로 감소한다.나눗셈은 확장 유클리드 알고리즘을 사용하여 계산할 수 있는 역모듈로 p를 곱한 것입니다.

특별한 경우는 GF(2)입니다.여기서 덧셈은 배타적 OR(XOR)이고 곱셈은 AND입니다.반전할 수 있는 요소는 1뿐이므로 나눗셈은 아이덴티티 함수입니다.

GF(pn)의 요소는 GF(p)에 대한 n보다 엄밀하게 작은 정도의 다항식으로 나타낼 수 있다.다음으로 예를 들어 다항식 장분할을 사용하여 R이 GF(p)에 대한 n차수의 환원 불가능한 다항식인 모듈로 R을 연산한다.두 개의 다항식 P와 Q의 덧셈은 평상시와 같이 수행된다. 곱셈은 다음과 같이 수행될 수 있다: W = P · Q를 평소대로 계산한 다음 나머지 모듈로 R을 계산한다.다항식 계수의 관점에서 이러한 표현을 단항 기준(일명 '다항식 기준')이라고 한다.

GF(pn)의 원소에 대한 다른 표현들이 있다; 어떤 것들은 위의 다항식 표현과 동형이고 다른 것들은 상당히 다르게 보인다(예를 들어, 행렬을 사용하는 것).통상의 베이스의 사용에는, 상황에 따라서는 이점이 있는 경우가 있습니다.

소수가 2일 때, GF(p)의n 요소를 이진수로 표현하고, 다항식의 각 항의 계수는 대응하는 요소의 이진식에서 1비트로 표현됩니다.대괄호("{" 및 "}") 또는 이와 유사한 딜리미터는 일반적으로 이진수 또는 16진수 등가물에 추가되어 값이 필드의 기초 계수를 제공하므로 필드의 요소를 나타냅니다.예를 들어 특성 2 유한 필드에서의 동일한 값의 등가 표현은 다음과 같습니다.

다항식 x6 + x4 + x + 1
바이너리 {01010011}
16진수 {53}

원시 다항식

유한 필드를 생성하는 데 사용할 수 있는 많은 환원 불가능한 다항식(때로는 환원 다항식이라고도 함)이 있지만, 모두 필드를 동일하게 표현하지는 않습니다.

유한장 GF(q)에 계수가 있는 n차 다항식(여기서 q = pt)은 그 근이 모두 GF(qn)[1][2]원시 원소일 경우 원시 다항식이라고 한다.유한 필드의 다항식 표현에서, 이것은 x가 원시 요소임을 암시한다.x가 원시 [3]원소인 환원 불가능한 다항식이 적어도 하나 있다.즉, 원시 다항식의 경우 x의 거듭제곱은 필드에 0이 아닌 모든 값을 생성합니다.

다음 예제에서는 x의 의미가 예제 간에 변경되므로 다항식 표현을 사용하지 않는 것이 가장 좋습니다.GF(2)에 대한 단일 불가축 다항식8 x + x43 + x + 1은 원시적이지 않다.θ를 이 다항식의 근(다항식 표현에서 이것은 x일 이다), 즉 θ8 + θ43 + θ + 1 = 0이라고 하자. 이제 θ51 GF(28)의 원시 원소가 아니므로 [4]θ는 51차 곱셈 부분군을 생성한다.필드 요소 θ + 1을 고려합니다(다항식 표현에서는 x + 1이 됩니다).이제 (++1)84 + (++1)3 + (++1)2 + (++1) + 1 = + + λ843 + + + 1 + 1 = 0이다. 이 원시 다항식의 모든 근은 원시 원소이므로, is + 1은8 GF(2)255 = 1의 원시 원소이며 더 작은 검정력은 없다.GF(28)에는 128개의 제너레이터가 있습니다(원시 요소의 수 참조).유한 필드의 생성자로 x를 갖는 은 많은 계산 수학 연산에 도움이 됩니다.

덧셈과 뺄셈

이들 다항식 중 두 개를 합산 또는 감산하고 특성에서 결과 모듈화를 줄임으로써 가감산한다.

특성 2를 갖는 유한장에서는 가산모듈로 2, 감산모듈로 2, XOR가 동일하다.따라서,

다항식 (x64 + x + x + 1) + (x76 + x3 + x + x) = x7 + x4 + 13
바이너리 {01010011} + {11001010} = {10011001}
16진수 {53) + {CA} = {99}

다항식을 규칙적으로 더하면 합계는 2x6 항을 포함할 것이다.이 용어는 0x가6 되며, 응답이 modulo 2로 축소되면 폐기됩니다.

다음은 몇 가지 다항식의 정규 대수합과 특성 2 유한 필드합을 모두 포함하는 표입니다.

p1 p2 p1 + p2 아래...
K[x] GF(2n)
x3 + x + 1 x3 + x2 2x3 + x2 + x + 1 x2 + x + 1
x4 + x2 x6 + x2 x6 + x4 + 2x2 x6 + x4
x + 1 x2 + 1 x2 + x + 2 x2 + x
x3 + x x2 + 1 x3 + x2 + x + 1 x3 + x2 + x + 1
x2 + x x2 + x 2배2 + 2배 0

컴퓨터 사이언스 어플리케이션에서는 GFn(2) Galois 필드라고도 불리는 특성2의 유한 필드에 대해 연산이 간소화되어 이러한 필드는 어플리케이션에서 특히 인기 있는 선택지가 됩니다.

곱셈

유한장에서의 곱셈은 유한장을 정의하는 데 사용되는 환원 불가능한 환원 다항식인 곱셈 모듈로, 즉, 환원 다항식을 제수로 사용하는 곱셈 뒤에 나눗셈을 하는 것이다. 나머지는 곱이다.기호 "•"는 유한 필드에서의 곱셈을 나타내기 위해 사용될 수 있다.

리엔다엘(AES) 유한장

Rijndael(AES로 표준화)은 256개의 요소를 가진 특성 2 유한 필드를 사용합니다.이것은 갈로아 필드 GF(2)라고도8 불립니다.곱셈에는 다음과 같은 환원 다항식을 사용합니다.

x8 + x4 + x3 + x + 1 입니다.

예를 들어 Rijndael 필드의 {53) • {CA} = {01}은(는) 다음과 같습니다.

(x64 + x + x + 1) (x76 + x3 + x + x )
= (x13 + x12 + x9 + x7) + (x11 + x10 + x7 + x5) + (x8 + x7 + x4 + x2) + (x7 + x6 + x3 + x)
= x13 + x12 + x9 + x11 + x10 + x5 + x8 + x4 + x2 + x6 + x3 + x
= x13 + x12 + x11 + x10 + x9 + x8 + x6 + x5 + x4 + x3 + x2 + x

그리고.

x1312 + x11 + x10 + x9 + x8 + x6 + x5 + x4 + x3 + x2 + x + x mod8 x + x4 + x31 + 1
= (111111011110 mod 100011011)
= {3F7E mod 11B} = {01}
= 1 (표준)

후자는 나눗셈을 통해 나타낼 수 있습니다(이치 표기는 작업에 적합하기 때문에 이진 표기를 사용하여 표시).예에서는 초등학교 긴 나눗셈에서 사용할 수 있는 산술 뺄셈이 아닌 배타적 OR이 적용됩니다.

            111111011110 (mod) 100011011 ^100011 011100011110110110110110110110110110110001

({53) 및 {CA} 요소는 곱셈이 1이므로 서로 역수입니다.)

이 특정 유한 필드의 곱셈은 수정된 버전의 "농어 알고리즘"을 사용하여 수행될 수도 있습니다.각 다항식은 위와 같은 이진법 표기를 사용하여 표현됩니다.각 (축소된) 다항식의 관점에서 0 ~ 7도만 가능하므로 8비트로 충분합니다.

이 알고리즘은 3개의 변수(컴퓨터 프로그래밍의 의미)를 사용합니다. 변수는 8비트 표현을 가지고 있습니다.a와 b는 곱셈수로 초기화됩니다.p는 곱을 누적하여 0으로 초기화해야 합니다.

알고리즘의 시작과 끝, 그리고 각 반복의 시작과 끝에서는 이 불변성이 참입니다.a b + p는 곱입니다.알고리즘이 기동했을 때는, 이것은 분명히 들어맞습니다.알고리즘이 종료되면 a 또는 b가 0이 되므로 p에는 곱이 포함됩니다.

  • 다음 루프를 8회(비트당 1회) 실행합니다.반복 전에 a 또는 b가 0일 때 정지해도 됩니다.
    1. b의 최우측 비트가 설정되어 있는 경우는, 곱 p를 a의 으로 배타적 또는 배타적 또는 배타적한다.이것은 다항식 덧셈입니다.
    2. b를 오른쪽으로 1비트를 이동시켜 맨 오른쪽 비트를 폐기하고 맨 왼쪽 비트의 값을 0으로 합니다.다항식을 x로 나누면 x항이0 삭제됩니다.
    3. 의 왼쪽 끝 비트가 1로 설정되어 있는지 여부를 추적하고 이 을 carry라고 부릅니다.
    4. 왼쪽으로 1비트를 이동시켜 맨 왼쪽 비트를 삭제하고 새 맨 오른쪽 비트를 0으로 만듭니다.이것은 다항식에 x를 곱하지만, 우리는 여전히 x7 계수를 나타내는 자리올림을 고려할 필요가 있다.
    5. carry 값이 1, 배타적 또는 16진수의 a인 경우0x1b(00011011(바이너리). 0x1b는 높은 항이 제거된 환원 불가능한 다항식에 해당합니다.개념적으로, 환원 불가능한 다항식 자리올림 가산 모듈로 2 to 0의 높은 항.
  • p는 현재 제품을 가지고 있다.

이 알고리즘은 특성 2의 다른 필드에 대한 곱셈으로 쉽게 일반화되며 a, b, p의 길이와 값을 변경합니다.0x1b적당하게.

곱셈 역

「Itoh-Tsujii 반전 알고리즘」도 참조해 주세요.

유한 필드의 요소 a에 대한 곱셈 역수는 여러 가지 방법으로 계산할 수 있습니다.

  • a에 필드 내의 모든 숫자를 곱하여 곱한 값이 1이 될 때까지 구합니다.이건 무차별적인 수색이야
  • GF(pn)의 0이 아닌 원소들은 곱셈에 관해 유한군을 형성하기 때문에, apn−1 = 1 (θ 0의 경우), 따라서 a의 역수는 a이다pn−2.
  • 확장된 유클리드 알고리즘을 사용하여.
  • 유한 필드에 대한 로그 지수 표를 만들고 p-1에서n 로그를 빼서 결과를 지수화합니다.
  • 유한 필드에 대한 모듈러 곱셈 역테이블을 만들고 룩업을 한다.
  • 반전이 더 간단한 복합 필드에 매핑하고 다시 매핑합니다.
  • 특수 정수(소수의 유한 필드인 경우) 또는 특수 다항식(비소수의 유한 필드인 경우)을 구성하고 [5]a로 나눈다.

구현 요령

제너레이터 기반 테이블

작은 갈로아 필드에서 갈로아 필드 계산을 위한 알고리즘을 개발할 때 일반적인 성능 최적화 접근방식은 발생기 g를 찾아 항등식을 사용하는 것이다.

로그g(a) 및 gy 함수에 대한 일련의 테이블 룩업 및 정수 덧셈 연산으로 곱셈을 구현한다.그러면 모든 유한 필드에 생성기가 포함되어 있는 속성이 이용됩니다.Rijndael 필드 예제에서는 다항식 x + 1(또는 {03)이 이러한 생성자 중 하나입니다.다항식이 생성자가 되기 위해 필요하지만 충분하지 않은 조건은 환원할 수 없다.

구현에서는 a 또는 b가 0인 특수한 경우를 테스트해야 합니다.곱도 0이 되기 때문입니다.

다음과 같은 전략을 사용하여 등식과의 곱셈 역수를 결정할 수 있습니다.

여기서 제너레이터의 순서 g는 필드의 0이 아닌 요소의 수입니다.GF(28)의 경우 이는 2 - 1 = 255입니다8.즉, Rijndael의 예에서는 (x + 2551) = 1. 따라서 두 개의 조회 테이블과 하나의 정수 빼기로 수행할 수 있습니다.이 아이디어를 지수에 사용하면 다음과 같은 이점도 얻을 수 있습니다.

여기에는 정수 곱셈과 정수 모듈로 연산의 두 가지 테이블 룩업이 필요합니다.다시 한 번 특수한 경우 a = 0에 대한 검정을 수행해야 합니다.

그러나, 암호화 실장에서는, 많은 마이크로프로세서의 캐시 아키텍처에 의해서 메모리 액세스의 타이밍이 변화하기 때문에, 그러한 실장에는 주의가 필요합니다.이로 인해 타이밍 공격에 취약한 구현이 발생할 수 있습니다.

캐리어리스 곱셈

바이너리 필드 GFn(2)의 경우 필드 곱셈은 cLMUL 명령 집합과 같은 캐리어리스 곱셈을 사용하여 구현할 수 있으며, 이는 n 64 64에 적합합니다.곱셈은 하나의 캐리어리스 곱셈을 사용하여 곱(최대 2n-1비트)을 생성하고, 또 다른 캐리어리스 곱셈은 필드 다항식의 사전 역수를 사용하여 몫 = "product / (field 다항식)"을 생성하고, 다음으로 xor: 결과 = product = product (field 다항식) δ (field 다항식) δ / (field 다항식)ial). 마지막 3단계(pclmulqdq, pclmulqdq, xor)는 x86 pclmulqdq [6]명령을 사용하여 CRC를 빠르게 계산하기 위해 Barrett 감소 단계에서 사용됩니다.

복합 필드

k가 합성수, 이진수 필드 GF(2)에서k 하위 필드 중 하나의 확장 필드, 즉 k = m n인 GF(2)n까지m 동형상이 존재할 것이다.이러한 동형 중 하나를 활용하면 요소가 더 큰 서브필드에 [7]걸쳐 표현되는 트레이드오프와 함께 확장의 정도가 더 작기 때문에 수학적 고려를 단순화할 수 있다.하드웨어 구현의 게이트카운트를 줄이기 위해 프로세스에는 GF(28)에서 GF(2)22[8]로의2 매핑 등 여러 네스팅이 필요할 수 있습니다.구현 제약이 있으며, 두 표현에서의 연산은 호환성이 있어야 하므로, 동형의 명시적 사용이 필요하다.보다 정확하게는, 이형성은 지도에 의해 표시될 것이다. 지도(a + b) = 지도(a) + 지도(b)지도(b) = 지도(a) = 지도(b)를 만족시키는, GFkk(2)와 지도에서 왼쪽의 연산이 일어나기 전에 지도(a)의 요소를 GF(2)nm 매핑하는 바이젝션이다.동형사상은 보통 k행 x k비트 행렬을 사용하여 구현되며, K행 x 1비트 행렬로 취급되는 GFk(2) 요소의 GF(2) 상에서 행렬 곱셈을 수행하는데 사용됩니다.α를 GF(2k)의 원시 원소로, β를 GF(2)nm 원시 원소로 정의한다.그런j 다음 β = map(αj) j α = map−1(βj)이다.α와 β의 은 매핑 행렬과 그 역행렬을 결정한다.실제 수학은 GF(2)n에서m 수행되기 때문에 GF(2m)n에 대한 환원 다항식은 보통 원시이고 GF(2)n에서m β = x이다.덧셈과 곱셈의 호환성 제약을 만족시키기 위해, 그 제약을 만족시키는 GFk(2)의 임의의 원시 요소α를 선택하기 위한 검색이 이루어진다.GF(2k)에 대한 환원 다항식이 원시적인 경우 대체 매핑 방법이 가능하다. 즉, GFk(2)에 대한 환원 다항식의 1비트 계수는 GFm(2)에 대한 m비트 요소 0 또는 1로 해석되며, 이들 중 어느 것이든 GF(2)nm 대한 환원 다항식으로 사용할 수 있는 n의 원시 계수가 m개 있게 된다.복합필드에 대한 매핑은 GF(pk)를 임의의 prime에 대해 GF(pm)n 등의 복합필드에 매핑하도록 일반화할 수 있다.

프로그램 예시

C 프로그래밍 예시

러시아 농민 곱셈 알고리즘을 사용하여 예를 들어 Rijndael 알고리즘이나 Reed-Solomon에 의해 사용되는 순서8 2의 특징적인 유한 필드에 숫자를 추가하고 곱하는 C 코드를 다음에 나타냅니다.

/* GF(2^8) 유한 필드에 2개의 숫자를 추가합니다*/ uint8_t 추가(uint8_t a, uint8_t b) {  돌아가다 a ^ b; }  /* 정의된 GF(2^8) 유한 필드에 두 숫자를 곱합니다. * 모듈로 다항식 관계 x^8 + x^4 + x^3 + x + 1 = 0 * (또 다른 방법은 캐리어리스 곱셈을 한 후 모듈식 축소를 하는 것입니다) */ uint8_t gmul(uint8_t a, uint8_t b) {  uint8_t p = 0; 곱셈 곱셈용 /* 어큐뮬레이터 */  하는 동안에 (a != 0 & & b != 0) {         한다면 (b & 1) /* b에 대한 다항식의 항이 상수이면 해당 a를 p */에 추가합니다.             p ^= a; /* GF(2^m)의 덧셈은 다항식 계수의 XOR */          한다면 (a & 0x80) /* GF modulo:a의 항이 0이 아닌 x^7일 경우 x^8 */이 될 때 감소해야 합니다.             a = (a << > 1) ^ 0x11b; /* 원시 다항식 x^8 + x^4 + x^3 + x + 1 (0b1_0001_1011)을 빼기(XOR) – 변경할 수 있지만 축소할 수 없는 */         또 다른             a <<=> 1; /*는 a*x*/에 상당합니다.         b >>= 1;  }  돌아가다 p; } 

이 예에서는 캐시, 타이밍 분기 예측 사이드 채널누설이 있어 암호화에는 적합하지 않습니다.

D 프로그래밍 예시

D 프로그램은 Rijndael의 유한 필드에 숫자를 곱하여 PGM 이미지를 생성합니다.

/** 정의된 GF(2^8) 유한 필드에 두 숫자를 곱합니다. x^8 + x^4 + x^3 + x + 1로 계산한다. */ u바이트 gmul(u바이트 a, u바이트 b) 순수하다 행하지 않다 {     u바이트 p = 0;      앞지르다 (불변의 u바이트 계산대; 0 .. 8) {         p ^= -(b & 1) & a;         자동 마스크 = -((a >> 7) & 1);         // 0b1_0001_1011은 x^8 + x^4 + x^3 + x + 1 입니다.         a = 출연자들(u바이트)((a << > 1) ^ (0b1_0001_1011 & 마스크));         b >>= 1;     }      돌아가다 p; }  무효 주된() {     수입품 표준.스태디오, 표준.컨벤트;     열거하다  = u바이트.맥스. + 1, 높이 = ;      자동 f = 파일("rijndael_field_multipliation.pgm", "실패");     f.기입하다("P5\n%d %d\n255", , 높이);     앞지르다 (불변의 y; 0 .. 높이)         앞지르다 (불변의 x; 0 .. ) {             불변의  c = gmul(x.로.!u바이트, y.로.!u바이트);             f.쓰다(c);         } } 

이 예에서는 사이드 채널을 피하기 위해 브랜치 또는 테이블룩업을 사용하지 않기 때문에 암호화에 적합합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ 이러한 다항식의 근은 반드시 GF(q)의 확장 필드에 있어야 한다. 왜냐하면 다항식은 환원 불가능하기 때문에 GF(q)에 근이 없기 때문이다.
  2. ^ Mullen & Panario 2013, 17페이지
  3. ^ Design and Analysis of Experiments. John Wiley & Sons, Ltd. August 8, 2005. pp. 716–720. doi:10.1002/0471709948.app1.
  4. ^ Lidl & Niederreiter 1983, 553페이지
  5. ^ Grošek, O.; Fabšič, T. (2018), "Computing multiplicative inverses in finite fields by long division" (PDF), Journal of Electrical Engineering, 69 (5): 400–402, doi:10.2478/jee-2018-0059, S2CID 115440420
  6. ^ "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction" (PDF). www.intel.com. 2009. Retrieved 2020-08-08.
  7. ^ "Efficient Software Implementations of Large FiniteFieldsGF(2n) for Secure Storage Applications" (PDF). www.ccs.neu.edu. Retrieved 2020-08-08.
  8. ^ "bpdegnan/aes". GitHub.
  9. ^ [1][데드링크]

원천

외부 링크