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

本文关键字:存储 密钥 IV 何存储 算法 我应该 在哪里 C#AES | 更新日期: 2023-09-27 18:22:10

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

1

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

2

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

3

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

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

答案:

  1. 不,每个密码不需要唯一的密钥,而且它也没有用处,因为你的密钥必须存储在某个地方。你不妨把密码保存在那个安全系统里。

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

您最好选择PBKDF2这样的函数并存储其结果。密钥管理是一件棘手的事情,不应该在不知道如何进行的情况下进行选择(如果你这样做,请聘请专业人员)。

最后,IV的全部思想是,当使用相同的密钥时,它可以保护纯文本。如果每个明文/密文对都有一个密钥,则可以将IV设置为全零。然而,这是一个想法,你使用一个单一的密钥,存储在保存的地方,和随机IV存储的密码文本。

正如所说,如果你还不知道这一点,那么你的计划是不安全的,因为还有很多其他事情需要考虑,而你可能没有。

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