diff --git a/bip-XXXX/guardian-lock.png b/bip-XXXX/guardian-lock.png new file mode 100644 index 0000000000..ac1c89b3f6 Binary files /dev/null and b/bip-XXXX/guardian-lock.png differ diff --git a/bip-XXXX/guardian-setup.png b/bip-XXXX/guardian-setup.png new file mode 100644 index 0000000000..e9a9e52daf Binary files /dev/null and b/bip-XXXX/guardian-setup.png differ diff --git a/bip-XXXX/guardian-unlock.png b/bip-XXXX/guardian-unlock.png new file mode 100644 index 0000000000..3bb9f8e449 Binary files /dev/null and b/bip-XXXX/guardian-unlock.png differ diff --git a/bip-XXXX/signal-box.png b/bip-XXXX/signal-box.png new file mode 100644 index 0000000000..942518a849 Binary files /dev/null and b/bip-XXXX/signal-box.png differ diff --git a/bip-guardian-signal-protocol.mediawiki b/bip-guardian-signal-protocol.mediawiki new file mode 100644 index 0000000000..9a928e9baa --- /dev/null +++ b/bip-guardian-signal-protocol.mediawiki @@ -0,0 +1,351 @@ +
+ BIP: TBD + Layer: Applications + Title: Guardian Address Signal Protocol (GASPv1) + Author: Bitcoin Guardian+ +==Abstract== + +This proposal introduces the concept of a Guardian Address and defines a standard signalling mechanism that allows bitcoin wallets to become locked in response to an activation event. A single external control address triggers a security lockdown across one or more unrelated wallets without requiring any on-chain linkage between them. The goal is to prevent theft of bitcoin by enabling users to broadcast a standardized on-chain lock that causes cooperating wallets to enter a restricted mode, disabling the ability to spend UTXOs under duress. + +The design allows a separation of key material between the user's spending wallet and a Guardian Address; a discrete identity that signals lock state changes via a transaction embedding data in an+ Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-? + Status: Draft + Type: Standards Track + Created: 2025-09-19 + License: BSD-3-Clause + 
OP_RETURN (~$1 at 2.31 sat/vB, ~1BTC=124K USD). This enables emergency responders, user level software, and wallet applications to recognize a distress signal without exposing user spending address(es) or balances. Rapid wallet responses with fast wallet locks (95% signal detection in <10s on testnet3) enable coordination with a physical response.
+
+Adoption requires minimal overhead for wallet developers. This approach does not alter spending rules. It is a voluntary signalling protocol that requires adoption by wallet and custodial software to be effective. BIP compliant wallets will be able to offer this security mechanism without compromising privacy or usability. This standard is intended to be optional and without breaking compatibility for existing wallets or nodes.
+
+==Motivation==
+
+Bitcoin users are increasingly the targets of physical threats including robbery and coercion.Green, M., Miers, I. (2024). "Investigating Wrench Attacks: A Study of Physical Threats to Cryptocurrency Users". ''Leibniz International Proceedings in Informatics (LIPIcs)'', AFT 2024, Vol. 24. https://doi.org/10.4230/LIPIcs.AFT.2024.24
+A non-exhaustive list is maintained with details of physical attacks on bitcoin usersLopp, Jameson. "Physical Bitcoin Attacks". https://github.com/jlopp/physical-bitcoin-attacks, which provides some insight into the prevalence and severity of attacks. Notably the incidence of attacks is also increasing. Security controls have been implemented in some self-hosted wallets as a means to prevent theft of bitcoin. One such is a decoy wallet, which presents a wallet with a smaller balance of bitcoin when a duress PIN is entered. However, this comes with two significant downsides:
+
+* An assumption is made that the attacker does not know about or understand the purpose of a decoy wallet. If a sophisticated attacker is able to link an address to the real world identity of the user, they may already know the true balance of the bitcoin holder. If the attacker does not know the balance of the user they are attacking, they may still suspect the user has unlocked a decoy wallet given the lower than anticipated balance.
+* In the case that the attacker does not know the wallet opened is a decoy wallet, the attack still results in the loss of bitcoin for the user.
+Current self-custody solutions do not provide a safe way to respond under physical duress without risking loss of funds. In addition, participants in the Bitcoin ecosystem commonly use both self-hosted and centralized servicesRiver Financial. "How Many People Use Bitcoin in 2024?". https://river.com/learn/how-many-people-use-bitcoin/. There's no mechanism that currently exists that can act as a self-sovereign "kill switch" for both user scenarios of a self-hosted wallet or a user with a self-hosted and centralized wallet.
+
+In addition, existing self-custody solutions do not support integration with a privacy preserving response to physically protect users.
+
+This proposal introduces an interoperable mechanism to:
+
+* Allow users to trigger a wallet lockdown using a separate device or operation.
+* Preserve privacy by decoupling the Guardian Address from wallet addresses.
+* Enable wallet software to observe chain state and mempool to react defensively, signalling an active attack.
+* Protect a multiple wallet user (e.g., self-custodial wallet, exchange account, institutional wallet, custodian) with a single on-chain emergency trigger.
+* Allow businesses or multi-user custodial setups designating a Guardian Address to coordinate responses and align with risk management frameworks.
+
+==Specification==
+
+===Guardian Design===
+
+This BIP uses RFC 2119Bradner, S. (1997). "RFC 2119: Key words for use in RFCs to Indicate Requirement Levels". Internet Engineering Task Force (IETF). https://datatracker.ietf.org/doc/html/rfc2119 terminology for wallet integrators to implement the Guardian Address signalling protocol.
+
+A Guardian Address is any valid bitcoin address controlled by the user but separate from their spending wallet. Its purpose is to publish an on-chain signal indicating that the wallet(s) it guards MUST be locked. The Guardian Address is unaware of the wallet(s) it guards. It is recommended that the Guardian Address SHOULD only be used for guard function, and MUST NOT be the same as the spending wallet. The private key material for the Guardian Address must be physically separate from the user to prevent forced signalling by an attacker. An address becomes a Guardian by broadcasting an Unlock signal transaction. The Unlock signal sets guardv1.Lock=false#nonce and instantiates the address to act as a Guardian Address.
+
+The user sets a configuration entity within the wallet software that uses the Guardian Address controlled by the user. The wallet validates that the address provided is an instantiated Guardian Address. The wallet monitors the Guardian Address for state changes that indicate a Lock signal has been broadcast. In this event, the wallet prevents Guardian Address modification and the ability to spend UTXOs.
+
+BIP-158 Neutrino filtersOsuntokun, O., Wuille, P. "BIP 158: Compact Block Filters for Light Clients". https://bips.dev/158/ may be used by light/mobile clients to determine the latest Guardian Lock state by filtering OP_RETURN transactions for the Guardian Address and canonical identifier. They then evaluate the latest Lock state boolean operand.
+
+====Guardian Instantiation & Wallet Setup====
+
+Bob wants to enhance his security posture by using a Guardian Address to protect his wallet. Using a fresh (i.e. previously unused) address with separate key material from his spending wallet, he signs and broadcasts a Guardian Unlock. A common pattern is to set nonce=1 to clearly view the instantiated address. The Guardian Address is now instantiated for use and is unlocked.
+
+To protect Bob's wallet, he must enter the Guardian Address public key into the wallet configuration. The wallet software validates that the Guardian Address is instantiated and unlocked, and the wallet will monitor the address for Guardian signals.
+
+Bob spends UTXOs from his wallet. The wallet software checks the latest Guardian state, including pending transactions in the mempool, and as the Guardian is unlocked the wallet permits the transaction.
+
+[[File:bip-XXXX/guardian-setup.png|thumb|Guardian Setup]]
+
+====Guardian Lock====
+
+Bob has signed a Guardian Lock transaction with the private key of the Guardian Address. He has this pre-signed available to him ready to use when required. The design intentionally removes the requirement to carry the Guardian Address private key material with him.
+
+Bob is under duress and wishes to lock his Bitcoin wallets. He broadcasts his pre-signed Lock signal from the Guardian. As soon as it is visible in the mempool, wallets prevent spending any UTXOs.
+
+[[File:bip-XXXX/guardian-lock.png|thumb|Guardian Lock]]
+
+====Guardian Unlock====
+
+The attack on Bob is over and the threat has been mitigated. Bob wishes to regain access to his wallets and does so by broadcasting a Guardian Unlock transaction with the private key of the Guardian Address.
+
+The unlock signal with a incremented monotonic nonce signals to his self-hosted and centralized wallets that UTXOs may be spent and changes can be made. Guardian Addresses are reusable.
+
+[[File:bip-XXXX/guardian-unlock.png|thumb|Guardian Unlock]]
+
+===Guardian Signal Grammar===
+
+Guardian signals MUST conform to the following ABNFCrocker, D., Overell, P. (2008). "RFC 5234: Augmented BNF for Syntax Specifications: ABNF". Internet Engineering Task Force (IETF). https://datatracker.ietf.org/doc/html/rfc5234 grammar:
+
+guardv1.Lock=true#1 guardv1.Lock=false#42 guardv1.Lockfalse#3 guardv1.lock=true#1 guardv1.Lock=true#0003 guardv1.Lock=true#abc guardv1.Lock=true guardv1.Lock=true#4294967296 OP_RETURN output used to signal an Unlock event to compatible wallets. The transaction MUST be broadcast to the Bitcoin blockchain and SHOULD be visible in the mempool.
+
+====OP_RETURN Format====
+
++ +Where+OP_RETURN + 
+ +* Prefix:+guardv1.Lock=false#1 + 
guardv1 is the canonical identifier for version 1 of the Guardian signalling protocol.
+* Key: Lock is the operation type.
+* Value: Lock=true MUST be interpreted as "wallet locked" and Lock=false MUST be interpreted as "wallet unlocked."
+* Nonce: Monotonic nonce used to prevent replay attacks. Value is a decimal ASCII encoded 32-bit unsigned integer.
+
+This string is embedded in the OP_RETURN output as raw ASCII bytes, prefixed by its length.
+
+====Unlock Example====
+
+OP_RETURN output in hex:
+
++ +*+6a14677561726476312e4c6f636b3d66616c73652331 + 
6a is the OP_RETURN opcode
+* 14 is the pushdata length (20 bytes)
+* 677561726476312e4c6f636b3d66616c73652331 guardv1.Lock=false#1 OP_RETURN output in hex:
+
++ +*+6a13677561726476312e4c6f636b3d747275652332 + 
6a is the OP_RETURN opcode
+* 13 is the pushdata length (19 bytes)
+* 677561726476312e4c6f636b3d747275652332 guardv1.Lock=true#2 OP_RETURN data and verify it matches the expected prefix and key to respond accordingly.
+
+===Protocol Transaction Structure===
+
+A Guardian protocol message is a standard Bitcoin transaction constructed to carry a Lock Unlock SIGHASH_ALL Lock Unlock nSequence = 0xffffffff P2WPKH OP_RETURN P2WPKH Lock OP_RETURN P2WPKH Lock Lock Unlock OP_RETURN OP_VAULT OP_CHECKTEMPLATEVERIFY OP_RETURN Lock Unlock OP_RETURN Lock Lock Lock=false Lock Lock OP_RETURN Lock 10^21 − 1 transitions, making nonce exhaustion an unlikely event given the infrequent nature of signalling transactions.
+
+==Privacy Considerations==
+
+This BIP avoids any on-chain link between a user's spending wallet and their Guardian Address. Because the Guardian Address appears as an independent address posting infrequent signalling transactions with OP_RETURN OP_RETURN OP_RETURN OP_RETURN OP_RETURN OP_RETURN