IETF-SSH archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: RFC 4253 possible errata



Hi Ron,

Ron Frederick <ronf%timeheart.net@localhost> writes:

> Hi Mark,
> 
> On Jun 21, 2017, at 11:20 AM, Mark D. Baushke <mdb%juniper.net@localhost> wrote:
> > While working with the IETF AD Eric Rescorla <ekr%rtfm.com@localhost> doing the AD
> > review of draft-ietf-curdle-ssh-modp-dh-sha2, the topic came up of
> > validation of the Diffie-Hellman public key on both client and server
> > (peers).
> > 
> > The RFC 4253 Section 8 writes:
> > 
> > |8.  Diffie-Hellman Key Exchange
> > |
> > |   The Diffie-Hellman (DH) key exchange provides a shared secret that
> > |   cannot be determined by either party alone.  The key exchange is
> > |   combined with a signature with the host key to provide host
> > |   authentication.  This key exchange method provides explicit server
> > |   authentication as defined in Section 7.
> > |
> > |   The following steps are used to exchange a key.  In this, C is the
> > |   client; S is the server; p is a large safe prime; g is a generator
> > |   for a subgroup of GF(p); q is the order of the subgroup; V_S is S's
> > |   identification string; V_C is C's identification string; K_S is S's
> > |   public host key; I_C is C's SSH_MSG_KEXINIT message and I_S is S's
> > |   SSH_MSG_KEXINIT message that have been exchanged before this part
> > |   begins.
> > |
> > |   1. C generates a random number x (1 < x < q) and computes
> > |      e = g^x mod p.  C sends e to S.
> > |
> > ...elided...
> > 
> > |   Values of 'e' or 'f' that are not in the range [1, p-1] MUST NOT be
> > |   sent or accepted by either side.  If this condition is violated, the
> > |   key exchange fails.
> > 
> > ...elided...
> > 
> > The z in range [1, p-1] notation, specifies a closed interval which
> > includes the end points which is equivant to 1 <= z <= p-1. The (1, p-1)
> > notation specifies an open interval which excludes the endpoints 1 < z <
> > p-2.
> 
> [Ron] I don’t understand the “p-2” here. Is that a typo? 

Yes, I guess I should be careful when I touch-type numerals. It is
intended to be p-1 in both cases.

> Also, if you want to convert from the closed range [1, p-1], shouldn’t
> that to be to an open range of (0, p), which would correspond to “0 <
> z < p”?

Yes.

That is the error. I believe it should either have been written as [2,
p-2] or (1, p-1).

If we look at other sources such as NIST SP 800-56A revision 2, page 36
section 5.6.2.3.1 we see the verification is [2, p-2] which is also used
in RFC 7919.

> > Eric noted that https://tools.ietf.org/rfcmarkup?rfc=7919#section-5.1
> > uses open endpoints.
> > 
> > Eric suggested that my draft should include text that is similar to the
> > ext in the RFC 7919 to correct this errata.
> 
> [Ron] I see RFC 7919 refers to a closed range [2, p-2]. This would be
> a change from what is allowed by RFC 4253 today.

Yes.

> > Before I make such a change, I wish understand if what folks have been
> > using for the test in their implementations and get a consensus on such
> > a change.
> 
> [Ron] In asyncssh, the test I’m doing on e & f is “1 <= e < p” and “1
> <= f < p", which is essentially the half-open range of [1, p) that is
> equivalent to the closed range [1, p-1] listed in RFC 4253.

Okay.

This implies that there would need to be an implementation change if we
agree that RFC 4253 use of a closed range is an errata because an open
range was intended. Or, we could agree that narrowing the range is in
the best interests of the DH key exchange.

	-- Mark



Home | Main Index | Thread Index | Old Index