Bitcoin-based honeypots incentivise intruders into revealing the fact they have broken into a server by allowing them to claim a reward based on secret information obtained during the intrusion. Spending a bitcoin can only be done by publishing data to a public place - the Bitcoin blockchain - allowing detection of the intrusion. The simplest way to achieve this is with one private key per server, with each server associated with one transaction output spendable by that key. However this isn't capital efficient if you have multiple servers to protect: if we have N servers and P bitcoins that we can afford to lose in the compromise, one key per server gives the intruder only N/P incentive. Previously Piete Wuille proposed(1) tree signatures for honeypots, with a single txout protected by a 1-N tree of keys, with each server assigned a specific key. Unfortunately though, tree signatures aren't yet implemented in the Bitcoin protocol. However with a 2-of-2 multisig and the SIGHASH_SINGLE feature we can implement this functionality with the existing Bitcoin protocol using the following script: 2 2 CHECKMULTISIG The honeypot secret key is shared among all N servers, and left on them. The distriminator secret key meanwhile is kept secret, however for each server a unique signature is created with SIGHASH_SINGLE, paying a token amount to a notification address. For each individual server a pre-signed signature created with the distriminator secret key is then left on the associated server along with the honeypot secret key. Recall the SIGHASH_SINGLE flag means that the signature only signs a single transaction input and transaction output; the transaction is allowed to have additional inputs and outputs added. This allows the thief to use the honeypot key to construct a claim transaction with an additional output added that pays an address that they own with the rest of the funds. Equally, we could also use SIGHASH_NONE, with the per-server discriminator being the K value used in the pre-signed transaction. Note that Jeff Coleman deserves credit as co-inventor of all the above. Censorship Resistance ===================== A potential disadvantage of using non-standard SIGHASH flags is that the transactions involved are somewhat unusual, and may be flagged by risk analysis at exchanges and the like, a threat to the fungibility of the reward. We can improve on the above concept from Todd/Coleman by using a pre-signed standard transaction instead. The pre-signed transaction spends the honeypot txout to two addresses, a per-server canary address, and a change address. The private key associated with the change addres is also left on the server, and the intruder can then spend that change output to finally collect their reward. To any external observer the result looks like two normal transactions created in the process of someone with a standard wallet sending a small amount of funds to an address, followed by sending a larger amount. Doublespending ============== A subtlety in the the two transactions concept is that the intruder doesn't have the necessary private keys to modify the first transaction, which means that the honeypot owner can respond to the compromise by doublespending that transaction, potentially recovering the honeypot while still learning about the compromise. While this is possible with all honeypots, if the first transaction is signed with the opt-in RBF flags, and CPFP-aware transaction replacement is not implemented by miners, the mechanics are particularly disadvantageous to the intruder, as the honeypot owner only needs to increase the first transaction's fee slightly to have a high chance of recovering their funds. With CPFP-aware transaction replacement the intruder could in-turn respond with a high-fee CPFP second transaction, but currently no such implementation is known. Scorched Earth ============== We can use the "scorched earth" concept to improve the credibility of the honeypot reward by making it costly for the honeypot owner to doublespend. Here a second version of the honeypot pre-signed transaction would also be provided which sepnds the entirety of the honeypot output to fees, and additionally spends a second output to fees. An economically rational intruder will publish the first version, which maximizes the funds they get out of the honeypot. If the owner tries to dishonestly doublespend, they can respond by publishing the "scorched earth" transaction, encouraging the honeypot owner's honesty and making CPFP-aware transaction replacement irrelevant. Of course, miner centralization adds complexity to the above: in many instances honeypot owners and/or intruders will be able to recover funds from altruistic miners. Equally, the additional complexity may discourage intruders from making use of the honeypot entirely. Note that as an implementation consideration CHECKSEQUENCEVERIFY can be used to ensure the honeypot output can only be spent with transaction replacement enabled, as CSV requires nSequence to be set in specific ways in any transation spending the output. References ========== 1) https://blockstream.com/2015/08/24/treesignatures/ -- https://petertodd.org 'peter'[:-1]@petertodd.org