AES密钥管理建议

时间:2012-12-17 14:26:05

标签: c# aes

我需要一些关于我正在开展的学校项目的建议。我正在制作一个AES应用程序来加密某些文件中的数据。现在很多人都可以访问这些文件。

对于AES密钥,我考虑使用RFC2898DeriveBytes从密码短语中获取加密密钥。 MSDN有一些关于如何使用它的好教程。现在,我的问题是在哪里以及如何存储该密钥?

我想将密钥存储在闪存驱动器中的文件中,但是如果有很多用户,那么如何同时将密钥写入多个闪存驱动器? (计算机只能有有限数量的端口)。另外,假设我有一个新用户应该拥有某个文件的访问权限,如何将密钥写入他的闪存驱动器?

3 个答案:

答案 0 :(得分:3)

这实际上取决于您的申请目标。

  1. 如果要加密数据,以便您的应用程序的任何用户都可以访问它,那么将密钥(或者甚至更安全的数据从中导出密钥)嵌入到申请本身。

  2. 如果要基于每个用户限制访问,则需要按用户存储密钥(或从中获取密钥的数据)(以便只有授权才能使用)用户)。

  3. 有关使用嵌入式安全数据的一些提示:

    • 将数据分解为可以从应用程序中的各个位置拉出的片段。使用自定义算法来组合数据。

    • 嵌入数据来导出密钥要比嵌入密钥本身更安全。如果黑客使用二进制编辑器并在应用程序中找到完整的密钥,则解密文件会更容易。如果同一个黑客找到了从中导出密钥的数据,他仍然必须确定用于从该数据中获取密钥的算法,然后才能使用该密钥。

答案 1 :(得分:2)

您无法存储密钥;你必须告诉用户密钥是什么。如果您只是存储输出,RFC2898DeriveBytes将无用。如果您需要随机密钥,请使用种子播种的随机数生成器。

通常,您将使用从用户密码生成的密钥加密随机数据密钥。然后使用数据密钥加密数据。这样您就可以为多个用户加密文件;只需加密与用户相同的密钥(使用RFC2898DeriveBytes中的PBKDF2函数生成),就像现在一样。

确保每次用户输入密码时使用不同的盐。它还强烈建议在数据文件中添加随机IV,并使用经过身份验证的模式加密或(H)MAC。

答案 2 :(得分:0)

我个人不会将密钥存储在任何地方 - 只需要他们输入密码并按需生成密钥。