miekg/pkcs11
GitHub: miekg/pkcs11
PKCS#11 的 Go 语言封装库,用于在 Go 程序中操作硬件安全模块(HSM)和加密令牌。
Stars: 426 | Forks: 141
# PKCS#11
这是一个 PKCS#11 API 的 Go 实现。它紧密封装了该库,但在合适的地方使用了 Go 惯用语。已通过 SoftHSM 测试。
## SoftHSM
* 使其使用自定义配置文件 `export SOFTHSM_CONF=$PWD/softhsm.conf`
* 然后使用 `softhsm` 对其进行初始化
softhsm --init-token --slot 0 --label test --pin 1234
* 然后使用 `libsofthsm2.so` 作为 pkcs11 模块:
p := pkcs11.New("/usr/lib/softhsm/libsofthsm2.so")
## 示例
一个骨架程序看起来大概是这样的(是的,pkcs#11 很冗长):
```
p := pkcs11.New("/usr/lib/softhsm/libsofthsm2.so")
err := p.Initialize()
if err != nil {
panic(err)
}
defer p.Destroy()
defer p.Finalize()
slots, err := p.GetSlotList(true)
if err != nil {
panic(err)
}
session, err := p.OpenSession(slots[0], pkcs11.CKF_SERIAL_SESSION|pkcs11.CKF_RW_SESSION)
if err != nil {
panic(err)
}
defer p.CloseSession(session)
err = p.Login(session, pkcs11.CKU_USER, "1234")
if err != nil {
panic(err)
}
defer p.Logout(session)
p.DigestInit(session, []*pkcs11.Mechanism{pkcs11.NewMechanism(pkcs11.CKM_SHA_1, nil)})
hash, err := p.Digest(session, []byte("this is a string"))
if err != nil {
panic(err)
}
for _, d := range hash {
fmt.Printf("%x", d)
}
fmt.Println()
```
更多示例包含在测试中。
若要通过 [crypto.Signer 接口](https://golang.org/pkg/crypto/#Signer) 暴露 PKCS#11 密钥,请参阅 [github.com/thalesignite/crypto11](https://github.com/thalesignite/crypto11)。
标签:Crypto, CVE, EVTX分析, Go, Go语言, HSM, PKCS#11, Ruby工具, SamuraiWTF, SoftHSM, 中间件, 加密, 安全令牌, 密码学, 密码服务, 封装库, 开发库, 手动系统调用, 接口包装, 数字签名, 日志审计, 漏洞扫描器, 硬件安全模块, 程序破解