Skip to Content
독학사독학사 3단계정보보호04. 암호 시스템 개요와 대칭키 암호

이번 문서의 목표: 암호 시스템의 구성 요소·보안 목표를 정확히 말할 수 있고, 대칭키 암호의 블록·스트림 방식과 ECB·CBC·CTR 운용 모드의 차이(그리고 ECB가 왜 위험한지)를 직접 설명할 수 있다.

암호 시스템이란 무엇을 위한 것인가

정보보호의 출발점은 “허락받지 않은 사람이 정보를 읽거나 바꾸지 못하게 한다”는 목표다. 네트워크로 데이터를 보내는 순간, 그 데이터는 중간의 라우터·스위치·통신선을 거치며 도청(eavesdropping, 몰래 엿듣는 행위)될 위험에 노출된다. 데이터베이스에 저장된 데이터도 서버가 뚫리면 그대로 유출된다. 암호(cryptography)는 이 문제에 대한 수학적 해답이다 — 원래 내용을 알아볼 수 없는 형태로 바꿔 두었다가, 정당한 사람만 원래대로 되돌릴 수 있게 하는 기술이다.

쉽게 말하면: 암호는 “열쇠를 가진 사람만 읽을 수 있게 내용을 잠그는 것”이다.

암호 시스템의 구성 요소

암호 시스템(cryptosystem)은 다음 다섯 가지 요소로 이루어진다.

구성 요소
평문(plaintext)암호화하기 전의 원래 메시지”회의는 3시”
암호문(ciphertext)암호화 후 알아볼 수 없게 변형된 메시지”a3F9…”
암호화 알고리즘(encryption algorithm)평문을 암호문으로 바꾸는 규칙AES, RSA
복호화 알고리즘(decryption algorithm)암호문을 평문으로 되돌리는 규칙AES 역연산
키(key)알고리즘에 입력해 결과를 결정하는 비밀 값128비트 이진수

여기서 핵심은 알고리즘은 공개되어도 안전해야 한다는 원칙이다. 이를 케르크호프스의 원리(Kerckhoffs’s principle)라고 부른다 — 암호 시스템의 안전성은 알고리즘을 숨기는 데 있는 것이 아니라 키를 안전하게 지키는 데 있어야 한다는 설계 원칙이다. AES, RSA 같은 알고리즘은 전 세계에 논문으로 공개되어 있고, 그럼에도 안전한 이유는 키를 모르면 아무리 알고리즘을 알아도 현실적인 시간 안에 풀 수 없기 때문이다. 반대로 “알고리즘 자체를 비밀로 해서 안전성을 확보하겠다”는 접근을 security through obscurity(은폐를 통한 보안)라고 부르는데, 이는 알고리즘이 유출되는 순간(리버스 엔지니어링, 내부자 유출) 전체 시스템이 무너지므로 정보보호 설계에서 지양해야 할 방식으로 평가된다.

암호가 지키는 보안 목표

정보보호의 3대 목표는 CIA로 요약된다. 기밀성(Confidentiality, 허락된 사람만 정보를 볼 수 있음), 무결성(Integrity, 정보가 허락 없이 변경되지 않았음을 보장), 가용성(Availability, 필요할 때 정보·서비스에 접근할 수 있음)이다. 암호 기술은 이 중 기밀성을 직접 담당하는 도구이며, 뒤에 07편에서 다룰 해시·MAC과 결합하면 무결성부인방지(non-repudiation, 나중에 “내가 안 보냈다”고 발뺌하지 못하게 막는 성질)까지 제공할 수 있다. 이 관계는 08편까지 이어지며 완성되므로, 지금은 “암호 = 기밀성의 핵심 도구”라는 위치를 기억해 두자.

대칭키 암호와 공개키 암호 — 큰 그림

암호는 암호화와 복호화에 같은 키를 쓰는지, 다른 키를 쓰는지에 따라 크게 두 갈래로 나뉜다. 이 구분은 이후 06편(공개키·전자서명·키교환)과 07·08편 전체를 관통하는 축이므로, 05편에서 먼저 전체 지도를 그려 둔다.

쉽게 말하면: 대칭키는 “같은 열쇠로 잠그고 연다”, 공개키는 “잠그는 열쇠와 여는 열쇠가 다르다”.

비교 항목대칭키 암호(Symmetric-key)공개키 암호(Asymmetric-key)
사용하는 키암호화·복호화에 동일한 키 1개(비밀키)암호화·복호화에 서로 다른 키 2개(공개키·개인키)
속도빠르다(연산량이 적어 대용량 데이터에 적합)느리다(모듈러 지수 연산 등으로 대칭키보다 수백–수천 배 느림)
키 개수(N명이 서로 통신 시)N × (N-1) / 2개 필요(참여자가 늘수록 급증)사용자당 키쌍 1개(공개키는 공개, 개인키만 보관)
키 분배 문제사전에 안전한 채널로 키를 공유해야 함 — 이것이 대칭키의 근본적 약점공개키는 공개해도 무방 — 키 분배 문제가 상대적으로 가볍다
대표 알고리즘AES, DES, 3DES, ChaCha20RSA, ECC(타원곡선 암호), ElGamal
주 용도대용량 데이터 암호화(파일, 통신 세션)키 교환, 전자서명, 신원 인증

표에서 가장 시험에 자주 나오는 함정은 키 분배 문제다. 대칭키는 “같은 키를 공유해야 통신이 성립”하는데, 문제는 그 키 자체를 어떻게 안전하게 상대방에게 전달할 것인가이다. 이메일로 키를 보내면 이메일이 도청될 수 있고, 전화로 불러주면 도청·소셜 엔지니어링 위험이 있다. 참여자가 N명이면 모든 쌍마다 별도의 키가 필요해 N(N-1)/2개의 키를 관리해야 하므로(예: 100명이면 4,950개), 규모가 커질수록 관리가 사실상 불가능해진다. 이 문제를 해결하는 것이 06편에서 다루는 공개키 암호와 키교환 프로토콜이다 — 그래서 실무에서는 “키 교환은 공개키로, 실제 대용량 데이터 암호화는 대칭키로” 하는 하이브리드 암호 시스템(hybrid cryptosystem)을 표준으로 쓴다. TLS(08편)가 정확히 이 구조다.

대칭키 암호: 블록 암호와 스트림 암호

대칭키 암호는 평문을 처리하는 단위에 따라 두 가지로 나뉜다.

  • 블록 암호(block cipher): 평문을 고정된 크기(예: 128비트)의 블록으로 나누어 블록 단위로 암호화한다. 대표: AES(Advanced Encryption Standard, 고급 암호화 표준. 블록 크기 128비트, 키 길이 128·192·256비트 중 선택), DES(Data Encryption Standard, 옛 표준. 키 길이 56비트로 현재는 무차별 대입에 취약해 사용 중단됨), 3DES(DES를 세 번 반복해 키 길이를 늘린 과도기 방식).
  • 스트림 암호(stream cipher): 평문을 비트 또는 바이트 단위로 이어서(스트림) 실시간으로 암호화한다. 키로부터 생성한 의사난수 수열(키스트림, keystream)을 평문과 XOR(배타적 논리합, 두 비트가 다르면 1, 같으면 0을 내는 연산)해 암호문을 만든다. 대표: ChaCha20, RC4(현재는 취약점이 발견되어 사용 중단됨).

쉽게 말하면: 블록 암호는 “문장을 일정 길이로 잘라 한 덩어리씩 암호화”, 스트림 암호는 “글자를 하나씩 흘려보내며 그때그때 암호화”하는 방식이다.

블록 암호는 평문 길이가 블록 크기의 배수가 아니면 마지막 블록에 패딩(padding, 빈 자리를 정해진 규칙의 데이터로 채우는 것)을 채워야 한다. 반면 스트림 암호는 길이에 제약이 없어 실시간 스트리밍(음성 통화 등)에 적합하다는 실무적 차이가 있다.

실제 예시로 보는 블록 암호의 동작

AES의 내부 라운드 연산은 복잡하지만, 개념만 아주 단순화한 예로 이해해 보자. 8비트짜리 아주 작은 “장난감 블록 암호”를 가정한다. 평문 블록 01100101(8비트)을 8비트 키 10011010과 XOR한다고 하자.

0110010110011010=1111111101100101 \oplus 10011010 = 11111111

XOR은 자리마다 같으면 0, 다르면 1이 되는 연산이므로, 첫 자리는 0과 1이 달라 1, 둘째 자리는 1과 0이 달라 1, 이런 식으로 모든 자리가 서로 달라 결과가 전부 1이 나온 것이다. 실제 AES는 이런 XOR 연산에 더해 바이트 치환(S-box), 행 이동, 열 섞기를 10~14라운드 반복해 안전성을 높이지만, “키와 평문을 섞어 알아볼 수 없게 만든다”는 기본 아이디어는 이 장난감 예시와 같다. 복호화는 같은 키로 다시 XOR하면 원래 평문이 그대로 복원된다(XOR은 같은 값으로 두 번 연산하면 원래 값으로 돌아오는 성질이 있기 때문이다).

1111111110011010=0110010111111111 \oplus 10011010 = 01100101

블록 암호 운용 모드: ECB·CBC·CTR

평문이 여러 블록으로 이루어질 때, 각 블록을 어떻게 연결해 암호화할지 정하는 규칙을 운용 모드(mode of operation)라고 한다. 같은 AES 알고리즘이라도 운용 모드에 따라 안전성이 크게 달라지므로, 이 부분은 독학사 시험에서 “왜 ECB가 위험한가”를 직접 서술하게 만드는 대표적인 함정 주제다.

쉽게 말하면: 운용 모드는 “블록들을 이어 붙이는 방법”이고, 이어 붙이는 방법이 나쁘면 암호화를 해도 원본의 패턴이 그대로 드러난다.

ECB(Electronic Codebook, 전자 코드북 모드)

가장 단순한 모드로, 모든 블록을 서로 독립적으로, 같은 키로만 암호화한다.

Ci=EK(Pi)C_i = E_K(P_i)
  • CiC_i: ii번째 암호문 블록
  • EKE_K: 키 KK를 사용한 암호화 함수
  • PiP_i: ii번째 평문 블록

이 식이 보여주듯, 같은 평문 블록은 항상 같은 암호문 블록으로 변환된다. 이것이 ECB의 치명적 결함이다. 예를 들어 이미지 파일을 ECB로 암호화하면, 원본 이미지에서 같은 색이 반복되는 넓은 영역(배경색 등)이 암호화 후에도 같은 암호문 패턴으로 반복되어, 암호문만 보고도 원본 이미지의 윤곽이 그대로 드러나는 사례가 실제로 보고되어 있다. 즉 ECB는 “암호화는 했지만 원본의 구조적 패턴을 감추지 못하는” 모드이며, 이 때문에 현재는 보안이 중요한 용도에는 사용이 권장되지 않는다.

CBC(Cipher Block Chaining, 암호 블록 연쇄 모드)

CBC는 이 문제를 해결하기 위해 이전 블록의 암호문을 다음 블록의 평문과 XOR한 뒤 암호화한다.

Ci=EK(PiCi1)C_i = E_K(P_i \oplus C_{i-1})
  • Ci1C_{i-1}: 바로 앞 블록의 암호문(첫 블록은 암호문이 없으므로 대신 무작위로 생성한 초기화 벡터(IV, Initialization Vector)를 사용)

같은 평문 블록이라도 앞 블록의 암호문 값이 다르면 결과가 달라지므로, ECB의 패턴 노출 문제가 해결된다. 다만 CBC는 블록을 순서대로 처리해야 하므로(이전 블록의 결과가 필요) 암호화 과정을 병렬로 처리하기 어렵다는 단점이 있다. 복호화는 역으로 Pi=DK(Ci)Ci1P_i = D_K(C_i) \oplus C_{i-1}이며, 복호화는 각 블록의 CiC_i만 있으면 계산 가능해 병렬화가 가능하다는 점도 함께 알아 둘 만한 시험 포인트다.

CTR(Counter, 카운터 모드)

CTR은 블록 암호를 스트림 암호처럼 동작하게 만드는 방식이다. 평문을 직접 암호화하는 대신, 카운터 값(매 블록마다 1씩 증가하는 값)을 암호화해 키스트림을 만들고, 이를 평문과 XOR한다.

Ci=PiEK(Noncei)C_i = P_i \oplus E_K(\text{Nonce} \parallel i)
  • Nonce\text{Nonce}: 매번 통신마다 달라지는 임의의 값(재사용 금지)
  • ii: 블록 순서를 나타내는 카운터
  • \parallel: 두 값을 이어 붙이는(연접) 표기

CTR의 장점은 각 블록의 키스트림이 카운터 값만 알면 독립적으로 계산 가능하다는 것이다. 따라서 CBC와 달리 암호화·복호화 모두 병렬 처리가 가능해 속도가 빠르고, 최신 프로토콜(TLS 1.3 등)에서 널리 쓰인다.

세 모드 비교

항목ECBCBCCTR
블록 간 연결없음(독립적)이전 암호문과 XOR카운터를 암호화해 키스트림 생성
같은 평문 블록 → 같은 암호문?그렇다(패턴 노출 위험)아니다(IV·이전 블록에 의존)아니다(카운터가 매번 다름)
병렬 처리가능암호화 불가·복호화 가능암호화·복호화 모두 가능
초기값 필요 여부불필요IV 필요Nonce·카운터 필요
실무 권장 여부권장하지 않음(패턴 노출)널리 사용(단, 병렬화 제약)널리 사용(고속 통신에 적합)

시험에서는 “ECB의 문제점을 설명하시오” 또는 “그림에서 원본 이미지의 윤곽이 암호화 후에도 드러나는 이유”를 묻는 유형으로 자주 출제된다. 핵심 답안 포인트는 “블록 간 의존성이 없어 동일 평문이 동일 암호문으로 매핑되기 때문”이라는 한 문장이다.

자주 틀리는 점

  • “암호화하면 무조건 안전하다”는 생각 — 모드 선택이 잘못되면(ECB) 암호화를 해도 패턴이 유출된다.
  • 대칭키가 “약한 암호”라고 오해하는 경우 — 대칭키는 키 길이만 충분하면(AES-256 등) 공개키보다 오히려 계산적으로 더 강력하다. 문제는 안전성이 아니라 키 분배다.
  • CBC의 IV를 “비밀로 해야 한다”고 착각하는 경우 — IV는 비밀일 필요는 없고(암호문과 함께 보내도 됨) 예측 불가능해야 하고 재사용하면 안 된다는 점이 핵심이다.
  • 스트림 암호에서 같은 키스트림을 두 번 사용하면(키·논스 재사용) 두 암호문을 XOR해 평문 정보가 노출될 수 있다는 점 — 이는 CTR 모드에서 Nonce를 반드시 매번 바꿔야 하는 이유와 같은 원리다.

핵심 정리

  • 암호 시스템은 평문·암호문·암호화/복호화 알고리즘·키로 구성되며, 안전성은 알고리즘이 아닌 키의 비밀성에 있다(케르크호프스의 원리).
  • 대칭키는 빠르지만 키 분배 문제가 있고, 공개키는 느리지만 키 분배가 쉽다 — 실무는 이 둘을 결합한 하이브리드 방식을 쓴다.
  • 블록 암호(AES 등)는 고정 크기 블록 단위로, 스트림 암호(ChaCha20 등)는 비트·바이트 단위로 암호화한다.
  • ECB는 블록 간 연결이 없어 동일 평문이 동일 암호문으로 매핑되므로 패턴이 노출된다. CBC는 이전 블록과 XOR로 연결하고, CTR은 카운터를 암호화해 스트림처럼 사용한다.

마무리 복습

문제 14지선다
암호 시스템의 안전성에 대한 케르크호프스의 원리(Kerckhoffs's principle)를 가장 올바르게 설명한 것은?
문제 24지선다
대칭키 암호와 공개키 암호를 비교한 설명으로 옳지 않은 것은?
문제 34지선다
블록 암호와 스트림 암호의 차이를 설명한 것으로 옳은 것은?
문제 44지선다
ECB(Electronic Codebook) 모드의 가장 큰 보안 취약점으로 옳은 것은?
문제 54지선다
CBC(Cipher Block Chaining) 모드에 대한 설명으로 옳지 않은 것은?
문제 64지선다
CTR(Counter) 모드가 CBC 모드와 비교해 갖는 특징으로 옳은 것은?

참고 자료

Last updated on