.net 在应用程序中安全存储密码的任何方法

.net 在应用程序中安全存储密码的任何方法,.net,security,password-storage,.net,Security,Password Storage,我很有信心,答案是否定的,但我想涵盖我所有的基础 在.net环境中,是否有一种方法可以编写应用程序,而不是web应用程序或服务,而是一种应用程序,使其能够访问服务,而最终用户无法直接访问同一服务 或者,更具体地说,是否有任何方法可以将密码、某种形式的凭据存储在应用程序或应用程序和文件(用户也可以访问这两个文件)中,我可以自信地声明,用户无法使用这些方法提取凭据并获得对该服务的访问权 我知道我可能会使这变得非常困难,但我的印象是,鉴于这种情况和设置,我不能使检索这些凭据和密码或多或少是不可能的。有

我很有信心,答案是否定的,但我想涵盖我所有的基础

在.net环境中,是否有一种方法可以编写应用程序,而不是web应用程序或服务,而是一种应用程序,使其能够访问服务,而最终用户无法直接访问同一服务

或者,更具体地说,是否有任何方法可以将密码、某种形式的凭据存储在应用程序或应用程序和文件(用户也可以访问这两个文件)中,我可以自信地声明,用户无法使用这些方法提取凭据并获得对该服务的访问权


我知道我可能会使这变得非常困难,但我的印象是,鉴于这种情况和设置,我不能使检索这些凭据和密码或多或少是不可能的。有什么方法可以做到这一点,我可以向感兴趣的各方保证它是安全的吗?

答案是:不,这是不可能的,因此用户无法获得您服务的密码,但您可以采取步骤,使其难以获得密码

你可以做一些简单的事情

  • 将加密的密码存储在用户的硬盘上(包括内部编译的exe和dll文件),只需以未加密的形式存储一段时间
  • 使用代码混淆器使代码更难反向工程(您需要对第一个建议隐藏解密函数)
  • 继承人是一位在这种“防御性编码”方面有经验的顾问,负责检查您的程序,使其更难进行反向工程
  • 编写一个完全由您控制的代理服务,该服务不托管在终端用户具有物理访问权限的任何设备上,该设备调用您想要保护的第三方服务。最终用户可以看到您的代理的登录名,但看不到代理背后的登录名
所有这些都需要付出努力/金钱,在设计这样的安全措施时,你必须问自己一个简单的问题“如果一个人克服了我设置的保护措施并与全世界分享,我会花多少钱?”


一旦你得到了这个答案,你就要花那么多的钱/精力来保护你的产品,因为如果你花的钱/精力超过这个数字,那么让信息泄露就更便宜了(这是关于软件开发和安全性的一个可悲的事实)

谢谢,好信息。我认为对于这个特定的项目,我们将属于“不值得额外的开发/努力”类别,但我希望涵盖我的基础。我认为最终我们将把访问此服务的权限添加到特定组的角色中,并以这种方式执行。他们有访问权限是可以接受的,但我们不想将其分发给更广泛的群体。