Manual password system

Unique passwords at each site is a good practice. Most users don't do it because it sounds too hard. "I can't remember dozens of passwords." The trick is to make unique passwords without having to remember them.

Instead of remembering and re-using the same password for many sites, you can manually generate unique passwords for each site you visit by remembering and applying some algorithm based on the domain name (and perhaps the user name, to make your algorithm more secure).

Typically this is done by remembering some specific constant "salt" part of a password (which includes mixed case letters and digits) and combining it with some function of the domain name.

A very simple example system: each password has the form u7Jx4 followed by the first 5 letters of the domain name.

Thus your password at wikipedia would be u7Jx4wikip and your password at hotmail would be u7Jx4hotma.

This example system is very easy to remember and type in practice. And you'll have a unique password at every site (except sites with the same first 5 letters in their domain names). That already gives you more security.

But this system is a bit simplistic: if a bad guy discovers your password u7Jx4wikip at wikipedia, they would probably suppose it's not mere coincidence that "wikip" are the first 5 letters of "wikipedia". They wouldn't know if u7Jx4 has some meaning or not, but they would at least try assuming it's a constant salt string. So it's smarter to do something less obvious, so that seeing a sample password doesn't immediately suggest what your system is.

There are many ways to make it less obvious. E.g. distribute the letters to more than one place in the password: someone finding u7wiJx4kip would not quite so easily notice that "wikip" is being used in it, but that's still not going to fool a smart person. Better still, transform the letters themselves in some way, e.g. by using the letters to the left on the keyboard: wikip becomes qujuo, for example, or quJuo (changing the middle letter to uppercase).

And you can insert other computed bits of info from the domain name, e.g. instead of just u7Jx4quJuo consider u7Jx4quJuo9 (where 9 = the number of letters in "wikipedia", so your hotmail password would be u7Jx4giRnl7. Now you're getting to the kind of password where the system is not so obvious to someone who discovers one of your passwords.

A system like this will make you far more secure already, compared to using the same password at every site. A bad guy who gets your password at one site and knows your user names at other sites will nonetheless not have an obvious way to guess your password at those other sites.

But what if somehow they have your password from more than one site? This could happen several ways (e.g. several sites are hacked, or someone snoops your websurfing when you log in at various non-secure sites). Someone who only knows that u7Jx4quJuo9 is your wikipedia password might be stumped, but someone who knows that u7Jx4quJuo9 is for wikipedia and that u7Jx4giRnl7 is for hotmail will notice that u7Jx4 is common salt in both and thus deduce that quJuo9 is wikipedia-specific and giRnl7 is hotmail-specific, and from there it won't be hard to crack your system.

So this kind of manual system, if it is simple enough for you to realistically use it and type your passwords in only a few seconds, is not secure against a bad guy who acquires several of your passwords.

The next level of security/paranoia is a system which protects your passwords of other sites even if the bad guy acquires several (or even many) of your passwords form some compromised sites. This means you want passwords which are not only unique, but which also look totally random. There are 2 common ways to achieve that:

Automatically generated unique passwords

Automatically stored unique passwords