암호/암호 알고리즘

[AES] 알고리즘 정리

뇨롱 2021. 3. 6. 01:38

AES의 종류는 3가지이다. 

키의 길이에 따라 AES-128, AES-196, AES-256 로 정해진다. 

AES의 종류에 따라 진행하는 라운드 수가 다르다.

AES NAME 키 길이 (Nk) BLOCK LENGTH(Nb) 라운드 수(Nr)
AES-128 4 4 10
AES-196 6 4 12
AES-256 8 4 14

 

★DES와의 차이점:

 역함수가 필요하다.

② SPN구조

③ 바이트 단위로 연산이 구성되어있다.

 라운드 함수가 존재한다.

 

1. AES의 알고리즘

▶입출력 파라미터

블록길이: 128비트

키 길이: 128비트,196비트,256비트

라운드 수 : 10라운드,12라운드 14라운드

▶함수

(1) Add Round Key 

: round키를 구하고 키와 평문을 연산해주는 함수이다. 

 

 

 g라는 함수를 이용해 round 키를 구한다.

 

key를 열 단위로 끊어 w1w2w3w4에 넣은다음에 w3만 g함수를 통해 연산하고 키들과 연산해 새로운 round key를 구한다.

 g함수:

1) 왼쪽으로 1번 순환

2) S-box를 통한 치환

3) 라운드마다 정해져 있는 값과 xor

 

ex)

w[3]= (67,20,46,75)

1) 왼쪽으로 1번 순환  → (20,46,75,67) 

2) S-box를 통한 치환  → (B7,5A,9D,85) 

3) 라운드마다 정해져 있는 값(01,00,00,00)과 xor → (B6,5A,9D,85) 

 

 

 

② round key와 plaintext(평문)을 연산한다.

 

 

(2) SubBytes

: S-box를 통해 블록단위로 평문을 치환한다.

 

 

한 칸당 2바이트로 구성되는데 맨 앞 바이트는 행(x), 맨 뒤 바이트는 열(y)을 의미한다. 

 

(3) ShiftRows

: 행 단위로 왼쪽 순환해준다.

 

1번째 행은 0번, 2번째 행은 1번, 3번째 행은 2번, 4번째 행은 3번 왼쪽 순환한다.

 

 

(4) MixColumns

:각 라운드 마다 정해진 블록과 유한체 연산을 이용한 행렬의 곱을 한다.

① 각 라운드 마다 정해진 연산 블록이 있다. 

위 블록들과 유한체 연산을 한다.

유한체 연산은 GF(28)계산이다.

 

행렬의 곱을 이용해서 새롭게 블록들을 계산한다.

이런 규칙이 있다.

 

 

 

☆주의 할 점:

① 처음에 평문과 키가 들어가자마자 addroundkey함수를 이용해 xor시키며 마지막 라운드에서는 mixcolumns과정을 생략한다.

② 블록을 만들 때 행우선이 아니라 열 우선으로 세로먼저 채운다

 

 

☆ 개꿀인 점:

① AES의 대칭 구조

: AES의 대칭 구조로 라운드 함수 내에서 연산 순서가 바뀔 수 있다.

마구잡이로 바뀌면 안되고,

(SubBytes, ShiftRows), (MixColumns, AddRoundKey) 끼리 바뀔 수 있다.

다만 주의할 점이 순서가 바뀔 경우 AddRoundKey 조금 바뀌어야한다.

MixColumns는 선형성을 가지고 있는데, MixColumns(x)+Roundkey == MixColumns(x+Roundkey')이기 때문에

MixCoulmns함수를 고려해서 RoundKey를 약간 바꿔줘야 한다.

 

*선형성: M(x+y)=M(x)+M(y) 의 식을 만족하면 M을 선형함수라고 부른다 (↔비선형 함수)