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