PKCS # 11 C_WrapKey возвращает CKR_GENERAL_ERROR - PullRequest
0 голосов
/ 16 октября 2018

Я последовал примеру: https://pkcs11interop.net/doc/_high_level_a_p_i_2_24__wrap_and_unwrap_key_test_8cs-example.html

, чтобы обернуть симметричные ключи с помощью клавиш rsa, и это сработало.

То, чего я пытаюсь добиться, - это обернуть асимметричный ключ (rsa privateключ) вместо.Все, что я сделал, это заменил переменную secretKey на ObjectHandle закрытого ключа.Однако я получаю CKR_GENERAL_ERROR каждый раз, когда вызываю функцию Wrapkey.

Может кто-нибудь объяснить, почему это не сработает?Я не смог найти в спецификациях ничего, что препятствует переносу асимметричных ключей.

Закрытый ключ был создан со следующими атрибутами:

List<ObjectAttribute> privateKeyAttributes = new List<ObjectAttribute>();
privateKeyAttributes.Add(new ObjectAttribute(CKA.CKA_TOKEN, true));
privateKeyAttributes.Add(new ObjectAttribute(CKA.CKA_PRIVATE, true));
privateKeyAttributes.Add(new ObjectAttribute(CKA.CKA_ID, ConvertUtils.HexStringToBytes(id)));
privateKeyAttributes.Add(new ObjectAttribute(CKA.CKA_SENSITIVE, false));
privateKeyAttributes.Add(new ObjectAttribute(CKA.CKA_DECRYPT, true));
privateKeyAttributes.Add(new ObjectAttribute(CKA.CKA_SIGN, true));
privateKeyAttributes.Add(new ObjectAttribute(CKA.CKA_SIGN_RECOVER, true));
privateKeyAttributes.Add(new ObjectAttribute(CKA.CKA_EXTRACTABLE, true));

С уважением,

1 Ответ

0 голосов
/ 16 октября 2018

Вы, похоже, пытаетесь обернуть закрытый ключ RSA, используя CKM_RSA_PKCS mechanim.Глава 12.1.6 спецификации PKCS # 11 v2.20 гласит:

Механизм RSA PKCS # 1 v1.5, обозначаемый CKM_RSA_PKCS, является многоцелевым механизмомоснованный на криптосистеме с открытым ключом RSA и форматах блоков, изначально определенных в PKCS # 1 v1.5.

...

Этот механизм может обернуть и развернуть любой секретный ключ соответствующей длины.Конечно, определенный токен может не иметь возможности обернуть / развернуть каждый секретный ключ соответствующей длины , который он поддерживает.Для переноса «вход» в операцию шифрования - это значение атрибута CKA_VALUE ключа, который упакован;аналогично для распаковки.

В спецификации PKCS # 11 термин секретный ключ используется только для симметричных ключей.Более того, атрибут CKA_VALUE недопустим для закрытых ключей RSA.Это не сработает.

Лучше всего собрать документацию по вашему устройству / библиотеке и выбрать другой механизм упаковки, соответствующий вашим потребностям.

...