跳转至内容

开放认证倡议

来自 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:archie@archlinux.example
参数
采用标准的 URI 参数格式 - ?name=value&name=value...
  • secret - 必需;这是 Base32 共享密钥。
  • issuer - 指示帐户关联的提供商或服务。如果省略,则使用标签的发行者前缀。如果两者都存在,则它们应相等。
  • algorithm - 默认为 SHA1。也可以是 SHA256SHA512
  • digits - 密码应有多长。默认为 6,可以是 8。
  • counter - 使用 HOTP 时必需。初始计数器值。
  • period - 使用 TOTP 时可选。设置代码的有效时长,默认为 30 秒。

这是一个例子

otpauth://totp/Example%20Company:archie@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

使用 import(1) 截屏并将其解码到 剪贴板

$ import -silent -window root png:- | zbarimg --quiet --raw - | xclip -selection clipboard

创建 QR 码

qrencode 软件包在这里很有用。

编码 URI,另存为 PNG

$ qrencode -o my_code.png 'MY_URI'

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

$ qrencode -t ansiutf8 'MY_URI'

编码 URI,将其作为 PNG 复制到 剪贴板

$ qrencode -o - 'MY_URI' | xclip -selection clipboard -t image/png

生成密钥

要以正确的格式生成自己的密钥,您可以使用类似以下内容的方法

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

从命令行生成 OTP

使用 oath-toolkit 中的 oathtool(1)

$ oathtool --base32 --totp KEY

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

使用 PAM 进行 Linux 用户认证

请参阅 pam_oathGoogle Authenticator

参见