[Babel-users] About an authentication extension

Rodrigo Garcia strysg at riseup.net
Thu Sep 7 23:38:00 UTC 2017


Hello, i've been working on an extension to the babel protocol to
authenticate updates using RSA. It's mostly an academic excercise and i
have planned the first functional versions in a month or so.

The main idea is to make that a *central entity* generates a set of
encrypted tokens using a RSA *private key*. The set of tokens is unique
to every node on the network and every node receives it's unique set of
tokens, a network prefix and the *public key* from the central entity.

Every decrypted token has the form:

<network_prefix>_<randomnumber>

example:

80.0.2.0/24_48003818
80.0.2.0/24_41106879

I was planning to use encrypted tokens of 512 octets.

Every node must send a token from it's unique set of tokens on every
route update. When a node receives an update, it tries to decrypt the
token using the *public key* of the central entity and checks if the
decrypted token contains the network prefix being advertised.

If so, the update is taken, if not it is ignored.

So I came to define a new TLV named lorauth

 0                   1                     2
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Type=29   |           Length              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |      Clen                     |  Cipher...
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

Clen: Length of encrypted token
Cipher: Encrypted Token

But as the Cipher length is 512 it needs 2 octets in _Length_, so here
the questions:

* If I use 2 octets will this extension be compatible with other
extensions according to rfc - 7557 ?

* I'm guessing it take lots of extra work to every node by decrypting on
every update, but a node may be less restrictive and only *prefer*
updates authenticated this way, than common updates. Can you think of
better ideas to reduce the need of decrypting?

* What general idea you have about this authentication mechanism?

== Implementation questions ==

I'm a C beginner and started a fork on
https://git.laotrared.net/LaOtraRed-dev/babeld-lor

* I'm aiming to add two fields to the _source table_

   unsigned short clen;
   unsigned char cipher[513];

  Can you point some functions that I have to modify to make the
autentication mechanism work?

* I've seen the struct xroute on xroute.h , I still don't get the idea
of this struct and whether or not it is mandatory to add the fields;
clen , cipher there.

Thanks in advance for any comments :)




More information about the Babel-users mailing list