암호화 기본 개념
암호화란?
정의: 평문(원본 데이터)을 암호문으로 변환하여 인가되지 않은 자의 접근으로부터 정보를 보호하는 기술
암호화 목적
- 기밀성 (Confidentiality): 권한 없는 접근 차단
- 무결성 (Integrity): 데이터 변조 감지
- 인증 (Authentication): 송신자 신원 확인
- 부인방지 (Non-repudiation): 송신 사실 부정 방지
암호화 구분
대칭키 암호화 (Symmetric Encryption)
- 암호화와 복호화에 동일한 키 사용
- 빠른 속도, 대용량 데이터 처리 적합
- 키 배송 문제 존재
비대칭키 암호화 (Asymmetric Encryption)
- 공개키와 개인키 쌍 사용
- 키 배송 문제 해결, 디지털 서명 가능
- 느린 속도, 작은 데이터 처리 적합
해시 함수 (Hash Function)
- 일방향 함수, 복호화 불가능
- 고정 길이 출력 (다이제스트)
- 무결성 검증 및 패스워드 저장
대칭키 암호화
주요 알고리즘
AES (Advanced Encryption Standard)
- 현재 표준 대칭키 암호화 알고리즘
- 키 길이: 128, 192, 256비트
- 블록 크기: 128비트
- 정부, 금융권에서 널리 사용
DES/3DES (Data Encryption Standard)
- 구형 알고리즘, 보안 취약
- DES: 56비트 키 (더 이상 사용 금지)
- 3DES: 168비트 키 (레거시 시스템에서만)
AES 모드
ECB (Electronic Codebook)
- 가장 단순한 모드
- 동일한 평문 블록 → 동일한 암호문
- 보안성 낮음, 실무 사용 금지
CBC (Cipher Block Chaining)
- 이전 암호문 블록과 XOR 연산
- 초기화 벡터 (IV) 필요
- 가장 일반적으로 사용
GCM (Galois/Counter Mode)
- 인증 암호화 모드
- 암호화와 동시에 무결성 검증
- 현대적 애플리케이션 권장
CTR (Counter Mode)
- 스트림 암호화 방식
- 병렬 처리 가능
- IV 대신 카운터 사용
실무 활용 예시
파일 암호화
from cryptography.fernet import Fernet
# 키 생성
key = Fernet.generate_key()
cipher_suite = Fernet(key)
# 암호화
plaintext = b"중요한 데이터"
ciphertext = cipher_suite.encrypt(plaintext)
# 복호화
decrypted = cipher_suite.decrypt(ciphertext)
데이터베이스 필드 암호화
- 개인정보, 신용카드 번호 등
- 애플리케이션 레벨 암호화
- 투명한 데이터 암호화 (TDE) 활용
비대칭키 암호화
RSA (Rivest-Shamir-Adleman)
특징
- 가장 널리 사용되는 공개키 알고리즘
- 키 길이: 1024, 2048, 4096비트
- 2048비트 이상 권장
용도
- 디지털 서명
- 키 교환 (대칭키 암호화)
- 소량 데이터 암호화
실무 활용
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes
# 키 쌍 생성
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)
public_key = private_key.public_key()
# 암호화 (공개키 사용)
message = b"비밀 메시지"
ciphertext = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
# 복호화 (개인키 사용)
plaintext = private_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
ECC (Elliptic Curve Cryptography)
특징
- RSA 대비 작은 키 크기로 동일한 보안 수준
- 모바일 환경에 적합
- 256비트 ECC ≈ 3072비트 RSA
용도
- 디지털 서명 (ECDSA)
- 키 교환 (ECDH)
- 블록체인, IoT 환경
해시 함수
주요 알고리즘
SHA-256 (Secure Hash Algorithm)
- 256비트 출력
- 현재 표준 해시 함수
- 블록체인에서 널리 사용
SHA-3
- 최신 해시 표준
- Keccak 알고리즘 기반
- SHA-2와 다른 구조
MD5/SHA-1 (사용 금지)
- 충돌 공격 취약점 발견
- 레거시 시스템에서만 제한적 사용
실무 활용
패스워드 해싱
import hashlib
import secrets
# Salt 생성
salt = secrets.token_bytes(32)
# 패스워드 해싱
password = "user_password"
password_hash = hashlib.pbkdf2_hmac(
'sha256',
password.encode('utf-8'),
salt,
100000 # 반복 횟수
)
파일 무결성 검증
def calculate_file_hash(filename):
hash_sha256 = hashlib.sha256()
with open(filename, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_sha256.update(chunk)
return hash_sha256.hexdigest()
# 사용
file_hash = calculate_file_hash("important_file.pdf")
디지털 서명
동작 원리
- 서명 생성: 개인키로 메시지 해시값 서명
- 서명 검증: 공개키로 서명 검증
- 무결성 확인: 메시지 변조 여부 확인
- 인증: 서명자 신원 확인
PKI (Public Key Infrastructure)
구성 요소
- CA (Certificate Authority): 인증서 발급 기관
- 인증서: 공개키와 신원 정보 결합
- CRL (Certificate Revocation List): 폐기된 인증서 목록
- OCSP (Online Certificate Status Protocol): 실시간 인증서 상태 확인
인증서 검증 과정
- 인증서 유효 기간 확인
- CA 서명 검증
- 인증서 폐기 여부 확인
- 체인 검증 (루트 CA까지)
키 관리
키 생성
안전한 키 생성 요구사항
- 암호학적으로 안전한 난수 생성기 사용
- 충분한 키 길이 (AES-256, RSA-2048 이상)
- 예측 불가능한 엔트로피 확보
키 생성 도구
- OpenSSL: 범용 암호화 도구
- Hardware Security Module (HSM): 하드웨어 기반 키 생성
- Cloud KMS: 클라우드 키 관리 서비스
키 저장 및 보호
키 저장 방법
- 소프트웨어: 파일 시스템, 데이터베이스
- 하드웨어: HSM, 스마트카드, USB 토큰
- 클라우드: AWS KMS, Azure Key Vault, GCP KMS
키 보호 기법
- 키 암호화 키 (KEK) 사용
- 키 분할 (Key Splitting)
- 임계값 스킴 (Threshold Scheme)
- 정기적인 키 순환 (Key Rotation)
키 생명주기 관리
키 상태 관리
- 생성 (Generation): 안전한 키 생성
- 배포 (Distribution): 안전한 키 전달
- 사용 (Usage): 용도별 키 사용
- 갱신 (Renewal): 주기적 키 교체
- 폐기 (Destruction): 안전한 키 삭제
실무 적용 시나리오
웹 애플리케이션 보안
HTTPS (TLS/SSL)
- 클라이언트-서버 간 통신 암호화
- 인증서 기반 서버 인증
- 대칭키와 비대칭키 조합 사용
세션 관리
- 세션 토큰 암호화
- JWT (JSON Web Token) 서명
- CSRF 토큰 보호
데이터베이스 암호화
- 저장 시 암호화 (Encryption at Rest)
- 전송 시 암호화 (Encryption in Transit)
- 컬럼 레벨 암호화
API 보안
API 키 관리
- 키 생성 및 배포
- 키 순환 정책
- 키 사용량 모니터링
OAuth 2.0 / OpenID Connect
- 토큰 기반 인증
- JWT 서명 및 검증
- Refresh Token 보안
클라우드 환경 암호화
AWS 암호화 서비스
- KMS: 키 관리 서비스
- CloudHSM: 하드웨어 보안 모듈
- Certificate Manager: SSL/TLS 인증서 관리
Azure 암호화 서비스
- Key Vault: 키, 비밀, 인증서 관리
- Disk Encryption: 가상머신 디스크 암호화
- Storage Service Encryption: 저장소 자동 암호화
Google Cloud 암호화
- Cloud KMS: 키 관리
- Cloud HSM: 하드웨어 보안
- Envelope Encryption: 다층 암호화
모바일 앱 보안
앱 데이터 보호
- 로컬 데이터베이스 암호화
- Keychain/Keystore 활용
- 앱 내 통신 암호화
바이오메트릭 인증
- 지문, 얼굴 인식 활용
- Secure Enclave/TEE 보호
- 백업 인증 방법 제공
암호화 구현 모범 사례
보안 코딩 가이드라인
절대 하지 말아야 할 것
- 직접 암호화 알고리즘 구현 금지
- 하드코딩된 키 사용 금지
- 약한 알고리즘 사용 금지 (DES, MD5, SHA-1)
- 부적절한 난수 생성기 사용 금지
권장 사항
- 검증된 암호화 라이브러리 사용
- 최신 알고리즘과 키 길이 사용
- 정기적인 보안 업데이트
- 암호화 전문가 리뷰
성능 고려사항
암호화 성능 최적화
- 하드웨어 가속 활용 (AES-NI)
- 적절한 블록 크기 선택
- 병렬 처리 가능한 모드 사용
- 캐싱 전략 적용
성능 vs 보안 균형
- 사용 목적에 맞는 알고리즘 선택
- 네트워크 지연시간 고려
- 배터리 소모량 최적화 (모바일)
규정 준수
국내 법규
- 개인정보보호법: 개인정보 암호화 의무
- 정보통신망법: 정보보호 관리체계
- 전자금융거래법: 금융 데이터 보호
국제 표준
- FIPS 140-2: 암호화 모듈 보안 요구사항
- Common Criteria: 정보보안 제품 평가 기준
- PCI DSS: 카드 정보 보호 표준
암호화 공격과 대응
주요 공격 유형
브루트 포스 공격
- 모든 가능한 키 시도
- 대응: 충분한 키 길이 사용
사이드 채널 공격
- 전력 소모, 실행 시간 분석
- 대응: 상수 시간 알고리즘 사용
중간자 공격 (MITM)
- 통신 채널 감청 및 조작
- 대응: 인증서 검증, 핀닝
양자 컴퓨터 위협
- RSA, ECC 알고리즘 위험
- 대응: 양자 내성 암호화 연구
보안 사고 대응
키 노출 시 대응
- 즉시 키 폐기 및 차단
- 새로운 키 생성 및 배포
- 영향 범위 분석
- 보안 사고 보고
인증서 손상 시 대응
- 인증서 폐기 (CRL 등록)
- 새 인증서 발급
- 서비스 재구성
- 사용자 공지
미래 암호화 기술
양자 암호화
양자 키 분배 (QKD)
- 양자역학 원리 기반 키 교환
- 절대적 보안 보장
- 거리 제한, 높은 비용
동형 암호화
암호화된 상태에서 연산
- 데이터 복호화 없이 계산 수행
- 클라우드 컴퓨팅 보안 강화
- 성능 개선 필요
영지식 증명
정보 노출 없는 검증
- 비밀 정보 노출 없이 증명
- 블록체인, 인증 시스템 활용
- zk-SNARKs, zk-STARKs
실무 체크리스트
암호화 구현 점검사항
- [ ] 검증된 암호화 라이브러리 사용
- [ ] 적절한 키 길이 적용 (AES-256, RSA-2048+)
- [ ] 안전한 난수 생성기 사용
- [ ] 키 하드코딩 없음
- [ ] 정기적인 키 순환
- [ ] 약한 알고리즘 제거 (DES, MD5, SHA-1)
키 관리 점검사항
- [ ] 키 생성 정책 수립
- [ ] 안전한 키 저장소 구축
- [ ] 키 백업 및 복구 절차
- [ ] 키 접근 권한 관리
- [ ] 키 사용 모니터링
- [ ] 키 폐기 절차 수립
보안 운영 점검사항
- [ ] 정기적인 보안 업데이트
- [ ] 암호화 성능 모니터링
- [ ] 보안 사고 대응 계획
- [ ] 규정 준수 확인
- [ ] 직원 보안 교육
- [ ] 외부 보안 감사
암호화는 정보보안의 핵심 기술이지만, 올바른 구현과 운영이 전제되어야 진정한 보안 효과를 얻을 수 있습니다.
'IT정보' 카테고리의 다른 글
기술 문서 작성법 가이드 (0) | 2025.08.19 |
---|---|
IT 거버넌스 구축법 알아보기 (2) | 2025.08.19 |
개인정보보호법 준수 방법 알아보기 (5) | 2025.08.19 |
AWS 서비스 활용 가이드 (2) | 2025.08.19 |
클라우드 비용 최적화 가이드 (5) | 2025.08.19 |