算法

  1. 双方预先共享一对密码。
  2. 时间对30秒求整,用密码unbase64后HMAC签署。
  3. 如果当前时间前后一定时间内(几个误差)的值和用户提供值一致,就验证通过。

攻击者获得了数个时间和序列对,但是根据HMAC特性,他无法反向出密码。

因此

  1. gauth不需要联网。但是双方时间必须同步。
  2. gauth的优势在于,即使有人可以获得一次密码(例如keylogger),只要不在1分30秒内登录,获得的输入就无法使用。
  3. 对于可以取得gauth共享密码的人,gauth不能提供安全性加强。例如sudo,验证的是自己的身份。而用户密码只要登录即可读,因此没有提供加强的安全性。
  4. 对于ssh,在登录后也可以获得密码。因此只要给别人获得了一次登录权限,后续gauth不能保护你。反之,如果能保证对方一次登录都不会成功,则可以作为辅助。因此用于ssh上必须加上一个token只能使用一次,以确保对方获得了token也是作废的。
  5. 如果有人可以从手机中读取应用的信息,就可以一直冒充用户。因此越狱和root肯定会降低系统安全性。这就是为什么很多TOTP使用硬件来做这个事情。系统单纯,而且没有读取API。
  6. 缓慢的重试,每次命中概率都是1/1000000。持续试1000000次,也不能肯定猜中。实际上只有63.2%的概率猜中。如果30秒内连续重试1000000次,肯定破解了。合每秒重试3万多次,不算多。所以必须防止暴力破解。
  7. 如果没有紧急密码,安全性大约是20bit。但是数个紧急密码为破解提供了帮助。因此紧急密码一般是7位数字,综合复杂度一般评估为20bit上下。
  8. 以复杂度而言,不足以作为身份验证工具,只能作为身份验证辅助。所以gauth叫做two-factor-authentication。