Skip to content

Add scrubber bip - #12

Open
arminsabouri wants to merge 1 commit into
mainfrom
psbt-scruber
Open

Add scrubber bip#12
arminsabouri wants to merge 1 commit into
mainfrom
psbt-scruber

Conversation

@arminsabouri

Copy link
Copy Markdown
Collaborator

No description provided.

@xstoicunicornx

Copy link
Copy Markdown

Maybe put this in a "BIPs" folder? Since we also have concurrent psbt bip that would be good put in same folder.

@nothingmuch

Copy link
Copy Markdown
Contributor

Maybe put this in a "BIPs" folder? Since we also have concurrent psbt bip that would be good put in same folder.

i suggest bip-drafts, since they are not really bips until they are assigned a number in that repo

Comment thread scrubber.md
Comment on lines +62 to +64
## Fields

We categorize PSBT fields from the [BIP 174 type registry](https://github.com/bitcoin/bips/blob/master/bip-0174/type-registry.mediawiki) by privacy sensitivity. Each table lists the registry name, key type, minimum PSBT version, and the BIP that introduces the field.

@nothingmuch nothingmuch Aug 12, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this doesn't address ordering, but i think it probably should

given that bip 174 already requires canonical compact int encoding i believe that apart from the ordering, there are no degrees of freedom in the psbt format itself that would result in serializer fingerprints

within each map, if all fields are sorted by type, and then keydata (already the case for psbt_v2 library's output)

if the maps are also sorted, then the output should become canonical

@bc1cindy bc1cindy left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

concecpt ACK, great work!

Comment thread scrubber.md
Comment thread scrubber.md
Comment on lines +102 to +103
/// Tapscript signatures must be treated as sensitive if they may not end up on-chain; i.e., the PSBT can be finalized in more than one way.
/// Contrived example: you have both a key-path spend signature and a tapscript signature. Some other party decides which to broadcast. That party learns your tap tree structure.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if the spend-path lands, this note is moot

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a comment. So wouldnt live in the final document

Comment thread scrubber.md
Comment on lines +221 to +228
// Tweak the input such that it can spend the output.
// If you reveal your tweak, an untrusting participant can link your input to a silent payment output and verify that the output is a silent payment.

// TODO: are these sensitive? Yes, partly because they label an output as a silent payment when untrusting parties would not otherwise know.
// Created when the input set is not unilateral.
// Created and shared when all inputs are owned by the same owner.
// This necessarily implies a common input owner.
// TODO: maybe these are sensitive because of the common-input-ownership heuristic, but the per-input ones are not?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion:

Silent payment fields are sensitive because they reveal that an output is a silent payment, which on-chain is meant to be indistinguishable from a plain P2TR key-path spend. Revealing an input's tweak lets an untrusted party link that input to the silent payment output and confirm it is a silent payment. This applies equally to the global and per-input fields, so all are stripped. The global ECDH share is the aggregate of per-input shares and does not by itself imply common input ownership.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes.

silent payments outputs based on a payment code can't be constructed in the multiparty setting without cooperation from the other input owners. that can be done in a privacy preserving way, but involves additional round trips, zk proofs etc, and has not been specified yet or proven secure.

silent payments output derivation with knowledge of the private scanning key, on the other hand, are doable without cooperation and reccomended for self-spend outputs from coinjoin because that avoids address reuse statelessly and with no address gap issues (but with the requirement to re-download all coinjoins on recovery from seed).

since only the latter mode will be supported at first, it's best to not leak anything to do with silent payments, and explicitly allow it when/if blinded DH based SP derivation is specified in an extension to this spec.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants