동형 암호화(Homomorphic Encryption)는 암호화된 상태로 데이터를 연산할 수 있는 암호 기법이다. 복호화 없이도 데이터를 처리할 수 있어 클라우드 프라이버시 보호에 혁신적이다.
동형 암호화 유형
| 유형 | 지원 연산 | 횟수 | 속도 | 실용성 |
|---|
| PHE (부분적) | 덧셈 또는 곱셈만 | 무제한 | 빠름 | 높음 (Paillier) |
| SHE (다소간) | 덧셈 + 곱셈 | 제한적 | 중간 | 중간 |
| FHE (완전) | 모든 연산 | 무제한 | 매우 느림 | 낮음 (연구 단계) |
Paillier 암호 (부분 동형 - 덧셈)
python
# Paillier 암호 예시 (의사 코드)
# E(a) + E(b) = E(a + b) 성질 이용
def paillier_add(enc_a, enc_b, n_squared):
"""암호화된 두 값의 합을 복호화 없이 계산"""
return (enc_a * enc_b) % n_squared
# 실제 사용 예: 투표 집계
# 각 투표: E(1) 또는 E(0)
# 서버는 복호화 없이 합산: E(총 투표수) 계산
# 마지막에 한 번만 복호화
votes = [encrypt(1), encrypt(0), encrypt(1), encrypt(1)]
total_encrypted = reduce(paillier_add, votes)
total = decrypt(total_encrypted) # 복호화: 3
CKKS (근사 동형 암호)
python
# Microsoft SEAL 라이브러리 사용
import seal
# 파라미터 설정
parms = seal.EncryptionParameters(seal.scheme_type.ckks)
parms.set_poly_modulus_degree(8192)
parms.set_coeff_modulus(seal.CoeffModulus.Create(8192, [60, 40, 40, 60]))
scale = 2**40
context = seal.SEALContext(parms)
keygen = seal.KeyGenerator(context)
public_key = keygen.create_public_key()
secret_key = keygen.secret_key()
encryptor = seal.Encryptor(context, public_key)
evaluator = seal.Evaluator(context)
decryptor = seal.Decryptor(context, secret_key)
encoder = seal.CKKSEncoder(context)
# 암호화된 데이터로 연산
plain1 = encoder.encode([1.1, 2.2, 3.3], scale)
plain2 = encoder.encode([0.5, 1.0, 1.5], scale)
enc1 = encryptor.encrypt(plain1)
enc2 = encryptor.encrypt(plain2)
# 복호화 없이 곱셈
result_enc = evaluator.multiply(enc1, enc2)
result = decryptor.decrypt(result_enc)
# ≈ [0.55, 2.2, 4.95]
활용 사례
- •의료 데이터: 환자 데이터를 암호화한 채로 AI 모델 학습
- •금융: 암호화된 금융 데이터로 신용 분석
- •선거: 투표 집계 (Paillier)
- •프라이버시 보존 ML: 클라우드에서 개인정보 처리
현재 한계
FHE 성능 비교:
- 일반 연산: 1μs
- FHE 동일 연산: ~100,000μs (10만 배 느림)
- 최신 하드웨어 가속기로 100~1000배 단축 중
관련 문서
- •[[tls-advanced|TLS 1.3 심화]]
- •[[diffie-hellman|디피-헬만 키 교환]]
- •[[crypto-protocols|암호 프로토콜]]