开放认证倡议
(重定向自 OATH)
开放认证倡议(OATH)是一个行业范围内的协作,旨在开发使用开放标准的开放参考架构,以促进强身份验证的采用。他们发布了 Google Authenticator 和其他常用双因素身份验证应用程序使用的标准。
安装
以下软件包可用于生成、传输和验证 OATH 凭据
- oath-toolkit - 获取凭据并生成代码。包括用于用户身份验证的 PAM 模块。请参阅 pam_oath。
- libpam-google-authenticator - 提供客户端程序
google-authenticator
用于生成新凭据,以及用于用户身份验证的 PAM 模块。请参阅 Google Authenticator。 - pass-otp - 为 pass 添加 OATH 支持
- zbar - 解码 QR 码
- qrencode - 编码 QR 码
标准
OATH 制定了两个对 Arch 用户具有重要意义的标准,两者都基于任意长度的 Base32 编码共享密钥
- HOTP
- HMAC(基于哈希的消息身份验证码)一次性密码(HOTP)。每次生成密码时,计数器都会递增。此值与密钥连接,然后哈希以生成 6-10 位代码。身份验证方执行相同的操作,只是它在成功验证代码后会递增计数器。为了处理计数器的不同步,身份验证方还可以检查超出其当前计数器状态的几个(30-100)个附加值。
- TOTP
- 基于时间的一次性密码(TOTP),其工作原理与 HOTP 非常相似,只是它使用当前时间而不是计数器。这解决了不同步问题,并消除了攻击者记录 OTP 以供以后使用的可能性。
URI 凭据格式
凭据通常以 QR 编码的 URI 格式共享。所有字段都必须是 URI 编码的字符串
otpauth://TYPE/LABEL?PARAMETERS
警告: URI 格式的凭据以及从中生成的任何 QR 码都包含生成有效一次性密码所需的所有信息。像对待任何其他密码一样保护它。
- 类型
totp
或hotp
- 标签
- 标识密钥与哪个帐户关联,可以选择以发布者字符串为前缀。示例:
Arch%20Wiki:alice@archlinux.org
- 参数
- 采用标准 URI 参数格式 -
?name=value&name=value...
secret
- 必需;这是 Base32 共享密钥。issuer
- 指示帐户关联的提供商或服务。如果缺少此项,将使用标签的发布者前缀。如果两者都存在,则它们应相等。algorithm
- 默认为SHA1
。也可以是SHA256
或SHA512
。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
许多密码管理器,包括 pass 和 KeePass 也提供生成这些代码的支持。
使用 PAM 进行 Linux 用户身份验证
请参阅 pam_oath 或 Google Authenticator。
参见
- 标准规范[死链 2024-12-15 ⓘ]
- URI 格式参考
- QR 码和条形码解码器 - 请勿在此处输入实际凭据。
- QR 码测试器 (archive.org) - 请勿在此处输入实际凭据。