[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