Как работают JCA/JCE и PKCS # 11 (вместе)?

Я хочу использовать HSM (аппаратный модуль безопасности) для создания подписи файла XML. Я немного поработал, и теперь я немного смущен.

Можете ли вы прояснить эти вопросы:

  • Что подразумевается под ключом в JCE? Я прочитал об этом, что это всего лишь дескриптор, и ключ хранится где-то в другом месте. Как это может быть? По моему мнению, я либо загружаю ключ в память и использую его, либо подписывание полностью выполняется HSM, и я получаю результат, правильно?
  • Определяет ли стандарт PKCS # 11 способ, с тем чтобы подпись генерировалась в HSM? Я читал о токенах, но я не уверен в подписании.
  • В списке моих HSM указано JCE и PKCS # 11 отдельно. Что это значит?
  • Я думал, что PKCS # 11 является стандартом, а JCE определяет классы для использования этого стандарта. Указывает ли JCE собственные протоколы?

Ответ 1

  • Что подразумевается под ключом в JCE?
    Ключевой дескриптор (в JCE, PKCS # 11 или большинстве криптографических API) - это просто ссылка, которая позволяет вам использовать ключ, не видя его фактического значения. Это хорошо: вы можете постоянно хранить ключ в безопасном месте (например, HSM) с уверенностью, что никто не сможет его скопировать и убежать - как это может произойти, если ключ является прикладным пространством. Однако, в отличие от физического безопасного, вы все равно можете выполнять криптографическую операцию, не подвергаясь угрозе безопасности при утечке ключа.

  • Определяет ли стандарт PKCS # 11 способ, с тем чтобы подпись была сгенерирована в HSM?
    PKCS # 11 - это API C для криптографических токенов. Токен представляет собой абстракцию PKCS # 11 для любого устройства или программы, которая предлагает услуги, описанные таким API. API определяет, какие операции вы можете выполнять с использованием объектов внутри токена PKCS # 11: некоторые объекты нечувствительны и могут быть извлечены (например, открытые ключи); некоторые другие чувствительны и могут использоваться только с помощью ручек.
    Если у вас есть дескриптор объекта, который поддерживает подписи, вы можете использовать функцию C C_Sign, чтобы попросить токен аутентифицировать некоторые данные, предоставленные вашим приложением. Ключ не выходит из HSM.

  • Список функций моих HSM утверждает JCE и PKCS # 11 отдельно. Что это значит?
    Ваш HSM поддерживает JCE в том смысле, что он поставляется с родной библиотекой, которая квалифицируется как поставщик криптографических услуг.
    Он поддерживает PKCS # 11 в том смысле, что он поставляется с собственной библиотекой, которая предлагает C PKCS # 11 API.

  • Я думал, что PKCS # 11 является стандартом, а JCE определяет классы для использования этого стандарта. Указывает ли JCE собственные протоколы?
    Действительно, PKCS # 11 является стандартом; но он не может использоваться непосредственно с помощью языков, отличных от C. Вам нужен слой отображения, который переводит его на нечто совместимое с вашим языком. Библиотека PKCS # 11 (и физические токены, которые она рефератирует) может быть сопоставлена ​​с поставщиком JCE.

Однако поставщик JCE может не иметь ничего общего с PKCS # 11.