存储使用数据保护 API 和 PersistKeysToFileSystem 加密的敏感数据

Storing sensitive data that is encrypted using Data Protection API with PersistKeysToFileSystem

各位, 我需要将一些字符串数据从 MVC Core 2.0 应用程序加密到 SQL 数据库中。 我正在考虑将数据保护 API 与 PersistKeysToFileSystem 一起使用,以便我可以将数据恢复到另一台服务器并使用相同的密钥文件解密数据。 Net core 中 DPAPI 的性能给我留下了深刻的印象,我不想为任何自定义加密解决方案提供帮助,因为它风险太大。我会将批量上传的数据存储到 SQL。加密前的字符串不超过 200 个字符。

我认为 DPAPI 被认为更适合加密小块数据,例如密码而不是 sql 批量操作。人们是否认为使用 DPAPI 将数据加密到数据库是一个很好的用例?

数据保护API不一定只针对小块数据,而是针对相对短暂的数据。换句话说,它并不是真的打算 encrypt/decrypt 长期使用。密钥会在某个时候循环,虽然旧密钥会保留下来以允许转换到新密钥,但您不应该真的依赖它。

根据 docs:

The ASP.NET Core data protection APIs are not primarily intended for indefinite persistence of confidential payloads. Other technologies like Windows CNG DPAPI and Azure Rights Management are more suited to the scenario of indefinite storage, and they have correspondingly strong key management capabilities.

它确实继续说,如果你愿意,你可以这样做。但是,如果您可能正在使用已撤销的密钥,则必须以不同的方式处理事情。上面的文档 link 对此进行了详细介绍。但是,请记住,您本质上是以一种不太安全的方式对数据进行操作,因为您明确允许使用已撤销的密钥来解密数据。