2012-11-15 88 views
0

确保REST API我问过与此相关的一个在这里一个问题:与哈希签名

Securely Passing UserID from ASP.Net to Javascript

但是现在我有一个更详细/具体的问题。我有这项服务,而且我的应用程序将要使用我的计划来保护它的服务,是基于某些值,随机数和密钥生成哈希。我唯一的问题是,似乎为了验证散列,我将不得不发送所有的值加上随机数,除了密钥。这是我设计中的缺陷还是这种事情是如何完成的?我搜索了一下,一直没有能够找出这是否是正确的安全的方式来做到这一点。

例如可以说我需要将值1,2和3传递给我的休息服务,所以我用户的电话号码,随机数和密钥生成一个哈希,现在为了生成哈希再次我需要通过以上所有的除钥匙(我可以根据用户的电话号码检索)。

我完全让我的服务受到攻击,正确地保护它,或者在两者之间?

编辑:由拼写和语法校正

编辑2:最后,通过使用MVC 4形式的身份验证,两个项目之间相同的cookie名称,并利用一个全局应用[授权的来到一个令人满意的解决方案]属性

回答

1

这个计划没有什么本质上的错误。如果客户端发送:

data . nonce . hash(data . nonce . shared-secret) 

然后服务器通过检查hash(data . nonce . shared-secret)由客户提供的散列相匹配验证消息,你会对阵双方篡改和重播(假设,当然安全,您使用一个合理的密码散列算法)。

在这种设计下,客户端甚至可以生成自己的随机数,前提是不存在两个客户端会产生相同的随机数的风险。

但是,窃听者仍然可以看到你发送的所有数据......所以,除非有一个非常好的理由不使用,否则我会简单地使用https(除非有其他要求我不知道,完全足够)。

+0

好吧,有道理,数据是否可以包含用户标识符并仍然安全?我正在使用HMAC256算法fyi。 – Pseudonym

+0

你必须定义“安全”。在这个方案下,服务器将能够检测到篡改和重放攻击,但它不会*是保密的(显然)。 –

+0

足够公平,在这个范围内,我们试图防止重播和中间人攻击,当用户到达应用程序的这个区域时,他们应该事先验证他们的凭据 – Pseudonym