<div dir="ltr"><div>Dear all,<br><br>I’ve rolled up my sleeves and finished my implementation of the MAC<br>authentication protocol in babeld.<br><br>It can be found on the branch "hmac" in<br><br>    <a href="https://github.com/MisterDA/babeld.git">https://github.com/MisterDA/babeld.git</a><br><br>Or on the opened pull-request in the main repository at<br><br>    <a href="https://github.com/jech/babeld/pull/52">https://github.com/jech/babeld/pull/52</a><br><br><br>There is one bug that I’m aware of: sometimes the local configuration<br>interface will respond "bad", letting the user think that there was an<br>error during the parsing or the processing of the configuration, but<br>everything happened correctly.<br><br>There is one feature that I have not implemented (yet): expiring<br>per-neighbour state (section 4.4) using the Hello history or a timer<br>based on the last accepted packet.<br><br>The code has not undergone review. No interoperability testing has<br>been done.<br><br>I’m also looking for feedback on the user interface. Here follows the<br>manual page describing the new configuration options (underscores<br>indicate user defined values).<br><br>In particular, do you think that implementing keysets and allowing an<br>unbounded number of keys is too much for babeld?<br></div><br>Key rotation is done through the local configuration interface.<br><div><br><br>   MAC authentication for the Babel routing protocol<br>       This protocol provides basic security properties for the Babel<br>       routing protocol. The scope of this protocol is strictly<br>       limited: it only provides authentication (we assume that<br>       routing information is not confidential), it only supports<br>       symmetric keying, and it only allows for the use of a small<br>       number of symmetric keys on every link.<br><br>       Keys and keysets are reference-counted. They are discarded as<br>       soon as they are no longer referenced.<br><br>       Interface configuration<br><br>           mac {true|false}<br>                  Enable MAC security on this interface.<br><br>           mac-verify {true|false}<br>                  Check packet signatures, reject unsigned or<br>                  incorrectly signed packets. The default is true.<br><br>           add-keyset _keyset-name_<br>                  Add the keyset _keyset-name_ to the set of keysets<br>                  of this interface.<br><br>           rm-keyset _keyset-name_<br>                  Remove the keyset _keyset-name_ from the set of<br>                  keysets of this interface.<br><br>       Global options<br><br>           key name _name_ algorithm {hmac-sha256|blake2s} value<br>           _value_ use {sign|verify|both}<br>                  Configure a key for use with the mac interface<br>                  option. The algorithm is either hmac-sha256 or<br>                  blake2s. The value is a hexadecimal string (up to 64<br>                  bytes for hmac-sha256 or up to 32 bytes for<br>                  blake2s). The use specifies whether the key is used<br>                  to sign packets, verify packets, or both (signing<br>                  and verifying packets).<br><br>           keyset _name_<br>                  Create an empty keyset.<br><br>           keyset-add-key _keyset-name_ _key-name_<br>                  Add the key _key-name_ to the keyset _keyset-name_.<br><br>           keyset-rm-key _keyset-name_ _key-name_<br>                  Remove the key _key-name_ from the keyset<br>                  _keyset-name_.<br><br><br>Thanks!<br><br>-- Antonin</div></div>