[At-Rest 암호화] 저장된 데이터 보호하기
데이터베이스 암호화 : At-Rest 방식
기업이 보유한 데이터가 점점 더 민감하고 중요해지면서, 데이터베이스 수준에서의 암호화는 선택이 아닌 필수가 되었습니다. 특히 개인정보보호법, GDPR, HIPAA 등 다양한 규제에 대응하려면 저장된 데이터를 안전하게 보호할 수 있는 기술적 조치가 요구됩니다. 데이터베이스 암호화는 단순히 암호 알고리즘을 적용하는 것 이상의 고려가 필요합니다. 성능, 운영, 키 관리, 복구 시나리오 등 다양한 요소가 영향을 미치기 때문입니다.
이 글에서는 Transparent Data Encryption(TDE), API 기반 애플리케이션 암호화, 플러그인 기반 암호화, 하이브리드 암호화 방식 등 주요 기법을 비교하고, 어떤 상황에서 어떤 방식을 선택해야 하는지 구체적으로 설명합니다.
1. 데이터베이스 암호화란?
데이터베이스 암호화(Database Encryption)는 DB에 저장된 데이터를 암호화하여 비인가 접근으로부터 정보를 보호하는 기술입니다. 보통 다음 두 종류로 나뉩니다.
- 정적 데이터 암호화(At-Rest) : 저장된 데이터를 암호화 (예: TDE)
- 전송 중 데이터 암호화(In-Transit) : 네트워크 전송 중 데이터를 암호화 (예: TLS/SSL)
이 글에서는 At-Rest 암호화를 중심으로 설명합니다.
2. At-Rest 암호화 (정적 데이터 암호화)
디스크에 저장되어 있는 데이터를 암호화하는 방식입니다. 주로 DB 파일, 테이블, 컬럼, 백업 파일 등에 적용되며, 하드디스크나 SSD에 물리적으로 기록되는 데이터를 암호화합니다.
적용 구간 예시
- 데이터 파일 (DBMS의 테이블스페이스, 인덱스 파일 등)
- DB 백업 파일
- 로그 파일 (예: binlog, transaction log)
- 스냅샷 등 스토리지 계층 데이터
대표적인 기술 : TDE(Transparent Data Encryption), 파일 시스템 암호화(LUKS 등)
3. 주요 At-Rest 암호화 방식들
a. TDE (Transparent Data Encryption)
TDE는 데이터 파일 자체를 암호화하는 방식으로, 응용 프로그램이나 SQL 쿼리에는 변화를 주지 않아도 되는 방식입니다. 데이터 파일이 디스크에 기록될 때 자동으로 암호화되고, 메모리에서 읽을 때는 자동 복호화됩니다.
- 운영 부담 적음 : 코드 수정 없이 적용 가능합니다.
- 주요 DBMS 지원 : Oracle, SQL Server, PostgreSQL, MySQL 등에서 지원합니다.
- 성능 영향 있음 : I/O 성능에 일정 부분 영향이 있습니다.
예시 - Oracle TDE 설정 (간단 버전)
-- 마스터 키 생성
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "password";
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "password" WITH BACKUP;
-- 테이블스페이스 암호화
CREATE TABLESPACE secure_ts ENCRYPTION 'AES256' DEFAULT STORAGE(ENCRYPT);
b. API 기반 애플리케이션 암호화
애플리케이션 레벨에서 데이터를 수동으로 암호화하고, DB에는 암호화된 값을 저장하는 방식입니다. 암/복호화 로직이 API 또는 미들웨어 레이어에 포함됩니다.
- 정교한 제어 가능 : 필드 단위 암호화, 특정 열만 선택이 가능합니다.
- 비용 높은 개발 작업 : 애플리케이션 코드에 변경이 필요합니다.
- 키 관리 어려움 : 키 분실 시 복구 불가능합니다.
예시 - Java에서 AES 암호화
SecretKey key = new SecretKeySpec(secretKeyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encrypted = cipher.doFinal(plainText.getBytes());
c. 플러그인 기반 암호화 (Plugin-based Encryption)
DBMS의 확장 기능이나 보안 솔루션에서 제공하는 플러그인을 이용해 암호화를 처리하는 방식입니다. 예를 들어 MySQL의 Encryption Plugin 또는 MariaDB의 file_key_management 플러그인이 있습니다.
- DB 자체 기능을 활용하되 확장성이 존재합니다.
- 엔터프라이즈 제품에서는 감사 로그, 키 회전 기능 포함됩니다.
- 설정 복잡도는 제품에 따라 다릅니다.
예시 - MariaDB 플러그인 기반 암호화
[mysqld]
plugin_load_add = file_key_management
file_key_management_filename = /etc/mysql/encryption_keys.txt
encrypt_binlog = 1
d. 하이브리드 암호화 방식
TDE와 API 암호화를 조합하거나, DB-level 암호화와 Storage-level 암호화를 병행하는 방식입니다. 민감도에 따라 계층적으로 암호화 정책을 다르게 적용합니다.
- TDE : 전체 테이블 암호화를 지원합니다. (기본 보안 제공)
- API 암호화 : 주민등록번호, 비밀번호 등 민감 정보만 별도로 이중 암호화할 수 있습니다.
- 스토리지 암호화 : 운영체제 또는 스토리지 수준에서 암호화 처리 가능합니다. (예: LUKS, eCryptfs)
장점
- 보안 수준 극대화
- 데이터 노출 리스크 최소화
단점
- 복잡한 키 관리, 성능 저하 가능성
4. 암호화 방식 비교
방식 | 암호화 계층 | 장점 | 단점 |
TDE | DB 엔진 | 코드 수정 없음, 빠른 적용 | 필드 단위 제어 불가, 성능 저하 |
API | 애플리케이션 | 세밀한 제어, 일부 필드만 암호화 가능 | 개발 비용 증가, 키 관리 필요 |
Plugin | DB 확장 | 유연한 설정 가능 | 설정 복잡, DBMS 종속 |
Hybrid | 다중 계층 | 보안 강화 | 아키텍처 복잡성 증가 |
5. At-Rest 암호화 적용 시 고려할 요소
- 성능 : 대량의 데이터 처리 시 암호화로 인한 I/O 병목이 발생 할 수 있습니다.
- 키 관리 : 키 분실은 곧 데이터 손실이므로 KMS(AWS KMS, HashiCorp Vault 등) 도입을 고려하는 것이 좋습니다.
- 복구 전략 : 백업된 데이터도 암호화 상태 유지 여부 확인이 가능합니다.
- 감사(Audit) : 누가 어떤 데이터를 접근했는지 추적할 수 있어야 합니다.
6. 마무리
- 데이터베이스 암호화는 보안과 규정 준수를 위한 핵심 기술입니다.
- TDE는 적용이 쉬운 반면 필드 단위 제어가 어렵고, API 암호화는 정밀한 제어가 가능한 대신 구현 부담이 큽니다.
- 플러그인 방식은 제품 확장성을 제공하며, 하이브리드 방식은 최고 수준의 보안을 위한 전략입니다.
- 성능, 키 관리, 법적 요건, 개발 비용 등을 종합적으로 고려해 최적의 암호화 전략을 수립해야 합니다.
함께 보면 좋은 자료
블로그 글 :
[데이터베이스 암호화] In-Transit 암호화 방식 완전 정리
데이터베이스 암호화 : In-Transit 방식 기업 환경에서 데이터는 단순히 저장되어 있을 뿐만 아니라, 지속적으로 이동(전송)하며 사용됩니다. 특히 클라이언트와 데이터베이스 서버 간, 혹은 마이
dachaes-devlogs.tistory.com