Skip to content

assam258-5892/postgres

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57,735 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

 
 
 

Contributors

Languages

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