SpiderOak Encryptr – Zero-Knowledge Password Syncing
github.com
github.com
Requirements:
Node and npm - http://nodejs.org/
Node package manager for the Cordova CLI and Grunt
Cordova CLI - https://github.com/apache/cordova-cli/
Cordova / PhoneGap command line interface
npm install -g cordova
Grunt - http://gruntjs.com/
Build tool for minimising, running and tests
npm install -g grunt-cli
PhantomJS - http://phantomjs.org/
Headless webkit for running tests
Cordova-icon and Cordova-splash - https://github.com/AlexDisler/cordova-icon/ and https://github.com/AlexDisler/cordova-splash/
npm install -g cordova-icon and npm install cordova-splash
Nope. Nope nope nope.I don't doubt that some people will be more effective at using Cordova. The problem is people treat this decision as if it is independent of the people who will build the solution. Somebody with years of training doing JavaScript and practically no experience with writing native code will likely be much faster with Cordova. That is why these projects exist in the first place. There are so many JavaScript developers out there. For them even a crappy setup like Cordova will still be faster than native development.
But in reverse if you actually got good experience with native platforms and know the tools, Cordova is not going to deliver. You wont have access to the kind of debugging tools, editors, type checking, GUI builders, documentation etc you get on a native platform, which makes a native developer work efficiently.
For a security software? It may not be too bloated for a web app, but for a piece of security software it is absolutely bloated.
Note: I'm not talking from a utility point-of-view, that "C'mon, writing a security-related app doesn't have to use so much stuff".
I'm talking from a safety point-of-view, that "Security stuff should absolutely not have such a large code footprint".
Just say no.
If you don't actually want to test the software, and just want to create a production mobile/desktop application, then it depends on codova, cordova-icon, cordova-splash, semver and it's own source code. That's not a long list. If you want to test it, then it's probably not a shock that it pulls in testing frameworks for testing javascript UIs.
including something from an apparently-non-standard source
Here are the listed requirements from above:
npm install -g cordova
npm install -g grunt-cli
npm install -g cordova-icon and npm install cordova-splash
Can you point out which of these is 'apparently-non-standard'?
It's not the list of top-level pieces of software, it's the amount of code that could have contact with the plaintext or the encryption keys.
> If you don't actually want to test
And build! Don't forget the building itself. It's not so much harder to exploit an app even if all you have access to is its build stage.
----
This is security software we are talking about. The more lines of code that touch it, the more risky it is of being vulnerable. Not to mention the sheer astronomical difficulty of auditing it. From what I know of the industry, I wouldn't be surprised if a security auditor plain refused to touch this because of the sheer magnitude.
And that's without even mentioning it uses npm.
https://www.passwordstore.org/
For syncing, either use git, or something like syncthing. It doesn't really matter, because all synced files are encrypted by GnuPG before any syncing tools gets access to it.
npm doesn't provide even that much guarantee.
Especially with zkSNARKs and practical applications like Zcash, all I can think this will accomplish is confusing people.
Can anyone suggest a better term? Some people like "end-to-end encrypted" even in this context, but that doesn't really make sense for data at rest, which is almost all of what SpiderOak's products deal with.
Edit: SpiderOak has had a super-hard time marketing their privacy features to people who aren't already familiar with the fairly stark distinctions in play in different access models. I'm sure they would appreciate if someone came up with a straightforward way to explain "products where the service provider doesn't have access to your data, and can't get access without your help in any circumstances because of technical constraints".
But I think "end-to-end encrypted" is fine and has caught on with the public to some extent.
And then I realized that the "zero-knowledge" thing is just a buzzword and has nothing to do with the implementation. Ah well.
If the cloud-storage gets hacked, the hackers know I'm on my 5th password at gmail.com. Good luck with that info, lol. Otherwise, all my devices are sync'd with regards to password-count.
In any case, I'm having fun reading about some of the projects used to build this, including Crypton. Will this work with any Crypton server, or is it somehow tied to SpiderOak?
Edit: "I am happy to announce that SpiderOak has acquired Encryptr" (blogs.devgeeks.org).
Assume I have synchronized the encrypted files myself.
Latest commit 5fdc936 on Dec 18, 2015
Is this still an active project? 4 months is a long time to pass without a commit published.For example, this was never merged: https://github.com/SpiderOak/Encryptr/pull/180
I eventually closed it because I keep an eye on https://github.com/pulls and it was unnecessary clutter.
The "flaw" in the pull request was fixed in a later commit (by switching to Uint8Array instead of Uint32Array), and then it was ignored by the SpiderOak team.
Selecting one of 84 characters by using modulus on a 32 bit random number gives you 6.3923174227787602889 bits of entropy.
It is a bug, but it is absolutely a non-problem. The difference you would get from using 83 or 85 characters is many orders of magnitude larger; this is not something that needs such an enormous level of precision.
Edit: submitted another patch https://github.com/SpiderOak/Encryptr/pull/263
By the way: I recognized your nick from various repos you've authored/contributed to. Always really solid stuff!
Edit: The question in my mind is whether it was oversight or intentional simplicity. The first is a bad sign, the second isn't a big deal.
https://github.com/SpiderOak/Encryptr/issues/49
That being said, I do agree with your analysis that the impact of this isn't a problem for users.
They didn't simply not accept it.
They tossed one bit of feedback my way, which I addressed in a follow-up commit, and then they neglected to do anything further. No discussion, no rejection, etc.
If they wanted to reject it because of complexity concerns, I would have been fine with that. At least it would have been some sort of closure, and I wouldn't feel like the person I replied to originally about this project being inactive. If it turns out that they're actually still planning to develop it further, I'm happy to be proven wrong about that.
Today, 'dchest wrote a superseding PR that solves the problem while maintaining a very small code diff, and I'd prefer his solution over my own. (I have no ego about my JavaScript coding skills. There are tens of millions of people who can do it better than me.)
I think there were some questions about your patch that you did not answer, and reviewers moved to other projects. Honestly we felt overall the patch was low quality. Certainly the serious error in the first version of the patch which dramatically added bios didn't help. In general we had already completed auditing the selection approach taken by the existing password generation code and did not want to consider a different approach for little benefit.
We should have given you better feedback. Sorry.
Plus, it's security software.
It's also an iOS/Chrome webapp so it will act like a native app in some ways.
It's also a single JavaScript file which isn't too heavy. The sync'ing is done by a simple process that reads what another client writes implemented as a CGI talking over a FIFO.