I think we have to oppose a change to KeyUpdate that adds P4 (bounded
write obligations) but not P3 (ability to learn that a KeyUpdate was
read by other side). These are orthogonal and easily achievable with a
pretty small tweak. Here are four options that would work for us:
1. No change to message structures. Forbid implementations from
sending an update_not_requested KeyUpdate unless it is triggered by an
update_requested KeyUpdate.

2. Add a uint8 field to KeyUpdate representing the sender's current
receive generation (lower 8 bits).

3. Keep request_update an 8-bit field (same width as it is in the PR),
and define the high bit as representing the update_requested boolean,
and the remaining bits represent the lower 7 bits of the sender's
current receive generation

4. Keep request_update an 8-bit field (same width as it is in the PR),
define the high bit as representing the update_requested boolean, and
the remaining bits represent a 7-bit opaque value that must be echoed
in the response. (If multiple update_requested KeyUpdates arrive, any
of their values can be the one that gets echoed.)

Approach 1 seems like it might be generally acceptable here, even
understanding the concerns of the list. I am happy to draft sample
text if helpful.

-Keith

On Thu, Sep 1, 2016 at 12:55 PM, Eric Rescorla <e...@rtfm.com> wrote:
> I have created a PR for this at:
> https://github.com/tlswg/tls13-spec/pull/611
>
> As it seems there was rough consensus for this change, I will merge this
> weekend
> absent some violent objections or direction to the contrary from the chairs.
>
> -Ekr
>
>
> On Mon, Aug 29, 2016 at 3:06 PM, Russ Housley <hous...@vigilsec.com> wrote:
>>
>> Eric:
>>
>> > Yes, I agree separate ladders would fix this. I don't necessarily object
>> > to this
>> > change, but I'm not sure it's that big a deal either, because you really
>> > only get
>> > into this case when there's a big asymmetry in sending rate, so much
>> > that
>> > one side wants to send multiple updates before the other side has sent
>> > any data at all.
>>
>> I can think of many situations where one side sends a lot more data than
>> the other.
>>
>> > Note: it's also possible to avoid the rollback problem with the existing
>> > single-ladder system: when you send a key update you compute:
>> >
>> > traffic_secret_N+1
>> > read_key_N+1
>> > write_key_N+1
>> >
>> > You then discard traffic_secret N, write_key_N, but key read_key_N, so
>> > if you
>> > are M updates ahead of the other side, you have M read keys outstanding,
>> > but these cannot be used to produce the write keys. However, this
>> > probably
>> > isn't simpler than just running two ladders if we think this is
>> > important.
>>
>> That seems to work.  However, I think that splitting the ladders seems to
>> marry well with the many situations where one side sends a lot more than the
>> other.  So, I suggest that we split the ladders.
>>
>> Russ
>>
>
>
> _______________________________________________
> 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