2

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

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

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

4

3 回答 3

3

这实际上取决于您的应用程序的目标。

  1. 如果目的是对数据进行加密,以便您的应用程序的任何用户都可以访问它,那么将密钥(或者,甚至更安全的用于派生密钥的数据)嵌入应用程序本身更为合适。

  2. 如果要在每个用户的基础上限制访问,那么密钥(或从中派生密钥的数据)将需要在每个用户的基础上存储(以便它只对授权用户可用)。

关于使用嵌入式安全数据的几个提示:

  • 将数据分解成可以从应用程序的不同位置提取的片段。使用自定义算法来组装数据。

  • 嵌入从中派生密钥的数据比嵌入密钥本身要安全得多。如果黑客使用二进制编辑器并在应用程序中发现您的密钥完好无损,则解密文件会容易得多。如果同一位黑客找到了从中派生密钥的数据,他仍然必须确定您用来从该数据中派生密钥的算法,然后才能使用它。

于 2012-12-17T15:21:15.807 回答
2

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

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

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

于 2012-12-17T23:39:49.727 回答
0

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

于 2012-12-17T14:29:28.520 回答