[Cryptography] 암호학 기초 - 개념과 분류
서종호(가시다)님의 On-Premise K8s Hands-on Study 자료를 기반으로 합니다. 학습 정리 목적으로 작성된 글로, 계속해서 수정될 수 있습니다.
암호화 기초
- (1) 암호학 기초 - 개념과 분류
- (2) 단방향 암호화 - 해시 함수
- (3) 양방향 암호화 - 대칭키
- (4) 양방향 암호화 - 비대칭키
개요
암호학(Cryptography)은 정보를 보호하기 위한 기술의 집합이다. 현대 IT 시스템에서 암호화는 데이터 보안의 핵심이며, HTTPS, SSH, 인증서, 블록체인 등 다양한 분야에서 활용된다. 이 글에서는 암호학의 기본 개념과 암호화 알고리즘의 분류 체계를 살펴본다.
정보 보안의 기초
정보 보안 3요소 (CIA Triad)
정보 보안의 목표는 크게 세 가지로 정의된다.
-
- 기밀성(Confidentiality): 인가된 사용자만 정보에 접근할 수 있어야 함
-
- 무결성(Integrity): 정보가 무단으로 변조되지 않아야 함
-
- 가용성(Availability): 필요할 때 정보에 접근할 수 있어야 함
암호화는 주로 기밀성과 무결성을 보장하기 위한 핵심 기술이다.
AAA (인증, 인가, 계정관리)
기밀성을 보장하기 위한 액세스 제어 체계로 AAA가 있다.
- Authentication (인증): 사용자가 누구인지 확인 → Who are you?
- Authorization (인가): 사용자가 무엇을 할 수 있는지 결정 → What can you do?
- Accounting (계정관리): 사용자의 행동을 기록 및 추적
암호화의 기본 개념
암호화와 복호화
암호화(Encryption)와 복호화(Decryption)는 평문(Plaintext)과 암호문(Ciphertext) 사이의 변환 과정이다.
- 암호화: 평문을 제3자가 해독할 수 없는 암호문으로 변환 → 송신
- 복호화: 암호문으로부터 평문을 복원 → 수신
암호화/복호화 과정:
- 송신자: 평문(M)을 키와 함께 암호 알고리즘에 입력하여 암호문(C)으로 변환
- 전송: 암호문(C)을 전송 (전송 중 제3자(해커)가 가로챌 수 있음)
- 수신자: 암호문(C)을 키와 함께 복호 알고리즘에 입력하여 원래의 평문(M)으로 복원
암호 알고리즘과 키
암호화 과정은 다음과 같이 표현할 수 있다.
암호문 = 암호_알고리즘(평문, 키)
예시:
encrypted = AES(plaintext, key)
= RSA(plaintext, publicKey)
- 암호 알고리즘: 암호화/복호화를 수행하는 수학적 절차 및 방법
- AES: 특정한 수학적 변환 과정
- RSA: 큰 소수의 곱셈 기반 알고리즘
- SHA-256: 해시 함수 알고리즘
- 키(Key): 암호 알고리즘에 입력되는 비밀 값
- 같은 알고리즘이라도 키가 다르면 결과가 달라짐
- AES 알고리즘 + 키1 → 결과1
- AES 알고리즘 + 키2 → 결과2
암호화의 원칙
암호화/복호화 시 알고리즘은 제3자에게 공개되어도 무방하나, 키 값은 당사자만 알고 있어야 한다.
이를 케르크호프스의 원리(Kerckhoffs’s Principle)라고 하며, 현대 암호학의 기본 원칙이라고 한다.
간단한 예시: 시저 암호
ABC 문장을 암호화하는 예시를 살펴보자.
- 약속 (알고리즘과 키)
- 암호 알고리즘: 각 문자의 ASCII 코드 값에 x씩 더하여 전송한다
- 키: x = 3
- 암호화 동작
ABC:0x41,0x42,0x43- 변환 (+3)
0x44,0x45,0x46:DEF전송
- 복호화 동작
DEF수신:0x44,0x45,0x46- 복원 (-3)
0x41,0x42,0x43:ABC획득
키의 구분
암호화에 사용되는 키는 크게 대칭키와 비대칭키로 구분된다.
대칭키 (Symmetric Key)
암호화와 복호화에 같은 키를 사용하는 방식이다. 동일한 비밀키(Secret Key)로 암호화와 복호화를 모두 수행할 수 있는 암호화 기법이다.
암호화 및 복호화 과정은 다음과 같다:
- 송신자가 평문을 비밀키와 함께 암호 알고리즘에 입력하여 암호문 생성
- 암호문을 전송 (전송 중 제3자가 가로챌 수 있음)
- 수신자가 동일한 비밀키와 함께 복호 알고리즘에 입력하여 평문 복원
장점:
- 성능이 우수함 (일반적으로 수백 MB/s ~ 수 GB/s 수준)
- 암호화/복호화에 CPU 리소스 소모가 적음
단점:
- 비밀키 분실 시 복호화가 불가능
- 비밀키를 상대방에게 안전하게 전달해야 함 (키 분배 문제)
비대칭키 쌍 (Asymmetric Key Pair)
암호화와 복호화에 서로 다른 키를 사용하는 방식이다. 공개키와 개인키 한 쌍으로 구성되며, 공개키 암호화(Public Key Cryptography)라고도 한다.
암호화 및 복호화 과정은 다음과 같다:
- 송신자가 평문을 수신자의 공개키로 암호화하여 암호문 생성
- 공개키는 모든 사람에게 공개되어 있어 누구나 사용 가능
- 암호문을 전송
- 수신자가 자신의 개인키로 복호화하여 평문 복원
- 개인키는 수신자만 알고 있어야 하며, 비밀 유지 필수
다음과 같은 특징을 가진다:
- 공개키와 개인키는 쌍으로 생성되며, 항상 함께 생성되어야 함
- 공개키는 전송해도 안전하며, 공개되어 있어도 문제없음
- 개인키로 데이터를 서명하면 공개키로 검증 가능 (디지털 서명에 활용)
- 개인키로 암호화한 데이터는 대응하는 공개키로만 복호화 가능 (인증에 활용)
장점:
- 공개키를 전송할 수 있어 키 분배가 용이함
- 공개키가 노출되어도 안전함
단점:
- 성능이 상대적으로 낮음 (수백 KB/s ~ 수십 MB/s 수준, 대칭키 대비 100~1000배 느림)
- 수학적 연산이 복잡하여 CPU 리소스를 많이 소모함
공개키(Public Key)는 공개 가능하며 암호화와 서명 검증에 사용된다. 반면 개인키(Private Key)는 비밀로 유지되어야 하며 복호화와 서명 생성에 사용된다.
특수 목적 키
일반적인 암호화 외에 특수 용도로 사용되는 키도 있다.
- 키 암호화 키(KEK): 다른 키를 암호화하는 데 사용
- HMAC 키: 메시지 인증 코드 생성
- 솔트(Salt): 해시 강화용 (엄밀히는 키가 아닌 랜덤 부가 데이터로, 동일 입력에 대해 서로 다른 해시 값을 생성하여 레인보우 테이블 공격을 방지)
키의 용도별 분류
암호화에 사용되는 키는 용도에 따라 다음과 같이 구분할 수 있다.
- 마스터 키(Master Key): 장기간 사용되는 최상위 키
- 세션 키(Session Key): 일회성으로 사용되며, 통신 세션마다 새로 생성되는 키
- 데이터 암호화키(DEK, Data Encryption Key): 실제 데이터를 암호화하는 데 전용되는 키
암호화 알고리즘 분류
암호화 알고리즘은 복호화 가능 여부에 따라 크게 단방향과 양방향으로 분류된다.
암호화 알고리즘
├── 단방향 (복호화 불가)
│ ├── 해시 함수 (키 없음): MD5, SHA-256, SHA-512, BLAKE2
│ └── 키 기반 해시 (HMAC): 메시지 인증과 무결성 검증에 사용
└── 양방향 (복호화 가능)
├── 대칭키 암호화 (암복호화 키 동일)
│ ├── 블록 암호: DES, 3DES, AES, BlowFish
│ └── 스트림 암호: RC4, ChaCha20
└── 비대칭키 암호화 (암복호화 키 다름)
├── 암호화/복호화: RSA, ECC, ElGamal
└── 디지털 서명: RSA, DSA, ECDSA, Ed25519
단방향 암호화
복호화가 불가능한 암호화 방식이다. 대표적으로 해시 함수가 있다.
- 해시 함수: 키 없이 동작
- HMAC: 키와 함께 동작
주로 무결성 검증, 비밀번호 저장 등에 사용된다. 다음 글에서 자세히 다룬다.
양방향 암호화
복호화가 가능한 암호화 방식이다.
대칭키 암호화
암호화와 복호화에 같은 키를 사용한다.
- 특징: 빠름, 키 관리 어려움
- 구분
- 블록 암호화: DES, 3DES, AES, BlowFish
- 스트림 암호화: RC4, ChaCha20
- 속도: 수백 MB/s ~ 수 GB/s (매우 빠름)
비대칭키 암호화
암호화와 복호화에 서로 다른 키를 사용한다.
- 특징: 느림, 키 분배 용이
- 알고리즘: RSA, ECC, DSA, ECDSA, ElGamal, Ed25519
- 속도: 수백 KB/s ~ 수십 MB/s (대칭키 대비 100~1000배 느림)
대칭키 vs 비대칭키 비교
대칭키와 비대칭키는 여러 측면에서 차이를 보인다:
- 키 개수 측면에서 대칭키는 동일한 키 1개만 사용하는 반면, 비대칭키는 공개키와 개인키 2개를 쌍으로 사용함
- 속도 면에서 대칭키는 빠른 반면, 비대칭키는 상대적으로 느림
- 키 분배는 대칭키가 어렵고, 비대칭키가 쉬운 편
- 대칭키의 경우, 노출되면 위험해짐
- 비대칭키의 경우, 공개키는 노출되어도 상관 없으며, 개인키는 노출되지 않음
- 주요 용도로 대칭키는 대량 데이터 암호화에, 비대칭키는 키 교환과 디지털 서명에 사용됨
- 대표적인 알고리즘으로 대칭키는 AES와 DES를, 비대칭키는 RSA와 ECC를 들 수 있음
실무에서의 조합
실무에서는 대칭키와 비대칭키를 조합하여 사용하는 것이 일반적이다.
1. [세션 키 생성] 송신자가 랜덤 대칭키(세션키) 생성
2. [키 교환] 비대칭키 암호화 사용
- 수신자의 공개키로 세션키를 암호화하여 전송
- 수신자가 자신의 개인키로 복호화하여 세션키 획득
3. [데이터 전송] 대칭키 암호화 사용
- 획득한 세션키로 실제 데이터를 암호화하여 전송
- 수신자가 동일한 세션키로 복호화
이러한 방식을 사용하는 이유:
- 비대칭키 암호화는 수학적으로 복잡하고 계산량이 많아 데이터 통신에 부적합
- 대칭키 암호화는 빠르지만 키를 안전하게 전달하기 어려움
- 두 방식을 조합하면 보안성과 성능을 모두 확보
HTTPS, TLS 등 대부분의 보안 프로토콜이 이 방식을 채택하고 있다.
정리
암호학의 핵심 개념을 정리하면 다음과 같다:
- 암호화는 평문을 암호문으로 변환하는 과정이다
- 복호화는 암호문을 평문으로 복원하는 과정이다
- 암호 알고리즘은 암호화와 복호화를 수행하는 수학적 절차를 의미한다
- 키는 알고리즘에 입력되는 비밀 값이다
- 대칭키는 암복호화에 같은 키를 사용하여 빠르지만 키 분배가 어렵다
- 비대칭키는 암복호화에 다른 키를 사용하여 느리지만 키 분배가 쉽다
- 단방향 암호화는 복호화가 불가능한 해시 함수를 의미한다
- 양방향 암호화는 복호화가 가능한 대칭키 및 비대칭키 암호화를 의미한다
댓글남기기