2015-11-01 6 views
0

В моем проекте мне нужно проверить прозрачные подписанные подписки PGP с использованием соответствующего открытого ключа. Хотя мне удалось найти код, который делает это (например: https://github.com/cjmalloy/openbitpub/blob/64485d64a699eb6096f01b27d5f7e51dd726602f/src/main/java/com/cjmalloy/obp/server/pgp/PgpUtil.java), он работает на низком уровне и выглядит довольно ужасно.PGP читатель формата подписи

Я думал, возможно, существуют некоторые специализированные синтаксические анализаторы, которые могут потреблять -----BEGIN PGP PUBLIC KEY BLOCK-----xxx-----END PGP PUBLIC KEY BLOCK----- и -----BEGIN PGP SIGNED MESSAGE-----xxx-----BEGIN PGP SIGNATURE-----xxx-----END PGP SIGNATURE----- блоков, чтобы я мог проверить подписи более декларативным способом?

Я нашел связанный PEMReader класс от bouncycastle.openssl пакет, но ничего не PGP-связанный до сих пор.

ответ

2

Я думал, может быть, существуют какие-то специализированные парсеры, которые могут потреблять -----BEGIN PGP PUBLIC KEY BLOCK-----xxx-----END PGP PUBLIC KEY BLOCK----- и -----BEGIN PGP SIGNED MESSAGE-----xxx-----BEGIN PGP SIGNATURE-----xxx-----END PGP SIGNATURE----- блоки таким образом я могу проверить подписи в более декларативно?

Анализатор не будет достаточно на всех - вам нужно будет реализовать множество OpenPGP-специфических функций, таких как симметричного ключа вывода из строк (для зашифрованных ключей), обработка различных типов асимметричных алгоритмов шифрования, хэш-сумм , различные типы вложенных пакетов, ... - по крайней мере, вам не требуется внедрять режим сокращения строк OpenPGP CBC, поскольку вам не требуется шифрование (только подписи).

OpenPGP много сложно написать собственный синтаксический анализатор и криптокоды, вместо этого полагайтесь на существующие библиотеки. В конце концов, с Java у вас есть два возможных дороги, чтобы следовать:

  • Использование GnuPG через GPGME's Java interface, что требует локальной установки GnuPG.
  • Использование Bouncy Castle for Java, который имеет довольно полную реализацию OpenPGP в собственном Java-коде, но вам потребуется выполнить все криптографические операции в Java. Документация в значительной степени состоит из JavaDoc for the OpenPGP package.

Я нашел связанные PEMReader класс от bouncycastle.openssl пакета, но ничего PGP, связанные с до сих пор.

Возможно, вы обнаружили неправильный пакет BouncyCastle. OpenPGP не использует ключи в формате PEM (который относится к стандарту X.509), поэтому этот класс не будет полезен вообще.

+0

Конечно, я собираюсь использовать 'bouncycastle.openpgp' для проверки подписи, я делаю это сейчас. Просто у меня много кода, на котором я разбираюсь (можно увидеть в ссылочном примере, например, по очереди, отбрасывая разрывы строк и т. Д.). Я понимаю, что «PEMReader» не совсем то, что мне нужно, но оно близко. Существование 'PEMReader' заставляет меня задаться вопросом, существует ли что-то подобное для PGP. – Anton

+0

Я никогда не работал с Bouncy Castle, но насколько мне известно, вам придется импортировать открытый ключ, загрузите подписанный файл (посмотрите на 'gpg -list-packets', чтобы понять, как их отменить, если необходимо, в Bouncy Castle) и, наконец, выполнить проверку. Документация за пределами JavaDoc редка, вы можете найти некоторые разумные примеры в другом месте в Интернете. –

+1

Только частный ключ S2K; проверка использует открытый ключ. В противном случае согласитесь. –

Смежные вопросы