AES에서는 input으로 plain text와 cipher key가 들어가며, output으로 cipher text가 나온다.


이 때 input은 block 단위로 들어가게 되는데, 한 block의 사이즈는 원소가 1byte인 4x4 배열이다. (128bit)


또한 cipher key의 size는 128bit이며, 이 때 key size는 128, 192, 256 등이 가능하나 128이 대중적인 것 같다.


(block은 state라고 부르기도 한다.)


AES에서는 매 round마다 initial key로부터 mixing을 해서 얻은 subkey를 사용하여 plain text를 암호화 한다.


round는 총 10번이 진행되는데, 매 라운드 마다 일어나는 과정을 짧게 요약하면..


plain text를 이리 저리 섞음(전문용어로는 confusion과 diffusion) --> subkey와 XOR하여 암호화


이러한 과정이 반복적으로 10회 일어난다.


참고로 key size에 따른 round 횟수는..


key size = 128일때 10번


key size = 192일 때 12번


key size = 256일 때 14번


이라고 한다.



AES에서 10회의 round동안에는 한 round 당 아래의 4가지 연산이 차례대로 수행된다. 단, 여기서 주의해야 할 점은,


마지막 round에서는 MixColumns()를 수행하지 않는다는 점이다.


1. SubBytes() --> scramble each byte


2. ShiftRows() --> scramble each row


3. MixColumns() --> scramble each column


4. AddRoundKey() --> encrypt


매 round마다 위의 4가지 operation이 차례대로 수행되며, 1,2,3번 연산은 confusion과 diffusion이라는 방법을 사용해


서 공격자가 plain text를 유추하기 힘들도록.. 한다고 한다. 4번째 연산에서는 data를 실질적으로 encrypt 한다.


참고로,


diffusion은 plaintext의 pattern들을 ciphertext 내에서 분산시키는 것.


confusion은 plaintext와 ciphertext 사이의 관계를 모호하게 하는 것.


이라고 한다.. (참고 : 위키피디아와 http://www.nku.edu/~christensen/diffusionandconfusion)



1. SubBytes()


이 과정에서는 block의 각각의 byte들을 인덱스로 하여 S-BOX 내의 값으로 block 안의 내용물을 치환한다. 


S-BOX는 substitution table의 약어이고, 미리 값들이 정의되어있는 배열이다. (자세한건 자료 참고)


만약 내가 가진 1 byte 데이터가 "A"이면 A는 16진수로 0x42이기 때문에, S-BOX의 4행 2열에 속하는 값을 block의


"A" 자리에 대신 치환한다. block 내의 모든 16개 값들에 대해 동일한 연산을 진행한다.



2. ShiftRows()


이 과정에서는 state 내의 각각의 행들에 대해서, 행 안의 데이터들을 mixing 함으로써 diffusion을 적용시킨다. 


state의 row0는 shifted되지 않으며, row1은 1 byte가 왼쪽으로 shift되고, row2는 2 byte가 왼쪽으로 shift되고, 


row3은 3byte가 왼쪽으로 shift 된다. shifted 되어진 바이트들은 각 행의 오른쪽으로 다시 차례대로 채워진다.


(rotated shift)



3. MixColumns()


이 과정에서는 각각의 column들의 데이터들을 mixing함으로써 diffusion을 적용시킨다. 그 과정을 설명하는 것이


많이 어렵기 때문에 이 과정을 설명하는 논문이 나와있을 정도이다. 아래 논문을 보면 어느정도 이해가 된다.


http://www.angelfire.com/biz7/atleast/mix_columns.pdf




4. AddRoundKey()


실제 encryption은 이 과정에서 수행되는데, state내의 각각의 byte들이 subkey와 XOR연산 되어진다. subkey는 


key expansion schedule에 따라 key로부터 유도되어진다. subkey를 유도해내기 위해서는 앞의 S-BOX처럼 미리


Round Constant라고 하는 4x10 사이즈의 배열이 필요한데, Round constant 배열의 각 column들은 매 round마다 


사용되어질 sub key를 구하는데 한번씩 사용된다. (10열 = 10 round)


key expansion schedule 또한 과정이 복잡하기 때문에 관련 자료를 참고하는 것이 좋다.



위의 네 가지 연산을 수행하고 나면 round 1이 종료되고, round 2를 하기 위해서는 다시 subkey를 구하고 앞의 네 


연산을 다시 반복하면 된다. 이렇게 9 round까지 진행 한 뒤, 10 round에서는 MixColumns()를 제외한 1,2,4번만 진


행한다. 그러면 AES의 과정이 완료된다.



-------------------------------------------------------------------------------------


관련 자료


AES 과정에 대한 플래시 영상 : http://www.cs.bc.edu/~straubin/cs381-05/blockciphers/rijndael_ingles2004.swf


위키피디아 : http://en.wikipedia.org/wiki/Advanced_Encryption_Standard


pdf 참고 자료 : http://www.giac.org/cissp-papers/42.pdf


만화로 된 참고 자료 : http://www.moserware.com/2009/09/stick-figure-guide-to-advanced.html


pdf 참고 자료 2 : http://www.saylor.org/site/wp-content/uploads/2012/06/Advanced-Encryption-Standard.pdf


pdf 참고 자료 3 : http://www.adamberent.com/documents/AESbyExample.pdf


mixColumns 연산에 대한 논문 설명 : http://www.angelfire.com/biz7/atleast/mix_columns.pdf









'Security > 공개글' 카테고리의 다른 글

access control 관점에서 본 fine grained vs coarse grained  (0) 2015.03.02
ECB 모드가 취약한 이유?  (0) 2014.06.28
diffusion  (0) 2014.06.28
confusion  (0) 2014.06.28
confusion성질과 diffusion성질에 대해서  (2) 2014.06.28
Posted by huammmm1
,