Ah yes, Richard is right, the PSK IDs do not have a defined structure.

Having two different PSKs attached to a single PSK_ID should be banned if
it isn't already.

Regards,

Jonathan

On Thu, 19 Sep 2019 at 16:26, Richard Barnes <r...@ipv.sx> wrote:

> On Thu, Sep 19, 2019 at 10:26 AM Jonathan Hoyland <
> jonathan.hoyl...@gmail.com> wrote:
>
>> That's how I would interpret the spec yes.
>> You could argue that there's a distinguishing attack where the attacker
>> measures the response time on PSKs to determine if it was an OOB PSK or a
>> resumption, but I think you could do equally well just by looking at the
>> PSK lengths, because resumption PSKs have a defined structure.
>>
>
> I don't think that's quite right.  The PSKs resulting from
> NewSessionTicket have a defined structure, but the PSK *IDs* do not;
> they're specified by the server.  AFAICT, existing server stacks generate
> their own PSK IDs for resumption PSKs, so from the application's
> perspective, the structure of the resumption PSKs is unknown (or at best,
> specific to the TLS library in use).
>
> If I understand correctly, the worst case here would be:
>
> 1. The server application wants to have some behavior change based on the
> use of an external PSK (not resumption)
> 2. The server TLS stack is configured with external and resumption PSKs
> with the same PSK ID
> 3. The client sends a ClientHello using the resumption PSK
> 4. The server TLS stack attempts to verify the binder with the resumption
> PSK and succeeds
> 5. The server application gets a session that is authenticated with the
> PSK ID and notes that the PSK ID matches one of its external PSKs
> 6. The server application improperly does the external PSK behavior when
> in fact resumption has happened
>
> I might be missing something, but I don't see anything in the spec that
> would prevent this situation from arising.  So it's up to the application
> to choose its PSK IDs in such a way that they don't collide with resumption
> PSK IDs.  But the fact that resumption PSK IDs are implementation-specific
> mean that this is tough to do with any generality, unless you're willing to
> rely on long pseudorandom strings not colliding with each other.
>
> Maybe the answer is just that TLS stacks that handle their own resumption
> caches need to signal to applications when that cache has been used vs. an
> external PSK.
>
> --Richard
>
>
>
>> Regards,
>>
>> Jonathan
>>
>> On Thu, 19 Sep 2019 at 15:04, Owen Friel (ofriel) <ofr...@cisco.com>
>> wrote:
>>
>>>
>>>
>>> > -----Original Message-----
>>> > From: Jonathan Hoyland <jonathan.hoyl...@gmail.com>
>>> > Sent: 19 September 2019 14:32
>>> > To: Owen Friel (ofriel) <ofr...@cisco.com>
>>> > Cc: Martin Thomson <m...@lowentropy.net>; tls@ietf.org
>>> > Subject: Re: [TLS] Distinguishing between external/resumption PSKs
>>> >
>>> > Hi Owen,
>>> >
>>> > If I understand your question correctly the distinguishing is done
>>> implicitly
>>> > (not explicitly) through the key schedule.
>>> > If the client and server do not agree on whether the PSK is a
>>> resumption or
>>> > an OOB PSK then the `binder_key` will not match, and the handshake
>>> will fail.
>>> >
>>> > See pp. 93-94 of the spec.
>>>
>>> And we only even get that far on the off chance that an ext
>>> PskIdentity.identity is exactly the same as a res PskIdentity.identity.
>>> e.g. a client presents an ext PskIdentity.identity, the server somehow
>>> thinks it’s a res PskIdentity.identity, and then handshaking will fail, not
>>> only because the actual raw PSK is likely different but the binders will
>>> not match due to different labels.
>>>
>>> But my question was before we even get that far - its an internal server
>>> implementation decision how it determines whether the presented
>>> PskIdentity.identity is ext or res, or whether e.g. to try lookup an ext DB
>>> table vs. a res cache first to find a PskIdentity.identity match. And say
>>> it fails to find an ext match then it tries to find a res match, and if it
>>> finds a match, then it knows what binder label to use.
>>>
>>>
>>> >
>>> > Does that answer your question?
>>> >
>>> > Regards,
>>> >
>>> > Jonathan
>>> >
>>> > On Thu, 19 Sep 2019 at 11:52, Owen Friel (ofriel) <mailto:
>>> ofr...@cisco.com>
>>> > wrote:
>>> >
>>> > > -----Original Message-----
>>> > > From: TLS <mailto:tls-boun...@ietf.org> On Behalf Of Martin Thomson
>>> > > Sent: 04 September 2019 02:46
>>> > > To: mailto:tls@ietf.org
>>> > > Subject: Re: [TLS] Binder key labels for imported PSKs
>>> > >
>>> > >
>>> > > When we built the ext/res distinction, there was a clear problem
>>> > expressed.
>>> > > We had the potential for both to be used by the same servers at the
>>> same
>>> > > time (though not for the same connection) and distinguishing between
>>> > them
>>> > > was important
>>> >
>>> > Martin, maybe I am missing something in the threads on this. Is there
>>> > anything explicit planned in ClientHello PreSharedKeyExtension or
>>> > PskKeyExchangeModes to explicitly distinguish between ext/res PSKs? Or
>>> is
>>> > it up to server implementation and how the server handles the opaque
>>> > PskIdentity.identity? e.g. ImportedIdentity.external_identity fields
>>> could be
>>> > stored in one DB table, and (ignoring
>>> https://tools.ietf..org/html/draft-ietf-
>>> <https://tools.ietf.org/html/draft-ietf->
>>> > tls-external-psk-importer-00#section-9 for now) the server on receipt
>>> of a
>>> > ClientHello searches for PskIdentity.identity in its
>>> > ImportedIdentity.external_identity  table and if that lookup fails,
>>> then try to
>>> > parse PskIdentity.identity  as a NewSessionTicket.ticket? And the
>>> order of
>>> > those two operations is of course implementation specific too.
>>> >
>>> >
>>> > _______________________________________________
>>> > TLS mailing list
>>> > mailto:TLS@ietf.org
>>> > https://www.ietf.org/mailman/listinfo/tls
>>>
>> _______________________________________________
>> TLS mailing list
>> TLS@ietf.org
>> https://www.ietf.org/mailman/listinfo/tls
>>
>
_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to