투명 데이터 암호화(TDE) 기능이 통합된 PostgreSQL
이 저장소는 PostgreSQL 코어에 SMGR/WAL 계층 암호화를 통합하고 pg_inzent_tde 확장을 포함하여 2계층 투명 데이터 암호화(TDE)를 제공하는 PostgreSQL 포크입니다.
본 프로젝트는 PostgreSQL의 서로 다른 계층에서 동작하는 2가지 TDE 구현을 통합하고 있습니다:
📍 암호화 경계: Storage Manager (SMGR) 및 Write-Ahead Log (WAL) 계층
PostgreSQL 코어에 통합되어 모든 데이터를 디스크 I/O 시점에 자동 암호화합니다.
-
Buffer Pages 암호화 (SMGR 계층)
- 8KB 페이지 단위 In-place 암호화
- 기본: GCM/AES-192 (하드웨어 가속)
- 선택: AES, ARIA, LEA, SEED (128/192/256-bit)
- 페이지 헤더 확장 (24B → 64B, IV/TAG 내장)
- 모든 테이블 데이터, 인덱스, TOAST 자동 암호화
-
WAL Records 암호화 (XLog 계층)
- XLog 레코드 단위 암호화
- 기본: CBC/AES-128/BIT
- Torn Page 복구 가능 설계 (레코드 독립 암호화)
- 트랜잭션 로그 완전 암호화
-
System Wallet 자동 관리
- initdb 시 Auto-login Wallet 자동 생성
- 서버 시작 시 비밀번호 없이 자동 로드
- 애플리케이션 투명성 완전 보장
- 사용자 개입 불필요
📍 암호화 경계: Table Access Method (TAM) 계층
pg_inzent_tde 확장으로 선택한 테이블만 암호화합니다.
-
테이블별 선택적 암호화
USING heap_izt_tde로 테이블 생성- 다양한 암호화 알고리즘 선택 (AES, ARIA, LEA, SEED)
- Wallet 수동 관리 (생성, 열기, 닫기)
-
세밀한 암호화 제어
- 테이블별 암호화 알고리즘 변경 가능
- 암호화 키 순환 지원
- 역할 기반 접근 제어 (RBAC)
- PostgreSQL Core 16.11: SMGR/WAL 암호화 통합
- pg_inzent_tde 확장: TAM 계층 선택적 암호화
- inzent_tde 라이브러리: 공통 암호화 엔진 (서브모듈)
- x86_64: AES-NI, SHA Extensions 활용
- ARM64: Crypto Extensions, NEON 최적화
빌드 및 설치 방법은 빌드 및 릴리스 문서를 참조하세요.
# PostgreSQL 데이터 디렉토리 초기화
# ✅ System Wallet 자동 생성 및 로드
# 기본 알고리즘: SMGR=GCM/AES-192, WAL=CBC/AES-128/BIT
initdb -D /var/lib/pgsql/data
# 또는 암호화 알고리즘 선택 (initdb 시점에만 가능)
# 예: 국산 고성능 알고리즘
initdb -D /var/lib/pgsql/data \
--smgr-algorithm="GCM/LEA-128" \
--wal-algorithm="CTR/LEA-128"
# PostgreSQL 시작 (Auto-login Wallet 자동 로드)
pg_ctl -D /var/lib/pgsql/data start
# Auto-login Wallet 재생성 (하드웨어 변경, 서버 이전 시)
pg_ctl create-autologin -D /var/lib/pgsql/data
# 데이터베이스 접속
psql -d postgres-- 일반 테이블 생성 (자동으로 SMGR 계층에서 암호화됨)
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT,
email VARCHAR(255)
);
-- 데이터 입력 (자동으로 암호화되어 저장)
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
-- 데이터 조회 (자동으로 복호화되어 출력)
SELECT * FROM users;✅ 완전 투명: initdb 이후 모든 테이블이 자동으로 암호화됩니다. 추가 설정 불필요.
선택한 테이블에만 암호화를 적용하고 싶다면:
-- pg_inzent_tde 확장 생성
CREATE EXTENSION pg_inzent_tde;
-- Wallet 생성 및 열기
SELECT izt_tde_wallet__create('SecurePassword123!');
SELECT izt_tde_wallet__open('SecurePassword123!');
-- 암호화된 테이블 생성 (USING heap_izt_tde)
CREATE TABLE sensitive_data (
id SERIAL PRIMARY KEY,
personal_info TEXT,
credit_card VARCHAR(16)
) USING heap_izt_tde;
-- 데이터 조작
INSERT INTO sensitive_data (personal_info, credit_card)
VALUES ('John Doe', '1234-5678-9012-3456');
SELECT * FROM sensitive_data;본 프로젝트와 관련된 상세 문서는 다음과 같습니다:
- 통합 설계서 Ⅰ - 프로젝트 개요 및 요구사항
- 통합 설계서 Ⅱ - SMGR 계층 Buffer Pages 암호화
- 통합 설계서 Ⅲ - WAL 계층 XLog Records 암호화
- 통합 설계서 Ⅳ - 암호화 키 관리 및 Wallet 시스템
- 통합 설계서 Ⅴ - 성능 최적화 및 하드웨어 가속
- 성능 테스트 결과 - 성능 벤치마크 결과
- pg_inzent_tde README - TAM 확장 개요 및 변경 이력
postgres/ # PostgreSQL 16.11 소스 (공식 포크)
├── contrib/
│ ├── pg_inzent_tde/ # TDE 확장 모듈
│ │ ├── inzent_tde/ # 암호화 라이브러리 (서브모듈)
│ │ ├── doc/ # TAM 확장 문서
│ │ ├── sql/ # 회귀 테스트
│ │ └── README.md # TDE 확장 상세 문서
│ └── ... # 기타 PostgreSQL contrib 모듈
├── docs/
│ └── specifications/ # TDE 프로젝트 문서
│ ├── 20X_TDE_통합_설계서 Ⅰ~Ⅴ.md # 설계 문서
│ ├── 403_TDE_성능_테스트_결과.md # 성능 테스트
│ ├── 500_TDE_빌드_및_릴리스.md # 빌드 가이드
│ ├── 600_TDE_사용자_매뉴얼.md # 사용자 가이드
│ └── 601_TDE_운영자_매뉴얼.md # 운영자 가이드
├── src/ # PostgreSQL 코어 소스
│ ├── backend/
│ │ ├── access/transam/
│ │ │ ├── xloginsert.c # WAL Insert 암호화
│ │ │ └── xlogreader.c # WAL Reader 암복호화
│ │ ├── backup/
│ │ │ └── basebackup.c # 베이스 백업 암복호화
│ │ ├── bootstrap/
│ │ │ └── bootstrap.c # 부트스트랩 모드 System Wallet 로드
│ │ ├── commands/
│ │ │ └── dbcommands.c # 데이터베이스 버전 검증
│ │ ├── postmaster/
│ │ │ └── postmaster.c # Postmaster System Wallet 로드
│ │ ├── storage/smgr/
│ │ │ └── md.c # SMGR Buffer Pages 암복호화
│ │ └── utils/init/
│ │ └── miscinit.c # System Wallet 생성 및 초기화
│ ├── bin/
│ │ ├── initdb/
│ │ │ └── initdb.c # 초기화 및 Wallet 생성
│ │ ├── pg_checksums/
│ │ │ └── pg_checksums.c # 체크섬 도구 암복호화
│ │ ├── pg_ctl/
│ │ │ └── pg_ctl.c # Auto-login Wallet 관리
│ │ ├── pg_resetwal/
│ │ │ └── pg_resetwal.c # WAL 리셋 도구
│ │ ├── pg_rewind/
│ │ │ ├── pg_rewind.c # 리와인드 도구 암복호화
│ │ │ └── filemap.c # 파일 매핑
│ │ ├── pg_upgrade/
│ │ │ └── server.c # 업그레이드 도구
│ │ ├── pg_verifybackup/
│ │ │ └── pg_verifybackup.c # 백업 검증 도구
│ │ └── pg_waldump/
│ │ └── pg_waldump.c # WAL 덤프 도구 암복호화
│ └── include/
│ ├── access/xlogrecord.h # WAL 레코드 구조
│ └── storage/bufpage.h # 페이지 헤더 확장 (24B→64B)
└── README.md # 이 문서
TDE_16_X: 메인 작업 브랜치- PostgreSQL 공식 릴리스 + TDE 기능 통합
- 모든 개발/릴리스/배포의 최종 목표
EXPERDB_16_X: 호환성 테스트 브랜치- PostgreSQL 공식 릴리스만 포함 (TDE 제외)
- 공식 PostgreSQL과 pg_inzent_tde 확장의 호환성 테스트용
postgres/REL_16_STABLE: PostgreSQL 16 공식 stable 브랜치 (지속 업데이트)postgres/REL_16_X: PostgreSQL 16.X 릴리스 태그 (불변)
상세한 빌드 방법, 테스트 실행, 릴리스 절차는 다음 문서를 참조하세요:
- 빌드 및 릴리스 - TDE 통합 빌드, 테스트, 배포 가이드
- pg_inzent_tde 확장 - TAM 계층 확장 모듈 개발 가이드
빠른 개발 환경 구축:
git clone https://github.com/assam258-5892/docker-atelier.git
cd docker-atelier
./docker-build
./tmux-reload 16- Rocky Linux 8, 9 (RHEL 호환)
- Ubuntu 22.04 LTS, 24.04 LTS
- x86_64 (AMD64): Intel, AMD 프로세서
- AES-NI 하드웨어 가속 지원
- ARM64 (AArch64): Apple Silicon, ARM 서버
- Crypto Extensions 하드웨어 가속 지원
- 지원: PostgreSQL 16.7 이상
- 현재: PostgreSQL 16.11
- 미지원: PostgreSQL 15 이하, 17 이상
TDE 확장의 제한사항 및 알려진 이슈는 pg_inzent_tde README - 제한사항을 참조하세요.