On Sun, Aug 28, 2016 at 10:53:14AM -0700, Eric Rescorla wrote:
> 
> I'd prefer to keep things as simple as possible here and from that
> perspective, I think any indicator from side A to side B that it wants a
> key change over and above the KeyUpdate is extra complexity. I do, however,
> want to retain the property that one side can ask the other one to rekey
> [0]. I believe we can get this by modifying the rule in the spec by treating
> a run of KeyUpdates as a single generation.
> 
> Specifically.
> "Upon receiving a KeyUpdate, the receiver MUST update its receiving
> keys. If the receiver has sent any data records since receiving the
> last KeyUpdate it MUST also increment its min_send_generation counter
> by 1. Otherwise, the min_send_generation MUST remain unchanged. Prior
> to sending a record, if min_send_generation is greater than the
> current sending generation, the sender MUST first send a KeyUpdate."

Timing- and propagation-wise, it looks workable (also, could be done
with two flags[1], no need for counter).

Yes, this causes lots more desync between sides, but existing
mechanism needed to cope with that already.


However, one problem: Because both sides take their keys from one
ladder, if one side is behind the other, one can extract past keys
of other side from the one that is behind (running separate ladders
in both directions[2][3] would fix this).


[1] Specifically:
- last_tx_key_update: Was the last record I sent a KeyUpdate?
- next_tx_key_update: Will the next record I send be a KeyUpdate?

[2] Any current implementation likely already has per-direction
traffic secrets (at least mine certainly does). 

[3] Allowing multiple steps at once would open things up for DoS
attacks.



-Ilari

_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to