如何在我的设备周围编写 PKCS#11 Wrapper?

问题描述

我制作了一个非常基本的 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 函数返回 CKR_FUNCTION_NOT_SUPPORTED 返回值之外的所有 PKCS#11 函数。它已经在多个桌面和移动平台上进行了测试,因此可以用作开发便携式 PKCS#11 库的轻量级框架。

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

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