Hash 存储敏感信息的加密散列有多安全?

Hash 存储敏感信息的加密散列有多安全?,hash,cryptography,bcrypt,pii,Hash,Cryptography,Bcrypt,Pii,试图找到减少系统中重复联系人条目的方法。姓名、电子邮件地址、家庭地址和电话号码可以更改,因此这些不是100%唯一的标识符 但是,出生日期和SSN没有改变。我正在考虑将date\u of_birth-ssn的组合存储为加密散列,以唯一标识联系人并合并重复项 我的理解是,从数学上讲,反转散列是“不可能的”,因此以这种方式存储ssn是“安全的” 我知道最安全的方法是不储存任何东西。但是,我不确定我可以使用什么其他信息来唯一地识别一个人 是否有更好的解决方案来唯一识别那些不会使用敏感信息(如ssn)的人

试图找到减少系统中重复联系人条目的方法。姓名、电子邮件地址、家庭地址和电话号码可以更改,因此这些不是100%唯一的标识符

但是,出生日期和SSN没有改变。我正在考虑将
date\u of_birth-ssn
的组合存储为加密散列,以唯一标识联系人并合并重复项

我的理解是,从数学上讲,反转散列是“不可能的”,因此以这种方式存储
ssn
是“安全的”

我知道最安全的方法是不储存任何东西。但是,我不确定我可以使用什么其他信息来唯一地识别一个人


是否有更好的解决方案来唯一识别那些不会使用敏感信息(如
ssn
)的人?

这肯定是不安全的

一般来说,不能反转散列。如果我有大量的随机数据,并给你散列,你就无法得到这些数据。这不是你的提议

由于一年365天,每个人的年龄都在100岁以下,因此只有大约36500个可能的DOB(好吧,有些人超过100,但不是你的联系人-实际可能的DOB数量大约为20000)。SSN是9位数字,因此只有100000000个可能的值(实际上要少得多)


总共有2000000000种可能的组合。听起来像很多?不是。我使用的这台笔记本电脑每一个核心每秒可以做超过1100万次哈希运算。它可以在1707026秒或19天内测试所有可能的组合。有一个4年历史的笔记本电脑内核。一台功能强大的服务器,拥有20个内核,花费数千美元(没有专门的硬件),可以在数小时内准备好这张表。然后我可以反转的不是散列函数,而是您可能看到的输出子集。

这肯定是不安全的

一般来说,不能反转散列。如果我有大量的随机数据,并给你散列,你就无法得到这些数据。这不是你的提议

由于一年365天,每个人的年龄都在100岁以下,因此只有大约36500个可能的DOB(好吧,有些人超过100,但不是你的联系人-实际可能的DOB数量大约为20000)。SSN是9位数字,因此只有100000000个可能的值(实际上要少得多)


总共有2000000000种可能的组合。听起来像很多?不是。我使用的这台笔记本电脑每一个核心每秒可以做超过1100万次哈希运算。它可以在1707026秒或19天内测试所有可能的组合。有一个4年历史的笔记本电脑内核。一台功能强大的服务器,拥有20个内核,花费数千美元(没有专门的硬件),可以在数小时内准备好这张表。然后我可以反转的不是散列函数,而是您可能看到的输出子集。

有趣的是,SSN有一种模式可以减少可能性。前三位数字表示发布的地理区域,但我的SSS属于“未发布”类别,因此我猜@synp不存在,感谢您的详细回复。我同意你的评估,这不是一个好的解决方案,我不应该使用它。我会在实际算法中使用BCrypt,这会在加密之前为值添加一个盐,这有一点帮助,但仍然可能不会使它“需要宇宙的年龄来破解”某种安全性。我没有存储任何信息,我想我只需要检查名字/姓氏和DoB,只需处理出现名字变化的一次性异常。有趣的是,SSN有一种模式可以减少这种可能性。前三位数字表示发布的地理区域,但我的SSS属于“未发布”类别,因此我猜@synp不存在,感谢您的详细回复。我同意你的评估,这不是一个好的解决方案,我不应该使用它。我会在实际算法中使用BCrypt,这会在加密之前为值添加一个盐,这有一点帮助,但仍然可能不会使它“需要宇宙的年龄来破解”某种安全性。我没有存储任何信息,我想我只需要检查名字/姓氏和DoB,只需处理出现名字变化的一次性例外情况。