gpt4 book ai didi

c# - 通过社会安全号码安全地存储和搜索

转载 作者:可可西里 更新时间:2023-11-01 09:14:23 26 4
gpt4 key购买 nike

所以我正在开发一个基于 Web 的补充系统,人力资源部门需要它来存储和搜索前员工的记录。我反对这个要求,但最后被告知系统必须同时启用通过完整 SSN 的搜索和完整 SSN 的检索。撇开我的抗议不谈,采取一些措施来保护这些数据实际上将比他们现在正在做的事情有很大的改进(你不想知道)。

我做了很多研究,我想我已经想出了一个合理的计划——但就像所有与加密/安全相关的事情一样,它非常复杂,而且很容易犯错误。我的大致计划如下:

  1. 在第一次运行应用程序时,使用 RijndaelManaged 生成一个大的随机盐和一个 128 位 AES key
  2. 将这些都写成明文文件以备紧急恢复。该文件将离线存储在安全的物理位置。该应用程序将检查文件是否存在,如果文件仍然存在,则会发出警告。
  3. 将盐和 key 安全地存储在某处。这是我没有很好答案的部分。我正计划使用 DPAPI——但我不知道它到底有多安全。将其保留为明文形式并限制文件系统对其存储目录的访问会更好吗?
  4. 将记录写入数据库时​​,将 SSN 与上面的大 salt 值进行散列以生成一个可搜索的字段(但如果不获取 salt 和暴力破解所有可能的 SSN 则不可恢复),并且 AES 加密原始 SSN带有新 IV 的值(存储在旁边)以生成可检索(使用 key /iv)但不可搜索的字段(因为两次加密相同的 SSN 会产生不同的输出)。
  5. 搜索时,只需用相同的盐对搜索值进行哈希处理,然后在数据库中查找
  6. 检索时,使用 AES key /iv 从数据库中解密值

除了需要一种以相对安全的方式(上面的第 3 条)存储 key 的方法之外,它似乎足够可靠。

对我们不起作用的事情:

  • “不要做任何这些”不是一个选项。这需要完成,如果我们不这样做,他们会 a) 生我们的气,b) 只需通过电子邮件在纯文本文档中传递所有数字。

这将仅在我们的网络内部,因此我们至少在此处实现的任何内容之上都有该保护层。对应用程序本身的访问将由事件目录控制。

感谢您的阅读和任何建议。

更新 #1:我从评论中意识到,为 SSN 检索字段保留私有(private) IV 是没有意义的。我更新了计划,以便为每条记录正确生成一个新的 IV,并将其与加密值一起存储。

更新 #2:我正在从我们不能做的事情列表中删除硬件内容。我做了一些研究,似乎这些东西比我想象的更容易获得。使用其中一种 USB 安全 token 是否会为 key 存储增加有意义的安全性?

最佳答案

我最近不得不解决一个类似的问题,并决定使用 HMAC 进行哈希处理。这将提供比简单散列更多的安全性,尤其是当您不能对值进行加盐时(否则将无法搜索)。

然后如您所说,使用带有随机盐的 AES 进行可逆加密。

也许您不需要加密这些数据,但我别无选择,这似乎是一个合理的解决方案。

我关于 IT 安全的问题 https://security.stackexchange.com/questions/39017/least-insecure-way-to-encrypt-a-field-in-the-database-so-that-it-can-still-be-in

关于c# - 通过社会安全号码安全地存储和搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17732933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com