【问题标题】:Storing Windows passwords存储 Windows 密码
【发布时间】:2010-09-08 00:24:04
【问题描述】:

我正在编写(使用 .NET 3.5 的 C# 语言)一个管理应用程序,它将轮询多个 Windows 系统以获取各种数据。在许多情况下,它会使用 WMI,但在某些情况下,它可能需要读取远程注册表或在轮询系统上远程执行某些命令或脚本。此轮询将以重复的时间间隔发生 - 通常是每晚,但可以配置为更多(或更少)频繁发生。因此,民意调查可以每 10 分钟一次,也可以每月一次。它需要以自动化的方式发生,无需任何人工干预。

这些功能需要对轮询系统具有管理员级别的访问权限。现在,我希望在大多数用例中,会有一个域,并且轮询应用程序可以作为具有域管理员(或同等)权限的服务运行,这意味着我不必担心存储密码 - 管理员设置应用程序将通过标准 Windows 机制定义服务的用户名/密码。

但总会有一些害群之马。该程序可以在非域环境中运行,或者在某些轮询系统不是域成员的情况下运行。在这些情况下,我们必须定义用户名和密码,安全地存储它们,然后在我们轮询该系统时调用这个用户/通行证对。所以请记住——在这种情况下,正在编写的程序是用户,他向身份验证系统发送密码。

我不确定是否需要使用可逆哈希,然后在使用时将其解密为纯文本,或者是否有一些 Windows 机制允许我存储然后仅重用哈希。显然第二种机制更可取;我希望我的程序从不知道密码的明文值,或者在尽可能短的时间内知道它。

我需要有关实现此目的的智能安全方法的建议。

感谢收看!

【问题讨论】:

标签: c# .net windows security passwords


【解决方案1】:

【讨论】:

  • 1800 INFORMATION 建议使用 C++ 中的 DPAPI 的 CryptProtectData。看起来这个 .NET 表达式是 ProtectedData 命名空间内的 ProtectedData 类。抱歉,我之前没有提到 - 我正在用 C# 编写代码。将编辑问题以反映这一点。这可能是我的问题的解决方案,但我将让这个问题再煮几天(未回答)以生成其他可能的解决方案。
【解决方案2】:

看来您的程序需要模拟一个用户,而不是它已经运行的上下文。虽然,它看起来确实是一个非常自动化的过程,但如果不是,您可以不要求管理员在轮询这台“黑羊”计算机时输入用户名和密码吗?

【讨论】:

  • Vaibhav:不,因为轮询程序很可能在没有用户的晚上运行。轮询程序可能会轮询数百或数千个远程系统以获取它所寻找的数据;将其视为企业计算机库存工具。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
相关资源
最近更新 更多