34 karma · joined October 26, 2024
https://codeberg.org/ezcrypt/ezcrypt
It still falls slightly outside of my zone of preference, though, as it's a .Net application, which limits which platforms it can be run on (I'm aiming for a tool that can readily be used on most of my devices, including on an old Raspberry Pi or a router).
Thanks for the reference to BearSSL - it appears to be very much in line with my own preferred design principles.
Some motives (some of which may sound strange, but mattered to me):
* Completely public domain.
* Without any third party dependencies (not even openssl or similar).
* Don't rely on a single cipher (low trust).
* Extremely portable (should easily build for and run on anything from an M4 Mac to a Raspberry Pi to an old OpenWRT MIPS router with 32 MB RAM for instance).
* Should be easy to use (e.g. no key management, unless you want to), and composable in standard Unix ways (pipes etc).
* Security focused, obviously. E.g. software architecture-wise, minimize dependencies, properly manage files, processes and secrets, etc.
* Personally: To learn and to build something that I trust.
In a way: When the dust settles after the nuclear apocalypse, if you manage to dig out a C compiler, this is your tool. ;-)I have been planning to look into authentication. I didn't need it for my use cases, yet, but as you say that should be an integral part of any serious tool. I added a ticket: https://codeberg.org/ezcrypt/ezcrypt/issues/3
In the meantime, signing and verification can be done separately, e.g. with ssh-keygen, although that is a bit inconvenient (which kind of defeats one of the key points of the tool).
(I recently discovered his channel, and I like his calm down-to-earth explanations of game dev techniques).
Another more advanced technique is Code Division Multiple Access (CDMA), e.g. used by GPS and some mobile communication modulation schemes. It allows you to have multiple senders on a single radio carrier frequency, and the receiver "selects" which sender to listen to by knowing its "code".
There's also Time Division Multiple Access (TDMA), i.e. senders take turns sending content in allocated time slots.
I think the more fun part was towards the end, when she brute-forced decryption keys for traffic information coordinates and also found the (AFAIK) non-standard Finnish bus stop time table information in another band and reverse-engineered that, and I think that was the takeaway of the talk.
I get that portability and robustness across a wide range of targets is key for software like this (and as such ChaCha20 is a good choice as it's the fastest algorithm for pure software implementation, given same level of encryption strength), but the solution used by Qilin.B seems like a no-brainer (prefer AES-NI but fall back to ChaCha20 for ancient machines).
Edit: I also find the title misleading. AES-256 isn't really "stronger" than ChaCha20, it's only faster when the CPU has the AES-NI extension.