asp.net - AES 加密和 key 存储?

标签 asp.net encryption

几年前,当我第一次接触 ASP.net 和 .NET Framework 时,我构建了一个非常简单的在线文件存储系统。 该系统使用 Rijndael 加密来存储服务器硬盘上加密的文件,并使用 HttpHandler 来解密并将这些文件发送到客户端。

作为我第一个使用 ASP.net 和数据库的项目,我不太了解整个事情是如何工作的(以及落入 same trap described by Jeff Atwood on this subject ),我决定将新生成的 key 和 IV 与每个文件一起存储数据库中的条目。

为了让事情更清楚一点,加密只是为了保护文件不被直接访问服务器,并且 key 不是由用户输入的密码生成的。

我的问题是,假设我不想为所有文件保留一个 key ,我应该如何存储加密 key 以获得最佳安全性?什么被认为是最佳实践? (即:在不同的服务器上,在纯文本文件上,加密)。

另外,这种加密算法中的初始化向量是用来做什么的?它在系统中应该是恒定的吗?

最佳答案

key 应该受到保护并保密,就这么简单。实现则不然。 key 管理系统被值得信赖的供应商以高价出售,因为解决问题是困难

您当然不想为每个用户使用相同的 key , key 使用的次数越多,就越“容易”破解它,或者至少会泄露一些信息。 AES 是一种分组密码,它将数据分成多个 block ,并将最后一个 block 加密的结果输入到下一个 block 中。初始化向量是算法的初始输入,因为在起点没有什么可以开始的。使用具有相同 key 的随机 IV 可以降低信息泄露的风险 - 对于加密的每条数据来说,它应该是不同的。

如何存储 key 取决于您的系统的架构。我刚刚完成了一个 KMS,其中 key 远离主系统,并且加密和解密功能通过 WCF 公开。您以纯文本形式发送并获取对 key 的引用和返回的密文 - 这样 KMS 负责系统中的所有加密。对于您的情况来说,这可能有点过分了。如果用户在您的系统中输入密码,那么您可以使用它来生成 key 对。然后,该 key 对可用于加密该用户的 key 存储 - XML、SQL 等,并用于解密用于保护数据的每个 key 。

如果不了解更多有关系统配置方式或其用途的信息,除了“必须保护 key ,不得重复使用 key 和 IV”之外,很难提出其他建议。

关于asp.net - AES 加密和 key 存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2037021/

相关文章:

java - 如何使用 keystore 中存储的自定义 key 执行 AES 加密?

python - 如何解密柱状转置密码

java - 让 BouncyCaSTLe 解密 GPG 加密的消息

java - 尝试解密基于 AES 的加密文本时出现 BadPadding 异常

asp.net - 计算 ASP.NET Web 应用程序访问次数的最简单方法?

asp.net - 在asp.net中获取Facebook Page Feed(使用graph api),收到错误 "Unsupported Browser"

asp.net - 在安装 ASP.NET 4.0 后的 IIS6.0 中,“编辑配置”按钮被禁用

javascript - 基于 javascript 提示值的 ASP.NET 按钮点击

c# - 可变 watch 突然停止工作(VS)

android - keystore 异常 : Signature/MAC verification failed when trying to decrypt