This document outlines the OBPP criteria for rating the privacy strength of Bitcoin wallets. Each item represents an objectively-measurable test of how well a rated wallet implements countermeasures for the attacks identified in the [threat model](threat model.wiki). The result of each test is converted into a numeric score via a method decribed below or in the methodology.
Our metrics are based on feature completeness and user experience. To evaluate user experience, we utilize a "minimum number of clicks to perform action" metric. This metric is easily standardized between wallets, minimizes subjectivity, and can be measured by a single tester.
Each sub-category of privacy, such as "Change Address Generation," is broken down into between one and three areas of consideration, including usability, quality, and user feedback.
- Receiving Addresses
- Generation
- Usability:
- Number of clicks required to deviate from the default receiving functionality and generate a new receiving address for an existing wallet (8.89%)
- Feedback:
- Receiving addresses are hidden from the default view once they have been used? (3.11%)
- Preemptively indicates a loss of privacy when user elects to receive funds at a previously-used addresses? (4.67%)
- Usability:
- Backup
- Usability:
- Number of clicks to backup a newly-generated receiving address from an existing wallet (worst case), from the default window/authenticated home page (1.39%)
- Quality:
- Does the backup process leak information about wallet addresses (e.g. each time a new change address is created on-demand, an email backup is triggered immediately)? (1.39%)
- Feedback:
- Indicates a reduction in wallet safety when receiving address backups are stale, or uses eternal backups? (1.11%)
- Usability:
- Generation
- Change Addresses
- Generation
- Usability:
- Number of clicks required to deviate from the default change functionality and receive change at a newly generated address (5.95%)
- Quality:
- The position of the change output(s) in the transaction is random? (2,98%)
- One or more change outputs are created which are close to the value of the desired spend? (1.98%)
- Some change output values are intentionally set to “round numbers” (a.k.a low number of significant digits)? (0.99%)
- Feedback:
- Change addresses are hidden from the normal receiving workflow by default to discourage using them as receiving addresses? (1.90%)
- Preemptively indicates a loss of privacy when user elects to reuse change addresses as receiving addresses? (2.86%)
- Usability:
- Backup
- Usability:
- Number of clicks to backup a newly-generated change address from an existing wallet (worst case), apart from the sending workflow (1.39%)
- Quality:
- Backups can occur offline, or are encrypted client-side with data that only the user controls e.g. password? (1.39%)
- Feedback:
- Indicates a reduction in wallet safety when change address backups are stale, or uses eternal backups? (1.11%)
- Usability:
- Generation
- Sender Privacy vs Blockchain Observers
- Mixing
- Usability:
- Number of clicks required by user for inputs/outputs to be mixed with one or more other users (2.38%)
- Quality:
- Average number of other users whose funds are mixed with yours when sending through a mixing process (0.79%)
- Mixing is secure against correlation attacks by the facilitator? (0.79%)
- Mixing is secure against theft of funds? (0.79%)
- Feedback:
- Warns the user when a proposed mix is easy to reverse? (1.90%)
- Usability:
- Address Reuse
- Feedback:
- Warns user when sending to an address that the user has sent to before? (3.89%)
- Feedback:
- Input Merging
- Quality:
- When an outgoing transaction must merge inputs, and when mixing is not being used, is the transaction constructed in a way that plausibly resembles a mixing transaction? (3.33%)
- Feedback:
- Outside of a mixing transaction, preemptively indicates a loss of privacy when merging inputs from different addresses in the same transaction? (2.22%)
- Quality:
- Identity Separation
- Quality:
- Avoids creating transactions which contain inputs from different identity containers, except optionally if the user has intentionally overridden this behavior? (6.67%)
- Quality:
- Mixing
- Receiver Privacy
- ECDH Address Support
- Usability:
- Number of clicks required by user to generate a ECDH receiving address, from the default window/authenticated home page. (5.56%)
- Usability:
- Receiver Identity
- Quality:
- Wallet avoids leaking information about recipients via an external identity lookup? (5.56%)
- Quality:
- ECDH Address Support
- Sender Privacy vs Network Observers
- Balance Information
- Usability:
- Number of clicks required by user to connect to the source of balance information without leaking their identity over the network (3.97%)
- Quality:
- Is balance information obtained in a manner which avoids leaking the addresses in a wallet to network peers? (3.97%)
- 100: Full node - the wallet is part of, or works with, a full node under the user’s exclusive control
- 75: Carefully filtered - address filters are used, but filters are never updated and when a new one is required it is registered with a brand new peer
- 50: Unsafely filtered - address filters are used, and they are updated or reuse peers.
- 0: Unfiltered - Balance is obtained from a peer which can easily connect wallet addresses to a specific connection/wallet
- Is balance information obtained in a manner which avoids leaking the addresses in a wallet to network peers? (3.97%)
- Feedback:
- Client provides a visual indication if the balance information is not being obtained through an anonymizing network, including IP address information? (3.17%)
- Usability:
- Outgoing Transactions
- Usability:
- Number of clicks required by user to route outgoing transactions through an anonymizing network (1.98%)
- Quality:
- Are outgoing transactions routed through a different entry point into the network than the source of balance information? (1.98%)
- Feedback:
- Client provides a visual indication if outgoing transactions are not being routed through an anonymizing network, including IP address information? (1.59%)
- Usability:
- Identity Separation
- Usability:
- Number of clicks to create a new identity container ( 1.32%)
- Number of clicks to assign an imported address to an identity container (0.66%)
- Quality:
- Avoids including addresses from multiple identity containers in the same address filter? (0.99%)
- Avoids broadcasting outgoing transactions from different identity containers via the same network access path? (0.99%)
- Feedback:
- Visually indicates to user when inputs from different accounts/pockets are merged before the transaction is broadcast, or prohibits this operation entirely?(1.59%)
- Usability:
- Operating System Support
- Usability:
- Compatible with latest version of Tails? (2.78%)
- 100: Actually included in the Tails live cd
- 75: Program and any dependencies are packaged into a single file which can be easily installed
- 50: Installation is possible, but requires multiple complex steps
- 0: WIll not run on Tails
- Compatible with latest version of Tails? (2.78%)
- Usability:
- Balance Information