"The Salt Key is the combination of lowercase letters, uppercase letters and numbers. For SHA512
hash which is 64-bits, the recommended salt key is 64-bits."
And the salt itself appears to be private, and I assume, unique per user.
So, I'm in no position to say whether that's "good enough", but it's at least not something you're going to brute force in a few seconds.
If the database leaked, the salt would become known. A truly anonymous system should still be just as effective if the entire DB is known to an attacker.
Assuming there are on the order of 10 billion valid phone-numbers (there could be on the order of 100 billion depending on how far down the rabbit hole of international numbers you go). A GTX 1080 can do SHA512 @ ~1 billion/sec[0]. This means it will take 10 seconds (longer if you have a >11 digit number) to recover each phone number. This is fast enough that you don't need to bother hashing the phone book, you just brute force every possible number.
I would expect the napkin math to come out to years of compute to unmask someone in the face of a DB leak, not seconds or minutes.
As far as I can tell they cannot discard the salt if they want to be able to tell if you already have a 'humanID'. Without the salt, you cannot tell if the phone number already has an account without having to brute force the salt.
If they were serious about this, they should at least use scrypt or some other modern password hashing technique as salted sha512 can be computed too quickly on modern hardware.
this is an example for simplification & explanation reasons, as most of the people who see this website barely know what a bit is. we'll try to address this better, thanks for the feedback
I thought it was used to generate a unique account ID, that could be verified later given a phone number. Assuming phone numbers aren't duplicated often, that's doable.
Salt is not per user, nor is it a cryptographic secret. Salt is only used to make rainbow tables not scale across multiple databases, so each database needs its own rainbow table calculation.
"Pepper" is per user, but widely regarded as unhelpful because, again, it's not cryptographically secure if the database is hacked.
Comments
"The Salt Key is the combination of lowercase letters, uppercase letters and numbers. For SHA512 hash which is 64-bits, the recommended salt key is 64-bits."
And the salt itself appears to be private, and I assume, unique per user.
So, I'm in no position to say whether that's "good enough", but it's at least not something you're going to brute force in a few seconds.
If the database leaked, the salt would become known. A truly anonymous system should still be just as effective if the entire DB is known to an attacker.
Assuming there are on the order of 10 billion valid phone-numbers (there could be on the order of 100 billion depending on how far down the rabbit hole of international numbers you go). A GTX 1080 can do SHA512 @ ~1 billion/sec[0]. This means it will take 10 seconds (longer if you have a >11 digit number) to recover each phone number. This is fast enough that you don't need to bother hashing the phone book, you just brute force every possible number.
I would expect the napkin math to come out to years of compute to unmask someone in the face of a DB leak, not seconds or minutes.
[0]: https://gist.github.com/epixoip/a83d38f412b4737e99bbef804a27...
Why would the salt become known if it's also discarded? Do they need to re-hash the phone number a second time?
As far as I can tell they cannot discard the salt if they want to be able to tell if you already have a 'humanID'. Without the salt, you cannot tell if the phone number already has an account without having to brute force the salt.
If they were serious about this, they should at least use scrypt or some other modern password hashing technique as salted sha512 can be computed too quickly on modern hardware.
sha512 isn't 64 bits. It's 512 bits. That's why it's called sha512.
But then the example salt they give is neither 64 bits nor 64 bytes. More like 26 bytes. I don't know who is more confused. Me, or them.
this is an example for simplification & explanation reasons, as most of the people who see this website barely know what a bit is. we'll try to address this better, thanks for the feedback
How can it be unique per-user if it is used to calculate the account ID? There is a circular dependency here.
I thought it was used to generate a unique account ID, that could be verified later given a phone number. Assuming phone numbers aren't duplicated often, that's doable.
Well if you have 100K users you can still break through it in a day.
Salt is not per user, nor is it a cryptographic secret. Salt is only used to make rainbow tables not scale across multiple databases, so each database needs its own rainbow table calculation.
"Pepper" is per user, but widely regarded as unhelpful because, again, it's not cryptographically secure if the database is hacked.