[PATCH v4 0/8] Add MAC authentication support to the Babel protocol

Toke Høiland-Jørgensen toke at toke.dk
Fri Jun 4 00:42:54 CEST 2021


Ondrej Zajicek <santiago at crfreenet.org> writes:

> On Sun, May 30, 2021 at 11:12:04PM +0200, Toke Høiland-Jørgensen wrote:
>> >> Toke Høiland-Jørgensen <toke at toke.dk> writes:
>> >> 
>> >> > This series adds MAC authentication support to the Babel protocol as specified
>> >> > in in RFC8967:
>> >> >
>> >> > https://www.rfc-editor.org/rfc/rfc8967
>> >> >
>> >> > I have performed basic interoperability testing between this implementation and
>> >> > the current babeld HMAC implementation[1]. The two implementations were able to
>> >> > successfully exchange authenticated messages with both HMAC-256 and Blake2s-256
>> >> > keys.
>> >> >
>> >> > Given the above, and the fact that the RFC was finally published at the the
>> >> > IETF, I believe this series is ready for merging (subject to review, of course).
>> >> > For those wanting to test the code, a version of Bird with this series applied
>> >> > is available on Github[2] for easy consumption.
>> >> >
>> >> > [1] https://github.com/jech/babeld/pull/52
>> >> > [2] https://github.com/tohojo/bird/tree/babel-mac-04
>> 
>> Ping? :)
>
> Hi
>
> Sorry for let you wait. I did most of the review some time ago, but got
> distracted by other issues and not finished it. Now it is done, i did
> some minor cleanups, but it is ready for merging.

Awesome! :)

> I found a bug with getentropy() handling on BSD (it uses different return
> value than getrandom(), so it ended in infinite loop).
>
>
> Also, this part in babel_auth_check_pc() seems to me as buggy:
>
> +  /* If index differs, send challenge */
> +  if ((n->auth_index_len != msg->index_len ||
> +      memcmp(n->auth_index, msg->index, msg->index_len)) &&
> +      n->auth_next_challenge <= current_time())
> +  {
> +    LOG_PKT_AUTH("Index mismatch from %I on %s; sending challenge",
> +                 msg->sender, ifa->ifname);
> +    babel_auth_send_challenge(ifa, n);
> +    return 1;
> +  }
>
> When the condition fails due to rate limiting (auth_next_challenge),
> the execution continues in the babel_auth_check_pc(), which now assumes
> that the index matches. IMHO it should be more like:
>
>   if ((n->auth_index_len != msg->index_len) ||
>       memcmp(n->auth_index, msg->index, msg->index_len))
>   {
>     LOG_PKT_AUTH("Index mismatch from %I on %s",
>                  msg->sender, ifa->ifname);
>
>     if (n->auth_next_challenge <= current_time())
>       babel_auth_send_challenge(ifa, n);
>
>     return 1;
>   }
>
> Comments?

Yup, agreed - nice catch!

> I also changed 'key' config option to 'password' (so it is 'password'
> with either ASCII string or hex-string). In future, we should probably
> switch to 'key' for both variants, as that is the name generally used for
> that. But using different keywords just for different notation of the
> same concept seems confusing to me.

OK. But why not just support both 'key' and 'password' for both formats
straight away, then?

-Toke



More information about the Bird-users mailing list