- UUIDv47는 데이터베이스에는 정렬 가능한 UUIDv7을 저장하면서, 외부 API에는 UUIDv4처럼 보이는 값을 제공
- 타임스탬프 필드만 XOR 마스킹하여 UUIDv7의 시간 정보를 보호하고, 나머지 랜덤 필드는 그대로 유지함
- SipHash-2-4를 사용한 128비트 키로 마스킹하여, 키 노출 위험 없이 안전하게 정보 보호 가능
- encode/decode가 확정적이고 가역적이며, 랜덤성이 유지되어 충돌 위험이 낮음
- 벤치마크 결과 매우 빠른 성능과 간단한 통합 방법을 제공, PostgreSQL 등 데이터베이스와 쉽게 연동 가능함
프로젝트 개요 및 의의
- UUIDv47은 데이터베이스 내부에는 정렬 및 인덱싱에 유리한 UUIDv7을 저장하면서, 외부 API 및 시스템에는 UUIDv4처럼 보이는 값을 노출함으로써 개인정보 보호와 고성능 처리를 동시에 달성하는 오픈소스 C 라이브러리
- 타 UUID 변환 알고리듬에 비해 가역적 매핑, RFC 호환, 키 회수 불가 보안성, zero-deps, 단순 헤더 파일만 포함하는 구조 등에서차별화된 강점을 갖고 있음
주요 특징
- Header-only C (C89) , 외부 의존성 없이 간단한 통합 가능함
- UUIDv7의 타임스탬프 필드만 XOR 마스킹하여 시간 정보 노출 방지하고, 나머지 랜덤 필드는 변경하지 않음
- 키드 SipHash-2-4로 마스킹하여 128비트 키로 안전하게 정보 보호 가능함
- encode/decode 과정이 결정적이며 완전히 가역적임 (정확히 원형 복구 가능)
- 데이터베이스 저장용(v7)과 외부 노출용(v4) UUID 간 신속 매핑 지원
- 테스트 코드 및 벤치마크 도구 등 풍부한 예제 제공
사용 목적 및 이점
- DB 내 인덱스 locality 및 페이징 효율성을 극대화하는 정렬 가능한 UUIDv7 활용 가능함
- 외부에는 UUIDv4처럼 보이는 패턴만 노출하여 타임스탬프 유출 및 추적 방지
- SipHash를 사용하여 키 회수 불가능, 비밀키 안전 보장
- RFC 호환 버전/변종 비트 처리
- 동작 속도가 빨라 실시간 처리, 대량 생성 환경에서도 효율적임
주요 구조 및 내부 작동 원리
UUIDv7 Layout
- ts_ms_be: 48비트 big-endian 타임스탬프
- ver: high nibble 6번째 바이트 (0x7=DB, 0x4=외부)
- rand_a: 12비트 무작위값
- var: RFC variant (0b10)
- rand_b: 62비트 무작위값
마스킹 및 매핑 로직 (Façade mapping)
- 인코딩: ts48 XOR mask48(R), version=4 설정
- 디코딩: encTS XOR mask48(R), version=7 설정
- 랜덤 필드 변경 없음
- SipHash 인풋으로 10바이트 무작위 필드 사용
- XOR 마스킹은 키를 알면 즉시 역변환 가능
보안 모델
- 목표: 키가 입력을 선택적으로 줘도 노출되지 않는 것
- 구현: SipHash-2-4라는 키드 의사 랜덤 함수(PRF) 사용
- 128비트 키 활용, HKDF 등을 통해 키 파생 권장
- 키 회전 시 UUID 내부엔 저장하지 않고, 별도 작은 키ID 유지 권장
퍼블릭 API (C)
- uuidv47_encode_v4facade : v7→v4 변환
- uuidv47_decode_v4facade : v4→v7 복원
- 기타 버전설정, 파싱, 포매팅 관련 함수 제공
성능 및 벤치마크
- SipHash 마스킹(10B) 연산에서 14ns/op 이하, encode+decode 전체 라운드 트립 33ns/op 수준 (Apple M1 기준)
- 대량 UUID 생성·매핑 시에도 빠른 처리보장
- -O3 -march=native 옵션에서 최적 성능
통합 및 확장
- API 경계에서 encode/decode 처리 권장
- PostgreSQL 연동 시에는 C 확장 작성
- 샤딩할 때는 v4 façade를 xxh3, SipHash 등으로 해싱 가능
기타
- 다른 언어 포트: Go(n2p5/uuid47) 등 제공
- 추천 해시: xxHash는 비 PRF라 정보 유출 우려, SipHash 사용 권장
라이선스
- MIT 라이선스 (Stateless Limited, 2025)