0

我最近在阅读 Jeff Six 的《Android 平台的应用程序安全性》,我发现了一个令我感到困惑的声明。在描述盐和散列函数的加密部分中,做了这个声明

就像 IVs [Initialization Vector] 一样,盐值应该是随机的,但它们不需要保密。

这是真的?因为我对盐和散列函数的理解是这个陈述是错误的,盐需要保护,因为如果盐被释放,可以生成一个新的彩虹表,从而不需要盐?它是否正确?或者盐真的不需要保密吗?为什么会这样?

4

1 回答 1

1

盐不必保密,因为它将是一个 64 位或 128 位的随机数,攻击者将无法使用任何没有包含该盐的彩虹表。实际上,攻击者会暴力破解每个单独的密码(因为每个密码都有自己的盐,当然——没有两个密码应该用相同的盐进行散列)。

彩虹表攻击基于为所有可能的密码输入存储预先计算的哈希值(自然地,达到一定长度)。为每个可能的 128 位复杂度的盐存储彩虹表是不可行的:一个彩虹表仅涵盖占 128 位盐的单字节密码,大约为2 80 TB(即 10 27:一千万亿万亿1TB 硬驱动器)。

于 2014-05-29T06:08:45.843 回答