This work was funded by a Brink grant.
I’ve recently seen a number of posts on X and the mailing list regarding rescue protocols for Bitcoin’s quantum procrastinators, and there seems to be a good deal of misunderstandings flying around. I attribute this to the unfortunate fragmentation in the literature on this subject.
In this post, I’d like to clear up confusion by showcasing past works on commit/reveal, their shortcomings and proposed mitigations, then finish by proposing a minimal commit/reveal protocol that I call DropKick and discussing its costs & benefits. I believe DropKick serves as the most convenient, scalable, and suitable candidate for a post-quantum rescue protocol to deploy on Bitcoin, rivaling Tadge Dryja’s LifeBoat proposal.
If you’re already familiar with rescue protocols and commit/reveal proofs, I suggest skipping straight to the section on DropKick.
Rescue Protocols
In case you’re not familiar with the motivating problem of quantum procrastinators, basically the issue is that a large chunk of the Bitcoin supply is going to be exposed to quantum attackers when/if “Q-day” (the first day a scalable quantum computer can break bitcoin) comes around, no matter how many people proactively migrate to PQ-safe wallets. It would be really nice if we could soft-fork in a new rule to consensus to authenticate spenders of these vulnerable UTXOs, such that the authentic coin holders could pass this check, but that quantum attackers could not. This is called a “rescue protocol”.
If designed correctly and deployed at the right time, a rescue protocol could minimize quantum theft, and maximize the number of authentic coin holders who can recover their coins after Q-day even if they don’t take any proactive measures to secure their coins with PQC before Q-day.
Knowledge Asymmetries
Rescue protocols are only possible because of Knowledge Asymmetries between honest users and quantum attackers. A knowledge asymmetry (“KA” for short) is a piece of secret information that an honest key-holder would have, but which even an advanced quantum attacker does not have and cannot compute or guess.
Some examples of known Knowledge Asymmetries on Bitcoin include:
- Public keys for hashed address types like P2PKH which haven’t been published before Q-day.
- Parent BIP32 xprivs used to derive account-level keys, e.g. an xpriv at key path
m/44'/0'. - Parent BIP32 xpubs used to derive address-level keys, e.g. an xpub at key path
m/44'/0'/0'. - Taproot internal keys.
- MuSig key aggregation contexts.
If you know of more asymmetries, please message me!
These pieces of information typically stay secret after Q-day, because while a quantum computer may have the ability to break ECDLP and invert public keys, we assume they cannot efficiently find 2nd preimages to the SHA256 hash function.
These KAs are quantum-secure because, in one form or another, they are all preimages in different computational pipelines which eventually spit out a Bitcoin address, like how a P2PKH address is derived from a pubkey, which is itself derived from a sequence of BIP32 keys, which are in turn derived from a seed phrase.
The point of a rescue protocol to add some (admittedly contrived) rules to Bitcoin’s consensus rules, such as:
This coin can only be spent by proving it was derived via hardened BIP32.
These rules would exploit the existence of KAs to shield inactive users (procrastinators) from quantum attackers, while still allowing the coins to be recovered in the majority of cases.
I say “majority of cases” here, because it’s not always possible to tell if a UTXO can be recovered using certain KAs.
For example, if you’re given an arbitrary UTXO, it’s not possible to tell at a glance whether that UTXO’s address is a multisig, or a single-signer, or if it was derived using BIP32, etc. You can make some heuristic assumptions, like
Old addresses are unlikely to use BIP32 and newer ones are more likely to use BIP32.
…but you can never be sure.
The only exceptions to this pickle that I’m aware of are hashed addresses and taproot internal keys.
- Hashed addresses (P2SH, P2PKH, P2WSH, P2WPKH) with hidden preimages can be enumerated via blockchain data. When Q-day comes, we can easily identify which addresses have hidden keys and which are exposed. Project Eleven does exactly this today, with their Bitcoin Risq List.
- Taproot BIP341 specifies that every P2TR address should commit to a merkle root, even if no script spending paths are needed. This is codified for BIP32 wallets in BIP86. So it seems safe to assume almost all P2TR addresses have an internal key.
In these cases, we can tell if a given UTXO supports either KA. In all others, we cannot.
A new technical term is needed here: If we can confidently enumerate the set of all Bitcoin UTXOs covered by a given KA at any given time, then we call that KA decidable. Otherwise we call it undecidable.
In reality, no KA is completely decidable, because it’s always possible that users of hashed addresses or P2TR have exposed their public keys to a quantum attacker off-chain somehow. But deciding based on blockchain data seems like the best we can do.
Proof Systems
Great, so we’ve got a bunch of KAs, and in some cases we can identify which UTXOs a KA can cover, and in other cases we can’t.
But how do we actually use these KAs?
We need a proving system, to allow an honest user to construct some kind of proof that she knows the witness (secret data) for a specific KA. The signer attaches this proof to her transaction, presumably in some novel extension field. A Bitcoin node verifier can then check this proof against the UTXO’s locking script, and if the proof is valid, and the rest of the legacy consensus rules are satisfied, then the spend is allowed.
Note that the legacy Bitcoin consensus rules must also be satisfied, and so legacy witnesses (keys + signatures) are also needed because otherwise the upgrade to activate the rescue protocol would be a hard fork.
We know of two such ways to do this: SNARKs and Commit/Reveal.
SNARKs
PQ-secure ZK-SNARKs, such as those recently benchmarked by Laolu and by Project Eleven, can turn a knowledge asymmetry into a binary or arithmetic circuit, and the honest signer can prove (in zero-knowledge) that she knows the witness as an input to that circuit.
This works for BIP32, taproot, and MuSig KA’s, but not for hashed addresses. A hashed-address proof is just a proof the signer knows the preimage which computes her address, e.g. a pubkey for P(W)PKH, or a script for P2(W)SH. Such a proof would be trivial to forge by any classical attacker as soon as he sees the honest signer’s spending transaction, given that (unless we assume a hard fork) the signer always needs to publish her address preimage in the spending TX.
SNARKs are nice for rescue protocols because they are:
- Self-contained: SNARKs are non-interactive. The verifier needs only the proof, and nothing else, to authenticate a rescue attempt.
- Succinct: One ZK-SNARK proof can, in theory, prove authorization over an effectively unbounded number of UTXOs, possibly across multiple transactions.
The main drawbacks of SNARK-based rescue protocols are:
- Performance: SNARK proving times typically run on the order of seconds for more complex statements. Recent developments like Binius and Flock are promising improvements and the state-of-the-art is improving rapidly. Verification time runs often into the multiple milliseconds, several orders of magnitude slower than EC or hash-based signature verification.
- Size: PQ ZK-SNARKs are typically hundreds of kilobytes large, regardless of circuit complexity. To scale the SNARK approach, we’d either need massive witness discounts, or recursive proofs that aggregate many individual proofs into one. The former is unpalatable in the wake of the BIP110 spam debate. The latter is difficult to fit into the architecture of Bitcoin - It seems like the responsibility for aggregating proofs would fall on miners, but it’s not clear how to properly incentivize them to perform expensive proving computations.
- Complexity: SNARKs are mathematically complex beasts to implement, full of opportunities for small implementation mistakes. In theory the security assumptions of hash-based SNARKs are minimal, but in practice their implementation complexity leads to broad attack surface especially in circuit design, as ZCash developers recently encountered. A break in soundness would mean that proofs could be forged and coins to be stolen. A break in zero-knowledge would expose users’ secret witnesses to short-exposure attacks, rendering the ostensibly “protected” coins unsafe to rescue.
Commit/Reveal
Commit/reveal protocols are a way to use a reliable timestamping service as the backbone of an authentication scheme. First proposed in this 1998 paper, and later suggested as a means to design FawkesCoin: a cryptocurrency without any public key cryptography.
The idea behind FawkesCoin is thus:
- Fix a secure hash function
. - Pick a secret preimage
and compute . - Share
as your public key (or receiving address). - To sign a message
, run a three-step process: - Publish a commitment
on-chain. - Wait a few blocks (until
cannot be reorganized out of the chain). - Publish a reveal containing
on-chain.
- Publish a commitment
- To verify a reveal
, check that: , and is present on-chain in a prior block.
Security derives from the fact that, assuming the blockchain is append-only, the authentic signer (the user who generated
There are many additional subtleties to address, but this is the core idea of commit/reveal protocols, and they work not just to prove knowledge of hash preimages, but also to prove knowledge of solutions for any arbitrary NP-complete problem in general (i.e. any problem for which solution-checking is fast).
For example, to prove knowledge of a Sudoku solution
Most PQ knowledge asymmetries are also NP-complete problems, so this generality means commit/reveal protocols can be applied as proof systems for proving any KA in a Bitcoin PQ rescue protocol, without any heavy cryptography like SNARKs. Commit/reveal proofs are much smaller than SNARKs, and are orders of magnitude faster to verify. They do have a few drawbacks which I’ll discuss in the next sections, but most can be mitigated.
Commit/reveal protocols have been discussed numerous times on the mailing list and in the cryptographic literature (see References).
For the rest of this article I will focus on commit/reveal proofs, and this will lead us towards a simple but effective design I call DropKick, which avoids most of the common footguns and complexities present in prior commit/reveal protocol proposals. DropKick focuses on implementation simplicity, and makes a small security concession in return (stay with me, it’s not so far-fetched).
Before describing DropKick, let’s define the knowledge asymmetry interface we need so our proof system generalizes over any knowledge asymmetry.
Quantum-Hard Functions
Any knowledge asymmetry on Bitcoin can be abstracted as a quantum-hard one-way function. I’ll now define what I mean by that.
Let
Let
Let
For example in BIP32, BIP32-CKDPriv function. In this case, the witness BIP32-CKDPriv.
Proving a Witness with Commit/Reveal
To reframe FawkesCoin-style commit/reveal in the context of a quantum-hard function, we change the protocol slightly to use
- Find a quantum-hard one-way function
. - Pick a secret witness
and compute the statement . - Share
as your public key (or receiving address). - To sign a message
, run a three-step process: - Publish a commitment
on-chain. - Wait a few blocks (until
cannot be reorganized out of the chain). - Publish a reveal containing
on-chain.
- Publish a commitment
- To verify a reveal
, check that: , and is present on-chain in a prior block.
Problems
I’ll now discuss the many problems with a naive FawkesCoin design as I described above, and the various mitigations available. This serves as background to justify the design choices of DropKick.
Two-Step Signing
The signing procedure in FawkesCoin is fundamentally a two-step process, with a mandatory delay between the commit and reveal steps. Once we know which message
If we publish
If we wait, but not for long enough, and publish
To be secure, we must wait until the block containing
In a real-world implementation of commit/reveal on Bitcoin, this would manifest as a rather queer user-experience: To salvage your legacy coins after Q-day, you would need to open your wallet once, publish the commitment
Mitigations
Unfortunately this UX property cannot really be mitigated, as it is the core signing procedure in any commit/reveal protocol, and arguably the biggest drawback of commit/reveal compared to SNARKs.
We can delegate the initial commitment step to an untrusted third party, but we cannot delegate the reveal step, as the third party could elect to mine his own commitment and try to forge a signature. It seems the signer must be online for both commit and reveal steps.
Commitment Bootstrapping
Bitcoin transactions must pay fees to miners, to prevent denial-of-service attacks and preserve the scarce resources of validator nodes.
How do we pay the fees needed to include our commitment
Mitigations
Prior discussions have proposed several mitigations, the main theme being the use of pre-existing PQ UTXOs.
PQ UTXO Bootstrapping. Use existing post-quantum-secure UTXOs to bootstrap commitments for rescuing legacy UTXOs. A holder of a PQ-secure UTXO could publish commitments (e.g. in OP_RETURN outputs) and so rescue her own legacy coins very easily. Those who do not already have PQ UTXOs would need to acquire help from users who do. Publishing a commitment
The problem then becomes about incentives: The PQ rescuers would need to act charitably, or be incentivized through off-chain payment (credit cards, altcoins, etc).
Salvage Fees. A more interesting option is an on-chain “salvage fee” - a share of the UTXO being rescued. If we modify the commitment protocol slightly so that instead of posting
Merkle Trees. As pointed out in the FawkesCoin paper (Section 5.5), we could also change how commitments appear on-chain. Instead of appearing in-the-clear (e.g one OP_RETURN per commitment), each commitment
- The aggregator accepts commitments, possibly with anti-DoS measures like captchas, zero-knowledge proofs, proof-of-work, or micropayments, and returns merkle proofs to clients in response. He sends completed merkle roots to the publisher.
- The publisher pays the fees to occasionally publish a merkle root somewhere clearly visible in a block.
The aggregator and publisher could be the same entity, but don’t have to be. The merkle root is a small opaque block of data, and it is inherently verifiable by any commit/reveal user who contributed to it.
By the way, this is very similar to how OpenTimestamps already works today. OTS is a protocol for producing verifiable timestamps on arbitrary messages, by aggregating many different message hashes into a merkle tree which are intermittently published in Bitcoin blocks. It’s feasible that we could reuse or modify OTS architecture for the purposes of posting commitments for a commit/reveal rescue protocol.
PQ UTXOs Requirement
Note that all known commitment bootstrapping techniques assume the existence of a cooperative user who holds at least one PQ-safe Bitcoin UTXO and is willing to publish a small block of data (e.g. the root of a merkle tree of commitments), possibly for compensation.
But what if there are no PQ UTXO holders available? Miners can also step up to assist, by publishing a commitment merkle root in a coinbase transaction. But ultimately we always need a second party to help here, and of course we must also assume there exists some quantum-secure address type to which users can safely send the rescued coins - Otherwise why move them in the first place?
This dependence on PQ UTXOs is the other major drawback of commit/reveal which is evidently very difficult to discard. This could potentially be fixed if Bitcoin nodes were to trust some external timestamping server, but that seems likely insecure.
Indexing
When validating a reveal, nodes must have access to the set of commitments. This is a problem because validators cannot tell invalid commitments from valid ones, and if validators index all commitments naively, then the invalid commitments will consume scarce memory or disk space while growing potentially unbounded.
This is an implementation problem which Lifeboat faces, as Lifeboat validators must proactively index the set of all commitments, which are simply OP_RETURN payloads satisfying a certain shape. Posting invalid commitments is a cheap one-time cost to the committer, but validators must track the invalid commitments permanently.
Mitigations
UTXOs. Nodes must already index the entire set of unspent outputs, so that spends in new blocks can be validated. A simple way to ensure all Bitcoin nodes index the set of commitments by default would be to define a new output type dedicated specifically to commit/reveal protocol commitments, and allow spending from that output type only in a corresponding valid reveal transaction. This cleanly slots commit/reveal design tightly into Bitcoin’s transaction model. However this is simply a repackaging of the indexing problem in a way which is simpler to implement in Bitcoin Core. We still face the problem that commitments can grow unbounded and consume scarce memory, it’s just that they now live in the UTXO set instead of a dedicated commitment index.
Expiry. One way to fix this would be to enforce expiry on every commitment, so that nodes only need to index commitments into a temporary cache, whose unused entries are evicted after some number of blocks. However this would handicap commit/reveal users: Reveals are no longer valid in-perpetuity, and this enables censorship attacks (see the next section), griefing, and hapless misuse.
SCV (Simple Commitment Verification). To mitigate the resource usage of indexing commitments more elegantly, we can design commitments to be indexed automatically by every node without consuming additional resources beyond what is already indexed today on Bitcoin.
Thankfully this is easily possible, provided that a commitment
Note we could put commitments into inscriptions or other envelopes which reside in the segregated block witness, but because pruning Bitcoin nodes delete witness data after it is validated, those nodes would need the opening proof to authenticate the witness TXID of the commitment transaction against the witness root hash in the coinbase transaction. This is more involved and expensive for the revealer to prove because she must include the reveal transaction witnesses and the coinbase transaction in her proof, so the cost of proving grows accordingly.
If we were to put commitments in OP_RETURN outputs as many have suggested in the past, this would do the trick more cleanly: Script pubkeys are covered by block hashes. However there is also a more efficient option: Hide the commitments inside of script pubkeys, e.g. in a P2MR/P2TR leaf script. These script pubkeys are covered by the block hash, so they suffice for security, but posting commitments inside them doesn’t add any additional data to the blockchain beyond what would already be published in a typical happy-path spend. This does add a few additional bytes to the commitment opening proof, but far less than would be needed to open a commitment in a block witness.
Censorship
In the context of Bitcoin, we cannot treat the blockchain as a completely permissionless append-only ledger. The miners collectively hold the ultimate say over which transactions are confirmed and when, and they typically act based on financial incentives.
We must consider the possibility of one or more miners actively censoring transactions, because in this case they have an incentive to do so.
If a miner sees a reveal of
Mitigations
To mitigate miner censorship, we have several options discussed in the literature and forums. Many are unfortunately not applicable to Bitcoin or rescue protocols.
Earliest Transfer Wins. The first idea proposed by FawkesCoin is to allow double-spending of coins by users who posted earlier commitments. If I posted
Validator Refusal. Validator nodes can refuse to accept blocks which contain a reveal
Challenge Period. We have previously assumed the reveal transaction to be the final stage of the rescue protocol, presumably with outputs sending to an unencumbered single-signer PQ address. With this mitigation, validator nodes enforce a challenge period of some large number of blocks after a reveal is mined. During the challenge period, the outputs of the reveal transaction are temporarily timelocked, so that commitments from earlier blocks can be revealed to supersede an initial malicious reveal, and reset the challenge period timelock. The problem with this approach is that miners can profit even from failed attacks: For every two blocks the miner can censor an authentic reveal, he can insert his own commitments in sequence and reveal them in reverse order to extract mining fees from the user. In the most extreme case, the miner could dump the entire UTXO’s value into fees which the miner then receives in the coinbase transaction. If such a TX can be mined, then we would have to introduce discontinuities in Bitcoin’s transaction graph to allow the honest user to claw it back. We discard this mitigation candidate due to the complexities and failure conditions it introduces.
Ordering. If verifiers can sort all commitments for a given witness
The observation made by Tim Ruffing, and improved by Tadge Dryja, is that once
On one hand, ordering commitments is great because it guarantees authentic spending: If you are the first to post a valid commitment, then your reveal is guaranteed and immutable.
Unfortunately, ordering comes with big drawbacks. To have ordering, we must require every commitment be posted on-chain in-the-clear, so that validator nodes can index them all in totality. We need not just timestamping, but also proof of publication for every commitment. Specifically, this rules out any off-chain aggregation of commitments. If one were to allow use of commitments hidden off-chain (e.g. in merkle trees committed on-chain), then it would be impossible for validators to find an ordering on all commitments for a given witness
Ordering also requires validators to maintain a full index of all commitments, keyed by
Delayed Reveal. Validator nodes enforce a long block delay between commitment and reveal transactions (e.g. 100+ blocks). A malicious miner attempting to steal the coins must also satisfy this delay requirement. This delay gives an honest user plenty of time to get her reveal transaction mined, provided that miners are not all persistently colluding to censor it. This worsens the user experience because users must wait a long time between the commit and reveal steps, but it is also very simple to implement, and very challenging for a single miner to defeat without near-total hashrate dominance.
Reveal transactions can also hedge against miner attacks by paying more in fees to the miners, who would miss out on the income by censoring the reveal. We explore how to find the optimal fee rate for a reveal TX in the Parameters section, which is justified in more detail in the Appendix on Game Theory.
Batching
In some cases, revealing the witness m/44'/0' will compromise the witnesses of every UTXO in any BIP32 account under that key path. The same applies when revealing the preimage for a hashed address, or a P2TR internal key, when the address holds multiple UTXOs.
Mitigations
To prevent commit/reveal spends from exposing other UTXOs to theft, the rescue protocol must be able to batch rescue, i.e. spend multiple UTXOs covered by the same witness m/44'/0', then the rescue protocol would need to atomically move every P2PKH UTXO across every BIP32 account under m/44'/0'/* in a single pass of commit/reveal. Otherwise some vulnerable UTXOs may be left unmoved, and would allow theft via the newly-exposed witness.
This means the commit/reveal witness is not so much a “per UTXO” witness as a “per transaction” witness, because in most common cases, the witness will authenticate multiple UTXO spends. This is also more economical and block-space-efficient.
One-Time Signing
Once a reveal
Mitigations
Key Certification. FawkesCoin is designed explicitly as a system to opt-out of public key cryptography entirely. This is a like “doomsday prepper” level of paranoia: On Bitcoin we will always want to have some public key cryptography, because it makes the user-experience way better because you can sign multiple messages.
To rectify this, a commit/reveal user should not directly sign a message, but instead use her commit/reveal proof to certify a given public key, and use that keypair to sign messages. In the context of a PQ rescue protocol, should be a public key for some post-quantum cryptosystem, such as SHRINCS. That PQ keypair can then be used to sign the actual transactions or other messages, which can be freely changed without modifying the commit/reveal proof. This enables RBF and other features of Bitcoin that require the ability to sign multiple messages.
Multi-Key Certification. If the PQ cryptosystem doesn’t support MPC, threshold signing, or multi-signature signing protocols, then it would be wise to admit certification of sets of PQ keys, so that salvage fees can be enforceable through multi-signature setups.
Script Certification. One could generalize Multi-Key Certification to allow a commit/reveal user to endorse any arbitrary locking script, however this may lead to excess implementation complexity and bug surface.
DropKick
Having explored the many subtleties of commit/reveal protocols, we will now show a concrete instance of a commit/reveal rescue protocol which I believe achieves a high degree of security, and incentivizes cooperative rescue, while keeping consensus rule changes and engineering surface minimal. I call it DropKick, because it is a straightforward two-step rescue protocol where one drops a commitment on-chain, and later kicks the coins elsewhere.
DropKick uses the original FawkesCoin commit/reveal scheme, but selects the most straightforward set of mitigations for various subproblems whenever such mitigations are available, prioritizing efficiency and leanness of any changes to consensus. Namely, DropKick uses:
- Salvage Fees, to incentivize PQ UTXO holders to operate servers which aggregate and publish commitments.
- Merkle-tree aggregated commitments, to reduce the amount of information that validator nodes must index, and encourage benevolent users to offer scalable commitment aggregation services (possibly in exchange for salvage fees).
- SCV (Simple Commitment Verification), to free nodes from any indexing burdens, and allow light/pruned nodes to validate reveals.
- Delayed Reveal, to reduce incentive for miner censorship attacks without mandating any explicit indexing or ordering of commitments. We accept the slight risk of mass miner collusion here (see the Appendix on Game Theory).
- Key Certification, to allow users to rectify errors, RBF transactions, and equivocate when their initial reveal transaction is not sufficient. For PQ cryptosystems which do not natively support multi-signature or admit cooperative signing through generalized MPC, we may elect to use Multi-Key Certification so that aggregators can still enforce salvage fees through naive multi-signature.
Proving
DropKick proving works as follows:
- Let
be a collision-resistant hash function. - Let
be a quantum-hard one-way function , where is the witness space is the space of Bitcoin addresses
- Let
be a large block delay, e.g. 1440 blocks (10 days). - Let
be a fee ratio (a fraction, typically very small).
- Find a set of witnesses
such that the set of all are the addresses (script pubkeys) of Bitcoin UTXOs . - Practically, witnesses could be merged and reconstructed later, e.g. for BIP32 xprivs deriving related addresses.
- Generate a post-quantum signing key
. - We could also allow
to be a multisignature group key, which would enable aggregators to cosign and enforce salvage fees on reveal transactions.
- We could also allow
- Post a time-anchored commitment
in a block, e.g. on an OP_RETURN, within a script pubkey, or in a merkle tree commingling with other such commitments published in the same way. - Compute an opening proof
which can be used to verify the historical provenance of the commitment . - Once the commitment
has been mined for blocks, construct a transaction spending to arbitrary outputs. should pay at least some fraction of the value of the rescued UTXOs as a fee to miners, to prevent censorship attacks (see the Parameters section).
- Sign
with , producing a post-quantum signature . - Produce a set of legacy TX input witnesses
to satisfy legacy consensus validation rules (e.g. EC signatures). - Attach the witness
, PQ-pubkey , signature , legacy witnesses , and opening proof producing a signed reveal transaction . - Publish
.
Verifying
A verifier, presented with a reveal transaction
- Validate all legacy consensus rules against
and the legacy witnesses (soft-fork compatibility). - Authenticate the commitment opening
, asserting was committed at least blocks earlier. - Verify
is a valid signature on under . - Decompose
. - For each
, verify that UTXO has script pubkey .
If all the above steps succeed, then the verifier knows that:
- The spender knew a quantum-hard witness
for the script pubkey that encumbered each UTXO . - The spender knew these witnesses for at least
blocks. - The spender authorized the use of a PQ signing key
. - The key
authorized the transaction .
This completes authentication of the spending TX
Benefits
DropKick:
- ✅ generalizes to any arbitrary knowledge asymmetry (hashed addresses, BIP32, etc).
- ✅ is sound against quantum attackers, provided the PQ signature scheme is unforgeable.
- ✅ has opening proofs of size logarithmic to the number of commitments in a block.
- ✅ allows equivocation (changing your mind) on the reveal transaction details, without needing to wait for confirmations on a second commitment transaction.
- ✅ allows users to incentivize commitment aggregators and publishers via enforceable salvage fees.
- ✅ is resistant to miner collusion, by incentivizing mining the first honest reveal TX.
- ✅ supports batched rescue of multiple UTXOs.
- ✅ has verification complexity linear in the size of the opening proof.
DropKick doesn’t:
- ❌ require a hard fork.
- ❌ permit double-spending.
- ❌ force commitments to expire.
- ❌ allow griefing.
- ❌ enable any denial-of-service attacks on Bitcoin nodes.
- ❌ allow arbitrary rotation of scripts.
- ❌ require any explicit indexing of commitments - Bitcoin block headers themselves serve to aggregate many commitments.
- ❌ require heavy cryptographic machinery, with the exception of a PQ signature scheme: It’s basically just OpenTimestamps re-engineered for a new purpose.
Drawbacks
- ⚠️ Requires users wait a long time (
blocks) between the commit and reveal steps. - ⚠️ Miners can theoretically steal coins if they can persistently censor a reveal transaction for
blocks. - This should be extremely unlikely in practice, as a significant majority of hashpower would need to collude for a period of at least
blocks. See the Appendix for more info.
- This should be extremely unlikely in practice, as a significant majority of hashpower would need to collude for a period of at least
- ⚠️ The opening proof
could be decently large, as it would need to embed the entire transaction that contains the commitment to . - This could be mitigated by using a standard transaction format template, which is prefilled by the verifier. This restricts the shape of commitment transactions, but makes proofs much smaller because the prover need not provide the entire commitment transaction.
- ⚠️ The reveal transaction requires at least one PQ signature, which (depending on the scheme) may be quite large.
- ⚠️ Aggregators could be flooded with spam commitments, which would inflate the size of opening proofs
for all users of that aggregator. - This can be mitigated through anti-DoS measures, like captchas, proof-of-work, salvage fees, or out-of-band payments.
- ⚠️ A single PQ signature suffices to sign for a large set of UTXOs
. This efficiency may introduce a weird incentive where some users want to use commit/reveal to consolidate many inputs together, because DropKick would admit smaller witnesses and faster signing when spending large numbers of UTXOs, compared to using a single PQ signature per input. Is this a perverse incentive, or just a roundabout way of aggregating signatures from a single signer? More study is needed. - ⚠️ If DropKick is deployed to authenticate undecidable KAs (see the section on Knowledge Asymmetries), then as with any rescue protocol that acts on undecidable KAs, the resulting soft fork would be confiscatory: Some subset of restricted legacy UTXOs - of unknown size - would be confiscated because they lack the required KAs. As far as I know this is an unsolveable problem, and DropKick makes no impact there.
Usage
DropKick users benefit from a very simple rescue UX: Come online once, generate a PQ key
The user can, at any time after
Essentially, adding the commitment is a sort of “delayed import” of her legacy coins into a PQ wallet under
- Import a legacy wallet? y/n
- Enter your legacy seed phrase
- Now wait 1000 blocks and your funds will be available 😇
Aggregation server operators can construct the PQ pubkey
Legacy validator nodes will ignore unknown transaction fields, and validate spends using legacy consensus rules, which are all satisfied by the legacy witnesses in
New validator nodes do not need to maintain any new indexes or download additional block data, nor do they need a new cryptographic primitive: A validator simply adds additional validation rules based on checking the outputs of some efficient one-way functions, and applies the correct rule when verifying spends of specific classes of UTXOs according to which KA applies in a given context - This is left purposefully unspecified.
Parameters
Using the game theory explored in the Appendix, we can find concrete parameter sets for DropKick which minimize the risk of miner censorship attacks, by incentivizing minority miners to choose to include the reveal transactions in their block templates, even if the remainder of the hashpower share is actively choosing to censor them.
The key relation which must hold is:
is the hashpower share of the miner who is considering whether to censor or include a reveal in their block template. is the block delay. is the value of the coins rescued by the reveal TX. is the fee ratio (the fraction of to be paid to miners).
We set
When the include reward exceeds the censor reward for at least one small miner, then this suffices to incentivize all miners to choose include. Specifically, we find that
If we fix the block delay
…specifically in the limit case where
This limit is an indeterminate form: as
…where
The derivative of
As
Some example parameter sets which work:
| Minimum Fee Ratio |
Block Delay |
|---|---|
| 0.02 | 50 |
| 0.01 | 100 |
| 0.005 | 200 |
| 0.0025 | 400 |
| 1440 |
Keep in mind,
To ensure the miners’ strategies converge on include, the DropKick reveal must pay a fee of greater than
Parameter Rigidity. Note that the minimum fee rate
Comparison Against LifeBoat
DropKick has a number of advantages over LifeBoat (and LifeJacket), but also some drawbacks.
| LifeBoat/LifeJacket | DropKick |
|---|---|
| Tightly secure against miner censorship attacks. | Requires a sacrificial fee proportional to coin value to disincentivize miner censorship attacks. |
| Admits a very quick (~6 block) rescue experience. | Requires a protracted delay of hundreds or thousands of blocks between commit/reveal stages. |
| Every commitment must be posted in-the-clear on-chain to achieve ordering. | Commitments can be hidden in a merkle tree commitment. |
| All commitments must be proactively indexed by nodes. | Commitments don’t need to be indexed. |
| Requires owning PQ coins, or paying out-of-band for someone else to publish a commitment. | Commitments can be cheaply aggregated reducing cost to the point of being almost free. Any fees can be paid from the rescued UTXOs. |
| Can only authorize a single message (TXID) per commitment. | Certifies one or more PQ keys which can sign arbitrary transactions or other messages. |
| Supports only two knowledge asymmetries: BIP32 and hashed addresses. | Supports any arbitrary knowledge asymmetry that can be expressed as a one-way address-derivation function. |
- DropKick’s main advantage against other commit/reveal proposals like LifeBoat is therefore its simplicity, its efficient delegable commitment system, and its generality, all making DropKick much more attractive when considering a protocol to realistically implement in Bitcoin Core or other existing implementations.
- DropKick’s main drawback is clearly that we need these somewhat loose game-theoretic arguments and incentives (proportional fees) to reason about security against miner censorship, whereas LifeBoat achieves tight security (up to large reorgs) against such attacks with only a constant cost to the revealer.
Conclusion
While SNARKs and ZKPs may be fun to study and to benchmark, I personally doubt very much that they will see any usage on Bitcoin’s consensus layer, at least for rescue protocols. Bitcoin’s cryptographic tooling innately leans towards the very conservative, and developers aim for leanness, simplicity, and performance. While SNARK assumptions are minimal, their real-world code footprint is anything but. There is also still much room for technical improvement to be made in the future on SNARKs, so shoving them into Bitcoin consensus too soon might inadvertently miss out on all the advancements which will be built in the near future.
Interestingly, ZKPs still play a useful role in DropKick, as they allow users to prove they know an authentic witness
Contrastingly, I believe commit/reveal rescue protocols like DropKick, introduced above, or Tadge Dryja’s Lifeboat, are much more suitable candidates to build rescue protocols for live deployment to Bitcoin’s consensus rule set. They require only a few hash function invocations; no complex arithmetization, circuit-building, constraint systems, polynomial commitment systems, or interactive oracle proofs. DropKick opening proofs, while larger than those of Lifeboat, are much smaller than a hash-based SNARK, and about the same size as an SPV proof which is typically less than 1 kilobyte - still smaller than most PQ signature schemes!
Further research is still needed to assess security of DropKick against persistent minority hashpower reorg censorship attacks (see the section on 51% attacks), and to determine the best strategy for slotting DropKick in among existing consensus rules as a soft-fork, in a way that doesn’t introduce a privacy-degrading perverse incentive after Q-day.
References
Much of what I discussed in this article was not my original idea - It has been discussed at-length on the mailing list for years. Outside Bitcoin, the cryptographic pedigree of commit/reveal protocols stretches back as far as 1998, and has even been proposed as a way to authenticate spending on a standalone cryptocurrency (FawkesCoin).
- https://doi.org/10.1145/302350.302353
- https://jbonneau.com/doc/BM14-SPW-fawkescoin.pdf
- https://gnusha.org/pi/bitcoindev/1518710367.3550.111.camel@mmci.uni-saarland.de/
- https://eprint.iacr.org/2023/362
- https://eprint.iacr.org/2025/1307
- https://groups.google.com/g/bitcoindev/c/LpWOcXMcvk8
- https://groups.google.com/g/bitcoindev/c/jr1QO95k6Uc
- https://groups.google.com/g/bitcoindev/c/uUK6py0Yjq0
- https://www.youtube.com/watch?v=4bzOwYPf1yo
However, many of the fundamental ideas are tied up in Bitcoin-specific terminology (e.g. signing a “TXID” instead of a “message”, committing a “pubkey” instead of a “witness”). Many solutions are fractured, sprinkled throughout the mailing list and with trade-offs which were either unknown at the time, or at least not clearly spelled out.
I hope this article has helped consolidate some of this scattered knowledge into one place. If you know of more commit/reveal ideas/solutions which I haven’t discussed here, please message me! I may have known about some ideas and elided them, but if there are any neat tricks I’ve missed I would love to know.
Toodles :)
Appendix: Game Theory
If enough miners collude for long enough though (
Here is a game that models censorship attacks on DropKick.
- Let
be a block delay. - For simplicity, assume there exist
miners , with corresponding fractional (non-negative) hashpower shares , such that . - The miners first see a reveal
spending value after a block at height has been mined. - For each block after height
, a miner has two choices: censor the reveal , or include it. - For each block, a single winning miner
is randomly selected according to a distribution weighted by hashpower shares. - Miners must choose to censor or reveal before learning if they were selected as the winner of a block.
- If at block
all winning miners have chosen repeatedly ( times) to censor the reveal, then whichever miner is selected to win block earns a reward of coins. All other miners earn 0 reward. - If at any intermediate block height
a winning miner chooses instead to include the reveal , that miner earns some fraction of the reveal spend value , for a total reward of . - We explicitly leave out the possibility of intentional reorgs as an attack vector. (Explained later)
Strategies
In this section we’ll assess the different strategies available to miners, and find the game’s Nash Equilibrium.
We start by assuming the worst case: every miner always chooses to censor on every block (the censor strategy). In this case, the expected reward for a miner
In this environment, consider a miner
This gives a total expected reward for the include strategy of
Relating these two expected rewards to one another, we find the critical relation which determines when the censor strategy is (or is not) a stable Nash Equilibrium.
If the right-hand side is larger than the left-hand side for every miner
If for any miner
If miner
The probability that
More generally, with potentially multiple miners choosing the include strategy, we let
Then the expected reward
Notice that when
…where
The expected reward for
- For a miner
, the probability that they win a block is . - The probability that any censoring miner wins a block becomes
. - The probability that only censoring miners won for
consecutive blocks is .
Therefore, the probability that miner
This event can occur for any block offset
Using the formula for the sum of a geometric series, we can rewrite the probability of miner
Therefore, the expected reward
Notice that when
If
In the next section we’ll explore exactly when this does and doesn’t occur.
Visualization
Consider the following function:
When
Let’s momentarily fix
In this case,
This appears to hold more generally: If
Note this means for any very small miner with negligible hashpower, it is often far more desirable to choose the include strategy over the censor strategy than for larger miners with significant hashpower.
Now assume some very small miner has elected to switch to the include strategy. How does this change
Quite significantly, it turns out.
- The purple line above is the earlier line, graphing
. - The green line is the same, but with
. - The white line is the same, but with
. - The blue line is the same, but with
.
Notice that
Let’s see what happens if we fix
This graph shows us that
We can make the fee ratio minimum much smaller by increasing the block delay. Doubling the block delay appears to halve the minimum fee ratio. For example, a block delay of 16 days (2304 blocks) gives a minimum fee rate of about
- The orange line graphs
. - The pink line is
- The green line is
- The white line is
- The blue line is
Explore the graphs for yourself.
51% Attacks
So far we’ve been setting
Such attacks are cheap when conducted with a dominant majority of hashpower share (e.g. 99.99%), because the 0.001% minority miners find valid blocks only very rarely, and so the expected penalty of ignoring them is small, but expensive when conducted with a smaller hashpower share (e.g. 60%), because a fraction of that hashpower is dedicated solely to undoing the work of the minority miners (i.e. attackers with 60% hashrate must expend 2/3 of their hashpower just to undo the work of the honest 40% minority).
To be confident that 51% attacks won’t be used to censor reveal transactions, we must also assume some non-negligible fraction
Clearly if we require
Intuitively this assumption seems reasonable: Miners today already have the opportunity to earn large sums by executing 51% attacks and double-spending coins to defraud users or other businesses, but they do not.
I leave it open as a future exercise to myself or other researchers to find if the assumed fraction