Re XKCD 936: test the safety of your passphrase entirely in your browser
leebutterman.com
leebutterman.com
1. I entered "test for bob" as a test passphrase and it told me that "The word <bob> is an uncommon word." Might need a better word list.
2. More seriously, it should simply mark every password as being horribly insecure, seing as how you just typed it into an unknown web site with no reason to trust it.
Basically, it's a bad idea to start typing passphrases into an untrusted, unencrypted web page, regardless of whether it does anything bad right now.
Because sadly people here are too dumb to just 1. read your totally readable javascript source or 2. wget the code and try it out for themselves in a local sandbox (if they are really that worried about MITM). I guess it's way easier to just dash off some negative comment about something that's not even a problem in the first place.
What's to prevent, e.g., a browser extension from listening in?
Don't install stuff you don't trust.
I didn't mean to imply otherwise; merely that the author shouldn't claim that their site is 100% safe just because it's Javascript running in the browser.
That’s what this password checker does: http://www.inutile.ens.fr/estatis/password-security-checker/. (Original discussion: http://news.ycombinator.com/item?id=4075842)
It's more space efficient than a standard bloom filter, runs in constant memory on the server, and has pretty fast performance in Javascript in browsers too.
Check out the description of a Golomb-compressed sequence at http://algo2.iti.kit.edu/singler/publications/cacheefficient...
Have others tried programming a project in one language and transcribing it to another? I work with a fair number of languages, and I find myself falling into a distinctive mindset with each one. Several of the nice idioms I use in one language don't seem like they'd translate well to another. Beyond being an interesting exercise in the mindset behind both languages, are there any benefits to this? It seems like you'd have to cut features you might normally use in the source language until you've reached a union with features from the destination language. It seems like that'd be a pretty tough transition going from a typed and functional language like Haskell to JS.
(2) Replace Javascript
(3) Profit!
(Bonus: Give iffy password advice at the same time— "correct horse stapler battery" is only good if you're sure the attacker can't do a billion net-attempts per second. ... this tool tells you a random 128 bit long sequence of "a" "time" is insecure)
The idea is probably not so bad but the browser is really not the place to run these kind of experiments.
You download basically a few bloom filters for low-entropy 1-grams, 2-grams, and 3-grams, and there's some highly optimized Javascript to do probabilistic matches.
No personal offense intended, that is a genuine problem with your approach.
Once you've loaded all the 3-grams (~50MB of data), you can run entirely offline, close the page, and then go back online.
Then try your password.
Alternate solution: load the web page and then turn off your WiFi while you test it.
password => green
Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo => green
"eight six seven five three oh nine" => green
Ideally v2 gets trained on blog posts / tweets / other colloquial text sources.
"eight six…" are lyrics from a popular song (a.k.a. “Jenny”).
It's actually incredibly dumb, if the attacker knows you are using a pass phrase then a dictionary attack is about as effective as a brute force attack. And in the case of bitcoin wallets, even a pass phrase with 12 dictionary words has substantially less entropy than a random key.
You could of course use 3 instead of e and do other unusual things, but all that stuff reduces the memorability of the phrase while gaining you less than you think in terms of entropy.
If you want entropy in your passwords or phrases, and you do even if you don't realise it, then you need them to be random.
User friendly key management is the real problem in online security, something that is secure and simple enough for the average senior to understand and use could make a ton of money.
Actually, 12 random dictionary words is incredibly secure. If you choose 12 random words from a pool of 100k words, then your entropy is:
100000^12 == 10^60 =~ 2^200
In other words, 200 bits of entropy. It would take an attacker longer than the history of the history of Earth just to count to 2^200. So, even if an attacker knew that your password was 12 random english words, they're never gonna crack it using brute force.
"password" shows in green
"1234" shows in green
"hello world" shows "hello" in green and "world" in yellow
so while you're able to calculate the entropy, it missed out on the fact that some high entropic words are still bad choices.
2) It just said it's not in the dictionary. I'm admittedly not doing segmentation, so that's a deficiency.
bad: once upon a time
good: nc pn tm
(though you obviously want longer words)
In reality you are better off creating nonsense words.
However, the goal is to memorize it, or otherwise record it, in the end, so you don't want to get stuck typing in nonsense words, because then it's the same problem as Tr0ub4dor&3 .
I mean "un1corn" vs "unicorn"
Assume they already have.
Crackers do implement common patterns & substitutions.
And even if they don’t yet, your password could be cracked in 10 years to gain access to an account you never updated or data you forgot about…
Or 1Password, or whatever. But something. Please.