gpt4 book ai didi

c# - 存储需要重复使用的密码的最佳实践?

转载 作者:可可西里 更新时间:2023-11-01 06:49:27 29 4
gpt4 key购买 nike

我们有一个自动化平台,需要将服务帐户密码存储在数据库中。

这些密码用于各种不同的情况,但通常需要将其反转为原始纯文本形式才能发挥作用。

服务帐户都被分隔开来做非常具体的事情 - 然而,我不愿意将它们以纯文本形式留在数据库中。

当密码需要可逆时,将密码存储在数据库中的最佳方法/技术是什么?

对于具体建议,该平台正在使用 C#、.Net MVC 和 MySQL (MariaDB)。

我的近期计划是在使用保存在应用程序服务器本地 keystore 中的不可导出私钥对它们进行签名后存储它们。然后在从数据库中读取它们时反转加密方法。

如果这是我应该使用的技术,是否有我应该注意的特定方法?

感谢您提供任何帮助或信息。

[编辑以重新打开并删除“基于意见”分类。微软有针对这个确切用例的特定文档。我无法添加答案或标记为已回答,但我的解决方案如下:]

Microsoft 工程团队的建议是使用 Machine Key class and methods .

利用通过 IIS 设置和生成的机器 key 以及提供给 Protect 方法的唯一生成的“目的”字符串,我可以安全地加密和解密列,并在静止时保持安全。

在 MariaDB (MySQL) 中,您需要使用一列 tinyblob 来存储字节数组。

我不认为这是一个基于意见的答案,因为这是使用问题中指定的技术来完成的事实上的方法。

IIS Machine Key

最佳答案

通常,要代表用户与其他服务提供商一起执行事件,您会使用像 OAuth2 这样的方案。

在这种情况下,我假设这不可用或未提供。

与对密码进行哈希处理相比,加密密码的问题在于加密是一种双向函数,它可以逆转,这本身就是一个安全问题,因为任何拥有 key 的人都可以解密密码。那么问题就变成了我如何保证 key 安全

答案很简单:不要将 key 放在系统的任何位置。

使用您自己的用户密码派生出加密 key ,然后使用它来加密您存储的用于其他服务的其他密码。当你需要这些密码时,用户必须提供他们的“主”密码来授权操作

这样做的好处是,如果您的数据库遭到破坏,则无法恢复任何密码。此外,如果您的前置服务器遭到破坏,唯一的攻击途径是修改行为并等待用户尝试登录。

从更技术的角度来看,执行以下操作:

  • 当用户创建您的帐户时,从他们的密码中导出 key (PBKDF2 是一个不错的选择)。我们称它为 k1

  • 随机生成另一个对称 key ,我们称之为k2

  • 使用k2对其他服务的所有外部密码进行加密,每次都可以通过再次推导k1然后解密得到。

    <
  • 如果用户想更改他们的账户密码,只需用旧的k1解密k2,从他们的新密码中导出一个新的 key ,然后加密k2 再次使用新 key 。

您真的应该避免以可逆的形式存储用户密码。但是,如果您绝对必须,上述方法是保持相对安全的好方法。

关于c# - 存储需要重复使用的密码的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49501756/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com