📚 node [[salting]]

Attempts to explain the need for salting passwords to an inexperienced cryptographer have been in my experience, futile. This is especially so when instead of providing a real world example, first an elaborate technical description is said, as is common online. I thought I would change this. This is how I explain salting to coworkers:

Life before salt

Let's say we have 5 users

row Username Password (Not stored!) Hash
1 bob orange 1b4c9133da73a711322404314402765ab0d23fd362a167d6f0c65bb215113d94
2 lisa dungeon 2a79be6a5deb17eb3973b3e1872623682287731df936d313f7c8b0e4a336e958
3 alex flubber 29f006c8fea00ee58303e1d660279900967e7c86c31ae51f8f7c148f32f7f8f1
4 joe pineapple b0fef621727ff82a7d334d9f1f047dc662ed0e27e05aa8fd1aefd19b0fff312c
5 sarah banana b493d48364afe44d11c0165cf470a4164d1e2609911ef998be868d46ade3de4e

Our attacker has already generated a hash table, this is his table

row Password Hash
1 lemon f464d7d71c06e47a535ce441aa202aa717cddeab902a45b0c283aac7a9a090d7
2 orange 1b4c9133da73a711322404314402765ab0d23fd362a167d6f0c65bb215113d94
3 banana b493d48364afe44d11c0165cf470a4164d1e2609911ef998be868d46ade3de4e
4 strawberry 5e737f891db1175442a39fde73e51d781a545506d71c95477a6deb5988bd7f9a
5 pineapple b0fef621727ff82a7d334d9f1f047dc662ed0e27e05aa8fd1aefd19b0fff312c

She gains access to our database. Let's assume the following:

  • Comparing two strings takes 0.1 seconds
  • Generating a hash takes 0.5 seconds

Given this, she launches an attack.

attack - userDB row 1 matches hashDB row 2 (0.2 seconds) - userDB 2 matches hashDB none (0.5 seconds) - u3 = hnone (0.5 seconds) - u4 = h5 (0.5 seconds) - u5 = h3 (0.3 seconds)

In her attack, for each user, she tries each hash until one matches. As soon as a hash works, she moves onto the next user. This means that for passwords she does not have hashes of already she spends 0.5 seconds because her hash table has 5 entries and she needs to make sure the hash is not in that table. Sometimes, she finds a mashing hash fast, say in 0.2 seconds.

All in all, her attack took 2 seconds, and she walked away with 3 accounts.

Life after salt

Let's modify our database to salt our passwords

📖 stoas
⥱ context