[암호 기술] 암호 기술에 대한 이해
암호화 기술에 대해 간략하게 정리합니다.
1. 정보 위협 요소와 보호 서비스
정보를 위협하는 요소는 크게 4 가지로 나눌 수 있습니다.
- 도청 : 제 3 자의 도청 위협
- 위장 : 제 3 자가 대상으로 위장하여 개입
- 변조 : 제 3 자에 의한 데이터 손실 및 변경 위험
- 부인 : 데이터 송수신 내역에 대한 부인
이러한 위협 요소에 대응하는 보안 서비스 또한 4가지로 볼 수 있습니다.
-
도청 ⇒ 기밀성 (Confidentiality)
- 정보가 의도하지 않게 노출되지 않도록 보장하는 서비스
-
위장 ⇒ 인증 (Authentication)
- 상대방의 신원을 확인/보증할 수 있도록 하는 서비스 (발신 인증, 개체 인증)
-
변조 ⇒ 무결성 (Integrity)
- 의도적인 공격에 의한 데이터 위조 및 변조를 탐지할 수 있도록 하는 서비스
-
부인 ⇒ 부인 방지 (Non-Repudiation)
- 서명 등을 통해 송수신자가 데이터에 대해 부인할 수 없도록 보장하는 서비스
2. 암호학이란?
간단하게 평문(Plain Text)을 암호 알고리즘을 통해 암호문(Cipher Text)으로 암호화 하고,
다시 암호문을 평문으로 복호화 하는 개념입니다.
이 때 알고리즘을 사용할 때 필요한 비밀 정보를 키(Key)라고 합니다.
이러한 개념을 토대로 암호 기술은 기밀성, 무결성, 인증, 부인 방지 서비스 전체를 설계하는 기술까지 포함합니다.
3. 암호 기술
암호 기술은 크게 5 가지로 나눌 수 있습니다.
- 대칭 키 암호화 (기밀성, 무결성 인증)
- 공개 키 암호화 (기밀성)
- 해시 암호화 (무결성)
- 메세지 인증 코드 (무결성, 인증)
- 전자 서명 (무결성, 인증, 부인 방지)
3-1. 대칭 키 암호
Symmetric-Key Cipher
암복호화에 동일한 비밀 키를 사용하는 방식입니다.
속도가 빠르고 구현이 간단하여 대량 데이터를 암호화 하는데에 사용된다고 합니다.
- 암복호화에 사용되는 키가 동일하기 때문에 키의 보안성이 중요한 비중을 차지합니다.
대칭 키 암호화에는 크게 2 가지가 있습니다.
-
스트림 암호화
-
블록 암호화
3-1-1, 스트림 암호화
Stream Cipher
평문의 크기와 같은 키 스트림을 생성하고
평문의 각 "바이트"마다 XOR 연산으로 암복호화를 수행합니다.
블록 암호화에 비해 속도가 빠르다고 하며 주요 알고리즘은 아래와 같습니다.
- ChaCha20
- Salsa20
3-1-2. 블록 암호화
Block Cipher
평문을 일정 비트 단위(블록)으로 나누어 암복호화를 수행합니다.
주요 알고리즘은 아래와 같습니다.
- AES
- ARIA
- SEED
- LEA
3-2. 블록 암호 운영 모드
블록 암호화는 그대로 사용하는 것이 아닌 특정 "운영 모드"와 함께 사용합니다.
| 분류 | 모드 | 특징 |
|---|---|---|
| 기밀성 모드 | ECB, CBC, CFB, OFB, CTR | 암호화 중심 |
| 무결성/인증 모드 | CMAC(CBC-MAC), GMAC(Galois-MAC) | MAC 생성 |
| AEAD(기밀성+무결성+인증) | CCM(Counter with CBC-MAC), GCM(Galois/Counter Mode) | 인증 TAG 포함 |
3-2-1. 기밀성 모드
| 모드 | 장점 | 단점 |
|---|---|---|
| ECB | 구현이 간단하고 빠르다 암복호화 시 병렬 처리가 가능하다 오류 확산이 발생하지 않는다. | 동일한 평문은 동일한 암호문을 생성한다 패딩이 필요하다 |
| CBC | 동일한 평문이 같은 암호문을 생성하지 않는다 복호화 시 병렬 처리가 가능하다 | 암호화 시 병렬 처리가 불가능하다 비트 단위의 에러 발생 시 현재 블럭과 다음 블럭에서 에러가 발생한다 패딩이 필요하다 |
| CFB | 동일한 평문이 같은 암호문을 생성하지 않는다 패딩이 불필요 하다 복호화 시 병렬 처리가 가능하다 | 암호화 시 병렬 처리가 불가능하다 비트 단위의 에러 발생 시 현재 블럭과 다음 블럭에서 에러가 발생한다 |
| OFB | 동일한 평문이 같은 암호문을 생성하지 않는다 패딩이 불필요 하다 오류가 확산되지 않는다 | 병렬 처리가 불가능하다 |
| CTR | 동일한 평문이 같은 암호문이 되지 않는다 패딩이 불필요하다 암복호화 시 병렬 처리가 가능하다 오류가 확산되지 않는다 | 위의 모드들의 단점을 모두 개선한 형태이다 |
3-2-2. AEAD 모드
AEAD는 암호문 + 인증Tag로 구성되어 변조 여부까지 검출이 가능하다고 합니다.
| 모드 | 구성 | 특징 |
|---|---|---|
| CCM | CTR + CBC-MAC | IoT / 임베디드에서 사용 |
| GCM | CTR + GHASH | 매우 빠른 인증, 병렬성 |
3-3. 해시
Hash
임의의 데이터를 고정된 길이의 데이터로 출력하는 "단방향" 암호화입니다. (역연산 X)
충돌을 발견하기 어렵도록 암호학적으로 안전하게 설계되었고,
데이터의 무결성을 보장하는 기능을 합니다.
주요 알고리즘
- MD5, SHA1 - 취약, 사용 금지
- SHA-2
- SHA-3
해시는 다양하게 활용할 수 있습니다.
- 데이터 무결성 검사
- 난수 생성기 (HASH-DRBG)
- 키 유도 (KDF)
3-4. 메세지 인증 코드 (MAC)
Message Authentication Code
해시와 동일하게 고정된 길이의 데이터로 출력할 수 있는 "단방향" 암호화입니다.
추가적으로 키(Key)를 필요로 합니다.
데이터의 무결성 및 출처 인증을 보장하며,
복호화가 불가능하므로 평문을 암호화한 암호문과 기존의 암호문을 비교하는 방식으로 검증합니다. (Conpute/Compare)
주요 알고리즘
- 해시 기반 : HMAC (평문 해시 후 MAC)
- 블록 암호화 기반 : CMAC, GMAC
3-5. 패스워드 기반 키 유도
대표적으로 PBKDF2(Password-Based Key Derivation Function)이 있습니다.
사용자의 패스워드, 난수, 반복 횟수, 키 길이를 입력으로 비밀 키를 생성합니다.
- 난수(Salt)는 비밀번호를 암호화 하기 위한 키 값으로, 사전 공격을 막는데에 사용됩니다.
- 반복 횟수는 내부 의사난수함수(PRF, Pseudo-Random Funtion)의 호출 횟수로, 전수 조사 공격을 막는데에 사용됩니다.
- PBKDF2는 느리게 동작하도록 설계되어 브루트포스/사전 공격을 어렵게 만든다고 합니다.
3-6. 공개 키 암호화
Public-Key Cipher
암호화 키와 복호화 키가 동일하지 않은 암호화 기술입니다.
수신자의 공개 키를 통해 평문을 암호화 하고, 수신자의 개인 키를 통해 암호문을 복호화 합니다.
공개 키로부터 개인 키의 유도가 어렵도록 키 쌍 생성 시 수학적인 문제를 이용하여 설계되었습니다.
대칭 키 암호화에 비해 연산 속도가 느린 단점이 있지만, 온라인 상에서의 키 분배 문제를 해결합니다.
- 소인수분해 문제 (FP, Factoring Problem)
- 이산대수 문제 (DLP, Discreate Logarithm Problem)
- 타원곡선 이산대수 문제 (ECDLP, Elliptic Curve Discreate Logarithm Problem)
주요 알고리즘
- RSA (소인수분해)
- ElGamal (이산대수)
- EC-ElGamal / ECIES (타원곡선 이산대수)
3-7. 하이브리드 암호화
대칭 키 + 공개 키 암호화를 결합하여 각각의 단점을 보완한 암호화 방식입니다.
의사난수 생성기, 대칭 키, 공개 키로 구성됩니다.
-
암호화
- 의사난수 생성기(PRNG)로 대칭 키(세션 키)를 생성합니다.
- 평문을 대칭 키로 암호화 합니다.
- 수신자의 공개 키로 대칭 키를 암호화 합니다.
- 암호화된 공개 키와 암호문을 결합합니다.
-
복호화
- 암호문과 암호화된 대칭 키를 분할합니다.
- 암호화된 대칭 키를 수신자의 개인 키로 복호화 합니다.
- 복호화된 대칭 키로 암호문을 복호화 합니다.
대칭 키 암호화의 속도는 평문의 암호화 속도를 높이고
공개 키 암호화가 가진 키 관리의 편의성은 서로 직접적인 신뢰 관계가 없는 두 주체가 안전하게 통신할 수 있도록 합니다.
(현재 대부분의 인터넷 보안(TLS 등)은 이 방식이라고 합니다.)
3-8. 전자 서명
Digital Signature
공개 키 암호화와 반대로 개인 키를 통해 암호화 하고, 공개 키를 통해 복호화 합니다.
서명 값과 평문을 함께 보내고, 서명 값을 복호화 한 평문과 받은 평문을 비교하여 검증합니다. (Sign/Verify)
이러한 전자 서명은 메세지 크기가 클수록 연산 속도가 느려지고 서명 데이터의 크기가 커진다는 단점이 있습니다.
- 공개 키는 여러 개가 될 수 있습니다.
- 복호화를 통해 서명 값을 확인하는 것이 목적이므로 공개 키 암호화와 반대된다.
- 공개 키는 반대로 암호화가 목적입니다.
3-8-1. 개선된 전자 서명
기존 전자 서명의 방식을 개선하기 위해 메세지에 해시를 적용합니다.
기존 전자 서명은 밀접한 평문 2 개를 서명하면 밀접한 서명 값 2 개가 나오게 되는데,
해시로 평문을 처리하면 밀접하다고 해도 해시 값은 전혀 다른 값이 나오기 때문에 기존 문제를 해결할 수 있습니다.
또한 해시를 적용하면 크기가 고정된 데이터가 출력되기 때문에 속도가 느린 단점을 보완할 수 있습니다.
주요 알고리즘
- RSA
- DSA
- ECDSA
3-9. 디피-헬만 키 교환
Diffie-Hellman Key Exchange
상대의 공개 키와 나의 개인 키를 활용한 비밀 키 생성이 핵심인 기술입니다.
따라서 직접 키를 교환하지 않고도 동일한 비밀 키를 생성할 수 있습니다.
주요 알고리즘
- DH (정수 기반)
- ECDH (타원곡선 기반)
타원곡선 기반이 더 효율적이고 짧은 키로 높은 보안성을 제공한다고 합니다.