不使用HTTPS应用程序身份验证/访问控制

Ast*_*ton 5 security authentication hash cryptography

在我正在进行的当前项目中,我们遇到了以下问题.

我们的软件是基于位置的服务平台,应用程序可以通过使用SOAP的公开Web服务连接和使用我们的服务.到目前为止,我们的平台仅供内部应用程序使用,但现在我们想为第三方应用程序打开它.为此,我们需要一种身份验证机制.

由于我们客户的基础架构和负载平衡解决方案,我们无法使用HTTPS.最初的想法是应用程序可以只使用HTTPS并发送我们验证的密码.

解决方案将是下一个:应用程序具有密码.应用程序生成随机字符串(salt)并创建哈希.然后,应用程序创建一个HTTP请求,发送散列,salt和时间戳.这三个对我们来说足以进行身份​​验证,因为我们可以生成相同的哈希并进行比较.

我的问题是,为此我们需要以明文形式将密码存储在我们的数据库中,因为我们需要使用给定的salt执行相同的过程,以便我们可以比较结果并验证应用程序.以明文形式存储密码是不可接受的.

您是否知道适合这种情况的任何身份验证/访问控制机制?通常,您是否了解有关应用程序身份验证/访问控制机制的任何好书/来源?

任何帮助都非常感谢.提前致谢!

TMS*_*TMS 3

应用程序(客户端)可以对密码进行两次哈希处理。请注意,服务器应该生成其他随机盐,而不是客户端!否则,攻击者也可以使用此哈希进行登录。您还可以通过在数据库中存储密码特定的盐来使其更安全。

协议:

0) 服务器salt从数据库检索该特定密码,生成 salt2,并将两者发送到客户端

1) 客户端发送hash(hash(password, salt), salt2, timestamp)timestamp

2)服务器hash(password, salt)从数据库中检索并比较。

请注意,如果您所在的网络上攻击者不仅可以嗅探,还可以修改流量,正如Paulo 指出的那样,您应该对每条消息进行签名hash(hash(password, salt), salt2, timestamp, message)并在服务器上进行检查。(例如,攻击者可以修改消息以包含删除命令的情况......)

请注意,当用户需要安全地设置/更改密码时仍然存在问题。您无法仅使用不安全网络上的哈希函数来安全地完成此操作,您需要某种密码/解密。

另请注意,哈希函数越慢,越安全(因为字典攻击)。如果您无法访问特殊的慢速哈希函数,您也可以调用普通的快速哈希函数 100000 次。