Miden-Zcash
Zcash-Miden wallet, 2 Network same wallet
Awards
The problem it solves
Unified wallet experience
Users need separate wallets and keys for Miden and Zcash, adding friction and security risk.
Enables Miden accounts to sign Zcash transactions directly in the Miden Browser Wallet. Zcash keys are derived from Miden private keys using HKDF and BIP32, so users can:
- Send and receive Zcash using their existing Miden account
- Avoid managing separate Zcash keys
- Sign transparent and shielded (Sapling) transactions from one interface
Privacy-preserving transaction auditing
Shielded transactions are private, making auditing difficult.
A client-side block explorer lets users decrypt and view their own shielded transactions using viewing keys. All decryption happens in the browser—transaction data never leaves the device. Users can:
- View their complete shielded transaction history
- Audit private transactions without compromising privacy
Use cases
- Miden users who want Zcash functionality without additional wallet setup
- Users who need to audit shielded transactions for compliance
- Developers building applications requiring both Miden and Zcash capabilities
- This reduces complexity, improves security through unified key management, and enables private transaction auditing without sacrificing privacy.
Challenges we ran into
Miden private key export and security
The Miden wallet requires user confirmation to export private keys. We needed to:
- Request keys only when needed for Zcash operations
- Clear keys from memory after use
- Handle cases where users deny key export
So, Implemented MidenKeyBridge to request keys on-demand, cache derived Zcash keys (not Miden keys), and zero out private keys immediately after derivation.
Key derivation integration
- Deriving Zcash keys from Miden keys required:
- Ensuring deterministic derivation across sessions
- Handling different Miden account formats
- Maintaining network separation (testnet vs mainnet)
- Solution: Used HKDF-SHA256 with network as a domain separator, and standardized the derivation path to ensure consistency.
Wallet integration
Integrating Zcash into the existing Miden wallet UI required:
Adding Zcash functionality without disrupting existing flows
- Managing state between Miden and Zcash modules
- Handling account switching
So, Created an integration layer that initializes Zcash when needed and syncs with Miden account changes.