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

2023-12-22

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

这里有很多关于解决方案各个方面的问题,但我还没有看到任何在高层讨论该方法的问题。 经过一段时间的观察,我得出以下结论:

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

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


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

使用 CryptoAPI 和 Rijndael

至少使用 Rijndael/AES256,无论其他 API 如何

生成IV并与加密数据一起存储

Good

使用 DPAPI(机器范围)来“保护”对称密钥

不确定这是否重要。我只是将 IV 放在加密的数据旁边,或者如果您真的对其他介质很偏执的话。确保 IV 不向公众开放。

将对称密钥存储在注册表、文件或数据库中,拆分密钥并将各个部分存储在多个位置以增强保护

如果有人窃取您的媒体,存储在多个位置对您没有帮助。将密钥全部拆分有点过大,但绝对不要将其与您的 IV 和/或密文一起存储。那就糟糕了。

除非确实需要,即不在从数据库读取时,否则不要解密数据。相反,将密文保存在内存中。

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

补充:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.Net 中(对称)加密的最佳实践? 的相关文章

  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 打印“X”个字符数与“X”字符串长度的所有可能组合(暴力破解)

    我正在尝试编写一个单词组合生成器 我的意思是打印 X 个字符数与 X 字符串长度的所有可能组合 首先 我需要说的是 我在 StackOverFlow 中看到了一个关于这个问题的问题 其中有很多单词生成器的答案来执行此操作 在不同的语言上 但
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 在 C 中使用枚举而不是 #defines 作为编译时常量是否合理?

    在 C 工作了一段时间后 我将回到 C 开发领域 我已经意识到 在不必要的时候应该避免使用宏 以便让编译器在编译时为您做更多的工作 因此 对于常量值 在 C 中我将使用静态 const 变量或 C 11 枚举类来实现良好的作用域 在 C 中
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person

随机推荐