我正在使用一些坚持使用CKM_AES_KEY_WRAP
来解包AES加密密钥的PKCS#11令牌。在这些令牌上,CKM_AES_CBC
和朋友不支持解包。
在这个系统的另一端,我需要使用通过Java访问的PKCS#11令牌来包装密钥。
SunPKCS11似乎不支持CKM_AES_KEY_WRAP
。 Neither does IAIK,据我所知。有没有人有任何关于在Java中实现这一目标的建议?
答案 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);