vela-privacy
v0.1.1
Published
Universal LLM privacy gateway — quantum-resilient PII masking for any app or agent
Maintainers
Readme
Vela — Universal LLM Privacy Gateway
Quantum-resilient PII masking for any app or agent. One npm package, four integration surfaces.
Why Vela beats Rehydra
| | Rehydra | Vela |
|---|---|---|
| Masked output | <PII type="EMAIL" id="1"/> | [email protected] (FPE) |
| Format preserved | No | Yes (length + charset) |
| Reversible | Map lookup | Keyed, O(1) memory |
| Quantum-resilient | No | ML-KEM-768 + AES-256-GCM |
| Multi-tenant | Shared map | Per-tenant key |
Install
npm install vela-privacyQuick start
const { Vela, QuantumKeyManager } = require('vela-privacy');
// Two parties do ML-KEM-768 key agreement (quantum-resilient)
const alice = QuantumKeyManager.generateKeyPair();
const bob = QuantumKeyManager.generateKeyPair();
const { cipherText, sharedSecret: ss1 } = QuantumKeyManager.encapsulate(bob.publicKey);
const ss2 = QuantumKeyManager.decapsulate(cipherText, bob.secretKey);
const fpeKey = QuantumKeyManager.deriveFpeKey(ss1);
const vela = new Vela({ fpeKey, glossary: ['Neeti', 'JustEase'] });
const masked = vela.mask('Aadhaar 1234 5678 9012, PAN ABCDE1234F');
// "Aadhaar 2602 9025 6010, PAN UDTPKQOYGB" ← format preserved!
const unmasked = vela.unmask(masked.text, masked);
// "Aadhaar 1234 5678 9012, PAN ABCDE1234F" ← round-tripIntegration surfaces
| Surface | Use case |
|---|---|
| Vela.mask/unmask | Direct masking in your code |
| maskOpenAiRequest / unmaskOpenAiResponse | Wrap OpenAI SDK calls |
| createFetchInterceptor | Zero-code-change fetch interception |
| runProxy | Standalone OpenAI-compatible proxy |
| Express middleware | For apps that proxy LLM requests |
How it works
- Detect — regex-based on-device detection of Aadhaar, PAN, GSTIN, emails, phones, case IDs (Indian court formats), plus a configurable glossary.
- Mask — structured IDs via FF1 FPE (NIST SP 800-38G), soft PII via reversible tokens.
- Protect — the FPE key is derived from an ML-KEM-768 shared secret, defeating harvest-now-decrypt-later attacks.
- Restore — de-mask LLM responses using the session's key + token map.
Security model
- ML-KEM-768 (NIST FIPS 203) for key agreement — post-quantum.
- AES-256-GCM protects the FPE key in transit.
- FF1 FPE (NIST SP 800-38G) for format-preserving masking.
- No PII stored in memory maps — FPE is keyed, O(1) memory.
- Per-tenant keys prevent cross-tenant leakage.
Roadmap
- [ ] NER integration (compromise.js / transformers.js) for names/locations
- [ ] Streaming response de-masking (SSE)
- [ ] Key rotation + revocation
- [ ] Audit log of masked fields
- [ ] CLI binary (
vela proxy --port 8787)
License
MIT (planned)
