emurlin
Joined 5 years ago
Joined 5 years ago
This was motivated for situations where using GPG just isn't practical. The issue is that there are very limited options to share a file securely without needing to install additional software (ZIP files come close to this, with some important caveats).
As I was making this, I tried to mitigate many of the concerns raised in that article. For example:
> ask for an file that can be decrypted with an ordinary standalone decryption tool
You don't need to run the self-decryption code at all. You can use 'ordinary' tools like `openssl` to decrypt the contents (note to self, add the `openssl` instructions to the `<noscript>` rendering).
> People who publish decryption tools expend effort to ensure that recipients can trust the actual decryption tools themselves before running them.
You _can_ verify the integrity of the tool itself using gpg. Since you can't verify the entire HTML file (otherwise, you wouldn't be able to inject the encrypted payload), there's ways a malicious actor could add additional scripts and still pass the integrity check. However, if you're diligent enough to be using gpg to check this, you'd likely also be diligent enough to spot such additions, or you'd be using the openssl route.
ZIP files can use two types of encryption, ZipCrypto or AES. As the sibling comment points out, ZipCrypto is pretty broken. IIRC the AES encryption is OK or mostly OK, but it's not universally supported, so your recipient may or may not be able to open the file you send them. Notably, the Windows built-in ZIP implementation didn't support ZipCrypto (this may have changed now that Windows ships with bsdtar / libarchive).
Subjectively, I feel this can be simpler to use (mostly for the recipient). You can host it at some server, share the link and the password and the recipient can access it like a regular website and get a plaintext download file. Compare that with a ZIP file, which with the same flow give you a ZIP download: if they don't immediately extract it, then they may have to hunt for the password later.
The goal was:
1. Something that didn't require any installation (assuming a web browser)
2. Have a single file with no network that could self-decrypt
3. Be fully auditable
The second point is done by having (sort of(*)) reproducible builds and embedded OpenPGP signatures.
The first point is made by cleverly manipulating the HTML structure so that it can decrypt without breaking the PGP signature. It can even decrypt using bare openssl (which was a design goal too, though getting the exact structure right took some work and bug reports).
The third point is accomplished by the first two, and by the source being freely available.
(*) Depends on the OS at the moment.
The project is split into two parts, one which is this ready-to-use web UI (obviously, useful for testing in the browser), but also a minimal library that can orchestrate the tests and produce a report (with some nice CLI-based reporters too).
If you're willing / able to sacrifice reversibility, a more orthodox approach can be hash (or *MAC) based. For example, SHA-256(secret + domain-name). However, a key point of this project is attribution, to avoid the need of storing a large set of pre-generated addresses, for portability and for easy reverse aliases.
In terms of the actual SMTP bits, I'm currently relying on Cloudflare workers for receiving and delivering (just a nice and gratis API); however, extensibility within reason is a goal (in scope: provider-agnostic API; very probably not in scope: an SMTP client / server).
The rest of my time goes into a few personal projects, most with no public URL yet.
* An IndieAuth provider based on WebAuthn, the idea being that instead of relying on delegating authentication, it could be handled directly using, e.g., U2F keys or a device.
* A temporary e-mail address provider with deterministic addresses for attribution.
* A self-service menu / ordering service
* An E2EE document signing solution
Some of these have led to a few mini-projects that I actively maintain due to not finding a fitting solution, such as: * An HTTP media type negotiator (https://github.com/ApelegHQ/ts-http-media-type-negotiator) -- negotiate based on accept headers. This was because I couldn't find a negotiator that correctly parsed headers.
* A JS sandbox (https://github.com/ApelegHQ/lot) -- Tried to implement something lightweight yet functional
* A MIME multipart encoder and decoder (https://github.com/ApelegHQ/ts-multipart-parser) -- Attempt at a lightweight, general and spec-correct parser
* A lightweight ASN.1 DER encoder (https://github.com/ApelegHQ/ts-asn1-der), meant to be used with its sister project (https://github.com/ApelegHQ/ts-cms-classes) --- Part of the document signing project
In addition, trying to move a side-side project to Svelte 5: * A web-based self-contained encryption/decryption tool (https://github.com/ApelegHQ/ts-cms-ep-sfx) --- Created to easily share files with maximum compatibility (ZIP archive inside a CMS payload) and minimum requirements.At the time, it's mostly just a web CV (with some effort put into implementing RDFa and microformats). The intent is adding a blog section too.
Experienced software engineer specialising in backend development with a proven track record. Over ten years of industry experience, delivering exceptional results to drive projects forward.
What sets me apart:
- Broad expertise: Projects and technologies include data integration, Intel SGX, consensus protocols, REST APIs, and web development. Proficient in C, C++, CSS, Docker, ES6+, express.js, Java, JavaScript, Kotlin, LDAP, Linux, Neo4j, nginx, Node.js, PHP, PL/SQL, Postfix, React, TypeScript, Xen, and (X)HTML5, I possess a versatile skill set.
Why choose me:
- Strong problem-solving skills: Thrive on challenging problems, finding creative solutions. Excel in optimizing performance, designing scalable architectures and resolving complex technical issues.
Expertise in Identity and Access Management (IAM), security, and data integration. Deep understanding and practical experience to deliver secure and seamless solutions. Open to exploring new challenges and technologies beyond these areas.
Available for full-time, part-time, and consulting engagements. Let's connect and discuss how I can contribute to your success.
Location: Trøndelag, Norway
Remote: Yes (remote only, unless within Trøndelag or occasional meetups within Scandinavia)
Willing to relocate: No
Résumé/CV: https://riv.ar/curriculum-vitae/
Email: hn-u5cgNWJM(-at-)protonmail.com
GitHub: https://github.com/corrideat, https://github.com/ApelegHQ
Experienced software engineer specialising in backend development with a proven track record. Over ten years of industry experience, delivering exceptional results to drive projects forward.
What sets me apart:
- Broad expertise: Projects and technologies include data integration, Intel SGX, consensus protocols, REST APIs, and web development. Proficient in C, C++, CSS, Docker, ES6+, express.js, Java, JavaScript, Kotlin, LDAP, Linux, Neo4j, nginx, Node.js, PHP, PL/SQL, Postfix, React, TypeScript, Xen, and (X)HTML5, I possess a versatile skill set.
Why choose me:
- Strong problem-solving skills: Thrive on challenging problems, finding creative solutions. Excel in optimizing performance, designing scalable architectures and resolving complex technical issues.
Expertise in Identity and Access Management (IAM), security, and data integration. Deep understanding and practical experience to deliver secure and seamless solutions. Open to exploring new challenges and technologies beyond these areas.
Available for full-time, part-time, and consulting engagements. Let's connect and discuss how I can contribute to your success.
Location: Trøndelag, Norway
Remote: Yes (remote only, unless within Trøndelag or occasional meetups within Scandinavia)
Willing to relocate: No
Résumé/CV: https://riv.ar/curriculum-vitae/
Email: hn-u5cgNWJM(-at-)protonmail.com
GitHub: https://github.com/corrideat, https://github.com/ApelegHQ
CV: https://dl.riv.ar/cv/20231031_CV_Vieitez_Parra.pdf?sha384=JmAhMRM3_6xNQQAPDX3OzYrgmzZ2PlqnA1bVyJqnTNyjC64p-VM5BEJEvsT3_sSN Blog: https://apeleg.com/blog/