用 S/KEY 避免回放攻击

作者:vkvi 来源:ITPOW(原创) 日期:2009-5-23

为方便对 S/KEY 的叙述,我们先以举例开始。假设用户密码是 a,那么:

  • a 经过 MD5 运算后,结果是:0cc175b9c0f1b6a831c399e269772661,为方便叙述,简称 H1。
  • H1 经过 MD5 运算后,结果是:d7afde3e7059cd0a0fe09eec4b0008cd,为方便叙述,简称 H2。
  • H2 经过 MD5 运算后,结果是:54f74fbfb94518a527a36474dc904c25,为方便叙述,简称 H3。
  • H3 经过 MD5 运算后,结果是:f156cc7352a022de5756211d10f824a6,为方便叙述,简称 H4。

第一次登录:

  • 服务器端存储着 H4。
  • 客户端将 H3 发送到服务器端。
  • 服务器端收到客户端发送来的数据,将其再进行一次 MD5 运算,然后看看是不是 H4,如果是,则说明验证成功,服务器端不再存在 H4,改存 H3。

第二次登录:

  • 服务器端存储着 H3。
  • 客户端将 H2 发送到服务器端。
  • 服务器端收到客户端发送来的数据,将其再进行一次 MD5 运算,然后看看是不是 H3,如果是,则说明验证成功,服务器端不再存在 H3,改存 H2。

第三次登录:

  • 服务器端存储着 H2。
  • 客户端将 H1 发送到服务器端。
  • 服务器端收到客户端发送来的数据,将其再进行一次 MD5 运算,然后看看是不是 H2,如果是,则说明验证成功,服务器端不再存在 H2,此时不可能再进行第四次登录,因为若要再进行第四次登录,就只有发送明文密码了,而若发送明文密码就可能被侦听来用以回放攻击

说明

实际使用中,不一定是使用 MD5 来进行哈希运算。

在传输过程中,发送的数据可能会被侦听到,但由于每个哈希值只使用一次,所以被侦听到了也不会引起回放攻击。

上述示例中只进行了四次哈希运算,也就只能登录三次,实际使用时,可能不是四次,而是数百上千次。

相关阅读

相关文章