Interoperable FROST co-signing for shielded ZEC: open specs and a reference implementation

To make the scope clearer, here’s how I see the FROST projects for shielded ZEC, and how this work would connect them. Please correct anything I got wrong or missed.

Project What it is How signers talk Backup
Zkool wallet with FROST, signs Orchard and Ironwood shielded memos passphrase-encrypted export (age), restores in Zkool only
Zafe mobile shared vault (Android), mainnet beta encrypted relay passphrase-encrypted file (share, sk, vault descriptor), to cloud or file
Konclave group treasury in the browser, mainnet beta relay and a hosted helper passphrase-encrypted export (share, viewing key, metadata)
Quorum org treasury tool, hackathon build on testnet frostd none yet: share passphrase-encrypted on the device, lost-share repair planned
NoirWallet Secure Vault design QR or Bluetooth one recovery phrase per share
OpenPGP Wallet (me) prototype, mainnet spends QR (files in the prototype) 3rd share as an encrypted offline file, no phrase (design)

They all build on the Zcash Foundation’s FROST crates (re-randomized FROST, ZIP 312), and most of them sign PCZTs. What differs is the envelope, the transport, the key derivation and the backup, so today a share made in one app can’t be used or restored in another.

The plan, with no new crypto:

  1. Keys: derive them per ZIP 2005 (Zafe’s test vectors and mine already match), and follow the ZIP 312 key generation once zips#895 lands. I left a review note there: [ZIP 312] Specify key generation, change randomizer handling by conradoplg · Pull Request #895 · zcash/zips · GitHub
  2. Messages: a shared group descriptor and a shared envelope (Zafe’s looks like a good starting point), carried over any transport (memos, a relay, frostd), with QR as the one every app can do.
  3. Backup: a common format with room for each app’s own data. @aryaethn said in August he’d like to help turn this into a ZIP starting from @hanh format. I’d do the drafting and the implementation, with their input.
  4. Proof: cross-implementation signing tests with whoever is up for it. Zafe’s stack is the closest to mine.
  5. A small reference crate for the descriptor, the envelope and the backup, so adopting them takes a few lines rather than a rewrite. It’s not a wallet SDK: each app keeps its own UX and transport.

This doesn’t change the application’s scope, milestones or budget: the QR protocol becomes the first transport profile of the shared envelope, and the backup format and the crate are the same deliverables.

If you build FROST for Zcash and want to join, or think this is the wrong approach, please say so.

1 Like