<?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/npub1at3pav59gkeqz9kegzqhk2v4j4r435x42ytf23pxs8crt74tuc8s2y3z5a.rss" />
  <link href="https://nostr.ae/npub1at3pav59gkeqz9kegzqhk2v4j4r435x42ytf23pxs8crt74tuc8s2y3z5a" />
  <id>https://nostr.ae/npub1at3pav59gkeqz9kegzqhk2v4j4r435x42ytf23pxs8crt74tuc8s2y3z5a</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqsyvu50e8yvvnyv60addtej9tgjmshfz52zkdsemhcvp8shnwezvsgzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7phkwhf</id>
    
      <title type="html">📅 Original date posted:2023-07-26 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyvu50e8yvvnyv60addtej9tgjmshfz52zkdsemhcvp8shnwezvsgzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7phkwhf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2dnjs99pnqk7jwtv7fvsrx4269lnnyet34gk9c96m863sh6fr9ycx7cufh&#39;&gt;nevent1q…cufh&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-07-26&lt;br/&gt;🗒️ Summary of this message: Blind Schnorr signatures can solve the issue of blinding, but not the problem of client-controlled forged signatures. Recent work proposes alternative approaches for blind Schnorr signatures.&lt;br/&gt;📝 Original message:&lt;br/&gt;While this may solve blinding, I don&amp;#39;t see how it solves the problem that the&lt;br/&gt;client can forge signatures because the client is in control of challenge e&amp;#39;.&lt;br/&gt;This is not special to MuSig(2), but is also the reason why original blind&lt;br/&gt;Schnorr signatures are insecure (as demonstrated in David Wagner&amp;#39;s &amp;#34;A&lt;br/&gt;Generalized Birthday Problem&amp;#34; paper).&lt;br/&gt;&lt;br/&gt;For some more recent work on blind Schnorr signatures, see:&lt;br/&gt;- &lt;a href=&#34;https://eprint.iacr.org/2019/877.pdf&#34;&gt;https://eprint.iacr.org/2019/877.pdf&lt;/a&gt; Blind Schnorr Signatures and Signed&lt;br/&gt;   ElGamal Encryption in the Algebraic Group Mode&lt;br/&gt;- &lt;a href=&#34;https://eprint.iacr.org/2020/1071.pdf&#34;&gt;https://eprint.iacr.org/2020/1071.pdf&lt;/a&gt; On Pairing-Free Blind Signature Schemes&lt;br/&gt;   in the Algebraic Group Model&lt;br/&gt;&lt;br/&gt;In particular, the first paper proposes a less-efficient variant of blind&lt;br/&gt;Schnorr signatures that is secure under concurrent signing if the &amp;#34;mROS&amp;#34; problem&lt;br/&gt;is hard (which is imho plausible). Another potential approach is using&lt;br/&gt;commitments and a ZKP as I mentioned earlier in this thread. This scheme is&lt;br/&gt;&amp;#34;folklore&amp;#34;, in the sense that it is being discussed from time to time but isn&amp;#39;t&lt;br/&gt;specified and does not have a security proof as far as I am aware.
    </content>
    <updated>2023-07-27T02:26:34&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2nkfzaalw2jejvmqjmrkd4l37atrc5avecflssf7ymwt0yd09evszyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7tmnlsz</id>
    
      <title type="html">📅 Original date posted:2023-07-26 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2nkfzaalw2jejvmqjmrkd4l37atrc5avecflssf7ymwt0yd09evszyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7tmnlsz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqvva6e57xu3t6y8dujn2fxv5a8fzf54n37cw7ezhcekfqmhtxfnskqs2zs&#39;&gt;nevent1q…s2zs&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-07-26&lt;br/&gt;🗒️ Summary of this message: Attacks on nonces and challenges cannot be prevented by proving knowledge of the signing key (proof of possession, PoP).&lt;br/&gt;📝 Original message:&lt;br/&gt;None of the attacks mentioned in this thread so far (ZmnSCPxj mentioned an&lt;br/&gt;attack on the nonces, I mentioned an attack on the challenge c) can be prevented&lt;br/&gt;by proving knowledge of the signing key (usually known as proof of possession,&lt;br/&gt;PoP).
    </content>
    <updated>2023-07-27T02:26:33&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsv0jcvu9w7r79ghkvzjyasgqgg4wxc3g9046klylwmhhj3ps425pszyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7l2sj9z</id>
    
      <title type="html">📅 Original date posted:2023-07-24 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsv0jcvu9w7r79ghkvzjyasgqgg4wxc3g9046klylwmhhj3ps425pszyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7l2sj9z" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyda7n48a0mh3wd3qfmpnmtsd0yjmg5gjdz584z78fczg5ct7e03spujh7e&#39;&gt;nevent1q…jh7e&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-07-24&lt;br/&gt;🗒️ Summary of this message: The meaning and connection between &amp;#34;posk&amp;#34; and the attack remains unclear and undefined.&lt;br/&gt;📝 Original message:&lt;br/&gt;Not sure what &amp;#34;posk&amp;#34; is or how it relates to the attack.
    </content>
    <updated>2023-07-24T17:55:41&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyq3uh76yqczfw806glc8c40uhrvyac860j0jeggcjqfkse6x2p4gzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq73tzk3h</id>
    
      <title type="html">📅 Original date posted:2023-07-24 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyq3uh76yqczfw806glc8c40uhrvyac860j0jeggcjqfkse6x2p4gzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq73tzk3h" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsv0jcvu9w7r79ghkvzjyasgqgg4wxc3g9046klylwmhhj3ps425psvkrcjp&#39;&gt;nevent1q…rcjp&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-07-24&lt;br/&gt;🗒️ Summary of this message: Party 1 is unable to determine the final value of (R, s1&#43;s2) or m, but a blinding step may be missing, allowing the server to scan the blockchain for signatures and compute corresponding hashes to check for a match.&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; Party 1 never learns the final value of (R,s1&#43;s2) or m.&lt;br/&gt;&lt;br/&gt;Actually, it seems like a blinding step is missing. Assume the server (party 1)&lt;br/&gt;received some c during the signature protocol. Can&amp;#39;t the server scan the&lt;br/&gt;blockchain for signatures, compute corresponding hashes c&amp;#39; = H(R||X||m) as in&lt;br/&gt;signature verification and then check c == c&amp;#39;? If true, then the server has the&lt;br/&gt;preimage for the c received from the client, including m.
    </content>
    <updated>2023-07-24T17:55:41&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrerefgktuvcet4a687xw448s35qjqj75n627s5tr3f8ssh4cns0gzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7ah52pr</id>
    
      <title type="html">📅 Original date posted:2023-07-24 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrerefgktuvcet4a687xw448s35qjqj75n627s5tr3f8ssh4cns0gzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7ah52pr" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstrphk8neaqunjersdp2jh2wuh6eumthms7ysl8hg8twp6q68297cnkaje3&#39;&gt;nevent1q…aje3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-07-24&lt;br/&gt;🗒️ Summary of this message: The text discusses concerns about the proposed scheme for blind music and suggests an alternative approach that may be worth exploring.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Tom,&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not convinced that this works. As far as I know blind musig is still an open&lt;br/&gt;research problem. What the scheme you propose appears to try to prevent is that&lt;br/&gt;the server signs K times, but the client ends up with K&#43;1 Schnorr signatures for&lt;br/&gt;the aggregate of the server&amp;#39;s and the clients key. I think it&amp;#39;s possible to&lt;br/&gt;apply a variant of the attack that makes MuSig1 insecure if the nonce commitment&lt;br/&gt;round was skipped or if the message isn&amp;#39;t determined before sending the nonce.&lt;br/&gt;Here&amp;#39;s how a malicious client would do that:&lt;br/&gt;&lt;br/&gt;- Obtain K R-values R1[0], ..., R1[K-1] from the server&lt;br/&gt;- Let&lt;br/&gt;     R[i] := R1[i] &#43; R2[i] for all i &amp;lt;= K-1&lt;br/&gt;     R[K] := R1[0] &#43; ... &#43; R1[K-1]&lt;br/&gt;     c[i] := H(X, R[i], m[i]) for all i &amp;lt;= K.&lt;br/&gt;   Using Wagner&amp;#39;s algorithm, choose R2[0], ..., R2[K-1] such that&lt;br/&gt;     c[0] &#43; ... &#43; c[K-1] = c[K].&lt;br/&gt;- Send c[0], ..., c[K-1] to the server to obtain s[0], ..., s[K-1].&lt;br/&gt;- Let&lt;br/&gt;     s[K] = s[0] &#43; ... &#43; s[K-1].&lt;br/&gt;   Then (s[K], R[K]) is a valid signature from the server, since&lt;br/&gt;     s[K]*G = R[K] &#43; c[K]*a1*X1,&lt;br/&gt;   which the client can complete to a signature for public key X.&lt;br/&gt;&lt;br/&gt;What may work in your case is the following scheme:&lt;br/&gt;- Client sends commitment to the public key X2, nonce R2 and message m to the&lt;br/&gt;   server.&lt;br/&gt;- Server replies with nonce R1 = k1*G&lt;br/&gt;- Client sends c to the server and proves in zero knowledge that c =&lt;br/&gt;   SHA256(X1 &#43; X2, R1 &#43; R2, m).&lt;br/&gt;- Server replies with s1 = k1 &#43; c*x1&lt;br/&gt;&lt;br/&gt;However, this is just some quick intuition and I&amp;#39;m not sure if this actually&lt;br/&gt;works, but maybe worth exploring.
    </content>
    <updated>2023-07-24T17:55:41&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvkz7zkts2z3m9zw0g8ve26ad8rhv9f6nqhwm0drj4q2ydlxvqhcszyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7hcnuh3</id>
    
      <title type="html">📅 Original date posted:2021-10-09 📝 Original message: Hi, ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvkz7zkts2z3m9zw0g8ve26ad8rhv9f6nqhwm0drj4q2ydlxvqhcszyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7hcnuh3" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8vwhncptv6tmz2etjnej7gktuedvgr08c2t368mnfletl99xtxkc0yxm5q&#39;&gt;nevent1q…xm5q&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-09&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi,&lt;br/&gt;&lt;br/&gt;it seems like parts of this proposal rely on deterministic nonces in MuSig.&lt;br/&gt;Generally, this is insecure unless combined with heavy machinery that proves&lt;br/&gt;correctness of the nonce derivation in zero knowledge. If one signer uses&lt;br/&gt;deterministic nonces and another signer uses random nonces, then two signing&lt;br/&gt;sessions will have different challenge hashes which results in nonce reuse by&lt;br/&gt;the first signer [0]. Is there a countermeasure against this attack in the&lt;br/&gt;proposal? What are the inputs to the function that derive DA1, DA2? Is the&lt;br/&gt;assumption that a signer will not sign the same message more than once?&lt;br/&gt;&lt;br/&gt;It may be worth pointing out that an adaptor signature scheme can not treat&lt;br/&gt;MuSig2 as a black box as indicated in the &amp;#34;Adaptor Signatures&amp;#34; section [1]. In&lt;br/&gt;particular, generally the secret X must be input to the hash function that&lt;br/&gt;generates nonce coefficient k. Otherwise, an attacker can grind through&lt;br/&gt;challenge hashes by varying X without affecting the aggregate nonce and produce&lt;br/&gt;a forgery. For the same reason, the message m is included in hash function&lt;br/&gt;inputs of k. However, taking X into account when computing k shouldn&amp;#39;t be an&lt;br/&gt;issue for protocols making use of adaptor signatures because k does not need to&lt;br/&gt;be determined before signing time and X is required to be known at that point&lt;br/&gt;anyway.&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://medium.com/blockstream/musig-dn-schnorr-multisignatures-with-verifiably-deterministic-nonces-27424b5df9d6&#34;&gt;https://medium.com/blockstream/musig-dn-schnorr-multisignatures-with-verifiably-deterministic-nonces-27424b5df9d6&lt;/a&gt;&lt;br/&gt;     See &amp;#34;The attack works as follows.&amp;#34;&lt;br/&gt;[1] MuSig2 adaptor signature issue: &lt;a href=&#34;https://github.com/ElementsProject/scriptless-scripts/issues/23&#34;&gt;https://github.com/ElementsProject/scriptless-scripts/issues/23&lt;/a&gt;,&lt;br/&gt;     PR: &lt;a href=&#34;https://github.com/ElementsProject/scriptless-scripts/pull/24&#34;&gt;https://github.com/ElementsProject/scriptless-scripts/pull/24&lt;/a&gt;
    </content>
    <updated>2023-06-09T15:04:07&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrxg8sgs4jj4gw3zz0ca6sqz0vexeezxrvzyphmnm2g97h8qc85fqzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7fl656m</id>
    
      <title type="html">📅 Original date posted:2021-10-10 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrxg8sgs4jj4gw3zz0ca6sqz0vexeezxrvzyphmnm2g97h8qc85fqzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7fl656m" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfcu8x0uqmt6y8492z7wwt5w9xsqd4vjfu5cmseqe0h79nr5ufukscxzvwn&#39;&gt;nevent1q…zvwn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-10&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; H( private-key, msg, other-party&amp;#39;s-nonce-pair, 1 )&lt;br/&gt;&lt;br/&gt;That should work. I had thought that other-party&amp;#39;s-nonce-pair would be unique&lt;br/&gt;unknown randomness, but I can see now that it can be rederived from RA(n) or&lt;br/&gt;RB(n).&lt;br/&gt;&lt;br/&gt; &amp;gt; Hmm, you had me panicking that I&amp;#39;d been describing how to combine the&lt;br/&gt; &amp;gt; two despite having decided it wasn&amp;#39;t necessary to combine them...&lt;br/&gt;&lt;br/&gt;Ah, should have read that part more closely. The proposal uses the single sig&lt;br/&gt;adaptor sig variant.
    </content>
    <updated>2023-06-09T15:04:07&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxnhu6v2ln4j9wxf7xg0u42433gwphec56ptv6l663yf3pe7vj8xszyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7zwna62</id>
    
      <title type="html">📅 Original date posted:2022-05-23 📝 Original message:Thank ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxnhu6v2ln4j9wxf7xg0u42433gwphec56ptv6l663yf3pe7vj8xszyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7zwna62" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspskgdp7qugwh5gcepmqa34yvclcwa88am5ph7u5d3w24fg8x5kkg5lc5ve&#39;&gt;nevent1q…c5ve&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-05-23&lt;br/&gt;📝 Original message:Thank you for taking the time to look at the BIP and reference code, waxwing. I&lt;br/&gt;don&amp;#39;t know if you&amp;#39;re overlooking anything, so let me try to restate the&lt;br/&gt;paragraph in the BIP draft that attempts to cover this topic [0].&lt;br/&gt;&lt;br/&gt;Suppose signers would just abort in the presence of identical public keys. In&lt;br/&gt;that case, a disruptive signer can permanently DoS-attack a session by simply&lt;br/&gt;copying the public key of some other signer. Therefore, the BIP is much more&lt;br/&gt;useful if it can deal with identical public keys.&lt;br/&gt;&lt;br/&gt;The MuSig2 BIP draft requires some added complexity to handle identical public&lt;br/&gt;keys (because of the MuSig2* optimization). But this solution naturally allows&lt;br/&gt;identifying and removing disruptive signers, which ultimately reduces the&lt;br/&gt;complexity for MuSig2 users.&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://github.com/jonasnick/bips/blob/musig2/bip-musig2.mediawiki#public-key-aggregation&#34;&gt;https://github.com/jonasnick/bips/blob/musig2/bip-musig2.mediawiki#public-key-aggregation&lt;/a&gt;
    </content>
    <updated>2023-06-08T01:09:57&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsp34e4yshkccj2enestgjqpwdzu8k9mvsyeh8ck4fvvcpag5ytkcgzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq74m076a</id>
    
      <title type="html">📅 Original date posted:2022-04-05 📝 Original message:Tim ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsp34e4yshkccj2enestgjqpwdzu8k9mvsyeh8ck4fvvcpag5ytkcgzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq74m076a" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqlw7pjhtwtda79tt4n0v0nqlsj2wajmqxqasqlaq0k375ydh553qwl4djh&#39;&gt;nevent1q…4djh&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-04-05&lt;br/&gt;📝 Original message:Tim Ruffing, Elliott Jin, and I are working on a MuSig2 BIP that we would like&lt;br/&gt;to propose to the community for discussion. The BIP is compatible with BIP340&lt;br/&gt;public keys and signatures. It supports tweaking, which allows deriving BIP32&lt;br/&gt;child keys from aggregate keys and creating BIP341 Taproot outputs with key and&lt;br/&gt;script paths. You can find the BIP draft at:&lt;br/&gt;&lt;a href=&#34;https://github.com/jonasnick/bips/blob/musig2/bip-musig2.mediawiki&#34;&gt;https://github.com/jonasnick/bips/blob/musig2/bip-musig2.mediawiki&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;The draft is in a state where it should be possible to write an implementation&lt;br/&gt;based on the BIP that passes the basic test vectors (as, e.g., demonstrated by&lt;br/&gt;[0]). The draft BIP also contains a reference implementation in python. Please&lt;br/&gt;be aware that this is only a draft and that it may still be necessary to make&lt;br/&gt;small tweaks to the algorithms and test vectors.&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://github.com/btcsuite/btcd/pull/1820&#34;&gt;https://github.com/btcsuite/btcd/pull/1820&lt;/a&gt;
    </content>
    <updated>2023-06-08T01:06:59&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2pnqlv828rp7w5lq3ys4vvv2pqlhr6yvzy97ezt8hxxz60klcusgzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7tgl8rn</id>
    
      <title type="html">📅 Original date posted:2020-05-05 📝 Original message:This ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2pnqlv828rp7w5lq3ys4vvv2pqlhr6yvzy97ezt8hxxz60klcusgzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7tgl8rn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2rdu5p52kz03pp3csjdf64t948g0xs3qk8qn6swuhatq4vq7g8hsjjv7gv&#39;&gt;nevent1q…v7gv&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-05&lt;br/&gt;📝 Original message:This is a reasonable suggestion. Committing to every spent scriptPubKey and&lt;br/&gt;therefore every element of the TxOut instead of just the amount makes sense&lt;br/&gt;conceptually. And it would be a small diff (~4 lines &#43; rationale) compared to&lt;br/&gt;the current bip-taproot version.&lt;br/&gt;&lt;br/&gt;As far aas I understand, coinjoin with offline signers would be substantially&lt;br/&gt;harder without this proposal. There is a WIP &amp;#34;SLIP&amp;#34; that helped me understand&lt;br/&gt;how the Proof of Ownership would work [0]. For every input, the offline signing&lt;br/&gt;device verifies a signature against the corresponding scriptPubKey. In order to&lt;br/&gt;obtain the correct scriptPubKey, sending the whole input transaction to the&lt;br/&gt;signing device is prohibitive when the available bandwidth is low (QR codes).&lt;br/&gt;The idea of only sending the transaction midstate along with the rest of&lt;br/&gt;to-be-hashed transaction data is an improvement, but still results in a lot of&lt;br/&gt;data (whole vout and witness stacks). Adding a new sighash flag that marks&lt;br/&gt;coinjoin transactions would be a step backwards fungibility-wise.&lt;br/&gt;&lt;br/&gt;Thus, the same reasoning for for committing to the input values in the&lt;br/&gt;transaction digest to allow compact fee proofs would similarly apply the&lt;br/&gt;scriptPubKeys - with the only difference that coinjoins with offline signers are&lt;br/&gt;less common.&lt;br/&gt;&lt;br/&gt;The downsides of this proposal seem to be limited. It requires additional&lt;br/&gt;review, but the BIP is only in the draft stage and should incorporate reasonable&lt;br/&gt;feedback. It does not invite further scope creep because the full TxOut would be&lt;br/&gt;already included. The costs to verifiers is only slightly increased using&lt;br/&gt;Anthony Town&amp;#39;s suggested sighash change. Availability of the scriptPubKeys for&lt;br/&gt;signing devices does not seem to be an issue because the input amounts are&lt;br/&gt;already required. And if all inputs belong to the signing device, there&amp;#39;s no&lt;br/&gt;additional data sent to the device.&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://github.com/satoshilabs/slips/blob/slips-19-20-coinjoin-proofs/slip-0019.md&#34;&gt;https://github.com/satoshilabs/slips/blob/slips-19-20-coinjoin-proofs/slip-0019.md&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On 4/29/20 2:57 PM, Andrew Kozlik via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; Hi everyone,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; In the current draft of BIP-0341 [1] the signature message commits to the&lt;br/&gt;&amp;gt; scriptPubKey of the output being spent by the input. I propose that the&lt;br/&gt;&amp;gt; signature message should commit to the scriptPubKeys of *all* transaction&lt;br/&gt;&amp;gt; inputs.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; In certain applications like CoinJoin, a wallet has to deal with&lt;br/&gt;&amp;gt; transactions containing external inputs. To calculate the actual amount&lt;br/&gt;&amp;gt; that the user is spending, the wallet needs to reliably determine for each&lt;br/&gt;&amp;gt; input whether it belongs to the wallet or not. Without such a mechanism an&lt;br/&gt;&amp;gt; adversary can fool the wallet into displaying incorrect information about&lt;br/&gt;&amp;gt; the amount being spent, which can result in theft of user funds [2].&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; In order to ascertain non-ownership of an input which is claimed to be&lt;br/&gt;&amp;gt; external, the wallet needs the scriptPubKey of the previous output spent by&lt;br/&gt;&amp;gt; this input. It must acquire the full transaction being spent and verify its&lt;br/&gt;&amp;gt; hash against that which is given in the outpoint. This is an obstacle in&lt;br/&gt;&amp;gt; the implementation of lightweight air-gapped wallets and hardware wallets&lt;br/&gt;&amp;gt; in general. If the signature message would commit to the scriptPubKeys of&lt;br/&gt;&amp;gt; all transaction inputs, then the wallet would only need to acquire the&lt;br/&gt;&amp;gt; scriptPubKey of the output being spent without having to acquire and verify&lt;br/&gt;&amp;gt; the hash of the entire previous transaction. If an attacker would provide&lt;br/&gt;&amp;gt; an incorrect scriptPubKey, then that would cause the wallet to generate an&lt;br/&gt;&amp;gt; invalid signature message.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Note that committing only to the scriptPubKey of the output being spent is&lt;br/&gt;&amp;gt; insufficient for this application, because the scriptPubKeys which are&lt;br/&gt;&amp;gt; needed to ascertain non-ownership of external inputs are precisely the ones&lt;br/&gt;&amp;gt; that would not be included in any of the signature messages produced by the&lt;br/&gt;&amp;gt; wallet.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The obvious way to implement this is to add another hash to the signature&lt;br/&gt;&amp;gt; message:&lt;br/&gt;&amp;gt; sha_scriptPubKeys (32): the SHA256 of the serialization of all&lt;br/&gt;&amp;gt; scriptPubKeys of the previous outputs spent by this transaction.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Andrew Kozlik&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; [1]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#common-signature-message&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#common-signature-message&lt;/a&gt;&lt;br/&gt;&amp;gt; [2]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-August/014843.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-August/014843.html&lt;/a&gt;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &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;
    </content>
    <updated>2023-06-07T20:24:14&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsq7et59k5khf5dpgtu9npvyql3m5vf2wkfc7uvyj0fm34luxget8czyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7rt7q6l</id>
    
      <title type="html">📅 Original date posted:2020-02-10 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsq7et59k5khf5dpgtu9npvyql3m5vf2wkfc7uvyj0fm34luxget8czyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7rt7q6l" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvxftple2swyd6d4lttn34n3usftkll5n707n98r3z3yycrdhtavctwdqej&#39;&gt;nevent1q…dqej&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-02-10&lt;br/&gt;📝 Original message:I agree with most of the comments so far, but the group brings up an often&lt;br/&gt;overlooked point with respect to the privacy benefits of taproot. In the extreme&lt;br/&gt;case, if there would be no policies that have both a key and a script spend&lt;br/&gt;path, then taproot does not improve anonymity sets compared to the &amp;#34;Taproot&lt;br/&gt;Public NUMS Optimization&amp;#34; proposal (which saves 8 vbytes in a script-spend). (*)&lt;br/&gt;&lt;br/&gt;In fact, the cases where scripts would have to be used given usage of Bitcoin&lt;br/&gt;today are be rare because threshold policies, their conjunctions and&lt;br/&gt;disjunctions can be expressed with a single public key. Even if we disregard&lt;br/&gt;speculation that timelocks, ANYPREVOUT/NOINPUT and other interesting scripts&lt;br/&gt;will be used in the future (which can be added through the leaf or key versions&lt;br/&gt;without affecting key-spend anonymity sets), not all of today&amp;#39;s applications are&lt;br/&gt;able to be represented single public keys because there are applications that&lt;br/&gt;can not deal with interactive key setups or interactive signing. For&lt;br/&gt;applications where this is possible it will be a gradual change because of the&lt;br/&gt;engineering challenges involved. For example, k-of-n threshold policies could&lt;br/&gt;have the most likely k-of-k in the taproot output key and other k-of-k in the&lt;br/&gt;leaves, instead of going for a k-of-n taproot output key immediately.&lt;br/&gt;&lt;br/&gt;Given that anonymity sets in Bitcoin are permanent and software tends to be&lt;br/&gt;deployed longer than anyone would expect at the time of deployment,&lt;br/&gt;realistically Taproot is superior to the &amp;#34;Public NUMS Optimization&amp;#34; and &amp;#34;An&lt;br/&gt;Alternative Deployment Path&amp;#34;.&lt;br/&gt;&lt;br/&gt;(*) One could argue that the little plausible deniability gained by a very small&lt;br/&gt;probability of the change of a script-spend being a key-spend and vice versa is&lt;br/&gt;significantly better than no probability at all.&lt;br/&gt;&lt;br/&gt;On 2/9/20 8:47 PM, Bryan Bishop via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; Apologies for my previous attempt at relaying the message- it looks like&lt;br/&gt;&amp;gt; the emails got mangled on the archive. I am re-sending them in this&lt;br/&gt;&amp;gt; combined email with what I hope will be better formatting. Again this is&lt;br/&gt;&amp;gt; from some nym that had trouble posting to this mailing list; I didn&amp;#39;t see&lt;br/&gt;&amp;gt; any emails in the queue so I couldn&amp;#39;t help to publish this sooner.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; SUBJECT: Taproot (and Graftroot) Complexity&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This email is the first of a collection of sentiments from a group of&lt;br/&gt;&amp;gt; developers who in aggregate prefer to remain anonymous. These emails have&lt;br/&gt;&amp;gt; been sent under a pseudonym so as to keep the focus of discussion on the&lt;br/&gt;&amp;gt; merits of the technical issues, rather than miring the discussion in&lt;br/&gt;&amp;gt; personal politics.  Our goal isn&amp;#39;t to cause a schism, but rather to help&lt;br/&gt;&amp;gt; figure out what the path forward is with Taproot. To that end, we:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 1) Discuss the merits of Taproot&amp;#39;s design versus simpler alternatives (see&lt;br/&gt;&amp;gt; thread subject, &amp;#34;Taproot (and Graftroot) Complexity&amp;#34;).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 2) Propose an alternative path to deploying the technologies described in&lt;br/&gt;&amp;gt; BIP-340, BIP-341, and BIP-342 (see thread subject, &amp;#34;An Alternative&lt;br/&gt;&amp;gt; Deployment Path for Taproot Technologies&amp;#34;).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 3) Suggest a modification to Taproot to reduce some of the overhead (see&lt;br/&gt;&amp;gt; thread subject, &amp;#34;Taproot Public NUMS Optimization&amp;#34;).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Now that the BIP has moved to draft we felt that now was the time to&lt;br/&gt;&amp;gt; prioritize review to make sure it was an acceptable change for our&lt;br/&gt;&amp;gt; activities. As a group, we&amp;#39;re excited about the totality of what Taproot&lt;br/&gt;&amp;gt; has to offer. However, after our review, we&amp;#39;re left perplexed about the&lt;br/&gt;&amp;gt; development of Taproot (and Graftroot, to a lesser extent).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We also want to convey that we have nothing but respect for the developers&lt;br/&gt;&amp;gt; and community who have poured their heart and soul into preparing Taproot.&lt;br/&gt;&amp;gt; Self evidently, it is an impressive synthesis of ideas. We believe that the&lt;br/&gt;&amp;gt; highest form of respect to pay such a synthesis of ideas is a detailed and&lt;br/&gt;&amp;gt; critical review, as it&amp;#39;s pertinent to closely consider changes to Bitcoin.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; In essence, Taproot is fundamentally the same as doing&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0114.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0114.mediawiki&lt;/a&gt; and Schnorr&lt;br/&gt;&amp;gt; signatures separately.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The main reason for putting them together -- as mentioned in the BIP -- is&lt;br/&gt;&amp;gt; a gain in efficiency. But this efficiency pre-supposes a specific use case&lt;br/&gt;&amp;gt; and probability distribution of use cases.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Compare:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Suppose a MAST for {a,b,c,d,e,f,g,h} spending conditions it looks something&lt;br/&gt;&amp;gt; like this:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;       /\&lt;br/&gt;&amp;gt;      /  \&lt;br/&gt;&amp;gt;     /    \&lt;br/&gt;&amp;gt;    /      \&lt;br/&gt;&amp;gt;   /\      /\&lt;br/&gt;&amp;gt;  /  \    /  \&lt;br/&gt;&amp;gt; /\  /\  /\  /\&lt;br/&gt;&amp;gt; a b c d e f g h&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If we want this to be functionally equivalent to Taproot, we add a new path:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;        /\&lt;br/&gt;&amp;gt;       /\ {&amp;lt;pk&amp;gt; schnorr_checksig}&lt;br/&gt;&amp;gt;      /  \&lt;br/&gt;&amp;gt;     /    \&lt;br/&gt;&amp;gt;    /      \&lt;br/&gt;&amp;gt;   /\      /\&lt;br/&gt;&amp;gt;  /  \    /  \&lt;br/&gt;&amp;gt; /\  /\  /\  /\&lt;br/&gt;&amp;gt; a b c d e f g h&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Now, to spend from this MBV you have to reveal 32 bytes on the stack for&lt;br/&gt;&amp;gt; the not taken branch, and 35 bytes for the &amp;lt;pk&amp;gt; schnorr_checksig (1 byte&lt;br/&gt;&amp;gt; push, 33 bytes PK, 1 byte checksig).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This is 67 bytes more than Taproot would require for the same spending&lt;br/&gt;&amp;gt; condition.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; However, suppose we wanted to use one of the script paths instead. We still&lt;br/&gt;&amp;gt; need to have one extra hash for the {&amp;lt;pk&amp;gt; schnorr_checksig} (depending on&lt;br/&gt;&amp;gt; if we put the key in this position or not--see below). But now we can spend&lt;br/&gt;&amp;gt; with just a logarithmic control program path.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; However, if we do the same script via taproot, we now need to provide the&lt;br/&gt;&amp;gt; base public key (33 bytes) as well as the root hash (32 bytes) and path and&lt;br/&gt;&amp;gt; then the actual scripts. With the need for 2 push bytes, this ends up being&lt;br/&gt;&amp;gt; back at 67 bytes extra.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Is Taproot just a probability assumption about the frequency and likelihood&lt;br/&gt;&amp;gt; of the signature case over the script case? Is this a good assumption?  The&lt;br/&gt;&amp;gt; BIP only goes as far as to claim that the advantage is apparent if the&lt;br/&gt;&amp;gt; outputs *could be spent* as an N of N, but doesn&amp;#39;t make representations&lt;br/&gt;&amp;gt; about how likely that N of N case would be in practice compared to the&lt;br/&gt;&amp;gt; script paths. Perhaps among use cases, more than half of the ones we expect&lt;br/&gt;&amp;gt; people to be doing could be spent as an N of N. But how frequently would&lt;br/&gt;&amp;gt; that path get used? Further, while the *use cases* might skew toward things&lt;br/&gt;&amp;gt; with N of N opt-out, we might end up in a power law case where it&amp;#39;s the one&lt;br/&gt;&amp;gt; case that doesn&amp;#39;t use an N of N opt out at all (or at a de minimis level)&lt;br/&gt;&amp;gt; that becomes very popular, thereby making Taproot more costly then&lt;br/&gt;&amp;gt; beneficial.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Further, if you don&amp;#39;t want to use a Taproot top-level key (e.g., you need&lt;br/&gt;&amp;gt; to be able to audit that no one can spend outside of one of the script&lt;br/&gt;&amp;gt; conditions), then you need to use a NUMS (nothing up my sleeve) point. This&lt;br/&gt;&amp;gt; forces users who don&amp;#39;t want Taproot to pay the expense, when if they just&lt;br/&gt;&amp;gt; had a MAST based witness type they would be cheaper. So if this use case is&lt;br/&gt;&amp;gt; at all common, Taproot leaves them worse off in terms of fees. Given that&lt;br/&gt;&amp;gt; script paths are usually done in the case where there is some contested&lt;br/&gt;&amp;gt; close, it&amp;#39;s actually in the interest of protocol developers that the&lt;br/&gt;&amp;gt; contested script path be as efficient as possible so that the fees paid&lt;br/&gt;&amp;gt; maximally increase the feerate. We think this can be fixed simply in&lt;br/&gt;&amp;gt; Taproot though, as noted below.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; On privacy, we&amp;#39;re also a bit confused as to the goal of Taproot over MAST&lt;br/&gt;&amp;gt; and Schnorr. Earlier, we presented a design with MAST which is very close&lt;br/&gt;&amp;gt; to Taproot.  However, it&amp;#39;d also be possible to just add {&amp;lt;pk&amp;gt;&lt;br/&gt;&amp;gt; schnorr_checksig} to the set {a,b,c,d,e,f,g,h}, shuffle them, and compute&lt;br/&gt;&amp;gt; some MAST structure (perhaps probability encoded) on them. This has the&lt;br/&gt;&amp;gt; effect of not having much additional fees for adding the extra Schnorr path&lt;br/&gt;&amp;gt; at redeem time (only 1 extra branch on 2/8 script paths), e.g.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;       /\&lt;br/&gt;&amp;gt;      /  \&lt;br/&gt;&amp;gt;     /    \&lt;br/&gt;&amp;gt;    /      \&lt;br/&gt;&amp;gt;   /\      /\&lt;br/&gt;&amp;gt;  /  \    /  \&lt;br/&gt;&amp;gt; /\  /\  /\  /\&lt;br/&gt;&amp;gt; a b c d e f/\ {&amp;lt;pk&amp;gt; schnorr_checksig}&lt;br/&gt;&amp;gt;           g  h&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We could argue that this is more private than Taproot, because we don&amp;#39;t&lt;br/&gt;&amp;gt; distinguish between the Schnorr key case and other cases by default, so&lt;br/&gt;&amp;gt; chain analyzers can&amp;#39;t tell if the signature came from the Taproot case or&lt;br/&gt;&amp;gt; from one of the Script paths. There&amp;#39;s also no NUMS point required, which&lt;br/&gt;&amp;gt; means chain analyzers can&amp;#39;t tell when you spend that there was no top level&lt;br/&gt;&amp;gt; key if the NUMS point is not per-output indistinguishable. By using a&lt;br/&gt;&amp;gt; semi-randomized MAST structure, chain analyzers also can&amp;#39;t tell exactly how&lt;br/&gt;&amp;gt; big your spend condition MAST was. In particular, you care more about&lt;br/&gt;&amp;gt; privacy when you are contesting a close of a channel or other script path&lt;br/&gt;&amp;gt; because then the miners could be more likely to extract a rent from you as&lt;br/&gt;&amp;gt; &amp;#34;ransom&amp;#34; for properly closing your channel (or in other words, in a&lt;br/&gt;&amp;gt; contested close the value of the closing transaction is larger than usual).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; It would also be possible to do something really simple which is to allow&lt;br/&gt;&amp;gt; the witness type to be either a MAST hash OR a schnorr key (but not a&lt;br/&gt;&amp;gt; Taproot). This allows you to not completely fracture the anonymity set&lt;br/&gt;&amp;gt; between people who want plain Schnorr and people who want MAST (at least&lt;br/&gt;&amp;gt; until they go to spend). This fix can also be used in Taproot in place of a&lt;br/&gt;&amp;gt; NUMS point, to decrease extra fees. It&amp;#39;s unclear if this plays negatively&lt;br/&gt;&amp;gt; with any future batch validation mechanism though, but the contextual&lt;br/&gt;&amp;gt; checks to exclude a witness program from the batch are relatively simple.&lt;br/&gt;&amp;gt; See thread subject, &amp;#34;Taproot Public NUMS Optimization&amp;#34;.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The considerations around Graftroot, a proposed delegation mechanism, is a&lt;br/&gt;&amp;gt; bit similar. Delegation is a mechanism by which a UTXO with script S can&lt;br/&gt;&amp;gt; sign a script R which can then be executed in addition to S without&lt;br/&gt;&amp;gt; requiring a transaction. This allows an output to monotonically and&lt;br/&gt;&amp;gt; dynamically increase the number of conditions under which it can be spent.&lt;br/&gt;&amp;gt; As noted by Pieter Wiulle here:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/kanzure/diyhpluswiki/commit/a03f6567d714f8733b578de263a4b149441cd058&#34;&gt;https://github.com/kanzure/diyhpluswiki/commit/a03f6567d714f8733b578de263a4b149441cd058&lt;/a&gt;&lt;br/&gt;&amp;gt; delegation was originally possible in Bitcoin, but got broken during an&lt;br/&gt;&amp;gt; emergency fork to split the scriptSig and scriptpubkey separation. Rather&lt;br/&gt;&amp;gt; than adding some fancy delegation mechanism in Bitcoin, why not just have a&lt;br/&gt;&amp;gt; P2SH-like semantic which allows a delegated script to be evaluated? See&lt;br/&gt;&amp;gt; BIP-117 &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0117.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0117.mediawiki&lt;/a&gt;.&lt;br/&gt;&amp;gt; This way we aren&amp;#39;t special casing where delegation can occur, and we can&lt;br/&gt;&amp;gt; allow taproot nested spending conditions (i.e., with timelocks) to generate&lt;br/&gt;&amp;gt; their own delegations. As I&amp;#39;ve seen Graftroot discussed thus far, it is as&lt;br/&gt;&amp;gt; a top-level witness program version like Taproot and non-recursive. Similar&lt;br/&gt;&amp;gt; to the above discussion, top-level is more efficient if you suspect that&lt;br/&gt;&amp;gt; delegation will be most likely occurring at the top level, but it&amp;#39;s not&lt;br/&gt;&amp;gt; clear that&amp;#39;s a good assumption as it may be common to want to allow&lt;br/&gt;&amp;gt; different scripts to delegate.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Overall, we are left with concerns both about the merit of doing Taproot&lt;br/&gt;&amp;gt; versus alternatives, as well as the process through which we got to be here.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 1) Is Taproot actually more private than bare MAST and Schnorr separately?&lt;br/&gt;&amp;gt; What are the actual anonymity set benefits compared to doing the separately?&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 2) Is Taproot actually cheaper than bare MAST and Schnorr separately? What&lt;br/&gt;&amp;gt; evidence do we have that the assumption it will be more common to use&lt;br/&gt;&amp;gt; Taproot with a key will outweigh Script cases?&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 3) Is Taproot riskier than bare MAST and Schnorr separately given the new&lt;br/&gt;&amp;gt; crypto? How well reviewed is the actual crypto parts? None of us personally&lt;br/&gt;&amp;gt; feel comfortable reviewing the crypto in Schnorr -- what&amp;#39;s the set of&lt;br/&gt;&amp;gt; people who have thoroughly reviewed the crypto and aren&amp;#39;t just ACKing&lt;br/&gt;&amp;gt; because they trust other developers to have looked at it close enough?&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 4) Design wise, couldn&amp;#39;t we forego the NUMS point requirement and be able&lt;br/&gt;&amp;gt; to check if it&amp;#39;s a hash root directly? This would encumber users who don&amp;#39;t&lt;br/&gt;&amp;gt; need the key path a cheaper spend path. See thread subject, &amp;#34;Taproot Public&lt;br/&gt;&amp;gt; NUMS Optimization&amp;#34;.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 5) Is the development model of trying to jam a bunch of features into&lt;br/&gt;&amp;gt; Bitcoin all at once good for Bitcoin development? Would we be better off if&lt;br/&gt;&amp;gt; we embraced incremental improvements that can work together (e.g., MAST and&lt;br/&gt;&amp;gt; then Schnorr)?  Although the BIP raises some points about anonymity sets&lt;br/&gt;&amp;gt; being why to do them all at once, it&amp;#39;s not clear to me this argument holds&lt;br/&gt;&amp;gt; water (same goes for businesses not upgrading). If we can take things as&lt;br/&gt;&amp;gt; smaller steps, we are not only more secure, but we also have more time to&lt;br/&gt;&amp;gt; dedicate review to each change independently. We also end up co-mingling&lt;br/&gt;&amp;gt; changes that people end up accepting only because they want one and they&amp;#39;re&lt;br/&gt;&amp;gt; bundled (e.g., MAST and Schnorr, MAST seems like a much less risky addition&lt;br/&gt;&amp;gt; versus Schnorr). See thread subject, &amp;#34;An Alternative Deployment Path for&lt;br/&gt;&amp;gt; Taproot Technologies&amp;#34;.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Our provocation with this email is primarily that we think we should more&lt;br/&gt;&amp;gt; carefully consider the benefits of Taproot over simpler primitives that are&lt;br/&gt;&amp;gt; not only easier to review, but could have been made available much sooner&lt;br/&gt;&amp;gt; rather than waiting on putting everything all together for an unclear&lt;br/&gt;&amp;gt; aggregate benefit.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We do think that most of the developers have been honest about the benefits&lt;br/&gt;&amp;gt; of Taproot, but that on closer look we feel the general ecosystem has&lt;br/&gt;&amp;gt; oversold Taproot as being the key enabler for a collection of techniques&lt;br/&gt;&amp;gt; that we could do with much simpler building blocks.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; At the end of the day, we do not strongly advocate not deploying Taproot at&lt;br/&gt;&amp;gt; this point in the review cycle. We think the Taproot Public NUMS&lt;br/&gt;&amp;gt; Optimization may be a good idea, worth considering if it&amp;#39;s not insecure, as&lt;br/&gt;&amp;gt; it cuts through the case where you would otherwise need a NUMS point.&lt;br/&gt;&amp;gt; Things like TapScript and its MAST mechanisms are well designed and offer&lt;br/&gt;&amp;gt; exciting new deployment paths, and would be something we would use even if&lt;br/&gt;&amp;gt; we opted for MAST instead of Taproot. However, we also believe it is our&lt;br/&gt;&amp;gt; duty to raise these concerns and suggestions, and we look forward to&lt;br/&gt;&amp;gt; listening to the responses of the community.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Great thanks,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The Group&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; ----&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; SUBJECT: An Alternative Deployment Path for Taproot Technologies&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This email is the second of a collection of sentiments from a group of&lt;br/&gt;&amp;gt; developers who in aggregate prefer to remain anonymous. These emails have&lt;br/&gt;&amp;gt; been sent under a pseudonym so as to keep the focus of discussion on the&lt;br/&gt;&amp;gt; merits of the technical issues, rather than miring the discussion in&lt;br/&gt;&amp;gt; personal politics. Our goal isn&amp;#39;t to cause a schism, but rather to help&lt;br/&gt;&amp;gt; figure out what the path forward is with Taproot. To that end, we: [clip&lt;br/&gt;&amp;gt; repeat]&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; As a follow up to our prior message, we propose a different path forward&lt;br/&gt;&amp;gt; for the Taproot family of changes:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 1) A separate soft-fork for Merkle Branch Witnesses based on Taproot;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 2) A separate soft-fork for Schnorr Signatures&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 3) A separate follow up soft-fork which enables Taproot and Graftroot&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We think that the first 2 forks can be offered at the same time or one at a&lt;br/&gt;&amp;gt; time.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Taproot, as a follow up to changes 1 and 2, can be enabled as a soft-fork&lt;br/&gt;&amp;gt; on the existing semantics, but requiring a new witness version. With the&lt;br/&gt;&amp;gt; Public NUMS Optimization, wallets could upgrade by just changing one&lt;br/&gt;&amp;gt; version byte to be in the same anonymity set as Taproot.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; It&amp;#39;s not clear to us that the time to prepare a BIP and implementation for&lt;br/&gt;&amp;gt; 1 and 2 at this point would be any less than the time to do Taproot as&lt;br/&gt;&amp;gt; currently proposed. However, we believe that such a deployment plan is a&lt;br/&gt;&amp;gt; reasonable option as it is more conservative, as Merkle Branch witnesses&lt;br/&gt;&amp;gt; are relatively simple and users only have to use Schnorr signing if they&lt;br/&gt;&amp;gt; want to, and can otherwise continue to use ECDSA. A further benefit of&lt;br/&gt;&amp;gt; waiting on 3 is that we get to collect real world protocol engineering&lt;br/&gt;&amp;gt; experience to see how frequently the Taproot frequency of use assumption&lt;br/&gt;&amp;gt; holds, and if it is worth doing or not.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Great thanks,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The Group&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; ----&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; SUBJECT: Taproot Public NUMS Optimization&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This email is the third of a collection of sentiments from a group of&lt;br/&gt;&amp;gt; developers who in aggregate prefer to remain anonymous. These emails have&lt;br/&gt;&amp;gt; been sent under a pseudonym so as to keep the focus of discussion on the&lt;br/&gt;&amp;gt; merits of the technical issues, rather than miring the discussion in&lt;br/&gt;&amp;gt; personal politics. Our goal isn&amp;#39;t to cause a schism, but rather to help&lt;br/&gt;&amp;gt; figure out what the path forward is with Taproot. To that end, we: [clipped&lt;br/&gt;&amp;gt; again]&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We propose to modify Taproot&amp;#39;s specification in BIP-341 by adding the rule:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If there is one element on the witness stack:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 1) Attempt hashing it to see if it&amp;#39;s equal to  the witness program. The&lt;br/&gt;&amp;gt; first byte is the control byte for leaf versioning.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 2) If it&amp;#39;s not the witness program, and it&amp;#39;s 65 bytes, try signature&lt;br/&gt;&amp;gt; validation&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If there is more than one element on the witness stack:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If the control block is even, treat it as a non-Taproot MAST and get the&lt;br/&gt;&amp;gt; leaf version as the last byte of the script (so you can pop it off before&lt;br/&gt;&amp;gt; hashing).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If greater anonymity is required, a NUMS point can still be used in&lt;br/&gt;&amp;gt; Taproot, at the expense of the additional data. However, if NUMS points are&lt;br/&gt;&amp;gt; just a couple well known constants this could actually decrease privacy as&lt;br/&gt;&amp;gt; then the NUMS points could differ from application to application&lt;br/&gt;&amp;gt; fingerprinting wallets.  Instead, the NUMS point should only be used when a&lt;br/&gt;&amp;gt; single use nonce can be sent, so that NUMS cannot be distinguished from a&lt;br/&gt;&amp;gt; normal Taproot to a third party who doesn&amp;#39;t know the setup (e.g., that the&lt;br/&gt;&amp;gt; NUMS is H(X) for known X).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Great thanks,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The Group&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &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;
    </content>
    <updated>2023-06-07T20:22:52&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8u5y4706j7qvg5v3jq37e3576mvfazrlrw0uhsnzf5fump9qgldqzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7j0g4dz</id>
    
      <title type="html">📅 Original date posted:2019-02-08 📝 Original message:Output ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8u5y4706j7qvg5v3jq37e3576mvfazrlrw0uhsnzf5fump9qgldqzyr4wy84js4zmyqgkm9qgz7efjk25wkxs64g3d92yy6qlqd0640nq7j0g4dz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9vwx84zqsgmmmnvlge4jgx2jwkflj6udeq7sdmpzjcj49y527aqgkm7kqc&#39;&gt;nevent1q…7kqc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-02-08&lt;br/&gt;📝 Original message:Output tagging may result in reduced fungibility in multiparty eltoo channels.&lt;br/&gt;If one party is unresponsive, the remaining participants want to remove&lt;br/&gt;the party from the channel without downtime. This is possible by creating&lt;br/&gt;settlement transactions which pay off the unresponsive party and fund a new&lt;br/&gt;channel with the remaining participants.&lt;br/&gt;&lt;br/&gt;When the party becomes unresponsive, the channel is closed by broadcasting the&lt;br/&gt;update transaction as usual. As soon as that happens the remaining&lt;br/&gt;participants can start to update their new channel. Their update signatures&lt;br/&gt;must use SIGHASH_NOINPUT. This is because in eltoo the settlement txid is not&lt;br/&gt;final (because update tx is not confirmed and may have to rebind to another&lt;br/&gt;output). Therefore, the funding output of the new channel must be NOINPUT&lt;br/&gt;tagged. Assuming the remaining parties later settle cooperatively, this loss&lt;br/&gt;of fungibility would not have happened without output tagging.&lt;br/&gt;&lt;br/&gt;funding output          update output                                    settlement outputs              update output&lt;br/&gt;[ A &amp;amp; B &amp;amp; C ] -&amp;gt; ... -&amp;gt; [ (A &amp;amp; B &amp;amp; C &amp;amp; state CLTV) | (As &amp;amp; Bs &amp;amp; Cs) ] -&amp;gt; [ NOINPUT tagged: (A&amp;#39; &amp;amp; B&amp;#39;), -&amp;gt; ...&lt;br/&gt;                                                                           C&amp;#39; ]&lt;br/&gt;If the expectation is that the unresponsive party returns, fungibility is&lt;br/&gt;not reduced due to output tagging because the above scheme can be used&lt;br/&gt;off-chain until the original channel can be continued.&lt;br/&gt;&lt;br/&gt;Side note: I was not able to come up with an similar, eltoo-like protocol that works&lt;br/&gt;if you can&amp;#39;t predict in advance who will become absent.&lt;br/&gt;&lt;br/&gt;On 12/13/18 12:32 PM, Johnson Lau via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; NOINPUT is very powerful, but the tradeoff is the risks of signature replay. While the key holders are expected not to reuse key pair, little could be done to stop payers to reuse an address. Unfortunately, key-pair reuse has been a social and technical norm since the creation of Bitcoin (the first tx made in block 170 reused the previous public key). I don’t see any hope to change this norm any time soon, if possible at all.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; As the people who are designing the layer-1 protocol, we could always blame the payer and/or payee for their stupidity, just like those people laughed at victims of Ethereum dumb contracts (DAO, Parity multisig, etc). The existing bitcoin script language is so restrictive. It disallows many useful smart contracts, but at the same time prevented many dumb contracts. After all, “smart” and “dumb” are non-technical judgement. The DAO contract has always been faithfully executed. It’s dumb only for those invested in the project. For me, it was just a comedy show.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; So NOINPUT brings us more smart contract capacity, and at the same time we are one step closer to dumb contracts. The target is to find a design that exactly enables the smart contracts we want, while minimising the risks of misuse.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The risk I am trying to mitigate is a payer mistakenly pay to a previous address with the exactly same amount, and the previous UTXO has been spent using NOINPUT. Accidental double payment is not uncommon. Even if the payee was honest and willing to refund, the money might have been spent with a replayed NOINPUT signature. Once people lost a significant amount of money this way, payers (mostly exchanges) may refuse to send money to anything other than P2PKH, native-P2WPKH and native-P2WSH (as the only 3 types without possibility of NOINPUT)&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The proposed solution is that an output must be “tagged” for it to be spendable with NOINPUT, and the “tag” must be made explicitly by the payer. There are 2 possible ways to do the tagging:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 1. A certain bit in the tx version must be set&lt;br/&gt;&amp;gt; 2. A certain bit in the scriptPubKey must be set&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I will analyse the pros and cons later.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Using eltoo as example. The setup utxo is a simple 2-of-2 multisig, and should not be tagged. This makes it indistinguishable from normal 1-of-1 utxo. The trigger tx, which spends the setup utxo, should be tagged, so the update txs could spend the trigger utxo with NOINPUT. Similarly, all update txs should be tagged, so they could be spent by other update txs and settlement tx with NOINPUT. As the final destination, there is no need to tag in the settlement tx.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; In payer’s perspective, tagging means “I believe this address is for one-time-use only” Since we can’t control how other people manage their addresses, we should never do tagging when paying to other people.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I mentioned 2 ways of tagging, and they have pros and cons. First of all, tagging in either way should not complicate the eltoo protocol in anyway, nor bring extra block space overhead.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; A clear advantage of tagging with scriptPubKey is we could tag on a per-output basis. However, scriptPubKey tagging is only possible with native-segwit, not P2SH. That means we have to disallow NOINPUT in P2SH-segwit (Otherwise, *all* P2SH addresses would become “risky” for payers) This should be ok for eltoo, since it has no reason to use P2SH-segwit in intermediate txs, which is more expensive.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Another problem with scriptPubKey tagging is all the existing bech32 implementations will not understand the special tag, and will pay to a tagged address as usual. An upgrade would be needed for them to refuse sending to tagged addresses by default.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; On the other hand, tagging with tx version will also protect P2SH-segwit, and all existing wallets are protected by default. However, it is somewhat a layer violation and you could only tag all or none output in the same tx. Also, as Bitcoin Core has just removed the tx version from the UTXO database, adding it back could be a little bit annoying, but doable.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; There is an extension to the version tagging, which could make NOINPUT even safer. In addition to tagging requirement, NOINPUT will also sign the version of the previous tx. If the wallet always uses a randomised tx version, it makes accidental replay very unlikely. However, that will burn a few more bits in the tx version field.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; While this seems fully compatible with eltoo, is there any other proposals require NOINPUT, and is adversely affected by either way of tagging?&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;
    </content>
    <updated>2023-06-07T20:16:10&#43;02:00</updated>
  </entry>

</feed>