Нет, Java JCA — это криптографический API. Он не поддерживает никакие протоколы более высокого уровня, он просто предоставляет относительно высокий уровень доступа к криптографическим алгоритмам. Есть, конечно, один заслуживающий внимания протокол, реализованный в Java: TLS внутри (отдельного) провайдера JSSE. Для этого требуется поддержка использования/проверки сертификатов X.509v3 и т. д., но это все (по понятным причинам JCA очень ориентирован на поддержку TLS в качестве основной цели).
OpenPGP, с другой стороны, является спецификацией протокола, которая не поддерживается Java. Вам нужно будет создать реализацию протокола поверх JCA для поддержки OpenPGP. Однако это именно то, что сделал Bouncy Castle; их реализация зависит от интерфейса JCA, а не от «облегченного» API Bouncy Castle. Таким образом, вы можете использовать библиотеку OpenPGP Bouncy Castle и использовать JCA, например. для поддержки AES-NI или аппаратных ключей. Просто убедитесь, что поставщик JCA, которого вы хотите использовать, имеет более высокий приоритет, чем любые сторонние поставщики, такие как поставщик Bouncy Castle (добавьте его в конец списка поставщиков!).
Конечно, для поддержки некоторых более эзотерических опций (в частности, поддержки определенных кривых EC) вы все равно можете добавить поставщика Bouncy Castle в свою среду выполнения. Модуль Maven OpenPGP по-прежнему указывает поставщика Bouncy Castle в качестве требования для компиляции, но я не уверен, что это не только для тестирования или что библиотека требуется напрямую.
Одна проблема, которая может вызвать затруднения, заключается в том, что PGP использует собственную версию алгоритма шифрования CFB, которая недоступна напрямую у поставщиков по умолчанию в средах выполнения, о которых я знаю. Поэтому вам может потребоваться включить библиотека для этой функциональности. Это также может означать, что для библиотеки недоступно ускорение AES.
person
Maarten Bodewes
schedule
13.02.2019