가변 크기 블록 암호 (Variable Size Block Cipher)

고급암호학수정일

가변 크기 블록 암호(variable size block cipher)는 동적으로 가변 크기의 블록으로 암호화를 지원하는 블록 암호입니다. 블록 크기는 일부 요소 크기(예: 바이트) 단위로만 변경될 수 있지만, 블록은 임의로 클 수 있습니다. 즉 메시지나 디스크 섹터 전체를 하나의 블록으로 보고, 그 길이 그대로 한 번에 암호화하는 방식입니다. 오늘날에는 흔히 넓은 블록 암호(wide-block cipher) 또는 길이 보존 암호화라는 이름으로 다룹니다.

고정 크기 블록 암호와의 차이

  • 일반 블록 암호: AES처럼 128비트 같은 고정 크기 블록만 처리합니다. 긴 데이터는 CBC나 CTR 같은 운용 모드로 블록을 이어서 처리하며, 이때 평문 한 비트를 바꾸면 해당 블록이나 그 뒤 블록에만 영향이 갑니다.
  • 가변 크기 블록 암호: 입력 전체가 하나의 블록입니다. 평문의 어느 비트를 바꾸더라도 암호문 전체가 예측할 수 없게 바뀝니다.

여러 개의 고정 크기를 고를 수 있는 암호와도 구별해야 합니다. 예를 들어 Rijndael은 128·192·256비트 블록을 지원하지만, 이는 몇 가지 정해진 크기 가운데 하나를 고르는 것일 뿐 임의 길이를 처리하는 가변 크기 블록 암호는 아닙니다.

왜 필요한가

  • 길이 보존: 패딩이나 별도의 초기화 벡터 없이 암호문이 평문과 같은 길이가 됩니다. 크기가 정해진 디스크 섹터나 파일 이름을 암호화할 때처럼 데이터가 늘어날 수 없는 경우에 중요합니다.
  • 전체 확산: 공격자가 암호문 일부를 바꾸면 복호화 결과 전체가 깨지므로, 특정 부분만 골라 조작하기 어렵습니다.
  • 트윅(tweak)과의 결합: 섹터 번호 같은 값을 트윅으로 넣으면, 같은 내용도 위치마다 다른 암호문이 됩니다.

실제 구성

  • EME: 할레비(Halevi)와 로가웨이(Rogaway)가 제안한, 블록 암호를 두 번 통과시켜 넓은 블록을 만드는 모드입니다.
  • Adiantum과 HCTR2: Adiantum은 Google이 AES 가속이 없는 저가 기기의 저장소 암호화를 위해 만든 방식(XChaCha12, AES, NH·Poly1305 해시 결합)이고, HCTR2는 AES 기반의 넓은 블록 모드입니다. 두 방식 모두 리눅스 커널의 파일 시스템 암호화(fscrypt)에서 쓸 수 있습니다.
  • AEZ: 임의 길이 입력을 하나의 블록처럼 처리하는 넓은 블록 구조 위에 인증 암호화를 만든 설계입니다.
  • Hasty Pudding Cipher: AES 공모에 제출된 암호로, 블록 크기를 비트 단위로 임의로 정할 수 있었습니다.

한계

  • 속도: 블록 전체를 두 번 이상 훑어야 하므로, 같은 데이터를 CTR 모드로 암호화하는 것보다 느립니다.
  • 결정성: 키와 트윅이 같으면 같은 평문은 같은 암호문이 되므로, 같은 내용이 반복된다는 사실은 드러날 수 있습니다.
  • 표준화: AES 같은 고정 크기 블록 암호만큼 널리 표준화되지 않아, 시스템 간 호환성을 따로 확인해야 합니다.

이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.