AES란?

Advanced Encryption Standard의 약자. 미국 NIST가 2001년에 FIPS 197로 표준화한 대칭 키 블록 암호로, 현재 가장 널리 사용된다. 블록 길이는 128비트, 키 길이는 128·192·256비트이며, 키 길이에 따라 라운드 횟수는 10·12·14회가 된다. 벨기에 연구자가 설계한 Rijndael을 바탕으로 한다. 긴 데이터의 암호화에는 GCM이나 CTR 등의 블록 암호 운용 모드와 조합하여 사용한다. 많은 CPU는 AES-NI 같은 전용 명령을 갖추고 있다.

일본어 명칭: AES

AES은(는) 암호 기술의 기초와 응용, 하드웨어 보안, 양자 컴퓨터의 하드웨어 등 4개 분야의 연습 문제 10개에 나와요.

분야: 암호 기술의 기초와 응용

라운드 처리

1라운드는 바이트별 비선형 치환(SubBytes), 행별 시프트(ShiftRows), 열별 혼합(MixColumns), 라운드 키와의 XOR(AddRoundKey)의 4가지 처리로 이루어집니다(마지막 라운드에서는 MixColumns를 생략합니다). 라운드 키는 원래 키로부터 키 스케줄로 만듭니다. 이를 반복함으로써 평문이나 키의 1비트 차이가 출력 전체로 퍼집니다.

안전성 기준

AES-128 키의 후보는 2¹²⁸개(약 3.4 × 10³⁸개)이며, 무차별 대입은 현실적이지 않습니다. 알려진 최선의 공격도 무차별 대입보다 아주 조금 빠를 뿐입니다. 양자 컴퓨터의 그로버 알고리즘을 고려하면 단순한 기준으로는 안전성의 비트 수가 절반이 되므로, 장기간의 안전성이 필요한 용도에서는 AES-256이 선택되기도 합니다.

구현 시 주의점

소프트웨어로 표를 참조하는 구현에서는 어느 위치를 읽었는지가 캐시 상태에 남아, 캐시를 이용한 사이드 채널 공격으로 키가 추측될 우려가 있습니다. AES-NI 등의 전용 명령이나 표를 사용하지 않는 상수 시간 구현을 사용하면 이 문제를 피할 수 있습니다. 또한 AES 자체가 안전하더라도 ECB 모드 사용이나 논스 재사용 등 사용법의 실수로 안전성이 손상됩니다.

도전해 보기: AES 관련 문제

현재 널리 쓰이는 블록 암호 AES의 블록 길이와 키 길이의 조합으로 올바른 것은?

  1. A블록 길이는 128비트, 키 길이는 128·192·256비트 중 하나
  2. B블록 길이는 64비트, 키 길이는 56비트
  3. C블록 길이도 키 길이도 128·192·256비트 중에서 조합하여 고를 수 있다
정답과 해설 보기

정답: A. 블록 길이는 128비트, 키 길이는 128·192·256비트 중 하나

AES는 미국 NIST가 2001년에 FIPS 197로 표준화한 블록 암호로, 블록 길이는 128비트로 고정되어 있고 키 길이는 128, 192, 256비트의 3종류입니다. 키 길이에 따라 라운드(변환의 반복) 횟수는 10, 12, 14회가 됩니다. 기반이 된 Rijndael은 블록 길이도 고를 수 있는 설계였지만, AES로 표준화된 것은 128비트 블록뿐입니다. 블록 길이 64비트·키 길이 56비트는 AES 이전의 표준이었던 DES의 값입니다.

이미지 데이터를 AES의 ECB 모드로 암호화했더니, 암호화한 후의 이미지에서도 원래 그림의 윤곽을 알아볼 수 있었다. 이 원인으로 올바른 것은?

  1. AAES의 키가 너무 짧아서 일부 블록이 암호화되지 않고 그대로 남았기 때문에
  2. BECB 모드에서는 블록마다 다른 키를 자동으로 만들므로, 그 키의 무늬가 암호화한 후의 이미지에 나타나기 때문에
  3. CECB 모드에서는 같은 평문 블록이 항상 같은 암호문 블록이 되므로, 같은 색 부분의 무늬가 남기 때문에
정답과 해설 보기

정답: C. ECB 모드에서는 같은 평문 블록이 항상 같은 암호문 블록이 되므로, 같은 색 부분의 무늬가 남기 때문에

ECB(전자 코드북) 모드는 각 블록을 같은 키로 각각 독립적으로 암호화하기만 하는 방식입니다. 그래서 평문 안에 같은 내용의 블록이 있으면 암호문에서도 같은 블록이 같은 위치에 나타납니다. 배경처럼 같은 색이 이어지는 이미지에서는 어디가 같은 색인지라는 정보가 남으며, 펭귄 이미지를 암호화한 예가 잘 알려져 있습니다. 이 때문에 일반 데이터의 암호화에는 ECB 모드를 사용하지 않고, 같은 평문으로부터도 매번 다른 암호문이 만들어지는 CBC 모드, CTR 모드, GCM 등을 사용합니다.

자주 묻는 질문

AES-256은 AES-128보다 2배 안전한가요?

무차별 대입의 수고로 비교하면 2배가 아니라 2¹²⁸배입니다. 다만 AES-128이라도 고전 컴퓨터로 무차별 대입하는 것은 현실적이지 않으므로, 많은 용도에서는 어느 쪽이든 충분합니다. AES-256은 양자 컴퓨터에 대한 여유를 원하는 경우나 규정으로 요구되는 경우에 선택됩니다. 처리량은 라운드 수에 거의 비례하며, AES-256은 AES-128의 약 1.4배(14 ÷ 10)입니다.

AES만으로 데이터를 안전하게 지킬 수 있나요?

AES는 128비트 블록 하나를 변환하는 부품으로, 그것만으로는 긴 데이터의 암호화도 변조 검출도 할 수 없습니다. 실제로는 GCM 같은 인증 암호화 모드로 사용하고, 논스를 올바르게 관리하며, 키를 안전하게 만들어 보관해야 합니다.

해설 속 AES

AES이(가) 나오는 문제 (10)

  1. 현재 널리 쓰이는 블록 암호 AES의 블록 길이와 키 길이의 조합으로 올바른 것은?
  2. 이미지 데이터를 AES의 ECB 모드로 암호화했더니, 암호화한 후의 이미지에서도 원래 그림의 윤곽을 알아볼 수 있었다. 이 원인으로 올바른 것은?
  3. AES를 CBC 모드로 사용할 때 초기화 벡터(IV)의 취급으로 적절한 것은?
  4. AES(블록 길이 16바이트)를 CBC 모드로 사용하고, 패딩에는 PKCS#7 방식을 사용한다. PKCS#7 방식에서는 부족한 바이트 수를 n이라 할 때 값이 n인 바이트를 n개 덧붙이며, 평문의 길이가 정확히 16의 배수일 때도 값이 16인 바이트를 16개 덧붙인다. 96바이트의 평문을 암호화했을 때 암호문의 길이(IV는 포함하지 않음)는?
  5. TLS 1.3의 암호 스위트 TLS_AES_128_GCM_SHA256이 지정하는 것의 조합으로 올바른 것은?
  6. CPU에 AES 암호 전용 명령(AES-NI 등)을 갖추는 이점으로, 속도 외에 꼽을 수 있는 것은 무엇입니까?
  7. 대규모 오류 내성 양자 컴퓨터가 실현되었을 때, 쇼어 알고리즘에 의해 안전성이 크게 손상될 것으로 생각되는 암호는?
  8. 대칭 키 암호의 특징으로 올바른 것은?
  9. 대칭 키 암호 중 블록 암호와 스트림 암호의 차이에 대한 설명으로 올바른 것은?
  10. 1 GiB = 2³⁰바이트, 1 EiB = 2⁶⁰바이트로 한다. 블록 길이가 64비트인 블록 암호(3DES 등)를 CBC 모드로 사용하여, 하나의 키로 대량의 데이터를 암호화한다. 암호문 블록을 무작위 64비트 값으로 간주할 때, 생일 역설에 의해 같은 암호문 블록 쌍이 나타날 확률을 무시할 수 없게 되는 데이터양의 기준은?

관련 용어

블록 암호 운용 모드(Block Cipher Mode of Operation) 인증 암호화(AEAD) 대칭 키 암호(Symmetric-key Cryptography) 논스(Nonce) TLS RSA 암호(RSA Cryptosystem) 디피-헬먼 키 교환(Diffie-Hellman Key Exchange) 해시 함수(Hash Function) HMAC 쇼어 알고리즘(Shor's Algorithm)

용어집으로 돌아가기