Infomation_Security

AES

부산대보금자리 2021. 8. 7. 16:35

이전에 DES에 대해서 보았다. DES는 56bit key를 사용하여 보안성이 떨어지며 느리다.

따라서 새로운 블락 암호화 기법인 AES를 사용한다. AES는 key size가 128,192,256중 하나를 사용한다.

AES의 구현 기준은 1. 모든 공격에 저항성을 가지며 2. 속도가 빠르고 compactness 하며 3. 심플한 디자인이다.

AES의 원래 이름은 라인달이라고 불렸다.

key길이는 128/192/256중 하나이며 128bit 단위의 블락 사이즈를 가지고 블락 암호화를 한다. 

그리고 iterative 구조이다. 이는 앞서 배운 feistel 구조와 차이점이 있다.

iterative구조의 조금 더 정확한 표현은 add and round이다.

 

그리고 모든 공격에 대해 안전하며 8,16,32bit의 cpu에서 모두 동작하고 심플하다.

AES동작의 전반적인 구조이다.

128/192/256 중 어느 key를 사용하는지에 따라 라운드수가 달라진다. 

오른쪽의 전반적인 라운드가 보면 동작하는 라운드를 이해할 수 있다.

첫 라운드에서만 key addition이 먼저 일어난다.

이는 평문이 들어가면 key값을 살짝 변형해서 라운드 키가 되어 평문에 더한다. 

이후 바이트 단위의 치환(=confusion)을 한다. 

그리고 shift row -> mix column을 통해 diffusion을 한다.

그리고 다시 key addition을 해준다. 

이러한 과정을 반복하는 것이 전체적인 구조이다.

 

이제 각 과정에 대해 좀 더 자세히 알아보자.

연산 단위가 되는 Block은 128bit로 byte로 계산 시 16byte이다. 

이는 각 바이트를 4x4행렬로 만들어 위와 같이 표현할 수 있다.

이와 같은 byte단위의 매트릭스 구성은 라운드에서 진행되는 연산을 하게끔 도와준다.

각 연산은 bytre단위로 진행이 되며 substitution, permutation, mixcolumn, addroundkey가 일어난다.

그리고 DES와 구별할 수 있는 것은 Encryption과 Decryption단계가 다르다는 것이다.

위에서 보았듯이 각 바이트가 4x4 행렬로 표현되며 이러한 것을 state라고 한다.

Overall architecture에서 표현되는 A1,2... n은 하나의 A가 바이트를 의미하며 각 바이트가 변하게 된다.

 

각 과정을 살펴보자

첫 번째로 ByteSub Transformation은 S-BOX를 통해서 치환이 된다. 

S-BOX의 값은 matrix로 정의가 돼있으며 이는 아래와 같다. 

주로 하드웨어 로직으로 구현되며 소프트웨어 테이블로도 정의가 가능하지만 성능적인 면에서 하드웨어를 이용하는 것이 훨씬 좋은 성능을 가진다.

다음은 Diffusion Layer를 거치는데 여기엔 ShiftRow와 Mixcolumn이 있다.

ShiftRow는 행단 위로 shift를 하는 것이다. 

예를 들면 행마다 1행은 <<연산, 2행은 >> 연산과 같이 쓰일 수 있다.

존재하는 4x4 matrix에 대해서 gf(2.^8) 간의 곱셈을 한다.

저 공간에서의 minimal polynomial이 있다. 

예시로 첫줄에서 계산되는 것을 보자.

46 보면알겠지만 8비트를4비트씩나눠서 한글자씩 담당한다.

10000111 87이다 이걸 2 곱하니까 left shift 하는 거고이는 x8승이 나오는데 이건 gf(2.^8)에서 x4 + x 3승+x+1이랑승+x+1이랑 같으므로 저런식으로 비트 나타낼수 있다. 각 계산을 모두 더해주면 47 나온다. 

그리고 나온 값에 대해서 key 값과 xor연산을 한다. 

라운드 키가 생성되는 key schedule은 아래와 같다.

원래 키 128비트가 있으면 16바이트의 k가 있다. 

이 16개의 k를 4개씩 묶어서 w를 만든다. 

각 w는 위와 같은 방법으로 연산이 반복되어 각 라운드 키가 생성이 된다. 

'Infomation_Security' 카테고리의 다른 글

공개키 키 관리기법  (0) 2021.08.19
공개키 암호와 RSA  (0) 2021.08.19
Block Cipher mode  (0) 2021.07.17
Block Cipher(블록 암호화)  (0) 2021.07.17
Stream Cipher  (0) 2021.07.16