OpenPGP в Java JCA

Я понимаю, что OpenPGP — это 'определение набора стандартных форматов для шифрования/подписи'.

Недавно я рекомендовал кому-то использовать Java JCA по умолчанию. вместо bouncycastle в качестве своей библиотеки шифрования, чтобы им не приходилось использовать какие-либо внешние библиотеки. Но потом меня спросили, поддерживает ли Java JCA OpenPGP. Я не знал ответа на этот вопрос. Я даже толком не понял, что означает этот вопрос.

Я просто хочу знать, что означает supporting OpenPGP?

Мы можем зашифровать/подписать Java JCA, используя стандартные алгоритмы, такие как RSA. Так что еще нужно для поддержки OpenPGP?

Никто не рекомендовал JCA в качестве ответа на этот вопрос.


person Anmol Singh Jaggi    schedule 13.02.2019    source источник
comment
На сайте openpgp.org/software можно напрямую увидеть, какие почтовые приложения могут поддерживать стандарт OpenPGP.   -  person Mihai8    schedule 13.02.2019


Ответы (2)


В: Я просто хочу знать, что означает поддержка OpenPGP?
Ответ: Означает, что библиотека поставщика должна соответствовать открытым стандартам PGP, упомянутым в RFC 4880.

Никто не рекомендовал JCA в качестве ответа...
Это сложно, согласно - Как зашифровать сообщение PGP с помощью расширения шифрования Java?

Bouncy Castle — один из поставщиков OpenPGP для платформы Java.
Вы можете проверить других разработчиков на всех платформах здесь.

Пока я учился, JCA, будучи архитектурой для криптографии, имеет свои собственные принципы проектирования. JCA — это базовая криптографическая среда, которую можно использовать с JCE.

person PriyankaW    schedule 13.02.2019
comment
Один вопрос - Зачем там крипто standards? Это потому, что криптоалгоритм, такой как RSA, AES, может быть реализован немного по-разному? - person Anmol Singh Jaggi; 14.02.2019
comment
Кстати, вы задали 2 вопроса :) 1. Зачем существуют криптостандарты? - ну и для защищенной связи конечно. криптостандарты используют другую логику шифрования/дешифрования (которая может формироваться или не формироваться путем ссылки на алгоритмы rsa, aes и т. д. ИЛИ даже на их комбинацию). 2. Это потому, что криптоалгоритмы, такие как RSA, AES, могут быть реализованы немного по-разному? - Я не мог получить этот вопрос. Если крипто-реализация не соответствует RSA, тогда ее реализация отличается от крипто-реализации. Вы ищете это? - person PriyankaW; 14.02.2019
comment
Это была интересная статья. Под вторым вопросом я имел в виду, что представляет собой protocol? Это типы/разновидности поддерживаемых алгоритмов. Или он указывает детали самих алгоритмов. Или какие форматы файлов использовать? - person Anmol Singh Jaggi; 14.02.2019
comment
Например, если мы зашифруем данные с использованием алгоритма OpenPGP RSA, сможем ли мы расшифровать их с помощью реализации RSA, отличной от OpenPGP? - person Anmol Singh Jaggi; 14.02.2019
comment
Означает ли криптостандарт Use algo 'A' for assymetric crypto, algo 'B' for signatures etc.? Или это означает Use algo 'A' with primes ranging from 2^20 to 2^256 as modulus, or use mode 'CBC' for cipher algo 'B' (that is, specifying the inner details of the algo)? - person Anmol Singh Jaggi; 14.02.2019
comment
Пытаюсь ответить короче. 1. что представляет собой протокол? - набор шагов для достижения какой-либо цели. См. раздел Операции RSA. Как реализовать - выбор разработчика. 2. если мы зашифруем данные с использованием алгоритма OpenPGP RSA, сможем ли мы расшифровать их с помощью реализации RSA, отличной от OpenPGP? - стандартным способом - нет. в случае взлома - да. Разработчик должен реализовать достаточную сложность при соблюдении протоколов, чтобы никаким другим способом нельзя было расшифровать его. - person PriyankaW; 14.02.2019
comment
3. Используйте алгоритм «A» для ассиметричного шифрования, алгоритм «B» для подписей… — это определяется архитекторами, аналитиками и т. д., утверждающими стандарт организации. Мы использовали разные алгоритмы для 64-битных и 128-битных каналов связи. - person PriyankaW; 14.02.2019
comment
Давайте продолжим обсуждение в чате. - person PriyankaW; 14.02.2019

Нет, 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
comment
Я задал новый вопрос здесь, чтобы проверить, как библиотека OpenPGP зависит от поставщика Bouncy. - person Maarten Bodewes; 13.02.2019
comment
Спасибо, Мартен! Один вопрос; Почему существуют крипто protocols? Это потому, что криптоалгоритм, такой как RSA, AES, может быть реализован немного по-разному? - person Anmol Singh Jaggi; 14.02.2019
comment
Нет, это потому, что нам недостаточно одного алгоритма для общения. RSA может хранить только такое количество информации. У вас может быть шифрование, которое просто защищает конфиденциальность, или вы можете защитить целостность/подлинность сообщения, или и то, и другое. TLS нельзя заменить только AES, верно? - person Maarten Bodewes; 14.02.2019