<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated></updated>
  <generator>https://nostr.ae</generator>

  <title>Nostr notes by </title>
  <author>
    <name></name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://nostr.ae/npub1jqxs4ftunmm8qjyw9s80hpcayewkjfhpxund29l9qvzy7xqx4duq85jqeg.rss" />
  <link href="https://nostr.ae/npub1jqxs4ftunmm8qjyw9s80hpcayewkjfhpxund29l9qvzy7xqx4duq85jqeg" />
  <id>https://nostr.ae/npub1jqxs4ftunmm8qjyw9s80hpcayewkjfhpxund29l9qvzy7xqx4duq85jqeg</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqs2w2dvljeyu7sqrkj7nxpjmlsjujqm0smnc8w2t2es4zk2e8u6xuszyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsthueul</id>
    
      <title type="html">📅 Original date posted:2021-04-12 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2w2dvljeyu7sqrkj7nxpjmlsjujqm0smnc8w2t2es4zk2e8u6xuszyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsthueul" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsy7pkqvcjzd4h9quz7rl00l0sj60nh59hhhdquacrv04gdr5qa39s36esye&#39;&gt;nevent1q…esye&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-12&lt;br/&gt;📝 Original message:Hello Salvatore,&lt;br/&gt;&lt;br/&gt;On Mon, Apr 12, 2021 at 8:03 AM Salvatore Ingala &amp;lt;salvatore.ingala at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Hugo,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; First of all, thank you for the impressive work on leading the&lt;br/&gt;&amp;gt; standardization efforts!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe one ought to more clearly distinguish the &amp;#34;Signer&amp;#34; (as in: one&lt;br/&gt;&amp;gt; of the parties in the multisig setup), from the &amp;#34;*Signing device*&amp;#34; (which&lt;br/&gt;&amp;gt; is likely a hardware wallet).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Actually, in the current spec, a &amp;#34;Signer&amp;#34; is *any software/hardware that&lt;br/&gt;possesses the private keys and can sign using those keys* -- it doesn&amp;#39;t&lt;br/&gt;have to be hardware. &amp;#34;Signer&amp;#34; does not mean the human user. I will clarify&lt;br/&gt;the definition and clear up any ambiguous language in the spec. Thanks for&lt;br/&gt;bringing this to my attention!&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; BSMS defines a &amp;#34;Signer&amp;#34; as &amp;#34;a participating member in the multisig&amp;#34;,&lt;br/&gt;&amp;gt; therefore a person/entity who is likely using both a hardware wallet and&lt;br/&gt;&amp;gt; some BSMS-friendly software wallet (e.g. the next version of Specter&lt;br/&gt;&amp;gt; Desktop).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;As mentioned above, &amp;#34;Signer&amp;#34; does not refer to the user or any entity that&lt;br/&gt;does not have the private keys / signing capability.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; It is therefore relevant to discuss which parts of the BSMS mechanism are&lt;br/&gt;&amp;gt; implemented in the Signer&amp;#39;s software wallet, and which should be in the&lt;br/&gt;&amp;gt; Signer&amp;#39;s hardware wallet.&lt;br/&gt;&amp;gt; From the discussion, it appears to me that different people might have&lt;br/&gt;&amp;gt; different expectations on what the signing device/HWW should do, so I would&lt;br/&gt;&amp;gt; like to comment on this point specifically (while I reckon that it mostly&lt;br/&gt;&amp;gt; falls within the realm of concerns #4 and #5 of the motivation paragraph,&lt;br/&gt;&amp;gt; which are explicitly left out of scope).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I fully agree that a *Signer* must persist the full wallet&amp;#39;s description,&lt;br/&gt;&amp;gt; and should also create physical backups which include the full descriptor&lt;br/&gt;&amp;gt; and the cosigner&amp;#39;s information. I would disagree, however, if any standards&lt;br/&gt;&amp;gt; were to force *hardware wallets* to persist any substantial amount of&lt;br/&gt;&amp;gt; state other than the seed, as I believe that it gives no substantial&lt;br/&gt;&amp;gt; advantage over externally stored signed data for many use cases.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The following is the *wallet registration flow* I am currently working on&lt;br/&gt;&amp;gt; (in the context of adding support to multisig wallets at Ledger). The goal&lt;br/&gt;&amp;gt; is to allow a *Signer* (the person) to persist a multisig setup in its&lt;br/&gt;&amp;gt; storage, while achieving a similar level of security you would have if you&lt;br/&gt;&amp;gt; were storing it on the hardware wallet itself (note that the following flow&lt;br/&gt;&amp;gt; would happen as part of Round 2):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1) The desktop wallet of the requests the HWW to register a new multisig&lt;br/&gt;&amp;gt; wallet. The request includes the full multisig wallet description, and some&lt;br/&gt;&amp;gt; extra metadata (e.g.: a name to be associated to this multisig wallet).&lt;br/&gt;&amp;gt; 2) The HWW validates the wallet and verifies it with the user with the&lt;br/&gt;&amp;gt; trusted screen (as per BSMS Round 2); on confirmation, it returns a wallet&lt;br/&gt;&amp;gt; id (which is a vendor-specific hash of all the wallet description &#43;&lt;br/&gt;&amp;gt; metadata) and signature&lt;br/&gt;&amp;gt; 3) The desktop wallet stores the full wallet description/id/signature.&lt;br/&gt;&amp;gt; (Optionally, a backup could be stored elsewhere).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Whenever an operation related to the multisig wallet is required&lt;br/&gt;&amp;gt; (verifying a receiving address, or signing a spending transaction), the HWW&lt;br/&gt;&amp;gt; first receives and verifies all the data stored at step 3 above (without&lt;br/&gt;&amp;gt; any user interaction). Then it proceeds exactly the same way as if it had&lt;br/&gt;&amp;gt; always stored the multisig wallet in their own storage.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Now that we&amp;#39;re clear on definitions, then it should become obvious that&lt;br/&gt;redefining the &amp;#34;Coordinator-Signer&amp;#34; pair as &amp;#34;a Signer&amp;#34; does not address the&lt;br/&gt;underlying problem. (What you call &amp;#34;the desktop wallet&amp;#34; here is a&lt;br/&gt;Coordinator, not a Signer).&lt;br/&gt;&lt;br/&gt;As long as the Signer does not own up the task of storing the wallet&lt;br/&gt;configuration, it must rely indefinitely on others for critical data when&lt;br/&gt;working in a multisig wallet, as I have explained in my last email.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210412/d2c96113/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210412/d2c96113/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T00:51:22&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyth5hwrfvmhgk9hv3a0d053yr9vfxdr80urenk2t2w3qc8ej8m4szyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsdlvqmt</id>
    
      <title type="html">📅 Original date posted:2021-04-11 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyth5hwrfvmhgk9hv3a0d053yr9vfxdr80urenk2t2w3qc8ej8m4szyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsdlvqmt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs28u6flsa8n5t73c94w0q0w83hgxqua895j0ljnrmt6z3pqppl9pgg3atr3&#39;&gt;nevent1q…atr3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-11&lt;br/&gt;📝 Original message:Hi Michael,&lt;br/&gt;Comments inline.&lt;br/&gt;&lt;br/&gt;On Sat, Apr 10, 2021 at 7:34 PM Michael.flaxman &amp;lt;&lt;br/&gt;michael.flaxman at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Hugo,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I appreciate the effort you and everyone else is making to improve&lt;br/&gt;&amp;gt; multisig in bitcoin!&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Thanks.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; I like that this BIP gets rid of SLIP132 version bytes, as those have been&lt;br/&gt;&amp;gt; de-facto deprecated in favor of output descriptors for some time. Having a&lt;br/&gt;&amp;gt; standard for how to communicate descriptor records (BSMS 1.0) also seems&lt;br/&gt;&amp;gt; like a nice positive.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The most commonly raised issues from the 10x security guide&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://btcguide.github.io/&amp;gt&#34;&gt;https://btcguide.github.io/&amp;gt&lt;/a&gt;; are about how to properly verify that all&lt;br/&gt;&amp;gt; hardware wallets are participants in the user&amp;#39;s multisig quorum (and with&lt;br/&gt;&amp;gt; the correct m-of-n). This shows up in two big ways:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    1. The O(n^2) xpub validation problem creates a bad UX and is hard for&lt;br/&gt;&amp;gt;    non-advanced users.&lt;br/&gt;&amp;gt;    2. The risk for stateless hardware wallets (like Trezor) to have their&lt;br/&gt;&amp;gt;    xpubs swapped out by a compromised Coordinator.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Unfortunately, this BIP does not improve either of these issues, while&lt;br/&gt;&amp;gt; adding considerable complexity.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; *1. O(n^2) Xpub Validation*&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The proposed use of an output descriptor checksum has an obvious 40-bit&lt;br/&gt;&amp;gt; MITM collision attack. A compromised Coordinator could trick a Signer into&lt;br/&gt;&amp;gt; displaying an attacker&amp;#39;s receive address, despite a correctly functioning&lt;br/&gt;&amp;gt; Signers and the user properly validating the checksum (github link&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://github.com/nunchuk-io/bips/pull/1/#issuecomment-801629857&amp;gt&#34;&gt;https://github.com/nunchuk-io/bips/pull/1/#issuecomment-801629857&amp;gt&lt;/a&gt;;).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Using a checksum with much higher entropy would reduce xpub validation to&lt;br/&gt;&amp;gt; O(n) and create a very nice UX for signers. This would be a huge win for&lt;br/&gt;&amp;gt; multisig! Instead, the recommended solution from the BIP is to validate all&lt;br/&gt;&amp;gt; the key records manually, which is how multisig is currently done and what&lt;br/&gt;&amp;gt; we desperately want to move away from. With a proper checksum, there’s no&lt;br/&gt;&amp;gt; reason for a user to ever see an xpub.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Users should not be shown a checksum and asked to validate it in meatspace&lt;br/&gt;&amp;gt; (across Signers) if an attacker’s address could still be substituted!&lt;br/&gt;&amp;gt; Validating a single address across devices does solve this problem, but if&lt;br/&gt;&amp;gt; you’re going to validate an address there’s no reason to display the&lt;br/&gt;&amp;gt; checksum at all. However, validating an address is confusing to non-experts:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    - Is it a wallet ID or a bitcoin address?&lt;br/&gt;&amp;gt;    - Am I supposed to send funds to this address?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If creating a new checksum standard for the descriptor record is&lt;br/&gt;&amp;gt; undesirable, we could use a child address (from an unhardened BIP32 path)&lt;br/&gt;&amp;gt; and encode that in some way for end-users to verify it matches across all&lt;br/&gt;&amp;gt; Signers. It would be strongly preferable for the encoding to be an&lt;br/&gt;&amp;gt; unambiguously different format from a bitcoin address / BIP39 seed phrase,&lt;br/&gt;&amp;gt; so that it’s clear it’s just a wallet ID. One non-ideal but simple solution&lt;br/&gt;&amp;gt; is to use a hash function (i.e. dsha256) to calculate the digest of the&lt;br/&gt;&amp;gt; child address, and display this in hexadecimal format. While hexadecimal is&lt;br/&gt;&amp;gt; non-ideal for manual verification, it is already trivial for any bitcoin&lt;br/&gt;&amp;gt; library to perform these steps.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;As I have responded to your previous comment about the same on Github (&lt;br/&gt;&lt;a href=&#34;https://github.com/nunchuk-io/bips/pull/1&#34;&gt;https://github.com/nunchuk-io/bips/pull/1&lt;/a&gt;), I do see the value of a&lt;br/&gt;longer checksum.&lt;br/&gt;&lt;br/&gt;There are trade-offs when it comes to designing checksum. Mainly complexity&lt;br/&gt;and size. At one end of the spectrum you can have a single-byte XOR&lt;br/&gt;checksum. At the other end you can have something like HMAC-SHA256 (which&lt;br/&gt;we are using in the proposal to calculate the MACs for the key and&lt;br/&gt;descriptor records). And then there&amp;#39;s everything in between. But we should&lt;br/&gt;know that nothing comes for free.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s a good topic that warrants further discussion.&lt;br/&gt;&lt;br/&gt;Confirming a single address is a promising direction, since it&amp;#39;s something&lt;br/&gt;the user should do anyway prior to using the wallet. Currently the proposal&lt;br/&gt;recommends that the Signers show a preview of the first address(es) upon&lt;br/&gt;wallet creation. But we can elevate this and make it a mandatory part of&lt;br/&gt;the spec: have all Signers confirm that they have the same 1st receive&lt;br/&gt;address. If we go with this approach, the checksum can stay as-is, and only&lt;br/&gt;there for error detection. (We get the checksum for free with the&lt;br/&gt;descriptor language anyway, so there&amp;#39;s no reason to remove it).&lt;br/&gt;&lt;br/&gt;Also nice to see that you have come around and agree that moving away from&lt;br/&gt;manual inspection is desirable.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; *2. Allow Support for Stateless Wallets*&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The current BIP states:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * &amp;#34;If all checks pass, the Signer must persist the descriptor record in&lt;br/&gt;&amp;gt; its storage.&amp;#34;*&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While persistence has a lot of benefits, it is not a feature of the most&lt;br/&gt;&amp;gt; sold multisig hardware wallet: Trezor. A simple solution here is to have&lt;br/&gt;&amp;gt; each Signer sign the entire descriptor record at the end of round 2, not&lt;br/&gt;&amp;gt; just its own key record in round 1. Then the data can be stored anywhere&lt;br/&gt;&amp;gt; (including on the Signer itself) and played back to each Signer for&lt;br/&gt;&amp;gt; validation when needed. The end-user would have no idea this was happening,&lt;br/&gt;&amp;gt; but the device could refuse to display information it hasn’t fully&lt;br/&gt;&amp;gt; validated (or at least add a warning message). Even a device with&lt;br/&gt;&amp;gt; persistent storage would be better served using a signature, so that an&lt;br/&gt;&amp;gt; evil maid couldn&amp;#39;t tamper with the device (say in the no-encryption case&lt;br/&gt;&amp;gt; for simplicity).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I reiterate that I strongly disagree that going stateless is the direction&lt;br/&gt;we want to pursue when it comes to multisig.&lt;br/&gt;&lt;br/&gt;In a multisig or any type of MPC smart contract, any Signer in the contract&lt;br/&gt;must know who the other co-Signers are at all times. You can choose to do&lt;br/&gt;this verification once at setup and persist this info on the Signer, or&lt;br/&gt;you&amp;#39;d have to re-do the verification for every single transaction. There is&lt;br/&gt;no other choice.&lt;br/&gt;&lt;br/&gt;Signing the descriptor record is insufficient, while also introducing a&lt;br/&gt;great deal of complexity. Here are the problems:&lt;br/&gt;1) The signature needs to be stored somewhere. Who stores it if it&amp;#39;s not&lt;br/&gt;the Signer itself? What if it gets lost? (If the Signer stores its own&lt;br/&gt;signature, then the scheme is no longer stateless. You might as well store&lt;br/&gt;the full descriptor).&lt;br/&gt;2) When the signature is &amp;#34;played back&amp;#34; to the Signer, a copy of the&lt;br/&gt;original descriptor must be included. Who stores the descriptor? What if it&lt;br/&gt;gets lost? This is an under-appreciated aspect of the stateful approach:&lt;br/&gt;every participant in the multisig has a full copy of the original contract,&lt;br/&gt;which adds resilience to the wallet backup / recovery process.&lt;br/&gt;3) Because the full descriptor must be &amp;#34;played back&amp;#34; for every single&lt;br/&gt;transaction, this means every detail of the contract must be shared again&lt;br/&gt;and again, indefinitely. Not only does this add overhead (engineering and&lt;br/&gt;cognitive) to the spending process, it has massive privacy implications,&lt;br/&gt;since the descriptor contains everything you need to know about the wallets&lt;br/&gt;and its participants.&lt;br/&gt;&lt;br/&gt;Here&amp;#39;s an analogy in the physical world. Would you:&lt;br/&gt;a) Enter any type of written contract and&lt;br/&gt;b) Not keep a copy of the contract, forget about it, and&lt;br/&gt;c) Later on rely on your counter-parties or a third-party to provide you&lt;br/&gt;with the original contract and your signature, when the terms get carried&lt;br/&gt;out?&lt;br/&gt;&lt;br/&gt;One would be insane to enter such a contract in the real world.&lt;br/&gt;&lt;br/&gt;I realize that some vendors are currently not stateful, but I take this as&lt;br/&gt;an unfortunate fact, because multisig wasn&amp;#39;t a priority when these hardware&lt;br/&gt;were originally designed. But that is no reason to keep going with a broken&lt;br/&gt;architecture. The industry is green enough that we still can learn and&lt;br/&gt;recover from these sorts of flaws.&lt;br/&gt;&lt;br/&gt;Since you mentioned Trezor, I want to thank Pavol in particular here,&lt;br/&gt;because as Trezor CTO Pavol knows best that Trezor is currently stateless,&lt;br/&gt;but he&amp;#39;s still on-board with the general idea here, AFAIU.&lt;br/&gt;&lt;br/&gt;Bottom line: IMO, signers in a multisig MUST be stateful.&lt;br/&gt;&lt;br/&gt;This existing vulnerability in stateless wallets is particularly bad for&lt;br/&gt;&amp;gt; hosted multisig services like Casa/Unchained, where the service might&lt;br/&gt;&amp;gt; control m-1 keys. It’s far easier for a hosted service to potentially trick&lt;br/&gt;&amp;gt; non-expert users into displaying an attacker&amp;#39;s receive address on their&lt;br/&gt;&amp;gt; stateless Signer.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For example, assume the user is doing 2-of-3 multisig, where the&lt;br/&gt;&amp;gt; Coordinator (service) controls 1 key. Here is how the Coordinator could&lt;br/&gt;&amp;gt; trick their end-users:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    1. Coordinator swaps out 1 of the end-user’s xpubs, going from a&lt;br/&gt;&amp;gt;    2-of-3 where the end-user has 2 seeds to a 2-of-3 where the Coordinator has&lt;br/&gt;&amp;gt;    2 seeds.&lt;br/&gt;&amp;gt;    2. The end-user logs into the service to get a new receive address,&lt;br/&gt;&amp;gt;    and the service (Coordinator) displays malicious receive address X (as part&lt;br/&gt;&amp;gt;    of a 2-of-3).&lt;br/&gt;&amp;gt;    3. The end user connects stateless Signer 1 to the service&lt;br/&gt;&amp;gt;    (Coordinator), which under-the-hood gives stateless Signer 1 proof that it&lt;br/&gt;&amp;gt;    is included in this 2-of-3. Stateless singer 1 displays malicious receive&lt;br/&gt;&amp;gt;    address X!&lt;br/&gt;&amp;gt;    4. The end-user doesn&amp;#39;t verify the address on Signer 2, as many users&lt;br/&gt;&amp;gt;    unfortunately don&amp;#39;t -- perhaps it is in a far away location and the&lt;br/&gt;&amp;gt;    end-user (incorrectly) thinks that it’s already been validated in 2 places&lt;br/&gt;&amp;gt;    -- and makes a large deposit to receive address X. These funds now belong&lt;br/&gt;&amp;gt;    to the attacker and can be swept at any time!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If stateless Signer 1 required a signature to be replayed at step 3,&lt;br/&gt;&amp;gt; stateless Signer 1 would refuse to display malicious receive address X (or&lt;br/&gt;&amp;gt; at a minimum warn the end-user that it did not have enough info to properly&lt;br/&gt;&amp;gt; validate the address).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is also a concern for self-hosted multisig, I just used the hosted&lt;br/&gt;&amp;gt; services as the best example.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It&amp;#39;s also not just Trezor that is stateless. For example, I wrote a&lt;br/&gt;&amp;gt; simple CLI software multisig wallet as part of the buidl library&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://twitter.com/mflaxman/status/1321503036724989952&amp;gt&#34;&gt;https://twitter.com/mflaxman/status/1321503036724989952&amp;gt&lt;/a&gt;; to be used&lt;br/&gt;&amp;gt; mostly for emergency recovery. At 800 lines of code, it&amp;#39;s too&lt;br/&gt;&amp;gt; simple/minimal to touch the file system.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; *BIP39*&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While unrelated, the use of BIP39 words for session tokens seems like a&lt;br/&gt;&amp;gt; big mistake, as end-users have learned over years that BIP39 words are for&lt;br/&gt;&amp;gt; private key material. A small percent of users may backup their token BIP39&lt;br/&gt;&amp;gt; mnemonic and not their seed phrase BIP39 mnemonic! My suggestion is to just&lt;br/&gt;&amp;gt; stick with the other two Token options: decimal and hex.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Repost of my previous response. We discussed this at length on the&lt;br/&gt;linked Github PR:&lt;br/&gt;&amp;#34;We decided to keep the TOKEN at 6-9 words, not 12 or anything above&lt;br/&gt;precisely for this reason. Please note that the user has to back up their&lt;br/&gt;Signers first, before proceeding to setting up the multisig wallet. So&lt;br/&gt;there&amp;#39;s no writing both things down at once or mixing of the two flows here.&lt;br/&gt;&lt;br/&gt;I also find it hard to believe that someone who wants to invest in a safe&lt;br/&gt;multisig solution (and therefore must know at minimum what keys and&lt;br/&gt;multisig represent) will not know the difference between (permanent) 12&lt;br/&gt;words and (one-time use) 6 words. Also note that the TOKEN can be used&lt;br/&gt;without using BIP39 mnemonic at all.&amp;#34;&lt;br/&gt;&lt;br/&gt;We also made the decimal format, not BIP39 mnemonic, the recommended&lt;br/&gt;encoding in the spec.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210411/92f6fc7e/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210411/92f6fc7e/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T00:51:21&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs89js42q2w6dhjwn2m5rspcqwwrtvhpd64rhnhqtcqft9tn57uzdczyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hs48vgh2</id>
    
      <title type="html">📅 Original date posted:2021-04-09 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs89js42q2w6dhjwn2m5rspcqwwrtvhpd64rhnhqtcqft9tn57uzdczyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hs48vgh2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdf3f84re2mjnxnjpy5jmrc6cmqstj9ksykscr9esgeuve4wlpy4gcvrr7r&#39;&gt;nevent1q…rr7r&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-09&lt;br/&gt;📝 Original message:(Continue off last email: also keep in mind, that just like BIP174,&lt;br/&gt;Coordinator and Signer are abstract roles. This means in theory a Signer&lt;br/&gt;can be the Coordinator too. The same criteria for trust applies equally to&lt;br/&gt;a Signer and a Coordinator.)&lt;br/&gt;&lt;br/&gt;The use case I personally find most interesting is not a multi-party setup,&lt;br/&gt;&amp;gt; but rather just combining a bunch of my own devices. Those might even be in&lt;br/&gt;&amp;gt; the same room during the setup, only to be moved to my moon base later.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;And that&amp;#39;s fair. Both use cases (local and remote multisig) are valid and&lt;br/&gt;currently being used. But IMO a standard should accommodate both.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; To the list of concerns at the top of the BIP, I would add one: losing&lt;br/&gt;&amp;gt; multisig setup context. E.g. in the event of a fire where you only recover&lt;br/&gt;&amp;gt; your steel engraved mnemonic(s), but no longer have the wallet descriptors.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Good point.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you still have all devices and know (or guess) the threshold then BIP48&lt;br/&gt;&amp;gt; and sorted_multi descriptors will save you. But if you have a 2-of-3 setup&lt;br/&gt;&amp;gt; and lost 1 device then without the metadata your coins are lost. In a&lt;br/&gt;&amp;gt; future with musig(?) and miniscript increasingly the setup data is just as&lt;br/&gt;&amp;gt; critical as the seeds.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;How so? Each signer device should ideally have a copy of the multisig&lt;br/&gt;configuration. If you lose 1 device in a 2-of-3, you can still spend from&lt;br/&gt;the wallet? Unless I&amp;#39;m missing something here.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; A future standard (or extension of this one) should recommend an&lt;br/&gt;&amp;gt; encryption convention for the descriptor data, ideally such that with *any*&lt;br/&gt;&amp;gt; of the seeds you can decrypt a file that contains the full setup. That file&lt;br/&gt;&amp;gt; could then just float redundantly around the internet and pieces of paper&lt;br/&gt;&amp;gt; in various locations, without compromising privacy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Post-wallet-creation, each Signer can apply extra encryption on top of BSMS&lt;br/&gt;for the persistence of the configuration file any way it wants :) It&lt;br/&gt;doesn&amp;#39;t contradict with the current spec.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; The proposed encryption system doesn&amp;#39;t help with that though, because it&amp;#39;s&lt;br/&gt;&amp;gt; based on entropy from the Coordinator, rather than from the signers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;They are for different purposes. The TOKEN-based encryption is only needed&lt;br/&gt;temporarily for the setup.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Smaller suggestions:&lt;br/&gt;&amp;gt; * link to this new mail thread in the BIP&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Will do.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; * use magic bytes so .bsms so operating systems like Android / iOs can&lt;br/&gt;&amp;gt; open the right app for them&lt;br/&gt;&amp;gt; * don&amp;#39;t use separate file extensions for encrypted vs unencrypted content,&lt;br/&gt;&amp;gt; just indicate somehow that a given field is encrypted&lt;br/&gt;&amp;gt; * although plain text files are handy for debugging, I think a binary&lt;br/&gt;&amp;gt; format like PSBT is much powerful. Any device that can parse and write&lt;br/&gt;&amp;gt; binary PSBT should be able to implement a similar parser / writer for a&lt;br/&gt;&amp;gt; binary .bsms format.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Will consider these points, but I prefer plaintext for wallet&lt;br/&gt;configuration. Human readability for the wallet configuration is a pro not&lt;br/&gt;a con IMO. Also helps when backing up.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; * BIP48 and sorted_multi descriptors are useful in a loss-of-metadata&lt;br/&gt;&amp;gt; scenario. The BIP uses both in the examples, but doesn&amp;#39;t explictly endorse&lt;br/&gt;&amp;gt; these derivations. It also contradicts them: &amp;#34;If the Signer chooses the&lt;br/&gt;&amp;gt; path, it should try to avoid reusing XPUBs for different wallets.&amp;#34;. Maybe&lt;br/&gt;&amp;gt; this is out of scope.&lt;br/&gt;&amp;gt;    * one way to resolve xpub reuse would be to make the &amp;#34;BIP48&amp;#34; path a&lt;br/&gt;&amp;gt; function of the co-signer fingerprints and wallet threshold, but this&lt;br/&gt;&amp;gt; requires an extra communication round&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;We discussed this in the linked PR (&lt;br/&gt;&lt;a href=&#34;https://github.com/nunchuk-io/bips/pull/1&#34;&gt;https://github.com/nunchuk-io/bips/pull/1&lt;/a&gt;), and decided that enforcing&lt;br/&gt;against path reuse is out-of-scope. We give examples of sorted_multi and&lt;br/&gt;multi because different vendors support different things.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; * there should be a way for signers to communicate their capabilities,&lt;br/&gt;&amp;gt; perhaps with a different xpub for each potential scheme. E.g. there&amp;#39;s m/48&amp;#39;&lt;br/&gt;&amp;gt; native SegWit now, MuSig and/or or Tapleaf based multisig in the future, or&lt;br/&gt;&amp;gt; even generic Miniscript support.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I considered Signers signaling capabilities (for a different reason), but&lt;br/&gt;opted against it because it further complicates the scheme. Also BIP48-like&lt;br/&gt;proposals are made redundant with the use of output descriptors.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; * the idea of only storing the receive descriptor, not the change&lt;br/&gt;&amp;gt; descriptor, is fine by me, though I&amp;#39;d prefer an extension to the descriptor&lt;br/&gt;&amp;gt; format to deal with this&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;That&amp;#39;s not quite accurate. The spec stores the top-level descriptor&lt;br/&gt;(XPUB/*) along with the path restrictions (/0/*,/1/*), not the receive&lt;br/&gt;descriptor.&lt;br/&gt;&lt;br/&gt; The path restrictions would allow you to extend on the spec. There&amp;#39;s also&lt;br/&gt;a VERSION field.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sjors&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Op 5 apr. 2021, om 09:02 heeft Hugo Nguyen via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; het volgende geschreven:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Hi all,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Please find below the complete draft of the Bitcoin Secure Multisig&lt;br/&gt;&amp;gt; Setup (BSMS) BIP. The spec has gone through a number of important updates&lt;br/&gt;&amp;gt; in the last month or so. Thanks everyone who has participated in the review&lt;br/&gt;&amp;gt; process.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; As a PR: &lt;a href=&#34;https://github.com/bitcoin/bips/pull/1097&#34;&gt;https://github.com/bitcoin/bips/pull/1097&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210409/754162ae/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210409/754162ae/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T00:51:18&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdf3f84re2mjnxnjpy5jmrc6cmqstj9ksykscr9esgeuve4wlpy4gzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsf5zanx</id>
    
      <title type="html">📅 Original date posted:2021-04-09 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdf3f84re2mjnxnjpy5jmrc6cmqstj9ksykscr9esgeuve4wlpy4gzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsf5zanx" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsx3qrph2fwxr6hzrh8mfkml6uwve2clj6wccg6sn3g643jggcv69sahwsh4&#39;&gt;nevent1q…wsh4&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-09&lt;br/&gt;📝 Original message:Hi Sjors&lt;br/&gt;Thanks for the feedback!&lt;br/&gt;&lt;br/&gt;The first step is for the Coordinator to generate a TOKEN, presumably using&lt;br/&gt;&amp;gt; its own entropy. But IIUC anyone who intercepts that token can decrypt any&lt;br/&gt;&amp;gt; future step in the setup process. This suggests a chicken-egg problem where&lt;br/&gt;&amp;gt; you need some pre-existing secure communications channel.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The exchange of the TOKEN is frequently mistaken as the chicken-and-egg&lt;br/&gt;problem, but it is not so.&lt;br/&gt;&lt;br/&gt;To understand why this isn&amp;#39;t chicken-and-egg, and why the TOKEN actually&lt;br/&gt;adds value, consider *the scale of the communication operation needed to&lt;br/&gt;exchange the TOKEN*, and *the scale of the communication operation needed&lt;br/&gt;to gather data for the creation of the multisig wallet *(with or without&lt;br/&gt;the TOKEN):&lt;br/&gt;&lt;br/&gt;1) The TOKEN itself is a single piece of data that is 64- or 96-bit. It is&lt;br/&gt;small enough to be easily exchanged (even memorized) and entered into&lt;br/&gt;various devices. It requires only a single round of communication, but can&lt;br/&gt;protect as many rounds of communication as needed.&lt;br/&gt;&lt;br/&gt;2) The data needed to create the multisig wallet, on the other hand, are&lt;br/&gt;quite involving:&lt;br/&gt;(a) Each Signer needs to share its XPUB, which cannot be memorized&lt;br/&gt;(b) The XPUBs also come with their own metadata&lt;br/&gt;(c) The creation of the wallet requires at least two rounds of&lt;br/&gt;communications since the Signers need to voluntarily share their XPUBs&lt;br/&gt;first, only then can a Coordinator combine the XPUBs into a single multisig&lt;br/&gt;script and pass back the configuration to the Signers. (Note that without a&lt;br/&gt;Coordinator, you&amp;#39;ll need O(N^2) rounds of communication).&lt;br/&gt;(d) Because Signers are typically off-line cold storage, the paths between&lt;br/&gt;the Signers / the Signers &amp;lt;&amp;gt; Coordinator likely involve multiple hops&lt;br/&gt;through various media, such as unsecure USB connection. This is the way&lt;br/&gt;most multisig solutions are currently being implemented. It means the XPUBs&lt;br/&gt;and the multisig configuration are vulnerable to leaking and/or&lt;br/&gt;modifications.&lt;br/&gt;&lt;br/&gt;Note that (d) is especially problematic for remote multisig setups. The&lt;br/&gt;more remote, the more potential hops along the way, the more problematic.&lt;br/&gt;&lt;br/&gt;So you can see that *the TOKEN ultimately reduces the problem of sharing a&lt;br/&gt;large amount of sensitive data back and forth, to the sharing of a single,&lt;br/&gt;small piece of data upfront.* An added advantage of this approach is that&lt;br/&gt;if the parties fail to establish a shared TOKEN, the scheme fails with no&lt;br/&gt;harm done.&lt;br/&gt;&lt;br/&gt;The Coordinator, on the other hand, adds value by solving the O(n^2)&lt;br/&gt;communication problem. Some minimal amount of trust is needed for the&lt;br/&gt;Coordinator, but this can be greatly mitigated by a number of ways that we&lt;br/&gt;have defined in the spec, such as:&lt;br/&gt;* Signers must check that their XPUBs are included in the final descriptor&lt;br/&gt;* Signers must display to the user the multisig configuration: M/N,&lt;br/&gt;relative position(s) of XPUBs, etc.&lt;br/&gt;* Signers must display the full descriptor upon user request for manual&lt;br/&gt;inspection - this one is important because it means that the new scheme&lt;br/&gt;cannot be worse than the status quo.&lt;br/&gt;* Signers are recommended to display a preview of the first receive&lt;br/&gt;address(es).&lt;br/&gt;&lt;br/&gt;All in all, the Coordinator&amp;#39;s role helps ease the setup process, while its&lt;br/&gt;ability to pull off any shenanigans is greatly limited.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210409/fadc12cb/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210409/fadc12cb/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T00:51:17&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsfa40tdnclqasfjefhyguw0qdhqlgdm6f60klj54mrmm4v09cnj8gzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hswtz0kw</id>
    
      <title type="html">📅 Original date posted:2021-04-05 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsfa40tdnclqasfjefhyguw0qdhqlgdm6f60klj54mrmm4v09cnj8gzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hswtz0kw" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0smrxrymv8ehhjv0z365h7xqmrnrr54v82rq82v0ue2zvpsdh33qml6llz&#39;&gt;nevent1q…6llz&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-05&lt;br/&gt;📝 Original message:Hi all,&lt;br/&gt;&lt;br/&gt;Please find below the complete draft of the Bitcoin Secure Multisig Setup&lt;br/&gt;(BSMS) BIP. The spec has gone through a number of important updates in the&lt;br/&gt;last month or so. Thanks everyone who has participated in the review&lt;br/&gt;process.&lt;br/&gt;&lt;br/&gt;As a PR: &lt;a href=&#34;https://github.com/bitcoin/bips/pull/1097&#34;&gt;https://github.com/bitcoin/bips/pull/1097&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;A few notes:&lt;br/&gt;* PBKDF2-SHA512 was chosen instead of PBKDF2-SHA256 for the key derivation&lt;br/&gt;function, due to widespread existing hardware support for PBKDF2-SHA512&lt;br/&gt;* Only one descriptor is stored in the multisig configuration - this&lt;br/&gt;simplifies wallet setup and recovery&lt;br/&gt;(For the full review and relevant discussions, please check out&lt;br/&gt;&lt;a href=&#34;https://github.com/nunchuk-io/bips/pull/1&#34;&gt;https://github.com/nunchuk-io/bips/pull/1&lt;/a&gt;).&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;  BIP: To be determined&lt;br/&gt;  Layer: Applications&lt;br/&gt;  Title: Bitcoin Secure Multisig Setup (BSMS)&lt;br/&gt;  Author: Hugo Nguyen &amp;lt;hugo at nunchuk.io&amp;gt;, Peter Gray &amp;lt;peter at&lt;br/&gt;coinkite.com&amp;gt;, Marko Bencun &amp;lt;marko at shiftcrypto.ch&amp;gt;, Aaron Chen&lt;br/&gt;&amp;lt;aarondongchen at gmail.com&amp;gt;, Rodolfo Novak &amp;lt;rodolfo at coinkite.com&amp;gt;&lt;br/&gt;  Comments-Summary: No comments yet.&lt;br/&gt;  Comments-URI:&lt;br/&gt;  Status: Proposed&lt;br/&gt;  Type: Standards Track&lt;br/&gt;  Created: 2020-11-10&lt;br/&gt;  License: BSD-2-Clause&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Introduction==&lt;br/&gt;&lt;br/&gt;===Abstract===&lt;br/&gt;&lt;br/&gt;This document proposes a mechanism to set up multisig wallets securely.&lt;br/&gt;&lt;br/&gt;===Copyright===&lt;br/&gt;&lt;br/&gt;This BIP is licensed under the 2-clause BSD license.&lt;br/&gt;&lt;br/&gt;===Motivation===&lt;br/&gt;&lt;br/&gt;The Bitcoin multisig experience has been greatly streamlined under&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&lt;/a&gt;&lt;br/&gt;BIP-0174&lt;br/&gt;(Partially Signed Bitcoin Transaction)]. However, what is still&lt;br/&gt;missing is a standardized process for setting up multisig wallets&lt;br/&gt;securely across different vendors.&lt;br/&gt;&lt;br/&gt;There are a number of concerns when it comes to setting up a multisig wallet:&lt;br/&gt;&lt;br/&gt;# Whether the multisig configuration, such as Signer membership,&lt;br/&gt;script type, derivation paths and number of signatures required, is&lt;br/&gt;correct and not tampered with.&lt;br/&gt;# Whether the keys or the multisig configuration are leaked during the setup.&lt;br/&gt;# Whether the Signer persists the multisig configuration in their&lt;br/&gt;respective storage, and under what format.&lt;br/&gt;# Whether the Signer&amp;#39;s storage is tamper-proof.&lt;br/&gt;# Whether the Signer subsequently uses the multisig configuration to&lt;br/&gt;generate and verify receive and change addresses.&lt;br/&gt;&lt;br/&gt;An attacker who can modify the multisig configuration can steal or&lt;br/&gt;hold funds for ransom by duping the user into sending funds to the&lt;br/&gt;wrong address. An attacker who cannot modify the configuration but can&lt;br/&gt;learn about the keys and/or the configuration can monitor transactions&lt;br/&gt;in the wallet, resulting in loss of privacy.&lt;br/&gt;&lt;br/&gt;This proposal seeks to address concerns #1, #2 and #3: to mitigate the&lt;br/&gt;risk of tampering during the initial setup phase, and to define an&lt;br/&gt;interoperable multisig configuration format.&lt;br/&gt;&lt;br/&gt;Concerns #4 and #5 should be handled by Signers and are out of scope&lt;br/&gt;of this proposal.&lt;br/&gt;&lt;br/&gt;==Specification==&lt;br/&gt;&lt;br/&gt;===Prerequisites===&lt;br/&gt;This proposal assumes the parties in the multisig support&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&lt;/a&gt;&lt;br/&gt;BIP-0032], [&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&lt;/a&gt;&lt;br/&gt;BIP-0322], [&lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&lt;/a&gt;&lt;br/&gt;the descriptor language] and [&lt;a href=&#34;https://tools.ietf.org/html/rfc3686&#34;&gt;https://tools.ietf.org/html/rfc3686&lt;/a&gt; AES&lt;br/&gt;encryption].&lt;br/&gt;&lt;br/&gt;===File Extension===&lt;br/&gt;All descriptor and key records should have a &amp;lt;tt&amp;gt;.bsms&amp;lt;/tt&amp;gt; file&lt;br/&gt;extension. Encrypted data should have a &amp;lt;tt&amp;gt;.dat&amp;lt;/tt&amp;gt; extension.&lt;br/&gt;&lt;br/&gt;===Roles===&lt;br/&gt;====Coordinator====&lt;br/&gt;&lt;br/&gt;The Coordinator initiates the multisig setup. The Coordinator&lt;br/&gt;determines what type of multisig is used and the exact policy script.&lt;br/&gt;If encryption is enabled, the Coordinator also distributes a shared&lt;br/&gt;secret or shared secrets to the parties involved for secure&lt;br/&gt;communication. The Coordinator gathers information from the Signers to&lt;br/&gt;generate a descriptor record. The Coordinator distributes the&lt;br/&gt;descriptor record back to the Signers.&lt;br/&gt;&lt;br/&gt;====Signer====&lt;br/&gt;&lt;br/&gt;The Signer is a participating member in the multisig. Its&lt;br/&gt;responsibilities include providing its key record -- which contains an&lt;br/&gt;Extended Public Key (XPUB) -- to the Coordinator, verifying that its&lt;br/&gt;XPUB is included in the descriptor record and persisting the&lt;br/&gt;descriptor record in its storage.&lt;br/&gt;&lt;br/&gt;===Setup Process===&lt;br/&gt;&lt;br/&gt;====Round 1====&lt;br/&gt;&lt;br/&gt;=====Coordinator=====&lt;br/&gt;&lt;br/&gt;* The Coordinator creates a new multisig wallet creation session. The&lt;br/&gt;Coordinator constructs the multisig script and its policy parameters,&lt;br/&gt;such as the required number of signatures and the total number of&lt;br/&gt;Signers (&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;).&lt;br/&gt;* The session should expire after some time period determined by the&lt;br/&gt;Coordinator, e.g., 24 hours. The timeout allows the encryption key to&lt;br/&gt;have lower entropy.&lt;br/&gt;* If encryption is enabled, the Coordinator distributes a secret&lt;br/&gt;&amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; to each Signer over a secure channel. The Signer can&lt;br/&gt;use the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; to derive an &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;. Refer to&lt;br/&gt;the Encryption section below for details on the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;, the&lt;br/&gt;key derivation function and the encryption scheme. Depending on the&lt;br/&gt;use case, the Coordinator can decide whether to share one common&lt;br/&gt;&amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; for all Signers, or to have one per Signer.&lt;br/&gt;* If encryption is disabled, the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set to &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;,&lt;br/&gt;and all the encryption/decryption steps below can be skipped.&lt;br/&gt;&lt;br/&gt;=====Signer=====&lt;br/&gt;&lt;br/&gt;* The Signer initiates the multisig wallet creation session by setting&lt;br/&gt;the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The Signer derives an &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; from&lt;br/&gt;the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The Signer can keep the session open until a&lt;br/&gt;different value for the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set.&lt;br/&gt;* The Signer generates a key record by prompting the user for a&lt;br/&gt;multisig derivation path and retrieves the XPUB at that derivation&lt;br/&gt;path. Alternatively, the Signer can choose a path on behalf of the&lt;br/&gt;user. If the Signer chooses the path, it should try to avoid reusing&lt;br/&gt;XPUBs for different wallets.&lt;br/&gt;* The first line in the record must be the specification version&lt;br/&gt;(&amp;lt;tt&amp;gt;BSMS 1.0&amp;lt;/tt&amp;gt; as of this writing). The second line must be the&lt;br/&gt;hex-encoded &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The third line must be the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;The &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; is an XPUB plus its key origin information, written&lt;br/&gt;in the descriptor-defined format, i.e.: &amp;lt;tt&amp;gt;[{master key&lt;br/&gt;fingerprint}/{derivation path}]{XPUB}&amp;lt;/tt&amp;gt;. The fourth line is a text&lt;br/&gt;description of the key, 80 characters maximum. The fifth line must be&lt;br/&gt;a &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt;, whereas &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt; is the signature generated by&lt;br/&gt;using the private key associated with the XPUB to sign the first four&lt;br/&gt;lines. The signature should follow&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&lt;/a&gt;&lt;br/&gt;BIP-0322], legacy format accepted.&lt;br/&gt;* The Signer calculates the Message Authentication Code (&amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt;)&lt;br/&gt;for the record. The first 16 bytes of the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; serves as the&lt;br/&gt;Initialization Vector (&amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt;) for the encryption.&lt;br/&gt;* The Signer encrypts the key record with the &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;&lt;br/&gt;and &amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Signer encodes the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; and the ciphertext into&lt;br/&gt;hexadecimal format, then concatenates the results: &amp;lt;tt&amp;gt;(MAC ||&lt;br/&gt;ciphertext)&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;====Round 2====&lt;br/&gt;&lt;br/&gt;=====Coordinator=====&lt;br/&gt;&lt;br/&gt;* The Coordinator gathers key records from all participating Signers.&lt;br/&gt;The Coordinator verifies that there are exactly &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt; unique key&lt;br/&gt;records before the wallet setup session expires.&lt;br/&gt;* For each key record, the Coordinator extracts the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; from&lt;br/&gt;the data, sets &amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt; to the first 16 bytes of the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt;,&lt;br/&gt;then decrypts the ciphertext using the &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; and&lt;br/&gt;&amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Coordinator verifies that the included &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; is valid&lt;br/&gt;given the plaintext.&lt;br/&gt;* The Coordinator verifies that the key records have compatible&lt;br/&gt;specification versions.&lt;br/&gt;* The Coordinator verifies that the included &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt; is valid&lt;br/&gt;given the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;* If all key records look good, the Coordinator fills in all necessary&lt;br/&gt;information to generate a descriptor record.&lt;br/&gt;* The first line in the descriptor record must be the specification&lt;br/&gt;version (&amp;lt;tt&amp;gt;BSMS 1.0&amp;lt;/tt&amp;gt; as of this writing). The second line must&lt;br/&gt;be a comma-separated list of accepted derivation paths that the&lt;br/&gt;Signers can use to generate addresses from the included XPUBs. The&lt;br/&gt;paths must start with &amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt; and use non-hardened derivation. For&lt;br/&gt;example, &amp;lt;tt&amp;gt;/0/*&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/1/*&amp;lt;/tt&amp;gt; are some common paths. If&lt;br/&gt;there are no restrictions, it must say &amp;lt;tt&amp;gt;No path restrictions&amp;lt;/tt&amp;gt;.&lt;br/&gt;The third line must be the descriptor string plus a &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;,&lt;br/&gt;all in one line. The &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt; has&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&lt;/a&gt;&lt;br/&gt;BECH32 encoding].&lt;br/&gt;* The Coordinator calculates the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; for the record. The&lt;br/&gt;first 16 bytes of the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; serves as the &amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt; for the&lt;br/&gt;encryption..&lt;br/&gt;* The Coordinator encrypts the descriptor record with the&lt;br/&gt;&amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Coordinator encodes the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; and the ciphertext into&lt;br/&gt;hexadecimal format, then concatenates the results: &amp;lt;tt&amp;gt;(MAC ||&lt;br/&gt;ciphertext)&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Coordinator sends the encrypted descriptor record to all&lt;br/&gt;participating Signers.&lt;br/&gt;&lt;br/&gt;=====Signer=====&lt;br/&gt;&lt;br/&gt;* The Signer imports the descriptor record.&lt;br/&gt;* The Signer extracts the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; from the data, sets &amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt;&lt;br/&gt;to the first 16 bytes of the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt;, then decrypts the&lt;br/&gt;ciphertext using the &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; (derived from the open&lt;br/&gt;session) and &amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Signer verifies that the included &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; is valid given&lt;br/&gt;the plaintext.&lt;br/&gt;* The Signer verifies that it can support the included specification version.&lt;br/&gt;* The Signer verifies that it is compatible with the derivation path&lt;br/&gt;restrictions.&lt;br/&gt;* The Signer verifies the descriptor’s &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Signer verifies that it can support the descriptor.&lt;br/&gt;* The Signer checks that its &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; is included in the&lt;br/&gt;descriptor, using path and fingerprint information provided. The check&lt;br/&gt;must perform an exact match on the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;s and not using&lt;br/&gt;shortcuts such as matching fingerprints, which is trivial to spoof.&lt;br/&gt;* For confirmation, the Signer must display to the user the&lt;br/&gt;&amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, the derivation path restrictions and the policy&lt;br/&gt;parameters, such as &amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt; and the position(s) of its&lt;br/&gt;own XPUB in the policy script. The total number of Signers,&lt;br/&gt;&amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;, is important to prevent a &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; insertion attack.&lt;br/&gt;The position is important for scripts where key order matters. When&lt;br/&gt;applicable, all positions of the XPUB must be displayed. The full&lt;br/&gt;descriptor must also be available for review upon user request.&lt;br/&gt;* When possible, the Signer should also show a preview of the first&lt;br/&gt;address(es) of the wallet.&lt;br/&gt;* Parties must check with each other that all Signers have verified&lt;br/&gt;the descriptor and has the same confirmation (except for the key&lt;br/&gt;positions).&lt;br/&gt;* If all checks pass, the Signer must persist the descriptor record in&lt;br/&gt;its storage.&lt;br/&gt;&lt;br/&gt;This completes the setup.&lt;br/&gt;&lt;br/&gt;===Encryption===&lt;br/&gt;&lt;br/&gt;====The Token====&lt;br/&gt;We define three modes of encryption.&lt;br/&gt;&lt;br/&gt;# &amp;lt;tt&amp;gt;NO_ENCRYPTION&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set to &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;.&lt;br/&gt;Encryption is disabled.&lt;br/&gt;# &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is a 64-bit nonce.&lt;br/&gt;# &amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is a 96-bit nonce.&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; can be converted to one of these formats:&lt;br/&gt;* A decimal number (recommended). The number must not exceed the&lt;br/&gt;maximum value of the nonce.&lt;br/&gt;* A mnemonic phrase using&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&lt;/a&gt;&lt;br/&gt;BIP-0039] word list (6 words in &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; mode; 9 words in&lt;br/&gt;&amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; mode).&lt;br/&gt;* A QR code.&lt;br/&gt;* Other formats.&lt;br/&gt;&lt;br/&gt;The flexibility in the data format allows each Signer to customize the&lt;br/&gt;User Experience based on its respective capabilities.&lt;br/&gt;&lt;br/&gt;====Key Derivation====&lt;br/&gt;The key derivation function is [&lt;a href=&#34;https://tools.ietf.org/html/rfc2898&#34;&gt;https://tools.ietf.org/html/rfc2898&lt;/a&gt;&lt;br/&gt;PBKDF2], with PRF = SHA512. Specifically:&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;DKey = PBKDF2(PRF, Password, Salt, c, dkLen)&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;Whereas:&lt;br/&gt;&lt;br/&gt;* PRF = SHA512&lt;br/&gt;* Password = &amp;#34;No SPOF&amp;#34;&lt;br/&gt;* Salt = &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;&lt;br/&gt;* c = 2048&lt;br/&gt;* dkLen = 256&lt;br/&gt;* DKey = Derived &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;====Encryption Scheme====&lt;br/&gt;The encryption scheme is [&lt;a href=&#34;https://tools.ietf.org/html/rfc3686&#34;&gt;https://tools.ietf.org/html/rfc3686&lt;/a&gt; AES-256-CTR].&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;MAC = HMAC-SHA256(HMAC_Key, hex-encoded TOKEN || Data)&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;IV = First 16 bytes of MAC&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;Ciphertext = AES-256-CTR-Encrypt(Plaintext, DKey, IV)&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;Plaintext = AES-256-CTR-Decrypt(Ciphertext, DKey, IV)&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;Whereas:&lt;br/&gt;* DKey = &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;&lt;br/&gt;* HMAC_Key = SHA256(&amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;)&lt;br/&gt;* Data = the plaintext, e.g. the entire key record in round 1 and the&lt;br/&gt;entire descriptor record in round 2&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; is to be sent along with the key and descriptor&lt;br/&gt;record, as specified above. Because it is a &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; over the&lt;br/&gt;entire plaintext, this is essentially an&lt;br/&gt;[&lt;a href=&#34;https://en.wikipedia.org/wiki/Authenticated_encryption#Encrypt-and-MAC_(E&amp;amp;M)&#34;&gt;https://en.wikipedia.org/wiki/Authenticated_encryption#Encrypt-and-MAC_(E&amp;amp;M)&lt;/a&gt;&lt;br/&gt;Encrypt-and-MAC] form of authenticated encryption.&lt;br/&gt;&lt;br/&gt;==QR Codes==&lt;br/&gt;For signers that use QR codes to transmit data, key and descriptor&lt;br/&gt;records can be converted to QR codes, following&lt;br/&gt;[&lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&lt;/a&gt;&lt;br/&gt;the BCR standard].&lt;br/&gt;&lt;br/&gt;Also refer to [&lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md&lt;/a&gt;&lt;br/&gt;UR Type Definition for BIP44 Accounts] and&lt;br/&gt;[&lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md&lt;/a&gt;&lt;br/&gt;UR Type Definition for Bitcoin Output Descriptors] for more details.&lt;br/&gt;&lt;br/&gt;==Security==&lt;br/&gt;&lt;br/&gt;This proposal introduces two layers of protection. The first one is a&lt;br/&gt;temporary, secret &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The second one is the descriptor&lt;br/&gt;&amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is used to encrypt the two rounds of communication&lt;br/&gt;between the Signer and the Coordinator. A &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; is also&lt;br/&gt;generated from the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; and plaintext to authenticate the&lt;br/&gt;data being exchanged. The &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is only needed during the&lt;br/&gt;setup phase, and can be safely discarded afterwards.&lt;br/&gt;&lt;br/&gt;The descriptor &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, on the other hand, can be used to&lt;br/&gt;verify the integrity of the multisig configuration. An attacker who&lt;br/&gt;tampers with the multisig configuration must also change the&lt;br/&gt;descriptor &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;. Parties must check with each other that&lt;br/&gt;all Signers have the same &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, along with the policy&lt;br/&gt;parameters, to reduce the chance of tampering. The &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;&lt;br/&gt;must be persisted along with the descriptor in each Signer’s storage.&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; and the &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt; can’t guarantee complete&lt;br/&gt;protection, since that depends on the overall security of all parties&lt;br/&gt;in the setup, but they can make it significantly harder for an&lt;br/&gt;attacker to tamper with the multisig configuration.&lt;br/&gt;&lt;br/&gt;==Privacy==&lt;br/&gt;Encryption helps improve the privacy of the wallet by avoiding sharing&lt;br/&gt;XPUBs and descriptors in plaintext.&lt;br/&gt;&lt;br/&gt;If the parties wish to have stronger privacy, it is recommended to use&lt;br/&gt;a higher number of bits for the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;, and to completely&lt;br/&gt;erase knowledge of the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; after the multisig wallet has&lt;br/&gt;been set up.&lt;br/&gt;&lt;br/&gt;==Test Vectors==&lt;br/&gt;&lt;br/&gt;===Mode: &amp;lt;tt&amp;gt;NO_ENCRYPTION&amp;lt;/tt&amp;gt;===&lt;br/&gt;====ROUND 1====&lt;br/&gt;* Coordinator&lt;br/&gt;** M-of-N: 2/2&lt;br/&gt;** ADDRESS_TYPE: NATIVE_SEGWIT&lt;br/&gt;** TOKEN: 0&lt;br/&gt;&lt;br/&gt;* Signer 1&lt;br/&gt;** MASTER_KEY_FINGERPRINT: 539f3d89&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;KyoXqiwiz6qm21BSYebiZFfNF7obkhiJW6TdPMZTQQMF4kZtfD78&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;xpub6ETerig7tq89mtaD8Gau2xRWxouRMBy6XHqciA8GZzC2dJv3w6FxfgoegH4b2qYF4oG6VBrhpLrauPs5E1q58GLCnhKp6g9QsV9ZA7J5JNa&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_1_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;00&lt;br/&gt;[539f3d89/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6ETerig7tq89mtaD8Gau2xRWxouRMBy6XHqciA8GZzC2dJv3w6FxfgoegH4b2qYF4oG6VBrhpLrauPs5E1q58GLCnhKp6g9QsV9ZA7J5JNa&lt;br/&gt;Signer 1 key&lt;br/&gt;IPXsnNSZb8M6H4fAWtpjAc75hyHHd89fskpM5o7qFg&#43;mPDzEPc1k2mjuIpVIIzaCe45FwPfAAa91RaStfC5Sak0=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 2&lt;br/&gt;** MASTER_KEY_FINGERPRINT: f8b12aa6&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;L1zht7muKnUYFMdzC3jwXd78u8tGoKr46AXGh4waF9nphUYWq7ow&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;xpub6EWPNhGSX86SN4J2DrBUaQ826o6V4egHqAJZUDJqnsthv9CcjBZV79u68M3YZkuTJnJBXfCrHuJy97fkVurntwgt3V7Ms5hXpJV2vS8fQZM&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_2_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;00&lt;br/&gt;[f8b12aa6/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6EWPNhGSX86SN4J2DrBUaQ826o6V4egHqAJZUDJqnsthv9CcjBZV79u68M3YZkuTJnJBXfCrHuJy97fkVurntwgt3V7Ms5hXpJV2vS8fQZM&lt;br/&gt;Signer 2 key&lt;br/&gt;H38&#43;lp9iaesBeCN05BDTH/SnmarlH6&#43;X&#43;Kmw1pgCk&#43;c1Pc1evYIdBag9Nc0nsKhvPtfEbRt9r/qsUVZ5onCtBTc=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;====ROUND 2====&lt;br/&gt;* Coordinator&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;/0/*,/1/*&lt;br/&gt;wsh(sortedmulti(2,[539f3d89/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6ETerig7tq89mtaD8Gau2xRWxouRMBy6XHqciA8GZzC2dJv3w6FxfgoegH4b2qYF4oG6VBrhpLrauPs5E1q58GLCnhKp6g9QsV9ZA7J5JNa/*,[f8b12aa6/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6EWPNhGSX86SN4J2DrBUaQ826o6V4egHqAJZUDJqnsthv9CcjBZV79u68M3YZkuTJnJBXfCrHuJy97fkVurntwgt3V7Ms5hXpJV2vS8fQZM/*))#fntxdj7p&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;===Mode: &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; Encryption===&lt;br/&gt;====ROUND 1====&lt;br/&gt;* Coordinator&lt;br/&gt;** M-of-N: 2/2&lt;br/&gt;** ADDRESS_TYPE: NATIVE_SEGWIT&lt;br/&gt;** TOKEN (hex): 1ed4ba49e96336b8&lt;br/&gt;*** TOKEN (decimal): 2221605342811469496&lt;br/&gt;*** TOKEN (mnemonic): burst place mystery spot cricket foster&lt;br/&gt;** ENCRYPTION_KEY (hex):&lt;br/&gt;72185a0e25b4efc5d6ac0f8ed32b0165199100e32385040e3a48eb30164bf492&lt;br/&gt;&lt;br/&gt;* Signer 1&lt;br/&gt;** MASTER_KEY_FINGERPRINT: 98d79e95&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;KydC7hZFtWe56oQUAw14HvQ3gKeKVd3m8frFgVMxUqpuhKHvcmm3&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;xpub6DvvwHS5pd1D36xt4YBGJvtdThWXfn8L9qRj9DbFMExMeP6eBE6Aw9WyBC7XUQwiPPDFurirewsKZpYv68yTV5RBy7SZmw45QEkaLka5BCt&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_1_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;1ed4ba49e96336b8&lt;br/&gt;[98d79e95/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6DvvwHS5pd1D36xt4YBGJvtdThWXfn8L9qRj9DbFMExMeP6eBE6Aw9WyBC7XUQwiPPDFurirewsKZpYv68yTV5RBy7SZmw45QEkaLka5BCt&lt;br/&gt;Signer 1 key&lt;br/&gt;HxtPoP0DrQSac/7ypcwC07R2s6jjpXR6Li2Q92zXj/FSIMQcV5yOU0/ONsDgHXamq0gD5DfPbvuVCp9ZJubclV4=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 1 encryption&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;4dab3988cbc683ad7a8c93d43f9b11a78b63a93d5e33ea19c603f4b7b87ac284&lt;br/&gt;** MAC (hex): afe99e92f0eadc3308eb990045e90a4f54e9f59d22aae5034ac3d866d29c508d&lt;br/&gt;** IV (hex) : afe99e92f0eadc3308eb990045e90a4f&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;214ec9a861a238ba7f0412305a97a6e0faa332be15af09127e131d669e5d55d73891580a5808cea5d2bf39f43496d3c0f8236eff3854fcc7446daf9d2b58fd40d97ce3b1745de2959e29767039b99969821400eca0c3517fae56d2d24d5235a3430af1ed894b68681d706cce7c75adf35d8580603aa302bc01fef06d0336a37f19dd46100baa9e4eabd8796a810e13941ad0980c126ad55d6a4bbef11a7bf893b7d2ed8fb0d8324c4c9b512d4d1e75096c63511e15018fc832816b5639d58fc28c60c049487d04bd5a6cb32aa1381d0809660d54376b9f63325c18cfd1ac5024088e74cb703fe165972cc4485abb1feefe92a0b4ea297fe2f4f7416eeee1efc9b942540931ef&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_1_key.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;afe99e92f0eadc3308eb990045e90a4f54e9f59d22aae5034ac3d866d29c508d214ec9a861a238ba7f0412305a97a6e0faa332be15af09127e131d669e5d55d73891580a5808cea5d2bf39f43496d3c0f8236eff3854fcc7446daf9d2b58fd40d97ce3b1745de2959e29767039b99969821400eca0c3517fae56d2d24d5235a3430af1ed894b68681d706cce7c75adf35d8580603aa302bc01fef06d0336a37f19dd46100baa9e4eabd8796a810e13941ad0980c126ad55d6a4bbef11a7bf893b7d2ed8fb0d8324c4c9b512d4d1e75096c63511e15018fc832816b5639d58fc28c60c049487d04bd5a6cb32aa1381d0809660d54376b9f63325c18cfd1ac5024088e74cb703fe165972cc4485abb1feefe92a0b4ea297fe2f4f7416eeee1efc9b942540931ef&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 2&lt;br/&gt;** MASTER_KEY_FINGERPRINT: 3e94b5a1&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;KyPh5XYjExjNHPiBjYhp8iAntAehrDziiwRv7y9Ln6eK9QU2xP55&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;xpub6E1W1DUYY29V2b8czCcpi36GG2uD33B11vwNopgTZwsVyfgAkA4kPCqLP5R4YzaRvzW17CQrDkgmDQbA848AdkR7W18nNvMKXzzCBSnZP9c&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_2_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;1ed4ba49e96336b8&lt;br/&gt;[3e94b5a1/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6E1W1DUYY29V2b8czCcpi36GG2uD33B11vwNopgTZwsVyfgAkA4kPCqLP5R4YzaRvzW17CQrDkgmDQbA848AdkR7W18nNvMKXzzCBSnZP9c&lt;br/&gt;Signer 2 key&lt;br/&gt;ILR49QLy9&#43;xkMS11TIXJRSMgOQOzGbAaooq4/ZRcd8VgM6j5upJMI0mjJHseQOMYSGk8FqjXZbMvBGyiX9wdutM=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 2 encryption&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;4dab3988cbc683ad7a8c93d43f9b11a78b63a93d5e33ea19c603f4b7b87ac284&lt;br/&gt;** MAC (hex): 5c7cb2ac407cd60b1f2b86ef46077d3a312b6ce921df2a141347e8bf1e5c6573&lt;br/&gt;** IV (hex) : 5c7cb2ac407cd60b1f2b86ef46077d3a&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;f23e6c76ff45d308dea6014030a274127ad437228f1d5ec2431d2ea9e3cedd5b0a207a9efa6f926d5420205003f3cb9c4b82b2d595180e62a173a2e5aa0322de48a70a873f641bdae1764e6b1667c241e0fe03a4ccdc3fe0cfa5f75b239d6497c3b69dca17bb685ba70b307d1243836d8fb198ce727cfae4057ee0b4fdcb09f4ba5ae127f49c5de780edb4e40aec96303c8a7b98b1b8e53dd5e07e01d4f3ffd836763209a1f0cbc61adcfdc2951e77528ee7b6e68114c3a4bec38875d285021e68ae8aa913bb1e2e65dd52c649a0e98bfb4e8bab6dd10295c1167a0854ba44f094feb75d2fb00c944f07d4b47114f483df9838459316f3ddbc4a82e6507881931f8e20f5b805&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_2_key.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;5c7cb2ac407cd60b1f2b86ef46077d3a312b6ce921df2a141347e8bf1e5c6573f23e6c76ff45d308dea6014030a274127ad437228f1d5ec2431d2ea9e3cedd5b0a207a9efa6f926d5420205003f3cb9c4b82b2d595180e62a173a2e5aa0322de48a70a873f641bdae1764e6b1667c241e0fe03a4ccdc3fe0cfa5f75b239d6497c3b69dca17bb685ba70b307d1243836d8fb198ce727cfae4057ee0b4fdcb09f4ba5ae127f49c5de780edb4e40aec96303c8a7b98b1b8e53dd5e07e01d4f3ffd836763209a1f0cbc61adcfdc2951e77528ee7b6e68114c3a4bec38875d285021e68ae8aa913bb1e2e65dd52c649a0e98bfb4e8bab6dd10295c1167a0854ba44f094feb75d2fb00c944f07d4b47114f483df9838459316f3ddbc4a82e6507881931f8e20f5b805&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;====ROUND 2====&lt;br/&gt;*Coordinator&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;/0/*,/1/*&lt;br/&gt;wsh(sortedmulti(2,[98d79e95/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6DvvwHS5pd1D36xt4YBGJvtdThWXfn8L9qRj9DbFMExMeP6eBE6Aw9WyBC7XUQwiPPDFurirewsKZpYv68yTV5RBy7SZmw45QEkaLka5BCt/*,[3e94b5a1/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6E1W1DUYY29V2b8czCcpi36GG2uD33B11vwNopgTZwsVyfgAkA4kPCqLP5R4YzaRvzW17CQrDkgmDQbA848AdkR7W18nNvMKXzzCBSnZP9c/*))#x0lx92qk&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;*Coordinator encryption&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;4dab3988cbc683ad7a8c93d43f9b11a78b63a93d5e33ea19c603f4b7b87ac284&lt;br/&gt;** MAC (hex): df3d06db6c8b8a5f25de202e10ea225df6415d1ed0e36c64cc2be1b7e86c2a38&lt;br/&gt;** IV (hex) : df3d06db6c8b8a5f25de202e10ea225d&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;2761e6bfe839586b4c90954200bc4ce6d39ef164c5d14997755575d1691ee249ffd20beda526f57a7424907f839c6c2e3ecd46889ede290a2c81de22d3f33a7fa5e55ec95c0e26005c596d0f6346f819823f361f9f9f54d1eae48b325240d66c5888bd5ebab843061dcdd73b675346da982646c83026694d757661d31c2d654fb263c9ab3e874a258bc234c48532f15e9450c982fcf161404746e9f23d25e17b74139cd799983fd0c7a7a0386a823d3789b4578879a764172cc8ef96ab003eee24f6288007d31e2b999aff5a6d30cc524a0111a99730a29cf28ae41dbff6ce21ca6bc1df37074228178048e835584e6e70dba941154d024cd03cb6c56d0bde441ce464aa749de5e814dd30e21b75f62e831ac1f28eda1a7ba7e122076789e284402c8ba85b5a0e864bce220e3c78fa2f465e2bcf6b1d378816319de99f99ce7068&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;df3d06db6c8b8a5f25de202e10ea225df6415d1ed0e36c64cc2be1b7e86c2a382761e6bfe839586b4c90954200bc4ce6d39ef164c5d14997755575d1691ee249ffd20beda526f57a7424907f839c6c2e3ecd46889ede290a2c81de22d3f33a7fa5e55ec95c0e26005c596d0f6346f819823f361f9f9f54d1eae48b325240d66c5888bd5ebab843061dcdd73b675346da982646c83026694d757661d31c2d654fb263c9ab3e874a258bc234c48532f15e9450c982fcf161404746e9f23d25e17b74139cd799983fd0c7a7a0386a823d3789b4578879a764172cc8ef96ab003eee24f6288007d31e2b999aff5a6d30cc524a0111a99730a29cf28ae41dbff6ce21ca6bc1df37074228178048e835584e6e70dba941154d024cd03cb6c56d0bde441ce464aa749de5e814dd30e21b75f62e831ac1f28eda1a7ba7e122076789e284402c8ba85b5a0e864bce220e3c78fa2f465e2bcf6b1d378816319de99f99ce7068&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;===Mode: &amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; Encryption===&lt;br/&gt;====ROUND 1====&lt;br/&gt;*Coordinator&lt;br/&gt;** M-of-N: 2/3&lt;br/&gt;** ADDRESS_TYPE: NESTED_SEGWIT&lt;br/&gt;** TOKEN for Signer 1 (hex): 654d63309464afcda558c6aa&lt;br/&gt;*** TOKEN (decimal): 31351541690484562733651510954&lt;br/&gt;*** TOKEN (mnemonic): grab help slow churn enough traffic nice boat price&lt;br/&gt;*** ENCRYPTION_KEY (hex):&lt;br/&gt;4073adac2351e164b8d68039abd9d4b8e4d07adccfdf73ece6e236d60b107802&lt;br/&gt;** TOKEN for Signer 2 (hex): b0344f51d5cb04083d598fa3&lt;br/&gt;*** TOKEN (decimal): 54532600447720520868878192547&lt;br/&gt;*** TOKEN (mnemonic): rabbit pen stamp process raccoon advice voice&lt;br/&gt;cradle person&lt;br/&gt;*** ENCRYPTION_KEY (hex):&lt;br/&gt;6bae6b670e257d7468c3e90194029dd468a2f39d8b9a3ff187b08209b1d409b6&lt;br/&gt;** TOKEN for Signer 3 (hex): 163fd307195982c4c39d50bb&lt;br/&gt;*** TOKEN (decimal): 6885829092987042066541138107&lt;br/&gt;*** TOKEN (mnemonic): bike write scrub crawl oblige give attack present rookie&lt;br/&gt;*** ENCRYPTION_KEY (hex):&lt;br/&gt;c78b94589214b6dc98b337ba4ce54380553ed00a1e5b1955fc540ce3b30d6566&lt;br/&gt;&lt;br/&gt;* Signer 1&lt;br/&gt;** MASTER_KEY_FINGERPRINT: 110dc257&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;):&lt;br/&gt;KzshDDEBhzyiwXHoyE7ZiLegzztEy54AG6Wq8N844LqHSQMHt4Ji&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;):&lt;br/&gt;xpub6EPQbDFezXYvVFHqnc8R7QUSE8hTepbyCXU7jJBT4dVm2rQHe1i6isqoj59qhyBiCdKquo6QsgMZNHvEz3BM4cNSszF25siTqLUCznBm8vk&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_1_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;654d63309464afcda558c6aa&lt;br/&gt;[110dc257/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;]xpub6EPQbDFezXYvVFHqnc8R7QUSE8hTepbyCXU7jJBT4dVm2rQHe1i6isqoj59qhyBiCdKquo6QsgMZNHvEz3BM4cNSszF25siTqLUCznBm8vk&lt;br/&gt;Signer 1 key&lt;br/&gt;IDX6xLdM4XjetYPvVfpVBXAfT7oE3tHAOB4blZpbIst8bjJ&#43;LbDeP4tZl4O8utAuys9igXE0G3kaHz1mg/&#43;OU8w=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 1 encryption&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;f43c359a4b3d7b2e01be73c54519b12545ca9a23a86f824aadf577b314a7caa7&lt;br/&gt;** MAC (hex): 40b6b43e2f1bc01b748eb242235d7e09fa8a2fd6cebe35784cf3adf81910ec98&lt;br/&gt;** IV (hex) : 40b6b43e2f1bc01b748eb242235d7e09&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;0877987764401c27e6c60ed2f1bb89dff1dbc5e8204149f682d53049bffe39553f24af3928aa2f78ac2d04ac5baa0c3ec39aaccf0d258e7bb6659a7b92e92f2c2784a94f4df8e8af2270d9d411bfff2cfb9f71b4e1ac87561c7d2ac57ca86a1f9716d5da7571719d24830fc8d015a0daf04b3742439484488798335357f2eeaa8e2db2ba630f9dffd88236e327ab5bfcfb6e29ee3ef6cc18e0b71c1731465c2351e76b92f7b1bd28ef6eff5414c22aa6c80090fa59b973c22e3044e92dbf3688990a49a42828e52c1e686f1193dcdf7b7118930e01419fe938c6811c58c84c36d692fd52846f998bc328471f1e73c22261791a08cda096ee3ac8b37f31afd0b1d9c335ff9ac67ff230eb0d69f2d7&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_1_key.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;40b6b43e2f1bc01b748eb242235d7e09fa8a2fd6cebe35784cf3adf81910ec980877987764401c27e6c60ed2f1bb89dff1dbc5e8204149f682d53049bffe39553f24af3928aa2f78ac2d04ac5baa0c3ec39aaccf0d258e7bb6659a7b92e92f2c2784a94f4df8e8af2270d9d411bfff2cfb9f71b4e1ac87561c7d2ac57ca86a1f9716d5da7571719d24830fc8d015a0daf04b3742439484488798335357f2eeaa8e2db2ba630f9dffd88236e327ab5bfcfb6e29ee3ef6cc18e0b71c1731465c2351e76b92f7b1bd28ef6eff5414c22aa6c80090fa59b973c22e3044e92dbf3688990a49a42828e52c1e686f1193dcdf7b7118930e01419fe938c6811c58c84c36d692fd52846f998bc328471f1e73c22261791a08cda096ee3ac8b37f31afd0b1d9c335ff9ac67ff230eb0d69f2d7&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 2&lt;br/&gt;** MASTER_KEY_FINGERPRINT: 5c890401&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;):&lt;br/&gt;L41Jnc9CdBtBJd18429MDGcTgP2DNoXaKyyGr271ndTprvrHXDQf&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;):&lt;br/&gt;xpub6EW1SmjSXq9YwVwcan5qWEncgx89SozMvGNpYF6hfZHYNTikNZ4gsXuVhHTi6xYJCkmY4X4wpPPS5Gr7aY39dVJMS2TGfihr25oaspKtU8q&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_2_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;b0344f51d5cb04083d598fa3&lt;br/&gt;[5c890401/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;]xpub6EW1SmjSXq9YwVwcan5qWEncgx89SozMvGNpYF6hfZHYNTikNZ4gsXuVhHTi6xYJCkmY4X4wpPPS5Gr7aY39dVJMS2TGfihr25oaspKtU8q&lt;br/&gt;Signer 2 key&lt;br/&gt;H5kN6UHaK2xACB6iYdTxxQPD8qyFEYv9iMsQs5B0MRfCM7NA5GB&#43;7EFgmBpSctwt6B122zWBr6mRjpYjKmj&#43;7hs=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 2 encryption&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;e0a20b5f5285fbaa35aad08fb70f5626c9abbe1b384a4950735b28aca6325ff2&lt;br/&gt;** MAC (hex): 3a6deec8dbdbd6606a52c7d7e64eca4f972a293cbabac6f62736629fbe77928a&lt;br/&gt;** IV (hex) : 3a6deec8dbdbd6606a52c7d7e64eca4f&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;bb0fb72f61b0c4858bd9c65235390b67651b94c4b0329238b0116dd6d3365ade33cb1c1b1619638968791a5d2d1d263d90280bdad8d9ca24c34a78e320076e0dccf59e7f729b541b44bbe40ba803dedd3b17c49765377cb2d913a856b86c3dd383dab475790e89226ed8ef2301574212d2809ed9c099aa67be434024ee2a4e82a146300acf755863da64807cb7bb2636f6616489636d254a870778d3540832aea44abac4328b5d90f3e6045ef36a526ce5d575f2305e3e4699dccbc713e9e68f50364036c1054c2a506aab77ea7c43a89536947c24330b09a62a90c3b4ae2d452f96ef34ec871af2c52d68ddede2503c87e2ba68d5cf9be589457879e06021ea6a6176f7dded820ba4c0e709e2a2&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_2_key.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;3a6deec8dbdbd6606a52c7d7e64eca4f972a293cbabac6f62736629fbe77928abb0fb72f61b0c4858bd9c65235390b67651b94c4b0329238b0116dd6d3365ade33cb1c1b1619638968791a5d2d1d263d90280bdad8d9ca24c34a78e320076e0dccf59e7f729b541b44bbe40ba803dedd3b17c49765377cb2d913a856b86c3dd383dab475790e89226ed8ef2301574212d2809ed9c099aa67be434024ee2a4e82a146300acf755863da64807cb7bb2636f6616489636d254a870778d3540832aea44abac4328b5d90f3e6045ef36a526ce5d575f2305e3e4699dccbc713e9e68f50364036c1054c2a506aab77ea7c43a89536947c24330b09a62a90c3b4ae2d452f96ef34ec871af2c52d68ddede2503c87e2ba68d5cf9be589457879e06021ea6a6176f7dded820ba4c0e709e2a2&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 3&lt;br/&gt;** MASTER_KEY_FINGERPRINT: 614cbf5f&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;):&lt;br/&gt;L2ccRLzH7GfVxWpU8YSY9y5UGyRoqW3UdeNT1vGfVbxAGhwU5qhD&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;):&lt;br/&gt;xpub6F9TfWTFcMYy5Ycd2ka2az1brJj78J2isLAWptZnCpFsesss5sZv5B8xsgt71ZXfhDWhUtf4vng4zY6HUVrQbDMPDYRLYvFFoLnAYfzgYPH&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_3_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;163fd307195982c4c39d50bb&lt;br/&gt;[614cbf5f/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;]xpub6F9TfWTFcMYy5Ycd2ka2az1brJj78J2isLAWptZnCpFsesss5sZv5B8xsgt71ZXfhDWhUtf4vng4zY6HUVrQbDMPDYRLYvFFoLnAYfzgYPH&lt;br/&gt;Signer 3 key&lt;br/&gt;H0jf2JMtke5zDDIWys6fihOCA6QBmC5&#43;hbgVB/c2mMPNPLB6tDXt0TFZU1f9wvaCR9762anKSc8CCqXLogw8V00=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 3 encryption&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;1f51ea067c121e2f86af5e1d484905046bc63e861573157d8b1ae9e7e47e224b&lt;br/&gt;** MAC (hex): 1a5624fcb39cebabb6174456173eec19b756bc916cf2c9d815e9bcce070898c4&lt;br/&gt;** IV (hex) : 1a5624fcb39cebabb6174456173eec19&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;48d6e139bdc8c19e93cbbf5b4478340c8cf08aa91c28803084d5f58618773f7e615e0134492b496c4e7c130351c0350701f686918033f621378552d7040efedd5539d38c258bf936475de775f23da3953fe3ba5bbbd24816b8902b87a9a09700c446b085119dedee2395dd69665e742f72f2fb6da4ebe3f4704eaf45486fbfb84d764b718cc0b756e72f72ab6069d47765bdd3ebd4074af4fa99a95691a659675ce5f72235c28ddf3c3d53179e598cddc967fc896adc6e97edeeffc85b9e44611df748d923ff3dd921ad4d6e98e0de12359a37558e326faf585ba57e73ab45bc4a49f6e8a756f365f5d204e70f7c7bed269e81e9524a41e5d4cbaad0b6b442d6eea1e5da1ca345cc665a0cffe2c3&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_3_key.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;1a5624fcb39cebabb6174456173eec19b756bc916cf2c9d815e9bcce070898c448d6e139bdc8c19e93cbbf5b4478340c8cf08aa91c28803084d5f58618773f7e615e0134492b496c4e7c130351c0350701f686918033f621378552d7040efedd5539d38c258bf936475de775f23da3953fe3ba5bbbd24816b8902b87a9a09700c446b085119dedee2395dd69665e742f72f2fb6da4ebe3f4704eaf45486fbfb84d764b718cc0b756e72f72ab6069d47765bdd3ebd4074af4fa99a95691a659675ce5f72235c28ddf3c3d53179e598cddc967fc896adc6e97edeeffc85b9e44611df748d923ff3dd921ad4d6e98e0de12359a37558e326faf585ba57e73ab45bc4a49f6e8a756f365f5d204e70f7c7bed269e81e9524a41e5d4cbaad0b6b442d6eea1e5da1ca345cc665a0cffe2c3&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;====ROUND 2====&lt;br/&gt;* Coordinator&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;/0/*,/1/*&lt;br/&gt;sh(wsh(multi(2,[110dc257/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;]xpub6EPQbDFezXYvVFHqnc8R7QUSE8hTepbyCXU7jJBT4dVm2rQHe1i6isqoj59qhyBiCdKquo6QsgMZNHvEz3BM4cNSszF25siTqLUCznBm8vk/*,[5c890401/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;]xpub6EW1SmjSXq9YwVwcan5qWEncgx89SozMvGNpYF6hfZHYNTikNZ4gsXuVhHTi6xYJCkmY4X4wpPPS5Gr7aY39dVJMS2TGfihr25oaspKtU8q/*,[614cbf5f/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;]xpub6F9TfWTFcMYy5Ycd2ka2az1brJj78J2isLAWptZnCpFsesss5sZv5B8xsgt71ZXfhDWhUtf4vng4zY6HUVrQbDMPDYRLYvFFoLnAYfzgYPH/*)))#j3ykhz7f&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Send to Signer 1:&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;f43c359a4b3d7b2e01be73c54519b12545ca9a23a86f824aadf577b314a7caa7&lt;br/&gt;** MAC (hex): ee74a0f50943d7d1b65270028bb05133e87c832cdc1ef0a07c79db2093ca3432&lt;br/&gt;** IV (hex) : ee74a0f50943d7d1b65270028bb05133&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;8e3ba3dac0f979fad0d160bd00c8294ff1726d51b95ff3e1534e5a1900f3d7cd4f6d929985a94b9da2c11e4e0f7770cc53c6739fd099477323bd26a3eca9c8016e79848d15e274463424b8355cd73cced61f1816ac8bac87f8c650ee9052f50e347c52ad24b00794a9d5523714be2fdcf731f14b7a8d7c93eab44c258e1c417d2837b9676832e8ce7239dc28b4e1166803209947b8a875a99b9478ee94f7bc17399e886179ab2a0285dc11a3883f6fa439d0f2277dadbec8c355c379fc50e945897e1a738f6a55b09f6b8b6bdf6d4bc248219cbad3662a78a2f539c989e055e00b8efd42fbff978e1a5cc10f83df56117ece4d17f94a0a6d3803778ed53531419250c5a0fff6cad4ab401468dd054915b068cc8826ae1308a71b38060d68c9248d59eea11c2c52a66d5f6bc0d7ae6cb44305c36e56068456d293b70037902e7b05a3ee0af710201128dffc0c16c3306b66bd19b9ae5b91aded35ef33f07743e5b185a9f88a5c67d40270e3bbcf592167ceaf82ead693728d5129b50075edd5ce24863f3484b4b063599ed1327e1c87d0a2051fed3b1234a702722b686e4c9392a403b79726800dd6b691e516e44d9e836c190b10cf2bb262bba98293c97f2c323e59acd0a1f988c5&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet_for_signer_1.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;ee74a0f50943d7d1b65270028bb05133e87c832cdc1ef0a07c79db2093ca34328e3ba3dac0f979fad0d160bd00c8294ff1726d51b95ff3e1534e5a1900f3d7cd4f6d929985a94b9da2c11e4e0f7770cc53c6739fd099477323bd26a3eca9c8016e79848d15e274463424b8355cd73cced61f1816ac8bac87f8c650ee9052f50e347c52ad24b00794a9d5523714be2fdcf731f14b7a8d7c93eab44c258e1c417d2837b9676832e8ce7239dc28b4e1166803209947b8a875a99b9478ee94f7bc17399e886179ab2a0285dc11a3883f6fa439d0f2277dadbec8c355c379fc50e945897e1a738f6a55b09f6b8b6bdf6d4bc248219cbad3662a78a2f539c989e055e00b8efd42fbff978e1a5cc10f83df56117ece4d17f94a0a6d3803778ed53531419250c5a0fff6cad4ab401468dd054915b068cc8826ae1308a71b38060d68c9248d59eea11c2c52a66d5f6bc0d7ae6cb44305c36e56068456d293b70037902e7b05a3ee0af710201128dffc0c16c3306b66bd19b9ae5b91aded35ef33f07743e5b185a9f88a5c67d40270e3bbcf592167ceaf82ead693728d5129b50075edd5ce24863f3484b4b063599ed1327e1c87d0a2051fed3b1234a702722b686e4c9392a403b79726800dd6b691e516e44d9e836c190b10cf2bb262bba98293c97f2c323e59acd0a1f988c5&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Send to Signer 2:&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;e0a20b5f5285fbaa35aad08fb70f5626c9abbe1b384a4950735b28aca6325ff2&lt;br/&gt;** MAC (hex): 81df9e064f1de1d5f754c4e20f9286f9d81b856d3965677a9f2430cb9297ad1f&lt;br/&gt;** IV (hex) : 81df9e064f1de1d5f754c4e20f9286f9&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;dcd82038ef627d6cb2deb62d04c4ccbaa3a354633d960e46312c22791f039f23fd9782a1e3a63504c1e5b3a0770bb8d32fdf168738b6c03278f1391dd5d01e9aafee7be2c8136ee018feff6fc8cdb926df13a36e115ddca8254934f56b7f700768c94cb8388a8297834de9affcd959417ae3d6ec3251387904f50f51f06306cc4d36eefc51418dd3b2c5454910a23ec67a40a3b918d2a740e812929aae949d8dde2c41cbbb3a2b7c2103788421c147f4794d6a26947c15ef4a99ceb825d0c5aaa78b8737d0ef712ba8e269a9941b1af5d217dcdd9cd06727fbdc70fabe3f5a8c09acff4e76992be7f27c6b12ca84739f62a6da86e5b79103d632c0dc8ab3f91fddb3cfbe67084dc4b861c4ac7c86fb171a058c98c67cffdc40ff17ae1533361cc6fb7b63657af0408cf30bf9d6d97aaacf9d3ff443eee61f207228cd91769ce83a0709c1be1847884c6a8fdc86ede66aef8e34fc509c49edf30f743bdc8f9052961ee340924ec2d1caadc6fd286bb3e233c153cd08c1934127752dc28e0d12efa92a050c4061653edb1cbf2fd4b2ba4e038f0b44f5735f198e92571c029156f65f534bfc149f38d611829901372cfc0176b9d2f9ac6512b7f37941a02dff701df0bceadaacfc6935&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet_for_signer_2.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;81df9e064f1de1d5f754c4e20f9286f9d81b856d3965677a9f2430cb9297ad1fdcd82038ef627d6cb2deb62d04c4ccbaa3a354633d960e46312c22791f039f23fd9782a1e3a63504c1e5b3a0770bb8d32fdf168738b6c03278f1391dd5d01e9aafee7be2c8136ee018feff6fc8cdb926df13a36e115ddca8254934f56b7f700768c94cb8388a8297834de9affcd959417ae3d6ec3251387904f50f51f06306cc4d36eefc51418dd3b2c5454910a23ec67a40a3b918d2a740e812929aae949d8dde2c41cbbb3a2b7c2103788421c147f4794d6a26947c15ef4a99ceb825d0c5aaa78b8737d0ef712ba8e269a9941b1af5d217dcdd9cd06727fbdc70fabe3f5a8c09acff4e76992be7f27c6b12ca84739f62a6da86e5b79103d632c0dc8ab3f91fddb3cfbe67084dc4b861c4ac7c86fb171a058c98c67cffdc40ff17ae1533361cc6fb7b63657af0408cf30bf9d6d97aaacf9d3ff443eee61f207228cd91769ce83a0709c1be1847884c6a8fdc86ede66aef8e34fc509c49edf30f743bdc8f9052961ee340924ec2d1caadc6fd286bb3e233c153cd08c1934127752dc28e0d12efa92a050c4061653edb1cbf2fd4b2ba4e038f0b44f5735f198e92571c029156f65f534bfc149f38d611829901372cfc0176b9d2f9ac6512b7f37941a02dff701df0bceadaacfc6935&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Send to Signer 3:&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;1f51ea067c121e2f86af5e1d484905046bc63e861573157d8b1ae9e7e47e224b&lt;br/&gt;** MAC (hex): 159a91100cacd123480b7d085c8bb32ec8eb06f0391b6dc8fac07ae67eb37b81&lt;br/&gt;** IV (hex) : 159a91100cacd123480b7d085c8bb32e&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;c7269d8be21d1cfe172e35aa106760f1fdc929fce19da8fb7f74f759efec1ee02796fb1e8b008cf177f60a2021570f17aeeb41f8636858654082734b90959b98fd08419f901683c4ca3e76b3e482fea4c67162775e0d80bcb45df729f646c1364a3d8a7d1ff961717b00897e877c1c0554d3502942149726806269c546ad2dd34ba286ddf5cd336b83aabf7091fa25e607faf7e54017d84113e1e3ec440b3704addea188b89293469306fc0a98570afdcf269026b2d2e760f466c1f75bcf75fdf030c0a692e5681fd4487e59d6e96451ff5b6b9f2521b8e95e796ef4ab0a917794d91a30fdac7ee9ddbd89d174831bd133ab12a74f52f6283ee2c5fe3d5a957a7c1a15530b2c5224f76d90057dc94f2ee34e28b037ae7f518cc6dfe725cd3e657648de82b200ea77830eb93219f883998d3207a4ef5902d1119b0cde6b364bc1effb86109d9c2babc8ab26dce90329779d8cd0d737e9825a25586aa3c8fa5317e3e433ff235b82f629de0504e3c992f8e8de299f62751bc1fcb2e75e0262c7a27be7068cea69b14f303e97c24b99ed29cae142564e285657704b4c411d0d4f8c58819e2c0e0ffc3667eb5a408aad8a3023a5f00875e7deab95dc365d8757f7b79815a4fd9e6de2b3&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet_for_signer_3.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;159a91100cacd123480b7d085c8bb32ec8eb06f0391b6dc8fac07ae67eb37b81c7269d8be21d1cfe172e35aa106760f1fdc929fce19da8fb7f74f759efec1ee02796fb1e8b008cf177f60a2021570f17aeeb41f8636858654082734b90959b98fd08419f901683c4ca3e76b3e482fea4c67162775e0d80bcb45df729f646c1364a3d8a7d1ff961717b00897e877c1c0554d3502942149726806269c546ad2dd34ba286ddf5cd336b83aabf7091fa25e607faf7e54017d84113e1e3ec440b3704addea188b89293469306fc0a98570afdcf269026b2d2e760f466c1f75bcf75fdf030c0a692e5681fd4487e59d6e96451ff5b6b9f2521b8e95e796ef4ab0a917794d91a30fdac7ee9ddbd89d174831bd133ab12a74f52f6283ee2c5fe3d5a957a7c1a15530b2c5224f76d90057dc94f2ee34e28b037ae7f518cc6dfe725cd3e657648de82b200ea77830eb93219f883998d3207a4ef5902d1119b0cde6b364bc1effb86109d9c2babc8ab26dce90329779d8cd0d737e9825a25586aa3c8fa5317e3e433ff235b82f629de0504e3c992f8e8de299f62751bc1fcb2e75e0262c7a27be7068cea69b14f303e97c24b99ed29cae142564e285657704b4c411d0d4f8c58819e2c0e0ffc3667eb5a408aad8a3023a5f00875e7deab95dc365d8757f7b79815a4fd9e6de2b3&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Acknowledgement==&lt;br/&gt;&lt;br/&gt;Special thanks to Pavol Rusnak, Dmitry Petukhov, Christopher Allen,&lt;br/&gt;Craig Raw, Robert Spigler, Gregory Sanders, Ta Tat Tai, Michael&lt;br/&gt;Flaxman, Pieter Wuille and others for their feedback on the&lt;br/&gt;specification.&lt;br/&gt;&lt;br/&gt;==References==&lt;br/&gt;&lt;br/&gt;Original mailing list thread:&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018385.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018385.html&lt;/a&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210405/4f9dbebb/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210405/4f9dbebb/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T00:51:16&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsd98zgw6wvm85xplf9l7t096drlt8ctd28cy7du3pqwzj7k7ksslczyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hszpuzuu</id>
    
      <title type="html">📅 Original date posted:2021-04-12 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsd98zgw6wvm85xplf9l7t096drlt8ctd28cy7du3pqwzj7k7ksslczyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hszpuzuu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvrzhs42ak3h970nsuregj3r99jxlxrw87jtjew5tg9vayzcn5l3g4d0xh5&#39;&gt;nevent1q…0xh5&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-12&lt;br/&gt;📝 Original message:Hello Salvatore,&lt;br/&gt;&lt;br/&gt;On Mon, Apr 12, 2021 at 8:03 AM Salvatore Ingala &amp;lt;salvatore.ingala at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Hugo,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; First of all, thank you for the impressive work on leading the&lt;br/&gt;&amp;gt; standardization efforts!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe one ought to more clearly distinguish the &amp;#34;Signer&amp;#34; (as in: one&lt;br/&gt;&amp;gt; of the parties in the multisig setup), from the &amp;#34;*Signing device*&amp;#34; (which&lt;br/&gt;&amp;gt; is likely a hardware wallet).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Actually, in the current spec, a &amp;#34;Signer&amp;#34; is *any software/hardware that&lt;br/&gt;possesses the private keys and can sign using those keys* -- it doesn&amp;#39;t&lt;br/&gt;have to be hardware. &amp;#34;Signer&amp;#34; does not mean the human user. I will clarify&lt;br/&gt;the definition and clear up any ambiguous language in the spec. Thanks for&lt;br/&gt;bringing this to my attention!&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; BSMS defines a &amp;#34;Signer&amp;#34; as &amp;#34;a participating member in the multisig&amp;#34;,&lt;br/&gt;&amp;gt; therefore a person/entity who is likely using both a hardware wallet and&lt;br/&gt;&amp;gt; some BSMS-friendly software wallet (e.g. the next version of Specter&lt;br/&gt;&amp;gt; Desktop).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;As mentioned above, &amp;#34;Signer&amp;#34; does not refer to the user or any entity that&lt;br/&gt;does not have the private keys / signing capability.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; It is therefore relevant to discuss which parts of the BSMS mechanism are&lt;br/&gt;&amp;gt; implemented in the Signer&amp;#39;s software wallet, and which should be in the&lt;br/&gt;&amp;gt; Signer&amp;#39;s hardware wallet.&lt;br/&gt;&amp;gt; From the discussion, it appears to me that different people might have&lt;br/&gt;&amp;gt; different expectations on what the signing device/HWW should do, so I would&lt;br/&gt;&amp;gt; like to comment on this point specifically (while I reckon that it mostly&lt;br/&gt;&amp;gt; falls within the realm of concerns #4 and #5 of the motivation paragraph,&lt;br/&gt;&amp;gt; which are explicitly left out of scope).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I fully agree that a *Signer* must persist the full wallet&amp;#39;s description,&lt;br/&gt;&amp;gt; and should also create physical backups which include the full descriptor&lt;br/&gt;&amp;gt; and the cosigner&amp;#39;s information. I would disagree, however, if any standards&lt;br/&gt;&amp;gt; were to force *hardware wallets* to persist any substantial amount of&lt;br/&gt;&amp;gt; state other than the seed, as I believe that it gives no substantial&lt;br/&gt;&amp;gt; advantage over externally stored signed data for many use cases.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The following is the *wallet registration flow* I am currently working on&lt;br/&gt;&amp;gt; (in the context of adding support to multisig wallets at Ledger). The goal&lt;br/&gt;&amp;gt; is to allow a *Signer* (the person) to persist a multisig setup in its&lt;br/&gt;&amp;gt; storage, while achieving a similar level of security you would have if you&lt;br/&gt;&amp;gt; were storing it on the hardware wallet itself (note that the following flow&lt;br/&gt;&amp;gt; would happen as part of Round 2):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1) The desktop wallet of the requests the HWW to register a new multisig&lt;br/&gt;&amp;gt; wallet. The request includes the full multisig wallet description, and some&lt;br/&gt;&amp;gt; extra metadata (e.g.: a name to be associated to this multisig wallet).&lt;br/&gt;&amp;gt; 2) The HWW validates the wallet and verifies it with the user with the&lt;br/&gt;&amp;gt; trusted screen (as per BSMS Round 2); on confirmation, it returns a wallet&lt;br/&gt;&amp;gt; id (which is a vendor-specific hash of all the wallet description &#43;&lt;br/&gt;&amp;gt; metadata) and signature&lt;br/&gt;&amp;gt; 3) The desktop wallet stores the full wallet description/id/signature.&lt;br/&gt;&amp;gt; (Optionally, a backup could be stored elsewhere).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Whenever an operation related to the multisig wallet is required&lt;br/&gt;&amp;gt; (verifying a receiving address, or signing a spending transaction), the HWW&lt;br/&gt;&amp;gt; first receives and verifies all the data stored at step 3 above (without&lt;br/&gt;&amp;gt; any user interaction). Then it proceeds exactly the same way as if it had&lt;br/&gt;&amp;gt; always stored the multisig wallet in their own storage.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Now that we&amp;#39;re clear on definitions, then it should become obvious that&lt;br/&gt;redefining the &amp;#34;Coordinator-Signer&amp;#34; pair as &amp;#34;a Signer&amp;#34; does not address the&lt;br/&gt;underlying problem. (What you call &amp;#34;the desktop wallet&amp;#34; here is a&lt;br/&gt;Coordinator, not a Signer).&lt;br/&gt;&lt;br/&gt;As long as the Signer does not own up the task of storing the wallet&lt;br/&gt;configuration, it must rely indefinitely on others for critical data when&lt;br/&gt;working in a multisig wallet, as I have explained in my last email.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210412/d2c96113/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210412/d2c96113/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:31:18&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqstu6m97yymptm6acqjgjpmr4rf08mene74agqyux3gnmxhwvlv9pgzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsj2fsc6</id>
    
      <title type="html">📅 Original date posted:2021-04-11 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqstu6m97yymptm6acqjgjpmr4rf08mene74agqyux3gnmxhwvlv9pgzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsj2fsc6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2g2p0c9luy0drvs7zsd2cyuggt7hxw0gq72ym79qfrcvugk4ftagglm072&#39;&gt;nevent1q…m072&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-11&lt;br/&gt;📝 Original message:Hi Michael,&lt;br/&gt;Comments inline.&lt;br/&gt;&lt;br/&gt;On Sat, Apr 10, 2021 at 7:34 PM Michael.flaxman &amp;lt;&lt;br/&gt;michael.flaxman at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Hugo,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I appreciate the effort you and everyone else is making to improve&lt;br/&gt;&amp;gt; multisig in bitcoin!&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Thanks.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; I like that this BIP gets rid of SLIP132 version bytes, as those have been&lt;br/&gt;&amp;gt; de-facto deprecated in favor of output descriptors for some time. Having a&lt;br/&gt;&amp;gt; standard for how to communicate descriptor records (BSMS 1.0) also seems&lt;br/&gt;&amp;gt; like a nice positive.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The most commonly raised issues from the 10x security guide&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://btcguide.github.io/&amp;gt&#34;&gt;https://btcguide.github.io/&amp;gt&lt;/a&gt;; are about how to properly verify that all&lt;br/&gt;&amp;gt; hardware wallets are participants in the user&amp;#39;s multisig quorum (and with&lt;br/&gt;&amp;gt; the correct m-of-n). This shows up in two big ways:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    1. The O(n^2) xpub validation problem creates a bad UX and is hard for&lt;br/&gt;&amp;gt;    non-advanced users.&lt;br/&gt;&amp;gt;    2. The risk for stateless hardware wallets (like Trezor) to have their&lt;br/&gt;&amp;gt;    xpubs swapped out by a compromised Coordinator.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Unfortunately, this BIP does not improve either of these issues, while&lt;br/&gt;&amp;gt; adding considerable complexity.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; *1. O(n^2) Xpub Validation*&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The proposed use of an output descriptor checksum has an obvious 40-bit&lt;br/&gt;&amp;gt; MITM collision attack. A compromised Coordinator could trick a Signer into&lt;br/&gt;&amp;gt; displaying an attacker&amp;#39;s receive address, despite a correctly functioning&lt;br/&gt;&amp;gt; Signers and the user properly validating the checksum (github link&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://github.com/nunchuk-io/bips/pull/1/#issuecomment-801629857&amp;gt&#34;&gt;https://github.com/nunchuk-io/bips/pull/1/#issuecomment-801629857&amp;gt&lt;/a&gt;;).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Using a checksum with much higher entropy would reduce xpub validation to&lt;br/&gt;&amp;gt; O(n) and create a very nice UX for signers. This would be a huge win for&lt;br/&gt;&amp;gt; multisig! Instead, the recommended solution from the BIP is to validate all&lt;br/&gt;&amp;gt; the key records manually, which is how multisig is currently done and what&lt;br/&gt;&amp;gt; we desperately want to move away from. With a proper checksum, there’s no&lt;br/&gt;&amp;gt; reason for a user to ever see an xpub.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Users should not be shown a checksum and asked to validate it in meatspace&lt;br/&gt;&amp;gt; (across Signers) if an attacker’s address could still be substituted!&lt;br/&gt;&amp;gt; Validating a single address across devices does solve this problem, but if&lt;br/&gt;&amp;gt; you’re going to validate an address there’s no reason to display the&lt;br/&gt;&amp;gt; checksum at all. However, validating an address is confusing to non-experts:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    - Is it a wallet ID or a bitcoin address?&lt;br/&gt;&amp;gt;    - Am I supposed to send funds to this address?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If creating a new checksum standard for the descriptor record is&lt;br/&gt;&amp;gt; undesirable, we could use a child address (from an unhardened BIP32 path)&lt;br/&gt;&amp;gt; and encode that in some way for end-users to verify it matches across all&lt;br/&gt;&amp;gt; Signers. It would be strongly preferable for the encoding to be an&lt;br/&gt;&amp;gt; unambiguously different format from a bitcoin address / BIP39 seed phrase,&lt;br/&gt;&amp;gt; so that it’s clear it’s just a wallet ID. One non-ideal but simple solution&lt;br/&gt;&amp;gt; is to use a hash function (i.e. dsha256) to calculate the digest of the&lt;br/&gt;&amp;gt; child address, and display this in hexadecimal format. While hexadecimal is&lt;br/&gt;&amp;gt; non-ideal for manual verification, it is already trivial for any bitcoin&lt;br/&gt;&amp;gt; library to perform these steps.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;As I have responded to your previous comment about the same on Github (&lt;br/&gt;&lt;a href=&#34;https://github.com/nunchuk-io/bips/pull/1&#34;&gt;https://github.com/nunchuk-io/bips/pull/1&lt;/a&gt;), I do see the value of a&lt;br/&gt;longer checksum.&lt;br/&gt;&lt;br/&gt;There are trade-offs when it comes to designing checksum. Mainly complexity&lt;br/&gt;and size. At one end of the spectrum you can have a single-byte XOR&lt;br/&gt;checksum. At the other end you can have something like HMAC-SHA256 (which&lt;br/&gt;we are using in the proposal to calculate the MACs for the key and&lt;br/&gt;descriptor records). And then there&amp;#39;s everything in between. But we should&lt;br/&gt;know that nothing comes for free.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s a good topic that warrants further discussion.&lt;br/&gt;&lt;br/&gt;Confirming a single address is a promising direction, since it&amp;#39;s something&lt;br/&gt;the user should do anyway prior to using the wallet. Currently the proposal&lt;br/&gt;recommends that the Signers show a preview of the first address(es) upon&lt;br/&gt;wallet creation. But we can elevate this and make it a mandatory part of&lt;br/&gt;the spec: have all Signers confirm that they have the same 1st receive&lt;br/&gt;address. If we go with this approach, the checksum can stay as-is, and only&lt;br/&gt;there for error detection. (We get the checksum for free with the&lt;br/&gt;descriptor language anyway, so there&amp;#39;s no reason to remove it).&lt;br/&gt;&lt;br/&gt;Also nice to see that you have come around and agree that moving away from&lt;br/&gt;manual inspection is desirable.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; *2. Allow Support for Stateless Wallets*&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The current BIP states:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * &amp;#34;If all checks pass, the Signer must persist the descriptor record in&lt;br/&gt;&amp;gt; its storage.&amp;#34;*&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While persistence has a lot of benefits, it is not a feature of the most&lt;br/&gt;&amp;gt; sold multisig hardware wallet: Trezor. A simple solution here is to have&lt;br/&gt;&amp;gt; each Signer sign the entire descriptor record at the end of round 2, not&lt;br/&gt;&amp;gt; just its own key record in round 1. Then the data can be stored anywhere&lt;br/&gt;&amp;gt; (including on the Signer itself) and played back to each Signer for&lt;br/&gt;&amp;gt; validation when needed. The end-user would have no idea this was happening,&lt;br/&gt;&amp;gt; but the device could refuse to display information it hasn’t fully&lt;br/&gt;&amp;gt; validated (or at least add a warning message). Even a device with&lt;br/&gt;&amp;gt; persistent storage would be better served using a signature, so that an&lt;br/&gt;&amp;gt; evil maid couldn&amp;#39;t tamper with the device (say in the no-encryption case&lt;br/&gt;&amp;gt; for simplicity).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I reiterate that I strongly disagree that going stateless is the direction&lt;br/&gt;we want to pursue when it comes to multisig.&lt;br/&gt;&lt;br/&gt;In a multisig or any type of MPC smart contract, any Signer in the contract&lt;br/&gt;must know who the other co-Signers are at all times. You can choose to do&lt;br/&gt;this verification once at setup and persist this info on the Signer, or&lt;br/&gt;you&amp;#39;d have to re-do the verification for every single transaction. There is&lt;br/&gt;no other choice.&lt;br/&gt;&lt;br/&gt;Signing the descriptor record is insufficient, while also introducing a&lt;br/&gt;great deal of complexity. Here are the problems:&lt;br/&gt;1) The signature needs to be stored somewhere. Who stores it if it&amp;#39;s not&lt;br/&gt;the Signer itself? What if it gets lost? (If the Signer stores its own&lt;br/&gt;signature, then the scheme is no longer stateless. You might as well store&lt;br/&gt;the full descriptor).&lt;br/&gt;2) When the signature is &amp;#34;played back&amp;#34; to the Signer, a copy of the&lt;br/&gt;original descriptor must be included. Who stores the descriptor? What if it&lt;br/&gt;gets lost? This is an under-appreciated aspect of the stateful approach:&lt;br/&gt;every participant in the multisig has a full copy of the original contract,&lt;br/&gt;which adds resilience to the wallet backup / recovery process.&lt;br/&gt;3) Because the full descriptor must be &amp;#34;played back&amp;#34; for every single&lt;br/&gt;transaction, this means every detail of the contract must be shared again&lt;br/&gt;and again, indefinitely. Not only does this add overhead (engineering and&lt;br/&gt;cognitive) to the spending process, it has massive privacy implications,&lt;br/&gt;since the descriptor contains everything you need to know about the wallets&lt;br/&gt;and its participants.&lt;br/&gt;&lt;br/&gt;Here&amp;#39;s an analogy in the physical world. Would you:&lt;br/&gt;a) Enter any type of written contract and&lt;br/&gt;b) Not keep a copy of the contract, forget about it, and&lt;br/&gt;c) Later on rely on your counter-parties or a third-party to provide you&lt;br/&gt;with the original contract and your signature, when the terms get carried&lt;br/&gt;out?&lt;br/&gt;&lt;br/&gt;One would be insane to enter such a contract in the real world.&lt;br/&gt;&lt;br/&gt;I realize that some vendors are currently not stateful, but I take this as&lt;br/&gt;an unfortunate fact, because multisig wasn&amp;#39;t a priority when these hardware&lt;br/&gt;were originally designed. But that is no reason to keep going with a broken&lt;br/&gt;architecture. The industry is green enough that we still can learn and&lt;br/&gt;recover from these sorts of flaws.&lt;br/&gt;&lt;br/&gt;Since you mentioned Trezor, I want to thank Pavol in particular here,&lt;br/&gt;because as Trezor CTO Pavol knows best that Trezor is currently stateless,&lt;br/&gt;but he&amp;#39;s still on-board with the general idea here, AFAIU.&lt;br/&gt;&lt;br/&gt;Bottom line: IMO, signers in a multisig MUST be stateful.&lt;br/&gt;&lt;br/&gt;This existing vulnerability in stateless wallets is particularly bad for&lt;br/&gt;&amp;gt; hosted multisig services like Casa/Unchained, where the service might&lt;br/&gt;&amp;gt; control m-1 keys. It’s far easier for a hosted service to potentially trick&lt;br/&gt;&amp;gt; non-expert users into displaying an attacker&amp;#39;s receive address on their&lt;br/&gt;&amp;gt; stateless Signer.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For example, assume the user is doing 2-of-3 multisig, where the&lt;br/&gt;&amp;gt; Coordinator (service) controls 1 key. Here is how the Coordinator could&lt;br/&gt;&amp;gt; trick their end-users:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    1. Coordinator swaps out 1 of the end-user’s xpubs, going from a&lt;br/&gt;&amp;gt;    2-of-3 where the end-user has 2 seeds to a 2-of-3 where the Coordinator has&lt;br/&gt;&amp;gt;    2 seeds.&lt;br/&gt;&amp;gt;    2. The end-user logs into the service to get a new receive address,&lt;br/&gt;&amp;gt;    and the service (Coordinator) displays malicious receive address X (as part&lt;br/&gt;&amp;gt;    of a 2-of-3).&lt;br/&gt;&amp;gt;    3. The end user connects stateless Signer 1 to the service&lt;br/&gt;&amp;gt;    (Coordinator), which under-the-hood gives stateless Signer 1 proof that it&lt;br/&gt;&amp;gt;    is included in this 2-of-3. Stateless singer 1 displays malicious receive&lt;br/&gt;&amp;gt;    address X!&lt;br/&gt;&amp;gt;    4. The end-user doesn&amp;#39;t verify the address on Signer 2, as many users&lt;br/&gt;&amp;gt;    unfortunately don&amp;#39;t -- perhaps it is in a far away location and the&lt;br/&gt;&amp;gt;    end-user (incorrectly) thinks that it’s already been validated in 2 places&lt;br/&gt;&amp;gt;    -- and makes a large deposit to receive address X. These funds now belong&lt;br/&gt;&amp;gt;    to the attacker and can be swept at any time!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If stateless Signer 1 required a signature to be replayed at step 3,&lt;br/&gt;&amp;gt; stateless Signer 1 would refuse to display malicious receive address X (or&lt;br/&gt;&amp;gt; at a minimum warn the end-user that it did not have enough info to properly&lt;br/&gt;&amp;gt; validate the address).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is also a concern for self-hosted multisig, I just used the hosted&lt;br/&gt;&amp;gt; services as the best example.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It&amp;#39;s also not just Trezor that is stateless. For example, I wrote a&lt;br/&gt;&amp;gt; simple CLI software multisig wallet as part of the buidl library&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://twitter.com/mflaxman/status/1321503036724989952&amp;gt&#34;&gt;https://twitter.com/mflaxman/status/1321503036724989952&amp;gt&lt;/a&gt;; to be used&lt;br/&gt;&amp;gt; mostly for emergency recovery. At 800 lines of code, it&amp;#39;s too&lt;br/&gt;&amp;gt; simple/minimal to touch the file system.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; *BIP39*&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While unrelated, the use of BIP39 words for session tokens seems like a&lt;br/&gt;&amp;gt; big mistake, as end-users have learned over years that BIP39 words are for&lt;br/&gt;&amp;gt; private key material. A small percent of users may backup their token BIP39&lt;br/&gt;&amp;gt; mnemonic and not their seed phrase BIP39 mnemonic! My suggestion is to just&lt;br/&gt;&amp;gt; stick with the other two Token options: decimal and hex.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Repost of my previous response. We discussed this at length on the&lt;br/&gt;linked Github PR:&lt;br/&gt;&amp;#34;We decided to keep the TOKEN at 6-9 words, not 12 or anything above&lt;br/&gt;precisely for this reason. Please note that the user has to back up their&lt;br/&gt;Signers first, before proceeding to setting up the multisig wallet. So&lt;br/&gt;there&amp;#39;s no writing both things down at once or mixing of the two flows here.&lt;br/&gt;&lt;br/&gt;I also find it hard to believe that someone who wants to invest in a safe&lt;br/&gt;multisig solution (and therefore must know at minimum what keys and&lt;br/&gt;multisig represent) will not know the difference between (permanent) 12&lt;br/&gt;words and (one-time use) 6 words. Also note that the TOKEN can be used&lt;br/&gt;without using BIP39 mnemonic at all.&amp;#34;&lt;br/&gt;&lt;br/&gt;We also made the decimal format, not BIP39 mnemonic, the recommended&lt;br/&gt;encoding in the spec.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210411/92f6fc7e/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210411/92f6fc7e/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:31:17&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsgkvud7m7sxtyaq8ude4dn9trpfv2h863jgaynhf26e5yc5q56grszyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hspew9cv</id>
    
      <title type="html">📅 Original date posted:2021-04-09 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsgkvud7m7sxtyaq8ude4dn9trpfv2h863jgaynhf26e5yc5q56grszyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hspew9cv" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs97geaxc0vwq8c6dvtgqq6wrz4drv3y2zh57vtec2qxhk0s3ts57c60ghvs&#39;&gt;nevent1q…ghvs&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-09&lt;br/&gt;📝 Original message:Hi Sjors&lt;br/&gt;Thanks for the feedback!&lt;br/&gt;&lt;br/&gt;The first step is for the Coordinator to generate a TOKEN, presumably using&lt;br/&gt;&amp;gt; its own entropy. But IIUC anyone who intercepts that token can decrypt any&lt;br/&gt;&amp;gt; future step in the setup process. This suggests a chicken-egg problem where&lt;br/&gt;&amp;gt; you need some pre-existing secure communications channel.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The exchange of the TOKEN is frequently mistaken as the chicken-and-egg&lt;br/&gt;problem, but it is not so.&lt;br/&gt;&lt;br/&gt;To understand why this isn&amp;#39;t chicken-and-egg, and why the TOKEN actually&lt;br/&gt;adds value, consider *the scale of the communication operation needed to&lt;br/&gt;exchange the TOKEN*, and *the scale of the communication operation needed&lt;br/&gt;to gather data for the creation of the multisig wallet *(with or without&lt;br/&gt;the TOKEN):&lt;br/&gt;&lt;br/&gt;1) The TOKEN itself is a single piece of data that is 64- or 96-bit. It is&lt;br/&gt;small enough to be easily exchanged (even memorized) and entered into&lt;br/&gt;various devices. It requires only a single round of communication, but can&lt;br/&gt;protect as many rounds of communication as needed.&lt;br/&gt;&lt;br/&gt;2) The data needed to create the multisig wallet, on the other hand, are&lt;br/&gt;quite involving:&lt;br/&gt;(a) Each Signer needs to share its XPUB, which cannot be memorized&lt;br/&gt;(b) The XPUBs also come with their own metadata&lt;br/&gt;(c) The creation of the wallet requires at least two rounds of&lt;br/&gt;communications since the Signers need to voluntarily share their XPUBs&lt;br/&gt;first, only then can a Coordinator combine the XPUBs into a single multisig&lt;br/&gt;script and pass back the configuration to the Signers. (Note that without a&lt;br/&gt;Coordinator, you&amp;#39;ll need O(N^2) rounds of communication).&lt;br/&gt;(d) Because Signers are typically off-line cold storage, the paths between&lt;br/&gt;the Signers / the Signers &amp;lt;&amp;gt; Coordinator likely involve multiple hops&lt;br/&gt;through various media, such as unsecure USB connection. This is the way&lt;br/&gt;most multisig solutions are currently being implemented. It means the XPUBs&lt;br/&gt;and the multisig configuration are vulnerable to leaking and/or&lt;br/&gt;modifications.&lt;br/&gt;&lt;br/&gt;Note that (d) is especially problematic for remote multisig setups. The&lt;br/&gt;more remote, the more potential hops along the way, the more problematic.&lt;br/&gt;&lt;br/&gt;So you can see that *the TOKEN ultimately reduces the problem of sharing a&lt;br/&gt;large amount of sensitive data back and forth, to the sharing of a single,&lt;br/&gt;small piece of data upfront.* An added advantage of this approach is that&lt;br/&gt;if the parties fail to establish a shared TOKEN, the scheme fails with no&lt;br/&gt;harm done.&lt;br/&gt;&lt;br/&gt;The Coordinator, on the other hand, adds value by solving the O(n^2)&lt;br/&gt;communication problem. Some minimal amount of trust is needed for the&lt;br/&gt;Coordinator, but this can be greatly mitigated by a number of ways that we&lt;br/&gt;have defined in the spec, such as:&lt;br/&gt;* Signers must check that their XPUBs are included in the final descriptor&lt;br/&gt;* Signers must display to the user the multisig configuration: M/N,&lt;br/&gt;relative position(s) of XPUBs, etc.&lt;br/&gt;* Signers must display the full descriptor upon user request for manual&lt;br/&gt;inspection - this one is important because it means that the new scheme&lt;br/&gt;cannot be worse than the status quo.&lt;br/&gt;* Signers are recommended to display a preview of the first receive&lt;br/&gt;address(es).&lt;br/&gt;&lt;br/&gt;All in all, the Coordinator&amp;#39;s role helps ease the setup process, while its&lt;br/&gt;ability to pull off any shenanigans is greatly limited.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210409/fadc12cb/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210409/fadc12cb/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:31:14&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszfhja5zw2aye6w0w8vkwynhlmt5z95s0ed9eqrtcdhtz7fnw5fvczyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hs2gmfev</id>
    
      <title type="html">📅 Original date posted:2021-04-09 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszfhja5zw2aye6w0w8vkwynhlmt5z95s0ed9eqrtcdhtz7fnw5fvczyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hs2gmfev" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgkvud7m7sxtyaq8ude4dn9trpfv2h863jgaynhf26e5yc5q56grs5kgntw&#39;&gt;nevent1q…gntw&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-09&lt;br/&gt;📝 Original message:(Continue off last email: also keep in mind, that just like BIP174,&lt;br/&gt;Coordinator and Signer are abstract roles. This means in theory a Signer&lt;br/&gt;can be the Coordinator too. The same criteria for trust applies equally to&lt;br/&gt;a Signer and a Coordinator.)&lt;br/&gt;&lt;br/&gt;The use case I personally find most interesting is not a multi-party setup,&lt;br/&gt;&amp;gt; but rather just combining a bunch of my own devices. Those might even be in&lt;br/&gt;&amp;gt; the same room during the setup, only to be moved to my moon base later.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;And that&amp;#39;s fair. Both use cases (local and remote multisig) are valid and&lt;br/&gt;currently being used. But IMO a standard should accommodate both.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; To the list of concerns at the top of the BIP, I would add one: losing&lt;br/&gt;&amp;gt; multisig setup context. E.g. in the event of a fire where you only recover&lt;br/&gt;&amp;gt; your steel engraved mnemonic(s), but no longer have the wallet descriptors.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Good point.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you still have all devices and know (or guess) the threshold then BIP48&lt;br/&gt;&amp;gt; and sorted_multi descriptors will save you. But if you have a 2-of-3 setup&lt;br/&gt;&amp;gt; and lost 1 device then without the metadata your coins are lost. In a&lt;br/&gt;&amp;gt; future with musig(?) and miniscript increasingly the setup data is just as&lt;br/&gt;&amp;gt; critical as the seeds.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;How so? Each signer device should ideally have a copy of the multisig&lt;br/&gt;configuration. If you lose 1 device in a 2-of-3, you can still spend from&lt;br/&gt;the wallet? Unless I&amp;#39;m missing something here.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; A future standard (or extension of this one) should recommend an&lt;br/&gt;&amp;gt; encryption convention for the descriptor data, ideally such that with *any*&lt;br/&gt;&amp;gt; of the seeds you can decrypt a file that contains the full setup. That file&lt;br/&gt;&amp;gt; could then just float redundantly around the internet and pieces of paper&lt;br/&gt;&amp;gt; in various locations, without compromising privacy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Post-wallet-creation, each Signer can apply extra encryption on top of BSMS&lt;br/&gt;for the persistence of the configuration file any way it wants :) It&lt;br/&gt;doesn&amp;#39;t contradict with the current spec.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; The proposed encryption system doesn&amp;#39;t help with that though, because it&amp;#39;s&lt;br/&gt;&amp;gt; based on entropy from the Coordinator, rather than from the signers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;They are for different purposes. The TOKEN-based encryption is only needed&lt;br/&gt;temporarily for the setup.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Smaller suggestions:&lt;br/&gt;&amp;gt; * link to this new mail thread in the BIP&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Will do.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; * use magic bytes so .bsms so operating systems like Android / iOs can&lt;br/&gt;&amp;gt; open the right app for them&lt;br/&gt;&amp;gt; * don&amp;#39;t use separate file extensions for encrypted vs unencrypted content,&lt;br/&gt;&amp;gt; just indicate somehow that a given field is encrypted&lt;br/&gt;&amp;gt; * although plain text files are handy for debugging, I think a binary&lt;br/&gt;&amp;gt; format like PSBT is much powerful. Any device that can parse and write&lt;br/&gt;&amp;gt; binary PSBT should be able to implement a similar parser / writer for a&lt;br/&gt;&amp;gt; binary .bsms format.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Will consider these points, but I prefer plaintext for wallet&lt;br/&gt;configuration. Human readability for the wallet configuration is a pro not&lt;br/&gt;a con IMO. Also helps when backing up.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; * BIP48 and sorted_multi descriptors are useful in a loss-of-metadata&lt;br/&gt;&amp;gt; scenario. The BIP uses both in the examples, but doesn&amp;#39;t explictly endorse&lt;br/&gt;&amp;gt; these derivations. It also contradicts them: &amp;#34;If the Signer chooses the&lt;br/&gt;&amp;gt; path, it should try to avoid reusing XPUBs for different wallets.&amp;#34;. Maybe&lt;br/&gt;&amp;gt; this is out of scope.&lt;br/&gt;&amp;gt;    * one way to resolve xpub reuse would be to make the &amp;#34;BIP48&amp;#34; path a&lt;br/&gt;&amp;gt; function of the co-signer fingerprints and wallet threshold, but this&lt;br/&gt;&amp;gt; requires an extra communication round&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;We discussed this in the linked PR (&lt;br/&gt;&lt;a href=&#34;https://github.com/nunchuk-io/bips/pull/1&#34;&gt;https://github.com/nunchuk-io/bips/pull/1&lt;/a&gt;), and decided that enforcing&lt;br/&gt;against path reuse is out-of-scope. We give examples of sorted_multi and&lt;br/&gt;multi because different vendors support different things.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; * there should be a way for signers to communicate their capabilities,&lt;br/&gt;&amp;gt; perhaps with a different xpub for each potential scheme. E.g. there&amp;#39;s m/48&amp;#39;&lt;br/&gt;&amp;gt; native SegWit now, MuSig and/or or Tapleaf based multisig in the future, or&lt;br/&gt;&amp;gt; even generic Miniscript support.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I considered Signers signaling capabilities (for a different reason), but&lt;br/&gt;opted against it because it further complicates the scheme. Also BIP48-like&lt;br/&gt;proposals are made redundant with the use of output descriptors.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; * the idea of only storing the receive descriptor, not the change&lt;br/&gt;&amp;gt; descriptor, is fine by me, though I&amp;#39;d prefer an extension to the descriptor&lt;br/&gt;&amp;gt; format to deal with this&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;That&amp;#39;s not quite accurate. The spec stores the top-level descriptor&lt;br/&gt;(XPUB/*) along with the path restrictions (/0/*,/1/*), not the receive&lt;br/&gt;descriptor.&lt;br/&gt;&lt;br/&gt; The path restrictions would allow you to extend on the spec. There&amp;#39;s also&lt;br/&gt;a VERSION field.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sjors&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Op 5 apr. 2021, om 09:02 heeft Hugo Nguyen via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; het volgende geschreven:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Hi all,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Please find below the complete draft of the Bitcoin Secure Multisig&lt;br/&gt;&amp;gt; Setup (BSMS) BIP. The spec has gone through a number of important updates&lt;br/&gt;&amp;gt; in the last month or so. Thanks everyone who has participated in the review&lt;br/&gt;&amp;gt; process.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; As a PR: &lt;a href=&#34;https://github.com/bitcoin/bips/pull/1097&#34;&gt;https://github.com/bitcoin/bips/pull/1097&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210409/754162ae/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210409/754162ae/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:31:14&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqstu5cuns549zfelyrw3r29mh04fs8c49fa990pec8mvjpa660dquszyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hs98q6ax</id>
    
      <title type="html">📅 Original date posted:2021-04-05 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqstu5cuns549zfelyrw3r29mh04fs8c49fa990pec8mvjpa660dquszyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hs98q6ax" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqst7r75cpgvlw7cepzwn8avzmcpjq9s9874clz0vqep2grkghvsyjc0t9cuq&#39;&gt;nevent1q…9cuq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-05&lt;br/&gt;📝 Original message:Hi all,&lt;br/&gt;&lt;br/&gt;Please find below the complete draft of the Bitcoin Secure Multisig Setup&lt;br/&gt;(BSMS) BIP. The spec has gone through a number of important updates in the&lt;br/&gt;last month or so. Thanks everyone who has participated in the review&lt;br/&gt;process.&lt;br/&gt;&lt;br/&gt;As a PR: &lt;a href=&#34;https://github.com/bitcoin/bips/pull/1097&#34;&gt;https://github.com/bitcoin/bips/pull/1097&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;A few notes:&lt;br/&gt;* PBKDF2-SHA512 was chosen instead of PBKDF2-SHA256 for the key derivation&lt;br/&gt;function, due to widespread existing hardware support for PBKDF2-SHA512&lt;br/&gt;* Only one descriptor is stored in the multisig configuration - this&lt;br/&gt;simplifies wallet setup and recovery&lt;br/&gt;(For the full review and relevant discussions, please check out&lt;br/&gt;&lt;a href=&#34;https://github.com/nunchuk-io/bips/pull/1&#34;&gt;https://github.com/nunchuk-io/bips/pull/1&lt;/a&gt;).&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;  BIP: To be determined&lt;br/&gt;  Layer: Applications&lt;br/&gt;  Title: Bitcoin Secure Multisig Setup (BSMS)&lt;br/&gt;  Author: Hugo Nguyen &amp;lt;hugo at nunchuk.io&amp;gt;, Peter Gray &amp;lt;peter at&lt;br/&gt;coinkite.com&amp;gt;, Marko Bencun &amp;lt;marko at shiftcrypto.ch&amp;gt;, Aaron Chen&lt;br/&gt;&amp;lt;aarondongchen at gmail.com&amp;gt;, Rodolfo Novak &amp;lt;rodolfo at coinkite.com&amp;gt;&lt;br/&gt;  Comments-Summary: No comments yet.&lt;br/&gt;  Comments-URI:&lt;br/&gt;  Status: Proposed&lt;br/&gt;  Type: Standards Track&lt;br/&gt;  Created: 2020-11-10&lt;br/&gt;  License: BSD-2-Clause&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Introduction==&lt;br/&gt;&lt;br/&gt;===Abstract===&lt;br/&gt;&lt;br/&gt;This document proposes a mechanism to set up multisig wallets securely.&lt;br/&gt;&lt;br/&gt;===Copyright===&lt;br/&gt;&lt;br/&gt;This BIP is licensed under the 2-clause BSD license.&lt;br/&gt;&lt;br/&gt;===Motivation===&lt;br/&gt;&lt;br/&gt;The Bitcoin multisig experience has been greatly streamlined under&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&lt;/a&gt;&lt;br/&gt;BIP-0174&lt;br/&gt;(Partially Signed Bitcoin Transaction)]. However, what is still&lt;br/&gt;missing is a standardized process for setting up multisig wallets&lt;br/&gt;securely across different vendors.&lt;br/&gt;&lt;br/&gt;There are a number of concerns when it comes to setting up a multisig wallet:&lt;br/&gt;&lt;br/&gt;# Whether the multisig configuration, such as Signer membership,&lt;br/&gt;script type, derivation paths and number of signatures required, is&lt;br/&gt;correct and not tampered with.&lt;br/&gt;# Whether the keys or the multisig configuration are leaked during the setup.&lt;br/&gt;# Whether the Signer persists the multisig configuration in their&lt;br/&gt;respective storage, and under what format.&lt;br/&gt;# Whether the Signer&amp;#39;s storage is tamper-proof.&lt;br/&gt;# Whether the Signer subsequently uses the multisig configuration to&lt;br/&gt;generate and verify receive and change addresses.&lt;br/&gt;&lt;br/&gt;An attacker who can modify the multisig configuration can steal or&lt;br/&gt;hold funds for ransom by duping the user into sending funds to the&lt;br/&gt;wrong address. An attacker who cannot modify the configuration but can&lt;br/&gt;learn about the keys and/or the configuration can monitor transactions&lt;br/&gt;in the wallet, resulting in loss of privacy.&lt;br/&gt;&lt;br/&gt;This proposal seeks to address concerns #1, #2 and #3: to mitigate the&lt;br/&gt;risk of tampering during the initial setup phase, and to define an&lt;br/&gt;interoperable multisig configuration format.&lt;br/&gt;&lt;br/&gt;Concerns #4 and #5 should be handled by Signers and are out of scope&lt;br/&gt;of this proposal.&lt;br/&gt;&lt;br/&gt;==Specification==&lt;br/&gt;&lt;br/&gt;===Prerequisites===&lt;br/&gt;This proposal assumes the parties in the multisig support&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&lt;/a&gt;&lt;br/&gt;BIP-0032], [&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&lt;/a&gt;&lt;br/&gt;BIP-0322], [&lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&lt;/a&gt;&lt;br/&gt;the descriptor language] and [&lt;a href=&#34;https://tools.ietf.org/html/rfc3686&#34;&gt;https://tools.ietf.org/html/rfc3686&lt;/a&gt; AES&lt;br/&gt;encryption].&lt;br/&gt;&lt;br/&gt;===File Extension===&lt;br/&gt;All descriptor and key records should have a &amp;lt;tt&amp;gt;.bsms&amp;lt;/tt&amp;gt; file&lt;br/&gt;extension. Encrypted data should have a &amp;lt;tt&amp;gt;.dat&amp;lt;/tt&amp;gt; extension.&lt;br/&gt;&lt;br/&gt;===Roles===&lt;br/&gt;====Coordinator====&lt;br/&gt;&lt;br/&gt;The Coordinator initiates the multisig setup. The Coordinator&lt;br/&gt;determines what type of multisig is used and the exact policy script.&lt;br/&gt;If encryption is enabled, the Coordinator also distributes a shared&lt;br/&gt;secret or shared secrets to the parties involved for secure&lt;br/&gt;communication. The Coordinator gathers information from the Signers to&lt;br/&gt;generate a descriptor record. The Coordinator distributes the&lt;br/&gt;descriptor record back to the Signers.&lt;br/&gt;&lt;br/&gt;====Signer====&lt;br/&gt;&lt;br/&gt;The Signer is a participating member in the multisig. Its&lt;br/&gt;responsibilities include providing its key record -- which contains an&lt;br/&gt;Extended Public Key (XPUB) -- to the Coordinator, verifying that its&lt;br/&gt;XPUB is included in the descriptor record and persisting the&lt;br/&gt;descriptor record in its storage.&lt;br/&gt;&lt;br/&gt;===Setup Process===&lt;br/&gt;&lt;br/&gt;====Round 1====&lt;br/&gt;&lt;br/&gt;=====Coordinator=====&lt;br/&gt;&lt;br/&gt;* The Coordinator creates a new multisig wallet creation session. The&lt;br/&gt;Coordinator constructs the multisig script and its policy parameters,&lt;br/&gt;such as the required number of signatures and the total number of&lt;br/&gt;Signers (&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;).&lt;br/&gt;* The session should expire after some time period determined by the&lt;br/&gt;Coordinator, e.g., 24 hours. The timeout allows the encryption key to&lt;br/&gt;have lower entropy.&lt;br/&gt;* If encryption is enabled, the Coordinator distributes a secret&lt;br/&gt;&amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; to each Signer over a secure channel. The Signer can&lt;br/&gt;use the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; to derive an &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;. Refer to&lt;br/&gt;the Encryption section below for details on the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;, the&lt;br/&gt;key derivation function and the encryption scheme. Depending on the&lt;br/&gt;use case, the Coordinator can decide whether to share one common&lt;br/&gt;&amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; for all Signers, or to have one per Signer.&lt;br/&gt;* If encryption is disabled, the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set to &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;,&lt;br/&gt;and all the encryption/decryption steps below can be skipped.&lt;br/&gt;&lt;br/&gt;=====Signer=====&lt;br/&gt;&lt;br/&gt;* The Signer initiates the multisig wallet creation session by setting&lt;br/&gt;the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The Signer derives an &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; from&lt;br/&gt;the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The Signer can keep the session open until a&lt;br/&gt;different value for the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set.&lt;br/&gt;* The Signer generates a key record by prompting the user for a&lt;br/&gt;multisig derivation path and retrieves the XPUB at that derivation&lt;br/&gt;path. Alternatively, the Signer can choose a path on behalf of the&lt;br/&gt;user. If the Signer chooses the path, it should try to avoid reusing&lt;br/&gt;XPUBs for different wallets.&lt;br/&gt;* The first line in the record must be the specification version&lt;br/&gt;(&amp;lt;tt&amp;gt;BSMS 1.0&amp;lt;/tt&amp;gt; as of this writing). The second line must be the&lt;br/&gt;hex-encoded &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The third line must be the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;The &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; is an XPUB plus its key origin information, written&lt;br/&gt;in the descriptor-defined format, i.e.: &amp;lt;tt&amp;gt;[{master key&lt;br/&gt;fingerprint}/{derivation path}]{XPUB}&amp;lt;/tt&amp;gt;. The fourth line is a text&lt;br/&gt;description of the key, 80 characters maximum. The fifth line must be&lt;br/&gt;a &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt;, whereas &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt; is the signature generated by&lt;br/&gt;using the private key associated with the XPUB to sign the first four&lt;br/&gt;lines. The signature should follow&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&lt;/a&gt;&lt;br/&gt;BIP-0322], legacy format accepted.&lt;br/&gt;* The Signer calculates the Message Authentication Code (&amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt;)&lt;br/&gt;for the record. The first 16 bytes of the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; serves as the&lt;br/&gt;Initialization Vector (&amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt;) for the encryption.&lt;br/&gt;* The Signer encrypts the key record with the &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;&lt;br/&gt;and &amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Signer encodes the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; and the ciphertext into&lt;br/&gt;hexadecimal format, then concatenates the results: &amp;lt;tt&amp;gt;(MAC ||&lt;br/&gt;ciphertext)&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;====Round 2====&lt;br/&gt;&lt;br/&gt;=====Coordinator=====&lt;br/&gt;&lt;br/&gt;* The Coordinator gathers key records from all participating Signers.&lt;br/&gt;The Coordinator verifies that there are exactly &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt; unique key&lt;br/&gt;records before the wallet setup session expires.&lt;br/&gt;* For each key record, the Coordinator extracts the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; from&lt;br/&gt;the data, sets &amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt; to the first 16 bytes of the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt;,&lt;br/&gt;then decrypts the ciphertext using the &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; and&lt;br/&gt;&amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Coordinator verifies that the included &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; is valid&lt;br/&gt;given the plaintext.&lt;br/&gt;* The Coordinator verifies that the key records have compatible&lt;br/&gt;specification versions.&lt;br/&gt;* The Coordinator verifies that the included &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt; is valid&lt;br/&gt;given the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;* If all key records look good, the Coordinator fills in all necessary&lt;br/&gt;information to generate a descriptor record.&lt;br/&gt;* The first line in the descriptor record must be the specification&lt;br/&gt;version (&amp;lt;tt&amp;gt;BSMS 1.0&amp;lt;/tt&amp;gt; as of this writing). The second line must&lt;br/&gt;be a comma-separated list of accepted derivation paths that the&lt;br/&gt;Signers can use to generate addresses from the included XPUBs. The&lt;br/&gt;paths must start with &amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt; and use non-hardened derivation. For&lt;br/&gt;example, &amp;lt;tt&amp;gt;/0/*&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/1/*&amp;lt;/tt&amp;gt; are some common paths. If&lt;br/&gt;there are no restrictions, it must say &amp;lt;tt&amp;gt;No path restrictions&amp;lt;/tt&amp;gt;.&lt;br/&gt;The third line must be the descriptor string plus a &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;,&lt;br/&gt;all in one line. The &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt; has&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&lt;/a&gt;&lt;br/&gt;BECH32 encoding].&lt;br/&gt;* The Coordinator calculates the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; for the record. The&lt;br/&gt;first 16 bytes of the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; serves as the &amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt; for the&lt;br/&gt;encryption..&lt;br/&gt;* The Coordinator encrypts the descriptor record with the&lt;br/&gt;&amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Coordinator encodes the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; and the ciphertext into&lt;br/&gt;hexadecimal format, then concatenates the results: &amp;lt;tt&amp;gt;(MAC ||&lt;br/&gt;ciphertext)&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Coordinator sends the encrypted descriptor record to all&lt;br/&gt;participating Signers.&lt;br/&gt;&lt;br/&gt;=====Signer=====&lt;br/&gt;&lt;br/&gt;* The Signer imports the descriptor record.&lt;br/&gt;* The Signer extracts the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; from the data, sets &amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt;&lt;br/&gt;to the first 16 bytes of the &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt;, then decrypts the&lt;br/&gt;ciphertext using the &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; (derived from the open&lt;br/&gt;session) and &amp;lt;tt&amp;gt;IV&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Signer verifies that the included &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; is valid given&lt;br/&gt;the plaintext.&lt;br/&gt;* The Signer verifies that it can support the included specification version.&lt;br/&gt;* The Signer verifies that it is compatible with the derivation path&lt;br/&gt;restrictions.&lt;br/&gt;* The Signer verifies the descriptor’s &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Signer verifies that it can support the descriptor.&lt;br/&gt;* The Signer checks that its &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; is included in the&lt;br/&gt;descriptor, using path and fingerprint information provided. The check&lt;br/&gt;must perform an exact match on the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;s and not using&lt;br/&gt;shortcuts such as matching fingerprints, which is trivial to spoof.&lt;br/&gt;* For confirmation, the Signer must display to the user the&lt;br/&gt;&amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, the derivation path restrictions and the policy&lt;br/&gt;parameters, such as &amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt; and the position(s) of its&lt;br/&gt;own XPUB in the policy script. The total number of Signers,&lt;br/&gt;&amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;, is important to prevent a &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; insertion attack.&lt;br/&gt;The position is important for scripts where key order matters. When&lt;br/&gt;applicable, all positions of the XPUB must be displayed. The full&lt;br/&gt;descriptor must also be available for review upon user request.&lt;br/&gt;* When possible, the Signer should also show a preview of the first&lt;br/&gt;address(es) of the wallet.&lt;br/&gt;* Parties must check with each other that all Signers have verified&lt;br/&gt;the descriptor and has the same confirmation (except for the key&lt;br/&gt;positions).&lt;br/&gt;* If all checks pass, the Signer must persist the descriptor record in&lt;br/&gt;its storage.&lt;br/&gt;&lt;br/&gt;This completes the setup.&lt;br/&gt;&lt;br/&gt;===Encryption===&lt;br/&gt;&lt;br/&gt;====The Token====&lt;br/&gt;We define three modes of encryption.&lt;br/&gt;&lt;br/&gt;# &amp;lt;tt&amp;gt;NO_ENCRYPTION&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set to &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;.&lt;br/&gt;Encryption is disabled.&lt;br/&gt;# &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is a 64-bit nonce.&lt;br/&gt;# &amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is a 96-bit nonce.&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; can be converted to one of these formats:&lt;br/&gt;* A decimal number (recommended). The number must not exceed the&lt;br/&gt;maximum value of the nonce.&lt;br/&gt;* A mnemonic phrase using&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&lt;/a&gt;&lt;br/&gt;BIP-0039] word list (6 words in &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; mode; 9 words in&lt;br/&gt;&amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; mode).&lt;br/&gt;* A QR code.&lt;br/&gt;* Other formats.&lt;br/&gt;&lt;br/&gt;The flexibility in the data format allows each Signer to customize the&lt;br/&gt;User Experience based on its respective capabilities.&lt;br/&gt;&lt;br/&gt;====Key Derivation====&lt;br/&gt;The key derivation function is [&lt;a href=&#34;https://tools.ietf.org/html/rfc2898&#34;&gt;https://tools.ietf.org/html/rfc2898&lt;/a&gt;&lt;br/&gt;PBKDF2], with PRF = SHA512. Specifically:&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;DKey = PBKDF2(PRF, Password, Salt, c, dkLen)&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;Whereas:&lt;br/&gt;&lt;br/&gt;* PRF = SHA512&lt;br/&gt;* Password = &amp;#34;No SPOF&amp;#34;&lt;br/&gt;* Salt = &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;&lt;br/&gt;* c = 2048&lt;br/&gt;* dkLen = 256&lt;br/&gt;* DKey = Derived &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;====Encryption Scheme====&lt;br/&gt;The encryption scheme is [&lt;a href=&#34;https://tools.ietf.org/html/rfc3686&#34;&gt;https://tools.ietf.org/html/rfc3686&lt;/a&gt; AES-256-CTR].&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;MAC = HMAC-SHA256(HMAC_Key, hex-encoded TOKEN || Data)&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;IV = First 16 bytes of MAC&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;Ciphertext = AES-256-CTR-Encrypt(Plaintext, DKey, IV)&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;Plaintext = AES-256-CTR-Decrypt(Ciphertext, DKey, IV)&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;Whereas:&lt;br/&gt;* DKey = &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;&lt;br/&gt;* HMAC_Key = SHA256(&amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;)&lt;br/&gt;* Data = the plaintext, e.g. the entire key record in round 1 and the&lt;br/&gt;entire descriptor record in round 2&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; is to be sent along with the key and descriptor&lt;br/&gt;record, as specified above. Because it is a &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; over the&lt;br/&gt;entire plaintext, this is essentially an&lt;br/&gt;[&lt;a href=&#34;https://en.wikipedia.org/wiki/Authenticated_encryption#Encrypt-and-MAC_(E&amp;amp;M)&#34;&gt;https://en.wikipedia.org/wiki/Authenticated_encryption#Encrypt-and-MAC_(E&amp;amp;M)&lt;/a&gt;&lt;br/&gt;Encrypt-and-MAC] form of authenticated encryption.&lt;br/&gt;&lt;br/&gt;==QR Codes==&lt;br/&gt;For signers that use QR codes to transmit data, key and descriptor&lt;br/&gt;records can be converted to QR codes, following&lt;br/&gt;[&lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&lt;/a&gt;&lt;br/&gt;the BCR standard].&lt;br/&gt;&lt;br/&gt;Also refer to [&lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md&lt;/a&gt;&lt;br/&gt;UR Type Definition for BIP44 Accounts] and&lt;br/&gt;[&lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md&lt;/a&gt;&lt;br/&gt;UR Type Definition for Bitcoin Output Descriptors] for more details.&lt;br/&gt;&lt;br/&gt;==Security==&lt;br/&gt;&lt;br/&gt;This proposal introduces two layers of protection. The first one is a&lt;br/&gt;temporary, secret &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The second one is the descriptor&lt;br/&gt;&amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is used to encrypt the two rounds of communication&lt;br/&gt;between the Signer and the Coordinator. A &amp;lt;tt&amp;gt;MAC&amp;lt;/tt&amp;gt; is also&lt;br/&gt;generated from the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; and plaintext to authenticate the&lt;br/&gt;data being exchanged. The &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is only needed during the&lt;br/&gt;setup phase, and can be safely discarded afterwards.&lt;br/&gt;&lt;br/&gt;The descriptor &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, on the other hand, can be used to&lt;br/&gt;verify the integrity of the multisig configuration. An attacker who&lt;br/&gt;tampers with the multisig configuration must also change the&lt;br/&gt;descriptor &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;. Parties must check with each other that&lt;br/&gt;all Signers have the same &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, along with the policy&lt;br/&gt;parameters, to reduce the chance of tampering. The &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;&lt;br/&gt;must be persisted along with the descriptor in each Signer’s storage.&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; and the &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt; can’t guarantee complete&lt;br/&gt;protection, since that depends on the overall security of all parties&lt;br/&gt;in the setup, but they can make it significantly harder for an&lt;br/&gt;attacker to tamper with the multisig configuration.&lt;br/&gt;&lt;br/&gt;==Privacy==&lt;br/&gt;Encryption helps improve the privacy of the wallet by avoiding sharing&lt;br/&gt;XPUBs and descriptors in plaintext.&lt;br/&gt;&lt;br/&gt;If the parties wish to have stronger privacy, it is recommended to use&lt;br/&gt;a higher number of bits for the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;, and to completely&lt;br/&gt;erase knowledge of the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; after the multisig wallet has&lt;br/&gt;been set up.&lt;br/&gt;&lt;br/&gt;==Test Vectors==&lt;br/&gt;&lt;br/&gt;===Mode: &amp;lt;tt&amp;gt;NO_ENCRYPTION&amp;lt;/tt&amp;gt;===&lt;br/&gt;====ROUND 1====&lt;br/&gt;* Coordinator&lt;br/&gt;** M-of-N: 2/2&lt;br/&gt;** ADDRESS_TYPE: NATIVE_SEGWIT&lt;br/&gt;** TOKEN: 0&lt;br/&gt;&lt;br/&gt;* Signer 1&lt;br/&gt;** MASTER_KEY_FINGERPRINT: 539f3d89&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;KyoXqiwiz6qm21BSYebiZFfNF7obkhiJW6TdPMZTQQMF4kZtfD78&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;xpub6ETerig7tq89mtaD8Gau2xRWxouRMBy6XHqciA8GZzC2dJv3w6FxfgoegH4b2qYF4oG6VBrhpLrauPs5E1q58GLCnhKp6g9QsV9ZA7J5JNa&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_1_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;00&lt;br/&gt;[539f3d89/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6ETerig7tq89mtaD8Gau2xRWxouRMBy6XHqciA8GZzC2dJv3w6FxfgoegH4b2qYF4oG6VBrhpLrauPs5E1q58GLCnhKp6g9QsV9ZA7J5JNa&lt;br/&gt;Signer 1 key&lt;br/&gt;IPXsnNSZb8M6H4fAWtpjAc75hyHHd89fskpM5o7qFg&#43;mPDzEPc1k2mjuIpVIIzaCe45FwPfAAa91RaStfC5Sak0=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 2&lt;br/&gt;** MASTER_KEY_FINGERPRINT: f8b12aa6&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;L1zht7muKnUYFMdzC3jwXd78u8tGoKr46AXGh4waF9nphUYWq7ow&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;xpub6EWPNhGSX86SN4J2DrBUaQ826o6V4egHqAJZUDJqnsthv9CcjBZV79u68M3YZkuTJnJBXfCrHuJy97fkVurntwgt3V7Ms5hXpJV2vS8fQZM&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_2_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;00&lt;br/&gt;[f8b12aa6/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6EWPNhGSX86SN4J2DrBUaQ826o6V4egHqAJZUDJqnsthv9CcjBZV79u68M3YZkuTJnJBXfCrHuJy97fkVurntwgt3V7Ms5hXpJV2vS8fQZM&lt;br/&gt;Signer 2 key&lt;br/&gt;H38&#43;lp9iaesBeCN05BDTH/SnmarlH6&#43;X&#43;Kmw1pgCk&#43;c1Pc1evYIdBag9Nc0nsKhvPtfEbRt9r/qsUVZ5onCtBTc=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;====ROUND 2====&lt;br/&gt;* Coordinator&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;/0/*,/1/*&lt;br/&gt;wsh(sortedmulti(2,[539f3d89/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6ETerig7tq89mtaD8Gau2xRWxouRMBy6XHqciA8GZzC2dJv3w6FxfgoegH4b2qYF4oG6VBrhpLrauPs5E1q58GLCnhKp6g9QsV9ZA7J5JNa/*,[f8b12aa6/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6EWPNhGSX86SN4J2DrBUaQ826o6V4egHqAJZUDJqnsthv9CcjBZV79u68M3YZkuTJnJBXfCrHuJy97fkVurntwgt3V7Ms5hXpJV2vS8fQZM/*))#fntxdj7p&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;===Mode: &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; Encryption===&lt;br/&gt;====ROUND 1====&lt;br/&gt;* Coordinator&lt;br/&gt;** M-of-N: 2/2&lt;br/&gt;** ADDRESS_TYPE: NATIVE_SEGWIT&lt;br/&gt;** TOKEN (hex): 1ed4ba49e96336b8&lt;br/&gt;*** TOKEN (decimal): 2221605342811469496&lt;br/&gt;*** TOKEN (mnemonic): burst place mystery spot cricket foster&lt;br/&gt;** ENCRYPTION_KEY (hex):&lt;br/&gt;72185a0e25b4efc5d6ac0f8ed32b0165199100e32385040e3a48eb30164bf492&lt;br/&gt;&lt;br/&gt;* Signer 1&lt;br/&gt;** MASTER_KEY_FINGERPRINT: 98d79e95&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;KydC7hZFtWe56oQUAw14HvQ3gKeKVd3m8frFgVMxUqpuhKHvcmm3&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;xpub6DvvwHS5pd1D36xt4YBGJvtdThWXfn8L9qRj9DbFMExMeP6eBE6Aw9WyBC7XUQwiPPDFurirewsKZpYv68yTV5RBy7SZmw45QEkaLka5BCt&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_1_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;1ed4ba49e96336b8&lt;br/&gt;[98d79e95/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6DvvwHS5pd1D36xt4YBGJvtdThWXfn8L9qRj9DbFMExMeP6eBE6Aw9WyBC7XUQwiPPDFurirewsKZpYv68yTV5RBy7SZmw45QEkaLka5BCt&lt;br/&gt;Signer 1 key&lt;br/&gt;HxtPoP0DrQSac/7ypcwC07R2s6jjpXR6Li2Q92zXj/FSIMQcV5yOU0/ONsDgHXamq0gD5DfPbvuVCp9ZJubclV4=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 1 encryption&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;4dab3988cbc683ad7a8c93d43f9b11a78b63a93d5e33ea19c603f4b7b87ac284&lt;br/&gt;** MAC (hex): afe99e92f0eadc3308eb990045e90a4f54e9f59d22aae5034ac3d866d29c508d&lt;br/&gt;** IV (hex) : afe99e92f0eadc3308eb990045e90a4f&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;214ec9a861a238ba7f0412305a97a6e0faa332be15af09127e131d669e5d55d73891580a5808cea5d2bf39f43496d3c0f8236eff3854fcc7446daf9d2b58fd40d97ce3b1745de2959e29767039b99969821400eca0c3517fae56d2d24d5235a3430af1ed894b68681d706cce7c75adf35d8580603aa302bc01fef06d0336a37f19dd46100baa9e4eabd8796a810e13941ad0980c126ad55d6a4bbef11a7bf893b7d2ed8fb0d8324c4c9b512d4d1e75096c63511e15018fc832816b5639d58fc28c60c049487d04bd5a6cb32aa1381d0809660d54376b9f63325c18cfd1ac5024088e74cb703fe165972cc4485abb1feefe92a0b4ea297fe2f4f7416eeee1efc9b942540931ef&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_1_key.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;afe99e92f0eadc3308eb990045e90a4f54e9f59d22aae5034ac3d866d29c508d214ec9a861a238ba7f0412305a97a6e0faa332be15af09127e131d669e5d55d73891580a5808cea5d2bf39f43496d3c0f8236eff3854fcc7446daf9d2b58fd40d97ce3b1745de2959e29767039b99969821400eca0c3517fae56d2d24d5235a3430af1ed894b68681d706cce7c75adf35d8580603aa302bc01fef06d0336a37f19dd46100baa9e4eabd8796a810e13941ad0980c126ad55d6a4bbef11a7bf893b7d2ed8fb0d8324c4c9b512d4d1e75096c63511e15018fc832816b5639d58fc28c60c049487d04bd5a6cb32aa1381d0809660d54376b9f63325c18cfd1ac5024088e74cb703fe165972cc4485abb1feefe92a0b4ea297fe2f4f7416eeee1efc9b942540931ef&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 2&lt;br/&gt;** MASTER_KEY_FINGERPRINT: 3e94b5a1&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;KyPh5XYjExjNHPiBjYhp8iAntAehrDziiwRv7y9Ln6eK9QU2xP55&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;):&lt;br/&gt;xpub6E1W1DUYY29V2b8czCcpi36GG2uD33B11vwNopgTZwsVyfgAkA4kPCqLP5R4YzaRvzW17CQrDkgmDQbA848AdkR7W18nNvMKXzzCBSnZP9c&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_2_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;1ed4ba49e96336b8&lt;br/&gt;[3e94b5a1/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6E1W1DUYY29V2b8czCcpi36GG2uD33B11vwNopgTZwsVyfgAkA4kPCqLP5R4YzaRvzW17CQrDkgmDQbA848AdkR7W18nNvMKXzzCBSnZP9c&lt;br/&gt;Signer 2 key&lt;br/&gt;ILR49QLy9&#43;xkMS11TIXJRSMgOQOzGbAaooq4/ZRcd8VgM6j5upJMI0mjJHseQOMYSGk8FqjXZbMvBGyiX9wdutM=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 2 encryption&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;4dab3988cbc683ad7a8c93d43f9b11a78b63a93d5e33ea19c603f4b7b87ac284&lt;br/&gt;** MAC (hex): 5c7cb2ac407cd60b1f2b86ef46077d3a312b6ce921df2a141347e8bf1e5c6573&lt;br/&gt;** IV (hex) : 5c7cb2ac407cd60b1f2b86ef46077d3a&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;f23e6c76ff45d308dea6014030a274127ad437228f1d5ec2431d2ea9e3cedd5b0a207a9efa6f926d5420205003f3cb9c4b82b2d595180e62a173a2e5aa0322de48a70a873f641bdae1764e6b1667c241e0fe03a4ccdc3fe0cfa5f75b239d6497c3b69dca17bb685ba70b307d1243836d8fb198ce727cfae4057ee0b4fdcb09f4ba5ae127f49c5de780edb4e40aec96303c8a7b98b1b8e53dd5e07e01d4f3ffd836763209a1f0cbc61adcfdc2951e77528ee7b6e68114c3a4bec38875d285021e68ae8aa913bb1e2e65dd52c649a0e98bfb4e8bab6dd10295c1167a0854ba44f094feb75d2fb00c944f07d4b47114f483df9838459316f3ddbc4a82e6507881931f8e20f5b805&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_2_key.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;5c7cb2ac407cd60b1f2b86ef46077d3a312b6ce921df2a141347e8bf1e5c6573f23e6c76ff45d308dea6014030a274127ad437228f1d5ec2431d2ea9e3cedd5b0a207a9efa6f926d5420205003f3cb9c4b82b2d595180e62a173a2e5aa0322de48a70a873f641bdae1764e6b1667c241e0fe03a4ccdc3fe0cfa5f75b239d6497c3b69dca17bb685ba70b307d1243836d8fb198ce727cfae4057ee0b4fdcb09f4ba5ae127f49c5de780edb4e40aec96303c8a7b98b1b8e53dd5e07e01d4f3ffd836763209a1f0cbc61adcfdc2951e77528ee7b6e68114c3a4bec38875d285021e68ae8aa913bb1e2e65dd52c649a0e98bfb4e8bab6dd10295c1167a0854ba44f094feb75d2fb00c944f07d4b47114f483df9838459316f3ddbc4a82e6507881931f8e20f5b805&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;====ROUND 2====&lt;br/&gt;*Coordinator&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;/0/*,/1/*&lt;br/&gt;wsh(sortedmulti(2,[98d79e95/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6DvvwHS5pd1D36xt4YBGJvtdThWXfn8L9qRj9DbFMExMeP6eBE6Aw9WyBC7XUQwiPPDFurirewsKZpYv68yTV5RBy7SZmw45QEkaLka5BCt/*,[3e94b5a1/48&amp;#39;/0&amp;#39;/0&amp;#39;/2&amp;#39;]xpub6E1W1DUYY29V2b8czCcpi36GG2uD33B11vwNopgTZwsVyfgAkA4kPCqLP5R4YzaRvzW17CQrDkgmDQbA848AdkR7W18nNvMKXzzCBSnZP9c/*))#x0lx92qk&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;*Coordinator encryption&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;4dab3988cbc683ad7a8c93d43f9b11a78b63a93d5e33ea19c603f4b7b87ac284&lt;br/&gt;** MAC (hex): df3d06db6c8b8a5f25de202e10ea225df6415d1ed0e36c64cc2be1b7e86c2a38&lt;br/&gt;** IV (hex) : df3d06db6c8b8a5f25de202e10ea225d&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;2761e6bfe839586b4c90954200bc4ce6d39ef164c5d14997755575d1691ee249ffd20beda526f57a7424907f839c6c2e3ecd46889ede290a2c81de22d3f33a7fa5e55ec95c0e26005c596d0f6346f819823f361f9f9f54d1eae48b325240d66c5888bd5ebab843061dcdd73b675346da982646c83026694d757661d31c2d654fb263c9ab3e874a258bc234c48532f15e9450c982fcf161404746e9f23d25e17b74139cd799983fd0c7a7a0386a823d3789b4578879a764172cc8ef96ab003eee24f6288007d31e2b999aff5a6d30cc524a0111a99730a29cf28ae41dbff6ce21ca6bc1df37074228178048e835584e6e70dba941154d024cd03cb6c56d0bde441ce464aa749de5e814dd30e21b75f62e831ac1f28eda1a7ba7e122076789e284402c8ba85b5a0e864bce220e3c78fa2f465e2bcf6b1d378816319de99f99ce7068&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;df3d06db6c8b8a5f25de202e10ea225df6415d1ed0e36c64cc2be1b7e86c2a382761e6bfe839586b4c90954200bc4ce6d39ef164c5d14997755575d1691ee249ffd20beda526f57a7424907f839c6c2e3ecd46889ede290a2c81de22d3f33a7fa5e55ec95c0e26005c596d0f6346f819823f361f9f9f54d1eae48b325240d66c5888bd5ebab843061dcdd73b675346da982646c83026694d757661d31c2d654fb263c9ab3e874a258bc234c48532f15e9450c982fcf161404746e9f23d25e17b74139cd799983fd0c7a7a0386a823d3789b4578879a764172cc8ef96ab003eee24f6288007d31e2b999aff5a6d30cc524a0111a99730a29cf28ae41dbff6ce21ca6bc1df37074228178048e835584e6e70dba941154d024cd03cb6c56d0bde441ce464aa749de5e814dd30e21b75f62e831ac1f28eda1a7ba7e122076789e284402c8ba85b5a0e864bce220e3c78fa2f465e2bcf6b1d378816319de99f99ce7068&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;===Mode: &amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; Encryption===&lt;br/&gt;====ROUND 1====&lt;br/&gt;*Coordinator&lt;br/&gt;** M-of-N: 2/3&lt;br/&gt;** ADDRESS_TYPE: NESTED_SEGWIT&lt;br/&gt;** TOKEN for Signer 1 (hex): 654d63309464afcda558c6aa&lt;br/&gt;*** TOKEN (decimal): 31351541690484562733651510954&lt;br/&gt;*** TOKEN (mnemonic): grab help slow churn enough traffic nice boat price&lt;br/&gt;*** ENCRYPTION_KEY (hex):&lt;br/&gt;4073adac2351e164b8d68039abd9d4b8e4d07adccfdf73ece6e236d60b107802&lt;br/&gt;** TOKEN for Signer 2 (hex): b0344f51d5cb04083d598fa3&lt;br/&gt;*** TOKEN (decimal): 54532600447720520868878192547&lt;br/&gt;*** TOKEN (mnemonic): rabbit pen stamp process raccoon advice voice&lt;br/&gt;cradle person&lt;br/&gt;*** ENCRYPTION_KEY (hex):&lt;br/&gt;6bae6b670e257d7468c3e90194029dd468a2f39d8b9a3ff187b08209b1d409b6&lt;br/&gt;** TOKEN for Signer 3 (hex): 163fd307195982c4c39d50bb&lt;br/&gt;*** TOKEN (decimal): 6885829092987042066541138107&lt;br/&gt;*** TOKEN (mnemonic): bike write scrub crawl oblige give attack present rookie&lt;br/&gt;*** ENCRYPTION_KEY (hex):&lt;br/&gt;c78b94589214b6dc98b337ba4ce54380553ed00a1e5b1955fc540ce3b30d6566&lt;br/&gt;&lt;br/&gt;* Signer 1&lt;br/&gt;** MASTER_KEY_FINGERPRINT: 110dc257&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;):&lt;br/&gt;KzshDDEBhzyiwXHoyE7ZiLegzztEy54AG6Wq8N844LqHSQMHt4Ji&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;):&lt;br/&gt;xpub6EPQbDFezXYvVFHqnc8R7QUSE8hTepbyCXU7jJBT4dVm2rQHe1i6isqoj59qhyBiCdKquo6QsgMZNHvEz3BM4cNSszF25siTqLUCznBm8vk&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_1_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;654d63309464afcda558c6aa&lt;br/&gt;[110dc257/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;]xpub6EPQbDFezXYvVFHqnc8R7QUSE8hTepbyCXU7jJBT4dVm2rQHe1i6isqoj59qhyBiCdKquo6QsgMZNHvEz3BM4cNSszF25siTqLUCznBm8vk&lt;br/&gt;Signer 1 key&lt;br/&gt;IDX6xLdM4XjetYPvVfpVBXAfT7oE3tHAOB4blZpbIst8bjJ&#43;LbDeP4tZl4O8utAuys9igXE0G3kaHz1mg/&#43;OU8w=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 1 encryption&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;f43c359a4b3d7b2e01be73c54519b12545ca9a23a86f824aadf577b314a7caa7&lt;br/&gt;** MAC (hex): 40b6b43e2f1bc01b748eb242235d7e09fa8a2fd6cebe35784cf3adf81910ec98&lt;br/&gt;** IV (hex) : 40b6b43e2f1bc01b748eb242235d7e09&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;0877987764401c27e6c60ed2f1bb89dff1dbc5e8204149f682d53049bffe39553f24af3928aa2f78ac2d04ac5baa0c3ec39aaccf0d258e7bb6659a7b92e92f2c2784a94f4df8e8af2270d9d411bfff2cfb9f71b4e1ac87561c7d2ac57ca86a1f9716d5da7571719d24830fc8d015a0daf04b3742439484488798335357f2eeaa8e2db2ba630f9dffd88236e327ab5bfcfb6e29ee3ef6cc18e0b71c1731465c2351e76b92f7b1bd28ef6eff5414c22aa6c80090fa59b973c22e3044e92dbf3688990a49a42828e52c1e686f1193dcdf7b7118930e01419fe938c6811c58c84c36d692fd52846f998bc328471f1e73c22261791a08cda096ee3ac8b37f31afd0b1d9c335ff9ac67ff230eb0d69f2d7&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_1_key.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;40b6b43e2f1bc01b748eb242235d7e09fa8a2fd6cebe35784cf3adf81910ec980877987764401c27e6c60ed2f1bb89dff1dbc5e8204149f682d53049bffe39553f24af3928aa2f78ac2d04ac5baa0c3ec39aaccf0d258e7bb6659a7b92e92f2c2784a94f4df8e8af2270d9d411bfff2cfb9f71b4e1ac87561c7d2ac57ca86a1f9716d5da7571719d24830fc8d015a0daf04b3742439484488798335357f2eeaa8e2db2ba630f9dffd88236e327ab5bfcfb6e29ee3ef6cc18e0b71c1731465c2351e76b92f7b1bd28ef6eff5414c22aa6c80090fa59b973c22e3044e92dbf3688990a49a42828e52c1e686f1193dcdf7b7118930e01419fe938c6811c58c84c36d692fd52846f998bc328471f1e73c22261791a08cda096ee3ac8b37f31afd0b1d9c335ff9ac67ff230eb0d69f2d7&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 2&lt;br/&gt;** MASTER_KEY_FINGERPRINT: 5c890401&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;):&lt;br/&gt;L41Jnc9CdBtBJd18429MDGcTgP2DNoXaKyyGr271ndTprvrHXDQf&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;):&lt;br/&gt;xpub6EW1SmjSXq9YwVwcan5qWEncgx89SozMvGNpYF6hfZHYNTikNZ4gsXuVhHTi6xYJCkmY4X4wpPPS5Gr7aY39dVJMS2TGfihr25oaspKtU8q&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_2_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;b0344f51d5cb04083d598fa3&lt;br/&gt;[5c890401/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;]xpub6EW1SmjSXq9YwVwcan5qWEncgx89SozMvGNpYF6hfZHYNTikNZ4gsXuVhHTi6xYJCkmY4X4wpPPS5Gr7aY39dVJMS2TGfihr25oaspKtU8q&lt;br/&gt;Signer 2 key&lt;br/&gt;H5kN6UHaK2xACB6iYdTxxQPD8qyFEYv9iMsQs5B0MRfCM7NA5GB&#43;7EFgmBpSctwt6B122zWBr6mRjpYjKmj&#43;7hs=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 2 encryption&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;e0a20b5f5285fbaa35aad08fb70f5626c9abbe1b384a4950735b28aca6325ff2&lt;br/&gt;** MAC (hex): 3a6deec8dbdbd6606a52c7d7e64eca4f972a293cbabac6f62736629fbe77928a&lt;br/&gt;** IV (hex) : 3a6deec8dbdbd6606a52c7d7e64eca4f&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;bb0fb72f61b0c4858bd9c65235390b67651b94c4b0329238b0116dd6d3365ade33cb1c1b1619638968791a5d2d1d263d90280bdad8d9ca24c34a78e320076e0dccf59e7f729b541b44bbe40ba803dedd3b17c49765377cb2d913a856b86c3dd383dab475790e89226ed8ef2301574212d2809ed9c099aa67be434024ee2a4e82a146300acf755863da64807cb7bb2636f6616489636d254a870778d3540832aea44abac4328b5d90f3e6045ef36a526ce5d575f2305e3e4699dccbc713e9e68f50364036c1054c2a506aab77ea7c43a89536947c24330b09a62a90c3b4ae2d452f96ef34ec871af2c52d68ddede2503c87e2ba68d5cf9be589457879e06021ea6a6176f7dded820ba4c0e709e2a2&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_2_key.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;3a6deec8dbdbd6606a52c7d7e64eca4f972a293cbabac6f62736629fbe77928abb0fb72f61b0c4858bd9c65235390b67651b94c4b0329238b0116dd6d3365ade33cb1c1b1619638968791a5d2d1d263d90280bdad8d9ca24c34a78e320076e0dccf59e7f729b541b44bbe40ba803dedd3b17c49765377cb2d913a856b86c3dd383dab475790e89226ed8ef2301574212d2809ed9c099aa67be434024ee2a4e82a146300acf755863da64807cb7bb2636f6616489636d254a870778d3540832aea44abac4328b5d90f3e6045ef36a526ce5d575f2305e3e4699dccbc713e9e68f50364036c1054c2a506aab77ea7c43a89536947c24330b09a62a90c3b4ae2d452f96ef34ec871af2c52d68ddede2503c87e2ba68d5cf9be589457879e06021ea6a6176f7dded820ba4c0e709e2a2&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 3&lt;br/&gt;** MASTER_KEY_FINGERPRINT: 614cbf5f&lt;br/&gt;** PRIVATE_KEY (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;):&lt;br/&gt;L2ccRLzH7GfVxWpU8YSY9y5UGyRoqW3UdeNT1vGfVbxAGhwU5qhD&lt;br/&gt;** XPUB (m/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;):&lt;br/&gt;xpub6F9TfWTFcMYy5Ycd2ka2az1brJj78J2isLAWptZnCpFsesss5sZv5B8xsgt71ZXfhDWhUtf4vng4zY6HUVrQbDMPDYRLYvFFoLnAYfzgYPH&lt;br/&gt;** Legacy signature&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_3_key.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;163fd307195982c4c39d50bb&lt;br/&gt;[614cbf5f/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;]xpub6F9TfWTFcMYy5Ycd2ka2az1brJj78J2isLAWptZnCpFsesss5sZv5B8xsgt71ZXfhDWhUtf4vng4zY6HUVrQbDMPDYRLYvFFoLnAYfzgYPH&lt;br/&gt;Signer 3 key&lt;br/&gt;H0jf2JMtke5zDDIWys6fihOCA6QBmC5&#43;hbgVB/c2mMPNPLB6tDXt0TFZU1f9wvaCR9762anKSc8CCqXLogw8V00=&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Signer 3 encryption&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;1f51ea067c121e2f86af5e1d484905046bc63e861573157d8b1ae9e7e47e224b&lt;br/&gt;** MAC (hex): 1a5624fcb39cebabb6174456173eec19b756bc916cf2c9d815e9bcce070898c4&lt;br/&gt;** IV (hex) : 1a5624fcb39cebabb6174456173eec19&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;48d6e139bdc8c19e93cbbf5b4478340c8cf08aa91c28803084d5f58618773f7e615e0134492b496c4e7c130351c0350701f686918033f621378552d7040efedd5539d38c258bf936475de775f23da3953fe3ba5bbbd24816b8902b87a9a09700c446b085119dedee2395dd69665e742f72f2fb6da4ebe3f4704eaf45486fbfb84d764b718cc0b756e72f72ab6069d47765bdd3ebd4074af4fa99a95691a659675ce5f72235c28ddf3c3d53179e598cddc967fc896adc6e97edeeffc85b9e44611df748d923ff3dd921ad4d6e98e0de12359a37558e326faf585ba57e73ab45bc4a49f6e8a756f365f5d204e70f7c7bed269e81e9524a41e5d4cbaad0b6b442d6eea1e5da1ca345cc665a0cffe2c3&lt;br/&gt;** &amp;lt;tt&amp;gt;signer_3_key.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;1a5624fcb39cebabb6174456173eec19b756bc916cf2c9d815e9bcce070898c448d6e139bdc8c19e93cbbf5b4478340c8cf08aa91c28803084d5f58618773f7e615e0134492b496c4e7c130351c0350701f686918033f621378552d7040efedd5539d38c258bf936475de775f23da3953fe3ba5bbbd24816b8902b87a9a09700c446b085119dedee2395dd69665e742f72f2fb6da4ebe3f4704eaf45486fbfb84d764b718cc0b756e72f72ab6069d47765bdd3ebd4074af4fa99a95691a659675ce5f72235c28ddf3c3d53179e598cddc967fc896adc6e97edeeffc85b9e44611df748d923ff3dd921ad4d6e98e0de12359a37558e326faf585ba57e73ab45bc4a49f6e8a756f365f5d204e70f7c7bed269e81e9524a41e5d4cbaad0b6b442d6eea1e5da1ca345cc665a0cffe2c3&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;====ROUND 2====&lt;br/&gt;* Coordinator&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet.bsms&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;BSMS 1.0&lt;br/&gt;/0/*,/1/*&lt;br/&gt;sh(wsh(multi(2,[110dc257/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;]xpub6EPQbDFezXYvVFHqnc8R7QUSE8hTepbyCXU7jJBT4dVm2rQHe1i6isqoj59qhyBiCdKquo6QsgMZNHvEz3BM4cNSszF25siTqLUCznBm8vk/*,[5c890401/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;]xpub6EW1SmjSXq9YwVwcan5qWEncgx89SozMvGNpYF6hfZHYNTikNZ4gsXuVhHTi6xYJCkmY4X4wpPPS5Gr7aY39dVJMS2TGfihr25oaspKtU8q/*,[614cbf5f/48&amp;#39;/0&amp;#39;/0&amp;#39;/1&amp;#39;]xpub6F9TfWTFcMYy5Ycd2ka2az1brJj78J2isLAWptZnCpFsesss5sZv5B8xsgt71ZXfhDWhUtf4vng4zY6HUVrQbDMPDYRLYvFFoLnAYfzgYPH/*)))#j3ykhz7f&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Send to Signer 1:&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;f43c359a4b3d7b2e01be73c54519b12545ca9a23a86f824aadf577b314a7caa7&lt;br/&gt;** MAC (hex): ee74a0f50943d7d1b65270028bb05133e87c832cdc1ef0a07c79db2093ca3432&lt;br/&gt;** IV (hex) : ee74a0f50943d7d1b65270028bb05133&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;8e3ba3dac0f979fad0d160bd00c8294ff1726d51b95ff3e1534e5a1900f3d7cd4f6d929985a94b9da2c11e4e0f7770cc53c6739fd099477323bd26a3eca9c8016e79848d15e274463424b8355cd73cced61f1816ac8bac87f8c650ee9052f50e347c52ad24b00794a9d5523714be2fdcf731f14b7a8d7c93eab44c258e1c417d2837b9676832e8ce7239dc28b4e1166803209947b8a875a99b9478ee94f7bc17399e886179ab2a0285dc11a3883f6fa439d0f2277dadbec8c355c379fc50e945897e1a738f6a55b09f6b8b6bdf6d4bc248219cbad3662a78a2f539c989e055e00b8efd42fbff978e1a5cc10f83df56117ece4d17f94a0a6d3803778ed53531419250c5a0fff6cad4ab401468dd054915b068cc8826ae1308a71b38060d68c9248d59eea11c2c52a66d5f6bc0d7ae6cb44305c36e56068456d293b70037902e7b05a3ee0af710201128dffc0c16c3306b66bd19b9ae5b91aded35ef33f07743e5b185a9f88a5c67d40270e3bbcf592167ceaf82ead693728d5129b50075edd5ce24863f3484b4b063599ed1327e1c87d0a2051fed3b1234a702722b686e4c9392a403b79726800dd6b691e516e44d9e836c190b10cf2bb262bba98293c97f2c323e59acd0a1f988c5&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet_for_signer_1.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;ee74a0f50943d7d1b65270028bb05133e87c832cdc1ef0a07c79db2093ca34328e3ba3dac0f979fad0d160bd00c8294ff1726d51b95ff3e1534e5a1900f3d7cd4f6d929985a94b9da2c11e4e0f7770cc53c6739fd099477323bd26a3eca9c8016e79848d15e274463424b8355cd73cced61f1816ac8bac87f8c650ee9052f50e347c52ad24b00794a9d5523714be2fdcf731f14b7a8d7c93eab44c258e1c417d2837b9676832e8ce7239dc28b4e1166803209947b8a875a99b9478ee94f7bc17399e886179ab2a0285dc11a3883f6fa439d0f2277dadbec8c355c379fc50e945897e1a738f6a55b09f6b8b6bdf6d4bc248219cbad3662a78a2f539c989e055e00b8efd42fbff978e1a5cc10f83df56117ece4d17f94a0a6d3803778ed53531419250c5a0fff6cad4ab401468dd054915b068cc8826ae1308a71b38060d68c9248d59eea11c2c52a66d5f6bc0d7ae6cb44305c36e56068456d293b70037902e7b05a3ee0af710201128dffc0c16c3306b66bd19b9ae5b91aded35ef33f07743e5b185a9f88a5c67d40270e3bbcf592167ceaf82ead693728d5129b50075edd5ce24863f3484b4b063599ed1327e1c87d0a2051fed3b1234a702722b686e4c9392a403b79726800dd6b691e516e44d9e836c190b10cf2bb262bba98293c97f2c323e59acd0a1f988c5&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Send to Signer 2:&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;e0a20b5f5285fbaa35aad08fb70f5626c9abbe1b384a4950735b28aca6325ff2&lt;br/&gt;** MAC (hex): 81df9e064f1de1d5f754c4e20f9286f9d81b856d3965677a9f2430cb9297ad1f&lt;br/&gt;** IV (hex) : 81df9e064f1de1d5f754c4e20f9286f9&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;dcd82038ef627d6cb2deb62d04c4ccbaa3a354633d960e46312c22791f039f23fd9782a1e3a63504c1e5b3a0770bb8d32fdf168738b6c03278f1391dd5d01e9aafee7be2c8136ee018feff6fc8cdb926df13a36e115ddca8254934f56b7f700768c94cb8388a8297834de9affcd959417ae3d6ec3251387904f50f51f06306cc4d36eefc51418dd3b2c5454910a23ec67a40a3b918d2a740e812929aae949d8dde2c41cbbb3a2b7c2103788421c147f4794d6a26947c15ef4a99ceb825d0c5aaa78b8737d0ef712ba8e269a9941b1af5d217dcdd9cd06727fbdc70fabe3f5a8c09acff4e76992be7f27c6b12ca84739f62a6da86e5b79103d632c0dc8ab3f91fddb3cfbe67084dc4b861c4ac7c86fb171a058c98c67cffdc40ff17ae1533361cc6fb7b63657af0408cf30bf9d6d97aaacf9d3ff443eee61f207228cd91769ce83a0709c1be1847884c6a8fdc86ede66aef8e34fc509c49edf30f743bdc8f9052961ee340924ec2d1caadc6fd286bb3e233c153cd08c1934127752dc28e0d12efa92a050c4061653edb1cbf2fd4b2ba4e038f0b44f5735f198e92571c029156f65f534bfc149f38d611829901372cfc0176b9d2f9ac6512b7f37941a02dff701df0bceadaacfc6935&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet_for_signer_2.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;81df9e064f1de1d5f754c4e20f9286f9d81b856d3965677a9f2430cb9297ad1fdcd82038ef627d6cb2deb62d04c4ccbaa3a354633d960e46312c22791f039f23fd9782a1e3a63504c1e5b3a0770bb8d32fdf168738b6c03278f1391dd5d01e9aafee7be2c8136ee018feff6fc8cdb926df13a36e115ddca8254934f56b7f700768c94cb8388a8297834de9affcd959417ae3d6ec3251387904f50f51f06306cc4d36eefc51418dd3b2c5454910a23ec67a40a3b918d2a740e812929aae949d8dde2c41cbbb3a2b7c2103788421c147f4794d6a26947c15ef4a99ceb825d0c5aaa78b8737d0ef712ba8e269a9941b1af5d217dcdd9cd06727fbdc70fabe3f5a8c09acff4e76992be7f27c6b12ca84739f62a6da86e5b79103d632c0dc8ab3f91fddb3cfbe67084dc4b861c4ac7c86fb171a058c98c67cffdc40ff17ae1533361cc6fb7b63657af0408cf30bf9d6d97aaacf9d3ff443eee61f207228cd91769ce83a0709c1be1847884c6a8fdc86ede66aef8e34fc509c49edf30f743bdc8f9052961ee340924ec2d1caadc6fd286bb3e233c153cd08c1934127752dc28e0d12efa92a050c4061653edb1cbf2fd4b2ba4e038f0b44f5735f198e92571c029156f65f534bfc149f38d611829901372cfc0176b9d2f9ac6512b7f37941a02dff701df0bceadaacfc6935&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;* Send to Signer 3:&lt;br/&gt;** HMAC_KEY (hex):&lt;br/&gt;1f51ea067c121e2f86af5e1d484905046bc63e861573157d8b1ae9e7e47e224b&lt;br/&gt;** MAC (hex): 159a91100cacd123480b7d085c8bb32ec8eb06f0391b6dc8fac07ae67eb37b81&lt;br/&gt;** IV (hex) : 159a91100cacd123480b7d085c8bb32e&lt;br/&gt;** CIPHERTEXT (hex):&lt;br/&gt;c7269d8be21d1cfe172e35aa106760f1fdc929fce19da8fb7f74f759efec1ee02796fb1e8b008cf177f60a2021570f17aeeb41f8636858654082734b90959b98fd08419f901683c4ca3e76b3e482fea4c67162775e0d80bcb45df729f646c1364a3d8a7d1ff961717b00897e877c1c0554d3502942149726806269c546ad2dd34ba286ddf5cd336b83aabf7091fa25e607faf7e54017d84113e1e3ec440b3704addea188b89293469306fc0a98570afdcf269026b2d2e760f466c1f75bcf75fdf030c0a692e5681fd4487e59d6e96451ff5b6b9f2521b8e95e796ef4ab0a917794d91a30fdac7ee9ddbd89d174831bd133ab12a74f52f6283ee2c5fe3d5a957a7c1a15530b2c5224f76d90057dc94f2ee34e28b037ae7f518cc6dfe725cd3e657648de82b200ea77830eb93219f883998d3207a4ef5902d1119b0cde6b364bc1effb86109d9c2babc8ab26dce90329779d8cd0d737e9825a25586aa3c8fa5317e3e433ff235b82f629de0504e3c992f8e8de299f62751bc1fcb2e75e0262c7a27be7068cea69b14f303e97c24b99ed29cae142564e285657704b4c411d0d4f8c58819e2c0e0ffc3667eb5a408aad8a3023a5f00875e7deab95dc365d8757f7b79815a4fd9e6de2b3&lt;br/&gt;** &amp;lt;tt&amp;gt;my_multisig_wallet_for_signer_3.dat&amp;lt;/tt&amp;gt;:&lt;br/&gt;&amp;lt;pre&amp;gt;159a91100cacd123480b7d085c8bb32ec8eb06f0391b6dc8fac07ae67eb37b81c7269d8be21d1cfe172e35aa106760f1fdc929fce19da8fb7f74f759efec1ee02796fb1e8b008cf177f60a2021570f17aeeb41f8636858654082734b90959b98fd08419f901683c4ca3e76b3e482fea4c67162775e0d80bcb45df729f646c1364a3d8a7d1ff961717b00897e877c1c0554d3502942149726806269c546ad2dd34ba286ddf5cd336b83aabf7091fa25e607faf7e54017d84113e1e3ec440b3704addea188b89293469306fc0a98570afdcf269026b2d2e760f466c1f75bcf75fdf030c0a692e5681fd4487e59d6e96451ff5b6b9f2521b8e95e796ef4ab0a917794d91a30fdac7ee9ddbd89d174831bd133ab12a74f52f6283ee2c5fe3d5a957a7c1a15530b2c5224f76d90057dc94f2ee34e28b037ae7f518cc6dfe725cd3e657648de82b200ea77830eb93219f883998d3207a4ef5902d1119b0cde6b364bc1effb86109d9c2babc8ab26dce90329779d8cd0d737e9825a25586aa3c8fa5317e3e433ff235b82f629de0504e3c992f8e8de299f62751bc1fcb2e75e0262c7a27be7068cea69b14f303e97c24b99ed29cae142564e285657704b4c411d0d4f8c58819e2c0e0ffc3667eb5a408aad8a3023a5f00875e7deab95dc365d8757f7b79815a4fd9e6de2b3&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Acknowledgement==&lt;br/&gt;&lt;br/&gt;Special thanks to Pavol Rusnak, Dmitry Petukhov, Christopher Allen,&lt;br/&gt;Craig Raw, Robert Spigler, Gregory Sanders, Ta Tat Tai, Michael&lt;br/&gt;Flaxman, Pieter Wuille and others for their feedback on the&lt;br/&gt;specification.&lt;br/&gt;&lt;br/&gt;==References==&lt;br/&gt;&lt;br/&gt;Original mailing list thread:&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018385.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018385.html&lt;/a&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210405/4f9dbebb/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210405/4f9dbebb/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:31:13&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9xqmssvhtlq6kwr7pllw8eernwzslqu2x76lkucjhj0d42y8y6ggzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hseu68e8</id>
    
      <title type="html">📅 Original date posted:2021-02-15 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9xqmssvhtlq6kwr7pllw8eernwzslqu2x76lkucjhj0d42y8y6ggzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hseu68e8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsr3505cqfaaz6q6tw0agm0q8al99rltx5qmgmgfk6shp4uh5j595qxpw7nk&#39;&gt;nevent1q…w7nk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-02-15&lt;br/&gt;📝 Original message:I would also like to add 2 notes for those who are concerned about the&lt;br/&gt;potential complexity that comes with encryption - which is understandable:&lt;br/&gt;&lt;br/&gt;1. As mentioned elsewhere in the thread, I&amp;#39;ve made the encryption aspect&lt;br/&gt;entirely optional. In scenarios where encryption is an overkill -- such as&lt;br/&gt;when you&amp;#39;re setting things up under an environment you control 100% -- you&lt;br/&gt;can turn encryption off, and things are unchanged from the way they are&lt;br/&gt;now. The &amp;#34;session&amp;#34; would be unencrypted and XPUBs and descriptor records&lt;br/&gt;are simply shared in plaintext.&lt;br/&gt;&lt;br/&gt;2. Multisig setup is a one-time operation! After the multisig wallet has&lt;br/&gt;been set up and registered with the Signers, you don&amp;#39;t have to worry about&lt;br/&gt;sharing XPUBs ever again (not even in PSBTs which is an additional benefit&lt;br/&gt;of the stateful registration approach). I believe this one-time cost is&lt;br/&gt;worth it if the amount of funds you are securing are significant, e.g., few&lt;br/&gt;millions of dollars or even billions of dollars. But it&amp;#39;s important that we&lt;br/&gt;have this extra level of security if necessary IMHO.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;On Mon, Feb 15, 2021 at 6:19 AM Hugo Nguyen &amp;lt;hugo at nunchuk.io&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Craig,&lt;br/&gt;&amp;gt; Thanks for the feedback! Sharing my comments inline.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Mon, Feb 15, 2021 at 5:53 AM Craig Raw &amp;lt;craigraw at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hugo and I have discussed off-list, and I have two concerns with this&lt;br/&gt;&amp;gt;&amp;gt; proposal:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 1. I believe adding the TOKEN and encryption to the exchange adds&lt;br/&gt;&amp;gt;&amp;gt; complexity to already notoriously complex multisig, without adding much in&lt;br/&gt;&amp;gt;&amp;gt; the way of security.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I disagree that this doesn&amp;#39;t add security. This proposal was inspired by a&lt;br/&gt;&amp;gt; real vulnerability we discovered in the wild while experimenting with HWWs,&lt;br/&gt;&amp;gt; and during that process I noticed that there is little in the way of a an&lt;br/&gt;&amp;gt; attacker to pull off a MITM attack, where he/she can intercept and tamper&lt;br/&gt;&amp;gt; with the multisig configuration file, potentially swapping in their own&lt;br/&gt;&amp;gt; XPUBs. This is especially important for remote multisig setups - which is&lt;br/&gt;&amp;gt; not common now but I imagine will be a lot more common in the future.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is because the shared secret (TOKEN) must still be shared securely,&lt;br/&gt;&amp;gt;&amp;gt; and if you have established an (off-protocol) secure channel to do this,&lt;br/&gt;&amp;gt;&amp;gt; why not just share the actual multisig configuration data directly in that&lt;br/&gt;&amp;gt;&amp;gt; channel?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Because multisig is inherently an interactive process. If we can create&lt;br/&gt;&amp;gt; the multisig configuration in one shot for everybody, you&amp;#39;re correct that&lt;br/&gt;&amp;gt; this is not necessary! But the fact that multisig is by nature interactive&lt;br/&gt;&amp;gt; and requires a few rounds of communication (since it needs each Signer to&lt;br/&gt;&amp;gt; voluntarily share its XPUB before a wallet can be created) makes this&lt;br/&gt;&amp;gt; necessary IMO.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you are able to do so, you retain the advantage of being able to&lt;br/&gt;&amp;gt;&amp;gt; inspect the data directly.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note that some manual inspection is still part of the proposal. But&lt;br/&gt;&amp;gt; instead of exclusively relying on manual inspection (which is error-prone,&lt;br/&gt;&amp;gt; and also doesn&amp;#39;t scale very well for a large number of signers), we&lt;br/&gt;&amp;gt; strengthen this process by automating some of the checks and making it&lt;br/&gt;&amp;gt; harder to tamper with.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 2. Asking the user to enter the derivation into the Signer also adds (IMO&lt;br/&gt;&amp;gt;&amp;gt; unnecessary) complexity to the multisig setup process. A different way of&lt;br/&gt;&amp;gt;&amp;gt; doing it, which is specified in the UR crypto-account format linked to&lt;br/&gt;&amp;gt;&amp;gt; previously, has the Signer provide as many common derivations (along with&lt;br/&gt;&amp;gt;&amp;gt; their xpubs) as it can support for a given BIP44 account number. This has&lt;br/&gt;&amp;gt;&amp;gt; the dual advantage of making things simpler for the user (they only have to&lt;br/&gt;&amp;gt;&amp;gt; provide an optional account number) and increasing the standardisation on&lt;br/&gt;&amp;gt;&amp;gt; common derivation paths. On receiving these derivation/xpub pairs, the&lt;br/&gt;&amp;gt;&amp;gt; Coordinator can simply pick the appropriate one.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note that in the updated proposal, I added the option of the Signer&lt;br/&gt;&amp;gt; automatically filling in the derivation paths on behalf of the user (and&lt;br/&gt;&amp;gt; also should take care not to reuse XPUBs). Perhaps this can be made the&lt;br/&gt;&amp;gt; default behavior.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt; Hugo&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; These concerns noted, I agree it&amp;#39;s a good idea to have Signers save the&lt;br/&gt;&amp;gt;&amp;gt; multisig configuration as proposed, and it would be great to have&lt;br/&gt;&amp;gt;&amp;gt; standardisation in hww import and export formats (not just for multisig).&lt;br/&gt;&amp;gt;&amp;gt; On that note, I&amp;#39;d love to see greater adoption of the efficient UR2.0&lt;br/&gt;&amp;gt;&amp;gt; standard and associated formats for airgapped data transmission using QR&lt;br/&gt;&amp;gt;&amp;gt; codes.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Craig&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Mon, Feb 15, 2021 at 11:13 AM Hugo Nguyen via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I have updated the proposal based on further feedback. The new spec is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; included at the bottom.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I have also created a public Github PR to make it easier to comment on&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the text of the spec itself: &lt;a href=&#34;https://github.com/nunchuk-io/bips/pull/1&#34;&gt;https://github.com/nunchuk-io/bips/pull/1&lt;/a&gt; .&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Could someone please let me know what else needs to be done before a BIP&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; number can be assigned?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; === Quick summary of changes from last update ===&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 1. Define encryption modes&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; # NO_ENCRYPTION: Encryption is disabled.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; # STANDARD : the TOKEN is a 64-bit nonce.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; # EXTENDED : the TOKEN is a 128-bit nonce.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 2. Define signature algorithm&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Follow BIP-0322, legacy format allowed.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 3. Multiple TOKENs (optional)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Also add an option where the Coordinator can choose to use one common&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; TOKEN for all Signers, or use one per Signer.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; === End of summary ===&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Hugo&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   BIP: To be determined&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   Layer: Applications&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   Title: Bitcoin Secure Multisig Setup (BSMS)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   Author: Hugo Nguyen &amp;lt;hugo at nunchuk.io&amp;gt;, Peter Gray &amp;lt;peter at&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; coinkite.com&amp;gt;, Marko Bencun &amp;lt;marko at shiftcrypto.ch&amp;gt;, Pavol Rusnak &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; stick at satoshilabs.com&amp;gt;, Aaron Chen &amp;lt;aarondongchen at gmail.com&amp;gt;,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rodolfo Novak &amp;lt;rodolfo at coinkite.com&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   Comments-Summary: No comments yet.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   Comments-URI:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   Status: Proposed&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   Type: Standards Track&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   Created: 2020-11-10&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   License: BSD-2-Clause&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ==Introduction==&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ===Abstract===&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This document proposes a mechanism to set up multisig wallets securely.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ===Copyright===&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This BIP is licensed under the 2-clause BSD license.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ===Motivation===&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The Bitcoin multisig experience has been greatly streamlined under [&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&lt;/a&gt; BIP-0174&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (Partially Signed Bitcoin Transaction)]. However, what is still missing&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; is a standardized process for setting up multisig wallets securely across&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; different vendors.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; There are a number of concerns when it comes to setting up a multisig&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wallet:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; # Whether the multisig configuration, such as Signer membership, script&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; type, derivation paths and number of signatures required, is correct and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; not tampered with.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; # Whether Signer persists the multisig configuration in their respective&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; storage, and under what format.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; # Whether Signer&amp;#39;s storage is tamper-proof.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; # Whether Signer subsequently uses the multisig configuration to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; generate and verify receive and change addresses.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; An attacker who can modify the multisig configuration can steal or hold&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; funds to ransom by duping the user into sending funds to the wrong address.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This proposal seeks to address concerns #1 and #2: to mitigate the risk&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of tampering during the initial setup phase, and to define an interoperable&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; multisig configuration format.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Concerns #3 and #4 should be handled by Signers and is out of scope of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; this proposal.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ==Specification==&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ===Prerequisites===&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This proposal assumes the parties in the multisig support [&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; BIP-0032], [&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&lt;/a&gt; the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; descriptor language] and encryption.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ===Roles===&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ====Coordinator====&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The Coordinator initiates the multisig setup. The Coordinator determines&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; what type of multisig is used and the exact policy script. If encryption is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; enabled, the Coordinator also distributes a shared secret or shared secrets&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to the parties involved for secure communication. The Coordinator gathers&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; information from the Signers to generate a descriptor record. The&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Coordinator distributes the descriptor record back to the Signers.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ====Signer====&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The Signer is a participating member in the multisig. Its&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; responsibilities include providing its key record -- which contains an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Extended Public Key (XPUB) -- to the Coordinator, verifying that its XPUB&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; is included in the descriptor record and persisting the descriptor record&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; in its storage.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ===Setup Process===&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ====Round 1====&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; =====Coordinator=====&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The Coordinator creates a multisig wallet creation session. The&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Coordinator constructs the multisig script and its policy parameters, such&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; as the total number of signers and the required number of signatures&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The session should expire after some time period determined by the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Coordinator, e.g., 24 hours.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * If encryption is enabled, the Coordinator distributes a secret&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; to each Signer over a secure channel. The Signer can use the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; to derive an &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;. Refer to the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Encryption section below for details on the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;, the key&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; derivation function and the encryption scheme. Depending on the use case,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the Coordinator can decide whether to share one common &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; all Signers, or to have one per Signer.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * If encryption is disabled, &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set to &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; all the encryption/decryption steps below can be skipped.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; =====Signer=====&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The Signer initiates a new secure multisig setup session by setting&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The Signer derives an &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; from the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The Signer can keep the session open until a different&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; value for the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The Signer generates a key record by prompting the user for a multisig&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; derivation path and retrieves the XPUB at that derivation path. Optionally,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the Signer can choose a path on behalf of the user. If the Signer chooses&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the path, it should try to avoid reusing XPUBs for different wallets.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The first line in the record must be the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The second&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; line must be the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; is an XPUB plus its key&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; origin information, written in the descriptor-defined format, i.e.:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;[{master key fingerprint}/{derivation path}]{XPUB}&amp;lt;/tt&amp;gt;. The third line&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; must be a &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt;, whereas &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt; is the signature generated by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; using the private key associated with the XPUB to sign the first two&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; lines.  The signature should follow [&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; BIP-0322], legacy format accepted. Finally, the Signer encrypts the entire&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; record with &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ====Round 2====&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; =====Coordinator=====&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The Coordinator gathers key records from all participating Signers.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Abort the setup if the wallet setup session has expired.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * For each key record, the Coordinator decrypts it using&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;. The Coordinator verifies that the included&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt; is valid given the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * If all key records look good, the Coordinator fills in all necessary&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; information to generate a descriptor record, which is simply the descriptor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; string plus a &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, all in one line. The &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt; has&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; BECH32 encoding].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The Coordinator encrypts this descriptor record with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The Coordinator sends the encrypted descriptor record to all&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; participating Signers.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; =====Signer=====&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The Signer imports the descriptor record, decrypts it using the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; derived from the open session.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The Signer calculates and verifies the descriptor’s &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Abort the setup if the &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt; is incorrect.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The Signer checks whether one of the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;s in the descriptor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; belongs to it, using path and fingerprint information included in the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; descriptor. The check must perform an exact match on the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;s, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; not using shortcuts such as matching fingerprints (which is trivial to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; spoof). Abort the setup if it doesn’t detect its own &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * For confirmation, the Signer must display to the user the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, plus other configurations, such as &amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt; and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;. The total number of Signers, &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;, is important to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; prevent a &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; insertion attack. All participating Signers should&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; be able to display the same confirmation.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * If all checks pass, the Signer persists the descriptor record in its&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; storage.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The Signer can choose to further restrict post-XPUB derivation paths,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; such as to those defined in [&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; BIP-0044].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * The Signer should subsequently use the descriptor to generate and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; verify receive and change addresses.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This completes the setup.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ===Encryption===&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ====The Token====&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; We define three modes of encryption.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; # &amp;lt;tt&amp;gt;NO_ENCRYPTION&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set to &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Encryption is disabled.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; # &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is a 64-bit nonce.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; # &amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is a 128-bit nonce.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; can be converted to one of these formats:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * A mnemonic phrase using [&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; BIP-0039] word list (6 words in &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; mode, 12 words in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; mode)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * A decimal number (20 digits in &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; mode, 40 digits in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; mode)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * A QR code&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * Other formats&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The flexibility in the data format allows each Signer to customize the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; User Experience based on its respective capabilities.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ====Key Derivation====&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The key derivation function is [&lt;a href=&#34;https://tools.ietf.org/html/rfc2898&#34;&gt;https://tools.ietf.org/html/rfc2898&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; PBKDF2], with PRF = SHA512. Specifically:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;DK = PBKDF2(PRF, Password, Salt, c, dkLen)&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Whereas:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * PRF = &amp;lt;tt&amp;gt;SHA512&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * Password = &amp;lt;tt&amp;gt;&amp;#34;No SPOF&amp;#34;&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * Salt = &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * c = &amp;lt;tt&amp;gt;2048&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * dkLen = &amp;lt;tt&amp;gt;256&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * DK = Derived &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ====Encryption Scheme====&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The encryption scheme is [&lt;a href=&#34;https://tools.ietf.org/html/rfc3686&#34;&gt;https://tools.ietf.org/html/rfc3686&lt;/a&gt; AES, CTR&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mode].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ==QR Codes==&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; For signers that use QR codes to transmit data, key and descriptor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; records can be converted to QR codes, following [&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the BCR standard].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Also refer to [&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; UR Type Definition for BIP44 Accounts] and [&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; UR Type Definition for Bitcoin Output Descriptors] for more details.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ==Security==&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This proposal introduces two layers of protection. The first one is a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; temporary, secret token, used to encrypt the two rounds of communication&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; between the Signer and the Coordinator. The second one is through the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; descriptor checksum and visual inspection of the descriptor itself.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The token is only needed during the setup phase, and can be safely&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; thrown away afterwards. The token does not guarantee that the Signer&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; membership set is not modified, since that depends on the overall security&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of all parties in the setup, but it can make it significantly harder for an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; attacker to do so.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; There are three ways an attacker can modify the membership set: by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; changing an existing member, by removing an existing member, or by adding a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; new member.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; For the first two methods, one of the Signers will be able to detect&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that its membership has been changed or removed, and reject the final&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; descriptor. Thus, it is vital that all participating Signers check that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; their membership is intact in the descriptor. Even one Signer failing to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; check for its membership means that the setup could be compromised.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; For the third type of attack, the descriptor checksum and visual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; inspection of the descriptor itself are the only way to guard against&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; malicious members from being inserted into the set.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ==Acknowledgement==&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Special thanks to Dmitry Petukhov, Christopher Allen, Craig Raw and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; others for their feedback on the specification.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ==References==&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Original mailing list thread:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018385.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018385.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210215/e33af953/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210215/e33af953/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:28:41&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsr3505cqfaaz6q6tw0agm0q8al99rltx5qmgmgfk6shp4uh5j595qzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsc3us0g</id>
    
      <title type="html">📅 Original date posted:2021-02-15 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsr3505cqfaaz6q6tw0agm0q8al99rltx5qmgmgfk6shp4uh5j595qzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsc3us0g" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszjudvjhcpx77fzv9xt8rhnltz8w8zm4h3tqp9qymt9gc6w0s3vygp6xdqj&#39;&gt;nevent1q…xdqj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-02-15&lt;br/&gt;📝 Original message:Hi Craig,&lt;br/&gt;Thanks for the feedback! Sharing my comments inline.&lt;br/&gt;&lt;br/&gt;On Mon, Feb 15, 2021 at 5:53 AM Craig Raw &amp;lt;craigraw at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hugo and I have discussed off-list, and I have two concerns with this&lt;br/&gt;&amp;gt; proposal:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. I believe adding the TOKEN and encryption to the exchange adds&lt;br/&gt;&amp;gt; complexity to already notoriously complex multisig, without adding much in&lt;br/&gt;&amp;gt; the way of security.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I disagree that this doesn&amp;#39;t add security. This proposal was inspired by a&lt;br/&gt;real vulnerability we discovered in the wild while experimenting with HWWs,&lt;br/&gt;and during that process I noticed that there is little in the way of a an&lt;br/&gt;attacker to pull off a MITM attack, where he/she can intercept and tamper&lt;br/&gt;with the multisig configuration file, potentially swapping in their own&lt;br/&gt;XPUBs. This is especially important for remote multisig setups - which is&lt;br/&gt;not common now but I imagine will be a lot more common in the future.&lt;br/&gt;&lt;br/&gt;This is because the shared secret (TOKEN) must still be shared securely,&lt;br/&gt;&amp;gt; and if you have established an (off-protocol) secure channel to do this,&lt;br/&gt;&amp;gt; why not just share the actual multisig configuration data directly in that&lt;br/&gt;&amp;gt; channel?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Because multisig is inherently an interactive process. If we can create the&lt;br/&gt;multisig configuration in one shot for everybody, you&amp;#39;re correct that this&lt;br/&gt;is not necessary! But the fact that multisig is by nature interactive and&lt;br/&gt;requires a few rounds of communication (since it needs each Signer to&lt;br/&gt;voluntarily share its XPUB before a wallet can be created) makes this&lt;br/&gt;necessary IMO.&lt;br/&gt;&lt;br/&gt;If you are able to do so, you retain the advantage of being able to inspect&lt;br/&gt;&amp;gt; the data directly.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Note that some manual inspection is still part of the proposal. But instead&lt;br/&gt;of exclusively relying on manual inspection (which is error-prone, and also&lt;br/&gt;doesn&amp;#39;t scale very well for a large number of signers), we strengthen this&lt;br/&gt;process by automating some of the checks and making it harder to tamper&lt;br/&gt;with.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. Asking the user to enter the derivation into the Signer also adds (IMO&lt;br/&gt;&amp;gt; unnecessary) complexity to the multisig setup process. A different way of&lt;br/&gt;&amp;gt; doing it, which is specified in the UR crypto-account format linked to&lt;br/&gt;&amp;gt; previously, has the Signer provide as many common derivations (along with&lt;br/&gt;&amp;gt; their xpubs) as it can support for a given BIP44 account number. This has&lt;br/&gt;&amp;gt; the dual advantage of making things simpler for the user (they only have to&lt;br/&gt;&amp;gt; provide an optional account number) and increasing the standardisation on&lt;br/&gt;&amp;gt; common derivation paths. On receiving these derivation/xpub pairs, the&lt;br/&gt;&amp;gt; Coordinator can simply pick the appropriate one.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Note that in the updated proposal, I added the option of the Signer&lt;br/&gt;automatically filling in the derivation paths on behalf of the user (and&lt;br/&gt;also should take care not to reuse XPUBs). Perhaps this can be made the&lt;br/&gt;default behavior.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; These concerns noted, I agree it&amp;#39;s a good idea to have Signers save the&lt;br/&gt;&amp;gt; multisig configuration as proposed, and it would be great to have&lt;br/&gt;&amp;gt; standardisation in hww import and export formats (not just for multisig).&lt;br/&gt;&amp;gt; On that note, I&amp;#39;d love to see greater adoption of the efficient UR2.0&lt;br/&gt;&amp;gt; standard and associated formats for airgapped data transmission using QR&lt;br/&gt;&amp;gt; codes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Craig&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Mon, Feb 15, 2021 at 11:13 AM Hugo Nguyen via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&amp;gt; I have updated the proposal based on further feedback. The new spec is&lt;br/&gt;&amp;gt;&amp;gt; included at the bottom.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I have also created a public Github PR to make it easier to comment on&lt;br/&gt;&amp;gt;&amp;gt; the text of the spec itself: &lt;a href=&#34;https://github.com/nunchuk-io/bips/pull/1&#34;&gt;https://github.com/nunchuk-io/bips/pull/1&lt;/a&gt; .&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Could someone please let me know what else needs to be done before a BIP&lt;br/&gt;&amp;gt;&amp;gt; number can be assigned?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; === Quick summary of changes from last update ===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 1. Define encryption modes&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # NO_ENCRYPTION: Encryption is disabled.&lt;br/&gt;&amp;gt;&amp;gt; # STANDARD : the TOKEN is a 64-bit nonce.&lt;br/&gt;&amp;gt;&amp;gt; # EXTENDED : the TOKEN is a 128-bit nonce.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 2. Define signature algorithm&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Follow BIP-0322, legacy format allowed.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 3. Multiple TOKENs (optional)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Also add an option where the Coordinator can choose to use one common&lt;br/&gt;&amp;gt;&amp;gt; TOKEN for all Signers, or use one per Signer.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; === End of summary ===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt;&amp;gt; Hugo&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   BIP: To be determined&lt;br/&gt;&amp;gt;&amp;gt;   Layer: Applications&lt;br/&gt;&amp;gt;&amp;gt;   Title: Bitcoin Secure Multisig Setup (BSMS)&lt;br/&gt;&amp;gt;&amp;gt;   Author: Hugo Nguyen &amp;lt;hugo at nunchuk.io&amp;gt;, Peter Gray &amp;lt;peter at&lt;br/&gt;&amp;gt;&amp;gt; coinkite.com&amp;gt;, Marko Bencun &amp;lt;marko at shiftcrypto.ch&amp;gt;, Pavol Rusnak &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; stick at satoshilabs.com&amp;gt;, Aaron Chen &amp;lt;aarondongchen at gmail.com&amp;gt;, Rodolfo&lt;br/&gt;&amp;gt;&amp;gt; Novak &amp;lt;rodolfo at coinkite.com&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   Comments-Summary: No comments yet.&lt;br/&gt;&amp;gt;&amp;gt;   Comments-URI:&lt;br/&gt;&amp;gt;&amp;gt;   Status: Proposed&lt;br/&gt;&amp;gt;&amp;gt;   Type: Standards Track&lt;br/&gt;&amp;gt;&amp;gt;   Created: 2020-11-10&lt;br/&gt;&amp;gt;&amp;gt;   License: BSD-2-Clause&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ==Introduction==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Abstract===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This document proposes a mechanism to set up multisig wallets securely.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Copyright===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This BIP is licensed under the 2-clause BSD license.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Motivation===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The Bitcoin multisig experience has been greatly streamlined under [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&lt;/a&gt; BIP-0174&lt;br/&gt;&amp;gt;&amp;gt; (Partially Signed Bitcoin Transaction)]. However, what is still missing&lt;br/&gt;&amp;gt;&amp;gt; is a standardized process for setting up multisig wallets securely across&lt;br/&gt;&amp;gt;&amp;gt; different vendors.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; There are a number of concerns when it comes to setting up a multisig&lt;br/&gt;&amp;gt;&amp;gt; wallet:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # Whether the multisig configuration, such as Signer membership, script&lt;br/&gt;&amp;gt;&amp;gt; type, derivation paths and number of signatures required, is correct and&lt;br/&gt;&amp;gt;&amp;gt; not tampered with.&lt;br/&gt;&amp;gt;&amp;gt; # Whether Signer persists the multisig configuration in their respective&lt;br/&gt;&amp;gt;&amp;gt; storage, and under what format.&lt;br/&gt;&amp;gt;&amp;gt; # Whether Signer&amp;#39;s storage is tamper-proof.&lt;br/&gt;&amp;gt;&amp;gt; # Whether Signer subsequently uses the multisig configuration to generate&lt;br/&gt;&amp;gt;&amp;gt; and verify receive and change addresses.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; An attacker who can modify the multisig configuration can steal or hold&lt;br/&gt;&amp;gt;&amp;gt; funds to ransom by duping the user into sending funds to the wrong address.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This proposal seeks to address concerns #1 and #2: to mitigate the risk&lt;br/&gt;&amp;gt;&amp;gt; of tampering during the initial setup phase, and to define an interoperable&lt;br/&gt;&amp;gt;&amp;gt; multisig configuration format.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Concerns #3 and #4 should be handled by Signers and is out of scope of&lt;br/&gt;&amp;gt;&amp;gt; this proposal.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ==Specification==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Prerequisites===&lt;br/&gt;&amp;gt;&amp;gt; This proposal assumes the parties in the multisig support [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; BIP-0032], [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&lt;/a&gt; the&lt;br/&gt;&amp;gt;&amp;gt; descriptor language] and encryption.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Roles===&lt;br/&gt;&amp;gt;&amp;gt; ====Coordinator====&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The Coordinator initiates the multisig setup. The Coordinator determines&lt;br/&gt;&amp;gt;&amp;gt; what type of multisig is used and the exact policy script. If encryption is&lt;br/&gt;&amp;gt;&amp;gt; enabled, the Coordinator also distributes a shared secret or shared secrets&lt;br/&gt;&amp;gt;&amp;gt; to the parties involved for secure communication. The Coordinator gathers&lt;br/&gt;&amp;gt;&amp;gt; information from the Signers to generate a descriptor record. The&lt;br/&gt;&amp;gt;&amp;gt; Coordinator distributes the descriptor record back to the Signers.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ====Signer====&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The Signer is a participating member in the multisig. Its&lt;br/&gt;&amp;gt;&amp;gt; responsibilities include providing its key record -- which contains an&lt;br/&gt;&amp;gt;&amp;gt; Extended Public Key (XPUB) -- to the Coordinator, verifying that its XPUB&lt;br/&gt;&amp;gt;&amp;gt; is included in the descriptor record and persisting the descriptor record&lt;br/&gt;&amp;gt;&amp;gt; in its storage.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Setup Process===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ====Round 1====&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; =====Coordinator=====&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * The Coordinator creates a multisig wallet creation session. The&lt;br/&gt;&amp;gt;&amp;gt; Coordinator constructs the multisig script and its policy parameters, such&lt;br/&gt;&amp;gt;&amp;gt; as the total number of signers and the required number of signatures&lt;br/&gt;&amp;gt;&amp;gt; (&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;).&lt;br/&gt;&amp;gt;&amp;gt; * The session should expire after some time period determined by the&lt;br/&gt;&amp;gt;&amp;gt; Coordinator, e.g., 24 hours.&lt;br/&gt;&amp;gt;&amp;gt; * If encryption is enabled, the Coordinator distributes a secret&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; to each Signer over a secure channel. The Signer can use the&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; to derive an &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;. Refer to the&lt;br/&gt;&amp;gt;&amp;gt; Encryption section below for details on the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;, the key&lt;br/&gt;&amp;gt;&amp;gt; derivation function and the encryption scheme. Depending on the use case,&lt;br/&gt;&amp;gt;&amp;gt; the Coordinator can decide whether to share one common &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; for&lt;br/&gt;&amp;gt;&amp;gt; all Signers, or to have one per Signer.&lt;br/&gt;&amp;gt;&amp;gt; * If encryption is disabled, &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set to &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;, and all&lt;br/&gt;&amp;gt;&amp;gt; the encryption/decryption steps below can be skipped.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; =====Signer=====&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * The Signer initiates a new secure multisig setup session by setting the&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The Signer derives an &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; from the&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The Signer can keep the session open until a different&lt;br/&gt;&amp;gt;&amp;gt; value for the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set.&lt;br/&gt;&amp;gt;&amp;gt; * The Signer generates a key record by prompting the user for a multisig&lt;br/&gt;&amp;gt;&amp;gt; derivation path and retrieves the XPUB at that derivation path. Optionally,&lt;br/&gt;&amp;gt;&amp;gt; the Signer can choose a path on behalf of the user. If the Signer chooses&lt;br/&gt;&amp;gt;&amp;gt; the path, it should try to avoid reusing XPUBs for different wallets.&lt;br/&gt;&amp;gt;&amp;gt; * The first line in the record must be the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The second&lt;br/&gt;&amp;gt;&amp;gt; line must be the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; is an XPUB plus its key&lt;br/&gt;&amp;gt;&amp;gt; origin information, written in the descriptor-defined format, i.e.:&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;[{master key fingerprint}/{derivation path}]{XPUB}&amp;lt;/tt&amp;gt;. The third line&lt;br/&gt;&amp;gt;&amp;gt; must be a &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt;, whereas &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt; is the signature generated by&lt;br/&gt;&amp;gt;&amp;gt; using the private key associated with the XPUB to sign the first two&lt;br/&gt;&amp;gt;&amp;gt; lines.  The signature should follow [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; BIP-0322], legacy format accepted. Finally, the Signer encrypts the entire&lt;br/&gt;&amp;gt;&amp;gt; record with &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ====Round 2====&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; =====Coordinator=====&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * The Coordinator gathers key records from all participating Signers.&lt;br/&gt;&amp;gt;&amp;gt; Abort the setup if the wallet setup session has expired.&lt;br/&gt;&amp;gt;&amp;gt; * For each key record, the Coordinator decrypts it using&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;. The Coordinator verifies that the included&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt; is valid given the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt; * If all key records look good, the Coordinator fills in all necessary&lt;br/&gt;&amp;gt;&amp;gt; information to generate a descriptor record, which is simply the descriptor&lt;br/&gt;&amp;gt;&amp;gt; string plus a &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, all in one line. The &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt; has&lt;br/&gt;&amp;gt;&amp;gt; [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; BECH32 encoding].&lt;br/&gt;&amp;gt;&amp;gt; * The Coordinator encrypts this descriptor record with&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt; * The Coordinator sends the encrypted descriptor record to all&lt;br/&gt;&amp;gt;&amp;gt; participating Signers.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; =====Signer=====&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * The Signer imports the descriptor record, decrypts it using the&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; derived from the open session.&lt;br/&gt;&amp;gt;&amp;gt; * The Signer calculates and verifies the descriptor’s &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt; Abort the setup if the &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt; is incorrect.&lt;br/&gt;&amp;gt;&amp;gt; * The Signer checks whether one of the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;s in the descriptor&lt;br/&gt;&amp;gt;&amp;gt; belongs to it, using path and fingerprint information included in the&lt;br/&gt;&amp;gt;&amp;gt; descriptor. The check must perform an exact match on the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;s, and&lt;br/&gt;&amp;gt;&amp;gt; not using shortcuts such as matching fingerprints (which is trivial to&lt;br/&gt;&amp;gt;&amp;gt; spoof). Abort the setup if it doesn’t detect its own &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt; * For confirmation, the Signer must display to the user the&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, plus other configurations, such as &amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt; and&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;. The total number of Signers, &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;, is important to&lt;br/&gt;&amp;gt;&amp;gt; prevent a &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; insertion attack. All participating Signers should&lt;br/&gt;&amp;gt;&amp;gt; be able to display the same confirmation.&lt;br/&gt;&amp;gt;&amp;gt; * If all checks pass, the Signer persists the descriptor record in its&lt;br/&gt;&amp;gt;&amp;gt; storage.&lt;br/&gt;&amp;gt;&amp;gt; * The Signer can choose to further restrict post-XPUB derivation paths,&lt;br/&gt;&amp;gt;&amp;gt; such as to those defined in [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki&lt;/a&gt; BIP-0044].&lt;br/&gt;&amp;gt;&amp;gt; * The Signer should subsequently use the descriptor to generate and&lt;br/&gt;&amp;gt;&amp;gt; verify receive and change addresses.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This completes the setup.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Encryption===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ====The Token====&lt;br/&gt;&amp;gt;&amp;gt; We define three modes of encryption.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # &amp;lt;tt&amp;gt;NO_ENCRYPTION&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set to &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt; Encryption is disabled.&lt;br/&gt;&amp;gt;&amp;gt; # &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is a 64-bit nonce.&lt;br/&gt;&amp;gt;&amp;gt; # &amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is a 128-bit nonce.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; can be converted to one of these formats:&lt;br/&gt;&amp;gt;&amp;gt; * A mnemonic phrase using [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&lt;/a&gt; BIP-0039]&lt;br/&gt;&amp;gt;&amp;gt; word list (6 words in &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; mode, 12 words in &amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; mode)&lt;br/&gt;&amp;gt;&amp;gt; * A decimal number (20 digits in &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; mode, 40 digits in&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; mode)&lt;br/&gt;&amp;gt;&amp;gt; * A QR code&lt;br/&gt;&amp;gt;&amp;gt; * Other formats&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The flexibility in the data format allows each Signer to customize the&lt;br/&gt;&amp;gt;&amp;gt; User Experience based on its respective capabilities.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ====Key Derivation====&lt;br/&gt;&amp;gt;&amp;gt; The key derivation function is [&lt;a href=&#34;https://tools.ietf.org/html/rfc2898&#34;&gt;https://tools.ietf.org/html/rfc2898&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; PBKDF2], with PRF = SHA512. Specifically:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;DK = PBKDF2(PRF, Password, Salt, c, dkLen)&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Whereas:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * PRF = &amp;lt;tt&amp;gt;SHA512&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * Password = &amp;lt;tt&amp;gt;&amp;#34;No SPOF&amp;#34;&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * Salt = &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * c = &amp;lt;tt&amp;gt;2048&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * dkLen = &amp;lt;tt&amp;gt;256&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * DK = Derived &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ====Encryption Scheme====&lt;br/&gt;&amp;gt;&amp;gt; The encryption scheme is [&lt;a href=&#34;https://tools.ietf.org/html/rfc3686&#34;&gt;https://tools.ietf.org/html/rfc3686&lt;/a&gt; AES, CTR&lt;br/&gt;&amp;gt;&amp;gt; mode].&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ==QR Codes==&lt;br/&gt;&amp;gt;&amp;gt; For signers that use QR codes to transmit data, key and descriptor&lt;br/&gt;&amp;gt;&amp;gt; records can be converted to QR codes, following [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; the BCR standard].&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Also refer to [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; UR Type Definition for BIP44 Accounts] and [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; UR Type Definition for Bitcoin Output Descriptors] for more details.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ==Security==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This proposal introduces two layers of protection. The first one is a&lt;br/&gt;&amp;gt;&amp;gt; temporary, secret token, used to encrypt the two rounds of communication&lt;br/&gt;&amp;gt;&amp;gt; between the Signer and the Coordinator. The second one is through the&lt;br/&gt;&amp;gt;&amp;gt; descriptor checksum and visual inspection of the descriptor itself.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The token is only needed during the setup phase, and can be safely thrown&lt;br/&gt;&amp;gt;&amp;gt; away afterwards. The token does not guarantee that the Signer membership&lt;br/&gt;&amp;gt;&amp;gt; set is not modified, since that depends on the overall security of all&lt;br/&gt;&amp;gt;&amp;gt; parties in the setup, but it can make it significantly harder for an&lt;br/&gt;&amp;gt;&amp;gt; attacker to do so.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; There are three ways an attacker can modify the membership set: by&lt;br/&gt;&amp;gt;&amp;gt; changing an existing member, by removing an existing member, or by adding a&lt;br/&gt;&amp;gt;&amp;gt; new member.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For the first two methods, one of the Signers will be able to detect that&lt;br/&gt;&amp;gt;&amp;gt; its membership has been changed or removed, and reject the final&lt;br/&gt;&amp;gt;&amp;gt; descriptor. Thus, it is vital that all participating Signers check that&lt;br/&gt;&amp;gt;&amp;gt; their membership is intact in the descriptor. Even one Signer failing to&lt;br/&gt;&amp;gt;&amp;gt; check for its membership means that the setup could be compromised.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For the third type of attack, the descriptor checksum and visual&lt;br/&gt;&amp;gt;&amp;gt; inspection of the descriptor itself are the only way to guard against&lt;br/&gt;&amp;gt;&amp;gt; malicious members from being inserted into the set.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ==Acknowledgement==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Special thanks to Dmitry Petukhov, Christopher Allen, Craig Raw and&lt;br/&gt;&amp;gt;&amp;gt; others for their feedback on the specification.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ==References==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Original mailing list thread:&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018385.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018385.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210215/5675d8e2/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210215/5675d8e2/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:28:41&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsd3lar8vyezpdx3ywe0c0fhvpt98fvr93u8vr573p4ha2q5sw3daczyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsyqued8</id>
    
      <title type="html">📅 Original date posted:2021-02-15 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsd3lar8vyezpdx3ywe0c0fhvpt98fvr93u8vr573p4ha2q5sw3daczyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsyqued8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2eema328hu4m4xat3j483nd3vdn7u7ft3a64en64vxgemndctcvsgdrz82&#39;&gt;nevent1q…rz82&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-02-15&lt;br/&gt;📝 Original message:Hi all,&lt;br/&gt;I have updated the proposal based on further feedback. The new spec is&lt;br/&gt;included at the bottom.&lt;br/&gt;&lt;br/&gt;I have also created a public Github PR to make it easier to comment on the&lt;br/&gt;text of the spec itself: &lt;a href=&#34;https://github.com/nunchuk-io/bips/pull/1&#34;&gt;https://github.com/nunchuk-io/bips/pull/1&lt;/a&gt; .&lt;br/&gt;&lt;br/&gt;Could someone please let me know what else needs to be done before a BIP&lt;br/&gt;number can be assigned?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;=== Quick summary of changes from last update ===&lt;br/&gt;&lt;br/&gt;1. Define encryption modes&lt;br/&gt;&lt;br/&gt;# NO_ENCRYPTION: Encryption is disabled.&lt;br/&gt;# STANDARD : the TOKEN is a 64-bit nonce.&lt;br/&gt;# EXTENDED : the TOKEN is a 128-bit nonce.&lt;br/&gt;&lt;br/&gt;2. Define signature algorithm&lt;br/&gt;&lt;br/&gt;Follow BIP-0322, legacy format allowed.&lt;br/&gt;&lt;br/&gt;3. Multiple TOKENs (optional)&lt;br/&gt;&lt;br/&gt;Also add an option where the Coordinator can choose to use one common TOKEN&lt;br/&gt;for all Signers, or use one per Signer.&lt;br/&gt;&lt;br/&gt;=== End of summary ===&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;  BIP: To be determined&lt;br/&gt;  Layer: Applications&lt;br/&gt;  Title: Bitcoin Secure Multisig Setup (BSMS)&lt;br/&gt;  Author: Hugo Nguyen &amp;lt;hugo at nunchuk.io&amp;gt;, Peter Gray &amp;lt;peter at&lt;br/&gt;coinkite.com&amp;gt;, Marko Bencun &amp;lt;marko at shiftcrypto.ch&amp;gt;, Pavol Rusnak &amp;lt;&lt;br/&gt;stick at satoshilabs.com&amp;gt;, Aaron Chen &amp;lt;aarondongchen at gmail.com&amp;gt;, Rodolfo&lt;br/&gt;Novak &amp;lt;rodolfo at coinkite.com&amp;gt;&lt;br/&gt;  Comments-Summary: No comments yet.&lt;br/&gt;  Comments-URI:&lt;br/&gt;  Status: Proposed&lt;br/&gt;  Type: Standards Track&lt;br/&gt;  Created: 2020-11-10&lt;br/&gt;  License: BSD-2-Clause&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Introduction==&lt;br/&gt;&lt;br/&gt;===Abstract===&lt;br/&gt;&lt;br/&gt;This document proposes a mechanism to set up multisig wallets securely.&lt;br/&gt;&lt;br/&gt;===Copyright===&lt;br/&gt;&lt;br/&gt;This BIP is licensed under the 2-clause BSD license.&lt;br/&gt;&lt;br/&gt;===Motivation===&lt;br/&gt;&lt;br/&gt;The Bitcoin multisig experience has been greatly streamlined under [&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&lt;/a&gt; BIP-0174&lt;br/&gt;(Partially Signed Bitcoin Transaction)]. However, what is still missing is&lt;br/&gt;a standardized process for setting up multisig wallets securely across&lt;br/&gt;different vendors.&lt;br/&gt;&lt;br/&gt;There are a number of concerns when it comes to setting up a multisig&lt;br/&gt;wallet:&lt;br/&gt;&lt;br/&gt;# Whether the multisig configuration, such as Signer membership, script&lt;br/&gt;type, derivation paths and number of signatures required, is correct and&lt;br/&gt;not tampered with.&lt;br/&gt;# Whether Signer persists the multisig configuration in their respective&lt;br/&gt;storage, and under what format.&lt;br/&gt;# Whether Signer&amp;#39;s storage is tamper-proof.&lt;br/&gt;# Whether Signer subsequently uses the multisig configuration to generate&lt;br/&gt;and verify receive and change addresses.&lt;br/&gt;&lt;br/&gt;An attacker who can modify the multisig configuration can steal or hold&lt;br/&gt;funds to ransom by duping the user into sending funds to the wrong address.&lt;br/&gt;&lt;br/&gt;This proposal seeks to address concerns #1 and #2: to mitigate the risk of&lt;br/&gt;tampering during the initial setup phase, and to define an interoperable&lt;br/&gt;multisig configuration format.&lt;br/&gt;&lt;br/&gt;Concerns #3 and #4 should be handled by Signers and is out of scope of this&lt;br/&gt;proposal.&lt;br/&gt;&lt;br/&gt;==Specification==&lt;br/&gt;&lt;br/&gt;===Prerequisites===&lt;br/&gt;This proposal assumes the parties in the multisig support [&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&lt;/a&gt; BIP-0032], [&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&lt;/a&gt; the&lt;br/&gt;descriptor language] and encryption.&lt;br/&gt;&lt;br/&gt;===Roles===&lt;br/&gt;====Coordinator====&lt;br/&gt;&lt;br/&gt;The Coordinator initiates the multisig setup. The Coordinator determines&lt;br/&gt;what type of multisig is used and the exact policy script. If encryption is&lt;br/&gt;enabled, the Coordinator also distributes a shared secret or shared secrets&lt;br/&gt;to the parties involved for secure communication. The Coordinator gathers&lt;br/&gt;information from the Signers to generate a descriptor record. The&lt;br/&gt;Coordinator distributes the descriptor record back to the Signers.&lt;br/&gt;&lt;br/&gt;====Signer====&lt;br/&gt;&lt;br/&gt;The Signer is a participating member in the multisig. Its responsibilities&lt;br/&gt;include providing its key record -- which contains an Extended Public Key&lt;br/&gt;(XPUB) -- to the Coordinator, verifying that its XPUB is included in the&lt;br/&gt;descriptor record and persisting the descriptor record in its storage.&lt;br/&gt;&lt;br/&gt;===Setup Process===&lt;br/&gt;&lt;br/&gt;====Round 1====&lt;br/&gt;&lt;br/&gt;=====Coordinator=====&lt;br/&gt;&lt;br/&gt;* The Coordinator creates a multisig wallet creation session. The&lt;br/&gt;Coordinator constructs the multisig script and its policy parameters, such&lt;br/&gt;as the total number of signers and the required number of signatures&lt;br/&gt;(&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;).&lt;br/&gt;* The session should expire after some time period determined by the&lt;br/&gt;Coordinator, e.g., 24 hours.&lt;br/&gt;* If encryption is enabled, the Coordinator distributes a secret&lt;br/&gt;&amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; to each Signer over a secure channel. The Signer can use the&lt;br/&gt;&amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; to derive an &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;. Refer to the&lt;br/&gt;Encryption section below for details on the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;, the key&lt;br/&gt;derivation function and the encryption scheme. Depending on the use case,&lt;br/&gt;the Coordinator can decide whether to share one common &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; for&lt;br/&gt;all Signers, or to have one per Signer.&lt;br/&gt;* If encryption is disabled, &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set to &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;, and all&lt;br/&gt;the encryption/decryption steps below can be skipped.&lt;br/&gt;&lt;br/&gt;=====Signer=====&lt;br/&gt;&lt;br/&gt;* The Signer initiates a new secure multisig setup session by setting the&lt;br/&gt;&amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The Signer derives an &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; from the&lt;br/&gt;&amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The Signer can keep the session open until a different&lt;br/&gt;value for the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set.&lt;br/&gt;* The Signer generates a key record by prompting the user for a multisig&lt;br/&gt;derivation path and retrieves the XPUB at that derivation path. Optionally,&lt;br/&gt;the Signer can choose a path on behalf of the user. If the Signer chooses&lt;br/&gt;the path, it should try to avoid reusing XPUBs for different wallets.&lt;br/&gt;* The first line in the record must be the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. The second line&lt;br/&gt;must be the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; is an XPUB plus its key origin&lt;br/&gt;information, written in the descriptor-defined format, i.e.: &amp;lt;tt&amp;gt;[{master&lt;br/&gt;key fingerprint}/{derivation path}]{XPUB}&amp;lt;/tt&amp;gt;. The third line must be a&lt;br/&gt;&amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt;, whereas &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt; is the signature generated by using the&lt;br/&gt;private key associated with the XPUB to sign the first two lines.  The&lt;br/&gt;signature should follow [&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki&lt;/a&gt; BIP-0322],&lt;br/&gt;legacy format accepted. Finally, the Signer encrypts the entire record with&lt;br/&gt;&amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;====Round 2====&lt;br/&gt;&lt;br/&gt;=====Coordinator=====&lt;br/&gt;&lt;br/&gt;* The Coordinator gathers key records from all participating Signers. Abort&lt;br/&gt;the setup if the wallet setup session has expired.&lt;br/&gt;* For each key record, the Coordinator decrypts it using&lt;br/&gt;&amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;. The Coordinator verifies that the included&lt;br/&gt;&amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt; is valid given the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;* If all key records look good, the Coordinator fills in all necessary&lt;br/&gt;information to generate a descriptor record, which is simply the descriptor&lt;br/&gt;string plus a &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, all in one line. The &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt; has&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&lt;/a&gt;&lt;br/&gt;BECH32 encoding].&lt;br/&gt;* The Coordinator encrypts this descriptor record with&lt;br/&gt;&amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;* The Coordinator sends the encrypted descriptor record to all&lt;br/&gt;participating Signers.&lt;br/&gt;&lt;br/&gt;=====Signer=====&lt;br/&gt;&lt;br/&gt;* The Signer imports the descriptor record, decrypts it using the&lt;br/&gt;&amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt; derived from the open session.&lt;br/&gt;* The Signer calculates and verifies the descriptor’s &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;.&lt;br/&gt;Abort the setup if the &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt; is incorrect.&lt;br/&gt;* The Signer checks whether one of the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;s in the descriptor&lt;br/&gt;belongs to it, using path and fingerprint information included in the&lt;br/&gt;descriptor. The check must perform an exact match on the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;s, and&lt;br/&gt;not using shortcuts such as matching fingerprints (which is trivial to&lt;br/&gt;spoof). Abort the setup if it doesn’t detect its own &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;.&lt;br/&gt;* For confirmation, the Signer must display to the user the&lt;br/&gt;&amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, plus other configurations, such as &amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt; and&lt;br/&gt;&amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;. The total number of Signers, &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;, is important to&lt;br/&gt;prevent a &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; insertion attack. All participating Signers should&lt;br/&gt;be able to display the same confirmation.&lt;br/&gt;* If all checks pass, the Signer persists the descriptor record in its&lt;br/&gt;storage.&lt;br/&gt;* The Signer can choose to further restrict post-XPUB derivation paths,&lt;br/&gt;such as to those defined in [&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki&lt;/a&gt; BIP-0044].&lt;br/&gt;* The Signer should subsequently use the descriptor to generate and verify&lt;br/&gt;receive and change addresses.&lt;br/&gt;&lt;br/&gt;This completes the setup.&lt;br/&gt;&lt;br/&gt;===Encryption===&lt;br/&gt;&lt;br/&gt;====The Token====&lt;br/&gt;We define three modes of encryption.&lt;br/&gt;&lt;br/&gt;# &amp;lt;tt&amp;gt;NO_ENCRYPTION&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is set to &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;.&lt;br/&gt;Encryption is disabled.&lt;br/&gt;# &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is a 64-bit nonce.&lt;br/&gt;# &amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; : the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; is a 128-bit nonce.&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt; can be converted to one of these formats:&lt;br/&gt;* A mnemonic phrase using [&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&lt;/a&gt; BIP-0039]&lt;br/&gt;word list (6 words in &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; mode, 12 words in &amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt;&lt;br/&gt;mode)&lt;br/&gt;* A decimal number (20 digits in &amp;lt;tt&amp;gt;STANDARD&amp;lt;/tt&amp;gt; mode, 40 digits in&lt;br/&gt;&amp;lt;tt&amp;gt;EXTENDED&amp;lt;/tt&amp;gt; mode)&lt;br/&gt;* A QR code&lt;br/&gt;* Other formats&lt;br/&gt;&lt;br/&gt;The flexibility in the data format allows each Signer to customize the User&lt;br/&gt;Experience based on its respective capabilities.&lt;br/&gt;&lt;br/&gt;====Key Derivation====&lt;br/&gt;The key derivation function is [&lt;a href=&#34;https://tools.ietf.org/html/rfc2898&#34;&gt;https://tools.ietf.org/html/rfc2898&lt;/a&gt;&lt;br/&gt;PBKDF2], with PRF = SHA512. Specifically:&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;DK = PBKDF2(PRF, Password, Salt, c, dkLen)&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;Whereas:&lt;br/&gt;&lt;br/&gt;* PRF = &amp;lt;tt&amp;gt;SHA512&amp;lt;/tt&amp;gt;&lt;br/&gt;* Password = &amp;lt;tt&amp;gt;&amp;#34;No SPOF&amp;#34;&amp;lt;/tt&amp;gt;&lt;br/&gt;* Salt = &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;&lt;br/&gt;* c = &amp;lt;tt&amp;gt;2048&amp;lt;/tt&amp;gt;&lt;br/&gt;* dkLen = &amp;lt;tt&amp;gt;256&amp;lt;/tt&amp;gt;&lt;br/&gt;* DK = Derived &amp;lt;tt&amp;gt;ENCRYPTION_KEY&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;====Encryption Scheme====&lt;br/&gt;The encryption scheme is [&lt;a href=&#34;https://tools.ietf.org/html/rfc3686&#34;&gt;https://tools.ietf.org/html/rfc3686&lt;/a&gt; AES, CTR&lt;br/&gt;mode].&lt;br/&gt;&lt;br/&gt;==QR Codes==&lt;br/&gt;For signers that use QR codes to transmit data, key and descriptor records&lt;br/&gt;can be converted to QR codes, following [&lt;br/&gt;&lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&lt;/a&gt;&lt;br/&gt;the BCR standard].&lt;br/&gt;&lt;br/&gt;Also refer to [&lt;br/&gt;&lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md&lt;/a&gt;&lt;br/&gt;UR Type Definition for BIP44 Accounts] and [&lt;br/&gt;&lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md&lt;/a&gt;&lt;br/&gt;UR Type Definition for Bitcoin Output Descriptors] for more details.&lt;br/&gt;&lt;br/&gt;==Security==&lt;br/&gt;&lt;br/&gt;This proposal introduces two layers of protection. The first one is a&lt;br/&gt;temporary, secret token, used to encrypt the two rounds of communication&lt;br/&gt;between the Signer and the Coordinator. The second one is through the&lt;br/&gt;descriptor checksum and visual inspection of the descriptor itself.&lt;br/&gt;&lt;br/&gt;The token is only needed during the setup phase, and can be safely thrown&lt;br/&gt;away afterwards. The token does not guarantee that the Signer membership&lt;br/&gt;set is not modified, since that depends on the overall security of all&lt;br/&gt;parties in the setup, but it can make it significantly harder for an&lt;br/&gt;attacker to do so.&lt;br/&gt;&lt;br/&gt;There are three ways an attacker can modify the membership set: by changing&lt;br/&gt;an existing member, by removing an existing member, or by adding a new&lt;br/&gt;member.&lt;br/&gt;&lt;br/&gt;For the first two methods, one of the Signers will be able to detect that&lt;br/&gt;its membership has been changed or removed, and reject the final&lt;br/&gt;descriptor. Thus, it is vital that all participating Signers check that&lt;br/&gt;their membership is intact in the descriptor. Even one Signer failing to&lt;br/&gt;check for its membership means that the setup could be compromised.&lt;br/&gt;&lt;br/&gt;For the third type of attack, the descriptor checksum and visual inspection&lt;br/&gt;of the descriptor itself are the only way to guard against malicious&lt;br/&gt;members from being inserted into the set.&lt;br/&gt;&lt;br/&gt;==Acknowledgement==&lt;br/&gt;&lt;br/&gt;Special thanks to Dmitry Petukhov, Christopher Allen, Craig Raw and others&lt;br/&gt;for their feedback on the specification.&lt;br/&gt;&lt;br/&gt;==References==&lt;br/&gt;&lt;br/&gt;Original mailing list thread:&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018385.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018385.html&lt;/a&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210215/0d58580e/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210215/0d58580e/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:28:39&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsypnpsu67pr0lrcl00zdwr0rmfs4anekugwygp40my7gty3z7q7xszyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hschyrsu</id>
    
      <title type="html">📅 Original date posted:2021-02-12 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsypnpsu67pr0lrcl00zdwr0rmfs4anekugwygp40my7gty3z7q7xszyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hschyrsu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstjtcw0t038l3vss6027watnun9umjtel0wf6c78tz7ws3wgy0kzg602js0&#39;&gt;nevent1q…2js0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-02-12&lt;br/&gt;📝 Original message:On Fri, Feb 12, 2021 at 9:36 AM Dmitry Petukhov &amp;lt;dp at simplexum.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; If HUMAN_READABLE_TITLE is the additional secret, the user would need&lt;br/&gt;&amp;gt; to enter it on the device in addition to the nonce, wouldn&amp;#39;t it defeat&lt;br/&gt;&amp;gt; the advantage in UX that was gained by using (relatively) short nonce ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Is 64 bit nonce not enough ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;Good question. If we don&amp;#39;t need the extra entropy, we can fix&lt;br/&gt;the HUMAN_READABLE_TITLE string.&lt;br/&gt;&lt;br/&gt;Something like &amp;#34;No SPOF&amp;#34;. (No Single Point Of Failure).&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; It seems that to crack this with fixed Pwd and 64 bit nonce, the&lt;br/&gt;&amp;gt; attacker will need to be about 10^15 more powerful than 80Mhz MCU:&lt;br/&gt;&amp;gt; (2^64)/(0.3*10^15)/3600 = 17 hours. I don&amp;#39;t know if 10^15 is realistic&lt;br/&gt;&amp;gt; scale. Average desktop cpu seems to be about 10^3 more powerful than&lt;br/&gt;&amp;gt; the mentioned MCU for this task.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Maybe for the UX it would be better to choose the number of rounds to&lt;br/&gt;&amp;gt; use in PBKDF2, instead of using variable Pwd. Number of rounds will be&lt;br/&gt;&amp;gt; easier to enter on the device (or just choose it from a set of&lt;br/&gt;&amp;gt; pre-defined values). The more money is at stake, the higher number of&lt;br/&gt;&amp;gt; rounds could the coordinator choose (taking into account the&lt;br/&gt;&amp;gt; characteristics of the participant devices)&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Or simply allow bigger entropy (more than 6 mnemonic words), if&lt;br/&gt;&amp;gt; the coordinator feels that 64 bit of entropy is not enough.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;That could work. Allowing variable iteration count is probably better&lt;br/&gt;UX-wise.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; В Fri, 12 Feb 2021 08:55:55 -0800&lt;br/&gt;&amp;gt; Hugo Nguyen &amp;lt;hugo at nunchuk.io&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Thanks everyone who has provided inputs so far!&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This is the new proposal for the encryption aspect of the scheme,&lt;br/&gt;&amp;gt; &amp;gt; based on all the feedback.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The key derivation function would be PBKDF2, with PRF = SHA512. This&lt;br/&gt;&amp;gt; &amp;gt; should be readily available on today&amp;#39;s hardware already, as they are&lt;br/&gt;&amp;gt; &amp;gt; used for BIP39.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; DK = PBKDF2(PRF, Password, Salt, c, dkLen)&lt;br/&gt;&amp;gt; &amp;gt; PRF = SHA512&lt;br/&gt;&amp;gt; &amp;gt; Pwd = HUMAN_READABLE_TITLE&lt;br/&gt;&amp;gt; &amp;gt; Salt = NONCE&lt;br/&gt;&amp;gt; &amp;gt; c = 2048&lt;br/&gt;&amp;gt; &amp;gt; dkLen = 256&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; HUMAN_READABLE_TITLE is in ASCII format, minimum length = 8, maximum&lt;br/&gt;&amp;gt; &amp;gt; length = 20.&lt;br/&gt;&amp;gt; &amp;gt; NONCE is a 64-bit number.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Reason for going with SHA512 is due to legacy support on some&lt;br/&gt;&amp;gt; &amp;gt; hardware. c=2048 also mimics BIP39. It takes about ~3 seconds to&lt;br/&gt;&amp;gt; &amp;gt; derive the encryption key on a 80Mhz MCU. We feel like this is a good&lt;br/&gt;&amp;gt; &amp;gt; enough tradeoff for this use case. The assumption here is that the&lt;br/&gt;&amp;gt; &amp;gt; secure session is only needed temporarily for a few hours, maybe up&lt;br/&gt;&amp;gt; &amp;gt; to one day.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The Coordinator and Signers agree and exchange these 2 secrets prior&lt;br/&gt;&amp;gt; &amp;gt; to the setup. The NONCE can be converted to either:&lt;br/&gt;&amp;gt; &amp;gt; (a) a 6-word phrase using BIP39 wordlist&lt;br/&gt;&amp;gt; &amp;gt; (b) a 20-digit decimal number&lt;br/&gt;&amp;gt; &amp;gt; (c) a QR code&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Depending on the vendor. This flexibility in the data format allows&lt;br/&gt;&amp;gt; &amp;gt; each vendor to customize the UX based on their respective device&lt;br/&gt;&amp;gt; &amp;gt; capabilities.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Best,&lt;br/&gt;&amp;gt; &amp;gt; Hugo&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On Thu, Feb 11, 2021 at 8:25 AM Dmitry Petukhov via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; &amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; В Thu, 11 Feb 2021 05:45:33 -0800&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Hugo Nguyen via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; ENCRYPTION_KEY = SHA256(SHA256(TOKEN))&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; This scheme might be vulnerable to rainbow table attack.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Thank you for pointing this out! Incidentally, Dmitry Petukhov&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; also told me the same privately.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; My thought was that if TOKEN has the characteristics of a password&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; (short ASCII string), then it would be better to use key derivation&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; function designed for passwords, like PBKDF2.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; The counter-argument to this is that this adds another code&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; dependency for vendors, if the device firmware does not already&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; have the required key derivation function.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Maybe this could be solved by going into opposite direction - make&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; the &amp;#34;token&amp;#34; even longer, use the mnemoic.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; The issue is that entering long data of the shared key into the&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; device manually is difficult UX-wise.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Hww vendors that allow to enter custom keys into their device&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; already have to face this issue, and those who allow to enter&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; custom keys via mnemonic probably tackled this somehow.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Maybe the shared key for multisig setup can be entered in the same&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; way ? (with maybe additional visual check via some fingerprint).&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Although we would then have another issue of potential confusion&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; between two procedures (entering the main key and entering the&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; shared key for multisig setup), and the measures has to be taken to&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; prevent such confusion.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; The approaches can be combined - specify a key derivation function&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; suitable for passwords; via secure channel, share a password and/or&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; the derived key. If hww supports derivation function, it can derive&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; the key from password. If hww supports only keys, the key can be&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; entered raw or via mnemonic.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210212/0c8f1ab1/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210212/0c8f1ab1/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:28:37&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsfd0l2r3zral0nj3kj0m7lgjsxfhta3hd00xlx9q8mhvc7lglmp6czyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsl3cmdw</id>
    
      <title type="html">📅 Original date posted:2021-02-12 📝 Original message:Thanks ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsfd0l2r3zral0nj3kj0m7lgjsxfhta3hd00xlx9q8mhvc7lglmp6czyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsl3cmdw" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0f6a77cnvq5slvt8h480y46nr5m3e9vh55ljufzahlwmt6zep4tqunmey3&#39;&gt;nevent1q…mey3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-02-12&lt;br/&gt;📝 Original message:Thanks everyone who has provided inputs so far!&lt;br/&gt;&lt;br/&gt;This is the new proposal for the encryption aspect of the scheme, based on&lt;br/&gt;all the feedback.&lt;br/&gt;&lt;br/&gt;The key derivation function would be PBKDF2, with PRF = SHA512. This should&lt;br/&gt;be readily available on today&amp;#39;s hardware already, as they are used for&lt;br/&gt;BIP39.&lt;br/&gt;&lt;br/&gt;DK = PBKDF2(PRF, Password, Salt, c, dkLen)&lt;br/&gt;PRF = SHA512&lt;br/&gt;Pwd = HUMAN_READABLE_TITLE&lt;br/&gt;Salt = NONCE&lt;br/&gt;c = 2048&lt;br/&gt;dkLen = 256&lt;br/&gt;&lt;br/&gt;HUMAN_READABLE_TITLE is in ASCII format, minimum length = 8, maximum length&lt;br/&gt;= 20.&lt;br/&gt;NONCE is a 64-bit number.&lt;br/&gt;&lt;br/&gt;Reason for going with SHA512 is due to legacy support on some hardware.&lt;br/&gt;c=2048 also mimics BIP39. It takes about ~3 seconds to derive&lt;br/&gt;the encryption key on a 80Mhz MCU. We feel like this is a good enough&lt;br/&gt;tradeoff for this use case. The assumption here is that the secure session&lt;br/&gt;is only needed temporarily for a few hours, maybe up to one day.&lt;br/&gt;&lt;br/&gt;The Coordinator and Signers agree and exchange these 2 secrets prior to the&lt;br/&gt;setup. The NONCE can be converted to either:&lt;br/&gt;(a) a 6-word phrase using BIP39 wordlist&lt;br/&gt;(b) a 20-digit decimal number&lt;br/&gt;(c) a QR code&lt;br/&gt;&lt;br/&gt;Depending on the vendor. This flexibility in the data format allows each&lt;br/&gt;vendor to customize the UX based on their respective device capabilities.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;On Thu, Feb 11, 2021 at 8:25 AM Dmitry Petukhov via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; В Thu, 11 Feb 2021 05:45:33 -0800&lt;br/&gt;&amp;gt; Hugo Nguyen via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; ENCRYPTION_KEY = SHA256(SHA256(TOKEN))&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; This scheme might be vulnerable to rainbow table attack.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Thank you for pointing this out! Incidentally, Dmitry Petukhov also&lt;br/&gt;&amp;gt; &amp;gt; told me the same privately.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My thought was that if TOKEN has the characteristics of a password&lt;br/&gt;&amp;gt; (short ASCII string), then it would be better to use key derivation&lt;br/&gt;&amp;gt; function designed for passwords, like PBKDF2.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The counter-argument to this is that this adds another code dependency&lt;br/&gt;&amp;gt; for vendors, if the device firmware does not already have the required&lt;br/&gt;&amp;gt; key derivation function.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Maybe this could be solved by going into opposite direction - make the&lt;br/&gt;&amp;gt; &amp;#34;token&amp;#34; even longer, use the mnemoic.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The issue is that entering long data of the shared key into the device&lt;br/&gt;&amp;gt; manually is difficult UX-wise.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hww vendors that allow to enter custom keys into their device already&lt;br/&gt;&amp;gt; have to face this issue, and those who allow to enter custom keys via&lt;br/&gt;&amp;gt; mnemonic probably tackled this somehow.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Maybe the shared key for multisig setup can be entered in the same way&lt;br/&gt;&amp;gt; ? (with maybe additional visual check via some fingerprint).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Although we would then have another issue of potential confusion&lt;br/&gt;&amp;gt; between two procedures (entering the main key and entering the shared&lt;br/&gt;&amp;gt; key for multisig setup), and the measures has to be taken to prevent&lt;br/&gt;&amp;gt; such confusion.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The approaches can be combined - specify a key derivation function&lt;br/&gt;&amp;gt; suitable for passwords; via secure channel, share a password and/or the&lt;br/&gt;&amp;gt; derived key. If hww supports derivation function, it can derive the key&lt;br/&gt;&amp;gt; from password. If hww supports only keys, the key can be entered raw or&lt;br/&gt;&amp;gt; via mnemonic.&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210212/cb8584f3/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210212/cb8584f3/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:28:36&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsggrpcg78pghe7mnv3u9h4a6w84ummzplxwgt2gcn4g2n8qqr293qzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsysnw42</id>
    
      <title type="html">📅 Original date posted:2021-02-11 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsggrpcg78pghe7mnv3u9h4a6w84ummzplxwgt2gcn4g2n8qqr293qzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsysnw42" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswj49xkfrah9zwp2veux54pmhp59zrukmld0nyvkfkhfrfqlk8g0qup89ct&#39;&gt;nevent1q…89ct&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-02-11&lt;br/&gt;📝 Original message:Hi Pavol,&lt;br/&gt;&lt;br/&gt;On Thu, Feb 11, 2021 at 5:25 AM Pavol Rusnak &amp;lt;stick at satoshilabs.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; ENCRYPTION_KEY = SHA256(SHA256(TOKEN))&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This scheme might be vulnerable to rainbow table attack.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Thank you for pointing this out! Incidentally, Dmitry Petukhov also told me&lt;br/&gt;the same privately.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The following scheme might be more secure:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; DESCRIPTION = ASCII description provided by user&lt;br/&gt;&amp;gt; NONCE = 256-bit random number&lt;br/&gt;&amp;gt; ENCRYPTION_KEY = hmac-sha256(key=NONCE, msg=DESCRIPTION)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Coordinator distributes DESCRIPTION (fka TOKEN) together with NONCE to&lt;br/&gt;&amp;gt; the signers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;This does seem to add a lot more entropy. The challenge is to balance the&lt;br/&gt;security requirement with UX. In the absence of some handshake protocol to&lt;br/&gt;exchange the shared secrets (DESCRIPTION / NONCE) , the user will have to&lt;br/&gt;enter these manually on the devices. I&amp;#39;ll think about this some more.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Also, is there any reason why you&amp;#39;d want to disable encryption? Why not&lt;br/&gt;&amp;gt; keep that as mandatory?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Making it mandatory would be nice, but IMHO not all use cases might require&lt;br/&gt;encryption. For example, if you are setting up the multisig locally under a&lt;br/&gt;safe environment you control, encryption might be an overkill.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, 9 Feb 2021 at 12:39, Hugo Nguyen via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Tue, Feb 9, 2021 at 2:19 AM Christopher Allen &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; ChristopherA at lifewithalacrity.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; On Tue, Feb 9, 2021 at 2:06 AM Hugo Nguyen &amp;lt;hugo at nunchuk.io&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I don&amp;#39;t think reusing XPUBs inside different multisig wallets is a good&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; idea... For starters, loss of privacy in one wallet will immediately affect&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; privacy of other wallets. I think multisig wallets should be completely&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; firewalled from each other. That means one unique XPUB per wallet. This is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; what we have been doing with the Nunchuk wallet.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; To be clear, I have stated repeatedly that xpub reuse into multisig is a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; poor practice. However, finding a trustless solution when a wallet is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; airgapped with no network, or is stateless like Trezor, is quite hard.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The challenge also includes how does an airgapped or stateless wallet&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; know that it is talking to the same process on the other side that that it&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; gave the xpub to in the first place. Without state to allow for a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; commitment, or at least a TOFU, a cosigner who thought he was part of a 3&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of 5 could discover that he instead is in a 2 of 3, or in a script with an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OR, as some form of scam.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The shared secret approach that I mentioned in the proposal actually can&lt;br/&gt;&amp;gt;&amp;gt; help you here. The TOKEN doubles as a session ID - thereby establishing a&lt;br/&gt;&amp;gt;&amp;gt; common state on both sides.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&amp;gt; Hugo&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; — Christopher Allen&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; Best Regards / S pozdravom,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Pavol &amp;#34;stick&amp;#34; Rusnak&lt;br/&gt;&amp;gt; CTO, SatoshiLabs&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210211/2ab27396/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210211/2ab27396/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:28:33&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrjxpu52r79y7zkhhtxcxenk6e63rwrd4hs77pycywwtl3ngw02zszyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsusjtjf</id>
    
      <title type="html">📅 Original date posted:2021-02-09 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrjxpu52r79y7zkhhtxcxenk6e63rwrd4hs77pycywwtl3ngw02zszyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsusjtjf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg587hk4fye5d49dq7dm8x9ls4yztmmqhj0y48jm7zcqjn3546l4q8dls63&#39;&gt;nevent1q…ls63&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-02-09&lt;br/&gt;📝 Original message:On Tue, Feb 9, 2021 at 2:19 AM Christopher Allen &amp;lt;&lt;br/&gt;ChristopherA at lifewithalacrity.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, Feb 9, 2021 at 2:06 AM Hugo Nguyen &amp;lt;hugo at nunchuk.io&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I don&amp;#39;t think reusing XPUBs inside different multisig wallets is a good&lt;br/&gt;&amp;gt;&amp;gt; idea... For starters, loss of privacy in one wallet will immediately affect&lt;br/&gt;&amp;gt;&amp;gt; privacy of other wallets. I think multisig wallets should be completely&lt;br/&gt;&amp;gt;&amp;gt; firewalled from each other. That means one unique XPUB per wallet. This is&lt;br/&gt;&amp;gt;&amp;gt; what we have been doing with the Nunchuk wallet.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To be clear, I have stated repeatedly that xpub reuse into multisig is a&lt;br/&gt;&amp;gt; poor practice. However, finding a trustless solution when a wallet is&lt;br/&gt;&amp;gt; airgapped with no network, or is stateless like Trezor, is quite hard.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The challenge also includes how does an airgapped or stateless wallet know&lt;br/&gt;&amp;gt; that it is talking to the same process on the other side that that it gave&lt;br/&gt;&amp;gt; the xpub to in the first place. Without state to allow for a commitment, or&lt;br/&gt;&amp;gt; at least a TOFU, a cosigner who thought he was part of a 3 of 5 could&lt;br/&gt;&amp;gt; discover that he instead is in a 2 of 3, or in a script with an OR, as some&lt;br/&gt;&amp;gt; form of scam.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The shared secret approach that I mentioned in the proposal actually can&lt;br/&gt;help you here. The TOKEN doubles as a session ID - thereby establishing a&lt;br/&gt;common state on both sides.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; — Christopher Allen&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210209/51b3281e/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210209/51b3281e/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:28:33&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsg55h4ln5pqd5qsxjv2yg42ed2vm4lej66x8ph38605nfxxrc63rszyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsvdt58v</id>
    
      <title type="html">📅 Original date posted:2021-02-09 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsg55h4ln5pqd5qsxjv2yg42ed2vm4lej66x8ph38605nfxxrc63rszyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hsvdt58v" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvtn7w4svdw7dadh5mgz82d6dtusldv2ufv7q4z25yltsxlug6zxsmrzk3m&#39;&gt;nevent1q…zk3m&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-02-09&lt;br/&gt;📝 Original message:Hi Craig,&lt;br/&gt;Comments inline.&lt;br/&gt;&lt;br/&gt;On Tue, Feb 9, 2021 at 1:17 AM Craig Raw &amp;lt;craigraw at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Hugo,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for raising this again - I&amp;#39;ll note there has already been much&lt;br/&gt;&amp;gt; discussion on this topic. With respect to your &amp;#34;two layers of protection&amp;#34;:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The Coordinator shares the TOKEN with all participating Signers over a&lt;br/&gt;&amp;gt; secure channel.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; What secure channel do you propose? Currently, with the default of a&lt;br/&gt;&amp;gt; software wallet coordinator talking to hardware wallets, we have USB, file&lt;br/&gt;&amp;gt; (microSD), and QR as communication channels. It&amp;#39;s unclear to me why the&lt;br/&gt;&amp;gt; token and encryption process is necessary - in fact it&amp;#39;s easier to verify&lt;br/&gt;&amp;gt; what is going on using clear text, and the majority of setups will be&lt;br/&gt;&amp;gt; locally done with the reasonable assumption of a secure environment. When&lt;br/&gt;&amp;gt; the setup is remote, it&amp;#39;s simpler to just transmit the key information over&lt;br/&gt;&amp;gt; the secure channel which presumably already has encryption.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;In short, a shared secret (the TOKEN) is needed because without it you&lt;br/&gt;cannot guarantee that the devices you are connecting to are legitimate&lt;br/&gt;members of the multisig wallet. Yes, the connection between the coordinator&lt;br/&gt;and each device could be secure - but a malicious actor can establish a&lt;br/&gt;secure channel just as well as a good one. You are correct that this is&lt;br/&gt;less of an issue for local setups, but this is especially important for&lt;br/&gt;distributed multisig - where you cannot physically see what&amp;#39;s on the other&lt;br/&gt;side.&lt;br/&gt;&lt;br/&gt;I would love to remove the shared secret/encryption aspect out of the&lt;br/&gt;proposal, but so far I haven&amp;#39;t found any way around this issue, aside from&lt;br/&gt;establishing a shared secret prior to setting up the wallet...&lt;br/&gt;&lt;br/&gt;I also realized that supporting this could be a big ask for vendors, so&lt;br/&gt;I&amp;#39;ve made this part of the proposal optional.&lt;br/&gt;&lt;br/&gt;Another note here is that right after I posted the proposal (classic...), I&lt;br/&gt;also realized there could be another optimization: the secure session&lt;br/&gt;established by the shared secret can remain open indefinitely on the device&lt;br/&gt;side - until a different TOKEN is entered. That way the user needs to enter&lt;br/&gt;the TOKEN only once, saving us one interaction.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; The second one is through the descriptor checksum and visual inspection&lt;br/&gt;&amp;gt; of the descriptor itself.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is a reasonable suggestion, although it&amp;#39;s worth noting that support&lt;br/&gt;&amp;gt; for storing multisig setups on hardware wallets varies. Coldcard supports&lt;br/&gt;&amp;gt; this through importing of a proprietary .txt format file (which has been&lt;br/&gt;&amp;gt; adopted by a number of other vendors). Trezor and Ledger (AFAIK) do not&lt;br/&gt;&amp;gt; however store multisig setups, which could make this step confusing. With&lt;br/&gt;&amp;gt; that said, the use of an output descriptor is certainly a more standardised&lt;br/&gt;&amp;gt; approach, albeit one without the wallet name included. By the use of the&lt;br/&gt;&amp;gt; singular, I assume you mean a descriptor without the /0/* or /1/* suffix&lt;br/&gt;&amp;gt; (which I think is a good idea).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;I&amp;#39;m aware that Trezor and Ledger currently cannot support this. But IMHO&lt;br/&gt;lack of support on some devices shouldn&amp;#39;t prevent us from setting a good&lt;br/&gt;standard here. Cosigner registration on the device is crucial, as you don&amp;#39;t&lt;br/&gt;have to rely on everything being included in the PSBT (which also adds&lt;br/&gt;mental overhead as the user has to verify each and every transaction).&lt;br/&gt;&lt;br/&gt;Yes, descriptor without the /0/* and /1/* - Thanks for clarifying. Will&lt;br/&gt;update the proposal.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; WRT to QR codes, using the BCR UR2.0 standard you linked to is IMO the&lt;br/&gt;&amp;gt; right approach. I&amp;#39;ll link directly to the two BCR UR2.0 formats here which&lt;br/&gt;&amp;gt; are relevant:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. For sharing the sharing the BIP44 account information from the signers&lt;br/&gt;&amp;gt; to the coordinator, the crypto-account format: [&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md&lt;/a&gt;&lt;br/&gt;&amp;gt; ]&lt;br/&gt;&amp;gt; 2. For sharing the output descriptor from the coordinator to the signers,&lt;br/&gt;&amp;gt; the crypto-output format: [&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md&lt;/a&gt;&lt;br/&gt;&amp;gt; ]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;Thanks, will update!&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Craig&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, Feb 9, 2021 at 9:53 AM Hugo Nguyen via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&amp;gt; I would like to propose a new BIP for Secure Multisig Setup.&lt;br/&gt;&amp;gt;&amp;gt; This proposal has taken inputs from folks at Coldcard, Shift Crypto and&lt;br/&gt;&amp;gt;&amp;gt; Cobo -- listed below as co-authors.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This was inspired by my own experience working with hardware wallets on&lt;br/&gt;&amp;gt;&amp;gt; the market, as well as existing research into the challenges of multisig.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt;&amp;gt; Hugo&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   BIP: To be determined&lt;br/&gt;&amp;gt;&amp;gt;   Layer: Applications&lt;br/&gt;&amp;gt;&amp;gt;   Title: Bitcoin Secure Multisig Setup (BSMS)&lt;br/&gt;&amp;gt;&amp;gt;   Author: Hugo Nguyen &amp;lt;hugo at nunchuk.io&amp;gt;, Peter Gray &amp;lt;peter at coinkite.com&amp;gt;,&lt;br/&gt;&amp;gt;&amp;gt; Marko Bencun &amp;lt;marko at shiftcrypto.ch&amp;gt;, Aaron Chen &amp;lt;aarondongchen at gmail.com&amp;gt;,&lt;br/&gt;&amp;gt;&amp;gt; Rodolfo Novak &amp;lt;rodolfo at coinkite.com&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   Comments-Summary: No comments yet.&lt;br/&gt;&amp;gt;&amp;gt;   Comments-URI:&lt;br/&gt;&amp;gt;&amp;gt;   Status: Proposed&lt;br/&gt;&amp;gt;&amp;gt;   Type: Standards Track&lt;br/&gt;&amp;gt;&amp;gt;   Created: 2020-11-10&lt;br/&gt;&amp;gt;&amp;gt;   License: BSD-2-Clause&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ==Introduction==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Abstract===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This document proposes a mechanism to set up multisig wallets securely.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Copyright===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This BIP is licensed under the 2-clause BSD license.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Motivation===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The Bitcoin multisig experience has been greatly streamlined under [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&lt;/a&gt; BIP-0174&lt;br/&gt;&amp;gt;&amp;gt; (Partially Signed Bitcoin Transaction)]. However, what is still missing is&lt;br/&gt;&amp;gt;&amp;gt; a standardized process for setting up multisig wallets securely across&lt;br/&gt;&amp;gt;&amp;gt; different vendors.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; There are a number of concerns when it comes to setting up a multisig&lt;br/&gt;&amp;gt;&amp;gt; wallet:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # Whether the multisig configuration, such as Signer membership, script&lt;br/&gt;&amp;gt;&amp;gt; type, derivation paths and number of signatures required, is correct and&lt;br/&gt;&amp;gt;&amp;gt; not tampered with.&lt;br/&gt;&amp;gt;&amp;gt; # Whether Signer persists the multisig configuration in their respective&lt;br/&gt;&amp;gt;&amp;gt; storage, and under what format.&lt;br/&gt;&amp;gt;&amp;gt; # Whether Signer&amp;#39;s storage is tamper-proof.&lt;br/&gt;&amp;gt;&amp;gt; # Whether Signer subsequently uses the multisig configuration to generate&lt;br/&gt;&amp;gt;&amp;gt; and verify receive and change addresses.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; An attacker who can modify the multisig configuration can steal or hold&lt;br/&gt;&amp;gt;&amp;gt; funds to ransom by duping the user into sending funds to the wrong address.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This proposal seeks to address concerns #1 and #2: to mitigate the risk&lt;br/&gt;&amp;gt;&amp;gt; of tampering during the initial setup phase, and to define an interoperable&lt;br/&gt;&amp;gt;&amp;gt; multisig configuration format.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Concerns #3 and #4 should be handled by Signers and is out of scope of&lt;br/&gt;&amp;gt;&amp;gt; this proposal.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ==Specification==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Prerequisites===&lt;br/&gt;&amp;gt;&amp;gt; This proposal assumes the parties in the multisig support [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&lt;/a&gt; BIP32], [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&lt;/a&gt; the&lt;br/&gt;&amp;gt;&amp;gt; descriptor language] and encryption.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ==Roles==&lt;br/&gt;&amp;gt;&amp;gt; ===Coordinator===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The Coordinator initiates the multisig setup. The Coordinator determines&lt;br/&gt;&amp;gt;&amp;gt; what type of multisig is used and how many members and signatures are&lt;br/&gt;&amp;gt;&amp;gt; needed. If encryption is enabled, the Coordinator generates a secret token,&lt;br/&gt;&amp;gt;&amp;gt; to be shared among the parties for secure communication. The Coordinator&lt;br/&gt;&amp;gt;&amp;gt; gathers information from the Signers to generate a descriptor record. The&lt;br/&gt;&amp;gt;&amp;gt; Coordinator distributes the descriptor record back to the Signers.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Signer===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The Signer is a participating member in the multisig. Its&lt;br/&gt;&amp;gt;&amp;gt; responsibilities include providing its XPUB to the Coordinator, verifying&lt;br/&gt;&amp;gt;&amp;gt; that its XPUB is included in the descriptor record and persisting the&lt;br/&gt;&amp;gt;&amp;gt; descriptor record in its storage.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ==Setup Process==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Round 1===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ====Coordinator====&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * The Coordinator creates a multisig wallet creation session. The&lt;br/&gt;&amp;gt;&amp;gt; Coordinator determines the type of multisig script used and the signing&lt;br/&gt;&amp;gt;&amp;gt; configuration (&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;).&lt;br/&gt;&amp;gt;&amp;gt; * If encryption is enabled, the Coordinator also generates a secret&lt;br/&gt;&amp;gt;&amp;gt; token, hereby denoted &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt; * TOKEN is in ASCII format and must have a minimum of 8 characters. TOKEN&lt;br/&gt;&amp;gt;&amp;gt; should expire after some time period determined by the Coordinator, e.g.,&lt;br/&gt;&amp;gt;&amp;gt; 24 hours.&lt;br/&gt;&amp;gt;&amp;gt; * TOKEN acts as an encryption key among the parties. The method of&lt;br/&gt;&amp;gt;&amp;gt; encryption is AES, CTR mode. The encryption key can be calculated by&lt;br/&gt;&amp;gt;&amp;gt; performing a double hash operation on the TOKEN: &amp;lt;tt&amp;gt;ENCRYPTION_KEY =&lt;br/&gt;&amp;gt;&amp;gt; SHA256(SHA256(TOKEN))&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;gt;&amp;gt; * A TOKEN value of &amp;lt;tt&amp;gt;-1&amp;lt;/tt&amp;gt; means that encryption is disabled and all&lt;br/&gt;&amp;gt;&amp;gt; the encryption/decryption steps below can be skipped.&lt;br/&gt;&amp;gt;&amp;gt; * The Coordinator shares the TOKEN with all participating Signers over a&lt;br/&gt;&amp;gt;&amp;gt; secure channel.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ====Signer====&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * The Signer generates a key record by prompting the user for the TOKEN&lt;br/&gt;&amp;gt;&amp;gt; and a derivation path.&lt;br/&gt;&amp;gt;&amp;gt; * The first line in the record must be the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. If encryption&lt;br/&gt;&amp;gt;&amp;gt; is disabled, set the TOKEN to -1. The second line must be the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;,&lt;br/&gt;&amp;gt;&amp;gt; whereas KEY is an XPUB. KEY must include key origin information and written&lt;br/&gt;&amp;gt;&amp;gt; in the descriptor-defined format, i.e.: &amp;lt;tt&amp;gt;[{master key&lt;br/&gt;&amp;gt;&amp;gt; fingerprint}/{derivation path}]{XPUB}&amp;lt;/tt&amp;gt;. The third line must be a&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt;, whereas SIG is the signature generated by using the&lt;br/&gt;&amp;gt;&amp;gt; corresponding private key to sign the first two lines. Finally, the Signer&lt;br/&gt;&amp;gt;&amp;gt; encrypts the entire record with ENCRYPTION_KEY.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ===Round 2===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ====Coordinator====&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * The Coordinator gathers key records from all participating Signers.&lt;br/&gt;&amp;gt;&amp;gt; Abort the setup if TOKEN has expired.&lt;br/&gt;&amp;gt;&amp;gt; * For each key record, the Coordinator decrypts it using ENCRYPTION_KEY.&lt;br/&gt;&amp;gt;&amp;gt; The Coordinator verifies that the included SIG is valid given the KEY.&lt;br/&gt;&amp;gt;&amp;gt; * If all key records look good, the Coordinator generates a descriptor&lt;br/&gt;&amp;gt;&amp;gt; record, which is simply the descriptor string plus a &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, all&lt;br/&gt;&amp;gt;&amp;gt; in one line. The CHECKSUM has BECH32 encoding and is described at [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&lt;/a&gt;].&lt;br/&gt;&amp;gt;&amp;gt; The Coordinator encrypts this descriptor record with ENCRYPTION_KEY.&lt;br/&gt;&amp;gt;&amp;gt; * The Coordinator sends the encrypted descriptor record to all&lt;br/&gt;&amp;gt;&amp;gt; participating Signers.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ====Signer====&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * The Signer imports the descriptor record, decrypts it by prompting the&lt;br/&gt;&amp;gt;&amp;gt; user for TOKEN.&lt;br/&gt;&amp;gt;&amp;gt; * The Signer calculates and verifies the descriptor’s CHECKSUM. Abort the&lt;br/&gt;&amp;gt;&amp;gt; setup if the CHECKSUM is incorrect.&lt;br/&gt;&amp;gt;&amp;gt; * The Signer checks whether one of the KEYs in the descriptor belongs to&lt;br/&gt;&amp;gt;&amp;gt; it, using path and fingerprint information included in the descriptor. The&lt;br/&gt;&amp;gt;&amp;gt; check must perform an exact match on the KEYs, and not using shortcuts such&lt;br/&gt;&amp;gt;&amp;gt; as matching fingerprints (which is trivial to spoof). Abort the setup if it&lt;br/&gt;&amp;gt;&amp;gt; doesn’t detect its own KEY.&lt;br/&gt;&amp;gt;&amp;gt; * For confirmation, the Signer must display to the user the descriptor&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; CHECKSUM, plus other configurations, such as M and N. The total number of&lt;br/&gt;&amp;gt;&amp;gt; Signers, N, is important to prevent a KEY insertion attack. All&lt;br/&gt;&amp;gt;&amp;gt; participating Signers should be able to display the same confirmation.&lt;br/&gt;&amp;gt;&amp;gt; * If all checks pass, the Signer persists the descriptor record in its&lt;br/&gt;&amp;gt;&amp;gt; storage. The Signer should subsequently use the descriptor to generate and&lt;br/&gt;&amp;gt;&amp;gt; verify receive and change addresses.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This completes the setup.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ==QR Codes==&lt;br/&gt;&amp;gt;&amp;gt; For signers that use QR codes to transmit data, key and descriptor&lt;br/&gt;&amp;gt;&amp;gt; records can be converted to QR codes, following [&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; the BCR standard].&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ==Security==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This proposal introduce two layers of protection. The first one is a&lt;br/&gt;&amp;gt;&amp;gt; temporary, secret token, used to encrypt the two rounds of communication&lt;br/&gt;&amp;gt;&amp;gt; between the Signers and the Coordinator. The second one is through the&lt;br/&gt;&amp;gt;&amp;gt; descriptor checksum and visual inspection of the descriptor itself.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The token is only needed during the setup phase, and can be safely thrown&lt;br/&gt;&amp;gt;&amp;gt; away afterwards. The token does not guarantee that the Signer membership&lt;br/&gt;&amp;gt;&amp;gt; set is not modified, since that depends on the overall security of all&lt;br/&gt;&amp;gt;&amp;gt; parties in the setup, but it can make it significantly harder for an&lt;br/&gt;&amp;gt;&amp;gt; attacker to do so.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; There are three ways an attacker can modify the membership set: by&lt;br/&gt;&amp;gt;&amp;gt; changing an existing member, by removing an existing member, or by adding a&lt;br/&gt;&amp;gt;&amp;gt; new member.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For the first two methods, one of the Signers will be able to detect that&lt;br/&gt;&amp;gt;&amp;gt; its membership has been changed or removed, and reject the final&lt;br/&gt;&amp;gt;&amp;gt; descriptor. Thus, it is vital that all participating Signers check that&lt;br/&gt;&amp;gt;&amp;gt; their membership is intact in the descriptor. Even one Signer failing to&lt;br/&gt;&amp;gt;&amp;gt; check for its membership means that the setup could be compromised.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For the third type of attack, the descriptor checksum and visual&lt;br/&gt;&amp;gt;&amp;gt; inspection of the descriptor itself are the only way to guard against&lt;br/&gt;&amp;gt;&amp;gt; malicious members from being inserted into the set.&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210209/0796efc1/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210209/0796efc1/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:28:32&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqspt3mfaemtlsly2906q4pnvysjk7l0nylxdslux3k2aplgtkuqkugzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hss2nwp2</id>
    
      <title type="html">📅 Original date posted:2021-02-08 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspt3mfaemtlsly2906q4pnvysjk7l0nylxdslux3k2aplgtkuqkugzyzgq6z490j00vuzg3ckqa7u8r5n966fxuymjd4ghu5psgnccq64hss2nwp2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgdttvxlke992dsdvlnk7dgwachm84re9swt2wwpls3yyluqcxmegu2jgcv&#39;&gt;nevent1q…jgcv&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-02-08&lt;br/&gt;📝 Original message:Hi all,&lt;br/&gt;I would like to propose a new BIP for Secure Multisig Setup.&lt;br/&gt;This proposal has taken inputs from folks at Coldcard, Shift Crypto and&lt;br/&gt;Cobo -- listed below as co-authors.&lt;br/&gt;&lt;br/&gt;This was inspired by my own experience working with hardware wallets on the&lt;br/&gt;market, as well as existing research into the challenges of multisig.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Hugo&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;  BIP: To be determined&lt;br/&gt;  Layer: Applications&lt;br/&gt;  Title: Bitcoin Secure Multisig Setup (BSMS)&lt;br/&gt;  Author: Hugo Nguyen &amp;lt;hugo at nunchuk.io&amp;gt;, Peter Gray &amp;lt;peter at coinkite.com&amp;gt;,&lt;br/&gt;Marko Bencun &amp;lt;marko at shiftcrypto.ch&amp;gt;, Aaron Chen &amp;lt;aarondongchen at gmail.com&amp;gt;,&lt;br/&gt;Rodolfo Novak &amp;lt;rodolfo at coinkite.com&amp;gt;&lt;br/&gt;  Comments-Summary: No comments yet.&lt;br/&gt;  Comments-URI:&lt;br/&gt;  Status: Proposed&lt;br/&gt;  Type: Standards Track&lt;br/&gt;  Created: 2020-11-10&lt;br/&gt;  License: BSD-2-Clause&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Introduction==&lt;br/&gt;&lt;br/&gt;===Abstract===&lt;br/&gt;&lt;br/&gt;This document proposes a mechanism to set up multisig wallets securely.&lt;br/&gt;&lt;br/&gt;===Copyright===&lt;br/&gt;&lt;br/&gt;This BIP is licensed under the 2-clause BSD license.&lt;br/&gt;&lt;br/&gt;===Motivation===&lt;br/&gt;&lt;br/&gt;The Bitcoin multisig experience has been greatly streamlined under [&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&lt;/a&gt; BIP-0174&lt;br/&gt;(Partially Signed Bitcoin Transaction)]. However, what is still missing is&lt;br/&gt;a standardized process for setting up multisig wallets securely across&lt;br/&gt;different vendors.&lt;br/&gt;&lt;br/&gt;There are a number of concerns when it comes to setting up a multisig&lt;br/&gt;wallet:&lt;br/&gt;&lt;br/&gt;# Whether the multisig configuration, such as Signer membership, script&lt;br/&gt;type, derivation paths and number of signatures required, is correct and&lt;br/&gt;not tampered with.&lt;br/&gt;# Whether Signer persists the multisig configuration in their respective&lt;br/&gt;storage, and under what format.&lt;br/&gt;# Whether Signer&amp;#39;s storage is tamper-proof.&lt;br/&gt;# Whether Signer subsequently uses the multisig configuration to generate&lt;br/&gt;and verify receive and change addresses.&lt;br/&gt;&lt;br/&gt;An attacker who can modify the multisig configuration can steal or hold&lt;br/&gt;funds to ransom by duping the user into sending funds to the wrong address.&lt;br/&gt;&lt;br/&gt;This proposal seeks to address concerns #1 and #2: to mitigate the risk of&lt;br/&gt;tampering during the initial setup phase, and to define an interoperable&lt;br/&gt;multisig configuration format.&lt;br/&gt;&lt;br/&gt;Concerns #3 and #4 should be handled by Signers and is out of scope of this&lt;br/&gt;proposal.&lt;br/&gt;&lt;br/&gt;==Specification==&lt;br/&gt;&lt;br/&gt;===Prerequisites===&lt;br/&gt;This proposal assumes the parties in the multisig support [&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&lt;/a&gt; BIP32], [&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md&lt;/a&gt; the&lt;br/&gt;descriptor language] and encryption.&lt;br/&gt;&lt;br/&gt;==Roles==&lt;br/&gt;===Coordinator===&lt;br/&gt;&lt;br/&gt;The Coordinator initiates the multisig setup. The Coordinator determines&lt;br/&gt;what type of multisig is used and how many members and signatures are&lt;br/&gt;needed. If encryption is enabled, the Coordinator generates a secret token,&lt;br/&gt;to be shared among the parties for secure communication. The Coordinator&lt;br/&gt;gathers information from the Signers to generate a descriptor record. The&lt;br/&gt;Coordinator distributes the descriptor record back to the Signers.&lt;br/&gt;&lt;br/&gt;===Signer===&lt;br/&gt;&lt;br/&gt;The Signer is a participating member in the multisig. Its responsibilities&lt;br/&gt;include providing its XPUB to the Coordinator, verifying that its XPUB is&lt;br/&gt;included in the descriptor record and persisting the descriptor record in&lt;br/&gt;its storage.&lt;br/&gt;&lt;br/&gt;==Setup Process==&lt;br/&gt;&lt;br/&gt;===Round 1===&lt;br/&gt;&lt;br/&gt;====Coordinator====&lt;br/&gt;&lt;br/&gt;* The Coordinator creates a multisig wallet creation session. The&lt;br/&gt;Coordinator determines the type of multisig script used and the signing&lt;br/&gt;configuration (&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;).&lt;br/&gt;* If encryption is enabled, the Coordinator also generates a secret token,&lt;br/&gt;hereby denoted &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;.&lt;br/&gt;* TOKEN is in ASCII format and must have a minimum of 8 characters. TOKEN&lt;br/&gt;should expire after some time period determined by the Coordinator, e.g.,&lt;br/&gt;24 hours.&lt;br/&gt;* TOKEN acts as an encryption key among the parties. The method of&lt;br/&gt;encryption is AES, CTR mode. The encryption key can be calculated by&lt;br/&gt;performing a double hash operation on the TOKEN: &amp;lt;tt&amp;gt;ENCRYPTION_KEY =&lt;br/&gt;SHA256(SHA256(TOKEN))&amp;lt;/tt&amp;gt;.&lt;br/&gt;* A TOKEN value of &amp;lt;tt&amp;gt;-1&amp;lt;/tt&amp;gt; means that encryption is disabled and all&lt;br/&gt;the encryption/decryption steps below can be skipped.&lt;br/&gt;* The Coordinator shares the TOKEN with all participating Signers over a&lt;br/&gt;secure channel.&lt;br/&gt;&lt;br/&gt;====Signer====&lt;br/&gt;&lt;br/&gt;* The Signer generates a key record by prompting the user for the TOKEN and&lt;br/&gt;a derivation path.&lt;br/&gt;* The first line in the record must be the &amp;lt;tt&amp;gt;TOKEN&amp;lt;/tt&amp;gt;. If encryption is&lt;br/&gt;disabled, set the TOKEN to -1. The second line must be the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;,&lt;br/&gt;whereas KEY is an XPUB. KEY must include key origin information and written&lt;br/&gt;in the descriptor-defined format, i.e.: &amp;lt;tt&amp;gt;[{master key&lt;br/&gt;fingerprint}/{derivation path}]{XPUB}&amp;lt;/tt&amp;gt;. The third line must be a&lt;br/&gt;&amp;lt;tt&amp;gt;SIG&amp;lt;/tt&amp;gt;, whereas SIG is the signature generated by using the&lt;br/&gt;corresponding private key to sign the first two lines. Finally, the Signer&lt;br/&gt;encrypts the entire record with ENCRYPTION_KEY.&lt;br/&gt;&lt;br/&gt;===Round 2===&lt;br/&gt;&lt;br/&gt;====Coordinator====&lt;br/&gt;&lt;br/&gt;* The Coordinator gathers key records from all participating Signers. Abort&lt;br/&gt;the setup if TOKEN has expired.&lt;br/&gt;* For each key record, the Coordinator decrypts it using ENCRYPTION_KEY.&lt;br/&gt;The Coordinator verifies that the included SIG is valid given the KEY.&lt;br/&gt;* If all key records look good, the Coordinator generates a descriptor&lt;br/&gt;record, which is simply the descriptor string plus a &amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt;, all&lt;br/&gt;in one line. The CHECKSUM has BECH32 encoding and is described at [&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums&lt;/a&gt;].&lt;br/&gt;The Coordinator encrypts this descriptor record with ENCRYPTION_KEY.&lt;br/&gt;* The Coordinator sends the encrypted descriptor record to all&lt;br/&gt;participating Signers.&lt;br/&gt;&lt;br/&gt;====Signer====&lt;br/&gt;&lt;br/&gt;* The Signer imports the descriptor record, decrypts it by prompting the&lt;br/&gt;user for TOKEN.&lt;br/&gt;* The Signer calculates and verifies the descriptor’s CHECKSUM. Abort the&lt;br/&gt;setup if the CHECKSUM is incorrect.&lt;br/&gt;* The Signer checks whether one of the KEYs in the descriptor belongs to&lt;br/&gt;it, using path and fingerprint information included in the descriptor. The&lt;br/&gt;check must perform an exact match on the KEYs, and not using shortcuts such&lt;br/&gt;as matching fingerprints (which is trivial to spoof). Abort the setup if it&lt;br/&gt;doesn’t detect its own KEY.&lt;br/&gt;* For confirmation, the Signer must display to the user the descriptor&amp;#39;s&lt;br/&gt;CHECKSUM, plus other configurations, such as M and N. The total number of&lt;br/&gt;Signers, N, is important to prevent a KEY insertion attack. All&lt;br/&gt;participating Signers should be able to display the same confirmation.&lt;br/&gt;* If all checks pass, the Signer persists the descriptor record in its&lt;br/&gt;storage. The Signer should subsequently use the descriptor to generate and&lt;br/&gt;verify receive and change addresses.&lt;br/&gt;&lt;br/&gt;This completes the setup.&lt;br/&gt;&lt;br/&gt;==QR Codes==&lt;br/&gt;For signers that use QR codes to transmit data, key and descriptor records&lt;br/&gt;can be converted to QR codes, following [&lt;br/&gt;&lt;a href=&#34;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&#34;&gt;https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md&lt;/a&gt;&lt;br/&gt;the BCR standard].&lt;br/&gt;&lt;br/&gt;==Security==&lt;br/&gt;&lt;br/&gt;This proposal introduce two layers of protection. The first one is a&lt;br/&gt;temporary, secret token, used to encrypt the two rounds of communication&lt;br/&gt;between the Signers and the Coordinator. The second one is through the&lt;br/&gt;descriptor checksum and visual inspection of the descriptor itself.&lt;br/&gt;&lt;br/&gt;The token is only needed during the setup phase, and can be safely thrown&lt;br/&gt;away afterwards. The token does not guarantee that the Signer membership&lt;br/&gt;set is not modified, since that depends on the overall security of all&lt;br/&gt;parties in the setup, but it can make it significantly harder for an&lt;br/&gt;attacker to do so.&lt;br/&gt;&lt;br/&gt;There are three ways an attacker can modify the membership set: by changing&lt;br/&gt;an existing member, by removing an existing member, or by adding a new&lt;br/&gt;member.&lt;br/&gt;&lt;br/&gt;For the first two methods, one of the Signers will be able to detect that&lt;br/&gt;its membership has been changed or removed, and reject the final&lt;br/&gt;descriptor. Thus, it is vital that all participating Signers check that&lt;br/&gt;their membership is intact in the descriptor. Even one Signer failing to&lt;br/&gt;check for its membership means that the setup could be compromised.&lt;br/&gt;&lt;br/&gt;For the third type of attack, the descriptor checksum and visual inspection&lt;br/&gt;of the descriptor itself are the only way to guard against malicious&lt;br/&gt;members from being inserted into the set.&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210208/77bca22d/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210208/77bca22d/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:28:30&#43;02:00</updated>
  </entry>

</feed>