<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-10&#xA;📝 Original message:On Wed, Jan 08, 2014 at 02:20:57AM -0800, Jeremy Spilman wrote:&#xA;&gt; Thanks Peter for the paper!&#xA;&gt; &#xA;&gt; I&#39;m just going to restate your &#39;simple explanation&#39; to make sure I&#xA;&gt; got it...&#xA;&gt; &#xA;&gt; The payee publishes a public key of theirs, which will be a&#xA;&gt; long-standing identifier, public key = &#39;Q&#39;, corresponding private&#xA;&gt; key = &#39;d&#39;.&#xA;&gt; &#xA;&gt; To pay them, payee generate a keypair, private key = &#39;e&#39; public key&#xA;&gt; of &#39;P&#39;. Publish &#39;P&#39; in the transaction.&#xA;&gt; &#xA;&gt; The payer can calculate S = eQ, where S is a shared secret between&#xA;&gt; payer/payee. The payee calculates the same S as S = dP. So the payee&#xA;&gt; sees &#39;P&#39; in a transaction, and multiplies by their private key, to&#xA;&gt; get S.&#xA;&gt; &#xA;&gt; Now that we have the shared secret, either side can calculate an&#xA;&gt; offset to Q which becomes the pay-to-address. When you say&#xA;&gt; BIP32-style derivation, Q&#39; = H(S) + Q, does this mean Q +&#xA;&gt; SHA256(33-byte S)?&#xA;&#xA;I think that&#39;s correct, but my ECC math is a bit shakey... In any case,&#xA;what&#39;s important is that you can derive a pubkey such that only the&#xA;recipient has the privkey, and without knowledge of the shared secret&#xA;you can&#39;t determine what the recipients master pubkey was.&#xA;&#xA;&gt; A payee has to check each transaction (or every transaction of a&#xA;&gt; fixed prefix) with &#39;P&#39;, calculate Q&#39; = Q + H(dP) and see if that&#xA;&gt; transaction pays to Q&#39;. If the address matches, then the payee can&#xA;&gt; spend it with private key of d + H(dP).&#xA;&#xA;Yup, you&#39;re understanding matches mine. (no guarantee if my&#xA;understanding is correct!)&#xA;&#xA;&gt; One downside is that you have to hold your private key in memory&#xA;&gt; unencrypted in order to identify new payments coming in. So&#xA;&gt; stealth-addresses may not be suitable for receiving eCommerce&#xA;&gt; payments, since you can&#39;t implement a corresponding watch-only&#xA;&gt; wallet, e.g. there&#39;s no way to &#34;direct-deposit into cold storage.&#34;&#xA;&#xA;Oh, sorry, I forgot to mention it in my first write-up but you can&#xA;easily make stealth addresses include a second pubkey for the purpose of&#xA;the communication that either isn&#39;t used in the scriptPubKey at all, or&#xA;is part of a n-of-m multisig. (n&gt;=2) Interestingly that also means you&#xA;can give a third-party that key and out-source the effort of scanning&#xA;the blockchain for you.&#xA;&#xA;-- &#xA;&#39;peter&#39;[:-1]@petertodd.org&#xA;00000000000000028a5c9edabc9697fe96405f667be1d6d558d1db21d49b8857&#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/20140110/f85268c9/attachment.sig&gt;</html></oembed>