如何在 C# 应用程序中存储 SNMP-V3 凭据

问题描述 投票:0回答:1

我正在创建一个 C# 应用程序(使用 .NET Framework 4.6.1),它需要通过 SNMP-V3 与 SNMP 代理进行通信。

我发现自己对如何存储 SNMP 凭据的问题感到困惑。 我显然无法对它们进行哈希处理,因为当我初始化 SNMP 管理器时,它们需要作为纯文本,而且我也不想强迫用户在每次应用程序启动时输入它们,因为这种情况每天可能会发生几次.

该应用程序将部署在多台计算机上,在封闭的网络上,因此我无法访问任何云服务。

我想出了一些可以做到这一点的技术,但无法弄清楚哪种技术最适合我的用例:

  1. 在安装时或首次启动应用程序时提示用户输入凭据,使用 Microsoft 的 DPAPI 对其进行加密,并在 SNMP 通信需要时对其进行解密
  2. 与 1 相同,但加密使用用户密码(我有一个登录名,并且登录密码显然经过哈希处理和加盐处理)。
  3. 我在 GitHub 上找到了这个项目,它使用 Windows 凭据管理器 - 这是一个有效的选项吗?

对我来说,2 似乎是最稳健的方法,但我随后遇到了几个问题,因为系统中可以有很多用户,我必须为每个用户执行此操作,而且我不确定它在安全角度。

我应该面对的场景是,我在封闭网络内有攻击者,但如果他控制了运行我的应用程序的机器,那么游戏就结束了,对吗?

如果是这样的话,为什么还要费心保护密码呢?

c# security credentials snmp
1个回答
1
投票

我看到 1 和 2 之间的唯一区别是 2 假设 1 不安全地加密数据(这是一个错误的假设,DPAPI 加密很好)并且依赖于用户密码(我们不知道它是否安全) 。这就是为什么我会放弃选项 2。

现在我们来看看最大的区别,那就是 DPAPI(选项 1/2)与凭据管理器(选项 3),并查看此安全堆栈交换帖子Windows 凭据管理器的安全性如何?我会选择 DPAPI。

所以我的建议是,选择选项 1。我的理由是:

  • Credential Manager 似乎不如 DPAPI 安全
  • 依赖用户密码强度是有问题的,因为你不知道它是否强。

凭据管理器的一个小缺点(如果您最终选择选项 3 而不是选项 1)是它将数据存储在用户配置文件目录中,并且发生意外并且可能会被意外删除。

© www.soinside.com 2019 - 2024. All rights reserved.