这种基于签名的移动设备身份验证的安全性如何

时间:2012-04-03 17:35:59

标签: wcf security rest service

我正在实施一个应用程序,我没有需要用户名和密码的系统。我需要的是姓名和电话号码。

场景是这样的:

1)用户第一次打开应用

2)app向我的服务器发出请求并获取一个唯一的UserKey

3)从现在起,应用程序对我的REST服务发出的任何请求都有签名。签名实际上是SHA(UserKey:请求Base64Encoded中提供的数据)

4)服务器还执行相同的哈希来检查签名

为什么我不使用SSH:

  • 不愿意支付证书
  • 我不需要发送密码等敏感数据,所以我看不到使用它的好处
  • 我只需要一种简单的方法从自己的应用程序调用我自己的WCF REST服务

我知道当UserKey以明文形式出现时,步骤2中存在安全流,但这只在首次打开应用时发生一次。你觉得这有多危险?

你会推荐什么?有没有可以帮助我的.NET库?

2 个答案:

答案 0 :(得分:2)

实际上,这种方法存在一些问题。假设每当你向服务器发出请求时,都会有中间人。例如,通过分析100个发送的数据包,他会在您的请求中识别出具有签名的类似模式。然后他会伪造自己的请求并添加你的签名。服务器检查哈希 - 一切都没问题,这是你和你唯一的用户密钥。但事实并非如此。

密码学中存在非对称密钥的概念,目前这种密钥非常受欢迎,并提供严格的安全服务。主要概念如下:服务器生成两个密钥 - 公共和私有;公钥用于编码文本;它们只能使用私钥进行解码,私钥由服务器保存在安全位置。因此,服务器为客户端提供公钥以对其消息进行编码。它可以是双重的:客户端生成公钥并将其提供给服务器。然后,服务器生成密钥,并使用客户端的公钥编码自己的公钥。这样,中间人几乎不可能进行攻击。

更好的是,由于问题非常普遍,您可以使用OAuth授权您网站上的用户。它是安全的,广泛使用(facebook,g +,twitter,你可以命名)并且已经有各种语言的实现。

答案 1 :(得分:1)

由于您既可以控制应用程序本身也可以控制Web服务,因此您可以使用SSL(可以解决当前方法的问题)而无需支付任何费用。您可以创建自签名证书并将其安装在您的Web服务器上;将客户端应用程序的SSL上下文配置为仅信任该证书。然后,创建一个客户端自签名证书并在您的应用程序中安装它。将服务器设置为需要经过相互身份验证的SSL,并且仅允许您使用自签名证书进行访问。

完成。您的客户端只会与您的合法服务器通信(因此没有人可以欺骗您的服务器并欺骗客户端与之通信)并且您的服务器只会与您的合法客户端通信(因此没有人可以窃取信息,ID等)。并且它都受到SSL中使用的强加密技术的保护。