我是.NET的新手,并且在编程方面没有太多经验。 在以下情况下,在.NET中处理用户身份验证的标准方法是什么?
在流程A中,用户输入ID /密码
进程A通过不安全的公共频道向进程B发送ID /密码。
进程B使用收到的ID /密码
我可以在上面的模型中使用哪些标准加密算法?
用户(购买我公司软件的客户)将在其计算机(连接到互联网)本地运行软件(进程A)。 我需要验证在公司服务器上运行的进程B中的用户,以便只有注册用户才能运行该程序。
答案 0 :(得分:1)
答案 1 :(得分:0)
虽然安全性绝对不是我的强项,但您在此关注的主要问题是在步骤2中数据是通过公共渠道传输的,因为在这种情况下您需要实现PGP密钥传递方案或等效系统,以便进程B能够从进程A解密您的内容,而攻击者无法破解私钥,从而产生可解密的信息。
更优选的方法是更改此步骤,以便通过安全通道进行第2步传输,这通常通过SSL连接完成。
答案 2 :(得分:0)
您尝试实施的内容称为DRM,可能是为了阻止人们运行尚未注册的软件副本。
这是一场失败的战斗。无论你如何实现它,最终的结果是你的代码中的某个地方你会有这样的东西:
if (authenticationSucceeded) {
// Allow access to program
} else {
// Show error and quit.
}
所有人要做的就是反编译这个函数,在if语句中插入!
并重新编译它(或直接修改中间语言代码)。如果他们这样做,那么他们就会破坏你的安全。
考虑到这一点,您不妨使用一个非常简单,便宜的实施系统。只需在服务器上有明文注册密钥列表,让客户端通过HTTPS发送密钥(以防止窃听)。增加比这更多的安全性可能是不值得的,因为如上所述无论如何都会变得如此微不足道。
更新:海报在评论中说,如果没有访问远程数据库,该程序将毫无用处。在这种情况下,可以有意义,以防止未经授权使用该软件,或更确切地说 - 防止未经授权访问您的数据库。您可以使用WCF建立与服务器的安全连接,并在允许访问接口的其余部分之前要求发送您的用户名和密码哈希。如果用户名/密码不正确,服务器将禁止进一步调用您的服务。在服务器上,您可以在数据库中存储允许的用户名和密码哈希值。