There is this tool called age written in go and a fully compatible Rust implementation called rage. They promise to be a simple tool for encrypting files and other things.
It only does encryption, using public key cryptography (Curve 25519 or SSH keys) or password based symmetric encryption. (Please excuse me glossing over some details here)
It only encrypts things, no signatures beyond AEAD involved. It aims to be minimalistic and do just one thing reasonably well instead of being a mediocre multi tool. It doesn’t aim to be a full replacement for things like OpenPGP.
AFAICT there hasn’t been a proper security audit yet. There seem to be some issues with the design as pointed out here which don’t look like critical flaws to me, but then again I’m not a cryptography expert.
Some of the questions I want to throw into the discussions are:
- Is it any good?
- In which situation would you use it?
- What are some alternatives that do it differently or maybe even better and why is that?
Bonus question: Is there a similar tool that uses an audited library like libsodium, and if not, would it be worth developing one?
Filippo Valsorda, the author of Age, is a qualified cryptographer and I can vouch for them, being myself an applied cryptographer. And many of my cryptographer friends do as well.
Age seems good to me BUT. I don’t like streaming, and the article that you cite is on point. To me, streaming is unwise precisely because you can have truncation attacks. Or even length extension attacks. One may counter them using counters, but you will need a temporary storage until you know if the input is complete or not. And this defeats streaming.
Your application might be OK with truncation. That’s for you to determine. Which is hard. If you can’t decide, then you shoud stay away from streaming.
I wrote an article on this myself, a few weeks ago. I use that approach in production to secure some data that may be sent to me anonymously. It was reviewed by some cryptographers in my circles but I do not claim that it is a trusted library.