Как использовать механизм PKCS#11 CKM_AES_KEY_WRAP в Java?

Я работаю с некоторыми токенами PKCS#11, которые настаивают на использовании CKM_AES_KEY_WRAP для распаковки AES-зашифрованных ключей. На этих жетонах CKM_AES_CBC и друзья не поддерживают развертывание.

Поэтому на другом конце этой системы мне нужно обернуть ключ с помощью токена PKCS#11, доступ к которому осуществляется через Java.

SunPKCS11 не поддерживает CKM_AES_KEY_WRAP, Насколько я могу судить, IAIK тоже не делает. У кого-нибудь есть предложения по достижению этого в Java?

1 ответ

CKM_AES_KEY_WRAP это довольно простой механизм, поэтому вам не нужна библиотека-обертка PKCS#11 для предоставления хороших констант или членов enum для ее использования.

С вами все будет в порядке, если ваша библиотека обертки PKCS#11 позволяет вам указать механизм обёртки как 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);
Другие вопросы по тегам