0

我正在编写一个小型 web 应用程序,我不想将登录密码作为明文传输。由于我没有可用的 SSL,我编写了一个一次性质询系统,该系统使用登录表单发送一个随机字符串,然后用于在客户端使用 HMAC-SHA256 对密码进行哈希处理。我使用随机挑战字符串作为消息,使用用户密码作为 HMAC 的密钥。

我知道自制解决方案通常是一个坏主意,所以我想问一下我是否在这里犯了错误。

4

2 回答 2

1

我不认为这是一个可以接受的解决方案。

HMAC 的目的是验证数据的完整性和真实性。所以你可以用它来验证信息没有改变,你可以用它来验证用户是否拥有密钥(在你的情况下是密码)。

它不能做的是 SSL 可以做的其他一些事情,例如通过加密通道和验证最终用户的服务器身份来防止窃听。

窃听:没有什么可以阻止中间人 (MITM) 观看此交易,拦截返回响应(HMAC 摘要)并将其作为自己的请求发送(甚至停止来自其他用户的响应) .

验证服务器的 ID:您在这里缺少的最重要的部分之一是保护您的用户免受网络钓鱼者的欺骗。使用有效的 SSL 证书,您的用户无法验证该站点是您的网站还是冒名顶替者。您试图通过验证最终用户的真实性来保护自己,这很好,但是您忘记了保护最终用户。

我很想知道为什么您没有可用的 SSL。我经常听到这句话,发现通常的原因是因为有人不想花 50 美元购买证书。但是证书是值得的,并且在安全性很重要的环境中,确实不应该有任何技术原因导致 SSL 不可用。

于 2011-09-06T18:33:39.833 回答
0

为此,您需要某种方式将服务器发送的随机字符串与它发送到的客户端链接起来,否则攻击者可以简单地将散列密码和随机字符串发送回服务器以获得访问权限。

但是,如果您将随机字符串存储在某种服务器会话中,您就会打开会话欺骗作为可能的攻击媒介。

您的解决方案比以纯文本形式发送密码要好,因为攻击者将无法发现用户的密码,但他们仍然可以冒充用户。

于 2011-09-04T12:51:14.463 回答