Encryptr – Free, open-source password manager and e-wallet
encryptr.org
encryptr.org
I'm a bit concerned that their random number generator might produce biased output. This is usually a red flag that there are other issues in the code that haven't been examined by a crypto person.
Just a word of caution from a casual glance. For all I know the rest of the code is fine. For all I know, the rest of the code is clunky swiss cheese.
Further reading on biased RNGs, with a visual: https://stackoverflow.com/a/31374501/2224584
Also, outside the scope of Cordova apps, Node.js uses OpenSSL rather than /dev/urandom for their crypto.getRandomBytes() implementation, so I don't really trust it in that context. ;)
When you're working with cryptography, you want a uniform distribution of possible values as well as unpredictable randomness.
If you're starting with a random byte and charset.length is an even power of 2, you end up with no bias.
It's better to design functions like this to discard values outside of an acceptable range and try again until they generate a safe value (also, apply a & bit mask to reduce the number of retries). This allows you to accept any arbitrary charset size without being concerned about security.
See also:
https://github.com/paragonie/random_compat/blob/5aa6689651a5...
I'll open a PR tonight if nobody beats me to it.
max = 100
length = 85
num = rand(max)
puts (num * length)/max
Here's an example from Wikipedia (https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#M...)
"For example, assume that your random number source gives numbers from 0 to 99 (as was the case for Fisher and Yates' original tables), and that you wish to obtain an unbiased random number from 0 to 15. If you simply divide the numbers by 16 and take the remainder, you'll find that the numbers 0–3 occur about 17% more often than others. This is because 16 does not evenly divide 100: the largest multiple of 16 less than or equal to 100 is 6×16 = 96, and it is the numbers in the incomplete range 96–99 that cause the bias. The simplest way to fix the problem is to discard those numbers before taking the remainder and to keep trying again until a number in the suitable range comes up. While in principle this could, in the worst case, take forever, the expected number of retries will always be less than one."
From http://stackoverflow.com/questions/16829183/what-is-pseudo-r...
Just to be clear to everyone on the thread: it's very unlikely that there's anything practical an attacker can do with the modulus bias in a situation like this.
Correct. This was just the first thing I saw in a cursory glance through their app.js file.
I haven't reviewed Crypton.io and can't say whether I like it or not. What don't you like about it in particular?
Just curious - is this to do with using javascript crypto[0]? or something that goes beyond that?
[0] https://www.nccgroup.trust/us/about-us/newsroom-and-events/b...
Crypton itself has been audited a couple times by crypto persons, see https://crypton.io/docs/security/audits.html
(disclaimer: i used to work at spideroak, but neither on crypton nor encryptr. i still think they're all awesome though)
1. Readable typography.
2. Clean and simple flows.
3. Dedicated forms for credit cards, passwords, and notes.
UX shortcomings -
1. No way to tweak the password generator algorithm. This matters because different contexts need different things. EG mobile passwords should avoid special chars and be longer to tradeoff.
2. No way to search. In any reasonably long lived password file you will be unable to scroll through quickly enough.
3. No importer(s) for legacy password manager files.
http://monosnap.com/image/npl8jAtBNPAHUJAws8x4p3s3iAw36S#
I already have it (as I am a contributor). Its just getting better
Side question: does it support sharing of secured notes and credentials? even to non-encryptr users?
This was my first question too. I checked the android app, and there was no obvious configuration option for a different server.
It's open source, so at least in theory it's possible to modify it to your needs.
Also side note: Was a little disappointed to not see this on f-droid's marketplace since it is open source and hosted on github. Need to get that changed. :-)
On the Encryptr app side, src/app.js uses window.crypton.host and _.port to specify the crypton endopint to connect to. I think the app store build of encryptr uses a crypton endopint at devgeeks.org.
You could just use (apache) cordova to roll your own build of the android app with app.js set to point to your preferred self-hosted endpoint.
YMMV.
Note: this is definitely a product at the MVP stage. The platform is capable of implementing data sharing, but that is not currently used by the Encryptr application.
On one hand they claim to be in league with SpiderOak (how, I'm not sure), which surfaced after the Snowden leaks as a zero-knowledge encrypted alternative to Dropbox/Google Drive.
On the other hand, it's a cloud-based solution which to me is still a cause for caution, and I'd feel more reassured if someone (who knows JavaScript and security better than I do) conducted an audit of this.
Hoping for the best for Encryptr, but I'll have to keep it on the sidelines until it's more battle-tested.
I can extend an offer to them on behalf of Paragon Initiative Enterprises and, if it's accepted, post our findings on HN at a later date.
Some other notes: SpiderOak didn't surface after the Snowden leaks. It was around at the same time that dropbox started. However, the Snowden leaks did prompt a lot more interest in zero-knowledge cloud services, so if you mean "surface" as in "became more popular with the public" you're right on those lines.
Also, while I'm not sure if Encryptr has been audited or not, the Crypton project itself has been at least a couple of times. See https://crypton.io/docs/security/audits.html
It's all UNIX based and takes advantage of GPG and Git for encryption and versioning, respectively. Super lightweight, and there are various front-ends for it, including an Android app.
It's not a cloud-based solution by default, but it wouldn't be hard to set it up to git push to a central location on each update and to pull from that location down to all your end-points.
The best part is that the program itself is a ~500 line shell script: https://github.com/zx2c4/password-store/blob/master/src/pass...
EDIT: After more digging, it looks like it does not, but may in the future. https://github.com/devgeeks/Encryptr/issues/123
Second, a nitpick - the OS on Mac computers is called "OS X" since the time of OS X 10.7 Lion and not "Mac OS X". Please fix that. The name "Mac OS X" was used only for older releases up to Mac OS X 10.6 Snow Leopard. :)
The integration flow for consumer websites is also very simple: 1 tiny JS lib and 10-20 lines of code on the server side to verify 2 signatures against public keys of the user.
Out of box fixes passwords reuse, phishing, bruteforce, 2factorization, enforceable, open and free etc
After Heartbleed many certificates had to be revoked, and one person who did not want to pay the revocation fee had the idea of publishing his private key so that the certificate was compromised without doubt. StartCom refused to revoke it, and the page that explained the story has since disappeared mysteriously. The HN thread about it is here: https://news.ycombinator.com/item?id=7577290
The issue is that because Crypton does crypto with JavaScript in the web view of a Cordova app, it needs to not be stupendously slow. The default iOS web view available for Cordova apps, up until iOS 8, was the UIWebView which is well known for not having access to a JIT (like Nitro in mobile Safari). This means that JavaScript crypto (particularly done the way SJCL does it) is VERY slow. We're talking almost two minutes just to log in. :/
However, even though iOS 8 now provides a web view with a JIT (WKWebView), it has been slightly crippled by Apple. The WKWebView disallows loading local files except from the app's tmp folder. This has meant some work for the Cordova iOS team to get the WKWebView working. It is finally at a stage where it can be used, but some of the changes Cordova had to make to get it working, plus some differences in WKWebView's API, mean some changes had to be made to both Crypton and Encryptr to get it all to work.
It's working now. However, since I will still have to dance through a few more hoops of fire (Apple submission and other pain), I am planning on pushing out a new version for the existing platforms first. Then I should be able to do what needs to be done to get the iOS version out.
If you need a beta tester please mail me (martindk at mailbox.org)
Now, if they're doing the crypto all local and syncing between devices with a miniature version of SpiderOak that would be OK. This is basically what 1Password does -- local crypto and stored on Dropbox or iCloud. That's not worrying at all as long as the crypto -- completely managed locally -- is strong.
But if they're using, say, SSL and an API with your credentials to access the encrypted cloud storage and they have the key... this is bad.
I encourage more apps and services to adopt this model. Just, be careful when you do. Definitely open source your code, and definitely get it audited by a qualified team (e.g. NCC Group's crypto services).