Tillitis TKey
TKey 是一款 TKey 是一个 开源硬件 和开源软件的 USB 安全密钥,可以支持如 SSH 登录、Ed25519 数字签名、信任根 (Root of Trust)、FIDO2 等用例。TKey 的软件、电路板设计、FPGA verilog 和固件由 Tillitis 发布。
TKey 的 威胁模型,例如对信任的假设和攻击向量,由 Tillitis 指定。
由于 TKey 没有持久化存储,其输出是从任何输入和一个独特的设备密钥 (UDS) 计算得出的,请参阅 Tillitis TKey 开发者手册。每次将 TKey 插入计算机时,都必须加载一个设备应用程序到其中。设备应用程序加载后,TKey 会根据设备应用程序二进制代码的哈希值、UDS 以及可能的用户提供的密钥 (USS) 来计算复合设备标识符 (CDI)。然后,CDI 可供设备应用程序使用,例如用于派生私钥。
首次使用
TKey 使用设备签名进行标识
$ lsusb | grep Tillitis
Bus 008 Device 001: ID 1207:8887 Tillitis MTA1-USB-V1
并可以通过类似 /dev/ttyACM0 的串行端口访问。要使用 TKey,请将您自己添加到 uucp 用户组。
更推荐使用针对供应商 1207 和产品 8887 的 udev 规则,该规则可以使设备 对普通用户可写。
使用 tkey-verification 进行验证
为了测试设备是否设置正确,建议运行由供应商提供的 tkey-verification 程序,该程序打包在 tkey-verification-binAUR 中。除了对 TKey 进行功能性检查外,该软件还可以验证 TKey 是否包含与生产时相同的固件,从而确保 TKey 上的固件未被篡改。
$ tkey-verification verify
... TKey is genuine!
应用程序
本节介绍一些可用工具的使用方法。
tkey-ssh-agent
TKey 可以使用 tkey-ssh-agentAUR 对 SSH 代理请求进行身份验证。要打印其公用的 ssh 密钥
$ tkey-ssh-agent --show-pubkey
可以通过 --uss (需要 pinentry 程序) 或 --uss-file 命令行参数提供额外的用户提供的密钥 (USS)。USS 决定了 ssh 公钥,这意味着提供不同的 USS 将输出不同的密钥。例如,如果用于生成 ssh 公钥的 USS 是 --uss "arch, btw",那么在向使用此公钥的服务器进行身份验证时,应在 pinentry 提示符中输入此 USS。
启动 ssh 代理
$ tkey-ssh-agent --agent-socket $XDG_RUNTIME_DIR/tkey_ssh_agent.sock
同时使用 tkey-ssh-agent 和 ssh-agent
OpenSSH 可以配置 (参见 ssh_config(5)) 来仅使用 tkey-ssh-agent 对某些连接进行身份验证,并为其他 ssh 连接默认使用 ssh-agent。要使用 TKey 对连接到特定主机进行身份验证,请将 ssh 配置选项 IdentityAgent 设置为 tkey-ssh-agent 的套接字路径。
~/.ssh/config
Host aur.archlinux.org User aur IdentityAgent /run/user/1000/tkey-ssh-agent/sock
上面的示例将询问是否使用 TKey 对 aur.archlinux.org 进行身份验证,假设其 --agent-socket 是上面配置的 IdentityAgent 路径。
如果 tkey-ssh-agent 是通过 tkey-ssh-agent.service (作为 tkey-ssh-agentAUR 程序包的一部分提供) 作为 Systemd/User 单元 启动/管理,那么套接字路径就是 $XDG_RUNTIME_DIR/tkey-ssh-agent/sock 的值。