Развернутый ключевой объект через библиотеку Pkcs11Interop не сохраняется в Thales Luna HSM.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Развернутый ключевой объект через библиотеку Pkcs11Interop не сохраняется в Thales Luna HSM.

Сообщение Anonymous »

Я использую библиотеку Pkcs11Interop в приложении .Net для связи с Thales Luna HSM. И развертывание ключа AES через ключ RSA с использованием механизма CKM_RSA_PKCS.
Но развернутый ключ AES не сохраняется в HSM, хотя я получаю дескриптор объекта в ответ на вызов развертывания. Я даже могу зашифровать некоторые данные, используя развернутый ключ AES, используя тот же объект сеанса. Я пропустил какой-либо параметр, который запрещает сохранение ключа в HSM при вызове развертывания? Вот фрагмент кода:

Код: Выделить всё

private void keyUnwrap() {

string wrappedKey = "81C6CAD32431D506113CB07A515422ED55779CEE8B8A927C9898496F3209EC115EACAE2F59673A5F1423C6878A99FAD68E9741876A2605B2969953918BB9F6D15A4120A12F69EB2C752E8634B11ABB8FD709C072765361A0FAD7877CC3B8A78F500B4E3C8107BBDBE2DB0E82061EFB6E9FC885CAC5D0575324350D2FCAA08C89401F3B6ABEFA425A922A6A0F9FD2F61FCF37DDF9F7BF918B7C2C9228F033AC3EC2F35561FA0F7D397245CC37B2BEEDFB8028A0249DB8A7D13B22384C474629473FF153BAEEA06659F2A1B521066CB39835C7B3F18D7D33249834AC9667718564A2F8E46AA40A9EB7DFC365BA9C5A784599A2D99BD2F4E1462C849E2ED54D448B";

List allSlots = pkcs11Library.GetSlotList(SlotsType.WithTokenPresent);

using (ISession session = slot[0].OpenSession(SessionType.ReadWrite)) {

// Login as normal user
session.Login(CKU.CKU_USER, "CO_PIN");

// get private key object
IObjectHandle privateKey = findObject(session, CKO.CKO_PRIVATE_KEY, "Wrapping_RSA_Key_Pair_PRV");

// Specify wrapping mechanism
IMechanism mechanism = session.Factories.MechanismFactory.Create(CKM.CKM_RSA_PKCS);

// Define attributes for unwrapped key
List objectAttributes = new List();
objectAttributes.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_CLASS, CKO.CKO_SECRET_KEY));
objectAttributes.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_KEY_TYPE, CKK.CKK_AES));
objectAttributes.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_ENCRYPT, true));
objectAttributes.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_DECRYPT, true));
objectAttributes.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_LABEL, "Unwrapped_AES_Key"));

// Unwrap key
IObjectHandle unwrappedKey = session.UnwrapKey(mechanism, privateKey, StringToByteArray(wrappedKey), objectAttributes);
IObjectHandle newkey = findObject(session, CKO.CKO_SECRET_KEY, "Unwrapped_AES_Key");

if (newkey == null) {
throw new Exception("Unwrapped object nit found.");
}
}
}

private IObjectHandle findObject(ISession session, CKO objectClass, string label) {
// Prepare attribute template that defines search criteria
List objectAttributes = new List();
objectAttributes.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_CLASS, objectClass));
objectAttributes.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_LABEL, label));
// Initialize searching
session.FindObjectsInit(objectAttributes);
// Get search results
List foundObjects = session.FindObjects(1);
// Terminate searching
session.FindObjectsFinal();

if (foundObjects.Count > 0) {
return foundObjects[0];
}

return null;
}

public static byte[] StringToByteArray(string hex)
{
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
Я пытался развернуть ключ AES в Thales Luna HSM, используя библиотеку .Net Pkcs11Interop.
Развертывание прошло успешно, поскольку я получил дескриптор развернутого ключа и может зашифровать данные с его помощью в том же сеансе pkcs11, но развернутый ключ не сохраняется в HSM, в чем и заключается проблема.

Подробнее здесь: https://stackoverflow.com/questions/788 ... -in-thales
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»