본문으로 건너뛰기

데이터 암호화

Connect Base는 전송 중(in transit)과 저장 시(at rest) 모두 데이터를 암호화합니다.

전송 중 암호화 (TLS)

모든 API 통신은 TLS 1.3으로 암호화됩니다.

적용 범위

  • API 요청/응답
  • WebSocket 연결 (cb.realtime, cb.webrtc, cb.game)
  • 파일 업로드/다운로드 (Presigned URL 포함)

자동 적용

SDK는 기본적으로 HTTPS 엔드포인트를 사용합니다. 별도 설정이 필요하지 않습니다.

typescript
const cb = new ConnectBase({
    publicKey: 'cb_pk_...'
    // baseUrl 기본값: https://api.connectbase.world
})

저장 시 암호화

데이터베이스 암호화

저장된 모든 row 는 AES-256으로 암호화됩니다.

  • 자동 암호화/복호화 (애플리케이션 코드 변경 불필요)
  • 키 관리는 Connect Base 가 처리
  • 성능 영향 최소화

파일 스토리지 암호화

업로드된 파일도 Object Storage 에서 암호화되어 저장됩니다.

typescript
// 파일 업로드 시 자동 암호화 — 별도 옵션 불필요
const result = await cb.storage.uploadFile('stg_xxx', file)

필드 레벨 암호화

특정 컬럼만 추가로 암호화할 수 있습니다 (AES-256-GCM). 컬럼 생성 시 encrypted: true 옵션을 지정하세요.

typescript
// REST API 또는 콘솔의 컬럼 추가에서 encrypted: true 지정
await fetch('https://api.connectbase.world/v1/public/tables/tbl_users/columns', {
    method: 'POST',
    headers: {
        'X-Public-Key': 'cb_pk_...',
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        name: 'ssn',
        data_type: 'string',
        is_required: true,
        order: 5,
        encrypted: true   // 필드 레벨 암호화 활성화
    })
})

📌 암호화된 필드의 제약:

  • DB 레벨 필터/정렬이 불가합니다 (값이 암호문이므로)
  • 앱 레벨에서 조회한 후 메모리에서 검색해야 합니다
  • 서버에 SECRET_ENCRYPTION_KEY 환경 변수가 설정되어 있어야 합니다

사용 시점

typescript
// 저장 — SDK 호출은 일반 컬럼과 동일. 서버에서 자동 암호화
await cb.database.createData('tbl_users', {
    data: {
        email: '[email protected]',
        ssn: '123-45-6789'   // 자동 암호화되어 저장
    }
})

// 조회 — 자동 복호화
const row = await cb.database.getDataById('tbl_users', 'row_xxx')
console.log(row.data.ssn)  // '123-45-6789'

키 관리

마스터 키

  • Connect Base 가 관리
  • HSM(Hardware Security Module) 또는 KMS 에 저장
  • 정기적으로 자동 로테이션

데이터 암호화 키 (DEK)

  • 각 앱별로 고유한 키 생성
  • 마스터 키로 암호화되어 저장 (envelope encryption)

📌 SDK 에는 키 로테이션 메서드가 노출되어 있지 않습니다. 키 로테이션이 필요하면 Connect Base 지원팀에 문의하세요.