Перейти к содержимому
Anon Wallet

Шифрование

Anon использует современные проверенные аудитом криптографические примитивы. Здесь описано, какие данные шифруются, как и где.

Шифрование хранения (IndexedDB)

Мнемоническая фраза и другие чувствительные данные аккаунта хранятся в браузерной IndexedDB, зашифрованные AES-256-GCM:

  • 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.

Что не шифруется

Следующие данные хранятся открыто, поскольку публичны по своей природе:

  • Публичный адрес Ethereum
  • URL сетевых RPC
  • Список подключённых DApp, только имена хостов
  • Настройки расширения: тема, время сеанса