[암호] ARIA 블록 암호 이해하기

ARIA는 국내에서 개발되어 국가표준으로 제정된 범용 블록 암호다. RFC 5794에 알고리즘이 공개되어 있으며, 128비트 블록과 128·192·256비트 키를 사용한다.

블록과 키 크기

키 크기 라운드 수 블록 크기
128비트 12 128비트
192비트 14 128비트
256비트 16 128비트

키가 길어져도 한 번에 처리하는 블록 크기는 128비트로 동일하다. 알고리즘 내부는 키 스케줄, 치환 계층, 확산 계층과 라운드 키 결합으로 구성된다.

알고리즘과 운용 모드는 다르다

ARIA라는 이름만으로 실제 암호화 구성이 완성되지는 않는다. CBC, CTR, GCM 같은 운용 모드, IV 또는 nonce, 패딩, 인증 태그 처리까지 함께 정해야 한다.

  • CBC는 일반적으로 블록 단위 패딩이 필요하고 별도의 무결성 보호가 필요하다.
  • CTR은 패딩이 필요 없지만 nonce를 같은 키로 재사용하면 안 된다.
  • GCM은 암호화와 인증을 함께 제공하지만 nonce의 유일성을 반드시 지켜야 한다.

프로토콜이 허용한다면 인증 암호 모드를 우선 검토한다. 단순히 ARIA/CBC/PKCS7으로 암호화한 값만 전송하면 변조를 탐지할 수 없다.

직접 구현하지 말아야 하는 이유

RFC만 보고 Objective-C로 알고리즘을 직접 옮기는 일은 학습에는 도움이 될 수 있지만 제품 코드에는 적합하지 않다. 테스트 벡터를 통과해도 타이밍 누출, 키 메모리 관리, 운용 모드의 nonce 재사용 같은 구현 취약점이 남을 수 있다. 제품에서는 검증과 유지보수가 이뤄지는 암호 라이브러리나 플랫폼 제공 모듈을 사용해야 한다.

구현체를 평가할 때는 다음을 확인한다.

  • 필요한 모드와 패딩을 정확히 지원하는가
  • RFC 5794의 공식 테스트 벡터를 통과하는가
  • 키와 IV 길이를 잘못 전달했을 때 명시적으로 실패하는가
  • 인증 태그 검증 전에 평문을 사용하지 않는가
  • 암호 모듈의 보안 검증과 업데이트 이력이 있는가

공식 테스트 벡터

RFC 5794에는 다음 128비트 키 예제가 포함되어 있다.

Key:        000102030405060708090a0b0c0d0e0f
Plaintext:  00112233445566778899aabbccddeeff
Ciphertext: d718fbd6ab644c739da95f3be6451778

이 값은 ARIA 단일 블록 알고리즘을 검증하기 위한 것이며, CBC나 GCM 같은 전체 프로토콜의 안전성을 보장하는 테스트는 아니다.

참고

댓글남기기