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


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

1

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

2

如果我在HardCode IV和Key in application configuration(web.config)文件中那么我将不得不担心当上述任何一对发生变化时会发生什么?我该如何处理这种情况?

3

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

最佳答案 回答:

>不,每个密码不需要一个唯一的密钥 – 并且它不会有用,因为你的密钥必须存储在某个地方.您也可以将密码存储在该安全系统中.
>不应将密钥存储在与密码相同的访问条件的同一系统中.这会使加密存储变得徒劳无功.您应该将密钥放在其他位置以防止滥用,并在该系统中执行加密.

你最好选择一个像PBKDF2这样的函数并存储结果.密钥管理是一件棘手的事情,不应该在没有如何处理的情况下选择(如果你这样做就聘请专业人士).

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

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

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

点赞