Skiff – Privacy-first end-to-end encrypted email
skiff.com
skiff.com
[1] https://creativecommons.org/licenses/by-nc-sa/4.0/ [2] https://github.com/skiff-org/skiff-apps/issues/94
Global preference for open source aside, whichever license you pick, I'd recommend visiting https://joinup.ec.europa.eu/collection/eupl/solution/joinup-... for example, a great tool to find the appropriate license for your software.
https://reuse.software/tutorial/ is a great read and a wonderful initiative to help with licensing and compliance.
P.S: CC is not made for software.
So visually it looks just like you're chatting normally, but the server gets only encrypted messages.
Since the 1990s there has existed an entire non-profit organization dedicated to clarifying the meaning of the name.
Which is fine, but still quite surprising to hear in a hacker forum in 2023...
Further, it looks like the email encryption provided by this system only works between users of Skiff. At that point, why use email at all? Why not use a real secure messenger? Instead of building an "encrypted email service", you could literally just build an email-flavored frontend to Matrix; either way, you're proxying to SMTP, not speaking it directly.
>From the white paper, it appears as if this system requires its users to trust the server. That's not end-to-end encryption. What do I have wrong here?
It doesn't. All data is encrypted client side across all apps - Skiff Mail, Drive, Pages, and Calendar. For sending external, the whitepaper is very clear how this case is handled in section 8.2 as securely as possible (without having PGP in place. Though this is something we are looking at based on community feedback).
>Further, it looks like the email encryption provided by this system only works between users of Skiff. At that point, why use email at all? Why not use a real secure messenger? Instead of building an "encrypted email service", you could literally just build an email-flavored frontend to Matrix; either way, you're proxying to SMTP, not speaking it directly.
Lots of folks are sick of getting sold their data sold based on their email. Even corporations are sick of largely giving more information about their customers to Google even notoriously Amazon that stopped sending purchase receipts via email.
So even if not end to end encrypted, we do encrypt the emails with the recipient's keys ensuring that only the recipient can access this data. This is a strong privacy guarantee not just backed by a flimsy privacy policy but actual cryptography.
But that's not what I'm talking about with respect to end-to-end encryption. The white paper refers repeatedly to "browser" users. Your server can feed arbitrary Javascript to browsers and subvert encryption in a variety of ways, can't it?
I'm still not clear why you designed a new, simplistic cryptosystem at all here; can't you do everything you're trying to do here on top of Matrix? Again: the cryptography promises you're making only work between users of your system.
That's how literally any website works. How do you encrypt in the browser if the server doesn't send JavaScript to encrypt data? You also trust Signal not to issue an update that sends data in plaintext over the network. Unless you're building an app from source, you implicitly trust the developer to some extent.
A couple of things that are easier in a web-delivered tool is deliver a backdoor to a user or group of users (which Skiff can track), or deliver a backdoor over a particular window of time across many users to decrease the chance of detection.
I know Skiff uses IPFS in some of parts of their solutions, and there's something they could do with that for the first -- essentially making visiting a particular version of the code part of how it is accessed, but there's some real UI challenges, which maybe they're looking into (it's been a while since I checked them out: they have some great UX in other parts of their suite).
The other tactic I've seen is to bundle the page into a browser extension, which moves you closer to Signal's status.
I wish there was some way on iOS to prove that some particular version of an app was built from a certain git hash. That way these sort of attacks would be easier to detect.
However there is still one advantage of even appstor: They have to push the backdoored version to everyone (or large set of users). So that drastically increases risk of being caught. Website under their control can backdoor one specific user or even just one session, making detection harder.
Only if someone out there is extracting, decompiling and auditing each version of the Signal iOS app in the app store. But I doubt anyone is doing this. If a backdoor is ever snuck into the signal ios app for a few users for a few weeks, I highly doubt anybody would notice.
Of course someone is doing this. I’m not sure they are the kind to tell it to the world, though.
Even “secure” softwares like Google Chrome can capture your whole browsing history if they suddenly decide to enable a flag on your IP address. No need for conspiracy or update, though Chrome is considered perfectly secure.
In Android you can also distribute updates to specific e-mail addresses, which is very convenient.
Yes but this requires the user to opt-in, you can't do it silently:
> After clicking the opt-in link, your testers will get an explanation of what it means to be a tester and a link to opt in. Each tester needs to opt in using the link.
Source: https://support.google.com/googleplay/android-developer/answ...
As for the Chrome thing, I'm a Firefox user but I would be surprised if it shipped with the option to remotely upload whole history without user's knowledge or consent, do you have a source to back that up?
So if a Signal group is using group invite links they have the same problem Skiff does.
What I would like to exist is something like Subresource Integrity [1] but for a URL itself, so that you could include a hash in a URL and let the browser warn you if the page source doesn't match the hash.
1. https://developer.mozilla.org/en-US/docs/Web/Security/Subres...
Meta has done some work along with Cloudflare on this for WhatsApp Web, specifically. In general, JS crypto is always going to be suspect if the threat model involves distrusting the server (like in e2ee protocols like Signal).
Regardless of all this, your open source crypto library doesn't even use the Web Crypto APIs at all, but rather the dreaded js based crypto you are badmouthing (tweetnacl, stablelib)
One similarity between Lavabit and Skiff is that tptacek calls them both non-end-to-end encrypted.
One never has access to user private keys (Skiff).
And that had complied previously with US government subpoenas to provide metadata and data for users?
Interesting. Link? Are you talking about this article? https://www.forbes.com/sites/kashmirhill/2013/08/09/lavabits...
It seems to be talking about metadata, not data.
Skiff's password mechanism actually solves this flaw cryptographically using known, established primitives.
We use argon2id to take password and turn it into two cryptographic keys. One key is used for an SRP scheme to prove you have the password in a signing flow that bootstraps session management. The other key is actually the data encryption key. These keys are never sent to Skiff's servers and this generation happens all in the browser.
Lavabit really failed fundamentally in having actual end to end encryption because the password was sent to the server.
[1] https://arstechnica.com/information-technology/2013/11/op-ed....
As a simple demonstration, even if client side code is perfectly secure, an adversary with server control can simply log all emails passing through the server and instantly have access to all new user emails that way. This means users have to trust the server, contradicting any notion of E2EE.
This are just old technical problems which are already solved, for example by Tutanota. Mails are not send in plaintext if they are encrypted, and mailbox can be encrypted too. Plaintext version of your data exist only in the memory of your computer while the session for your mail client is open.
What it comes to the search - it does not matter anymore. We have enough computational power these days and storage to hold emails on devices. User experience is about the same. Increasingly, it is just optimisation problem which can be done right. Just don’t use Electron for your email app.
But that is true that if you use skiff to send message for someone, who is not using skiff, the message is unencrypted because receiver has no means to decrypt it.
That is standrdisation issue. Apparantly PGP is not considered good enough.
But if we had standards, we have techology to provide E2EE emails.
Somehow the infrastructure should be transparent so that outsider can verify indeed at any time, that you don't collect logs from that traffic, or have no other means to inspect traffic if you want to.
There are currently no other means than just to use E2E encryption.
There is also another almost there, but that would mean that you should open-source your whole infrastructure, and use reproducible builds. Somehow there should be way to get access for outsiders, that you indeed use your infrastructure as you describe in your source code. But this is very complicated and also changeable at any time, unlike E2EE.
Apparently, email may not their main e2ee usecase. The CEO at Skiff wrote this on PrivacyGuides forums:
Our solution for external sharing was not intended for email. It is much more powerful to share E2EE real-time collaborative docs/files with subpages, embedded E2EE files, and so much more.
Curiously, in the same thread, there's is a mention of Trail of Bits auditing their codebase twice.https://discuss.privacyguides.net/t/skiff-mail-email-provide...
Also, pentest ≠ audit. Completely different!
Your transparency statement clearly says that Security audits. This is different than privacy audits. You cannot audit privacy, since you can intentionally change the functionality of your software right after the audit.
For the same reason, you cannot share open-source version of your software and say that it respects privacy. That can be only said if you use reproducible builds, and for client software only.
Both security audits and sharing your software as open, is about security, not the privacy. Open-source software and security audits help to reduce unintentional issues. And in this context it means a lot.
No. That is not what security audits are. Security audits ensure that software does safely what you, as service orderer claim, in a single moment. Usually including checklist.
But they cannot guarantee that you don’t change software between audits.
That is why E2EE exists as then it does not matter and we don’t need to trust.
Open-source, security audited client for E2EE communication with reproducible builds is the magical, correct combination to ensure both security and privacy.
ProtonMail does have import/export and the SMTP bridge (for paid users) and those things work but ProtonMail mangles emails: it removes plaintext body where there's a HTML body and it screws with headers.
Ultimately the best option I could come up with was self-hosting my email address. Incoming emails go directly to a box sitting in my office, with TLS enforced.
I put this off for years fearing deliverability issues but finally realised that incoming and outgoing email can be hosted in different places. So though the box in my office receives my email, I send email through either a Hetzner box or Mailgun (with retention disabled). Haven't encountered any issues with this so far.
wow, an e-mail service without smtp nor imap?? no thanks
Meanwhile with PGP I can post up my public key on my personal sites / resume / social accounts, and people actually have reached out. I also like that you don't even need to include your email address to prevent scrapers from harvesting it. If it's on one of the public keyservers, their client will find the email address for the respective public key.
I'm still contemplating about the E2E webmail app - No matter which way one looks it - It's a shaky concept...
BTW. Does anyone know what is the current state of WASM Constant Time proposal?
Underneath though, it's a pretty standard Postfix + Dovecot setup and there are plenty of those around.
[0]: https://docker-mailserver.github.io/docker-mailserver/latest...
More expensive than self hosting, but still quite cheap, and no weird vendor-specific lockin for the important parts.
> Unlimited pages
> Desktop, tablet, and mobile access
> IPFS support
> Full text search
Which seems to be all about the document service, but it also doesn’t mention how much storage I get. I assume it’s not unlimited despite saying “Unlimited pages.”
Also, I can see that Skiff has raised over $14M in VC funds[1], so as a privacy-focused product with a free-tier I think it’s fair to ask what they see as their path to profitability is without compromising either their privacy or their free offering.
1. https://www.crunchbase.com/organization/skiff-402f/company_f...
They seemed to have pivoted from web3? https://news.ycombinator.com/item?id=29797691
That would then actually be email rather than not-email-over-smtp.
Another service delegated to trust a 3rd party isn't.
..Personally, this looks promising. I am going to say it though- Skiff needs some sort of mechanism to use PGP if for nothing else, then to communicate with Protonmail email addresses specifically. I see they are taking the stance its's time to move to something beyond PGP- but given the extremely large userbase that is Protonmail- I think their target market would feel better being able to communicate with their protonmail contacts- using PGP.
Also, i'm having trouble seeing if Skiff has a way to 'send secure emails' to other external email providers, like Tutanota ,Mailbox, and Protonamil do for their users to securely contact people outside their ecosystems(like peeps with gmail). Solve those issues- and the pain/difficulty/unease of convenience will disappear for their market which likely already uses Protonmail/Tutanota, etc. And Skiff would be very attractive at that point, positioning itself as a successor to those two possibly.
Right now, you can use Skiff Pages for this. You can share public links that have E2EE using link fragments, add passwords, and collaborate in real-time.
Skiff's free tier also has a 'generous' free tier with 4 aliases, 10GB of drive (only? combined with email?) storage, and custom domain support (? !)
Just that, it's one inbox in the Free tier. Since I'm using on my own domain, I prefer having one inbox for all addresses!
I'm curious if your emails go to spam more frequently, being a smaller player in an established hegemony.
You have a generous free tier which may attract spammers. How do you deal with IP reputation?
And now I'm seeing Skiff, which is great, it's clear that people want this. I just no longer know who the players in the space are.
Host your own + GPG
I personally use mailfence with IMAP on Thunderbird (so its not full E2E encryption despite the marketing) but I much prefer the Belgian privacy law.
Though the mobile/destop apps looks very nice and overall kudos for what seems like a coherent ecosystem (something I miss from my patching of sync.com and mailfence). Also concerned by VC money in that space, hopefully you are profitable. Nobody wants to have to move their life (calendar, drive, emails) because they trusted a startup that ran out of money...
On that note: the passwort page for the registration form has terrible UX.
Paste is disabled for the 'Confirm password' field (Chrome, Android) but for not the first 'password' one. Rationale?
I use a decent-length generated password from KeePass.
Being forced to typing this out just plain sucks.
Edit: after reloading the page, paste works also on the 'Confirm password' field. Very strange. Account creation still fails with above error though.
Yet the web UI downloads remote images by default.
Granted, it hides your IP address by proxying the request. But it still leaks that the message was read. I used https://www.emailprivacytester.com to test this. No image was fetched until I clicked the email to read it.
Also, this is false. You could download all remote content at time of delivery. That way it would be impossible for a sender to differentiate between an email simply being delivered and one being read.
It's saying that the images were blocked, but that didn't stop them being fetched. Entirely defeating the point of the setting.
The only difference between your option and other providers are:
1. Yours doesn't even work. It still loads the remote images. It just doesn't display them
2. Yours has the wrong default.
Your "block remote content" option is even worse than just forcibly loading remote images and not even having the option in the first place, because it tricks the user into thinking that it will preserve privacy, like it does for other providers, but it does not preserve privacy in your case as it still loads the images.
It does not load the images. That's just patently false disinfo.
If you read back, you'll see I wrote email clients and providers. But I'll note that you have not provided a list of clients or providers with privacy defaults that are worse than yours.
> It does not load the images. That's just patently false disinfo.
It absolutely does. You have no idea how your own product works. I literally showed you a tool where you (or anyone else) can verify this yourself in a few minutes: https://www.emailprivacytester.com - By the way, I am the author of this tool, and your email product is the least privacy preserving email product on the market right now.
Here's a Youtube video I created of it happening: https://www.youtube.com/watch?v=P30Qi2MSbUQ
I'll be blogging this up unless it's acknowledged and fixed.
I assume that once you've fixed the bug you'll be contacting all of your users to let them know that they've been exposed to this privacy flaw. At least the ones that may have disabled remote content at some point.
I do not know what your difficulty is. Perhaps you should pass this on to somebody more technical than yourself at your organisation who can actually understand and diagnose the problem.
> by default, does not load external content from other servers (pictures and videos in emails). The user can choose to have external content shown with a single click or tap, if they trust the sender.
So there you go. An email company that does not load images by default. Whereas the default setting for Skiff is to load images automatically. So in this respect, Tutanota puts "privacy first" and Skiff doesn't.
Generally, how does Skiff allow the user to ensure that the message is being sent to their actual correspondent and not the Skiff server? Signal messenger for instance uses "Safety Numbers" for this purpose.
[1] https://skiff-org.github.io/whitepaper/Skiff_Whitepaper_2023...
How do you plan on scaling your service with respect to this problem? once you have a non-trivial user base with non-trivial data volumes this is likely to become a substantial problem.
Similarly you’ll have some users who are, say, content creators. They shove a 10gb video in their drive. Let’s say they have a laptop, a workstation, a phone and an iPad. Their upload is downloaded at least 3 times, costing you ~$4.50.
I upload a large document to your drive product from my workstation. I go to search on my phone. My phone needs to download the content in order to index it. My phone downloads the content from you. You pay for the bandwidth.
If I provision a new device, and it needs a new search index, it needs to download all of my content once, in order to populate the local index of the content.
If I'm something like a youtube content producer, I might put extremely large files in the drive. Per the blog post all the other devices signed into drive will see this new file and pull it down to index it.
So if I upload a 15gb video from my iphone to later process it on the workstation, my laptop, ipad and workstation will all download it. That means you need to serve up 45gb of bandwidth. Cost of operation as described in post above.
A trivial problem with a naive implementation is being able to perform presence proofs using side channel information: send someone mail containing a terms you want to verify, and watch for the associated high level costs affecting operations that are likely to be incremental index change uploads.
I noticed on your home page near the bottom under the "Getting the Latest in Privacy" subheading your list of scrollables begins to duplicate entries if you keep clicking the right arrow after the "Brave Talk X Skiff" panel. From that point on, most of the entries are twinned until you reach the end of the list.
I'm a button clicker. It's a bad habit.
Besides, I want my backup email address to be a non-gmail service to avoid complete vendor lock in.
Bye.