본문 바로가기
IT정보

암호화 기술 활용법 가이드

by 오늘의 테크 2025. 8. 20.

암호화 기본 개념

암호화란?

정의: 평문(원본 데이터)을 암호문으로 변환하여 인가되지 않은 자의 접근으로부터 정보를 보호하는 기술

암호화 목적

  • 기밀성 (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")

디지털 서명

동작 원리

  1. 서명 생성: 개인키로 메시지 해시값 서명
  2. 서명 검증: 공개키로 서명 검증
  3. 무결성 확인: 메시지 변조 여부 확인
  4. 인증: 서명자 신원 확인

PKI (Public Key Infrastructure)

구성 요소

  • CA (Certificate Authority): 인증서 발급 기관
  • 인증서: 공개키와 신원 정보 결합
  • CRL (Certificate Revocation List): 폐기된 인증서 목록
  • OCSP (Online Certificate Status Protocol): 실시간 인증서 상태 확인

인증서 검증 과정

  1. 인증서 유효 기간 확인
  2. CA 서명 검증
  3. 인증서 폐기 여부 확인
  4. 체인 검증 (루트 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)

키 생명주기 관리

키 상태 관리

  1. 생성 (Generation): 안전한 키 생성
  2. 배포 (Distribution): 안전한 키 전달
  3. 사용 (Usage): 용도별 키 사용
  4. 갱신 (Renewal): 주기적 키 교체
  5. 폐기 (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 알고리즘 위험
  • 대응: 양자 내성 암호화 연구

보안 사고 대응

키 노출 시 대응

  1. 즉시 키 폐기 및 차단
  2. 새로운 키 생성 및 배포
  3. 영향 범위 분석
  4. 보안 사고 보고

인증서 손상 시 대응

  1. 인증서 폐기 (CRL 등록)
  2. 새 인증서 발급
  3. 서비스 재구성
  4. 사용자 공지

미래 암호화 기술

양자 암호화

양자 키 분배 (QKD)

  • 양자역학 원리 기반 키 교환
  • 절대적 보안 보장
  • 거리 제한, 높은 비용

동형 암호화

암호화된 상태에서 연산

  • 데이터 복호화 없이 계산 수행
  • 클라우드 컴퓨팅 보안 강화
  • 성능 개선 필요

영지식 증명

정보 노출 없는 검증

  • 비밀 정보 노출 없이 증명
  • 블록체인, 인증 시스템 활용
  • zk-SNARKs, zk-STARKs

실무 체크리스트

암호화 구현 점검사항

  • [ ] 검증된 암호화 라이브러리 사용
  • [ ] 적절한 키 길이 적용 (AES-256, RSA-2048+)
  • [ ] 안전한 난수 생성기 사용
  • [ ] 키 하드코딩 없음
  • [ ] 정기적인 키 순환
  • [ ] 약한 알고리즘 제거 (DES, MD5, SHA-1)

키 관리 점검사항

  • [ ] 키 생성 정책 수립
  • [ ] 안전한 키 저장소 구축
  • [ ] 키 백업 및 복구 절차
  • [ ] 키 접근 권한 관리
  • [ ] 키 사용 모니터링
  • [ ] 키 폐기 절차 수립

보안 운영 점검사항

  • [ ] 정기적인 보안 업데이트
  • [ ] 암호화 성능 모니터링
  • [ ] 보안 사고 대응 계획
  • [ ] 규정 준수 확인
  • [ ] 직원 보안 교육
  • [ ] 외부 보안 감사

암호화는 정보보안의 핵심 기술이지만, 올바른 구현과 운영이 전제되어야 진정한 보안 효과를 얻을 수 있습니다.