I have written some thoughts I had regarding Cryptocat. Apparently, they were wrong. I leave this post here (to my shame) because some places link here and some people have commented here, but It’s no longer relevant.
Do we need yet another XMPP client? Is there an advantage of it being a browser plugin and not a standalone app like Jitsi, Pidgin, etc.? Maybe (if it’s something I can remotely teach my mum how to install, it already beats existing clients 🙂 ). The important issue is how this decision should affect developers of other end-user apps that require crypto.
The illusion of browser side crypto
- Browser extensions may provide a way to overcome this problem.
IMHO, Cryptocat 2, as an an app-specific browser extension (secure xmpp chat), is proof of concept for something much bigger.
Browser extention as a de-facto standard
Does this mean that every app that needs crypto should now be developed as yet-another browser extension? Hell no. We don’t want our browser to carry dozens of different implementations of the same crypto code, each with its own bugs and vulnerabilities (multiply that by the number of browsers to support, and then consider all browsers that stay unsupported). What we need is general-purpose crypto support developed once (per browser).
IMHO, instead of waiting for browser vendors to define html/js crypto primitives (so that MSIE can implement them wrong ;)), we can already start experimenting with a browser extension that:
- Does the actual work as a standalone system, no shared memory/resources with the browser, and a GUI that is distinctively “non-browser”. For example: when there’s a “sign” API call, the user should to see what he/she signs, in a separate non-browser interface (no way to let you sign a bill with an extra zero – cropped with “overflow:hidden” trickery).
- Uses a standard (i.e. constantly peer-reviewed) crypto library (openssl, bouncycastle, m2crypto, etc.).
I’m not saying that creating such a component (or even defining its functionality) is an easy task. I know that the strongest crypto library can still be embedded in a way that introduces vulnerabilities. Still, the fact that we can do this as an extension for one or two browsers (without trying to get consensus from browser vendors) makes the goal very hard to achieve instead of virtually impossible, and that’s infinitely better.
Such a project should come from (or at least be monitored by) the crypto community. The only thing an “outsider” like me can do about it is write this post.
So there 🙂