PKCS11 命令流程

PKCS11 command flow

我正在尝试访问 PKCS11 加密令牌(智能卡)。我以前使用的智能卡具有自己的专有 API 卡访问权限,因此我试图了解如何将其映射到 PKCS11 令牌。

在我以前的智能卡中,我必须连接到设备,然后发出 API 调用各种功能,例如验证 PIN、获取卡信息、Select 文件、读取文件、写入文件,执行加密功能(RNG,symmetric/assymmetric 加密等),最后,我会断开与设备的连接。

PKCS11 令牌是否有类似的流程?我查找了各种函数,例如 C_Initialize、C_OpenSession 等,但我不确定它们的作用,也不确定使用什么参数。用 C 编写的一些简单示例显示应用程序如何访问令牌以验证 PIN,这将非常有帮助。

谢谢!

我已经为 .NET 编写了名为 Pkcs11Interop which comes with unit tests covering all functions provided by PKCS#11 API. You can take a look at its LowLevelAPI tests 的 PKCS#11 包装器,它可以很容易地映射到 ANSI C。

您还应该考虑至少阅读 PKCS#11 standard 的 "Chapter 2 - Scope"、"Chapter 6 - General overview" 和 "Chapter 10 - Objects"。

来自 opensc 的 pkcs11-tool 源代码可以作为很好的参考。

https://github.com/OpenSC/OpenSC/blob/master/src/tools/pkcs11-tool.c