AES 암호화란 무엇인가?
AES(Advanced Encryption Standard) 암호화는 FIPS 197로도 알려진 고급 암호화 표준에서 승인한 128비트, 192비트, 256비트 대칭키 암호화 알고리즘을 사용해 전자 정보를 숨기는 과정을 의미합니다. 현재 전 세계적으로 가장 널리 사용되는 데이터 보호 기술 중 하나입니다.
AES 탄생 배경
1990년대 미국 정부는 전 세계적으로 사용할 수 있는 표준 암호화 알고리즘의 필요성을 느끼고 새로운 표준 제정에 착수했는데, 이것이 바로 AES입니다. 여러 후보 알고리즘이 제출되었고, 활발한 논쟁 끝에 Rijndael(라인달) 알고리즘이 최종 선정되었습니다. Rijndael은 벨기에의 암호학자 Joan Daemen과 Vincent Rijmen이 개발한 알고리즘입니다.
새로운 알고리즘이 필요했던 결정적인 이유는 기존 DES(Data Encryption Standard)의 명백한 취약점 때문이었습니다. DES의 56비트 키는 전수 키 탐색(exhaustive key search) 공격에 더 이상 안전하지 않았고, 64비트 블록 역시 취약하다고 판단되었습니다. 반면 AES는 128비트 블록과 128비트 키를 기반으로 훨씬 강력한 보안성을 제공합니다.
AES 구조의 주요 특징
AES의 구조를 이해하는 데 중요한 포인트들은 다음과 같습니다.
- 파이스텔(Feistel) 구조가 아님: 파이스텔 구조에서는 데이터 블록의 절반이 나머지 절반을 변형하는 데 사용되고 두 부분이 서로 교환됩니다. 하지만 AES는 이러한 구조를 채택하지 않습니다.
- 병렬 처리 방식: AES 최종 후보였던 알고리즘들 중 하나인 Rijndael은 파이스텔 구조 없이도 각 라운드마다 치환(substitution)과 순열(permutation)을 통해 전체 데이터 블록을 병렬로 처리합니다.
- 라운드 키 확장: 입력으로 받은 키는 44개의 32비트 워드(word) 배열 w[i]로 확장되며, 각 라운드마다 서로 다른 4개의 워드(128비트)가 라운드 키로 사용됩니다.
AES의 4가지 변환 단계
AES는 하나의 순열(permutation) 단계와 세 개의 치환(substitution) 단계로 구성됩니다.
- SubBytes(바이트 대체): S-박스(S-box)를 사용해 블록의 데이터를 바이트 단위로 치환합니다.
- ShiftRows(행 시프트): 행 단위로 데이터를 이동시키는 간단한 순열 연산입니다.
- MixColumns(열 혼합): GF(2⁸) 유한체 위의 산술 연산을 활용한 치환 과정입니다.
- AddRoundKey(라운드 키 추가): 현재 블록과 확장된 키의 일부를 비트별 XOR 연산으로 결합합니다.
암호화 및 복호화 과정
암호화와 복호화 모두 AddRoundKey 단계로 시작하여, 4개 단계를 모두 포함하는 9개 라운드를 거친 뒤, 마지막 10번째 라운드에서는 3개 단계만 수행하며 종료됩니다.
흥미로운 점은 AddRoundKey 단계만이 실제 키를 사용한다는 것입니다. 따라서 암호는 AddRoundKey 단계로 시작하고 끝나야 합니다. 만약 다른 단계가 시작이나 끝에 적용된다면, 해당 단계는 키 없이도 되돌릴 수 있으므로 아무런 보안성도 추가하지 못하게 됩니다.
AddRoundKey 단계 자체는 버남 암호(Vernam cipher)의 한 형태로, 단독으로는 위험하지 않습니다. 반면 나머지 세 단계는 혼돈(confusion), 확산(diffusion), 비선형성(non-linearity)을 제공하지만, 키를 요구하지 않기 때문에 이들만으로는 보안을 보장할 수 없습니다. 즉, 네 단계가 유기적으로 결합되어야만 AES의 강력한 보안성이 완성됩니다.