如何使用 pkcs11-tool 创建插槽?

kso*_*oop 6 cryptography pkcs#11

我正在尝试在我的应用程序中使用 pkcs11 来访问智能卡。这是“list-slots”命令的输出 -

root@penguin:~/src/tools$ pkcs11-tool -L
Available slots:
Slot 0 (0xffffffffffffffff): Virtual hotplug slot
  (empty)
Run Code Online (Sandbox Code Playgroud)

我有 2 个问题

  1. 我如何模拟一张假卡,以便插槽 0 中有一个我可以访问的令牌/设备。

  2. 我可以创建额外的插槽并向其中添加令牌/设备吗?

如果没有,我该怎么做才能将令牌/设备添加到可用的插槽 0 中?

jsh*_*sha 6

您需要一个“模块”,一个与特定智能卡交互的动态加载库。如果您的智能卡与 OpenSC 配合使用(例如,PIV 模式下的 Yubikey),您可以使用 OpenSC 模块,该模块通常/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so在 Linux 系统或/Library/OpenSC/lib/opensc-pkcs11.dylibmacOS 系统上使用。如果您没有物理智能卡并且只想使用 PKCS#11 API,则可以安装并使用SoftHSM,它在软件中模拟 PKCS#11 设备。在使用 SoftHSM 之前,您需要对其进行一些配置,以创建必要的插槽。SoftHSM 模块通常位于/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.soLinux 系统上。您需要--module在每次执行时指定pkcs11-tool

以下是如何设置和使用 SoftHSMv2 的示例:

mkdir softhsm
cd softhsm
echo "directories.tokendir = $PWD/" > softhsm2.conf
export SOFTHSM2_CONF=$PWD/softhsm2.conf
pkcs11-tool -L --module /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so
Run Code Online (Sandbox Code Playgroud)

SoftHSMv2 默认情况下有 1 个插槽。一旦您在第一个插槽中初始化了令牌,它将自动添加第二个插槽,依此类推。

$ pkcs11-tool  --module /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so -L
Available slots:
Slot 0 (0x0): SoftHSM slot 0
  token state:   uninitialized
$ pkcs11-tool  --module /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so --init-token --label my_token
Using slot 0 with a present token (0x0)
Please enter the new SO PIN: 
Please enter the new SO PIN (again): 
Token successfully initialized
membrane:~ $ pkcs11-tool  --module /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so -L
Available slots:
Slot 0 (0x0): SoftHSM slot 0
  token label        : my_token
  token manufacturer : SoftHSM project
  token model        : SoftHSM v2
  token flags        : rng, login required, token initialized, other flags=0x20
  hardware version   : 2.0
  firmware version   : 2.0
  serial num         : 5bed215e0df0d1f1
Slot 1 (0x1): SoftHSM slot 1
  token state:   uninitialized
Run Code Online (Sandbox Code Playgroud)

如果您使用硬件智能卡,通常您将拥有一组固定的插槽。