H33-74-AIR — Post-Quantum Proof of Life

Prove you control a Bitcoin key.
Without revealing it. Without moving coins.

A ZK-STARK proof of secp256k1 private key knowledge, cryptographically bound to a three-family post-quantum identity via H33-74. When quantum arrives, the binding is already on-chain.

Read §10.9 Verifier on GitHub
495 ms
Cold Proof (Release)
14.5 ms
Cached (34x)
800 µs
Verification
74 B
Persistent Footprint
The Problem
1.8 million BTC have exposed public keys

Pay-to-Public-Key (P2PK) outputs expose the secp256k1 public key on the blockchain. A quantum adversary running Shor's algorithm can derive the private key and spend those coins.

~1.8M

BTC in P2PK outputs

Including early Satoshi-era coinbase rewards. Public keys sitting on-chain, waiting for quantum.

$0

Cost to prove life today

Moving coins to a new address costs transaction fees and breaks UTXO history. Proof of life costs nothing on-chain.

0

Bytes of private key exposed

The ZK-STARK proof reveals nothing about the private key. Not a single bit. Not to anyone. Not ever.

Honest Framing
What Proof of Life is — and what it is not

What it IS

Pre-quantum migration. You prove you control a classical key today and bind that proof to a post-quantum identity. The binding is timestamped, three-family PQ-signed, and anchored to Bitcoin. When quantum arrives, the record is already on-chain and unforgeable.

What it is NOT

Proof of life does not make your classical key quantum-resistant. The secp256k1 private key is still classical. A quantum computer can still derive it from the public key. What proof of life provides is a cryptographic record — created before quantum — that proves who controlled the key and when they migrated to a PQ identity. The key stays classical. The attestation is quantum-resistant.

Construction
How it works

Six steps from private key control to Bitcoin-anchored post-quantum attestation.

01

Verify keypair

Confirm pk = sk · G on secp256k1. The prover actually knows the private key.

02

Generate ZK-STARK proof

Build a 256-row execution trace (one per scalar bit). Projective coordinates, 8×32-bit non-native Goldilocks limbs. 836 constraints per row. ~213,000 total. The private key is used here and nowhere else.

03

Commit to proof

SHA3-256 of the STARK proof's Merkle roots (trace + constraint commitments via FRI). This 32-byte hash is the proof commitment — the proof itself is not stored.

04

Bind to PQ identity

Domain-tagged digest: SHA3-256(h33:proof-of-life:v1: || proof || pk || pq_pk_hash || nonce). This binds the classical key proof to a specific three-family post-quantum key set.

05

Mint H33-74

Type 0x12 (PostQuantumMigration). The binding digest becomes the content field of a 58-byte H33-74 primitive.

06

Sign under three PQ families

ML-DSA-65 (MLWE) + FALCON-512 (NTRU-SIS) + SLH-DSA-SHA2-128f (hash). Or the NIST Level 5 composition for maximum security. Anchor the 32-byte signing message to Bitcoin via Taproot tweak. No fork. No new opcodes.

Security Tiers
Choose your security level

Same 74-byte footprint. Same API. Same Bitcoin anchor. Different weight class.

PropertyNIST Level 1 (Default)NIST Level 5 (Premium)
Slot 1ML-DSA-65 (3,309 B sig)ML-DSA-87 (4,627 B sig)
Slot 2FALCON-512 (~666 B sig)FALCON-1024 (~1,280 B sig)
Slot 3SLH-DSA-SHA2-128f (17,088 B sig)SLH-DSA-SHA2-256f (49,856 B sig)
Bundle size~21 KB ephemeral~56 KB ephemeral
Persistent footprint74 bytes74 bytes (identical)
Sign time (release)~5 ms~20 ms
NIST security levelBounded at Level 1Uniform Level 5
Target use caseProduction pipeline (2.17M auth/sec)High-value Bitcoin holdings
Performance
From prototype to product

Cold STARK proof generation + Cachee-backed caching for repeat attestations.

MetricApple Silicon (Release)Graviton4 (Release)
Cold proof generation495 ms813 ms
Cached proof generation14.5 ms (34x)
Verification800 µs
Cached verification<1 µs
// Proof of life with Cachee-backed caching let cache = ProofOfLifeCache::new(3600, 100_000); // Cold: 495ms (STARK proof generated) let result = ProofOfLife::generate_cached(&sk, &pk, &pq_signer, &cache); // Warm: 14.5ms (STARK skipped, three-family PQ signing only) let result2 = ProofOfLife::generate_cached(&sk, &pk, &pq_signer, &cache); // Verify: 800µs cold, <1µs cached let valid = ProofOfLife::verify_cached(&result, &pq_signer, &cache);
Circuit Audit
Tested against libsecp256k1

Differential testing against k256 (RustCrypto) as a trusted oracle. 1,100 keys. Zero mismatches.

Audit Results

Named test vectors (sk=1, 2, 42, 0xDEADBEEF)4/4 PASS
Powers of 2 (20 to 231)32/32 PASS
Edge cases (sk=n-1, byte boundaries, sk > n)5/5 PASS
Pseudo-random keys (100 + 1,000)1,100/1,100 PASS
AIR constraint verification (836 × 255 per key)0 violations
Tamper detection (accumulator, scalar bit, step counter)3/3 detected
Trace dimensions256 × 1,210
Total constraint checks~11.7M

Bug Disclosure

Differential testing caught a modular multiplication error in the native secp256k1 field arithmetic. The original bit-by-bit shift reduction produced correct results for sk=1 but diverged from k256 for sk≥2. The bug was invisible to internal consistency testing because the AIR constraints faithfully encoded the incorrect arithmetic — prover and verifier agreed on the wrong answer. Only oracle-based differential testing detected it. Fixed with num-bigint. All 1,100 keys match k256 exactly after the fix. We consider this a strong argument for mandatory oracle testing of any ZK circuit with non-native field arithmetic.

What It Proves
Three properties, one primitive

Key knowledge

The holder knows the private key corresponding to a specific secp256k1 public key, without revealing the private key. Zero-knowledge. Post-quantum sound (STARK, not SNARK).

ZK-STARK

PQ key binding

That knowledge is cryptographically bound to a specific three-family post-quantum key set via a domain-tagged SHA3-256 commitment. Changing the PQ key requires a new proof (requires the private key).

H33-74 type 0x12

Timestamped attestation

The binding is attested via H33-74 with a millisecond timestamp and, optionally, a Bitcoin anchor (Taproot tweak or OP_RETURN). The record is immutable, globally verifiable, and quantum-resistant.

Bitcoin anchor
Complementary, Not Competing
Proof of Life + QSB = Complete Protection
PropertyProof of Life (H33-74)QSB / BINOHASH
What it protectsKey control attestationUTXO spending
Where it livesApplication layerBitcoin script layer
What it proves"I controlled this key at this time""This spend is quantum-safe"
Fork requiredNoNo
Coins movedZeroYes (spending tx)
ComposableYes — deploy both for full coverage
Prove life. Bind to PQ. Anchor to Bitcoin.

The verifier is open source. The construction is in the whitepaper. The circuit audit is public.

Whitepaper §10.9 Download PDF Verifier Source