Skip to content

Mirror of the official PostgreSQL GIT repository. Note that this is just a *mirror* - we don't work with pull requests on github. To contribute, please see https://wiki.postgresql.org/wiki/Submitting_a_Patch

Notifications You must be signed in to change notification settings

assam258-5892/postgres

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PostgreSQL with Inzent TDE

PostgreSQL Platform Architecture

투명 데이터 암호화(TDE) 기능이 통합된 PostgreSQL

이 저장소는 PostgreSQL 코어에 SMGR/WAL 계층 암호화를 통합하고 pg_inzent_tde 확장을 포함하여 2계층 투명 데이터 암호화(TDE)를 제공하는 PostgreSQL 포크입니다.

🌟 주요 특징

🔐 2계층 투명 데이터 암호화(TDE)

본 프로젝트는 PostgreSQL의 서로 다른 계층에서 동작하는 2가지 TDE 구현을 통합하고 있습니다:

1️⃣ SMGR/WAL 계층 암호화 (코어 통합)

📍 암호화 경계: 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 자동 생성
    • 서버 시작 시 비밀번호 없이 자동 로드
    • 애플리케이션 투명성 완전 보장
    • 사용자 개입 불필요

2️⃣ TAM 계층 암호화 (pg_inzent_tde 확장)

📍 암호화 경계: 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 최적화

🚀 빠른 시작

빌드 및 설치 방법빌드 및 릴리스 문서를 참조하세요.

1. SMGR/WAL 자동 암호화 (System Wallet)

# 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 이후 모든 테이블이 자동으로 암호화됩니다. 추가 설정 불필요.

2. TAM 선택적 암호화 (pg_inzent_tde)

선택한 테이블에만 암호화를 적용하고 싶다면:

-- 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;

📚 문서

본 프로젝트와 관련된 상세 문서는 다음과 같습니다:

설계 문서

사용자 문서

테스트 및 검증

TDE 확장


🏗️ 프로젝트 구조

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 릴리스 태그 (불변)

🛠️ 개발

빌드 및 테스트

상세한 빌드 방법, 테스트 실행, 릴리스 절차는 다음 문서를 참조하세요:

개발 환경 (Docker Atelier)

빠른 개발 환경 구축:

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 버전

  • 지원: PostgreSQL 16.7 이상
  • 현재: PostgreSQL 16.11
  • 미지원: PostgreSQL 15 이하, 17 이상

🚧 제한사항

TDE 확장의 제한사항 및 알려진 이슈는 pg_inzent_tde README - 제한사항을 참조하세요.

About

Mirror of the official PostgreSQL GIT repository. Note that this is just a *mirror* - we don't work with pull requests on github. To contribute, please see https://wiki.postgresql.org/wiki/Submitting_a_Patch

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 84.9%
  • PLpgSQL 6.5%
  • Perl 4.0%
  • Yacc 1.3%
  • Makefile 0.7%
  • Meson 0.6%
  • Other 2.0%