在我的项目中,有一个实现我们的客户与公司Web门户上的Web服务之间的简单Single Sign On的实现。通过此实现,客户和我们之间存在共享的对称密码。当用户从客户网站跳转到我们公司时,客户将创建令牌以进行完整性检查,如下所示:
token = hash(field1 || symmetric-secret || field 2 || field 3 || timestamp)
计算出的令牌以及这3个字段和时间戳以URL查询参数发送。接收到该HTTP请求后,我们的后端通过以相同顺序连接那些查询参数来计算具有相同秘密的另一个令牌,并通过验证这两个令牌来检查完整性。当前,SHA1被用作哈希方法。我指出了长度扩展攻击,现在将使用SHA256。
IMO,实现在许多方面都是错误的,即,在会话管理方面不支持单一注销。我无法证明这种方法在安全性方面的观点。在一个有思想的场景中,我可以轻松地在客户网站的前端上操纵javascript,以生成数千个此类SSO跳转令牌。使用所有这些标记,哈希方法输入的唯一变化就是时间戳。我只是想知道是否有可能通过分析散列标记以及它们对应的输入来破解这个隐藏的对称秘密。欢迎从安全的角度对与此实现相关的任何弱点进行思考。