将电子邮件安全地保存在黑名单中

Save emails securely in blacklist

我有一些网站,我希望没有帐户的人可以选择退出接收电子邮件。这可以通过将他们的电子邮件地址存储在 "blacklist" table 中并在发送一些邮件之前查找它们来实现。

为了遵守数据保护和出于安全原因,我希望以某种方式存储电子邮件 encrypted/hashed。我想到了简单的md5(password),但是觉得太容易了crack/bruteforce。第二个想法是使用 bcrypt/scrypt 来获得一个慢散列函数,但它们对每个条目都有一些盐分,所以我需要对每个条目的邮件进行散列以进行比较。对于 O(n) 的运行时间,这会相当慢,其中 n 是黑名单条目的数量。

有没有其他方法可以安全地对邮件进行哈希处理,以便与黑名单进行快速比较?它应该是 O(1) 运行时,无论有多少条目。

您可以使用任何密钥派生函数,例如 PBKDF2 甚至 BCrypt/SCrypt。

由于哈希必须是可搜索的,因此不能使用唯一的随机盐。相反,我们可以传递一个静态盐,它充当服务器端密钥。

有了 KDF,我们可以从成本因素中获益,这大大减慢了暴力破解的速度。如果攻击者可以访问数据库,但在服务器上没有权限(密钥保密),静态 salt/key 可以防止暴力破解,这是 SQL 注入的典型场景。只要确保盐不是散列字符串的一部分,BCrypt 的大多数实现都会这样做,因为它们是为密码散列而设计的。

这种方法的问题在于,它不适用于未来更快的硬件。但即使 KDF 只需要几毫秒,这也比使用简单的哈希要好得多。也许你应该在 Information Security 上问这个问题,他们可能知道更好的选择。