namecoin/pkcs11mod

GitHub: namecoin/pkcs11mod

Go 语言库,用于将 Go 代码封装为符合 C ABI 的 PKCS#11 模块,使其能被浏览器、HSM 客户端等标准应用加载调用。

Stars: 13 | Forks: 11

# pkcs11mod:用于创建 PKCS#11 模块的 Go 库 pkcs11mod 允许您使用 Go 创建 PKCS#11 模块。您可以通过提供一个实现了与 [Miek Gieben 的 pkcs11 包](https://github.com/miekg/pkcs11)中 `pkcs11.Ctx` 相同 API 的结构体来实现您的 PKCS#11 函数;pkcs11mod 负责将其作为 C ABI 库公开。 ## 构建 前置条件: 1. 确保您已安装 Go 工具。 选项 A:在不含 Go modules 的情况下使用 Go 构建命令(适用于任何带有 Bash 的平台;不适用于 Go 1.17+): 1. 确保您设置了 GOPATH 环境变量。(对于不熟悉 Go 的人来说,将其设置为空目录的路径即可。该目录将被构建文件填充。) 2. 运行 `export GO111MODULE=off` 以禁用 Go modules。 3. 运行 `go get -d -t -u github.com/namecoin/pkcs11mod`。pkcs11mod 源代码将被自动获取。 4. 运行 `go generate github.com/namecoin/pkcs11mod`。将生成一些源代码。 5. 运行 `go get -t -u github.com/namecoin/pkcs11mod`。pkcs11mod 将进行构建。 6. 您现在可以从您的 Go PKCS#11 模块中 `import "github.com/namecoin/pkcs11mod"`。 选项 B:在包含 Go modules 的情况下使用 Go 构建命令(适用于任何带有 Bash 的平台): 1. 在 `pkcs11mod` 目录中运行以下命令以设置 Go modules: go mod init github.com/namecoin/pkcs11mod go mod tidy go generate ./... go mod tidy 2. 将您的 Go PKCS#11 模块的目录作为 `pkcs11mod` 目录的同级目录放置。 3. 在您的 Go PKCS#11 模块的目录中运行以下命令: go mod edit -replace github.com/namecoin/pkcs11mod=../pkcs11mod go mod tidy 4. 您现在可以从您的 Go PKCS#11 模块中 `import "github.com/namecoin/pkcs11mod"`。 ## 用法示例 有关如何使用 pkcs11mod 的示例,请参阅 `pkcs11proxy` 子目录。也可以考虑使用更高级的 [p11mod](p11mod/) 或 [p11trustmod](p11trustmod/) 库,而不是直接使用 pkcs11mod(请参阅[此部分](#should-i-use-pkcs11mod-or-p11mod))。 ## 追踪 设置环境变量 `PKCS11MOD_TRACE=1` 以启用调试跟踪。要包含可能涉及隐私泄露的敏感数据,还需设置 `PKCS11MOD_TRACE_SENSITIVE=1`。跟踪信息将输出到日志文件。 ## 什么是 PKCS#11? PKCS#11 是一种常用于智能卡和证书数据库的插件规范。您可能会发现以下链接很有帮助: * [规范](https://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/pkcs11-base-v2.40.html) * [维基百科文章](https://en.wikipedia.org/wiki/PKCS_11) * [共享信任策略 (p11-glue)](https://p11-glue.github.io/p11-glue/sharing-trust-policy.html) * [Grayhat 2020 演示 (Namecoin)](https://www.namecoin.org/2021/01/01/namecoin-at-grayhat-2020-monero-village.html) ## pkcs11 和 pkcs11mod 有什么区别? Miek Gieben 的 [pkcs11](https://github.com/miekg/pkcs11) 和 [p11](https://github.com/miekg/pkcs11/blob/master/p11) 包用于实现打开 PKCS#11 模块的应用程序(例如,如果您要创建一个将打开证书数据库的 Web 浏览器,则应使用 pkcs11 或 p11);而 pkcs11mod 和 p11mod 用于实现被应用程序打开的 PKCS#11 模块(例如,如果您要创建一个将被 Web 浏览器打开的证书数据库,则应使用 pkcs11mod 或 p11mod)。 ## 我应该使用 pkcs11mod 还是 p11mod? [p11mod](p11mod/) 更易于使用,且更符合 Go 的语言习惯。然而,p11mod 实现的 PKCS#11 规范比 pkcs11mod 少。如果您只需要 p11mod 具有的功能,您可能会发现 p11mod 使用起来更顺手。另一方面,p11mod 要新得多,且经过的实战测试较少,因此您可能会发现 pkcs11mod 更可靠。 [p11trustmod](p11trustmod/) 是专门为信任数据库设计的。如果您正在实现一个用作信任数据库的 PKCS#11 模块,您可能会发现 p11trustmod 比 pkcs11mod 或 p11mod 使用起来更顺手。另一方面,p11trustmod 要新得多,且经过的实战测试较少,因此您可能会发现 pkcs11mod 或 p11mod 更可靠。 ## 开发重点/状态 pkcs11mod 的开发主要由 Namecoin 的用例驱动;因此,我们目前实现的 PKCS#11 功能主要是 NSS 证书验证器和 NSS 的 CKBI(内置证书)等 PKCS#11 模块等应用程序所使用的功能。我们不反对实现 PKCS#11 规范的其余部分(并且我们很乐意接受这方面的 pull request),但我们不太可能在与我们无关的功能上花费大量空闲时间。 虽然我们确实计划将来在生产环境中使用 pkcs11mod,但它尚未用于生产,而且 pkcs11mod 中任何可怕的 Bug 可能还没被我们注意到。 ## 使用 pkcs11mod 的项目 * [ncp11](https://github.com/namecoin/ncp11) ## 致谢 / 许可证 版权所有 (C) 2018-2025 Namecoin 开发者 pkcs11mod 是自由软件;您可以根据自由软件基金会发布的 GNU 宽通用公共许可证的条款重新分发它和/或修改它;要么是许可证的 2.1 版,要么(根据您的选择)任何更高版本。 分发 pkcs11mod 是希望它有用,但没有任何保证;甚至没有适销性或特定用途适用性的暗示保证。有关更多详细信息,请参阅 GNU 宽通用公共许可证。 您应该已经收到一份 GNU 宽通用公共许可证副本以及 pkcs11mod;如果没有,请写信给 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA pkcs11mod 基于以下内容: * https://github.com/miekg/pkcs11 * BSD 3-Clause 许可证 * https://github.com/Pkcs11Interop/pkcs11-mock * Apache 2.0 许可证 * https://github.com/pipelined/vst2 * MIT 许可证
标签:ABI, Cloudformation, CVE, C语言接口, DNS解析, Go语言, HSM, Namecoin, PKCS#11, SamuraiWTF, 中间件, 令牌, 加密库, 后端开发, 安全模块, 密码学, 库开发, 开发框架, 开源项目, 手动系统调用, 数字签名, 日志审计, 程序破解, 系统编程, 跨语言调用