使用 Yubikey 时 GPG 挂起

使用 Yubikey 时 GPG 挂起

我正在尝试调试为什么我的 Yubikey 突然需要很长时间才能访问。Yubikey 拥有一个 GPG 私钥,然后用于 GPG 和 SSH。几个月来它一直运行良好,现在仅完成解密或签名就需要几秒钟:

$ echo hi | time gpg --clearsign
...
gpg --clearsign  0.00s user 0.00s system 0% cpu 21.660 total

这曾经是瞬间发生的。看到一个相当圆且可重现的延迟,我开始寻找潜在原因,并将问题追溯到gpg-agent用于scdaemon与实际智能卡通信的。打开日志记录后,scdaemon我得到了以下信息:

2023-08-04 16:02:01 scdaemon[197085] DBG: chan_7 <- SERIALNO
2023-08-04 16:02:11 scdaemon[197085] DBG: apdu_open_reader: BAI=94102
2023-08-04 16:02:11 scdaemon[197085] DBG: chan_7 -> S SERIALNO ABCD
2023-08-04 16:02:11 scdaemon[197085] DBG: chan_7 -> OK
2023-08-04 16:02:11 scdaemon[197085] DBG: chan_7 <- SERIALNO
2023-08-04 16:02:23 scdaemon[197085] DBG: apdu_open_reader: BAI=94102
2023-08-04 16:02:23 scdaemon[197085] DBG: chan_7 -> S SERIALNO ABCD
2023-08-04 16:02:23 scdaemon[197085] DBG: chan_7 -> OK
2023-08-04 16:02:23 scdaemon[197085] DBG: chan_7 <- GETATTR KEY-FPR
2023-08-04 16:02:23 scdaemon[197085] DBG: send apdu: c=00 i=CA p1=00 p2=6E lc=-1 le=256 em=0
2023-08-04 16:02:23 scdaemon[197085] DBG:  raw apdu: 00 CA 00 6E 00
2023-08-04 16:02:23 scdaemon[197085] DBG:  response: sw=9000  datalen=224
2023-08-04 16:02:23 scdaemon[197085] DBG:       dump:  6E 81 DD 4F ...
2023-08-04 16:02:23 scdaemon[197085] DBG: chan_7 -> S KEY-FPR 1 AXYZ
2023-08-04 16:02:23 scdaemon[197085] DBG: chan_7 -> S KEY-FPR 2 BXYZ
2023-08-04 16:02:23 scdaemon[197085] DBG: chan_7 -> S KEY-FPR 3 CXYZ
2023-08-04 16:02:23 scdaemon[197085] DBG: chan_7 -> OK
2023-08-04 16:02:23 scdaemon[197085] DBG: chan_7 <- RESTART
2023-08-04 16:02:23 scdaemon[197085] DBG: chan_7 -> OK

请注意,有两个单独的中断,每个中断持续 10 秒。如果我正确读取日志,它似乎正在尝试从智能卡读取序列号。

是什么原因导致了这种延迟?可能是网络查找在 10 秒后失败了吗?我该如何解决这个问题,而不必在每次 git 提交或 ssh 连接时等待 20-30 秒?

相关内容