Как использовать механизм 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?


person Duncan Jones    schedule 20.04.2018    source источник


Ответы (1)


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

У вас все должно быть в порядке, если ваша библиотека-оболочка 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);
person jariq    schedule 21.04.2018
comment
Хорошая идея, я попробую. - person Duncan Jones; 23.04.2018