开放认证倡议
The 开放认证倡议 (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) - 请勿在此处输入实际凭据。