공시 한 판

정보보호론 개념서 · 대칭키 암호

블록 암호 운용 모드(CBC 등)

설명 영상 블록 암호 운용 모드 · 2:38

핵심 정리

블록 암호는 기밀성 있는 정보를 정해진 블록 단위로 암호화하는 대칭키 암호 시스템이다. 암호화할 정보가 블록 길이보다 길면 블록을 어떻게 연결할지 정하는 운용 모드가 필요하다. 대표적인 운용 모드는 ECB, CBC, OFB, CFB, CTR이며, 모드마다 블록 연결 방식과 IV 사용 여부, 병렬 처리 가능 여부가 다르다. 시험에서는 이러한 차이를 가르는 선지가 출제된다.

CBC는 이전 암호 블록을 다음 블록의 암호화에 연결하고 초기화 벡터 IV로 시작하는 운용 모드다. CBC는 1976년 IBM에서 개발되었으며, 지금도 널리 쓰이는 운용 모드 가운데 하나다. 블록 연결 구조를 먼저 이해하면 모드별 차이를 정리하기 쉽다.

운용 모드는 블록 암호 자체의 안전성을 바꾸지 않으며, 블록을 연결하는 방식에 따라 드러나는 약점이 달라진다. 같은 블록 암호를 쓰더라도 모드를 잘못 고르면 평문의 패턴이 암호문에 드러나거나 일부 블록의 영향이 다른 블록으로 번질 수 있다. 따라서 모드를 평가할 때는 IV 사용 여부와 병렬 처리 가능 여부를 함께 살펴본다.

운용 모드는 암호화에만 쓰이지 않는다. 블록 암호의 CBC 모드는 메시지 인증 코드를 만드는 데에도 쓰인다. 따라서 CBC를 보면 암호화 모드인지 MAC 계산 방식인지를 먼저 구분해야 한다.

자세히

CBC 복호화 구조

CBC 복호화는 각 암호문 블록을 복호화한 뒤 이전 암호문 블록(첫 블록은 IV)과 XOR하여 평문을 얻는다. 암호문 블록을 먼저 복호화하고 그 결과를 이전 암호문 블록과 XOR하므로, 복호화는 암호화와 반대 방향으로 진행된다. 첫 블록에는 이전 암호문 블록이 없으므로 IV와 XOR한다.

암호화에서는 현재 평문 블록과 직전 암호 블록을 XOR한 값을 블록 암호의 입력으로 쓴다. 두 식을 나란히 보면 암호화에서는 앞 블록의 결과가 다음 블록의 입력이 되고, 복호화에서는 이미 주어진 암호문 블록끼리 XOR한다는 차이가 드러난다. 이 차이가 병렬 처리 가능 여부를 가른다.

OFB 키스트림과 오류 전파

OFB는 초기 벡터에 블록 암호를 반복 적용해 키스트림을 만들고, 이를 평문과 XOR하는 방식이다. 암호화 출력이 다음 블록의 입력으로 이어지며, 이 출력이 키스트림이 된다.

OFB가 해결하는 문제를 살펴보면 모드 간 차이가 분명해진다. 같은 평문 블록이 같은 암호문 블록이 되는 문제와 암호문 오류가 다음 블록 복호화에 전파되는 문제를 모두 해결한 운용 모드는 OFB다. 이는 OFB가 ECB와 CBC의 두 약점을 모두 피한다는 뜻이다. OFB에서는 암호문 블록에 비트 오류가 생겨도 그 오류가 다른 블록의 평문 복호화 결과에 영향을 주지 않는다. 오류가 어디까지 번지는지는 오류 전파 범위로 따로 외워 두는 것이 안전하다. 오류 전파 성질과 키스트림 구조를 나누어 정리하면 보기를 판단하기 쉽다.

CTR 구조와 암호화 함수

CTR 모드는 카운터를 암호화하고 평문 블록과 XOR하여 암호 블록을 생성한다. 카운터를 바꿔 가며 같은 암호화 함수를 쓰므로 블록마다 키스트림 입력이 달라진다.

CTR은 암호화 함수만 사용하는 모드다. 따라서 복호화에도 같은 함수를 재사용하며, 암호화와 복호화가 같은 구조로 이루어진다. 처리 속도는 병렬로 처리할 수 있는 블록의 수에 따라 결정된다. CBC 복호화에는 블록 암호의 복호화 함수가 필요하지만, CTR은 복호화 과정에서 역함수를 따로 준비할 필요가 없다.

암호·복호 함수 요구와 CFB

블록 암호 운용 모드 가운데 암호화에는 E를, 복호화에는 E와 다른 복호화 함수 D를 필요로 하는 모드는 ECB와 CBC다. 따라서 CFB, OFB, CTR은 복호화에도 암호화 함수만 있으면 된다. ECB와 CBC는 복호화 함수를 따로 사용하고, 나머지 모드는 암호화 함수를 재사용한다는 점을 기준으로 비교할 수 있다.

이어지는 내용

로그인하면 하루 5페이지까지 무료로 전체를 읽을 수 있습니다.

앱에서 이 절 읽기