Hello, everyone, I’m writing to get feedbacks and suggestions on something I’ve been working on.
Blindvault acts as an infrastructure for issuing credentials while protecting users privacy and identity.
Blindvault is essentially a middleware whose sole purpose is issuance, and consumption of those credentials, the application handles the logic it’s responsible of deciding who is eligible.
How it works
Blindvault uses BLS12-381 blind signature alongside DLEQ proof:
- The client sends a blinded message(It can be handled by the application itself…)
- The blinded message is signed by the server(Blindvault middleware) and then it attachs a DLEQ proof to the signed message.
- The application or user store the signed message with the DLEQ proof
- Verifies using the DLEQ proof that the message was indeed signed by the server( server provides public key)
- Client Unblind the message using the random scalar
- When time comes for redemption client only present the unblinded message to the server
- The server then respond with those response(valid, already claimed or invalid)
The project was designed as a reusable infrastructure instead of standalone app, other project don’t need to handle implementing blind signature, replay protection.
Use case
Blindvault can be used for many project such as anonymous airdrops, and voting systems.
Because of blindvault we might know that a certain person obtain a signed message from the server, but we can’t know if it’s that same person who is making use it(unlinkability)
BlindVault guarantees:
- unlinkability between issuance and redemption,
- cryptographic verification of issued credentials,
- detection of replay attempts,
- namespace isolation between credential classes,
- verification that signatures originate from the expected derived key.
Things To Consider:
Although Blindvault create unlinkability between issuance and redemption, privacy can be loss due application logic(example; if app records identity…)
What’s Built
- Javascript client(blind, DLEQ proof verification and Unblind) (can be tested with the Go server)
- Go server( Handles the issuance, consumption of credentials, with all security concern)
Features
- Deterministic Key Derivation
- Replay protection using deterministic nullifiers
- In-memory backend for testing
- Credential namespace isolation
- DLEQ proof generation and verification
- REST API for credential issuance and consumption
Working On:
- Master Key(seed) rotation (Currently working on this)
- Distributed Key Generation
- Trusted‑dealer threshold
- Threshold DLEQ proof generation
- Batch Verification
I’m looking forward to hearing you’re feedbacks and suggestions