[암호학] 대칭키 암호 - AES(Advanced Encrytion Standard)
고급 암호화 표준
AES (Advanced Encryption Standard)
- 대칭키를 쓰는 블록 암호이다. 높은 안전성과 속도로 인해 전 세계적으로 많이 사용되고 있다.
- 현재 AES는 DES의 뒤를 이을 AES라는 이름을 걸고 NIST가 주최한 공모전에서 채택된 Rijndael(레인달) 알고리즘을 가리킨다. 엄밀하게는 Rijndael 알고리즘의 여러 가능성 중, 암호화 블록의 크기가 128비트이며 암호화 키의 길이가 128, 192, 256비트인 세 가지 종류가 AES 표준으로 지정되었다.
- 각각 AES-128, AES-192, AES-256으로 불린다.
1. 역사
- 1997년 미국 국립기술표준원은 DES를 대체하기 위해 Advanced Encryption Standard 또는 AES로 불리는 암호 알고리즘을 공모하였고, 2001년 11월에 NIST는 최종 선택하여 공표 하였다.
- NIST에서 AES 알고리즘으로 선택한 것은 레인달(Rijndael) 이었다.
2. 선정기준(Criteria)
- 안전성(security), 비용(cost), 구현 효율성(implementation)
3. 특징
- 대칭형, 블록 암호화 알고리즘이다.
- 암호화 키는 128, 192, 256의 세 가지 중 하나가 될 수 있으며, 각각 AES-128, AES-192, AES-256으로 불린다. 암호화 키의 길이에 따라 실행되는 라운드의 수가 다른데, 각각 10, 12, 14 라운드를 실행한다.
- S-Box를 간단히 설명하자면, 입력 데이터를 지정된 숫자로 바꿔서 암호를 깨기 어렵게 만드는 기법이다. AES는 이걸 창조롭게 재발명하여 암호화 속도를 높이고 싶으면 S-Box를 메모리에 넣어 두고, 프로그램 메모리 양을 줄이려면 실행히 S-Box를 연산으로 구해내는 기법을 사용했다.
4. 알고리즘
- Rijndael(레인달)이 AES로 채택되었으므로 아래는 Rijndael(레인달) 알고리즘에 대한 설명이기도 하다.
- 이해하기 쉬운 영상을 첨부한다.
4.1 개요
Rijndael(레인달) 알고리즘은 크게 보아 네 단계로 이루어진다.
① KeyExpansion : Key schedule(키 스케쥴)이라고도 부른다. 128, 192 또는 256 비트 길이인 하나의 주 암호화 키를 받아서 아래 라운드들에서 사용할 여러 개의 128비트 라운드 키를 생성한다.
② 0 라운드 : 위의 단계에서 생성한 라운드 키 중 첫 번째 키를 사용, AddRoundKey를 한 번 실행한다.
③ 1~(9, 11, 13) 라운드 : SubBytes, ShiftRows, MixColumns, AddRoundKey를 순서대로 실행한다. 이것을 AES-128, 192, 256에 따라 각각 9번, 11번 13번 반복한다.
④ 마지막 (10, 12, 14)번째 라운드 : SubBytes, ShiftRows, AddRoundKey를 순서대로 실행한다.
4.2 KeyExpansion
위에서 언급한 것처럼 Key schedule, 키 스케쥴이라고도 부른다. 하나의 주 암호화 키로부터 많은 라운드 키들을 만들어 낸다. 주 키의 길이에 따라 총 라운드 수가 달라지므로, 만들어야 할 라운드 키의 갯수도 다르다. AES-128, 192, 256에 따라 각각 11개, 13개, 15개의 라운드 키를 만든다.
Rijndael 알고리즘은 라운드 키를 만들 때 32비트=4바이트=워드씩, 연속적으로 만든다. AES는 세 버전 모두 128비트의 블록 사이즈를 사용하므로, 하나의 라운드 키는 이 4바이트 워드를 네 개 뭉쳐서 만든다. 그러므로 AES-128, 192, 256버전은 각각 44, 52, 60개의 4바이트 워드를 만들어야 한다.
5. 라운드(Rounds)
- AES는 128비트 평문을 128비트 암호문으로 출력하는 알고리즘으로 non-Feistel 알고리즘에 속한다.
- 10, 12, 14라운드를 사용하며, 각 라운드에 대응하는 키 크기는 128, 192, 256비트이다.
- 키 크기에 따라 AES의 세 가지 버전이 존재하며 이들은 AES-128, AES-192, AES-256으로 불린다. 그러나 어떤 경우라도 키 확장 알고리즘으로부터 생성되는 라운드 키 크기는 평문과 암호문 크기와 동일한 128비트이다.
- 각 라운드느 비선형을 갖는 S-box를 적용
① SubBytes() : 바이트 단위로 치환을 수행
② ShiftRows() : 행 단위로 순환시프트를 수행
③ mixColumns() : 높은 확산을 제공하기 위해 열단위로 혼합 (암호화의 마지막 라운드에서는 사용하지 않음)
④ AddRoundKey() : 라운드 키와 State를 EX-OR
6. 암호(Cipher)
- DES에서는 Feistel 네트워크를 기본 구조로 사용하고 있지만, Rijndael에서는 SPN(Substitution-Permutation Network) 이라는 구조를 사용하고 있다.
※ SPN 구조
SPN 구조는 라운드 함수가 역변환이 되어야 한다는 제약이 있지만 더 많은 병렬성을 제공하고 있기
때문에 암호확 복호화 알고리즘의 고속화를 요구하며, 컴퓨터 프로세서(CPU)가 더 많은 병렬성을
지원하게 된 현 추세에 부응하는 방식이라 할 수 있다.
SPN은 입력을 여러 개의 소블록으로 나누고 각 소블록을 S-box에 입력하여 치환시키고 S-box의 출력을
P-box로 전치하는 과정을 반복한다.
'IT > 정보보안' 카테고리의 다른 글
[암호학] 현대 대칭키 암호를 이용한 암호화 기법 - ECB, CBC, CFB, OFB, CTR 모드 (2) | 2019.11.21 |
---|---|
[암호학] 기타 대칭키 암호 알고리즘 - IDEA, RC5, SEED, ARIA, HIGHT, LEA (0) | 2019.11.19 |
[암호학] 대칭키 암호 - DES(Data Encryption Standard) (0) | 2019.11.15 |
[암호학] 대칭키 암호 - 현대 대칭키 암호 #스트림 암호 (0) | 2019.11.13 |
[암호학] 대칭키 암호 - 현대 대칭키 암호 #블록 암호 (0) | 2019.11.13 |
댓글