Tomu

来自 ArchWiki

Tomu 是一系列开源的 FIDO2 安全密钥。本文介绍如何设置和使用它。目前本页内容仅限于原始 Tomu – 欢迎帮助扩展其内容。

原始 Tomu

依赖

要构建 Tomu 镜像,您需要安装 arm-none-eabi-gccarm-none-eabi-newlib。要在 Tomu 上刷写软件,请使用 dfu-util

验证

您的 Tomu 应该已安装 dfu-util。如果您将 Tomu 插入 USB 端口并且 toboot 启动,绿色和红色 LED 灯应交替闪烁。要检查您的 Tomu 是否正在运行引导加载程序 toboot 以及版本,请运行

# dfu-util --list
...
Found DFU: [1209:70b1] ver=0101, devnum=19, cfg=1, intf=0, path="1-1.2", alt=0, name="Tomu Bootloader (5) v2.0-rc7", serial="UNKNOWN"
注意: 某些 Tomu 程序 – 包括 U2F 代码 – 设置了 TOBOOT_CONFIG_FLAG_AUTORUN 标志,并立即开始运行。这样它们将不会(必要地)以这种方式闪烁,并且 dfu-util 将无法找到它们!要在这些设备上进入 Toboot,请在将 Tomu 插入 USB 端口时,用镊子将两个外侧引脚短路 [1]

更新引导加载程序 (toboot)

如果您的 Tomu 的引导加载程序不是最新版本,您应该更新它。您可以自行编译,或下载预编译版本。像这样安装更新

# dfu-util -d 1209:70b1 -D toboot-booster.dfu

安装其他软件

如果您不想将 Tomu 用作 U2F 令牌,而是将其用于其他目的,您可以在 GitHub 上找到示例应用程序。它们可以使用 df-util 安装

# dfu-util -d 1209:70b1 -D application.dfu

安装 U2F 固件 (chopstx 端口)

Tomu 的 U2F 固件代码可以在 GitHub 上找到。使用 git 克隆并编译它

$ git clone https://github.com/im-tomu/chopstx.git
$ cd chopstx/u2f
$ make

您有两个选择

  • 不使用密钥刷写: 如果未通过密钥刷写,固件将在首次启动时生成 EC 私钥,并在进入引导加载程序时将其擦除!您无法创建备份。但这有一个优点,即密钥永远不会存在于 Tomu 之外。请确保有备用的第二因素或恢复可能性。您无法在不丢失私钥的情况下更新软件。
  • 注入私钥: 在您的计算机上生成密钥,将其注入到固件中,然后将它们一起刷写到 Tomu。

注入私钥 (可选)

生成您的私钥

$ openssl ecparam -name prime256v1 -genkey -noout -outform der -out key.der

您可能需要加密和/或离线备份它。将其注入到构建中

$ ./inject_key.py --key key.der

刷写

您可以将软件刷写到设备

# dfu-util -v -d 1209:70b1 -D build/u2f.bin

刷写成功后,LED 灯应停止闪烁。将其移除并重新插入 – 使用 U2F 软件时,红色 LED 灯应仅非常短暂且快速地闪烁。

更新或恢复

如果您已注入私钥,您可以再次构建软件并注入密钥。但是,您必须将计数器设置为比 Tomu 上的值至少高 1 的值

$ ./inject_key.py --key key.der --ctr 1001

如果您仍然拥有原始 Tomu(即您想要更新),您可以在 Yubikey 演示站点中找到计数器。否则,将其设置为“足够大”的值。

用法

您可以使用 https://webauthn.io/ 或 Yubikey 演示站点来测试您的 U2F 密钥,或者在终端上使用 pamu2fcfg。

插入 Tomu。当应用程序(例如您的浏览器)要求您按下按钮时,Tomu 上的红色 LED 灯开始闪烁。您现在必须按下“下按钮”。电容式按钮是 Tomu 末端的四个接触区域。“下”按钮是从侧面观察芯片所在一侧的按钮。用手指按下它 – 可能很难触及 – 在最坏的情况下,使用金属螺丝刀或类似物。当您按下它时,红色 LED 灯会亮起几秒钟,然后应用程序会收到答案。