Google身份验证器

典型使用情况

通常，用户安装身份验证程序在智能手机上。为了登录到使用两步验证的网站或服务上，用户提供用户名和密码后运行身份验证器进行额外验证。 该应用程序会生成六位数的一次性密码，而不同网站可能会生成同一密码。
为了使身份验证器正常工作，安装运行之前网站必须向用户提供一组共享密钥。这组密钥将会用于未来的所有登陆请求。
在两步验证的保护之下，仅仅拥有用户名密码已不足以黑入账户。攻击者需要这组共享密钥或者拿到进行两步验证的移动设备。另一种方法是进行中间人攻击；若用户的计算机被木马侵入，则用户名、密码及一次性密码都将被木马所捕获，随后攻击者即可利用木马进行登录、监听或修改用户与网站的通信。

生成一次性密码的伪代码

function GoogleAuthenticatorCode(string secret)
      key := base32decode(secret)
      message := floor(current Unix time / 30)
      hash := HMAC-SHA1(key, message)
      offset := last nibble of hash
      truncatedHash := hash[offset..offset+3]  //4 bytes starting at the offset
      Set the first bit of truncatedHash to zero  //remove the most significant bit
      code := truncatedHash mod 1000000
      pad code with 0 until length of code is 6
      return code

生成事件性或计数性的一次性密码伪代码

function GoogleAuthenticatorCode(string secret)
      key := base32decode(secret)
      message := counter encoded on 8 bytes
      hash := HMAC-SHA1(key, message)
      offset := last nibble of hash
      truncatedHash := hash[offset..offset+3]  //4 bytes starting at the offset
      Set the first bit of truncatedHash to zero  //remove the most significant bit
      code := truncatedHash mod 1000000
      pad code with 0 until length of code is 6
      return code

Android上的开源情况

Google身份验证器在Google Play商店上当前（2017年9月16日）以私有版权协议发布。Google在GitHub上开放了其身份验证器源代码，并陈述如下：
“此开源计划包含了2.21版本的源代码。随后的版本中包含了Google特有的工作流程，与此项目无关。”
Android版本的独立分支之一为FreeOTP，其基于Google在GitHub上所开源的最新版本。另外一个并非很火的分支OTP Authenticator也在Google Play上可供下载。