Skip to content

PoC for AIS broadcast authentication based on TESLA

License

Notifications You must be signed in to change notification settings

pietrotedeschi/Auth-AIS

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Auth-AIS: Secure, Flexible, and Backward-Compatible Authentication of Vessels AIS Broadcasts (Proof of Concept)

Auth-AIS is a Broadcast Authentication protocol specifically designed to meet the features and bandwidth constraints of the Automatic Identification System (AIS) communication technology. It has been designed as a standard-compliant AIS application, that can be installed by Class-A and Class-B AIS transceivers to establish broadcast authentication with neighboring entities, being them either vessels or port authorities.

A Proof of Concept using GNURadio and Ettus Research X310 SDRs on how to set up broadcast authentication between two AIS transceivers. It supports different security levels: 1, 2, 3, 4, 5 and 6 that can support different scenarios that a maritime vessel could require.

ais_tranceiver_flowgraph

For further details, please refer to the paper.

Demo

A small demo showing Auth-AIS in rejecting impersonation and replay attacks. For details see the demo folder

Auth-AIS Demo

Why create this?

Usage of AIS is increasing rapidly, yet literature on it is scarce. The available literature, provides contribution on it that is not standard compliant or could be done just using a simple software update. Thus, our contribution is to raise awareness about this and provide a solution that is standard compliant and backwards compatible.

How to use

This project has two parts, two C++ programs and a flowgraph in GNURadio. To set them up:

  1. Install gnuradio software
  2. Install gr-aistx_with_input block to gnuradio (instructions inside the block folder on how to compile and install it). If you are using PyBOMBS, please initialize your environment first.
  3. Open ais_transceiever.grc flowgraph in GNURadio.
  4. Make sure ports 51999 and 5200 are not adopted by any network protocol.
  5. Execute recvr or compile receiver.cpp code from the source to start the receiver.
  6. Execute main or compile main.cpp code from the source to start the transmitter.

ais_tranceiver_flowgraph

How to compile code

To compile from source or use a different security level for main.cpp, go to src folder and use the following command:

    g++ -O2 -DSECURITY_LEVEL=1 main.cpp BloomFilter.cpp smhasher-master/src/MurmurHash3.cpp core-master/cpp/core.a ./ais_receiver/*.c -o main

To compile from source for receiver.cpp, go to src folder and use the following command:

    g++ -O2 receiver.cpp ais_receiver/*.c core-master/cpp/core.a BloomFilter.cpp smhasher-master/src/MurmurHash3.cpp -o recvr

Security Level and other Flags

In order to set a different security level, you can add flag -DSECURITY_LEVEL=t that ranges from 0 to 6. Following table provides information about the different security levels.

Security Level Description
0 No Security. AIS communications are still performed in clear-text, without any authentication service.
1 Deterministic Security Configuration, Digest Size of 49 bytes, key size of 16 bytes, sent out for every AIS message (overhead=75%)
2 Deterministic Security Configuration, Digest Size of 21 bytes, key size of 16 bytes, sent out for every AIS message (overhead=66.67%)
3 Probabilistic Security Configuration, Option 1, BloomFilter size of 17 bytes, digest Size of 32 bytes, keysize of 16 bytes, sent out for every N=2 AIS messages (overhead=60%)
4 Probabilistic Security Configuration, Option 1, BloomFilter size of 29 bytes, digest Size of 20 bytes, keysize of 16 bytes, sent out for every N=4 AIS messages (overhead=42.86%)
5 Probabilistic Security Configuration, Option 2, BloomFilter size of 65 bytes, digest Size of 20 bytes, and key size of 16 bytes, sent out every N= 9 AIS messages (overhead=35.71%)
6 Probabilistic Security Configuration, Option 2, BloomFilter size of 65 bytes, digest Size of 49 bytes, and key size of 16 bytes, sent out every N=9 AIS messages (overhead=40%);

Other flags include:
-DPORT_SEND or -DPORT_RECEIVE to set another port for send/receive sockets

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Developers

Credits

Credits go to the original authors of TESLA protocol, MIRACL Core Crypto library, gr_aistx and ais_receiver whose original efforts made this possible:
https://github.com/miracl/core
https://github.com/trendmicro/ais
https://github.com/juan0fran/ais_rx

License

Auth-AIS is released under the BSD 3-Clause license.

Releases

No releases published

Packages

No packages published

Languages

  • C++ 74.8%
  • Python 8.9%
  • C 4.9%
  • HTML 4.0%
  • Makefile 3.2%
  • CMake 3.0%
  • Other 1.2%