如何在Java中使用PKCS#11 CKM_AES_KEY_WRAP机制?

时间:2018-04-20 09:31:38

标签: java pkcs#11 jce iaik-jce sunpkcs11

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

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

SunPKCS11似乎不支持CKM_AES_KEY_WRAPNeither does IAIK,据我所知。有没有人有任何关于在Java中实现这一目标的建议?

1 个答案:

答案 0 :(得分:1)

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

只要您的PKCS#11包装器库允许您将wrapim指定为ulong并将其参数指定为byte[],您就应该没问题。 SunPKCS11非常有限,所以我会首先尝试使用IAIK。

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

// 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);