본문으로 건너뛰기
Anon Wallet

암호화

Anon은 전반에 현대적이고 감사를 거친 암호학적 기본 요소를 사용합니다. 이 페이지는 무엇을 어디서 어떻게 암호화하는지 설명합니다.

저장 데이터 암호화(IndexedDB)

니모닉과 민감한 계정 데이터는 AES-256-GCM으로 암호화하여 브라우저의 IndexedDB에 저장합니다.

  • AES-256-GCM은 기밀성과 무결성을 모두 제공하는 인증 암호화 방식으로, 변조를 감지합니다
  • 암호화 키는 CryptoKey이며 chrome.storage.local에 추출 불가 형태로 저장되고, 패스키·비밀번호에서 파생한 키로 다시 암호화됩니다
  • IV(초기화 벡터)는 암호화할 때마다 무작위로 생성됩니다

저장 암호화 흐름

Passkey PRF output
        │
    HKDF (SHA-256)
        │
  Storage wrap key
        │
   Encrypts CryptoKey  ──→  chrome.storage.local
        │
   CryptoKey (AES-256-GCM)
        │
   Encrypts mnemonic  ──→  IndexedDB

메모리의 키

다음 키는 메모리에만 존재하고 영구 저장하지 않습니다.

키 목적 수명
PRF 키 루트 파생 입력 인증 과정에만 존재, 약 몇 초
Railgun 키 잔액 복호화, zk-SNARK 증명, 거래 서명 잠금 전까지의 세션
IDB CryptoKey(복호화됨) IndexedDB 암호화·복호화 세션

Anon이 잠기면 메모리에서 지워집니다.

HKDF 키 파생

HKDF(HMAC 기반 키 파생 함수, RFC 5869)는 하나의 루트 비밀값에서 여러 독립적인 키를 파생합니다.

PRF output (32 bytes)
    │
    ├── HKDF("anon:railgun:full:v1") ──→ Railgun key (viewing + spending)
    └── HKDF("anon:secrets:indexeddb:v1") ──→ IDB CryptoKey (AES-GCM wrap key)

각 파생은 영구 마스터 솔트와 고유한 info 라벨로 도메인을 분리합니다. HKDF를 사용하면 하나의 파생 키가 유출되어도 다른 파생 키가 함께 노출되지 않습니다.

Railgun 노트 암호화

Railgun에서는 지출 가능한 잔액의 커밋먼트인 각 노트를 수신자 공개 키로 하이브리드 암호화합니다.

  • ECDH 키 합의로 공유 비밀값 파생
  • AES-256-GCM으로 노트 내용 암호화

노트는 Anon에서 Railgun 키를 사용해 로컬로 복호화합니다.

암호화하지 않는 데이터

다음은 본질적으로 공개 데이터이므로 평문 저장합니다.

  • 공개 이더리움 주소
  • 네트워크 RPC URL
  • 연결된 DApp 목록(호스트명만)
  • 확장 설정(테마, 시간 제한 등)