在.NET中处理用户身份验证?

时间:2010-04-09 02:55:48

标签: c# .net authentication encryption cryptography

我是.NET的新手,并且在编程方面没有太多经验。 在以下情况下,在.NET中处理用户身份验证的标准方法是什么?

  1. 在流程A中,用户输入ID /密码

  2. 进程A通过不安全的公共频道向进程B发送ID /密码。

  3. 进程B使用收到的ID /密码

  4. 对用户进行身份验证

    我可以在上面的模型中使用哪些标准加密算法?

    用户(购买我公司软件的客户)将在其计算机(连接到互联网)本地运行软件(进程A)。 我需要验证在公司服务器上运行的进程B中的用户,以便只有注册用户才能运行该程序。

3 个答案:

答案 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建立与服务器的安全连接,并在允许访问接口的其余部分之前要求发送您的用户名和密码哈希。如果用户名/密码不正确,服务器将禁止进一步调用您的服务。在服务器上,您可以在数据库中存储允许的用户名和密码哈希值。