<div dir="ltr">On Fri, Apr 7, 2017 at 3:08 PM, Oleg Andreev <span dir="ltr"><<a href="mailto:oleganza@gmail.com" target="_blank">oleganza@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hey there,<br>
<br>
HKD stands for Hierarchical Key Derivation, e.g. BIP32 [1] or ChainKD [2].<br>
Alternatively known as "blinded keys" per Tor's draft [3].<br>
<br>
All these schemes generate a scalar to be mixed with the parent public key P using an index or nonce i:<br>
<br>
        h(i) := Hash(P || i || stuff)<br>
<br>
The first two schemes add a derivation factor (multiplied by the base point)<br>
to the parent pubkey, while the Tor's approach is to multiply the parent pubkey by the factor:<br>
<br>
        Child(i) := P + h(i)*G    // BIP32, ChainKD<br>
        Child(i) := h(i)*P        // Tor<br>
<br>
Last time I asked Pieter Wuille (BIP32's author) a couple years ago about their choice,<br>
his reply (if I recall correctly) was that scalar multiplication for a base point<br>
is more efficient than for an arbitrary point.<br></blockquote><div><br></div><div>In an earlier draft of BIP32 at the time we were using multiplication as well. At some point, the trick that allows recovering the parent key from the parent public and child private key was brought up, and we realized that neither multiplication nor addition could fix this. As addition was faster and simpler, and didn't seem to have any security downsides over multiplication, we switched BIP32 to use addition.<br><br></div><div>I think that was the right choice. I have had a few cases where it was not obvious to people that multiplication with a scalar can be reversed ("Doesn't that need an EC division?"), while it is very clear that addition is always reversable.<br><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I wonder if there's a difference in functionality if we add the factor (a-la BIP32) or multiply (a-la Tor).<br>
Maybe some weird ZK schemes benefit from blinding/derivation via multiplication instead of addition?<br></blockquote><div><br></div><div>If there are benefits to using the multiplication form, I'd very much like to hear about them.<br><br></div><div>Cheers,<br><br></div><div>-- <br></div><div>Pieter<br><br></div></div></div></div>