4 ms·
Great work, thank you for sharing. I especially appreciate your link to your "Goals" section-- I'm listed them below because they are important and helpful IMHO
by jph 5y ago
Great work, thank you for sharing. I especially appreciate your link to your "Goals" section-- I'm listed them below because they are important and helpful IMHO.
+ An extremely simple CLI that composes well with UNIX pipes, and that works well as a backend for other programs
+ Small copy-pasteable keys, with optional textual keyrings
Support for public/private key pairs and passwords, with multiple recipients
+ The option to encrypt to SSH keys, with built-in GitHub .keys support
+ “Have one joint and keep it well oiled”, no configuration or (much) algorithm agility
+ A good seekable streaming encryption scheme based on modern chunked AEADs, reusable as a general encryption format
- masklinn 5y ago> The option to encrypt to SSH keys, with built-in GitHub .keys support It’s not built in, just composable in. And to the version in the readme I prefer using command substitution personally: it’s clearer when there are multiple recipients, and the infile tends to be much larger than the keys. The biggest issues wrt github are that it rejects age files (so you have to rename them) and there is no /keys at the repo level whivh would give you the keys of all maintainers, so you have to hunt them by hand.
- Aachen 5y agoHow do you do AEAD with seeking? Tags (MACs) every few kilobytes?
- some_furry 5y agohttps://web.cs.ucdavis.edu/~rogaway/papers/oae.pdf https://web.cs.ucdavis.edu/~rogaway/papers/oae.pdf (Section 7) Previously: https://news.ycombinator.com/item?id=21897192 https://news.ycombinator.com/item?id=21897192 STREAM is a well-studied construction for online authenticated encryption. It doesn't just involve an auth tag every few kilobytes (or megabytes, or gigabytes). There's also a byte flag (called a "tag" in some implementations) to indicate whether or not there should be additional blocks or not.
- technion 5y agoYou don't happen to know of a slightly more approachable specification? A search for anything like "stream cipher construction" only lands me on the traditional "stream vs block" discussions.
- rdpintqogeogsaa 5y agoA Poly1305 tag every few 64 kilobytes. An encrypted chunk in age is thus 64 KiB + 16 bytes.
- o8r3oFTZPE 5y ago"An extremely simple CLI that composes well with UNIX pipes" Just for fun, I occasionally experiment with proposed "post-quantum" encryption solutions and one in particular called Classic McEliece, from the same author (more or less) as the encryption used in age. Its small and compiles quickly. The interface is elegant and seems impossible to screw up. I have rarely seen anyone outside of the author and his followers use file descriptors in compiled programs in this way. I like it. Three programs, each only does one thing usage: cmkeypair 5>publickey 9>secretkey usage: cmencrypt <message 4<publickey >ciphertext usage: cmdecrypt <ciphertext 8<secretkey >message To be fair, I should probably add that McEliece arguably fails the "small, copy-pasteable keys" criteria. :)
- air7 5y agoNice. TIL...
- unkulunkulu 5y agoI’m seeing this for the first time and don’t quite get the usefulness of this interface, can you help me? I mean, file descriptor numbers instead of ordinary options provide some i/o semantics, but I have to remember the descriptor numbers? Is there some mnemonic/logic behind the ids?
- o8r3oFTZPE 5y agoFair question. Im not the author so can only make a guess (other readers of HN surely know far more than I about these subjects). However I suspect the rationale is related to whats been called "Bernstein chaining". https://cr.yp.to/proto/ucspi.txt https://cr.yp.to/proto/ucspi.txt http://www.catb.org/~esr/writings/taoup/html/ch06s06.html http://www.catb.org/~esr/writings/taoup/html/ch06s06.html https://skarnet.org/software/execline/grammar.html https://skarnet.org/software/execline/grammar.html https://www.oilshell.org/blog/2017/01/13.html https://www.oilshell.org/blog/2017/01/13.html
- unkulunkulu 5y agoHmmm, now I don’t get how Bernstein chaining relates to file descriptor interface. I’m curious about specifically the `4<infile` you seem to be admiring, you just observed its unusualness or do you see how its more powerful than the more common `-input infile`?