My new suggestion in this area requires a shared secret (key) between the router and the entity sending the management traffic, either another router or a management workstation. The key is one of two inputs to a one-way function; the other input will be a sequence number which will be carried with the packet.This is similar to something I proposed about a month ago:
A managed device such as a router maintains a separate key for each entity that is authorized to send management traffic to the device. For each authorized sender, the managed device maintains the following information:This means the crypto is done on the cards. Doing this beforehand elsewhere and then simply upload the results to the linecard is probably a better idea. A linecard with crypto hardware could of course do this on the fly but if we have such a linecard why not simply do IPsec AH?
- the address of the sender
- the shared secret
- a receive window consisting of the sequence number for the most recent, valid management packet from the sender, a sequence number indicating the edge for "too old" packets, plus a bit map marking received , valid packets within the window.I'm not sure requiring this bitmap is a good idea, as id adds complexity (that may need to be burnt into silicon).
If we're doing IPsec, we already have the anti-replay counter that I think can easily do double duty here. For the tag we either have to create a completely new option or extend IPsec. Alternatively, the tag can be used as (part of) the IV for ESP processing.There are a few open issues: - where to carry the sequence number and tag
The sequence number wraps all the time so 16 bits should be adequate or maybe 32 bits. As a typical window would be something like 64 packets, with a 32 bit tag an attacker has a one in 500 million chance of guessing a valid tag. A 10 Gbit link can carry several million packets per second so the attack would hit paydirt in a matter of minutes with 32 bits. So I'd say at least 48 bits.- how big is the sequence number and how big is the tag
This is something the crypto experts should answer. I suspect that doing a one-way function over some static data and a sequence number doesn't provide enough entropy from one packet to the next to be secure, even for this purpose. My non-expert guess is that a stream cipher with the sequence number as a pointer to the stream would be better.- how big is the key - what one-way function to use