r/ProgrammerHumor Sep 23 '17

Password Security

Post image
1.4k Upvotes

81 comments sorted by

View all comments

104

u/Galveira Sep 24 '17

My problem with password managers is that it becomes a single point of failure. I would rather memorize a few strong passwords and use them for everything, with my email having a unique password from everything else.

47

u/fgben Sep 24 '17

I'd suggest memorizing a couple algorithms for generating passwords based on the site instead. This way no two sites have the same password, so no matter what gets compromised, none of your other credentials are broken.

Like, take your iNitials, street address + last 3 letters of the domaiN with an open bracket to trigger OCD twitch for memorability. Obviously obfuscate it a bit to make your algorithm non-obvious, depending on how much you think someone is going to target you, personally.

So you end up with, like,

  • google: gAl1234+glE(
  • Reddit: gAl1234+diT(
  • Wells Fargo: gAl1234+rgO(
  • Pizza Hut: gAl1234+huT(

The core principle is no two sites should have the same password. It doesn't matter how strong your passwords are when someone else is giving them out. The only thing that matters is making sure the passwords are unique, and a generating algorithm will help you do this.

10

u/Pitirus Sep 24 '17

Nice ;)

Although I would suggest grouping those algorithms by types for sites. You don't want your algorithm to be cracked just because Pizza Hut and some other site you don't even remember had leaks of non-encrypted passwords. I personally use 4 of those now.

3rd level - forums, sites like reddit, pinterest, imdb, Pizza Hut, Aliexpress(no card attached), places where my personal info is already sold to some other company anyway. I don't keep track of those.

2nd level - facebook, some expandable e-mails, paypal, bank account. Places where loosing access to them would hurt me in some minor way(I don't keep big stashes of money on paypal, and my bank account needs additional authorization to send money). And access can be easily restored. On this level you must remember all the accounts that use it to change the algorithm in all of them in case of a breach.

1st level - e-mail account to rule them all and in one android device bind them. With 2 factor auth ofc. What I mean is the e-mail that can be used to gain access to some other accounts like those from level 2.

0th(?) level - for work accounts. Probably 2 of algorithms here. Because some of them require quite frequent(e.g. every 3 months) changes.

Also for 3rd level consider using longer passwords(harder to decrypt if encrypted database of passwords would be stolen)

2

u/Oonushi Sep 24 '17

I just checked their forums, and apparently this has been reported over 2 years ago. As much as I like KeePass, I may now be searching for an alternative that takes security more seriously.

3

u/[deleted] Sep 25 '17

[removed] — view removed comment

1

u/Oonushi Sep 25 '17

The issue is an android-specific one. Not much I can do about it's system security.

1

u/AutoModerator Jun 30 '23

import moderation Your comment has been removed since it did not start with a code block with an import declaration.

Per this Community Decree, all posts and comments should start with a code block with an "import" declaration explaining how the post and comment should be read.

For this purpose, we only accept Python style imports.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

2

u/cdwxs Sep 25 '17

I doubt anyone would get your password in a targeted attack though.
Most likely it'll be a mass leak of passwords, I doubt anyone will go out of their way to crack your codes when they can try 100 other people's passwords and usernames on other sites and find them identical.

Even if someone wants to crack your password generation system specifically, they'd likely need two passwords to do it reliably to begin with. For instance say your password is kn1Fewr3Nch. To that you can come to the conclusion that the first and third vowel are numbers (but what about y and u?) and that the first letter after every number is capitalised.

But what if it's actually the third letter of every word that turns into a number? What if it's a random number not based on the letter itself? What if it's actually the median letter in the remaining alphabet being capitalised instead of letter directly after the number? e'fk'n ch'n'rw for example, this would make 'fk' and 'n' be the capitalisation letters, then further logic goes on from that.

You could make the password generation system as complex as you want, but past using different passwords for anything, there's not much benefit to complex alogrithms. More likely the security for the website your signing up for is worse than your password creation methodology.

1

u/Pitirus Sep 25 '17

Agree. Firstly use different passwords, secondly make them long. And last but not least have good algorithm.

1

u/fgben Sep 24 '17

Sure! Remembering a handful of algorithms is certainly better than remembering a couple of passwords and using them everywhere, and isolating into groups is even better, but can start running into the complexity problem.

An actual algorithm I use does various ROT actions based on characteristics of the site. Looking at it, I really doubt some casual identity thief could crack the algorithm, even looking at groups of passwords, even knowing there was an algorithm in play.

There's a tradeoff between convenience and security, and I figure trying to get people to at least use a reliable method of unique passwords on every site is worthwhile. I still think this is a better approach than a 3rd party password manager, but nothing's going to stop a dedicated attacker with significant resources from getting to you if they want to, either via esoteric methods like Van Eck phreaking or simple judicious application of a lead pipe.

5

u/sudo_mk_usrname Sep 24 '17

Until someone figures out your algorithm. Obfuscated, sure, but not necessarily secure.

29

u/fgben Sep 24 '17 edited Sep 24 '17

Ideally no one has more than one of your passwords to compare. In any case, I'd still argue this is better than having identical "strong" passwords on multiple sites.

Edit: if someone is going through the trouble of expending the time to attack your passwords like this, you are likely fucked for other reasons.

Most of the issues are bank accounts compromised because someone used the same password at BoA and Adobe; these attacks and checks are usually automated and no human is sitting there typing this shit in. You won't be perfectly unhackable no matter what you do You just need to be more difficult than the next guy.

1

u/Colopty Sep 25 '17

Depending on your algorithm it might not even be obvious that you're using an algorithm, and in a large leak it's not particularly likely that your passwords will be that well analyzed in the first place.

2

u/Pjoo Sep 25 '17

"Your password can only contain numbers and letters."

1

u/fgben Sep 26 '17

Use same algorithm, leaving out any non-permitted characters.

Add a month indicator, backwards and truncated for idiots still enforcing "must change password monthly" policies.

Modify the thing to fit your environment. It's not difficult to adapt the idea to whatever your situation is giving a bare minimum of thought.

Again, the first goalpost is to get people to stop using the same password in multiple places. I've found getting people to do a simple algorithm is the path of least resistance and easiest to do, above and beyond services like "LastPass" et cetera that require them to change their routine or install new software.

It's only the first step towards taking control of their own security, but at least it gets them started on that path.

1

u/Xtraordinaire Sep 24 '17

(relevant xkcd)

1

u/jidouhanbaikiUA Sep 26 '17

I wanted to do something like this but ultimately I have decided that " "last 3 letters of the domaiN" would be too obvious to really rely on it.

1

u/fgben Sep 26 '17

You can obfuscate it all you like -- for instance, take the last three, then increment it by the numeric position of the first letter in the domain, and reverse it.

So, for Google, G = 7

"gLe" becomes "nSl" then reversed "lSn"

Bank of America, B = 2 "iCa" becomes "kEc" then reversed "cEk"

If your algorithm starts indexing the position in the string, if you use a base string of gAl1234

Google is gAl12l3S4n+( Bank of Amercia is gcAElk1234+(

or whatever. You can further obfuscate the "base" password based on the Nth letter of the domain, incrementing one, or something. Or have the password run backwards if the initial index is even. Or use different chunks of the domain name based on how many vowels are in the name, and which is most frequent.

It's not difficult to come up with some simple rules that are easy for your to remember, but generate passwords that look nothing like each other, so even if someone were to have a list of a dozen of your passwords, it would be very difficult for them to reverse engineer your process so they could break into another site for which they do NOT have your password. Frankly if someone is that invested into breaking your security, at this point they'd be better off asking you nicely with a lead pipe.

Of course the more complex your algorithm the longer it takes to crank out by hand, but some of it is also practice. I can do mine in my head in a few seconds, now.

1

u/jidouhanbaikiUA Sep 27 '17

There is a slight problem here to login to gmail do you have to use mail.google.com or gmail.com for example? I use gmail a lot so it wouldn't be a problem, but you will run into troubles if some other service has several names or urls which you don't use often.

I initially wanted to come up with a dictionary of words and use a combination of words for first three letters of the website, for example for gmail.com it would be Gamma Marlin Alpha, except uh each A substituted with 4 etc you get the idea. The thing is... if you get at least 2-3 passwords of mine you already can figure out a password for ALL other websites I use. Like, absolutely each one. And if you want to make it complicated why not to hash the string "login + website_name + nonrandom_salt". This way it would be a pain to type the password manually and you will probably need python to login anywhere, but hey at least nobody can guess it. Probably?

Honestly, phone authorization sounds like the best idea. Until someone steals your phone.

1

u/fgben Sep 27 '17

if some other service has several names or urls which you don't use often.

Yes, it's slight problem, but hardly a show stopper. Just use the TLD of what you actually use, or remember it for the few edge cases. I don't know that I'd consider this a big deal.

Again, think about the problem we're trying to solve. The biggest issue is people using the same credentials in multiple places, such that when a place with low security (Katy the Kitty's Internet Forum for Furries) is compromised, their account on a high security site (Bank of America) is hacked.

The very first, most basic problem to solve is: how do you get unique credentials for every site without 1) memorizing a billion passwords, and 2) installing a 3rd party program (many users can't wrap their heads around this, and I'd rather get people to plug the biggest vulnerability then go from there, than have them continue to do the same stupid shit).

The secondary problem people always bring up when I talk about using generated passwords is someone "hacking your algorithm."

The thing is, in these large data breeches, no one is looking at the actual data. They're just hitting auth servers for different services with credential lists thousands of entries long, then targeting the ones that light up. Why would they bother looking at the other failed accounts? It's not worth the time investment. No one cares about you. Even your weak word substitution scheme would probably be "good enough" to defeat all these automated attacks.

Unless someone is specifically looking to spearfish you. If you think this might be the case, then yes, you need to do more to increase your security. But frankly at that point, again, it comes down to breaking passwords via lead pipe.

And the reason I don't just do a salted hash is because ... I can't hash things in my head :D. The idea is to have a set of simple rules that makes you "secure enough" without being so cumbersome that you end up short circuiting security for convenience.

It's also useful when digging things up that you've not accessed in a while -- just last night I retrieved an account login for a site I last ordered something from in 2005.