C#AES算法 - 我应该在何处以及如何存储密钥和IV

时间:2012-01-31 09:42:54

标签: c# asp.net encryption key aes

我正在使用AES算法加密和解密密码 PasswordFormat为asp.net会员系统加密时。如果格式为Hashed,则会为每个密码生成唯一的salted值,并将其存储在存储密码的表中的列中。但是对于加密而言,我在下面担心是不同的

1

如果我为每个密码生成唯一的IVKey,那么我必须在某处保留它们。从安全角度来看这是正确的方法吗?

2

如果我在应用程序配置( web.config )文件中使用HardCode IVKey那么我将不得不担心上述任何一对更改时会发生什么?我该如何处理这种情况?

3

告诉我你应该做些什么的想法。我会把它们放在这里:)

1 个答案:

答案 0 :(得分:2)

数目:

  1. 不,每个密码不需要一个唯一的密钥 - 并且它不会有用,因为你的密钥必须存储在某个地方。您也可以将密码存储在该安全系统中。

  2. 您不应将密钥存储在与密码相同的访问条件的同一系统中。这会使加密存储变得徒劳无功。您应该将密钥放在其他位置以防止滥用,并在该系统中执行加密。

  3. 最好选择PBKDF2等功能并存储结果。密钥管理是一件非常棘手的事情,如果没有一个关于如何进行的好主意,就不应该选择(如果你这样做就聘请专业人士)。

    最后,IV的整体思想是,当使用相同的键时,它会保护纯文本。如果每个纯文本/密文对具有密钥,则可以将IV设置为全零。但是,您可以使用单个密钥,存储在某处保存,以及随密码存储的随机IV。

    如上所述,如果您已经不知道这一点,那么您的方案是不安全的,因为还有许多其他事情需要考虑,而您可能没有。

    PS Microsoft有一些方法可以在系统中安全地存储密钥,您可能希望搜索stackoverflow。然而,我不是MS API的专家。