COMING SOON — H33 Substrate is in production testing. Public API access opening soon. Start Free Trial →

Post-Quantum Signatures Are Too Large for Everything

Blockchains, IoT devices, API headers, TLS handshakes, identity credentials, legal documents, medical records, video provenance — every system that needs post-quantum signatures today was built for 64-byte signatures. The replacements are 3,000 to 17,000 bytes. Nothing fits.

Blockchains Can't Absorb the Size

Bitcoin, Ethereum, Solana, Cardano, Avalanche, Polkadot, Cosmos, NEAR, Aptos, Sui — all use elliptic curve signatures that Shor's algorithm breaks. The NIST replacements (Dilithium: 3,309 bytes, SPHINCS+: 17,088 bytes) make every transaction 50–260x larger. Bitcoin's chain would grow by 12.6 GB per day with three PQ families. That breaks fee models, block size limits, and storage economics. And the governance to add PQ opcodes takes 2–4 years that may not be available.

Constrained Systems Can't Carry It

An IoT sensor with 64KB of flash can't store a 21KB PQ signature. A TLS handshake that adds 17KB per certificate in the chain makes connection setup unacceptable on mobile. API authentication headers carrying 3,309 bytes per request triples bandwidth for every call. QR codes for identity credentials max out at ~4KB. None of these systems were designed for post-quantum signature sizes, and none of them can be redesigned fast enough.

Single-Algorithm Is a Single Point of Failure

Most PQ proposals pick one algorithm. If that algorithm breaks — and every algorithm called "unbreakable" has eventually been weakened — every signature ever produced is retroactively insecure. RSA was "unbreakable" until Shor's algorithm. SHA-1 was a "standard" until Google produced a collision. Betting critical infrastructure on one mathematical assumption is the same mistake we're trying to fix.

$2.4T+
in blockchain assets using breakable signatures
59M+
daily transactions on vulnerable chains
75B+
IoT devices shipping with classical crypto
0
chains with working PQ at protocol layer

Who Has This Problem

Blockchains
Bitcoin, Ethereum, Solana, Cardano, Avalanche, Polkadot, Cosmos, NEAR, Aptos, Sui
$2.4T+ in assets protected by secp256k1/Ed25519. Shor's algorithm breaks both. PQ signatures are 50–260x too large for on-chain use. Governance to add PQ opcodes takes 2–4 years.
IoT / Embedded
Constrained devices, medical implants, industrial sensors, automotive ECUs
75B+ devices with 64KB–256KB flash. A 21KB PQ signature consumes 33–82% of total storage. Firmware updates can't carry PQ sigs at current sizes. 74 bytes fits everywhere.
🔒
TLS / PKI
Certificate chains, handshake size, OCSP responses, CRLs
A TLS handshake with Dilithium certificates adds 10–50KB per connection. Mobile clients on 3G see 500ms+ added latency. Certificate transparency logs grow 50x faster. 74 bytes per cert changes nothing.
🔐
API Authentication
Request headers, JWT tokens, webhook signatures, mTLS
Every API call carrying a 3,309-byte Dilithium signature in the Authorization header triples bandwidth. At 10K RPS, that's 33 MB/sec of signature overhead alone. 74 bytes: 740 KB/sec.
🆔
Identity Credentials
Verifiable credentials, DIDs, digital passports, mobile driver's licenses
QR codes max out at ~4KB. A PQ-signed verifiable credential with Dilithium + FALCON exceeds that. Mobile driver's licenses need NFC transmission under 1KB. 74 bytes fits in any format.
📄
Document Signing
Legal contracts, medical records, financial instruments, 50-year archival
Documents signed today must be verifiable in 2075. RSA won't survive. Dilithium signatures bloat PDF metadata by 3.3KB per signer. For a 10-party contract, that's 33KB of signatures. 74 bytes per signer: 740 bytes total.
🎥
Media Provenance
Video authentication, deepfake detection, recording integrity
In the deepfake era, proving a video is authentic requires a tamper-proof signature. Embedding a 21KB PQ signature in every video segment's metadata is impractical. 74 bytes per segment: invisible overhead.
🛡
FHE Attestation
Prove encrypted computation results without decrypting anything
FHE enables computation on encrypted data, but proving the computation happened requires a signature. The substrate bridges FHE outputs to PQ signatures without decryption at any stage. 74 bytes proves it.

H33 Substrate

Three post-quantum signature families. 74 bytes total. 32 on-chain, 42 in Cachee. No consensus changes. No block size impact. Works on every chain today.

74
bytes total
32
bytes on-chain
42
bytes in Cachee
3
PQ families
0.059µs
verification lookup
What Post-Quantum Costs On-Chain

At Bitcoin's 600,000 daily transactions. The numbers speak for themselves.

ApproachPer TransactionDaily Chain GrowthAnnual GrowthPQ Families
Current (Schnorr)64 bytes38 MB14 GB0 (broken by Shor)
Dilithium on-chain3,309 bytes1.98 GB727 GB1
All 3 families on-chain21,054 bytes12.6 GB4.6 TB3
H33 Substrate32 bytes19.2 MB7 GB3

The H33 Substrate adds less data per transaction than the Schnorr signatures Bitcoin already uses (32 bytes vs 64 bytes), while covering three independent post-quantum families.

It's Not Just Smaller. It's Less Than What You Already Pay.

Every blockchain already carries 64–65 bytes of classical signature per transaction. The substrate replaces that with 32 bytes covering three PQ families. You don't add cost. You subtract it.

Bitcoin Today
Schnorr signature64 bytes
Math families protected1 (secp256k1 — broken by Shor)
Daily sig data (600K tx)38.4 MB
Annual sig data14 GB
Weight per sig output256 WU (64 × 4)
Fee per sig @ 10 sat/vB640 sats
Bitcoin with H33 Substrate
On-chain hash32 bytes
Math families protected3 (MLWE + NTRU + Hash)
Daily sig data (600K tx)19.2 MB (−50%)
Annual sig data7 GB (−50%)
Weight per OP_RETURN172 WU (−33%)
Fee per attestation @ 10 sat/vB430 sats (−33%)
Solana Today
Ed25519 signature64 bytes
Math families protected1 (Curve25519 — broken by Shor)
Daily sig data (56M tx)3.58 GB
Annual sig data1.31 TB
Cost per transaction0.000005 SOL (base fee)
Validator sig verify load56M Ed25519 verifies/day
Solana with H33 Substrate
On-chain hash32 bytes
Math families protected3 (MLWE + NTRU + Hash)
Daily sig data (56M tx)1.79 GB (−50%)
Annual sig data654 GB (−50%)
Cost per transactionSame base fee (32B in PDA)
Validator PQ verify load0 — verification is off-chain

What Falls Out of 32 Bytes

No Fee Structure Change
32 bytes fits inside existing fee models on every chain. No new transaction types. No weight class changes. No gas cost increases.
BTC: 430 sats • SOL: same base fee • ETH: 512 gas
Fees Could Go Down
If the substrate replaces the classical signature, per-transaction on-chain data decreases by 32–33 bytes. At scale, that's terabytes per year of chain growth eliminated.
BTC: −7 GB/yr • SOL: −654 GB/yr of sig data
No Validator Changes
Validators don't process PQ crypto. They see the same transaction they always did. Zero new libraries. Zero new opcodes. Zero new precompiles.
Validator PQ verify load: 0
No Wallet Changes
Wallets don't need Dilithium, FALCON, or SPHINCS+ libraries. The PQ verification happens off-chain. The wallet just includes a 32-byte hash.
Client library size increase: 0 bytes
MEV Protection
The 32-byte hash is SHA3-256 — preimage-resistant. Searchers see a commitment, not transaction intent. Can't frontrun or sandwich what you can't read.
Frontrunning: blocked • Sandwich: blocked
Faster Node Sync
New nodes syncing the chain download 32 bytes per attestation instead of 64 bytes per classical sig. Less data per block. Faster initial block download.
BTC IBD: −50% sig bandwidth
Backwards Compatible
Old wallets ignore the hash. New wallets verify it. Zero-friction adoption. No hard fork. No flag day. No "everyone must upgrade by date X."
Breaking changes: 0
Three for Less Than One
Three independent post-quantum families (lattice/MLWE, lattice/NTRU, hash-based) for half the on-chain cost of the single classical signature you already pay for.
64 bytes (1 family, broken) → 32 bytes (3 families, PQ-safe)
Substrate Byte Layout

58 bytes. Fixed size. Hand-serialized. No framework. Every byte at a defined offset. Patent pending.

VER
1 byte
[0]
TYPE
1 byte
[1]
FHE COMMITMENT (SHA3-256)
32 bytes
[2..34]
TIMESTAMP
8 bytes BE
[34..42]
NONCE
16 bytes random
[42..58]

VER = schema version (frozen per version). TYPE = computation category from append-only registry (0x01=Biometric, 0x06=BitcoinUTXO, etc.). Commitment = SHA3-256 of FHE ciphertext output (never decrypted). Timestamp = millisecond Unix time, big-endian. Nonce = 128-bit random, ensures uniqueness even for identical inputs at the same millisecond.

The signing message is SHA3-256 of these 58 bytes. That 32-byte hash is what all three PQ algorithms sign. Same message, three independent signatures, three independent mathematical families.

Verification Flow

How a verifier confirms a PQ attestation. Four steps. No trust assumptions beyond the hash function and the public keys.

1

Read the on-chain hash

The verifier reads 32 bytes from the OP_RETURN (Bitcoin), PDA (Solana), or storage slot (Ethereum). This is the SHA3-256 of the 58-byte substrate.

// Read 32-byte commitment from OP_RETURN output
let on_chain_hash: [u8; 32] = tx.outputs[1].script[2..34];
2

Query the verification receipt from Cachee

Use the 32-byte hash as the lookup key. Cachee returns 42 bytes: a verification hash, a timestamp, and algorithm flags.

// Cachee lookup: 0.059µs
let receipt = cachee.get(&on_chain_hash)?;  // 42 bytes
assert_eq!(receipt.len(), 42);
3

Confirm algorithm flags

Byte 41 of the receipt is a bitmask: bit 0 = Dilithium verified, bit 1 = FALCON verified, bit 2 = SPHINCS+ verified. All three set = 0x07.

let flags = receipt[41];
assert!(flags & 0x01 != 0, "Dilithium verified");
assert!(flags & 0x02 != 0, "FALCON verified");
assert!(flags & 0x04 != 0, "SPHINCS+ verified");
4

Validate the verification hash

The 32-byte verification hash at receipt[1..33] is SHA3-256(signing_message || all_public_keys || all_signatures). For full re-verification, recompute from the original inputs. For trust-the-pipeline verification, confirm the hash is non-zero and the timestamp is within acceptable freshness.

// Full re-verification (optional — requires original sigs)
let expected = sha3_256(msg, dil_pk, fal_pk, sph_pk, dil_sig, fal_sig, sph_sig);
assert_eq!(&receipt[1..33], &expected);

// Trust-the-pipeline verification (standard path)
assert!(receipt[1..33] != [0; 32], "verification hash present");
assert!(timestamp_ms > now_ms - 300_000, "within 5 minutes");
Signature Size vs Persistent Footprint

Add and remove PQ families. Watch the raw signature size change. Watch the persistent footprint stay at 74 bytes.

21,054 bytes
Raw Signature Size (ephemeral, ~15ms)
74 bytes
Persistent Footprint (on-chain + Cachee)
285x compression
Security Properties

Formally stated. Not claims — properties of the underlying cryptographic constructions.

Collision Resistance

No adversary can produce two different sets of (message, public keys, signatures) that yield the same 32-byte verification hash in the receipt.

Property: For all (m, pk, sig) ≠ (m', pk', sig'), SHA3-256(m || pk || sig) ≠ SHA3-256(m' || pk' || sig') with probability 1 − 2−128.

Preimage Resistance

The 32-byte on-chain commitment reveals nothing about the underlying FHE computation output, the substrate fields, or the raw signatures. The hash is one-way.

Property: Given h = SHA3-256(substrate), no adversary can compute substrate in time less than O(2128).

Domain Separation

A BiometricAuth substrate (type 0x01) cannot be confused with a BitcoinUTXO substrate (type 0x06) even under adversarial conditions. The type byte is inside the signed boundary.

Property: For typea ≠ typeb, signing_message(substratea) ≠ signing_message(substrateb) regardless of other field values.

Replay Prevention

The 16-byte random nonce ensures two substrates from identical inputs at the same millisecond are computationally distinguishable with probability at least 1 − 2−128.

Property: P(nonce1 = nonce2) ≤ 2−128 for independently sampled nonces.

Multi-Family Independence

Breaking the attestation requires breaking Dilithium (MLWE) AND FALCON (NTRU/SIS) AND SPHINCS+ (hash security) simultaneously. These are independent mathematical problems.

Property: P(forge) ≤ P(break MLWE) × P(break SIS) × P(break SHA-2).

Cachee Integrity

Receipts in Cachee are HMAC-SHA3-256 protected and AES-256-GCM encrypted. Tampering, forgery, or read access requires the attestation service's root secret, which Cachee never holds.

Property: An adversary with full Cachee access cannot forge a valid receipt without the HMAC key.
What Failure Looks Like

Security means failing loudly and clearly. Here's what happens when an adversary tampers with the attestation.

Tampered Commitment

Attacker flips one bit in the on-chain 32-byte hash.

Verifier reads: 0xa7f3...01 (tampered) Cachee lookup: key not found VERIFICATION FAILED: no receipt exists for this commitment Reason: tampered hash does not match any attested substrate

Wrong Computation Type

Attacker replays a BiometricAuth attestation as a payment.

Receipt found. Algorithms: Dilithium + FALCON + SPHINCS+ Verifier expects: type=0x03 (FedNowPayment) Substrate carries: type=0x01 (BiometricAuth) DOMAIN SEPARATION FAILURE: computation type mismatch Reason: type byte is inside signed boundary — cannot be changed without invalidating all 3 signatures

Forged Receipt

Attacker injects a fake 42-byte receipt into Cachee.

Receipt found: 42 bytes HMAC-SHA3-256 verification... HMAC VERIFICATION FAILED: stored HMAC does not match computed HMAC Reason: attacker does not possess the attestation service's HMAC key Receipt rejected — data integrity compromised

Expired Attestation

Receipt is valid but timestamp exceeds verifier's freshness policy.

HMAC: valid Algorithms: Dilithium + FALCON + SPHINCS+ Verified at: 2026-04-09T14:30:00Z (26 hours ago) FRESHNESS CHECK FAILED: receipt older than 24-hour policy maximum Action: request fresh attestation or accept with degraded confidence

Why SHA3-256 Survives Quantum

Shor's algorithm breaks elliptic curve signatures (Ed25519, secp256k1) by solving the discrete logarithm problem in polynomial time. It does not affect hash functions. The best known quantum attack on SHA3-256 is Grover's algorithm, which reduces effective security from 256 bits to 128 bits. 128-bit security against a quantum adversary is the baseline that NIST considers adequate for post-quantum cryptographic systems.

The 32-byte on-chain hash produced by the H33 Substrate is SHA3-256. A quantum computer that breaks every Ed25519 key on Solana in seconds cannot invert, forge, or collision-attack this hash. The on-chain anchor is quantum-resistant by construction, independent of the off-chain PQ signatures that bind to it.

Integration

Four lines. Full 3-family PQ attestation. 74 bytes.

// Full substrate pipeline — 3 PQ families, 74 bytes total
let substrate = SigningSubstrate::new(ComputationType::BiometricAuth, &fhe_output, now_ms())?;
let result = attest(&substrate, sigs, &dil_pk, &fal_pk, &sph_pk, now_ms());

let anchor   = result.on_chain_hash;    // 32 bytes — goes in OP_RETURN / PDA / storage
let receipt  = result.receipt.to_bytes(); // 42 bytes — goes in Cachee
// Raw signatures (~21KB) are already zeroized. They never existed on disk.

The attest() function signs with Dilithium, FALCON, and SPHINCS+, verifies all three, compresses to a 42-byte receipt, and securely erases the raw signatures. The entire operation takes ~16ms. Every subsequent verification is a Cachee lookup at 0.059µs.

ChainAnchor MethodOn-ChainCostConsensus Change
BitcoinOP_RETURN32 bytes~430 satsNone
SolanaPDA32 bytes~0.000005 SOLNone
EthereumSSTORE32 bytes~20K gasNone
Live Attestation Pipeline

Watch blocks form in real time. Each block is a transaction getting PQ-attested through the substrate pipeline.

Block-by-Block Attestation

Starting attestation pipeline...
Substrate
58-byte commitment
3-Key Sign
Dil + Fal + Sph
Verify
All 3 families
Compress
21KB → 42B
Anchor
32B on-chain
Total
Persistent
0
Blocks Attested
0 KB
Sigs Zeroized
0 B
On-Chain
0 B
Cachee
0 B
Persistent
0x
Compression
74 Bytes. Three Families. Any Chain.

Post-quantum attestation that works today without waiting for consensus changes.