场景: 需要将一个使用 Golang 编写的 Web 应用私有化部署到客户服务器上,并需要使用 USBKey 进行软件系统授权。一些机器可以联网,一些机器不能联网,但需要定期进行联网更新。数量较少,未来大约几十个量级,因此价格并不是非常敏感。 方案: 使用 YubiKey 的 PIV 功能中的 PIN 功能,如下图所示。每个 YubiKey 都有一个唯一的序列号 SN ,可以将其与授权模块和到期日期进行绑定。在程序启动和关键操作时,会验证 PIN 和 Management Key 是否正确。序列号 SN/PIN/Management Key 将直接硬写到程序中,一一对应。 问题: YubiKey 目前应该是无法被复制的,因此应该是安全的吗?程序可以直接调用 https://github.com/go-piv/piv-go 来读取 SN 并验证 PIN 和 Management Key ,这种方式是否安全?(这个包的一个缺点是它不是纯 Go 包, 导致不能交叉编译, 准备单独写一个组件来调用)是否有更好的方案可以同时保证安全性和便利性?