我正在使用softHSM(带有go库的FWIW https://github.com/ThalesIgnite/crypto11,此处的文档https://pkg.go.dev/github.com/ThalesIgnite/crypto11?tab=doc)。
我的目标是存储一个用于加密对象的“主密钥”(AES256),类似于 AWS S3 在 HSM 设备中所做的事情(因为它更安全)。从该密钥中,只需派生我需要加密我的对象(或解密它们)的任何其他密钥。
我无法理解 HSM 中生成的密钥以后如何被同一个软件程序检索。我看到 API 提到了一个context
..
改写:当我像这样在 HSM 中生成密钥时:
func TestFindingAllKeys(t *testing.T) {
withContext(t, func(ctx *Context) {
for i := 0; i < 10; i++ {
id := randomBytes()
key, err := ctx.GenerateSecretKey(id, 128, CipherAES)
require.NoError(t, err)
defer func(k *SecretKey) { _ = k.Delete() }(key)
}
keys, err := ctx.FindAllKeys()
require.NoError(t, err)
require.NotNil(t, keys)
require.Len(t, keys, 10)
})
}
我如何将这些密钥之一与我的程序数据(例如 S3 存储桶或客户)“关联”?如何再次检索相同的密钥(即使我无法将其从 HSM 中转储)以在以后解密数据?
我错过了这个看似愚蠢但至关重要的联系:以后如何再次检索先前生成的密钥?