0

我正在使用一些坚持CKM_AES_KEY_WRAP用于解包 AES 加密密钥的 PKCS#11 令牌。在这些令牌上,CKM_AES_CBC朋友们不支持 unwrap。

因此,在该系统的另一端,我需要使用通过 Java 访问的 PKCS#11 令牌来包装密钥。

SunPKCS11似乎不支持CKM_AES_KEY_WRAP. 据我所知,IAIK 也没有。有没有人对在 Java 中实现这一点有任何建议?

4

1 回答 1

1

CKM_AES_KEY_WRAP是一种相当简单的机制,因此您不需要 PKCS#11 包装器库来提供良好的常量或枚举成员来使用它。

只要您的 PKCS#11 包装库允许您将包装机制指定为 asulong并将其参数指定为byte[]. SunPKCS11 非常有限,所以我会先尝试 IAIK。

以下代码示例演示了使用 .NET 的Pkcs11Interop包装器的想法:

// Acquire handle to keys
ObjectHandle wrappingKey = new ObjectHandle();
ObjectHandle toBeWrappedKey = new ObjectHandle();

// Define mechanism yourself
ulong CKM_AES_KEY_WRAP = 0x00002109;
byte[] CKM_AES_KEY_WRAP_PARAM = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
Mechanism mechanism = new Mechanism(CKM_AES_KEY_WRAP, CKM_AES_KEY_WRAP_PARAM);

// Perform wrapping
byte[] wrappedKey = session.WrapKey(mechanism, wrappingKey, toBeWrappedKey);
于 2018-04-21T13:19:51.167 回答