IT Knowledge/Security/images/22-암호학-기초-diagram.svg
암호학 기초 (Cryptography Basics)
암호화의 기본 원리와 알고리즘을 이해합니다.
📌 학습 목표
- 대칭키/비대칭키 암호화 이해
- 해시 함수와 디지털 서명 이해
- SSL/TLS 작동 원리 이해
- PKI (Public Key Infrastructure) 이해
1. 암호학 기본 개념
용어 정의
| 용어 | 설명 | 예시 |
|---|---|---|
| 평문 (Plaintext) | 암호화되지 않은 원본 데이터 | ”Hello World” |
| 암호문 (Ciphertext) | 암호화된 데이터 | ”U2FsdGVkX1…” |
| 암호화 (Encryption) | 평문 → 암호문 변환 | |
| 복호화 (Decryption) | 암호문 → 평문 변환 | |
| 키 (Key) | 암호화/복호화에 사용되는 비밀 정보 | |
| 알고리즘 | 암호화 수학적 함수 | AES, RSA |
암호화 목적
- 기밀성: 권한 없는 자는 읽을 수 없음
- 무결성: 데이터 위변조 탐지
- 인증: 발신자 식별
- 부인 방지: 발신자가 거부 불가
2. 대칭키 암호화
정의
암호화와 복호화에 동일한 키를 사용하는 방식입니다.
특징
- 속도: 빠름 (대량 데이터 암호화에 적합)
- 키 분배: 어려움 (보안 취약점)
- 알고리즘: AES, DES, 3DES, Blowfish
대칭키 알고리즘
AES (Advanced Encryption Standard)
- 키 길이: 128, 192, 256비트
- 블록 크기: 128비트
- 사용: WiFi (WPA2), SSL/TLS, 디스크 암호화
graph LR A[평문] --> B[AES 암호화] B -->|키| C[암호문] C --> D[AES 복호화] D -->|동일 키| E[평문]
대칭키 암호화 예제
평문: Hello World
키: MySecretKey123
암호화 → 암호문: U2FsdGVkX1+...
복호화 → 평문: Hello World
3. 비대칭키 암호화
정의
암호화와 복호화에 서로 다른 키 쌍을 사용하는 방식입니다.
키 쌍 구조
- 공개키 (Public Key): 모두에게 공개, 암호화용
- 비밀키 (Private Key): 소유자만 보유, 복호화/서명용
특징
- 속도: 느림 (소량 데이터 암호화)
- 키 분배: 쉬움 (공개키 공개)
- 안전성: 비밀키만 보호하면 됨
- 알고리즘: RSA, ECC, DSA
RSA (Rivest-Shamir-Adleman)
- 기반: 소인수 분해의 어려움
- 키 길이: 1024, 2048, 4096비트
- 사용: SSL/TLS, 디지털 서명, 이메일 암호화
비대칭키 암호화 예제
Alice의 공개키: Alice-Public
Alice의 비밀키: Alice-Private
Bob이 Alice에게 메시지 보내기:
1. Bob: 평문 + Alice-Public → 암호화
2. Bob: 암호문 → Alice
Alice 수신:
3. Alice: 암호문 + Alice-Private → 복호화 → 평문
4. 하이브리드 암호화
정의
대칭키와 비대칭키를 결합한 방식입니다.
작동 원리
- 비대칭키: 세션 키 생성 및 교환
- 대칭키: 데이터 암호화 (세션 키 사용)
장점
- 대칭키의 속도
- 비대칭키의 안전한 키 교환
graph TD A[Bob] -->|세션 키 생성| B[비대칭키로 세션 키 암호화] B -->|암호화된 세션 키| C[Alice] C -->|비밀키로 세션 키 복호화| D[세션 키 획득] A -->|대칭키로 데이터 암호화| E[암호문 전송] E -->|세션 키로 복호화| C
예시: SSL/TLS
1. 클라이언트 → 서버: Hello (지원하는 암호 알고리즘)
2. 서버 → 클라이언트: Hello + 인증서 (공개키 포함)
3. 클라이언트: 인증서 검증
4. 클라이언트: 세션 키 생성 + 서버 공개키로 암호화
5. 클라이언트 → 서버: 암호화된 세션 키
6. 서버: 비밀키로 세션 키 복호화
7. 이후 통신: 대칭키 (세션 키)로 암호화
5. 해시 함수
정의
고정 길이 해시 값으로 데이터를 변환하는 단방향 함수입니다.
특징
- 단방향: 해시 → 원본 불가
- 고정 길이: 데이터 크기 상관없이 고정 길이
- 결정론적: 동일 입력 → 동일 출력
- 충돌 어려움: 서로 다른 입력 → 다른 출력
해시 알고리즘
| 알고리즘 | 출력 길이 | 상태 |
|---|---|---|
| MD5 | 128비트 | 취약 (충돌 발견) |
| SHA-1 | 160비트 | 취약 (충돌 발견) |
| SHA-256 | 256비트 | 안전 (추천) |
| SHA-512 | 512비트 | 안전 |
해시 예제
평문: Hello World
MD5: e59ff979410e944e21a3c... (취약)
SHA-256: a591a6d40bf420404a011733cfb7... (안전)
평문: hello world (소문자 변경)
SHA-256: b94d27b9934d3e08a52e52d7da... (완전히 다름)
해시 사용 용도
- 비밀번호 저장: 평문 비밀번호 + 솔트 → 해시 저장
- 무결성 검증: 파일 해시 비교
- 디지털 지문: 데이터 유일성 식별
솔트 (Salt)
- 정의: 해시 계산 시 추가되는 랜덤 값
- 목적: 레인보우 테이블 공격 방지
- 방식: 비밀번호 + 솔트 → 해시
비밀번호: password123
솔트: randomString456
해시 = SHA256(password123 + randomString456)
6. 디지털 서명
정의
메시지의 출처와 무결성을 보장하는 방식입니다.
디지털 서명 생성
1. 원본 메시지의 해시 생성
2. 발신자의 비밀키로 해시 암호화 → 디지털 서명
3. 메시지 + 디지털 서명 전송
디지털 서명 검증
1. 수신 메시지의 해시 생성
2. 발신자의 공개키로 디지털 서명 복호화 → 원본 해시
3. 두 해시 비교 → 일치하면 무결성 확인
graph TD A[Alice] -->|서명| B[해시 생성] B -->|비밀키로 암호화| C[디지털 서명] C --> D[메시지 + 서명 전송] D --> E[Bob] E -->|검증| F[수신 메시지 해시 생성] E -->|공개키로 복호화| G[디지털 서명 복호화] F --> H[해시 비교] G --> H H -->|일치| I[무결성 확인] H -->|불일치| J[위변조 탐지]
7. PKI (Public Key Infrastructure)
정의
공개키 기반 암호화 시스템을 운영하는 인프라입니다.
구성 요소
- CA (Certificate Authority): 인증서 발급/관리 기관
- 인증서 (Certificate): 공개키 소유자 신원 증명
- CRL (Certificate Revocation List): 폐지된 인증서 목록
- RA (Registration Authority): 인증서 요청 검증
인증서 구조
인증서:
- 버전
- 시리얼 번호
- 발급자 (Issuer)
- 유효 기간
- 주체 (Subject): 공개키 소유자
- 공개키
- 발급자 서명
인증서 예시 (웹 브라우저)
https://www.google.com/
인증서 정보:
- 발급자: GTS CA 1O1
- 주체: *.google.com
- 유효 기간: 2024-01-01 ~ 2025-01-01
- 공개키: RSA 2048비트
- 서명: 발급자의 비밀키로 서명
SSL/TLS 인증서 종류
| 종류 | 인증 수준 | 비용 | 사용 |
|---|---|---|---|
| DV | 도메인 소유만 | 저렴 | 개인 블로그 |
| OV | 도메인 + 조직 | 중간 | 기업 |
| EV | 도메인 + 조직 + 엄격 검증 | 비쌈 | 은행, 금융 |
8. 공격 유형
브루트 포스 (Brute Force)
- 방식: 모든 가능한 키 시도
- 방어: 비밀번호 복잡도, 계정 잠금
딕셔너리 공격 (Dictionary Attack)
- 방식: 일반적인 비밀번호 사전 사용
- 방어: 솔트, 키 스트레칭
레인보우 테이블 (Rainbow Table)
- 방식: 미리 계산된 해시 테이블 사용
- 방어: 솔트 사용
중간자 공격 (MITM)
- 방식: 통신 가로채기
- 방어: SSL/TLS, 인증서 검증
🎯 실습 과제
-
대칭키 암호화
# OpenSSL로 AES 암호화 openssl enc -aes-256-cbc -in secret.txt -out secret.enc -k MyPassword # 복호화 openssl enc -aes-256-cbc -d -in secret.enc -out secret.txt -k MyPassword -
해시 생성
# SHA-256 해시 sha256sum file.txt # MD5 해시 (권장하지 않음) md5sum file.txt -
인증서 확인
# 웹사이트 인증서 정보 openssl s_client -connect google.com:443 -servername google.com
✅ 학습 체크리스트
- 대칭키/비대칭키 차이점 이해
- 하이브리드 암호화 원리 이해
- 해시 함수 특징 이해
- 디지털 서명 생성/검증 이해
- PKI 구성 요소 이해
- SSL/TLS 작동 원리 이해
- 암호화 공격 유형 식별
🔗 관련 노트
📚 참고 자료
다음 학습: 네트워크 공격 유형