[noise] Potential redesign?
Trevor Perrin
trevp at trevp.net
Mon Mar 16 17:51:42 PDT 2015
I'm considering a redesign of Noise, with the goal of making it a
framework that can express a wider range of DH-based protocols.
The previous Noise had a single box message, and a single pipe
protocol. So it wasn't optimal for every case, e.g. where clients had
prior knowledge of server keys, or didn't want to do client
authentication:
https://moderncrypto.org/mail-archive/noise/2015/000109.html
So the idea now is that Noise messages could be described with strings
that just list a bunch of DH public keys and calculations in the order
they should be sent / calculated, and libraries should be able to
handle any message described by such a string (a descriptor).
This needs a lot of fleshing out, but I'm curious if people like the basic idea.
https://github.com/trevp/noise/blob/noise2/noise.md
Here's how you can express various protocols with descriptors:
---
The following "Box" protocols represent one-shot messages from a sender to a
recipient.
Box naming:
S_ = static key for sender known to recipient
N_ = no static key for sender
X_ = static key for sender transmitted to recipient
_S = static key for recipient known to sender
_E = static and ephemeral keys for recipient known to sender
BoxSS(s, rs): # ~ Nacl crypto_box
ndhss
BoxNS(rs): # ~ public-key encryption
e, dhes
BoxXS(s, rs): # ~ miniLock, old Noise box
e, dhes, s, dhss
BoxNE(rs, re): # ~ public-key encryption + prekey
e, dhee, dhes
BoxXE(s, rs, re): # ~ TripleDH
e, dhee, dhes, s, dhse
The following Noise protocols represent handshakes where the initiator and
responder exchange messages.
Handshake naming:
N_ = no static key for initiator
X_ = static key for initiator transmitted to responder
_S = static key for responder known to initiator
_X = static key for responder transmitted to initiator
_E = static key and an initial prekey for responder are known
to the initiator (but responder will also use a fresher
ephemeral)
HandshakeNX(): # ~ Ntor (+ server-id-hiding)
(1) -> e
(2) <- e, dhee, s, dhse
HandshakeXX(s): # ~ old Noise pipe
(1,2) HandshakeNX()
(3) -> s, dhse
HandshakeNS(rs):
(1) BoxNS(rs)
(2) <- e, dhee
HandshakeXS(s, rs):
(1,2) HandshakeNS(rs)
(3) -> s, dhse
HandshakeNE(s, rs, re):
(1) BoxNE(s, rs, re)
<- e, dhee
HandshakeXE(s, rs, re):
(1) BoxXE(s, rs, re)
<- e, dhee, dhse
Trevor
More information about the Noise
mailing list