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

Toke Høiland-Jørgensen toke at toke.dk
Fri Jan 15 16:52:49 CET 2021


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

Changelog:

v4:
- Update RFC references to the published RFC numbers (for both MAC and Babel
  itself).
- Rework WALK_TLVS macro to not cast initial argument, and not use goto for
  framing errors.
- Change MAC validation logic to just let algorithms specify min/max len and
  enforce full key size length even for the smaller-output variants of Blake2.

v3:
- Add variants with smaller digest sizes for blake2s and blake2b.
- Rebase on current master

v2:
- Don't reinvent AC_CHECK_FUNCS() for configure
- Make sure random_bytes() never fails (without taking the whole daemon with it)
- Use existing endianness defines in blake2s code
- Just leave MAC-related code in babel.c/packets.c instead of adding a new file
- Add blake2s test vectors (new patch 3)
- Support supplying mac keys as raw hexadecimal bytes and allow algorithms to
  validate keys on configure (new patches 4-5)

v1:
- Add wrapper function to bird sysdep code to pick a suitable source of random
  bytes
- Import reference Blake2 implementations into lib/
- Rename function names and data structures to use an auth_ prefix instead of hmac_
- Perform a separate authentication pass before parsing the packet, and move the
  authentication-related code to its own source file
- Enforce key length recommendation from the specification
- Add a 'permissive' configuration mode where outgoing packets are signed but
  incoming packets are accepted even though they fail authentication
- Add user documentation for the authentication configuration, and function
  docstrings to the main authentication functions
- Fix a bunch of nits and code style issues

---

Toke Høiland-Jørgensen (8):
      sysdep: Add wrapper to get random bytes
      nest: Add Blake2s and Blake2b hash functions
      mac_test: Add tests for blake2s and blake2b
      nest: Allow specifying security keys as hex bytes as well as strings
      config: Allow MAC algorithms to specify a function to validate their keys
      babel: Refactor TLV parsing code for easier reuse
      babel: Add MAC authentication support
      babel: Update RFC references to new standards track RFC8966


 conf/cf-lex.l         |   31 +
 conf/conf.h           |    5 +
 conf/confbase.Y       |    2 +
 doc/bird.sgml         |   49 +-
 lib/Makefile          |    2 +-
 lib/blake2-impl.h     |  160 ++
 lib/blake2-kat.h      | 4111 +++++++++++++++++++++++++++++++++++++++++
 lib/blake2-ref.h      |  112 ++
 lib/blake2.c          |   48 +
 lib/blake2.h          |   65 +
 lib/blake2b-ref.c     |  270 +++
 lib/blake2s-ref.c     |  263 +++
 lib/mac.c             |   35 +-
 lib/mac.h             |   11 +
 lib/mac_test.c        |   91 +
 lib/string.h          |    1 +
 lib/strtoul.c         |   27 +
 nest/config.Y         |   54 +-
 nest/password.c       |    6 +
 nest/password.h       |    1 +
 proto/babel/Makefile  |    2 +-
 proto/babel/babel.c   |  162 +-
 proto/babel/babel.h   |   66 +-
 proto/babel/config.Y  |   42 +-
 proto/babel/packets.c |  667 ++++++-
 25 files changed, 6164 insertions(+), 119 deletions(-)
 create mode 100644 lib/blake2-impl.h
 create mode 100644 lib/blake2-kat.h
 create mode 100644 lib/blake2-ref.h
 create mode 100644 lib/blake2.c
 create mode 100644 lib/blake2.h
 create mode 100644 lib/blake2b-ref.c
 create mode 100644 lib/blake2s-ref.c



More information about the Bird-users mailing list