Hardware Security Token
Marjan Olesch
marjan.olesch at gwdg.de
Wed Jul 15 10:29:57 CEST 2020
Hi,
I'm a student in computer science and currently writing my master
thesis. It's about an STM32F103 based security token, that is
specifically designed for the WireGuard authentication. For now, it has
more like a proof-of-concept character, and I'm aware of the possible
security flaws, which also have been discussed here before
(https://lists.zx2c4.com/pipermail/wireguard/2016-July/000243.html).
Nevertheless I want to briefly present my team's concept, as well as our
progress.
The Noise IK pattern shows clearly, that it is not enough to just
outsource DH(SiPriv, SrPub) to the token, since this part would be
static, as long as the private static key or the peer’s public key does
not change. Considering chapter 5.4 in the wireguard paper (initiation
scenario), at least the operation (Ci, k) := Kdf2( Ci, DH(SiPriv, SrPub)
) needs to be ported to the token, since it is the Ci that is based on
ephemeral keys. Furthermore, the k, resulting from the KDF2 is a secret,
that is needed to create the AEAD. This means, that the k is kept on the
device, while the AEAD is also calculated on the token. Because the AEAD
calculation requires a timestamp, the device needs to run an RTC.
Considering all this, an attacker that intercepts the communication
between token and computer cannot replay the handshake with the
information transceived, since he is not able to alter neither the time
stamp, nor the k.
Unfortunately, the STM32F103 can - from our findings - only run the
time, not the date, while powered off (with backup battery connected).
So for now the date has to be delivered once a day in our
implementation. The delivery can be protected by a password and/or a
hardware button for better security. The most important algorithms
Blakse2s, curve25519 and chacha20-poly1305 run on the STM32 and we were
able to reconstruct the operations needed, in order to source out the
particular parts from the handshake initiation. The communication to the
(virtual COM) device runs via USB and a really simple rpc protocol. We
used wireguard-rs for the development and everything stated above works
at the moment.
I don’t want to bother you with too much information. Please let me
know, if you have thoughts about this idea and/or the implementation. I
would be pleased to present you everything in more detail.
Code can be found on https://gitlab.gwdg.de/uenigma
Best Regards,
Marjan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5406 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.zx2c4.com/pipermail/wireguard/attachments/20200715/34aff945/attachment.p7s>
More information about the WireGuard
mailing list