본문으로 건너뛰기
Anon Wallet

키 관리

Anon은 민감한 키 자료를 디스크에 평문으로 저장하지 않고, 각 작업이 필요한 최소 키 권한만 사용하도록 설계된 계층형 키 구조를 사용합니다.

키 계층

Device authenticator (passkey / password)
        │
        ▼
    Root secret            ← PRF / Argon2id; session memory
        │
    HKDF derivation
       / \
      /   \
Railgun    IDB CryptoKey
  key      (AES-GCM)

PRF 키(루트)

패스키로 인증하면 인증 장치가 의사 난수 함수(PRF)를 제공하여 패스키 자격 증명에 연결된 결정적 비밀값을 출력합니다. 저장과 동기화 방식은 인증 장치에 따라 달라집니다. 이 PRF 출력이 키 계층의 루트입니다. 디스크에 기록되지 않으며 세션 동안 메모리에만 존재합니다.

비밀번호로 인증하면 Argon2id가 비밀번호와 저장된 솔트로부터 같은 역할을 하는 루트 비밀값을 도출합니다.

HKDF 도출

Anon은 PRF 키에서 HKDF(HMAC 기반 키 도출 함수)로 두 개의 키를 도출합니다.

  • Railgun 키(anon:railgun:full:v1) — 잔액 복호화(조회)와 zk-SNARK 증명 생성(지출)에 모두 사용하는 단일 키입니다. 인증 시 로드되어 세션 동안 메모리에 유지됩니다.
  • IDB CryptoKey(anon:secrets:indexeddb:v1) — IndexedDB의 민감한 데이터인 니모닉과 계정 데이터를 암호화·복호화하는 AES-256-GCM 키입니다. 인증 시 로드되어 세션 동안 메모리에 유지됩니다.

KeyVault(메모리 캐시)

KeyVault는 세션의 활성 키를 보관하는 메모리 내 싱글턴입니다. 다음 특성이 있습니다.

  • 인증에 성공하면 키가 채워집니다
  • 디스크에 기록되지 않습니다
  • 로그아웃하거나 창을 닫으면 자동으로 제거됩니다
  • 지출 키가 필요하지 않은 백그라운드 페이지의 접근 패턴으로부터 보호됩니다

데이터 저장 위치

데이터 저장 위치 암호화
암호화된 니모닉 IndexedDB IDB CryptoKey를 사용하는 AES-GCM
IDB CryptoKey Chrome 저장소 PRF에서 도출한 키로 암호화
공개 주소 Chrome 저장소 평문: 본래 공개되는 정보
Railgun 키 메모리만 영구 저장하지 않음
IDB CryptoKey(복호화됨) 메모리만 영구 저장하지 않음
PRF 키 메모리만 영구 저장하지 않음

복구

기기에 접근할 수 없게 되면 12단어 니모닉 문구로 지갑을 복원할 수 있습니다. 니모닉은 모든 키를 다시 생성합니다. 오프라인의 안전한 장소에 보관하세요.

더 알아보기