如何着手围绕我的设备编写 PKCS#11 包装器?

How to go about writing a PKCS#11 Wrapper around my device?

我制作了一个非常基础的 Soft-HSM - 仅供个人学习之用。我想给它添加一个 PKCS#11 接口。我在哪里可以了解这方面的知识,或者找到一些已经为学习编写的开源软件?

我意识到这可能只是因为提出这个问题(安全性差等)而被否决,但我想确保它严格用于学习目的。

您首先需要熟悉 PKCS#11 规范。我创建了 git 存储库 PKCS11-SPECS 并将其所有版本放在一个地方。我个人认为 PKCS#11 v2.20 是最后一个“可用”版本,因为在后来的版本中,作者删除了对于开发可互操作的 PKCS#11 库(会话生命周期等)的任何人来说至关重要的重要部分。我警告过他们要删除那些部分,但他们似乎并不在意。所以 IMO PKCS#11 v2.20 是你最好的选择,除非你需要使用 v2.20 中不存在的一些其他闪亮的新算法。

我的另一个您可能会觉得有用的项目是 EMPTY-PKCS11。它是以最简单的方式实现 PKCS#11 v2.20 API 的极简 C 库 - 除了 C_GetFunctionList 函数 return CKR_FUNCTION_NOT_SUPPORTED [=25= 之外的所有 PKCS#11 函数] 价值。它已经在多个桌面和移动平台上进行了测试,因此可以用作开发可移植 PKCS#11 库的轻量级框架。

之后您还可以查看 PKCS11-MOCK,这是另一个简约的 PKCS#11 v2.20 库。它不是一个真正的密码模块,而只是一个虚拟模拟对象,专为我的其他一些项目的单元测试而设计。

我希望这些项目可以成为您学习过程中坚实可靠的起点。