XMPP DIGEST-md5响应计算算法



我正在阅读有关XMPP身份验证流程的资料。我理解响应是在客户端使用如下的算法计算的

  1. 创建一个"username:realm:password"形式的字符串。将此字符串命名为x。
  2. 计算x的16字节MD5哈希值,将结果称为y。
  3. 创建形式为"Y:nonce:cnonce:authzid"的字符串。将此字符串命名为A1。
  4. 创建一个"AUTHENTICATE:digest-uri"形式的字符串。将此字符串命名为A2。
  5. 计算A1的32位十六进制MD5哈希值。调用结果HA1
  6. 计算A2的32位十六进制MD5哈希值。调用结果HA2。
  7. 创建形式为"HA1:nonce:nc:cnonce:qop:HA2"的字符串。将此字符串命名为KD。
  8. 计算KD的32位十六进制MD5哈希值。将结果命名为z。

这嵌入在结构的响应域中。

解码质询响应的一个例子是

  username="rob",realm="cataclysm.cx",nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",nc=00000001,qop=auth,digesturi="xmpp/cataclysm.cx",response=d388dad90d4bbd760a152321f2143af7,charset=utf-8,authzid="rob@cataclysm.cx/myResource"

但我担心的是,我没有看到任何地方的特定响应字段是如何在服务器上使用的?有没有真正使用这个的用例。有人可以引用参考/见解/实现如何使用响应字段,以及它实际上如何在确定用户的真实性方面发挥作用。

谢谢!

目前我正在研究摘要MD5认证机制,我正在使用RFC 2831作为参考,并回答您的问题是服务器在服务器的站点再次生成响应,然后将其与从客户端收到的响应字段进行比较,如果它们匹配客户端获得认证,否则认证失败。

这样比较的原因是一旦字符串被散列它就不能被反向到源字符串所以服务器计算散列后的值如果源字符串提供的是相同的这些值将相等

如果我的回答没有澄清你的疑问,请告诉我

最新更新