암호화
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 목록(호스트명만)
- 확장 설정(테마, 시간 제한 등)