<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>