<oembed><type>rich</type><version>1.0</version><author_name>npub1m230cem2yh3mtdzkg32qhj73uytgkyg5ylxsu083n3tpjnajxx4qqa2np2</author_name><author_url>https://nostr.ae/npub1m230cem2yh3mtdzkg32qhj73uytgkyg5ylxsu083n3tpjnajxx4qqa2np2</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2014-01-14&#xA;📝 Original message:On Mon, Jan 13, 2014 at 01:13:08AM -0800, Jeremy Spilman wrote:&#xA;&gt; It&#39;s a given this will be implemented for Payment Protocol. The question  &#xA;&gt; is whether it&#39;s also usable outside of PP.&#xA;&#xA;I think what stealth addresses is showing is that the concept of an&#xA;address being &#34;instructions on how to generate a txout/tx that results&#xA;in me getting Bitcoins&#34; is actually quite valuable; it and&#xA;BIP32-derivation addresses with chaincodes are pretty clear cases where&#xA;just replacing address with scriptPubKey isn&#39;t sufficient.&#xA;&#xA;&gt; I was kind of imagining that we could encourage people to replace all  &#xA;&gt; their static address text that live on Github pages, and README.me, and  &#xA;&gt; forum signatures, etc. with new &#39;href=bitcoin:xSTL...&#39; URIs. Convention  &#xA;&gt; could be to require only transporting xSTL addresses within a URI, even  &#xA;&gt; going so far as to not support them copy/pasted. 101 characters is not  &#xA;&gt; much longer (and sometimes shorter) than PaymentRequest URIs end up being.&#xA;&#xA;Yeah, I don&#39;t see anything wrong with stealth addresses whatever length&#xA;they wind up being. It&#39;s a good intermediate step, and without them&#xA;people will just pass around unsigned payment requests and other stuff.&#xA;&#xA;&gt; I think there are ways to make stealth addresses easy enough to use that  &#xA;&gt; people actually prefer using them for P2P payments which do not involve a  &#xA;&gt; full-stack merchant. In that case, if it was a PaymentRequest it would  &#xA;&gt; almost certainly not be signed, and would be more easily shared over email  &#xA;&gt; or SMS as a URI than as a file attachment or, even worse, putting the  &#xA;&gt; unsigned PR file up on a third-party server which probably won&#39;t do a good  &#xA;&gt; job securing it.&#xA;&#xA;At the DarkWallet hackathon we had discussed how to integrate stealth&#xA;addresses into OpenPGP keys as a new user id type for instance, and&#xA;similarly into x.509 certs.&#xA;&#xA;The big advantage here is the identity of *who* you are paying is&#xA;important, not just &#34;I got this signed payment request&#34;. Basically the&#xA;concept becomes &#34;identity signed payment address&#34; and the signature&#xA;binding the identity to the address is a one time and offline thing; an&#xA;issue with the payment protocol as it stands is that it encourages&#xA;signing keys to be kept online to issue payment requests. If you have a&#xA;scheme where the private keys that bound the identity to the address can&#xA;be kept offline you&#39;re much better off, because the attacker can only&#xA;create a fake payment request, they can&#39;t divert the funds to&#xA;themselves.&#xA;&#xA;So with that in mind, I strongly suggest sticking with defining a&#xA;reasonable stealth address spec. But when you do, keep in mind that you&#xA;may want to upgrade it in the future, preferably in a backwards&#xA;compatible way. Also, it shouldn&#39;t be limited to exactly 2-of-2&#xA;CHECKMULTISIG, there&#39;s no reason why n and m can&#39;t be picked as needed.&#xA;Sure, it means the addresses are not fixed length, but for something&#xA;that is mostly an internal detail and only occasionally visible to&#xA;advanced users, I see no issues there.&#xA;&#xA;Along those lines: what would a BIP32 chain code address look like? What&#xA;happens when you want to use that with a multisig-protected wallet?&#xA;&#xA;&gt; * PP Implementation Overview *&#xA;&gt; &#xA;&gt; The basic PaymentRequest&gt;PaymentDetails is expecting &#39;output&#39; containing  &#xA;&gt; one or more TxOuts with script and amount. I believe the general approach  &#xA;&gt; is to put a fallback address into &#39;output&#39; for backward compatibility, and  &#xA;&gt; put Q and Q2 into an extension field.&#xA;&gt; &#xA;&gt; So we add a new optional field to PaymentDetails which contains the one or  &#xA;&gt; two PubKeys. Not sure if we want different protobuf tags, or if the  &#xA;&gt; difference in length of the value makes it obvious enough which approach  &#xA;&gt; is being used;&#xA;&gt; &#xA;&gt;     optional bytes stealthOnePubKey = 1000&#xA;&gt;     optional bytes stealthTwoPubKey = 1001&#xA;&#xA;I think you&#39;re missing the bigger picture here, not least of which is&#xA;that backwards compatibility is a bit of a misnomer for an unreleased&#xA;standard. :)&#xA;&#xA;Why put this into the PaymentDetails? That a stealth address is to be&#xA;used for the payment is a property of the outputs being requested, not&#xA;the payment itself. We&#39;re better off if that goes into the Output&#xA;message, and further more it suggests that the Output message shouldn&#39;t&#xA;contain raw scriptPubKey&#39;s but rather addresses. After all, IsStandard()&#xA;means we have to inspect the scriptPubKey to see if we can even pay to&#xA;what the sender is requesting.&#xA;&#xA;Once you establish that it&#39;s addresses that Outputs specify, then it&#39;s&#xA;easy enough to make a stealth address type, or a BIP32-chain-code&#xA;address type, or whatever else comes up in the future.&#xA;&#xA;&#xA;&gt; Also, ideally I think I would want multiple different stealth payments  &#xA;&gt; within a single wallet to the same merchant / pubkeys to be identifiable  &#xA;&gt; as such.&#xA;&#xA;Agreed.&#xA;&#xA;-- &#xA;&#39;peter&#39;[:-1]@petertodd.org&#xA;00000000bda8ab55740699711a11572c4eec9dc9f714e4896559aac310a115ff&#xA;-------------- next part --------------&#xA;A non-text attachment was scrubbed...&#xA;Name: signature.asc&#xA;Type: application/pgp-signature&#xA;Size: 685 bytes&#xA;Desc: Digital signature&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20140114/95b840b6/attachment.sig&gt;</html></oembed>