Security
What We Store
A full audit of every piece of data the Althea system touches. Where it lives. How long. Who can see it. The summary is short: nothing personal lives anywhere durable.
Althea Backend
| Datum | Storage | Lifetime | Readers |
|---|---|---|---|
| NIN / BVN | Memory only | Request duration | Signing handler |
| Date of birth | Memory only | Request duration | Signing handler |
| Dojah response | Memory only | Request duration | Signing handler |
| Request body in logs | — | Never logged | — |
| Rate-limit counters | Redis / in-memory by IP hash | Rolling 24h | Backend only |
| Server access logs | Standard nginx logs | 30 days | Operators (IP + path only, no body) |
| EdDSA private key | Encrypted secret store | Until rotation | Backend boot process |
On-Chain (Solana)
| PDA | Fields | Lifetime |
|---|---|---|
| NullifierRecord | nullifier (32 bytes), created_at, bump | Permanent |
| AttestationRecord | verified, timestamp, protocol, revoked, bump | Permanent |
Neither PDA contains personal data. The nullifier is a hash chain; the attestation is a flag plus a timestamp. Both are public on Solana, like every other Solana account.
In the User's Browser
| Datum | Storage | Lifetime |
|---|---|---|
| NIN/BVN in form state | React state | Until form submit or unmount |
| SignedCredential | JS heap | From verifyIdentity() to generateProof() wipe |
| africazk.wasm | Browser cache | Standard HTTP cache rules |
In Your dApp
Only what you choose to store. The recommended minimum:
- The wallet public key
- The boolean attestation status, cached per session
Anything else is your own data classification problem, not Althea's.
The summary
The Althea system, end-to-end, persists exactly two things about a verified user: a hash-of-a-hash nullifier and a boolean attestation flag with a timestamp. Neither reveals who the user is.