[AES] 알고리즘 정리
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을 선형함수라고 부른다 (↔비선형 함수)