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