<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sat, Apr 25, 2015 at 3:30 AM, Gregory Maxwell <span dir="ltr">&lt;<a href="mailto:gmaxwell@gmail.com" target="_blank">gmaxwell@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">On Sat, Apr 25, 2015 at 12:22 AM, Justus Ranvier<br>
&lt;<a href="mailto:justus.ranvier@monetas.net">justus.ranvier@monetas.net</a>&gt; wrote:<br>
&gt; Taking the hash of the secret would then require an extra step to make sure<br>
&gt; the hash is valid for secp256k1.<br>
<br>
</span>The x value may not be a valid member of the group, effectively the<br>
same as with a hash. Its also very unequally distributed, as only<br>
about half the possible values are points on the curve.</blockquote><div><br></div><div>ack</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">&gt; With 97 byte standard OP_RETURN values the ephemeral public<br>
&gt; key could be appended to the chain code, but that&#39;s undesirable for other reasons.<br>
<br>
</span>Can you elaborate?  Storing a ~33 byte (deterministically generated)<br>
ephemeral key should be all that is required. Everything else,<br>
including the chain code could be derived from it. What reason do you<br>
have to include additional data?<br></blockquote><div><br></div><div>The goal of the notification transaction is to send the same payment code to every recipient, but obscure the identity of the sender of the notification transaction from third party blockchain observers.<br><br>The shared secret is used for that purpose, and the sender&#39;s public key used for ECDH can&#39;t be one derived from the payment code since the recipient doesn&#39;t yet know the payment code.</div><div><br>The notification transaction needs to communicate the 65 byte payment code along with one ephemeral public key used for ECDH. If that ephemeral key is not located in a signature script, it has to be somewhere else (such as in the same OP_RETURN output as the payment code.)</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">
&gt; Taking the SHA512 of something less than 512 bits seemed wrong.<br>
<br>
</span>Why should it?  Adding the Y does not increase the entropy at all.  As<br>
an aside, I think this can be reformulated to only need 256 bits of<br>
output, and then the need for yet-another-hash-function could be<br>
avoided in some cases.<br></blockquote><div><br></div><div>Already fixed in <a href="https://github.com/justusranvier/rfc/commit/8c4d3429012eb15847c4ae68f212c8b2dcd1b521">https://github.com/justusranvier/rfc/commit/8c4d3429012eb15847c4ae68f212c8b2dcd1b521</a> but it would be good to get confirmation of whether the way I fixed it is valid. </div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">&gt; In this proposal I optimized for non-reliance on third party services<br>
<br>
</span>The requirement for inputs is a guaranteed dependency on third party<br>
services; so if thats whats being optimized for here it must go (well,<br>
I think it must go for the reason of avoiding blocking users from<br>
using other schemes to control their coins too..).<br></blockquote><div><br></div><div>I&#39;m not sure what you mean by &quot;the requirement for inputs is a guaranteed dependency on third party</div><div>services&quot; <br><br>At the proposal currently stands, an SPV wallet will have no trouble sending or receiving notification transactions without access to a third party service. The recipient just needs to see the transactions associated with its notification address.</div><div><br></div><div>The point about restricting the types of scripts used as inputs is valid, but I think workarounds are available. If nothing else, the sender can make a suitable input using it&#39;s own (suitably mixed) coins first.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">&gt; I agree. I could not find a straightforward way to express a multisignature payment code in less than 80 bytes.<br>
<br>
</span>A prior stealth address proposal here handled them fine with only a<br>
single ephemeral point in the op_return. It does result in a longer<br>
address (is that what you&#39;re referring to with &#39;80 bytes&#39;?)<br></blockquote><div><br></div><div>I considered defining an additional path level for deterministic m-of-n multisig and adding a few bytes to the payment code to express those parameters, but thought it would be too limiting since it would preclude multisig with truly independent keys. It is a thing that could be done, however.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">&gt; Exchanges could restrict bitcoin withdrawals to a single payment code known to be associated with their identified customer.<br>
</span><span class="">&gt; In some jurisdictions the ability to prove that withdrawals are sent to a positively-identified party, rather than arbitrary third parties, might move some Bitcoin businesses out of money transmitter territory into less onerous regulatory situations.<br>
<br>
</span>But this mandates horrible key management practices, reliance on a<br>
single &quot;hardcoded&quot; private key which you cannot change; even if it<br>
might be compromised or lost to the wind. It&#39;s less horrible than<br>
sticking to a single address because it doesn&#39;t wedge privacy, I<br>
agree; but care should be taken that a tortured dance for confused<br>
regulatory cargo-cult reasons doesn&#39;t mandate people not engage in<br>
sound practices like periodic key rotation. :)<br>
</blockquote></div><br></div><div class="gmail_extra">Cold storage is still available (if admittedly less convenient than in traditional wallets).<br><br>I would expect exchanges in practice to allow for payment codes to be changed, just with non-trivial waiting periods and plenty of human overview. It would be an infrequent event compared to the frequency of withdrawals.<br><br>Various schemes which use public key authentication instead of passwords for web site authentication could be used to continually verify that the user hasn&#39;t lost access to the key.</div></div>