본문

AES 문서 분석 #4. Key Scheduling

Key SchedulingKey ExpansionRound Key Selection의 두부분으로 이루어져 있다. Key Expansion은 cipher key로부터 Key Expansion이 어떻게 만드는 지에 대한 것이다. 


각 라운드에 사용하는 라운드키를 생성하기 위해 AES는 키 확장 과정을 사용한다. Nr을 라운드의 수라 하면 키 확장 과정을 통해 하나의 128비트 암호 키로부터 Nr+1개의 128비트 라운드 키를 생성한다. 처음 생성한 라운드 키는 알고리즘을 시작하기 전에 평문과 XOR하고(AddRoundKey) 나머지 라운드 키들은 각 라운드의 마지막 단계에서 XOR 연산을 한다.

 

 

워드가 4개의 바이트들로 이루어진다고 할 때, 키 확장 루틴은 워드 단위로 라운드 키를 생성한다. 루틴은 4*(Nr+1) 워드를 생성하며(w0, w1 ... w4[(Nr+1)-1]), 10라운드로 이루어진 AES-128의 경우 44워드, 12라운드로 이루어진 AES-192의 경우 52워드, 14라운드로 이루어진 AES-256의 경우 60개의 워드가 필요하다. 그리고 각 라운드 키는 네 개의 워드로 이루어진다.

 

* AES-128의 키 확장

AES-128과 나머지 두 버전과는 약간의 차이만 존재한다.

1. 처음 네개의 워드 w0, w1, w2, w3은 암호 키(Cipher Key)로부터 만들어 진다. 암호키는 16개의 바이트들로 k0에서 k15까지 구성된 배열로 간주될 수 있다. 처음 네개의 바이트 (k0 - k3)는 w0가 되고, 그 다음 네개의 바이트 (k4 - k7)는 w1이 된다. 이렇게 나머지도 정의된다. 다시 말해서 w0, w1, w2, w3 하나로 연결 되면 이는 바로 암호 키를 반복하는 거시다.

2. 나머지 워드(w4 - w43)들은 다음의 과정을 통해 계산한다.

 

 

* RotWord, SubWord, RCon

워드를 순환이동 시키는 RotWord 루틴은 ShiftRows변환과 유사하나, 단지 하나의 열에만 적용된다는 차이가 있다. 이 루틴은 4개의 바이트로 구성된 하나의 워드를 입력으로 왼쪽으로 한바이트씩 이동한다. ([a0,a1,a2,a3] => [a1,a2,a3,a0]). SubWord는 SubBytes변환과 유사하나, 단지 네개의 바이트에만 적용된다. 이 루틴은 워드의 각 바이트를 S-박스를 이용하여 대치한 후 출력한다. 각 라운드 상수 RCon(Round Constant)은 4바이트 값으로, 가장 오른쪽의 3바이트는 모두 0이다. 키 확장 루틴은 아래에 체 GF(2^8)을 이용하여 상수들의 최상위 바이트들을 계산을 통해 얻을 수 있다. RCi라 불리는 라운드 상수의 최상위 바이트들은 x^(i-1)로 표현되는데, 여기서 i는 라운드수를 뜻한다. 

 

 

아래에서 128 비트 마스터 키 {24 75 A2 B3 34 75 56 88 31 E2 12 00 13 AA 54 87}를 이용하여 각 라운드에 사용할 라운드 키를 생성하는 과정을 보인다. 각 라운드에서, 마지막 세개의 워드의 계산은 매우 단순하다. 첫번째 워드의 계산을 위해서 임시워드 t의 값을 먼저 계산할 필요가 있다. 예를 들어, 라운드 1에서의 K1(w4,w5,w6,w7)을 위한 t는 다음과 같이 계산된다. i=4인 첫번째의 경우에 t가 필요하므로 t연산이 이루어지고, 이때 t=SubWord(RotWord(w3))⊕RCon[1]이고 w3은 {13 AA 54 87}이므로, RotWord(13AA5487)=AA548713 -> SubWord(AA548713)=AC20177D 따라서, t=AC20177D⊕RCon[1]=AC20177D⊕01000000=AD20177D이다.

 

 


Round Key Selection은 위 Key Expansion과정에서 나온 결과를 4 word단위(state)로 묶어(위 그림에서의 K0, K1, .. KNr) round에 보내도록 하는 작업을 의미한다.

댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.