It was thus said that the Great Adnan Maolood once stated:
> I've been working on a simpler alternative to TLS, mostly for fun and also
> as a learning excersize to have a better understanding of how TLS works.
>
> You can find it here:
> https://sr.ht/~adnano/miso/
>
> Obviously this has not undergone any security audits, so don't use it for
> anything serious.
>
> Biggest differences from TLS:
>
> - No certificate authorities; use TOFU instead
> - No version negotiation
> - No session resumption
> - Encrypted server name indication
> - Much simpler
>
> Let me know what you think!
First off, the specification does not give enough detail to actually
implement the protocol. There's nothing about the wire format, and I had to
check the implementation to see you are using BARE message Encoding [1], yet
*another* encoding scheme like JSON, BSON, CBOR, MsgPack, CapnProto,
Protobuf, etc. etc. [2]
Second, TLS libraries come with the cryptographic primitives required, and
yes, there is negotiation that happens, but that's because as cryptographic
primitives are broken, new ones can be slotted in and used. Here, if (and
it could happen) Ed25519 is "broken" then what? At least with several
supported primitives, the protocol can still be used while the broken
primitive is removed.
Even so, anyone attempting to implement Ed25519 is a fool for the pitfalls
are subtle and *will* be exploited; I'm guessing you are assuming the use of
libsodium (or God help you, libnacl) with this protocol, right?
I'm no crytographic expert, but I don't see how this protocol prevents
MITM attacks; the details in the key share (section 2.2.1) don't go into
enough detail for my liking. How do I know I'm talking to the server in
question, and not being invisibly proxied by Eve or Mal? And how does each
side determine an insecure key share? What exactly goes over the wire?
Also, some pseudocode would be nice as not everybody knows Go.
-spc
[1]
https://baremessages.org/
[2] Groan.