我正在创建一个 C# 应用程序(使用 .NET Framework 4.6.1),它需要通过 SNMP-V3 与 SNMP 代理进行通信。
我发现自己对如何存储 SNMP 凭据的问题感到困惑。 我显然无法对它们进行哈希处理,因为当我初始化 SNMP 管理器时,它们需要作为纯文本,而且我也不想强迫用户在每次应用程序启动时输入它们,因为这种情况每天可能会发生几次.
该应用程序将部署在多台计算机上,在封闭的网络上,因此我无法访问任何云服务。
我想出了一些可以做到这一点的技术,但无法弄清楚哪种技术最适合我的用例:
对我来说,2 似乎是最稳健的方法,但我随后遇到了几个问题,因为系统中可以有很多用户,我必须为每个用户执行此操作,而且我不确定它在安全角度。
我应该面对的场景是,我在封闭网络内有攻击者,但如果他控制了运行我的应用程序的机器,那么游戏就结束了,对吗?
如果是这样的话,为什么还要费心保护密码呢?
我看到 1 和 2 之间的唯一区别是 2 假设 1 不安全地加密数据(这是一个错误的假设,DPAPI 加密很好)并且依赖于用户密码(我们不知道它是否安全) 。这就是为什么我会放弃选项 2。
现在我们来看看最大的区别,那就是 DPAPI(选项 1/2)与凭据管理器(选项 3),并查看此安全堆栈交换帖子Windows 凭据管理器的安全性如何?我会选择 DPAPI。
所以我的建议是,选择选项 1。我的理由是:
凭据管理器的一个小缺点(如果您最终选择选项 3 而不是选项 1)是它将数据存储在用户配置文件目录中,并且发生意外并且可能会被意外删除。