Show HN: Easy Email Encryption inside Gmail (Alpha, Open-Source)
streak.com
streak.com
We think the user experience is pretty great - works inside gmail, users need to know nothing about security or keys and you can send to any other gmail user (you don't have to worry if they have the correct software installed).
With any attempt at security and encryption, you usually trade off ease of use with how secure it is. We decided to use symmetric encryption because it made the user experience better. The only downside of course is that the security is only as good as the password the user chooses to encrypt the message with.
- we're using the Stanford javascript crypto library here: http://crypto.stanford.edu/sjcl/
- we open sourced our extension here: https://github.com/StreakYC/StreakSecureGmail
There have been a few other attempts at this, but they usually require users to understand how encryption works and require that all the users you send emails to have signed up for something (or have a public key somewhere). We think our attempt is ridiculously easy to use.This is a super early experiment/alpha/whatever so we see this as a starting point. Would love to get feedback!
Would it be a good idea to link this with a service like https://onetimesecret.com/ for transferring passwords?
It feels a bit like this is a step backwards in many ways. Being a non-webmail user, how can I benefit from this? If this were an implementation of SMIME/GPG it would be more widely adoptable since anyone with a compatible GMail plugin, desktop, or mobile client could use this.
Edit: Good read about JS encryption and its downsides: http://www.matasano.com/articles/javascript-cryptography/
It's right there under "Open Source"
EDIT: Audit results: It just uses the SJCL, looks good to me.
Instead we wanted to build a starting point that was A) easy to use, and B) easy to extend.
Our initial plan was to use a GPG solution, but that introduced a lot of complexity to the UX and also had other security holes. But the main thing is that if something is too complicated, it's not going to be used by the broader masses - kind of like GPG right now.
With this solution only the sender has to have the extension installed to send an encrypted email.
Is there any way of getting it compatible with the Syncdocs program which does local machine encryption of Google Drive files? It looks like Syncdocs does AES256
Symmetric crypto (like this) is relatively easy to implement, but a usability nightmare.
A browser extension is still a lot better than a general webapp for security.
I wish someone issued "mail-from" auth personal certs for ~free to end users, integrated into apps for cert request/signing/etc. StartCom's StartSSL sort of does (for "level 1" personal certs), but their cert issuance UI is a huge pain. It really needs to work with the "I have no cert, I'm going to use an app for a specific purpose, I get a cert incidental to signing up for the service, I then can use the cert for other purposes", which none of the x509 crowd really support.
WoT on the certs would be cool too (which startcom is trying, but since it's a pain to use, there aren't enough people, so it doesn't work.)
@rdl who is your go-to CA?
- [1] http://www.comodo.com/home/email-security/free-email-certifi...
Try to get an an average user to do a key exchange, backup their private key or even know what a key is as some other solutions require.....
Update: I wrote my question hastily; originally this read "private keys" instead of "secret keys."
This method is the best tradeoff with cloud encryption IMO - convenience of having the key file accessible anywhere, even if it is not as secure as copying it yourself to all your devices. Also, much much better than using symmetric keys.
(Is 150 messages/month really limiting for average users? I don't think I've sent anywhere near that much personal mail this month, but I may be an anomaly.)
EDIT: I forgot to mention that whichever way we end up doing it, the personal plan will be free for anyone who signs up for the mailing list before August 1.
I'm all for a world where people start using encryption as a matter of course, so I really the OP's product works out. It'll finally get rid of that "you must have something to hide" mentality, when all you really want to do is protect yourself from the odd security vulnerability or a grumpy sys admin with an axe to grind!
* third-party administrators being able to create/update/etc. accounts (either consultants for small companies, or IT staff for larger companies) -- this is the #1 way to differentiate a consumer service from a business service.
* document retention policy (which is really document destruction capability
* escrow (corp escrow keys)
* escrow for in-line checking of messages (either DLP, or AV, or archiving for compliance with SEC or other regulators)
* certifications of compliance
* support
* maybe custom domain names and other trickery (including stuff like splitting domain names to both work with existing exchange servers or google apps plus your service
* service level agreements, indemnity, etc.
* integration into stuff like Active Directory (LDAP) for account provisioning and credentials
* Maybe 2FA (although I'd argue 2FA should be a base feature, but for mail it isn't very meaningful except if you do cert auth or cookie/ip blessing of systems + stored imap or web browser password to log in + your passphrase stuff for the crypto, and then a non-cert 2FA thing is only meaningful to management
I don't think you need to worry about marginal 5-10 user businesses using the free service instead of a paid service; I'd focus on making sure you can make real money on 100-500+ user businesses, or small businesses which will grow into those, and then on getting as many free users as possible to try to drive conversions. I'd rather sell 10 companies with 500 users each than 50 companies with 5 users each.
You can generate your keys in the browser, or paste in an existing key. The key is then stored in HTML localStorage in the browser. If you ever clear your localStorage, you have to paste it in again. But this way, the key never goes near the server.
Your method is suitable for most people who can't be bothered backing up their keys. Choice would be a good thing though.
I agree that choice is great, and we might expose manual key management in Parley at some point, but realistically people who know how to do that (and have the desire to) already have many options.
> now THAT is the way to do it!
Um, no. No, it absolutely is not.
See also: Hushmail.
This would also eliminate the need for the additional passphrase, as the point-to-point key trasfer could by programatically encrypted / decrypted without user intervention.
Perhaps for example using a one-time shared secret either displayed on one device and entered in the other, or entered by the user on both devices as a temporary pass-phrase. This could then form part of a D-H style key exchange, or even be the encryption passphrase as in your proposed model, but only used temporarily while the private key is transferred, so not having to be remembered by the user for a centrally stored copy of the private key.
I appreciate you're probably well down the track on your current model, but it would be really nice to see something like this developed, and ultimately standardised, as like you mention in your manifesto, private key management (and especially transfer and backup) is one of the larger usability barriers to wider adoption of public-key cryptography.
S/MIME seems to have the same problem as SSL, which is that to be really usable you have to trust a big company to provide you with encryption, and that company can be hacked, coerced, etc. But whereas SSL traffic is typically transitory in nature which makes it tougher to meaningfully capture and store, your emails are not transitory and can be accessed much more easily.
You don’t go and buy an SSL certificate from a CA. You pay for them to /sign/ your public key, presumably after verifying your identity. You generate the public/private key pair, and then you keep the private key private.
The CA could in theory sign Eve's private key along with metadata saying that private key belongs to you, but that just gives someone the ability to impersonate you. It doesn’t give Eve the ability to read emails that Bob sent to you with a key wrapped with your public key.
- [1] https://secure.comodo.com/products/frontpage?area=SecureEmai...
Conversely, it's the only type of crypto the general public understands. "Enter your password." It bothers me that this is the case, but there you go.
The biggest problem OpenPGP has right now is that you need to explain what public and private keys are to someone before they even have a hope of using it.
Realistically, I bet the way this will mostly be used is that people will exchange keys through an unsecure medium (like, a non-encrypted GMail message, or if people are being clever, GTalk...), and the whole thing will feel good but be nothing that a little bit of work on Googles end couldn't undo.
Generating an easy-to-recognize image from the key fingerprint would be a lot more approachable to the casual user than trying to verify a long hexadecimal number.
I guess you're then trusting whatever 3rd party handles the image generation.... but at some point you have to trust software that you didn't write yourself.
> (Unfortunately, this is not as great as in desktop applications because it is not feasible to completely protect against code injection, malicious servers and side-channel attacks.)
The browser is not a secure environment and cannot be. You cannot guarantee security in the browser even if you control the server-side of the application, let alone when someone else does. In other words, Google can still read every bit of email you send/receive in cleartext.
The only way I see how one could make something like this work is by creating a browser plugin where the cleartext runs outside the context of the browser process (perhaps in Java?). If cleartext ever exists inside a JavaScript interface, it's game over.
I upvoted this post because we do need more discussion of security and especially usability of security. However, unfortunately, this provides no real security.
Using an editor like emacs could make this pretty streamlined, but at that point you might as well just use an IMAP client that can do GPG or S/MIME.
App engine feels like it's close to that, but it doesn't confer any special properties onto applications developed on that platform. Why can't I register a widget inside of Gmail or Google Calendar? Why can't I integrate a workflow form or something else into apps without developing a standalone application that only integrates through an API?
I'm hoping this is where they're going with Dart, creating a language that can be compiled into Javascript and share the backend connection with official Google apps. SPDY and WebSocket will enable these types of applications, as they won't need independent connections for each API request channel.
I can see how Google is cautious about this type of solution, given that it opens a huge XSS footprint, but I think it's the future of the "cloud" applications. For these platforms to become substitutes to native platforms they need to support applications that integrate as deeply as the first-party offerings.
The only thing worse than having a proprietary API to interact with your application is to have a proprietary API that can only be run from a proprietary sandbox. On the other hand, Google could make APIs publicly available so someone running on whatever platform could easily call them. This doesn't solve the security problems, but if Google can't trust external people with the API a sandbox isn't going to do a lot of good.
i.e. will this also disable any scripts that would send data to GMail while drafting is in progress, because if not I could see that as a potential hole for a future breach. Something like "while typing a draft, block all upward data triggered by this page" seems appropriate, rather than targeted draft-saving
It's also sort of ironic that this extension is trying to protect your privacy against the same company making both the browser and the email service:)
You'll see that in the secured compose when it tries to save a draft it says "Draft saving..." "Save failed".
And un-secure composes and replies don't get blocked.
How technical is your audience? It's been posed elsewhere in these comments, but one area that I'm particularly interested in is your proposal for key exchange. For example, your site warns the user to never email or IM their password: that's great advice, but I don't see any suggestion of a suitable alternative. Granted, I would consider your primary audience to be proxy: that is, the recipients of encrypted messages compelled to install your extension on their machine. Your take may be different, and of course these individuals may simply use-it-and-forget-it, but I'm sure that some of them would want to become your users as well. In those cases, the copy for this section may be confusing or thought incomplete.
What happens to my plaintext once its recipient has decrypted it? From the source, after passing the encrypted data to sjcl, it looks as though the plaintext is simply appended to the DOM in place of the encrypted message. Are we certain that Google is not performing any kind of DOM analysis? I don't know how Google behaves in this regard; what assurances do I have that my decrypted messages are still secure?
With a lack of deeper technical details regarding your implementation (understandable considering your proposed audience), should I assume that you're using the sjcl default of 128 bit AES in CCM mode? Would you consider publishing these details on your website? My apologies if I've overlooked them.
I'd like to echo IgorPartola's sentiments and upvote, however little that may be worth. Usability is crypto's silver bullet and any reasoned discussion which furthers our attention to this problem certainly has value in my opinion.
Also, how secure is AES 256 really? My understanding is that something encrypted with AES256 could be decrypted in my lifetime with a few million dollars worth of hardware and dedicated decryption workloads. It is a bit paranoid, but to me somewhat unsatisfactory that in theory someone with a large enough botnet could decrypt 'securely' encrypted data.
That and being non-standard, so basically forces users to use the same service and gmail
Like we said, this is a starting point. It's open source. As with any type of security product that has a hope of being good, try and break it and let's fix it together :)
I believe that Google does releases of the entire application at once so this method should detect when a roll-out has occured.
In a comment on encrypting gtalk, I explained how this can be done: https://news.ycombinator.com/item?id=5858375
$(document).on("change", "input.streak__password", function () { $.post(...); });
Somewhere inside ton of JavaScript code. Or some three letter agency gets a private part of certificate for mail.google.com and MITMs it all the way they want.
This chrome-only alpha software obviously is useless for me. Hopefully something more cross-platform comes along at some point.
https://www.streak.com/about https://www.streak.com/privacy http://support.streak.com/ http://blog.streak.com/ https://www.streak.com/api/