gpt4 book ai didi

c# - .Net 中(对称)加密的最佳实践?

转载 作者:太空狗 更新时间:2023-10-29 17:44:43 27 4
gpt4 key购买 nike

什么是加密 SQL 数据库中某些敏感或个人身份数据的“最佳实践”(根据 PCI、HIPAA 或其他适用的合规性标准)?

这里有很多关于解决方案各个方面的问题,但我还没有看到任何在高层次上讨论该方法的问题。环顾四周后,我想出了以下几点:

  • 使用 CryptoAPI 和 Rijndael
  • 生成IV并将其与加密数据一起存储
  • 使用 DPAPI(机器范围)“保护”对称 key
  • 将对称 key 存储在注册表或文件或数据库中,拆分 key 并将部分存储在多个位置以增加保护
  • 除非确实需要,否则不要解密数据,即不是从数据库中读取数据。相反,将密文保存在内存中。

这够了吗?过时了?审计安全?鲁莽?

最佳答案

你的方法很好,在我看来有一些调整(我通常为 PCI 合规性编码):

Use CryptoAPI and Rijndael

不管其他 API,至少使用 Rijndael/AES256

Generate IV and store it with the encrypted data

Use DPAPI (Machine scope) to "protect" the symmetric key

不确定这是否重要。我只是将 IV 保留在加密数据旁边,或者如果您真的对某些其他媒体很偏执。确保公众无法访问 IV。

Store the symmetric key in the registry or a file or the database, split the key and store parts in multiple places for added protection

如果有人窃取了您的媒体,存储在多个地方对您没有帮助。将 key 完全拆分有点矫枉过正,但绝对不要将其与您的 IV 和/或密文一起存储。那会很糟糕。

do not decrypt the data unless it is really needed, i.e. not upon read from the database. Instead, hold cipher text in memory.

当然。将密文妥善保存在内存中,但不要将其传递到任何地方,除非绝对必要,否则不要解密,即使这样也不要公开整个未加密的数据集——至少只公开需要的内容。此外,如果可能,不要将 key 保存在内存中 - 内存转储可能会暴露它。

添加:

  • 无论您将密文存储在哪个数据库中,都将读取访问权限完全限制在为给定标识符选择的过程中。不允许任何人(即使是 SA 帐户)读取存储此数据的表。这样,闯入您系统的人将很难在不知道要查找哪些 ID 的情况下提取您的密文。对引用密文表上标识符的任何表执行相同的操作。 不允许对这些表格进行一揽子阅读!
  • 通过 IP 限制数据库访问
  • 切勿将任何未加密的明文保存在内存中。允许在请求完成后立即取消引用/垃圾收集。
  • 将运行此代码的服务器限制为尽可能少的用户。
  • 可能结合加密方法以获得更强的密文(例如 AES + Blowfish)

希望这些帮助。其中一些是我的个人意见,但据我所知仍然符合 PCI。

关于c# - .Net 中(对称)加密的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22385229/

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