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




  <entry>
    <id>https://nostr.ae/nevent1qqsz7h5jnna5pddztamaw8cvql7dc34z80ely48t77nrkezfwxpv0vgzyzj0ct7zhlqxre66rdhp0h7yk0ynhp06kt7fzqqlgn7cfxwkw2ckjp9qrht</id>
    
      <title type="html">📅 Original date posted:2020-03-27 📝 Original message:Big ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsz7h5jnna5pddztamaw8cvql7dc34z80ely48t77nrkezfwxpv0vgzyzj0ct7zhlqxre66rdhp0h7yk0ynhp06kt7fzqqlgn7cfxwkw2ckjp9qrht" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxj9la34dn6wrw3uccwfp6suxw30wghcu0eg4cysvkwsvrwlygzdchk02ht&#39;&gt;nevent1q…02ht&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-03-27&lt;br/&gt;📝 Original message:Big picture, it seems to me this idea is workable and very interesting. I see&lt;br/&gt;three likely enhancements that will be necessary or desirable:&lt;br/&gt;    1. Atomic swap of multiple UTXOs, and binary decomposition of value in lots&lt;br/&gt;    2. Key exchange (&amp;#34;addresses&amp;#34;) to facilitate a secure comms path from &lt;br/&gt;        sender -&amp;gt; receiver&lt;br/&gt;    3. (Optional) single-use seals to close old state&lt;br/&gt;&lt;br/&gt;(1) It&amp;#39;s unlikely that a party sending a UTXO to another party will have a UTXO&lt;br/&gt;of exactly the right size that&amp;#39;s needed, already locked into the statechain. If&lt;br/&gt;he has to create the UTXO first and then lock it into the statechain, the&lt;br/&gt;statechain solution is no better than an on-chain send. And once the receiver&lt;br/&gt;has the UTXO, it&amp;#39;s unlikely that he will want to send exactly that same amount&lt;br/&gt;to another receiver later. This isn&amp;#39;t a problem in Lightning where amounts can&lt;br/&gt;be arbitrarily updated. As a consequence, I think Lightning is more valuable for&lt;br/&gt;small-value payments, and statechains will be more valuable for larger values.&lt;br/&gt;&lt;br/&gt;The natural solution is to decompose your outputs in a binary decomposition,&lt;br/&gt;having e.g. UTXOs with 1048576 satoshis, another with 2097152 satoshis, and so&lt;br/&gt;on. Then when I want to send, I select the appropriate UTXOs as a binary&lt;br/&gt;decomposition of the value I want to send, with a &amp;#34;lot size&amp;#34; of 1048576&lt;br/&gt;satoshis, or the dust limit. The notion of &amp;#34;lots&amp;#34; like this is common in&lt;br/&gt;traditional markets...many stocks are bought and sold in lots of 100, and forex&lt;br/&gt;is traded in lots of $100,000. Users of a statechain therefore need log(V)&lt;br/&gt;available UTXOs locked into the statechain, where V is their value in BTC.&lt;br/&gt;Having fixed lot sizes like this also makes coinjoin-type uses more viable. The&lt;br/&gt;statechain could also assist in dividing a UTXO into two utxos of the next lot&lt;br/&gt;size down, so that I have the right UTXOs to hit the value I want to send.&lt;br/&gt;&lt;br/&gt;This means that the statechain now has to *atomically* swap multiple UTXOs. In&lt;br/&gt;principle, it should be possible for a statechain to circumvent the&lt;br/&gt;Pagnia-Gärtner theorem[1] as it is a trusted third party, but guaranteed output&lt;br/&gt;delivery will still be a problem. If a statechain can do this, it is also&lt;br/&gt;capable of performing such swaps across two blockchains, creating the&lt;br/&gt;execution/clearing element (but not order book) for a DEX. This same mechanism&lt;br/&gt;can also be used to pay the SE for its service through a different UTXO than the&lt;br/&gt;one being transferred.&lt;br/&gt;&lt;br/&gt;Second (2), the steps in Tom&amp;#39;s protocol presuppose a secure communications path&lt;br/&gt;from the sender&amp;#39;s wallet to the receiver&amp;#39;s. This is probably not practical for a&lt;br/&gt;myriad of reasons, but this data can be relayed through the SE if it is&lt;br/&gt;encrypted for the target. This implies a new kind of &amp;#34;address&amp;#34; or &amp;#34;payment&lt;br/&gt;request&amp;#34; that identifies the IP of the SE in use, pubkey of the&lt;br/&gt;sender/recipient, and amount. If sender and receiver have each other&amp;#39;s pubkeys&lt;br/&gt;through another channel, as addresses/lightning payment requests are used today,&lt;br/&gt;they can perform a Diffie-Hellman round mediated by the SE to establish a secure&lt;br/&gt;communications path for the rounds of the protocol. Piggybacking on the&lt;br/&gt;Lightning p2p network might be another option.&lt;br/&gt;&lt;br/&gt;Third (3), a logical enhancement would be to use some kind of single-use seal,&lt;br/&gt;which is &amp;#34;opened&amp;#34; when the UTXO is created or transferred, and &amp;#34;closed&amp;#34; when it&lt;br/&gt;is transferred again. Thus a receiver can ensure that the sender is the holder&lt;br/&gt;of current state and not some old state.  It&amp;#39;s a good idea from Peter Todd, and&lt;br/&gt;Tom&amp;#39;s Mainstay[2] may be a way to do it. The SE itself can maintain a rolling&lt;br/&gt;single-use seal Merkle root, periodically timestamped into Bitcoin for faster&lt;br/&gt;time resolution than Bitcoin, if you trust the SE but not your counterparty&lt;br/&gt;(which is the trust assumption present in the first place). Getting Bitcoin&lt;br/&gt;itself to reject backout transactions from closed seals is another problem...but&lt;br/&gt;having a single-use seal implementation involved is a start.&lt;br/&gt;&lt;br/&gt;.. [1] &lt;a href=&#34;https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.44.7863&#34;&gt;https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.44.7863&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;.. [2] &lt;a href=&#34;https://mainstay.xyz&#34;&gt;https://mainstay.xyz&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Tom Trevethan via bitcoin-dev [bitcoin-dev at lists.linuxfoundation.org] wrote:&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We are starting to work on an implementation of the statechains concept (https:&lt;br/&gt;&amp;gt; //medium.com/@RubenSomsen/&lt;br/&gt;&amp;gt; statechains-non-custodial-off-chain-bitcoin-transfer-1ae4845a4a39), with&lt;br/&gt;&amp;gt; particular interest in using the protocol enable the change of ownership&lt;br/&gt;&amp;gt; (novation) of an individual position in an active discreet log contract (DLC)&lt;br/&gt;&amp;gt; without an on-chain transaction, and without needing the cooperation of the&lt;br/&gt;&amp;gt; counterparty. The protocol as outlined by Ruben requires features not currently&lt;br/&gt;&amp;gt; available in Bitcoin (like SIGHASH_NOINPUT), and it is uncertain when (or even&lt;br/&gt;&amp;gt; if) this will be added. So we are looking at variants that would work with&lt;br/&gt;&amp;gt; current Bitcoin functionality, and it would be good to get some feedback on&lt;br/&gt;&amp;gt; them.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; There are two main modifications we are looking at:&lt;br/&gt;&amp;gt; 1. Instead of an eltoo-based backup/refund transaction (enabling the current&lt;br/&gt;&amp;gt; owner to claim the UTXO in case the statechain entity disappears) we propose&lt;br/&gt;&amp;gt; using a decrementing nLocktime for backup transactions as the output changes&lt;br/&gt;&amp;gt; hands. Here, the first owner gets a backup transaction with an nLocktime at&lt;br/&gt;&amp;gt; some future height (h0), then the next owner gets a backup transaction with&lt;br/&gt;&amp;gt; nLocktime (h0-c) where c is a confirmation window. This approach has the&lt;br/&gt;&amp;gt; downside of limiting the lifetime of the UTXO, but it also doesn&amp;#39;t require the&lt;br/&gt;&amp;gt; current owner to be always online.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; 2. Replacing the 2-of-2 multisig output (paying to statechain entity SE key and&lt;br/&gt;&amp;gt; transitory key) with a single P2(W)PKH output where the public key shared&lt;br/&gt;&amp;gt; between the SE and the current owner. The SE and the current owner can then&lt;br/&gt;&amp;gt; sign with a 2-of-2 ECDSA MPC. This enables each owner to generate their own&lt;br/&gt;&amp;gt; private key share, and the SE changes their key share at each change of&lt;br/&gt;&amp;gt; ownership (with the shared public key remaining the same). This works as&lt;br/&gt;&amp;gt; follows (.G is EC point multiplication, * is scalar multiplication):&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; KeyGen:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; a. Owner 1 generates private key share o1 then calculates the corresponding&lt;br/&gt;&amp;gt; public key of the share O1 and sends it to the SE: O1 = o1.G&lt;br/&gt;&amp;gt; b. The SE then generates a private key: s1 (the SE private key share),&lt;br/&gt;&amp;gt; calculates the corresponding public key and sends it to Owner 1: S1 = s1.G&lt;br/&gt;&amp;gt; c. Both SE and Owner 1 then multiply the public keys they receive by their own&lt;br/&gt;&amp;gt; private key shares to obtain the same shared public key P (which corresponds to&lt;br/&gt;&amp;gt; a shared private key of p = o1*s1): P = o1.(s1.G) = s1.(o1.G)&lt;br/&gt;&amp;gt; d. Owner 1 creates a funding transaction (Tx0) to pay an amount A to the&lt;br/&gt;&amp;gt; address corresponding to P (but doesn&amp;#39;t sign it).&lt;br/&gt;&amp;gt; e. Once Owner 1 and SE cooperatively sign the first backup transaction, Owner 1&lt;br/&gt;&amp;gt; then signs and broadcasts the deposit transaction Tx0.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Transfer from Owner 1 to Owner 2:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; a. Owner 2 generates two private keys: o2 (the new owner UTXO private key&lt;br/&gt;&amp;gt; share) and b2 (the new owner refund private key).&lt;br/&gt;&amp;gt; b. The SE generates a temporary blinding nonce x and calculates the value x*s1&lt;br/&gt;&amp;gt; and sends this securely to Owner 2.&lt;br/&gt;&amp;gt; c. Owner 2 then multiplies this received value by the modular inverse of o2&lt;br/&gt;&amp;gt; (o2_inv) and then sends this value (x*s1*o2_inv), to Owner 1.&lt;br/&gt;&amp;gt; d. Owner 1 then multiplies this received value by the key share o1 and sends&lt;br/&gt;&amp;gt; the resulting value (x*s1*o2_inv*o1) to the SE.&lt;br/&gt;&amp;gt; e. The SE then multiplies this received value by the modular inverse of the&lt;br/&gt;&amp;gt; temporary nonce (x_inv) to obtain x*s1*o2_inv*o1*x_inv. This cancels the&lt;br/&gt;&amp;gt; blinding nonce x to give s1*o2_inv*o1. This value, when multiplied by the new&lt;br/&gt;&amp;gt; owner key share o2 equals the original shared private key s1*o1.&lt;br/&gt;&amp;gt; f. The SE then sets this value equal to s2 = s1*o2_inv*o1 and deletes s1. s2&lt;br/&gt;&amp;gt; and o2 are now the key shares of `P` and can be used to colaboritively sign&lt;br/&gt;&amp;gt; (with 2P ECDSA). So long as the SE delets s1, the old owner key share (o1) is&lt;br/&gt;&amp;gt; of no use in deriving or co-signing with the full shared private key, and is&lt;br/&gt;&amp;gt; invalidated.&lt;br/&gt;&amp;gt; g. The shared public key P remains unchanged, but the corresponding private key&lt;br/&gt;&amp;gt; (which no individual party ever has knowledge of or can derive) can only be&lt;br/&gt;&amp;gt; determined from the key shares of the SE and Owner 2 (i.e. P = s2*o2.G).&lt;br/&gt;&amp;gt; h. Owner 2 then calculates their backup public key (B2 = b2.G) and sends it to&lt;br/&gt;&amp;gt; the SE.&lt;br/&gt;&amp;gt; i. The SE creates a backup transaction (Tx2) that pays the output of Tx0 to the&lt;br/&gt;&amp;gt; address corresponding to B2 , with `nLockTime` set to a block height h0 - c0,&lt;br/&gt;&amp;gt; where c0, is a confirmation time sufficient to guarantee that Tx2 can be&lt;br/&gt;&amp;gt; confirmed in the blockchain before Tx1 (therefore making Tx1 invalid).&lt;br/&gt;&amp;gt; j. Owner 2 and the SE then cooperate to sign Tx2 with shared key (P) using the&lt;br/&gt;&amp;gt; 2P ECDSA protocol, which Owner 2 then saves.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The principle of the logic of the key transfer is that the two separate key&lt;br/&gt;&amp;gt; shares are updated, but the full shared private key (which no-one knows)&lt;br/&gt;&amp;gt; remains the same. The new owner chooses a new secret value for their private&lt;br/&gt;&amp;gt; key share, and this (along with the private key share of the previous owner) is&lt;br/&gt;&amp;gt; utilized by the SE to update their share. The use of the nonce (x) prevents any&lt;br/&gt;&amp;gt; of the participants from determining any information about each others secret&lt;br/&gt;&amp;gt; keys. In this way Owner 2 cannot determine s1 from x*s1, Owner 1 cannot&lt;br/&gt;&amp;gt; determine s1 or o2 from x*s1*o2_inv and the SE cannot determine o1 or o2 from&lt;br/&gt;&amp;gt; x*s1*o2_inv*o1.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This transfer protocol can be repeated to transfer the ownership to new owners.&lt;br/&gt;&amp;gt; Each time the SE key share sX is updated, the previous key shares become&lt;br/&gt;&amp;gt; invalid and are of no use even if the current key share is subsequently&lt;br/&gt;&amp;gt; revealed. The SE still needs to be trusted to delete the old key share, but&lt;br/&gt;&amp;gt; this protocol removes the risk the the SE can be hacked by a previous owner to&lt;br/&gt;&amp;gt; steal the funds.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Any comments on the above would be greatly appreciated.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Tom&lt;br/&gt;&amp;gt; !DSPAM:5e7b7203210751402398759!&lt;br/&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; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; !DSPAM:5e7b7203210751402398759!&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Cheers, Bob McElrath&lt;br/&gt;&lt;br/&gt;&amp;#34;For every complex problem, there is a solution that is simple, neat, and wrong.&amp;#34;&lt;br/&gt;    -- H. L. Mencken &lt;br/&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;A non-text attachment was scrubbed...&lt;br/&gt;Name: signature.asc&lt;br/&gt;Type: application/pgp-signature&lt;br/&gt;Size: 181 bytes&lt;br/&gt;Desc: Digital signature&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200327/72079e39/attachment-0001.sig&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200327/72079e39/attachment-0001.sig&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:23:39&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxj9la34dn6wrw3uccwfp6suxw30wghcu0eg4cysvkwsvrwlygzdczyzj0ct7zhlqxre66rdhp0h7yk0ynhp06kt7fzqqlgn7cfxwkw2ckjrkwga5</id>
    
      <title type="html">📅 Original date posted:2020-03-26 📝 Original message:Very ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxj9la34dn6wrw3uccwfp6suxw30wghcu0eg4cysvkwsvrwlygzdczyzj0ct7zhlqxre66rdhp0h7yk0ynhp06kt7fzqqlgn7cfxwkw2ckjrkwga5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9jl9vcjfxg9f9gdd978jl35mxfz3vsst2fyxknqknshky6vyqydc7753kj&#39;&gt;nevent1q…53kj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-03-26&lt;br/&gt;📝 Original message:Very good point, but I think this is easy to fix.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s not actually necessary that the quantity in (b) involve the SE&amp;#39;s secret key&lt;br/&gt;s1. It can be purely the blinding factor. This quantity gets relayed through the&lt;br/&gt;SE anyway, after a round trip through owner 2, where the SE removes the blinding&lt;br/&gt;nonce. The SE needs to determine the ratio of the two private keys o1*o2_inv.&lt;br/&gt;There&amp;#39;s no reason for the SE to send anything about s1 other than the public&lt;br/&gt;keys S1=s1.G and S2=s2.G, keeping the secret keys s1 and s2 hidden behind ECDLP&lt;br/&gt;and not sharing quantities involving them in Z_p.&lt;br/&gt;&lt;br/&gt;Thus:&lt;br/&gt;b. (SE) x -&amp;gt; (2)&lt;br/&gt;c. (2) o2_inv*x -&amp;gt; (1) &lt;br/&gt;d. (1) o1*(o2_inv*x) -&amp;gt; (SE)&lt;br/&gt;e. (SE) s2 = x_inv*(o1*o2_inv*x)*s1 = o1*o2_inv*s1&lt;br/&gt;        s2.G -&amp;gt; (2)&lt;br/&gt;f. (2) o2.s2.G = o1.s1.G = P&lt;br/&gt;&lt;br/&gt;Now we could have had a different problem, in step (e) if the SE sends owner 2&lt;br/&gt;the quantity o1*o2_inv*s1, a self-sending owner can determine a similar quantity&lt;br/&gt;to what you described (x1&#43;x2)*s1: (o1*o2_inv &#43; o2*o3_inv)*s1 and we&amp;#39;re back to&lt;br/&gt;an Irwin-Hall distribution.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s not necessary to send a quantity involving s1 in steps (b-e). Owner 2&lt;br/&gt;already has his private key o2 and the SE has his new private key&lt;br/&gt;s2=o1*o2_inv*s1. Since P=o1.s1.G=o2.s2.G we&amp;#39;re set up for o2 to transfer the&lt;br/&gt;funds, but it&amp;#39;s necessary to prove to (2) that his o2 does in fact control the&lt;br/&gt;UTXO. This can be done by sending (2) the public key S2=s2.G which he can&lt;br/&gt;multiply by o2 to get P=o2.s2.G and verify that the SE does have the correct&lt;br/&gt;private key corresponding to his o2 for the public key P recorded on-chain.&lt;br/&gt;&lt;br/&gt;Thus in the self-send situation, the owner no longer has any algebraic relations&lt;br/&gt;he can use as you describe.&lt;br/&gt;&lt;br/&gt;Algebraic relations remain in step (d) that a self-sending owner could use, but&lt;br/&gt;they all involve his own private keys, which he knows anyway. He has only one&lt;br/&gt;relation from the previous owner and all subsequent relations do not involve&lt;br/&gt;that owner. However if a pair of entities send funds back and forth, each owner&lt;br/&gt;could collect a sum as you describe, if the counterparty (2) re-uses keys:&lt;br/&gt;    o2_inv*(x1 &#43; x2)&lt;br/&gt;The SE has similar relations in step (e) if there&amp;#39;s key reuse.  Therefore it&amp;#39;s&lt;br/&gt;important that on each transfer, you generate a new key and do not re-use keys.&lt;br/&gt;A responsible SE could detect a key-reuse situation by e.g.  recording old&lt;br/&gt;pubkeys P1, P2 even though he deleted s1 and s2, and inform the user of the&lt;br/&gt;key-reuse error and abort.&lt;br/&gt;&lt;br/&gt;Do you think that works?&lt;br/&gt;&lt;br/&gt;P.S. SGX is not &amp;#34;trust minimization&amp;#34;, it&amp;#39;s &amp;#34;trust transfer&amp;#34; -- specifically to&lt;br/&gt;the keys managing the SGX. If we thought processor manufacturers were better at&lt;br/&gt;key management than the rest of us, we should just hand them the task. I don&amp;#39;t&lt;br/&gt;think that&amp;#39;s the case, and I don&amp;#39;t think anyone else does either. An SGX&lt;br/&gt;attestation as an optional add-on I think is a worthwhile enhancement, as long&lt;br/&gt;as it&amp;#39;s not on the critical path of the protocol.&lt;br/&gt;&lt;br/&gt;Albert via bitcoin-dev [bitcoin-dev at lists.linuxfoundation.org] wrote:&lt;br/&gt;&amp;gt; Hi,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Great to see some work in this direction, here&amp;#39;s some thoughts on your keygen&lt;br/&gt;&amp;gt; scheme:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; In the scenario where Owner1=Owner2, that is, one of the owners sends some&lt;br/&gt;&amp;gt; coins to itself, that owner would get to know both x1*s1 and x2*s2=&lt;br/&gt;&amp;gt; x2*s1*o2_inv*o1, and, because he already knows o1 and o2, that implies&lt;br/&gt;&amp;gt; knowledge of both x1*s1 and x2*s1 where x1 and x2 are random numbers sampled&lt;br/&gt;&amp;gt; from an uniform distribution. Once the owner has these two numbers, he can just&lt;br/&gt;&amp;gt; sum these together to obtain s1*(x1&#43;x2).&lt;br/&gt;&amp;gt; Now, because of the central limit theorem, the distribution of x1&#43;x2 should&lt;br/&gt;&amp;gt; approximate a normal one, concretely an Irwin–Hall distribution, with that&lt;br/&gt;&amp;gt; approximation getting better when more numbers are collected through iterations&lt;br/&gt;&amp;gt; of the protocol. Once you&amp;#39;ve collected enough numbers to approximate a normal&lt;br/&gt;&amp;gt; well enough (looking at Irwin Hall distribution graphs^[1] you can observe that&lt;br/&gt;&amp;gt; with less than 10 samples the distribution is already pretty similar to a&lt;br/&gt;&amp;gt; normal one), it should be possible to drastically reduce the search space and&lt;br/&gt;&amp;gt; apply brute force to guess the value of \sum x and, consequently, s1.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Practically, it&amp;#39;s possible that the search space is still too large for&lt;br/&gt;&amp;gt; brute-force to be fruitful, so this attack might not work, but it shows that&lt;br/&gt;&amp;gt; there is information leakage in every protocol iteration.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; On another note, if you are not already aware of, something which might be&lt;br/&gt;&amp;gt; worth looking into is the possibility of further trust-minimising the SE role&lt;br/&gt;&amp;gt; by forcing it&amp;#39;s code to be run inside an AWS oracle or a hardware isolated&lt;br/&gt;&amp;gt; processor such as SGX.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Albert&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; [1] &lt;a href=&#34;https://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution&#34;&gt;https://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution&lt;/a&gt;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; On Wed, Mar 25, 2020, at 9:52 PM, Tom Trevethan via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     Hi all,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     We are starting to work on an implementation of the statechains concept (&lt;br/&gt;&amp;gt;     &lt;a href=&#34;https://medium.com/@RubenSomsen/&#34;&gt;https://medium.com/@RubenSomsen/&lt;/a&gt;&lt;br/&gt;&amp;gt;     statechains-non-custodial-off-chain-bitcoin-transfer-1ae4845a4a39), with&lt;br/&gt;&amp;gt;     particular interest in using the protocol enable the change of ownership&lt;br/&gt;&amp;gt;     (novation) of an individual position in an active discreet log contract&lt;br/&gt;&amp;gt;     (DLC) without an on-chain transaction, and without needing the cooperation&lt;br/&gt;&amp;gt;     of the counterparty. The protocol as outlined by Ruben requires features&lt;br/&gt;&amp;gt;     not currently available in Bitcoin (like SIGHASH_NOINPUT), and it is&lt;br/&gt;&amp;gt;     uncertain when (or even if) this will be added. So we are looking at&lt;br/&gt;&amp;gt;     variants that would work with current Bitcoin functionality, and it would&lt;br/&gt;&amp;gt;     be good to get some feedback on them.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     There are two main modifications we are looking at:&lt;br/&gt;&amp;gt;     1. Instead of an eltoo-based backup/refund transaction (enabling the&lt;br/&gt;&amp;gt;     current owner to claim the UTXO in case the statechain entity disappears)&lt;br/&gt;&amp;gt;     we propose using a decrementing nLocktime for backup transactions as the&lt;br/&gt;&amp;gt;     output changes hands. Here, the first owner gets a backup transaction with&lt;br/&gt;&amp;gt;     an nLocktime at some future height (h0), then the next owner gets a backup&lt;br/&gt;&amp;gt;     transaction with nLocktime (h0-c) where c is a confirmation window. This&lt;br/&gt;&amp;gt;     approach has the downside of limiting the lifetime of the UTXO, but it also&lt;br/&gt;&amp;gt;     doesn&amp;#39;t require the current owner to be always online.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     2. Replacing the 2-of-2 multisig output (paying to statechain entity SE key&lt;br/&gt;&amp;gt;     and transitory key) with a single P2(W)PKH output where the public key&lt;br/&gt;&amp;gt;     shared between the SE and the current owner. The SE and the current owner&lt;br/&gt;&amp;gt;     can then sign with a 2-of-2 ECDSA MPC. This enables each owner to generate&lt;br/&gt;&amp;gt;     their own private key share, and the SE changes their key share at each&lt;br/&gt;&amp;gt;     change of ownership (with the shared public key remaining the same). This&lt;br/&gt;&amp;gt;     works as follows (.G is EC point multiplication, * is scalar&lt;br/&gt;&amp;gt;     multiplication):&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     KeyGen:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     a. Owner 1 generates private key share o1 then calculates the corresponding&lt;br/&gt;&amp;gt;     public key of the share O1 and sends it to the SE: O1 = o1.G&lt;br/&gt;&amp;gt;     b. The SE then generates a private key: s1 (the SE private key share),&lt;br/&gt;&amp;gt;     calculates the corresponding public key and sends it to Owner 1: S1 = s1.G&lt;br/&gt;&amp;gt;     c. Both SE and Owner 1 then multiply the public keys they receive by their&lt;br/&gt;&amp;gt;     own private key shares to obtain the same shared public key P (which&lt;br/&gt;&amp;gt;     corresponds to a shared private key of p = o1*s1): P = o1.(s1.G) = s1.&lt;br/&gt;&amp;gt;     (o1.G)&lt;br/&gt;&amp;gt;     d. Owner 1 creates a funding transaction (Tx0) to pay an amount A to the&lt;br/&gt;&amp;gt;     address corresponding to P (but doesn&amp;#39;t sign it).&lt;br/&gt;&amp;gt;     e. Once Owner 1 and SE cooperatively sign the first backup transaction,&lt;br/&gt;&amp;gt;     Owner 1 then signs and broadcasts the deposit transaction Tx0.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     Transfer from Owner 1 to Owner 2:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     a. Owner 2 generates two private keys: o2 (the new owner UTXO private key&lt;br/&gt;&amp;gt;     share) and b2 (the new owner refund private key).&lt;br/&gt;&amp;gt;     b. The SE generates a temporary blinding nonce x and calculates the value&lt;br/&gt;&amp;gt;     x*s1 and sends this securely to Owner 2.&lt;br/&gt;&amp;gt;     c. Owner 2 then multiplies this received value by the modular inverse of o2&lt;br/&gt;&amp;gt;     (o2_inv) and then sends this value (x*s1*o2_inv), to Owner 1.&lt;br/&gt;&amp;gt;     d. Owner 1 then multiplies this received value by the key share o1 and&lt;br/&gt;&amp;gt;     sends the resulting value (x*s1*o2_inv*o1) to the SE.&lt;br/&gt;&amp;gt;     e. The SE then multiplies this received value by the modular inverse of the&lt;br/&gt;&amp;gt;     temporary nonce (x_inv) to obtain x*s1*o2_inv*o1*x_inv. This cancels the&lt;br/&gt;&amp;gt;     blinding nonce x to give s1*o2_inv*o1. This value, when multiplied by the&lt;br/&gt;&amp;gt;     new owner key share o2 equals the original shared private key s1*o1.&lt;br/&gt;&amp;gt;     f. The SE then sets this value equal to s2 = s1*o2_inv*o1 and deletes s1.&lt;br/&gt;&amp;gt;     s2 and o2 are now the key shares of `P` and can be used to colaboritively&lt;br/&gt;&amp;gt;     sign (with 2P ECDSA). So long as the SE delets s1, the old owner key share&lt;br/&gt;&amp;gt;     (o1) is of no use in deriving or co-signing with the full shared private&lt;br/&gt;&amp;gt;     key, and is invalidated.&lt;br/&gt;&amp;gt;     g. The shared public key P remains unchanged, but the corresponding private&lt;br/&gt;&amp;gt;     key (which no individual party ever has knowledge of or can derive) can&lt;br/&gt;&amp;gt;     only be determined from the key shares of the SE and Owner 2 (i.e. P =&lt;br/&gt;&amp;gt;     s2*o2.G).&lt;br/&gt;&amp;gt;     h. Owner 2 then calculates their backup public key (B2 = b2.G) and sends it&lt;br/&gt;&amp;gt;     to the SE.&lt;br/&gt;&amp;gt;     i. The SE creates a backup transaction (Tx2) that pays the output of Tx0 to&lt;br/&gt;&amp;gt;     the address corresponding to B2 , with `nLockTime` set to a block height h0&lt;br/&gt;&amp;gt;     - c0, where c0, is a confirmation time sufficient to guarantee that Tx2 can&lt;br/&gt;&amp;gt;     be confirmed in the blockchain before Tx1 (therefore making Tx1 invalid).&lt;br/&gt;&amp;gt;     j. Owner 2 and the SE then cooperate to sign Tx2 with shared key (P) using&lt;br/&gt;&amp;gt;     the 2P ECDSA protocol, which Owner 2 then saves.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     The principle of the logic of the key transfer is that the two separate key&lt;br/&gt;&amp;gt;     shares are updated, but the full shared private key (which no-one knows)&lt;br/&gt;&amp;gt;     remains the same. The new owner chooses a new secret value for their&lt;br/&gt;&amp;gt;     private key share, and this (along with the private key share of the&lt;br/&gt;&amp;gt;     previous owner) is utilized by the SE to update their share. The use of the&lt;br/&gt;&amp;gt;     nonce (x) prevents any of the participants from determining any information&lt;br/&gt;&amp;gt;     about each others secret keys. In this way Owner 2 cannot determine s1 from&lt;br/&gt;&amp;gt;     x*s1, Owner 1 cannot determine s1 or o2 from x*s1*o2_inv and the SE cannot&lt;br/&gt;&amp;gt;     determine o1 or o2 from x*s1*o2_inv*o1.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     This transfer protocol can be repeated to transfer the ownership to new&lt;br/&gt;&amp;gt;     owners. Each time the SE key share sX is updated, the previous key shares&lt;br/&gt;&amp;gt;     become invalid and are of no use even if the current key share is&lt;br/&gt;&amp;gt;     subsequently revealed. The SE still needs to be trusted to delete the old&lt;br/&gt;&amp;gt;     key share, but this protocol removes the risk the the SE can be hacked by a&lt;br/&gt;&amp;gt;     previous owner to steal the funds.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     Any comments on the above would be greatly appreciated.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;     Tom&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;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; !DSPAM:5e7c2da240641930319229!&lt;br/&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; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; !DSPAM:5e7c2da240641930319229!&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Cheers, Bob McElrath&lt;br/&gt;&lt;br/&gt;&amp;#34;For every complex problem, there is a solution that is simple, neat, and wrong.&amp;#34;&lt;br/&gt;    -- H. L. Mencken
    </content>
    <updated>2023-06-07T20:23:38&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxy9r0jyzea37xmwgsh4u49mvzxfx3azl3da7qhtnslc4lvpknvqgzyzj0ct7zhlqxre66rdhp0h7yk0ynhp06kt7fzqqlgn7cfxwkw2ckj0z9pd2</id>
    
      <title type="html">📅 Original date posted:2016-03-08 📝 Original message:Dave ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxy9r0jyzea37xmwgsh4u49mvzxfx3azl3da7qhtnslc4lvpknvqgzyzj0ct7zhlqxre66rdhp0h7yk0ynhp06kt7fzqqlgn7cfxwkw2ckj0z9pd2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0k53rhcvz67geyxc7hwculnud39llrsfsue7yh6ecnjw3gdmyd8cgnwy7a&#39;&gt;nevent1q…wy7a&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-03-08&lt;br/&gt;📝 Original message:Dave Hudson via bitcoin-dev [bitcoin-dev at lists.linuxfoundation.org] wrote:&lt;br/&gt;&amp;gt; I think the biggest question here would be how would the difficulty&lt;br/&gt;&amp;gt; retargeting be changed?  Without seeing the algorithm proposal it&amp;#39;s difficult&lt;br/&gt;&amp;gt; to assess the impact that it would have, but my intuition is that this is&lt;br/&gt;&amp;gt; likely to be problematic.&lt;br/&gt;&lt;br/&gt;I have no comment on whether this will be *needed* but there&amp;#39;s a simple&lt;br/&gt;algorithm that I haven&amp;#39;t seen any coin adopt, that I think needs to be: the&lt;br/&gt;critically damped harmonic oscillator:&lt;br/&gt;&lt;br/&gt;    &lt;a href=&#34;http://mathworld.wolfram.com/CriticallyDampedSimpleHarmonicMotion.html&#34;&gt;http://mathworld.wolfram.com/CriticallyDampedSimpleHarmonicMotion.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;In dynamical systems one does a derivative expansion.  Here we want to find the&lt;br/&gt;first and second derivatives (in time) of the hashrate.  These can be determined&lt;br/&gt;by a method of finite differences, or fancier algorithms which use a quadratic&lt;br/&gt;or quartic polynomial approximation.  Two derivatives are generally all that is&lt;br/&gt;needed, and the resulting dynamical system is a damped harmonic oscillator.  &lt;br/&gt;&lt;br/&gt;A damped harmonic oscillator is basically how your car&amp;#39;s shock absorbers work.&lt;br/&gt;The relevant differential equation has two parameters: the oscillation frequency&lt;br/&gt;and damping factor.  The maximum oscillation frequency is the block rate.  Any&lt;br/&gt;oscillation faster than the block rate cannot be measured by block times.  The&lt;br/&gt;damping rate is an exponential decay and for critical damping is twice the&lt;br/&gt;oscillation frequency.&lt;br/&gt;&lt;br/&gt;So, this is a zero parameter, optimal damping solution for a varying hashrate.&lt;br/&gt;This is inherently a numeric approximation solution to a differential equation,&lt;br/&gt;so questions of approximations for the hashrate enter, but that&amp;#39;s all.  Weak&lt;br/&gt;block proposals will be able to get better approximations to the hashrate.&lt;br/&gt;&lt;br/&gt;If solving this problem is deemed desirable, I can put some time into this, or&lt;br/&gt;direct others as to how to go about it.&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Cheers, Bob McElrath&lt;br/&gt;&lt;br/&gt;&amp;#34;For every complex problem, there is a solution that is simple, neat, and wrong.&amp;#34;&lt;br/&gt;    -- H. L. Mencken
    </content>
    <updated>2023-06-07T19:49:32&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrnhv9yjxru92frl35c07wyu5tl6caxxuaekgv4qg94c0kmvzyzvszyzj0ct7zhlqxre66rdhp0h7yk0ynhp06kt7fzqqlgn7cfxwkw2ckjnkex6q</id>
    
      <title type="html">📅 Original date posted:2015-12-19 📝 Original message:Peter ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrnhv9yjxru92frl35c07wyu5tl6caxxuaekgv4qg94c0kmvzyzvszyzj0ct7zhlqxre66rdhp0h7yk0ynhp06kt7fzqqlgn7cfxwkw2ckjnkex6q" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8feq6zff3hkeyugxuykmqpgg2lf3g4vgtdep5djgs4wsqykfvc7cdyfwhk&#39;&gt;nevent1q…fwhk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-12-19&lt;br/&gt;📝 Original message:Peter Todd via bitcoin-dev [bitcoin-dev at lists.linuxfoundation.org] wrote:&lt;br/&gt;&amp;gt; One of the issues raised by the pools present was block withholding&lt;br/&gt;&amp;gt; attacks, which they said are a real issue for them. In particular, pools&lt;br/&gt;&amp;gt; are receiving legitimate threats by bad actors threatening to use block&lt;br/&gt;&amp;gt; withholding attacks against them.&lt;br/&gt;&lt;br/&gt;The only possible other bad actors are other miners.  So who are the &amp;#34;bad actor&amp;#34;&lt;br/&gt;miners?  It&amp;#39;s a short list of candidates.&lt;br/&gt;&lt;br/&gt;&amp;gt; P2Pool is often brought up as a replacement for pools, but it itself is still&lt;br/&gt;&amp;gt; relatively vulnerable to block withholding, and in any case has many other&lt;br/&gt;&amp;gt; vulnerabilities and technical issues that has prevented widespread adoption of&lt;br/&gt;&amp;gt; P2Pool.&lt;br/&gt;&lt;br/&gt;I&amp;#39;ve been trying to understand this source of &amp;#34;vulnerabilities and technical&lt;br/&gt;issues&amp;#34; with p2pool and have received a lot of contradictory information.  Can&lt;br/&gt;someone in the know summarize what the problems with p2pool are?&lt;br/&gt;&lt;br/&gt;The economic situation where miners can be deprived of profit due to the lack of&lt;br/&gt;synchronicity in block updates is a physics problem due to the size of the Earth&lt;br/&gt;and will never be removed.  This is a design flaw in Bitcoin.  Therefore a&lt;br/&gt;different, more comprehensive solution is called for.&lt;br/&gt;&lt;br/&gt;My solution to this is somewhat longer term and needs more simulation but&lt;br/&gt;fundamentally removes the source of contention and fixes the design flaw, while&lt;br/&gt;remaining as close &amp;#34;in spirit&amp;#34; to bitcoin as possible:&lt;br/&gt;    &lt;a href=&#34;https://scalingbitcoin.org/hongkong2015/presentations/DAY2/2_breaking_the_chain_1_mcelrath.pdf&#34;&gt;https://scalingbitcoin.org/hongkong2015/presentations/DAY2/2_breaking_the_chain_1_mcelrath.pdf&lt;/a&gt;&lt;br/&gt;Not only does block withholding simply not work to deny other miners income due&lt;br/&gt;to the absence of orphans, but I explicitly added a dis-incentive against&lt;br/&gt;withholding blocks in terms of the &amp;#34;cohort difficulty&amp;#34;.  Other graph-theoretic&lt;br/&gt;quantities are in general possible in the reward function to better align the&lt;br/&gt;incentives of miners with the correct operation of the system.  Also by lowering&lt;br/&gt;the target difficulty and increasing the block (bead) rate, one lowers the&lt;br/&gt;variance of miner income.&lt;br/&gt;&lt;br/&gt;Part of the reason I ask is that there has been some interest in testing my&lt;br/&gt;ideas in p2pool itself (or a new similar share pool), but I&amp;#39;m failing to&lt;br/&gt;understand the source of all the complaints about p2pool.&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Cheers, Bob McElrath&lt;br/&gt;&lt;br/&gt;&amp;#34;For every complex problem, there is a solution that is simple, neat, and wrong.&amp;#34;&lt;br/&gt;    -- H. L. Mencken
    </content>
    <updated>2023-06-07T19:46:55&#43;02:00</updated>
  </entry>

</feed>