Gae Ko's Blog

[암호] AES 본문

암호

[암호] AES

Gae Ko 2018. 1. 15. 20:50

※ AES (Advanced Encryption Standard)


AES란 표준 암호화 알고리즘으로 DES대신 aes로 대체하기 위해 암호 학계에서 제안을 요청하여 공모전을 개최하였는데

Rijmen과 Daemen이 개발한 Rijndael 알고리즘이 AES공모에서 선정되면서 AES 암호화 표준이 되었다.

AES도 DES와 같은 대칭 암호 알고리즘이다.


DES에 비해 키 사이즈가 자유롭고, Triple-DES보다 효율적이고 안전하다.

그리고 키 길이가 56비트 뿐인 DES와 달리 

AES (Rijndael)의 키 길이는 128, 192, 256비트로 3가지 종류의 가변크기길이를 제공해준다.

사용하는 암호화 키의 길이에 따라 암호화와 복호화에 필요한 라운드 수는 다음 표와 같이 정의된다.



AES 암호화 과정은 DES와 달리, 첫 번째 라운드를 수행하기 전에 먼저 초기 평문과 라운드 키의 XOR연산을 수행하므로, 암호화 과정에 필요한 전체 라운드 키의 개수는 Nn+1개가 된다. 그리고 마지막 라운드에서는 Mix Column연산을 수행하지 않는다는 특징이 있다.


AES는 DES가 사용하는 페이스탈 구조를 사용하지 않고 SPN 구조를 사용한다.


1.  SPN (Substitution-Pernutation Network) 구조


SPN 구조는 말 그대로 Substitution Layer(S-box)과 Pernutation Layer(P-box)를 이용하여 Confusion과 Diffusion을 만족시켜주는 구조이다.

입력을 여러 개의 소블록으로 나누고 각 소블록을 S-box로 입력하여 대치시키고 S-box의 출력을 P-box로 전치하는 과정을 반복한다. 


이 구조의 장점은 페이스탈 구조와 반대로 병렬연산이 가능하며 (→ 속도가 빨라짐)

단점으로는 복호화시 별도의 복호화 모듈을 구현해줘야 한다는 점이다.



2. AES 알고리즘의 동작



다음 네가지 단계를 이용한다.


1) Substitution Byte (바이트 대체)

암호문이 비 선형성을 갖도록 하기 위해 바이트 단위로 역 변환이 가능한 S-box라는 표를 이용하여 블록을 교환한다.

연산은 크게 두 단계로 구성된다. 


- 첫번째 단계는 각 바이트를 GF(2^8)위 다항식으로 표현하여 mod 8차 기약다항식 상에서의 역수를 구하는 것으로 확장 유클리드 호제법을 이용하여 수행한다.


- 두번째 단계는 GF(2)위에서 Affine변환을 적용하는 과정으로 다음과 같은 행렬을 사용한다.


- 두 단계를 통해 Sub byte 연산을 수행하면 현재 stat의 각 바이트는 아래 그림과 같이 다른 바이트로 치환된다.

- Affine 변환의 결과 집합을 S-box로 표현하면 다음과 같다.



2) Shift row (행 이동)

행단위로 Shift 연산하여 단순히 행과 행을 치환한다.



3) Mix column (열 섞기)

열에 속한 모든 바이트를 순환 행렬을 사용해 함수로 열에 있는 각 바이트를 대체하여 변화시킨다.

위 그림처럼 각각의 바이트에 특정행렬과 곱연산을 가하여 변환한다. 위 그림에서 왼쪽의 행렬부분이 암호화에 쓰이는 행렬이며, 곱해지는 곳은 예시로 입력한 32비트 입력이다. 연산은 행렬의 곱연산과 동일하게 이루어 진다.


4) Add Round Key (라운드 키 더하기 )

라운드 키와 현재 state 블록을 비트별로 XOR한다.

그러므로 암호화 과정의 stat와 라운드 키는 동일한 크기를 가지며, 1라운드를 수행하기 전에 코기 평문과 라운드 키를 XOR하는 과정이 필요하므로 - 이 연산은 전체 암호화 과정에서 Nn+1번 수행하게 된다.


3. AES 의 효과 

- 구현이 쉽고 메모리를 적게 소모

- Rijdael 에 대한 유효한 공격은 현재로서는 아직 발견되지 않음

- 고속

- 다양한 플랫폼





* 대칭형 알고리즘 


암호 알고리즘들은 크게 대칭형 알고리즘과 비대칭형 알고리즘으로 구분되는데, 대칭형 알고리즘은 암호화할 때 사용되는 키 값과 복호화할 때 사용되는 키 값이 동일한 알고리즘이다. 반대로 비대칭형 알고리즘은 두 키값이 다른 알고리즘이다.

대칭형 암호 알고리즘은 다음과 같은 장점때문에 주로 데이터 통신을 통해 주고 받는 데이터를 암호화할 때 사용한다.

1) 암호화/복호화 속도가 비대칭형 암호 알고리즘보다 빠르다. (최소 10~ 최대1000배)

2) 암호화문의 크기가 평문보다 크지 않다. (암호화시 사이즈 증가가 없다.)

대칭형 알고리즘의 예로는 SEED, DES, DES3, AES 등이 있다.

( 자세한 내용 : http://olooi.tistory.com/entry/AES-%EC%95%94%ED%98%B8%ED%99%94)


표준 대칭키 알고리즘의 종류 


알고리즘

특징

소유국가

DES

64bit block

56bit key

미국

Triple DES

64bit block

112~168bit key

미국

BlowFish

64bit block

128bit key

미국

RC2

64bit block

128bit key

미국

RC4

Stream Cipher

미국

AES

128bit block

128~256 bit key

벨기에

SEED

128bit block

128bit key

한국

ARIA

128bit block

128~256bit key

한국

















// 키의 길이가 유동적이며, 키의 길이가 길수록 안정성이 뛰어남.

'암호' 카테고리의 다른 글

[암호] aes_256_cbc 암호화 알고리즘 소스 코드  (1) 2018.01.16
[암호] SEED  (0) 2018.01.16
[암호] 블록암호의 운용모드  (0) 2018.01.15
[암호] XOR 블록암호 구현하기  (0) 2018.01.11
[암호] DES  (0) 2018.01.10