存储Windows密码

10

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

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

但总有一些例外情况。该程序可能在非域环境中运行,或在一些轮询系统不是域成员的情况下运行。在这些情况下,我们将不得不定义一个用户名和密码,安全地存储它们,然后在轮询该系统时调用该用户/密码对。因此,请记住 - 在这种情况下,编写的程序是向认证系统发送密码的用户。

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

我需要智能且安全的建议来完成这个任务。

谢谢查看!


可能是如何在Winforms应用程序中存储密码?的重复问题。 - BalusC
2个回答

6

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

0

看起来你的程序需要模拟一个不同于它已经运行的上下文的用户。虽然这似乎是一个相当自动化的过程,但如果不是这样的话,你是否可以在这个“黑羊”计算机被轮询时要求管理员输入用户名和密码呢?


Vaibhav:不会,因为轮询程序很可能在没有用户的夜间运行。轮询程序有可能轮询数百或数千个远程系统以获取所需数据;可以将其视为企业计算机清单工具。 - quux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接