본문 바로가기
WIKI 기술 지식 베이스

Encryption

원문 보기 위키 갱신

Turso Database가 제공하는 저장 데이터(data at rest) 네이티브 암호화 기능이에요. 업계 표준 AEAD 알고리즘을 사용해 각 페이지를 개별적으로 암호화하며, 읽기 오버헤드는 최대 6%, 쓰기 오버헤드는 14% 수준으로 성능 영향이 작아요.

출처: 문서

본문

Turso Database는 업계 표준 AEAD 알고리즘으로 저장 데이터(data at rest)에 대한 네이티브 암호화를 제공해요. 각 데이터베이스 페이지가 개별적으로 암호화되기 때문에 어떤 환경에서도 데이터 무결성과 보안이 유지돼요.

  • 페이지 단위 암호화: 4 KiB 페이지마다 고유한 nonce로 개별 암호화해요
  • AEAD 알고리즘: AEGIS-256(빠르고 현대적)과 AES-GCM(NIST 승인)을 지원해요
  • 데이터 무결성: 내장된 인증 태그로 변조와 손상을 방지해요
  • 높은 성능: 읽기 오버헤드 최소 6%, 쓰기 오버헤드 14%
  • 인메모리 키: 암호화 키는 절대 디스크에 저장되지 않아요

암호화가 켜진 Turso Database는 이런 용도에 딱이에요.

민감한 금융 데이터의 규제 요구 사항을 충족해요 강력한 데이터 보호로 사용자 신뢰를 쌓아요 환자 데이터를 보호하고 HIPAA 컴플라이언스를 충족해요 학습 데이터와 모델 출력을 안전하게 지켜요

What's Encrypted

* 데이터가 담긴 모든 데이터베이스 페이지 — 데이터베이스 파일 — WAL(Write-Ahead Log) 파일 * 데이터베이스 헤더(첫 100바이트)

Generate an Encryption Key

보안 암호화 키를 16진수 형식으로 생성해요. 키 크기는 선택한 암호(cipher)에 따라 달라져요.

AEGIS-256 변형과 AES-256-GCM용이에요.
```bash
openssl rand -hex 32
```

출력 예시예요.

```
2d7a30108d3eb3e45c90a732041fe54778bdcf707c76749fab7da335d1b39c1d
```
AEGIS-128 변형과 AES-128-GCM용이에요.
```bash
openssl rand -hex 16
```

출력 예시예요.

```
5f3e2a8c9b1d4f6e7a2c8d4b9e1f3a6c
```
**키는 반드시 안전하게 보관하세요!** 암호화 키를 잃어버리면 암호화된 데이터베이스에 접근할 수 없어요. 키는 절대 디스크에 저장되지 않아요.

Create an Encrypted Database

`--experimental-encryption` 플래그를 쓰고 연결 URI에 암호와 키를 지정해요.
```bash
tursodb --experimental-encryption "file:encrypted.db?cipher=aegis256&hexkey=YOUR_HEX_KEY"
```

`YOUR_HEX_KEY`는 위에서 생성한 키로 바꿔 주세요.
대화형 셸에 들어가면 테이블을 만들고 데이터를 삽입해요.
```sql
CREATE TABLE secrets (id INT, data TEXT);
INSERT INTO secrets VALUES (1, 'sensitive information');
INSERT INTO secrets VALUES (2, 'confidential data');
```
셸을 나가고(`.quit` 입력) 키 없이 데이터베이스를 열어 보세요.
```bash
tursodb encrypted.db
```

데이터에 접근할 수 없을 거예요. 데이터베이스가 디스크에서 암호화되어 있어요.

Open an Encrypted Database

기존 암호화 데이터베이스에 접근하려면 생성 때 사용한 것과 동일한 암호와 키를 제공해요.

tursodb --experimental-encryption "file:encrypted.db?cipher=aegis256&hexkey=YOUR_HEX_KEY"

그다음 데이터를 조회해요.

SELECT * FROM secrets;

Supported Ciphers

Turso Database는 두 가지 AEAD 암호화 알고리즘의 여러 변형을 지원해요. 성능과 호환성 사이에서 서로 다른 트레이드오프를 제공해요.

AES-GCM

컴플라이언스 요구 사항에 맞는 NIST 승인 표준이에요. 여러 산업에서 널리 지원돼요.

Cipher Key Size URI Value Use Case
AES-128-GCM 128-bit (16 bytes) aes128gcm 128-bit 요구 사항의 컴플라이언스
AES-256-GCM 256-bit (32 bytes) aes256gcm 컴플라이언스를 위한 최대 보안

AEGIS

속도에 최적화된 현대적인 고성능 암호 계열이에요. 대부분의 용도에 권장돼요.

Cipher Key Size URI Value Use Case
AEGIS-128L 128-bit (16 bytes) aegis128l 균형 잡힌 성능, 128-bit 보안
AEGIS-128X2 128-bit (16 bytes) aegis128x2 2배 병렬 처리
AEGIS-128X4 128-bit (16 bytes) aegis128x4 4배 병렬 처리, 최대 속도
AEGIS-256 256-bit (32 bytes) aegis256 균형 잡힌 256-bit 보안
AEGIS-256X2 256-bit (32 bytes) aegis256x2 2배 병렬 처리, 256-bit
AEGIS-256X4 256-bit (32 bytes) aegis256x4 4배 병렬, 최대 속도와 보안
**암호 선택하기:**
  • 128-bit 암호화에는 aegis128L, 256-bit 암호화에는 aegis256(기본 권장)을 사용하세요
  • 하드웨어가 지원한다면 다른 AEGIS 변형도 쓸 수 있어요: aegis128X2, aegis128X4, aegis256x2, aegis256x4
  • AES라면 128-bit 암호화에는 aes128gcm, 256-bit 암호화에는 aes256gcm을 사용하세요

URI Parameters

암호화 데이터베이스를 만들거나 열 때는 다음 URI 형식을 사용해요.

file:database.db?cipher=CIPHER&hexkey=HEX_KEY
Parameter Required Description Values
cipher Yes 암호화 알고리즘 Supported Ciphers 참고
hexkey Yes 16진수 형식의 암호화 키 32자 16진수(128-bit) 또는 64자 16진수(256-bit)

예시 URI:

# 256-bit 키를 쓰는 AEGIS-256
file:encrypted.db?cipher=aegis256&hexkey=2d7a30108d3eb3e45c90a732041fe54778bdcf707c76749fab7da335d1b39c1d

# 128-bit 키를 쓰는 AES-128-GCM
file:encrypted.db?cipher=aes128gcm&hexkey=5f3e2a8c9b1d4f6e7a2c8d4b9e1f3a6c

# 256-bit 키를 쓰는 AEGIS-256X4 (최대 성능)
file:encrypted.db?cipher=aegis256x4&hexkey=2d7a30108d3eb3e45c90a732041fe54778bdcf707c76749fab7da335d1b39c1d

Performance

암호화 오버헤드는 특히 작은 데이터베이스에서 최소 수준이에요.

  • 읽기 연산: AEGIS-256 기준 약 6% 오버헤드
  • 쓰기 연산: AEGIS-256 기준 약 14% 오버헤드
  • 전체: 혼합 워크로드 기준 전체 시간 오버헤드 약 1-3%

자세한 벤치마크는 암호화 발표 블로그 글을 참고하세요.

Coming Soon

개발 중인 향후 암호화 기능들이에요.

  • 패스프레이즈 기반 키 유도: 날것의 키 대신 기억하기 쉬운 패스프레이즈 사용
  • 기존 데이터베이스 암호화: 암호화되지 않은 데이터베이스를 암호화 형식으로 마이그레이션
  • 키 로테이션: 데이터 손실 없이 암호화 키 갱신

더 알아보기 (Learn more)