使用 OpenSC 以编程方式解锁 PIV 插槽 9a,以供其他应用程序使用

使用 OpenSC 以编程方式解锁 PIV 插槽 9a,以供其他应用程序使用

我正在使用 Yubikey 4,其证书已加载到 PIV 插槽 9a(PIV 身份验证;OpenSC 插槽 0)。

在 Firefox 64 中,我使用 OpenSC PKCS#11 驱动程序。

我想要实现的是通过提供一次我的用户 PIN 码来“解锁”这个插槽(我不确定这里用“解锁”这个词是否合适),比如通过 shell 脚本。之后,Firefox 应该能够使用此插槽,而无需提示用户输入 PIN(Firefox 应该将该插槽视为“已登录”)。

我希望我可以在pkcs11-tool -l --login-type user -L命令行上使用类似的东西。这个命令本身可以工作,但它不会导致插槽在 Firefox 中转换为“登录”状态。Firefox 仍会在第一次打开网站时要求输入 PIN。

输出pkcs11-tool -l --login-type user -L

可用插槽:
插槽 0(0x0):Yubico Yubikey 4 OTP+U2F+CCID
  标记标签:#redacted#
  代币制造商:piv_II
  令牌模型:PKCS#15 模拟
  令牌标志:需要登录、rng、令牌已初始化、PIN 已初始化
  硬件版本:0.0
  固件版本:0.0
  序列号:0001112223334445
  引脚最小/最大:4/8
登录“#redacted#”。
请输入用户 PIN:
$ opensc-工具-i
OpenSC 0.19.0 [gcc 4.2.1 兼容 Apple LLVM 9.1.0(clang-902.0.39.2)]
启用的功能:锁定 zlib readline openssl pcsc(/System/Library/Frameworks/PCSC.framework/PCSC)

对我来说,OpenSC 配置参数“锁定登录“似乎描述了我想要的:

默认情况下,OpenSC PKCS#11 模块不会在您通过 C_Login 验证卡身份后锁定您的卡(默认值:false)。因此,不会阻止其他用户或其他应用程序连接到卡并执行加密操作(这可能是可能的,因为您已经通过卡验证身份)。

我没有手动设置任何 OpenSC 配置值。据我所知,运行上述 pkcs11-tool 命令会调用 C_Login——但如果没有在 Firefox 中输入 PIN,该插槽仍然无法使用。

这可以通过 OpenSC 实现吗?

答案1

您可以“use_pin_caching = true;”这样 OpenSC 将在应用程序启动时缓存该引脚,并在需要时再次使用它。

大多数 Yubico 设备未正确实现“选择 AID”命令的处理以选择卡上的小程序,并且 NIST 规范规定 PIV 小程序将是启动时的默认小程序。当多个应用程序尝试使用令牌时,这会导致尝试保持登录状态时出现问题。(在 OpenSC 源代码中的 card-piv.c 中查找“card_issues”。)

FireFox 和大多数应用程序一样,都假设首次登录时需要登录。因此使用脚本来验证 PIN 不会有帮助。

还要查看“card_drivers = PIV-II;”,以避免另一个应用程序为您没有的卡运行“选择 AID”,这也会丢失登录状态。(card_issues = CI_OTHER_AID_LOSE_STATE)

相关内容