PQHD is Tidecoin's custom wallet key derivation system that replaces Bitcoin's BIP-32. BIP-32 relies on elliptic curve arithmetic for key derivation — Shor's algorithm makes any exposed extended public key (xpub) equivalent to an exposed private key. PQHD uses hardened-only derivation with SHA-512-based KDF, supporting all five NIST post-quantum signature schemes with encrypted multi-seed storage.
BIP-32's extended public key (xpub) mechanism derives child public keys from a parent public key using elliptic curve point addition. In a quantum setting:
Shor's algorithm derives the private key from any public key in polynomial time.
An exposed xpub is equivalent to an exposed xpriv.
No NIST post-quantum signature scheme supports the homomorphic public key derivation that BIP-32's non-hardened derivation requires.
PQHD eliminates this vulnerability by using hardened-only derivation — every path element uses the private key material, and no public-key-only derivation exists.
All elements are hardened (high bit set).
m / 10007' / 6868' / scheme' / account' / change' / index'
10007'Tidecoin PQHD purpose6868'Tidecoin coin typescheme'PQ scheme identifier (Falcon-512, Falcon-1024, ML-DSA-44/65/87)account' · change' · index'user-controlled derivationSeed ID: SHA-256("Tidecoin PQHD seedid v1" || master_seed) — domain-separated identifier.
seed_id = SHA-256("Tidecoin PQHD seedid v1" ‖ master_seed)Master node: HMAC-SHA-512 from 32-byte master seed.
(master, chain) = HMAC-SHA-512(key, master_seed)Child derivation (CKD): HMAC-SHA-512 chained using parent secret material.
CKD(parent, i') = HMAC-SHA-512(parent.chain, parent.secret ‖ i')Leaf extraction: HKDF-based stream key derivation with scheme-specific domain separation.
stream = HKDF(leaf, info = "pqhd-scheme-" ‖ scheme_id)Keypair generation: Scheme-specific conversion — Falcon uses first 48 bytes, ML-DSA uses first 32 bytes as deterministic seed.
falcon: keygen(stream[0..48]) · mldsa: keygen(stream[0..32])Independent seeds with per-seed scheme policies.
Different PQ schemes for different seeds.
Set default receive and change address schemes.
Seeds encrypted with wallet master key (PQHDCryptedSeed).
All secret material cleansed via memory_cleanse() after use.
Proprietary PQHD origin metadata fields for offline signers.
Descriptor syntax for PQHD outputs.
wpkh(pqhd(SEEDID)/purpose'/cointype'/scheme'/account'/change'/index')
Manage PQHD seeds and scheme policies directly from tidecoin-cli.