Przejdź do treści

Vault — zaszyfrowane sekrety#

Vault to drugie serce Memphis. To tu żyją passphrase'y, API keys, tokeny, klucze prywatne — wszystko czego utrata oznacza kompromitację operatora.

Prymitywy kryptograficzne#

  • Szyfrowanie symetryczne: AES-256-GCM (autentykowane, 96-bit nonce, unikalny na zapis).
  • Derywacja klucza z passphrase: Argon2id (memory-hard, domyślne parametry m=64MiB, t=3, p=1).
  • Integralność całego vaultu: BLAKE3 nad sealed-state (szybszy niż SHA-2, wolny od długości fixed-length attacks).

Dwa tiery#

Tier Co trzyma Passphrase
Tier 1 — Daily ops API keys, tokeny, webhooks, bieżące sekrety unlock przy starcie serwisu
Tier 2 — Critical klucz tożsamości agenta (ed25519), self-mod permissions, vault-admin explicit prompt każdorazowo

Tier 2 nigdy nie jest cached. Każde odczytanie wymaga re-entry passphrase'u. To bariera między "runtime pracuje" a "runtime się modyfikuje / autoryzuje ryzykowne narzędzie".

Flow unlock#

  passphrase (input)
   Argon2id ────► key (32B)
   AES-256-GCM decrypt(vault.enc)
    sealed state (JSON)
    BLAKE3 verify
    vault ready

Jeśli weryfikacja BLAKE3 zawodzi — vault jest tampered, Memphis odmawia startu, event vault.integrity.breach ląduje w ops chain.

Rotation#

memphis vault rotate-master   # nowy passphrase, re-encrypt całego vaultu
memphis vault rotate-domain <domain>  # nowy klucz per-domenę, stare bloki unreadable

Rotation domenowy jest właściwą metodą "GDPR shreddingu" — stare bloki chaina dalej istnieją, ale klucz do nich jest zniszczony.

Co NIE trafia do vaultu#

  • Contentu chainów samego w sobie (chain ma własne encryption per-domain).
  • Outputów LLM podczas inferencji (transient).
  • Cache RAG (łatwo regenerowalny, nie warto pamięciożernego Argon2id przy każdym reindex).