<p dir="ltr">> The curve is designed to be ~2^223 secure. If the scalar and nonce are chosen by a pseudorandom generator and function, respectively, with ~2^256 security, then they are indistinguishable from random for an attacker acting within the security estimate.</p>
<p dir="ltr">Agreed. (And I, personally, find this approach unobjectionable.) </p>
<p dir="ltr">The argument for generating a random key is this:</p>
<p dir="ltr">Suppose, contrary to your assumption, that the hash is not a good PRF on its restriction from in:bytes[0..] - > out:bytes[0..] to in:bytes[32] -> bytes[48]. The subspace of private keys may be biased in a predictable way; in theory you could use a distinguisher to reduce the amount of work in a rho algorithm. (By only considering points that are within that subspace.)</p>
<p dir="ltr">(E.g. there is some evidence that the first word of SHA-1's output is further from uniform distributed than the last word.) </p>
<p dir="ltr">But there is another argument for generating keys your way; it eliminates any ephemeral channel to leak private keys via public keys.* (So I'd actually prefer, in the stored-key approach, to slightly reduce the size of the 'protokey' to the security strength of the curve.)</p>
<p dir="ltr">- David</p>
<p dir="ltr">*Though I am unsure whether there is a cheap way to do this with EC keys analogous to the RSA case. (Is there a proof that it's hard that I don't know?) </p>
<div class="gmail_quote">On Jun 25, 2014 10:21 PM, "Mike Hamburg" <<a href="mailto:mike@shiftleft.org">mike@shiftleft.org</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<br>
<div>On 6/25/2014 9:57 PM, Watson Ladd
wrote:<br>
</div>
<blockquote type="cite">
<p dir="ltr">On Wed, Jun 25, 2014 at 4:37 PM, Trevor Perrin <<a href="mailto:trevp@trevp.net" target="_blank">trevp@trevp.net</a>>
wrote:<br>
> So Ed25519 and Goldilocks are similar in generating the
private scalar<br>
> and signing nonce from a "master key":<br>
><br>
> Ed25519<br>
> --------<br>
> private_scalar[32], nonce_key[32] = SHA512(master_key[32])<br>
> sig_nonce[32] = SHA512(nonce_key[32] || message) % q<br>
><br>
> Goldilocks<br>
> --------<br>
> private_scalar[56] = SHA512("derivepk" || masterkey[32])<br>
> sig_nonce[56] = SHA512("signonce" || masterkey[32] ||
message ||<br>
> masterkey[32]) % q<br>
><br>
><br>
> Qs<br>
> * Is it weird that the range for Goldilocks private scalar
and nonce<br>
> is size 2^256, rather than the size of the main subgroup
(~2^446)?</p>
<p dir="ltr">I can't think of a way to break it. Bernstein
mentions something similar for curve25519, with s, md5 (s) as
the secret key.<br>
</p>
</blockquote>
The curve is designed to be ~2^223 secure. If the scalar and nonce
are chosen by a pseudorandom generator and function, respectively,
with ~2^256 security, then they are indistinguishable from random
for an attacker acting within the security estimate.<br>
<br>
-- Mike<br>
</div>
<br>_______________________________________________<br>
Curves mailing list<br>
<a href="mailto:Curves@moderncrypto.org">Curves@moderncrypto.org</a><br>
<a href="https://moderncrypto.org/mailman/listinfo/curves" target="_blank">https://moderncrypto.org/mailman/listinfo/curves</a><br>
<br></blockquote></div>