我将生成 api 密钥。我计划存储他们的哈希而不是纯文本。我还需要盐吗,类似于存储密码?
AFAIK salt 可以防止彩虹表攻击,这些是更复杂的字典攻击方式,所以我想 salt 不是必需的,但我想确认一下
我将生成 api 密钥。我计划存储他们的哈希而不是纯文本。我还需要盐吗,类似于存储密码?
AFAIK salt 可以防止彩虹表攻击,这些是更复杂的字典攻击方式,所以我想 salt 不是必需的,但我想确认一下
不需要。您不需要向 API 密钥的哈希添加盐。
API 密钥应该是从高熵随机源创建的,能够抵抗试图根据过去的密钥猜测未来密钥的攻击。
大多数密码都是从非常低的熵源创建的:用户。此外,大多数密码也将被重复使用,因此为最常见的密码预先计算哈希值是有价值的。
最大的容易获得的蛮力彩虹表是 MD5,字母数字,最多 9 个字符长的表,假设这意味着阿拉伯数字和大写和小写的美英字母,没有重音符号,那么我们有 58^9 种可能性。对于任何散列算法,我不希望看到超过 10 个字符的彩虹表,只要您的 API 密钥超过 60 位(58^10 ~= 430 万亿,小于 (2^61)-1 ~= 576 万亿),你可能不会受到彩虹桌的伤害。
不过,请确保使用 128 位。这样一来,即使试图建造这样一张桌子的人拥有一台行星大小的计算机,在宇宙热死之前你都不会受到彩虹桌的伤害。
但是,如果您愿意,您仍然可以添加盐,或者如果您的经理对安全性了解不完整,他认为盐必须始终与哈希一起使用。只要确保密钥本身仍然很长并且是从高熵源创建的。