Сгенерировать ключ AES через оболочку IAIK PKCS#11 и показать его значение

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

Для этого я хочу использовать оболочку IAIK PKCS#11.

Я попытался сгенерировать ключ по примеру из пакета IAIK, но безуспешно. Ключ сгенерирован, но я не вижу никакого значения ключа. Что я должен сделать, чтобы увидеть значение ключа, чтобы показать его на экране?

Вот мой код:

Module pkcs11Module = null;
pkcs11Module = Module.getInstance("pkcs11.dll");

Session session = null;
pkcs11Module.initialize(null);

Slot[] slots = pkcs11Module.getSlotList(Module.SlotRequirement.TOKEN_PRESENT);

if (slots.length == 0) {
    output_.println("No slot with present token found!");
    throw new TokenException("No token found!");
}

Slot selectedSlot;
// slot 0
selectedSlot = slots[0];

Token token = selectedSlot.getToken();

session = token.openSession(Token.SessionType.SERIAL_SESSION, Token.SessionReadWriteBehavior.RW_SESSION, null, null);

session.login(Session.UserType.USER, "12345678".toCharArray());

Mechanism keyGenerationMechanism = Mechanism.get(PKCS11Constants.CKM_AES_KEY_GEN);

AESSecretKey aesKey = new AESSecretKey();
aesKey.getValueLen().setLongValue(new Long(32));

AESSecretKey aesKeyNew = (AESSecretKey) session.generateKey(keyGenerationMechanism, aesKey);
output_.println("the AES Key is: ");
output_.println(aesKeyNew.toString());

session.closeSession();
pkcs11Module.finalize(null);

Результаты следующие:

the AES Key is: 
  Object Class: Secret Key
  Token: false
  Private: false
  Modifiable: true
  Label: <NULL_PTR>
  Key Type: AES
  ID: <NULL_PTR>
  Start Date: <NULL_PTR>
  End Date: <NULL_PTR>
  Derive: true
  Local: true
  Key Generation Mechanism: CKM_AES_KEY_GEN
  Allowed Mechanisms: <Attribute not present>
  Sensitive: false
  Encrypt: true
  Decrypt: true
  Sign: false
  Verify: false
  Wrap: true
  Unwrap: true
  Extractable: true
  Always Sensitive: false
  Never Extractable: true
  Check Value: <Attribute not present>
  Wrap With Trusted: <Attribute not present>
  Trusted: <Attribute not present>
  Wrap Template: <Attribute not present>
  Unwrap Template: <Attribute not present>
  Value (hex): <NULL_PTR>
  Value Length (dec): 0

Есть значение (шестнадцатеричное): которое я хочу видеть и показывать на экране. Речь идет о конкретной конфигурации криптографических токенов? Когда я использую другой токен, я вижу это значение.


person user1563721    schedule 29.01.2014    source источник


Ответы (1)


Согласно тому, что вы нам показываете, атрибут PKCS#11, для которого CKA_SENSITIVE установлено значение false, означает, что вы должны иметь возможность просматривать значение. Однако вполне вероятно, что токен не позволяет вам извлечь значение. Большинство таких токенов не полностью реализуют PKCS#11 и позволяют выполнять только определенные операции. Если это так, то должно установить для CKA_SENSITIVE значение false, но это для вас...

Я бы отследил производителя (или, если возможно, разработчика) токена и спросил бы конкретную функциональность, реализованную токеном.

person Maarten Bodewes    schedule 29.01.2014