데이터베이스 암호화 전략과 키 관리 실무

저장·전송·애플리케이션 레벨 데이터베이스 암호화 방식과 알고리즘, 키 관리, 규제 대응 사항을 정리한다.

2026-08-14 · 최초 발행 2025-05-23

암호화는 데이터베이스 밖과 안에서 서로 다른 위협을 막는다

데이터베이스 암호화는 저장된 민감 정보를 암호화 알고리즘으로 변환해, 권한이 없는 사용자가 내용을 읽거나 활용하지 못하게 하는 기술이다. 개인정보보호법, GDPR, HIPAA 같은 규제 준수와도 연결된다.

데이터 유출이 발생하더라도 암호문은 해독이 어려워 2차 피해를 줄일 수 있다. 정보보안의 CIA 요소 가운데 기밀성을 지키는 핵심 수단이기도 하다.

보호 지점에 따라 암호화 방식을 나눈다

저장 매체에 남는 데이터를 보호하는 방식

저장 데이터 암호화는 디스크나 스토리지에 기록되는 데이터를 대상으로 한다. 데이터베이스 파일 자체를 암호화하므로 물리적 미디어가 도난당한 경우에도 데이터를 보호할 수 있다.

  • TDE(Transparent Data Encryption): 데이터베이스 엔진이 읽기·쓰기 과정에서 암호화와 복호화를 자동 수행한다.
  • 파일 시스템 암호화: 운영체제 레벨에서 파일 시스템을 암호화한다.
  • 스토리지 레벨 암호화: 하드웨어 레벨에서 전체 스토리지를 암호화한다.

네트워크 구간의 노출을 줄이는 방식

전송 중 데이터 암호화는 네트워크를 오가는 데이터를 보호한다. SQL 쿼리와 결과 데이터가 네트워크에서 스니핑되는 상황을 막는 데 사용한다.

  • SSL/TLS: 데이터베이스 클라이언트와 서버 사이의 통신 채널을 암호화한다.
  • SSH 터널링: 보안 터널로 데이터베이스 연결을 보호한다.
  • VPN: 가상 사설망으로 전체 네트워크 트래픽을 암호화한다.

애플리케이션에서 먼저 암호화하는 방식

애플리케이션 레벨 암호화는 데이터가 데이터베이스에 저장되기 전에 애플리케이션에서 암호화한다. 데이터베이스 관리자도 원본 데이터에 접근할 수 없으므로, DBA나 클라우드 제공업체 같은 내부자 위협으로부터 데이터를 보호할 수 있다.

  • 컬럼 레벨 암호화: 특정 컬럼만 골라 암호화한다.
  • 필드 레벨 암호화: 데이터베이스에 저장하기 전에 애플리케이션에서 암호화한다.
데이터베이스 암호화저장 데이터 암호화전송 데이터 암호화애플리케이션 레벨 암호화TDE파일 시스템 암호화스토리지 레벨 암호화SSL/TLSSSH 터널링VPN컬럼 레벨 암호화필드 레벨 암호화

암호화와 무결성 검증에 쓰이는 알고리즘

대칭키 암호화는 하나의 키로 암호화와 복호화를 처리한다. 처리 속도는 빠르지만 키를 공유하고 관리하기 어렵다.

  • AES(Advanced Encryption Standard): 128, 192, 256비트 키 길이를 지원하며 현재 가장 널리 사용된다.
  • 3DES(Triple DES): DES를 3번 적용한 알고리즘으로 레거시 시스템에서 사용된다.
  • Blowfish/Twofish: 빠른 처리 속도와 높은 보안성을 제공한다.

비대칭키 암호화는 공개키와 개인키 쌍으로 암호화와 복호화를 수행한다. 키 분배 문제를 해결하지만 대칭키보다 처리 속도는 느리다.

  • RSA: 소인수 분해의 난해성에 기반하며 키 교환과 디지털 서명에 활용된다.
  • ECC(Elliptic Curve Cryptography): 타원곡선 이론을 기반으로 하며, 짧은 키로 높은 보안성을 제공한다.
  • Diffie-Hellman: 안전한 키 교환 프로토콜이다.

해시 함수는 데이터를 고정 길이의 해시값으로 바꾸는 단방향 변환이다. 복호화할 수 없으며, 데이터 무결성 검증과 비밀번호 저장에 사용한다.

  • SHA-256/SHA-3: 보안성이 높은 해시 함수다.
  • PBKDF2, BCrypt, Argon2: 솔트와 반복 처리를 적용하는 비밀번호 저장 특화 해시 함수다.

DBMS 기능과 키 관리 체계를 함께 설계한다

상용 DBMS는 자체 암호화 기능을 제공한다.

  • Oracle TDE(Transparent Data Encryption): 테이블스페이스 또는 컬럼 레벨 암호화를 지원한다.
  • SQL Server TDE/Always Encrypted: 데이터베이스 또는 컬럼 레벨 암호화를 지원한다.
  • MySQL/MariaDB 데이터 암호화: AES_ENCRYPT/AES_DECRYPT 함수 및 InnoDB 테이블스페이스 암호화를 제공한다.
  • PostgreSQL pgcrypto: 다양한 암호화 함수를 제공한다.
스토리지데이터베이스 엔진애플리케이션스토리지데이터베이스 엔진애플리케이션TDE 적용됨평문 데이터 전송데이터 암호화암호화된 데이터 저장암호화된 데이터 로드데이터 복호화평문 데이터 반환

암호화 키는 안전하게 생성하고 저장하며, 교체와 폐기까지 관리해야 한다. HSM(Hardware Security Module)은 키 생성과 저장을 위한 하드웨어 장치이고, AWS KMS나 Azure Key Vault 같은 KMS(Key Management Service)는 클라우드 기반 키 관리 서비스다.

마스터 키, KEK(Key Encryption Key), DEK(Data Encryption Key)를 두는 키 계층 구조도 사용할 수 있다. 키 교체(Key Rotation)는 정기적인 키 변경으로 보안을 강화하는 방식이다.

암호화 범위와 검색 성능의 균형

암호화에는 성능 오버헤드가 따른다. 민감 정보가 담긴 컬럼만 암호화하는 선택적 암호화로 부담을 조절할 수 있다.

암호화된 필드는 검색 성능이 떨어질 수 있다. 동일한 입력에서 동일한 암호문을 생성하는 결정론적 암호화는 인덱싱에 활용할 수 있으며, 원본 데이터 대신 토큰을 저장하고 인덱싱하는 토큰화(Tokenization)도 방안이 된다. 자주 접근하는 복호화 데이터를 캐싱하는 전략도 고려할 수 있다.

구현 코드로 보는 적용 방식

Oracle TDE

-- 암호화 지갑 생성 및 열기
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "strongpassword";
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "strongpassword";

-- 컬럼 레벨 암호화
CREATE TABLE customers (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(100),
    ssn VARCHAR2(20) ENCRYPT USING 'AES256',
    credit_card VARCHAR2(30) ENCRYPT USING 'AES256'
);

-- 테이블스페이스 암호화
CREATE TABLESPACE secure_ts
    DATAFILE '/path/to/datafile.dbf' SIZE 100M
    ENCRYPTION USING 'AES256'
    DEFAULT STORAGE(ENCRYPT);

MySQL 애플리케이션 레벨 암호화

-- AES 암호화/복호화 함수 사용
INSERT INTO customers (name, credit_card)
VALUES ('John Doe', AES_ENCRYPT('1234-5678-9012-3456', 'encryption_key'));

-- 데이터 조회 및 복호화
SELECT name, CONVERT(AES_DECRYPT(credit_card, 'encryption_key') USING utf8)
FROM customers;

Java 애플리케이션 레벨 암호화

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class DatabaseEncryption {
    private static final String ALGORITHM = "AES";
    private static final byte[] KEY = "a_secure_32byte_key_for_aes_256".getBytes();
    
    public static String encrypt(String data) throws Exception {
        SecretKeySpec keySpec = new SecretKeySpec(KEY, ALGORITHM);
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, keySpec);
        byte[] encryptedData = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedData);
    }
    
    public static String decrypt(String encryptedData) throws Exception {
        SecretKeySpec keySpec = new SecretKeySpec(KEY, ALGORITHM);
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, keySpec);
        byte[] decodedData = Base64.getDecoder().decode(encryptedData);
        byte[] decryptedData = cipher.doFinal(decodedData);
        return new String(decryptedData);
    }
}

규제와 운영 위험을 도입 전부터 확인한다

암호화 요구사항은 산업별 규제와 맞물린다. GDPR(EU)은 개인정보 보호를 위한 기술적 조치를 요구하며, HIPAA(미국 의료)는 PHI(Protected Health Information) 보호를 요구한다. PCI DSS는 카드 정보 보호를 요구하고 카드번호 암호화를 필수로 둔다. 한국 개인정보보호법은 주민등록번호 등 고유식별정보를 저장할 때 암호화를 의무화한다.

기존 시스템에 암호화를 도입할 때는 다운타임을 줄이기 위한 점진적 마이그레이션 전략이 필요하다. 암호화 키를 잃으면 복구할 수 없으므로 백업과 복구 전략을 마련해야 하며, 사전 테스트로 성능 영향을 확인해야 한다. 키 분실이나 유출 상황에 대응할 수 있도록 키 관리 프로세스도 수립한다.

동형 암호화(Homomorphic Encryption)는 암호화된 상태에서 연산할 수 있는 기술이다. 양자내성 암호화(Post-Quantum Cryptography)는 양자컴퓨터 공격에 대비하며, 제로 지식 증명(Zero-Knowledge Proofs)은 데이터 노출 없이 인증할 수 있게 한다. Intel SGX, AMD SEV 등 하드웨어 기반 보안 기술을 활용하는 엔클레이브 기반 보안(Enclave-based Security)도 있다.

보호 목표에 맞춰 암호화 체계를 운영한다

데이터베이스 암호화는 현대 시스템의 데이터 보호에 필요한 요소다. 전체 데이터를 암호화할지, 민감한 데이터만 선택할지 범위를 먼저 정하고 보안 목표에 맞는 암호화 수준과 알고리즘을 선택해야 한다.

키의 생성·저장·백업·교체·폐기 전략을 갖추고, 성능 영향을 줄이는 방안도 마련한다. 정기적인 보안 감사와 취약점 평가, 지속적인 모니터링 및 보안 업데이트로 암호화 체계를 강화할 수 있다.

데이터베이스 암호화TDE키 관리개인정보보호정보보안