보안

암호화 모델

.rkvey v5 형식: 프리앰블, 컴파트먼트별 AEAD, append-only 커밋, 비밀 분리.

.rkvey v5 형식(Rust Key Vault)은 HKDF 및 AEAD 모범 사례에 따른 다층 암호화 모델을 구현합니다. 개념적 흐름: 마스터 비밀번호 → 마스터 키 → 하위 키 → 암호화된 컴파트먼트.

각 항목은 컴파트먼트(메타데이터, 보호된 비밀, 매니페스트, 첨부 파일)로 나뉘며 각각 고유 HKDF 키를 갖습니다. 한 컴파트먼트를 복호화해도 다른 것은 드러나지 않습니다.

QubKey v5 암호화 모델

마스터 비밀번호

사용자 입력(UTF-8) - 일반 텍스트로 저장되지 않음

KDF

아르곤2id

소금

16바이트(프리앰블)

메모리

64MB

반복

3

병행

4

산출

256비트

마스터 키

256비트 · 볼트 루트 키

HKDF-SHA256

정보="hdr"

헤더 키

header_key

HKDF-SHA256

정보="idx"

인덱스 키

index_key

HKDF-SHA256

정보="구획"

구획 열쇠

구획_열쇠

항목당(v5)

HKDF(master_key, salt=file|entry_id, info=kind|sub_id) → 구획 키

메타데이터
기미
Att. 명백한
AES-256-GCM

암호화된 구획

키 유도

유도는 마스터 비밀번호를 사용 가능한 암호 키로 변환합니다. Argon2id는 의도적으로 시간과 메모리를 소비(약 500ms, 64MB)하여 오프라인 무차별 대입을 억제합니다. v5에서는 각 항목 컴파트먼트가 HKDF로 고유 키를 받습니다.

사용자 입력 → 마스터 비밀번호(UTF-8)

Argon2id → 무작위 Salt가 있는 master_key(256비트)

HKDF-SHA256 → B-Tree용 index_key

HKDF-SHA256 → 항목 및 컴파트먼트 유형별 compartment_key(메타데이터, 비밀, 첨부…)

매개변수설명기본값
VariantArgon2idOWASP 권장 하이브리드 — GPU 및 사이드 채널 공격 저항
Memory64 MB유도당 메모리 — 병렬 공격 하드웨어 비용 증가65536 KB
Iterations3메모리 반복 — 보안/성능(약 500ms)
Parallelism4병렬 스레드
Output32 bytes유도 키 길이
Salt16 bytes프리앰블의 무작위 Salt

AEAD 암호화

AES-256-GCM(기본)

  • 최신 CPU의 AES-NI 하드웨어 지원
  • Nonce: 12바이트, 인증 태그: 16바이트
  • 이론적 한도: 키당 약 64GB 암호화 데이터

선택 시기: AES 하드웨어 가속이 있는 머신, 일상 사용.

대부분 플랫폼에서 최적 성능을 위한 기본 암호.

XChaCha20-Poly1305(선택)

  • 확장 Nonce: 24바이트(충돌 확률 무시 가능)
  • 하드웨어 의존 없음 — 모든 CPU에서 일정한 성능
  • 장기 보관 금고에 권장

선택 시기: 아카이브 금고, AES-NI 없는 머신, ChaCha20 선호.

고급 금고 설정에서 활성화 가능.

파일 구조

preamble
header.enc
btree_root.enc
btree_nodes.enc
core_meta.enc
protected_secrets.enc
attachment_manifest.enc
attachment_blob_*.enc
commit_N
footer (validated)

구조 설명(v5):

  • preamble — 매직 바이트, 형식 버전, Argon2id Salt
  • header.enc — 암호화된 금고 메타데이터(이름, 생성일, 설정)
  • index/ — 비밀 복호화 없이 O(log n) 검색 가능한 암호화 B-Tree
  • compartments/ — 유형별 AEAD 블록: 메타데이터, 보호 비밀, 매니페스트, 첨부
  • append/ — 커밋 영역: 새 컴파트먼트 + 인덱스 스냅샷 + 검증된 푸터

무결성 및 커밋

복원력

Append-only 커밋은 중단 시 무결성을 보장합니다:

  1. 새 컴파트먼트를 파일 끝에 추가
  2. 암호화 인덱스 스냅샷 기록
  3. 디스크 동기화(fsync)
  4. 검증된 푸터로 커밋 완료(일관성 지점)

실제 시나리오: 항목 편집 중 정전으로 쓰기가 중단된 경우. 재시작 시 QubKey는 최신 유효 푸터를 찾습니다 — 데이터 손실이나 조용한 손상 없음. 오래된 공간이 과다하면 주기적 압축으로 깨끗한 파일을 작성합니다.

컴파트먼트별 격리

HKDF-SHA256으로 각 컴파트먼트는 마스터 키에서 항목 ID와 컴파트먼트 유형으로 유도된 고유 compartment_key를 갖습니다. 실무적 의미:

  • 항목 표시 시 메타데이터만 복호화; 비밀은 명시적 표시까지 마스킹
  • 첨부는 개별 로드(다운로드/미리보기), 금고 해제 시 로드하지 않음
  • B-Tree 인덱스는 데이터와 별도 index_key 사용
  • 비밀 변경 시 변경되지 않은 첨부 파일을 반드시 재작성하지 않음

이 격리는 .rkvey v5 형식에 네이티브로 구현되어 있습니다.

암호 프리미티브

프리미티브용도라이브러리
Argon2id비밀번호 → 키 유도argon2 (RustCrypto)
HKDF-SHA256키 → 하위 키 유도hkdf (RustCrypto)
AES-256-GCMAEAD 암호화aes-gcm (RustCrypto)
XChaCha20-Poly1305AEAD 암호화(대안)chacha20poly1305 (RustCrypto)
HMAC-SHA256파일 무결성hmac (RustCrypto)
CSPRNG난수 생성getrandom (OS)