현재 위치 - 법률 상담 무료 플랫폼 - 특허 조회 - AES 암호화 알고리즘 개선 방법
AES 암호화 알고리즘 개선 방법
AES 알고리즘은 변위 및 변위 연산을 기반으로 합니다. 정렬은 데이터를 재정렬하는 것이고, 대체는 한 데이터 단위로 다른 데이터 셀을 바꾸는 것입니다. AES 는 여러 가지 다른 방법을 사용하여 변위 및 변위 연산을 수행합니다. AES 는 반복되는 대칭 키 그룹 암호입니다. 128, 192 및 256 비트 키를 사용하여 128 비트 (16 바이트) 로 데이터를 암호화하고 해독할 수 있습니다. 공개 키 암호화에 사용된 키 쌍과 달리 대칭 키 암호화는 동일한 키를 사용하여 데이터를 암호화하고 해독합니다. 그룹 암호는 입력 데이터와 동일한 수의 암호화된 데이터를 반환합니다. 반복 암호화는 입력 데이터가 반복적으로 교체되고 대체되는 순환 구조를 사용합니다. 기록에 따르면, 기원전 400 년에 고대 그리스인들은 배열 암호를 발명했다. 188 1 년, 세계 최초의 전화 기밀 특허 등장. 제 2 차 세계 대전 중 독일군은 잉그마 암호기를 가동했고, 암호학은 전쟁에서 매우 중요한 역할을 했다.

AES 암호화 알고리즘의 주요 단계

1..1AES 알고리즘에 대한 전반적인 설명

L 은 상태를 x 로 초기화하고, AddRoundKey 연산을 수행하고, RoundKey 를 상태와 다르게 또는 연산하는 일반 텍스트 x 를 제공합니다.

L 앞의 Nr- 1 바퀴의 각 바퀴에 대해 S 박스 쌍은 대체 작업에 사용되며 이를 하위바이트라고 합니다. 을 눌러 섹션을 인쇄할 수도 있습니다 State, ShiftRows 를 교체합니다. 을 눌러 섹션을 인쇄할 수도 있습니다 State, MixColumns; 에 대한 작업을 다시 해보겠습니다. 그런 다음 AddRoundKey 작업을 수행합니다.

L SubBytes, ShiftRows, AddRoundKey 작업을 차례로 수행합니다.

L 상태를 암호문 y 로 정의합니다.

1.2 의사 코드

암호 (바이트 입력 [4*Nb], 바이트 출력 [4*Nb], 단어 w[Nb*(Nr+ 1)])

시작

바이트 상태 [4, Nb]

상태 = 입력

Addroundkey (상태, w[0, Nb- 1])

Round = 1 의 경우 1 에서 Nr- 1 까지

하위 바이트 (상태)

ShiftRows (주)

혼합 열 (상태)

Addroundkey (상태, w[round*Nb, (round+ 1)*Nb- 1])

마무리

하위 바이트 (상태)

ShiftRows (주)

Addroundkey (상태, w[Nr*Nb, (Nr+ 1)*Nb- 1])

Out = 상태

2 키 확장 () 구현

2. 1 요구 사항

암호화 과정에서 128 bit 의 키를 9 라운드로 확장한 다음 초기 및 마지막 두 라운드 후에 1 1 바퀴의 키를 구성합니다. 각 라운드 키는 네 단어로 구성됩니다. 각 단어는 4 바이트로 구성되어 있습니다.

2.2 알고리즘 설계

입력: byte[] key, byte[] w //key 는 키이고 w 는 확장 키입니다.

출력: byte[] w // 확장 키 길이는 4 * 4 * 1 1 입니다.

운반:

1) 단어를 저장할 4 바이트 1 차원 배열을 만듭니다. Byte [] temp;

2) 키 [0. 15] 를 w [0.15] 로 보냅니다. //이미 W 에게 네 글자를 부여했다.

3) I 의 경우 = 4 ~ 43

//다음은 한 번에 한 단어 (32 비트) 를 처리합니다

Temp = w [I-1];

If (I = 0 mod 4) // 한 단어를 처리한 다음.

J = 1 ~ 4 // 단어의 4 바이트 처리

이 루프에서 temp 배열 인덱스를 가져오는 순서는 1, 2,3,0//rotword 작업입니다.

단어의 첫 번째 바이트인 경우 Rcon 상수 rcon (I/4) 을 취합니다.

Temp [j] = sbox (temp [(j+1)/4] rcon 상수.

마무리

Temp = subword (rotword (temp)) ⊓rcon [I/4]

만약 ... 끝날거야

W [I] = w [I-4] ⊓temp;

마무리

4) 출력 w

3 다항식 곱셈 모드 GF(28) 연산

3. 1 요구 사항

유한 필드 GF(28) 의 2 바이트와 다항식을 곱합니다. 모듈러스 환원 불가능한 다항식 m(x)=x8+x4+x3+x+ 1.

3.2 알고리즘 설계

입력: 바이트 a, 바이트 b

출력: 바이트 r

수학의 기초:

GF(28) 유한 필드의 특성: 두 요소의 추가는 비트 패턴에 따라 2 바이트의 추가와 일치합니다. 곱셈은 결합법을 만족시킨다.

다항식의 aixi (I ∨ 0-7) 중 하나를 고려하여 다항식에 선형 x 를 곱합니다.

B (x) = b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+B0,

얻다

B7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b 1 x2+b0x (공식1).

결과 모드 m(x) 은 x*b(x) 를 얻기 위해 보충됩니다.

B7 = 0 이면 공식 1 은 x*b(x) 입니다.

B7 이 0 이 아닌 경우 방정식 1 에서 m(x) 을 빼야 x*b(x) 가 됩니다. 약칭 다항식에 x 를 곱합니다.

이로써 aixi 에 b(x) 를 곱하면 I 배를 곱할 수 있다는 결론을 내릴 수 있다. X 의 곱셈 (16 진수는 0x02 로 표시) 은 바이트를 한 자리 왼쪽으로 이동한 다음 0x 1b 의 비트 모듈 2 에 추가하여 수행할 수 있습니다. 이 작업은 일시적으로 xtime () 으로 기록됩니다. Xtime () 을 반복해서 적용하면 x 의 높은 곱셈을 수행할 수 있습니다. 중간 결과를 더하면 xtime () 을 사용하여 모든 곱셈을 수행할 수 있습니다. 예를 들면 다음과 같습니다.

57 * 13 = Fe, 그 이유는 다음과 같습니다.

57 * 02 = xtime(57) = AE

57 * 04 = xtime(ae) = 47

57 * 08 = xtime(47) = 8e

57 * 10 = xtime(8e) = 07

그래서

57 *13 = 57 * (01⊔ 02 ⊒10)

= 57⊕ ae⊕ 07

= 철

4 세대 Sbox

4. 1 요구 사항

1 바이트 byte 를 유한 필드 GF(28) 의 다항식으로 간주하고 모듈 m(x) 에 대한 곱셈 역수를 계산한 다음 GF(2) 에 대한 부등각 변환을 수행합니다.

4.2 알고리즘 설계

입력: 바이트 a

출력: 바이트 [] S

수학 논리:

유한 필드 GF(28) 특성에 따라. A (28-1) Ͱ1mod m (x) 의 a 를 갖는 생성기 (원본이기도 함) a 입니다. 또는 a255 Ͱ1mod m (x). 또한 A 가 1 에서 28- 1 까지의 제곱은 유한 도메인 GF(28) 를 구성합니다.

곱셈에 의한 b * b-1Ͱ1의 특성. 곱셈의 역수를 구하면 다음과 같이 단순화할 수 있다

X = am, y 를 x 의 곱셈역이라고 설정하면 y = a255-m 입니다.

운반:

바이트 s [255], 바이트 l [255], 바이트 e [255] 의 세 가지 배열을 설정합니다.

원어를 a = 0x03 으로 설정하고,

A 의 0, 1, 2 ... 255 제곱 모듈 m(x) 을 각각 배열 L 로 보냅니다. A 의 연산은 앞의 다항식 곱셈을 나타냅니다. 다음은 의사 코드입니다.

I = 0 ~ 255 인 경우

L[i] = ai (공식 2)

마무리

곱셈역지수를 쉽게 계산할 수 있도록 배열 E 는 ai 의 거듭제곱 지수 I 를 저장합니다. 방정식 2 의 ai 값을 배열 e 의 아래 첨자로 설정하고 배열 L 의 ai 의 아래 첨자 I 는 배열 e 의 해당 값입니다 ... 공식 2 의 각 항목에는 E[ai] = I 가 있습니다.

위의 두 배열 L, E 에서 GF(28) 필드의 임의 바이트의 곱셈 역수를 얻을 수 있습니다.

바이트 c 가 ai 에 의해 생성되도록 합니다. 여기서 a 는 GF(28) 도메인의 생성자입니다. C 의 곱셈 역연산을 찾으려면 A255-i 만 찾으면 됩니다 ... 배열 e 에서 생성기 a 의 거듭제곱 지수 I 는 c 를 통해 찾을 수 있습니다 .. C- 1 의 거듭제곱 지수는 255-i 입니다. c-1=;

각 바이트의 경우 위의 내용에 따라 곱셈 역효과를 얻고 아핀 변환을 통해 배열 S 를 얻습니다. Sbox 입니다