c# - 如何在对称算法中管理 key

标签 c# .net cryptography

我正在我的 C# 代码中进行 AES 加密,使用的 key 是使用 PasswordDerivedKey 函数通过传递 passwordsalt 生成的> 12 字节。我已经在我的应用程序代码中实现了逻辑,“密码”是登录用户的用户名,salt 是一个静态字节数组。

存储密码和盐值的最佳方式是什么,因为有人可以轻松确定盐值(通过反射(reflect)我的代码)和一个人的用户名。

我可以采用哪些替代方法来以安全的方式存储密码和盐。我不认为将它们存储在我的应用程序代码中是最好的方法。

编辑:对于密码,我指的是 PBKDF 函数中使用的 key (用于派生加密 key ),而不是用户提供的密码。我正在使用 Windows 身份验证

最佳答案

如果密码只是 Windows 用户名的加密版本,为什么还需要存储密码?

任何时候你需要加密/解密你知道用户名因此可以动态生成 key 。

Salt 永远不应被视为安全 Assets 。无需隐藏它。您应该始终假设攻击者知道盐。 Salt 只是一种击败彩虹表和其他快速查找的机制。

有什么我没看到的吗?

编辑时 这个问题在问题中被错误地陈述了。问题不在于应该存储什么/如何存储。这个答案很简单。切勿存储任何加密数据(盐除外)。

当前的实现从登录用户的用户名创建一个加密 key 。问题是不安全,因为确定用户名相当容易。要解决这个问题,需要:

a) 接受实现对于愿意反编译应用的人来说是不安全的。

b) ...不是一个好主意...哈希可以根据组/角色更改

c) 为每个用户使用唯一的 secret 密码。

c 是唯一安全的实现,但它需要在加密或解密时提示用户输入密码。

关于c# - 如何在对称算法中管理 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4165084/

相关文章:

.net - 在生产中使用 Entity Framework (代码优先)迁移

c++ - ECDSA 未正确签名/验证

java - 服务器无法解密Android 4.2发送的消息

c# - Request.Url.IsDefaultPort 是如何确定的?

c# - 如何使用 CSS 或 CSSClass 或 C# 更改多个不同样式的 asp.net 文本框或标签或标签?

c# - C# 中循环异步任务列表

c# - ASP.NET DateTime.Now 错误的时间

c# - 使用 LINQ 在 OrderBy 中自定义排序逻辑

c# - 如何使用 razor 引擎使用图像 src 进行电子邮件模板化

Java公私钥解密问题