🔐 암호화 — 대칭키 · 비대칭키 · AES-256
🛡️ 정보보안 3대 요소 (CIA)
| 요소 | 의미 | 깨지면 |
|---|---|---|
| 기밀성 Confidentiality | 인가된 사람만 정보를 볼 수 있음 | 도청 · 유출 |
| 무결성 Integrity | 인가된 사람만 수정 가능하고, 전송 중 변조되지 않음 기출 2회 | 위조 · 변조 |
| 가용성 Availability | 필요할 때 언제든 사용 가능 | 서비스 중단 · DDoS |
여기에 인증(Authentication) 과 부인방지(Non-repudiation) 를 더해 5요소로 보기도 한다.
🔑 대칭키 vs 비대칭키
| 구분 | 대칭키 (비밀키) | 비대칭키 (공개키) |
|---|---|---|
| 키 | 암호화·복호화에 같은 키 | 암호화·복호화에 다른 키 (공개키 / 개인키) |
| 속도 | 빠름 대용량 데이터에 적합 | 느림 (수백~수천 배) |
| 키 배송 | 문제 있음 — 키를 안전하게 전달해야 함 | 해결 — 공개키는 공개해도 됨 |
| 필요한 키 개수 n명이 통신할 때 | n(n−1)2 개 10명 → 45개 | 2n 개 10명 → 20개 |
| 대표 알고리즘 | AES · DES · 3DES · IDEA SEED · ARIA · RC4 | RSA · ECC · DSA ElGamal · Diffie-Hellman |
| 주 용도 | 실제 데이터 암호화 | 키 교환 · 전자서명 · 인증 |
⚠ 기출 — "암호화·복호화 종류가 다른 것은?" → RSA.
IDEA · DES · AES는 모두 대칭키, RSA만 비대칭키 다.
실제로는 둘을 섞어 쓴다 (하이브리드) — HTTPS/TLS는 비대칭키로 세션키를 안전하게 주고받은 뒤,
실제 데이터는 빠른 대칭키(AES) 로 암호화한다. 비대칭의 안전성과 대칭의 속도를 모두 취하는 방식.
🔁 동작 방식 — 버튼을 눌러 흐름을 비교해 보세요
🎯 어느 키로 잠그느냐에 따라 목적이 달라진다 — 시험 최다 출제
| 암호화에 쓴 키 | 복호화할 수 있는 키 | 얻는 것 | 의미 |
|---|---|---|---|
| 받는 사람의 공개키 | 받는 사람의 개인키 | 기밀성 | 그 사람만 열 수 있다 → 비밀 전송 기출 |
| 보내는 사람의 개인키 | 보내는 사람의 공개키 = 누구나 열 수 있음 |
인증 · 부인방지 · 무결성 | 그 사람이 보낸 게 증명된다 → 전자서명 |
| ① 내 개인키로 서명 → ② 상대 공개키로 암호화 | 기밀성 + 부인방지 | 둘 다 필요할 때. 서명 먼저, 암호화 나중 기출 | |
💡 헷갈리지 않는 법 — "잠그는 키의 짝만 열 수 있다" 는 원칙 하나만 기억하면 된다.
· 비밀로 보내고 싶다 → 받는 사람만 열 수 있어야 하니 받는 사람의 공개키로 잠근다
· 내가 보냈다고 증명하고 싶다 → 나만 잠글 수 있어야 하니 내 개인키로 잠근다
· 비밀로 보내고 싶다 → 받는 사람만 열 수 있어야 하니 받는 사람의 공개키로 잠근다
· 내가 보냈다고 증명하고 싶다 → 나만 잠글 수 있어야 하니 내 개인키로 잠근다
🧮 필요한 키 개수 계산기
🔑 대칭키 — 블록 암호 vs 스트림 암호
| 구분 | 블록 암호 | 스트림 암호 |
|---|---|---|
| 단위 | 일정 크기 블록 단위 (64 · 128비트) | 비트 / 바이트 단위 |
| 방식 | 치환·전치를 반복(라운드) | 키 스트림을 만들어 평문과 XOR |
| 속도 | 보통 | 매우 빠름 |
| 예 | AES · DES · 3DES · IDEA SEED · ARIA | RC4 · A5/1 · LFSR 기반 |
| 주 용도 | 파일 · 데이터 저장 암호화 | 무선 통신 · 실시간 스트리밍 |
🔐 비대칭키 알고리즘 4종
| 알고리즘 | 수학적 근거 | 암호화 | 전자서명 | 키 교환 | 특징 |
|---|---|---|---|---|---|
| RSA | 소인수분해의 어려움 | O | O | O | 가장 널리 쓰임. 이름은 설계자 3인(Rivest·Shamir·Adleman)의 머리글자 |
| ECC | 타원곡선 이산대수 | O | O | O | 짧은 키로 같은 안전성 → 모바일 · IoT · 스마트카드에 유리 |
| Diffie-Hellman | 이산대수 | X | X | O | 키 교환 전용 — 안전하지 않은 경로로 공통 비밀키를 만들어 내는 최초의 방식 |
| DSA | 이산대수 | X | O | X | 전자서명 전용 표준 (미국 DSS) |
⚠ 자주 나오는 함정 — Diffie-Hellman은 "키 교환" 이지 암호화 알고리즘이 아니고,
DSA는 "전자서명" 전용이라 암호화에 못 쓴다. 셋 다 되는 것은 RSA와 ECC 뿐이다.
📏 같은 안전성을 내려면 키가 얼마나 필요한가
비대칭키는 대칭키보다 훨씬 긴 키 가 있어야 같은 수준의 안전성을 낸다.
그래서 대칭키 128비트(AES-128)와 맞먹으려면 RSA는 3072비트 가 필요하다.
| 대칭키 (AES) | RSA | ECC | 비고 |
|---|---|---|---|
| 80비트 | 1,024 | 160 | 현재 부적합 |
| 112비트 | 2,048 | 224 | 현재 최소 권장 |
| 128비트 (AES-128) | 3,072 | 256 | 표준 권장 |
| 192비트 | 7,680 | 384 | 상위 등급 |
| 256비트 (AES-256) | 15,360 | 512 | 최고 등급 — RSA는 사실상 비현실적 |
💡 ECC가 뜨는 이유 — 같은 128비트 안전성에 RSA는 3,072비트가 필요한데 ECC는 256비트면 된다.
키가 1/12 로 짧아 연산량·전력·저장공간이 적게 들어 모바일과 IoT 에 적합하다.
⭐ AES — Advanced Encryption Standard
AES 는 노후화된 DES를 대체하기 위해 미국 NIST가 공모해 2001년 표준(FIPS 197) 으로 채택한 대칭키 블록 암호.
원래 알고리즘 이름은 Rijndael(라인달) 로, 벨기에의 Joan Daemen과 Vincent Rijmen이 설계했다.
현재 전 세계에서 사실상 표준 으로 쓰인다.
| 항목 | 내용 |
|---|---|
| 블록 크기 | 128비트 (16바이트) 고정 — 키 길이와 무관하게 항상 128비트 |
| 키 길이 | 128 / 192 / 256 비트 세 가지 |
| 라운드 수 | 10 / 12 / 14 회 (키 길이에 따라) |
| 구조 | SPN (Substitution-Permutation Network) DES는 Feistel 구조 — 자주 비교 출제 |
| 상태(State) | 4 × 4 바이트 행렬로 데이터를 놓고 변환 |
| 표준 | NIST FIPS 197 (2001년) |
🧮 키 길이별 비교 — 버튼을 눌러 확인해 보세요
🔄 한 라운드에서 일어나는 일 — 4단계
① SubBytes
바이트 치환
S-box 표를 보고 각 바이트를 다른 값으로 바꾼다
비선형성 확보
② ShiftRows
행 이동
2·3·4행을 각각 1·2·3칸 왼쪽으로 순환 이동
확산(Diffusion)
③ MixColumns
열 혼합
각 열을 행렬 연산으로 섞는다
마지막 라운드에서는 생략
④ AddRoundKey
라운드 키 XOR
키 스케줄로 만든 라운드 키와 XOR
실제 비밀이 개입하는 단계
💡 암기 — 치환 → 행 이동 → 열 섞기 → 키 XOR 을 라운드 수만큼 반복한다.
마지막 라운드에서만 MixColumns를 생략하는 것이 포인트.
라운드 키는 키 스케줄로 (라운드 수 + 1)개 만들어진다 → AES-256이면 15개.
⚙️ 블록 암호 운영 모드
AES는 128비트씩 만 암호화한다. 그보다 긴 데이터를 어떻게 이어 붙일지 정한 것이 운영 모드 다.
같은 AES-256이라도 모드를 잘못 고르면 안전하지 않다.
| 모드 | 방식 | 특징 | 평가 |
|---|---|---|---|
| ECB Electronic Codebook | 블록마다 독립적으로 암호화 | 같은 평문 블록 → 같은 암호문 → 원본 패턴이 그대로 드러남 | 사용 금지 |
| CBC Cipher Block Chaining | 앞 블록 암호문과 XOR 후 암호화. IV 필요 | 패턴 노출 없음. 순차 처리라 병렬 불가 | 널리 쓰임 |
| CTR Counter | 카운터를 암호화해 평문과 XOR | 병렬 처리 가능, 스트림처럼 동작, 길이 제약 없음 | 우수 |
| GCM Galois/Counter | CTR + 인증 태그(GMAC) | 기밀성 + 무결성 + 인증을 동시에 제공. TLS 1.3 표준 | 현재 권장 |
| CFB / OFB | 블록 암호를 스트림처럼 사용 | 블록 단위로 맞출 필요 없음 | 제한적 |
⚠ ECB를 쓰면 안 되는 이유 — 같은 평문이 항상 같은 암호문이 되므로,
이미지를 ECB로 암호화하면 원본 윤곽이 그대로 보인다. 실무·시험 모두 "ECB는 안전하지 않다"가 정답.
📉 DES → 3DES → AES
| 알고리즘 | 키 길이 | 블록 | 구조 | 상태 |
|---|---|---|---|---|
| DES (1977) | 56비트 실제 키 56 / 표기 64 | 64비트 | Feistel 16라운드 | 폐기 — 전수조사로 해독 가능 |
| 3DES | 112 / 168비트 | 64비트 | Feistel DES 3회 | 느림 — 과도기 대안 |
| AES (2001) | 128 / 192 / 256 | 128비트 | SPN 10/12/14라운드 | 현재 표준 |
🇰🇷 국산 암호 알고리즘
| 알고리즘 | 블록 / 키 | 특징 |
|---|---|---|
| SEED | 블록 128 / 키 128 | KISA 개발. 국내 금융·공공에서 오래 사용된 국가 표준 |
| ARIA | 블록 128 / 키 128·192·256 | 국가보안기술연구소. AES와 같은 파라미터, SPN 구조. 국가 표준(KS) |
| HIGHT | 블록 64 / 키 128 | 경량 암호 — RFID·센서 등 저사양 기기용 |
| LEA | 블록 128 / 키 128·192·256 | 고속 경량 암호. 모바일·IoT 환경 |
✍ 해시 함수와 전자서명
| 해시 | 출력 길이 | 상태 |
|---|---|---|
| MD5 | 128비트 | 충돌 발견 — 사용 금지 |
| SHA-1 | 160비트 | 충돌 발견 — 폐기 |
| SHA-256 | 256비트 | 현재 표준 (SHA-2 계열) |
| SHA-3 | 가변 | 차세대 표준 |
해시는 단방향 — 복호화가 불가능하다. 무결성 검증과 비밀번호 저장에 쓴다.
암호화(양방향)와 혼동하지 말 것.
📖 기출 2022-1회 — A가 B에게 전자서명 + 암호화해서 보낼 때 순서는?
① 서명 : A의 비밀키 로 서명 → 누가 보냈는지 증명(부인방지)
② 암호화 : B의 공개키 로 암호화 → B만 열 수 있음(기밀성)
정답 : A의 비밀키 → B의 공개키
① 서명 : A의 비밀키 로 서명 → 누가 보냈는지 증명(부인방지)
② 암호화 : B의 공개키 로 암호화 → B만 열 수 있음(기밀성)
정답 : A의 비밀키 → B의 공개키
키 선택 한 줄 정리
• 상대의 공개키로 암호화 → 기밀성 (상대만 열 수 있다) 기출
• 내 개인키로 암호화(서명) → 부인방지 · 인증 (내가 보낸 게 증명된다)
• 상대의 공개키로 암호화 → 기밀성 (상대만 열 수 있다) 기출
• 내 개인키로 암호화(서명) → 부인방지 · 인증 (내가 보낸 게 증명된다)
📝 시험 포인트
• AES = 대칭키, RSA = 비대칭키 (DES · 3DES · IDEA · SEED · ARIA도 대칭키)
• AES 블록은 항상 128비트, 키만 128/192/256으로 달라진다
• 키 길이별 라운드 = 10 / 12 / 14 — AES-256은 14라운드
• AES는 SPN 구조, DES는 Feistel 구조
• 마지막 라운드는 MixColumns 생략
• ECB 모드는 사용 금지, 현재 권장은 GCM
• 대칭키 개수 n(n−1)2, 비대칭키 개수 2n
• 전자서명 후 암호화 = A의 비밀키 → B의 공개키
• AES = 대칭키, RSA = 비대칭키 (DES · 3DES · IDEA · SEED · ARIA도 대칭키)
• AES 블록은 항상 128비트, 키만 128/192/256으로 달라진다
• 키 길이별 라운드 = 10 / 12 / 14 — AES-256은 14라운드
• AES는 SPN 구조, DES는 Feistel 구조
• 마지막 라운드는 MixColumns 생략
• ECB 모드는 사용 금지, 현재 권장은 GCM
• 대칭키 개수 n(n−1)2, 비대칭키 개수 2n
• 전자서명 후 암호화 = A의 비밀키 → B의 공개키