[noise] Lightweight Cryptography and Noise

Rhys Weatherley rhys.weatherley at gmail.com
Mon Mar 2 23:25:10 PST 2020


Hi all!

Over the last few months I've been working on optimized 32-bit
implementations [1] of the 2nd round submissions to the NIST Lightweight
Cryptography Competition [2].

A few years from now one of the LWC candidates will be standardised by
NIST.  I thought I'd give an update as to what looks promising for future
use in Noise.

A lot of the submissions use 128-bit keys where Noise requires at least
256-bit keys with a 128-bit tag.  The following submissions support 256-bit
keys:

Gimli, 256-bit key, 128-bit nonce, 128-bit tag - this is the spiritual
successor to ChaChaPoly from the Bernstein group of cryptographers.  It has
good software performance and is probably the easiest to drag-and-drop into
Noise.  It is a sponge, based around the 384-bit Gimli-24 permutation.

Schwaemm256-256, 256-bit key, 256-bit nonce, and 256-bit tag.  The nonce
size doesn't matter much to Noise as we already zero-pad the 64-bit
sequence number for AES-GCM.  For the tag, I suppose it could be truncated
to 128-bit to fit into Noise.  Schwaemm256-256 is a sponge, based around
the SPARKLE permutation.

TinyJAMBU-256, 256-bit key, 96-bit nonce, and 64-bit tag.  TinyJAMBU is
based around a non-linear feedback shift register (NFSR) and has a ... well
... tiny code size.  The description in the paper sounds insane: 1280
rounds and a sponge absorption rate of 32 bits per block!  But it gives
Gimli a run for its money in the performance stakes.  I like it a lot and I
hope it survives to the next round.  Shame about the tag size though.

SATURNIN-CTR-Cascade, 256-bit key, 128-bit nonce, and 256-bit tag.
Saturnin is a 256-bit block size version of AES with a bit-sliced
implementation.  Operated in CTR-Cascade AEAD mode.  Middling performance.

DryGASCON-256, 256-bit key, 128-bit nonce, 256-bit tag.  Sponge based
around a generalised version of ASCON.  The interesting feature of this one
is that it has built-in protection against power analysis side channels
which is a must have in some embedded applications.  Performance is similar
to Saturnin - the side channel protection requires a lot of extra work per
bit to hide the state.

KNOT-AEAD-256-512, 256-bit key, 256-bit nonce, 256-bit tag.  Sponge based
around the KNOT permutation.  Performance of the 256-bit version of KNOT is
ok-ish.

With the exception of TinyJAMBU, all of the above have digest hashing modes
as well.

As mentioned before, there are plenty of 128-bit ciphers.  While most of
the above are sponges, block ciphers show up a lot in the NIST submissions,
usually based around GIFT-128 and SKINNY-128 which are power efficient in
hardware but middling to implement in software.

Right now for Noise I would probably pick Gimli for regular work and
DryGASCON for hardening against side channels.  But things may change as
the competition advances.

Performance figures [3] and full algorithm summary [4] are on my github
page.

Cheers,

Rhys.

[1] https://github.com/rweather/lightweight-crypto
[2]
https://csrc.nist.gov/projects/lightweight-cryptography/round-2-candidates
[3] https://rweather.github.io/lightweight-crypto/performance.html
[4] https://rweather.github.io/lightweight-crypto/algorithms.html
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://moderncrypto.org/mail-archive/noise/attachments/20200303/b923d360/attachment.html>


More information about the Noise mailing list