开放认证倡议

出自 ArchWiki
(重定向自 OATH

开放认证倡议(OATH)是一个行业范围内的协作,旨在开发使用开放标准的开放参考架构,以促进强身份验证的采用。他们发布了 Google Authenticator 和其他常用双因素身份验证应用程序使用的标准。

安装

以下软件包可用于生成、传输和验证 OATH 凭据

标准

OATH 制定了两个对 Arch 用户具有重要意义的标准,两者都基于任意长度的 Base32 编码共享密钥

HOTP
HMAC(基于哈希的消息身份验证码)一次性密码(HOTP)。每次生成密码时,计数器都会递增。此值与密钥连接,然后哈希以生成 6-10 位代码。身份验证方执行相同的操作,只是它在成功验证代码后会递增计数器。为了处理计数器的不同步,身份验证方还可以检查超出其当前计数器状态的几个(30-100)个附加值。
TOTP
基于时间的一次性密码(TOTP),其工作原理与 HOTP 非常相似,只是它使用当前时间而不是计数器。这解决了不同步问题,并消除了攻击者记录 OTP 以供以后使用的可能性。

URI 凭据格式

凭据通常以 QR 编码的 URI 格式共享。所有字段都必须是 URI 编码的字符串

otpauth://TYPE/LABEL?PARAMETERS
警告: URI 格式的凭据以及从中生成的任何 QR 码都包含生成有效一次性密码所需的所有信息。像对待任何其他密码一样保护它。
类型
totphotp
标签
标识密钥与哪个帐户关联,可以选择以发布者字符串为前缀。示例:Arch%20Wiki:alice@archlinux.org
参数
采用标准 URI 参数格式 - ?name=value&name=value...
  • secret - 必需;这是 Base32 共享密钥。
  • issuer - 指示帐户关联的提供商或服务。如果缺少此项,将使用标签的发布者前缀。如果两者都存在,则它们应相等。
  • algorithm - 默认为 SHA1。也可以是 SHA256SHA512
  • digits - 密码应为多长。默认为 6,可以是 8。
  • counter - 如果使用 HOTP,则为必需。初始计数器值。
  • period - 如果使用 TOTP,则为可选。设置代码有效时间,默认为 30 秒。

这是一个示例

otpauth://totp/Example%20Company:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example%20Company
         |type|  issuer prefix  |    account     |         secret        |     issuer            |
              |               label              |                  parameters                   |

技巧与窍门

解码 QR 码

这可以使用 zbar 中的工具完成。解码 PNG 文件

$ zbarimg my_qr_code.png --quiet --raw

从相机解码图像

$ zbarcam /dev/video0

创建 QR 码

qrencode 软件包在这里很有用。

编码 URI,将其另存为 PNG

$ qrencode -o my_code.png 'MY_URI'

编码 URI,将 QR 码打印到终端

$ qrencode -t ansiutf8 'MY_URI'

生成密钥

要以正确的格式生成您自己的密钥,您可以使用如下命令

$ head -c 16 /dev/urandom | base32 --wrap 0

从命令行生成 OTP

使用 oathtool(1),来自 oath-toolkit

$ oathtool --base32 --totp KEY

许多密码管理器,包括 passKeePass 也提供生成这些代码的支持。

使用 PAM 进行 Linux 用户身份验证

请参阅 pam_oathGoogle Authenticator

参见