Возможно ли иметь SHA1-дайджест в файле манифеста Java без фактического использования ключа - PullRequest
4 голосов
/ 14 февраля 2012

В настоящее время мы используем jarsigner, чтобы подписать нашу банку.Затем мы отображаем некоторые значения SHA1-Digest для некоторых конкретных классов, чтобы доказать внешнему аудитору, что код не менялся между выпусками.

Мы используем только файл META-INF/xxx.SF для получения информации дайджеста, и мы никогдаиспользуйте файл блока подписи META-INF/xxx.DSA.

Поскольку в нашем коде нужен только дайджест, мне было интересно, возможно ли сгенерировать файл .SF с помощью некоторого инструмента Java без фактического использования ключа?.

Я прочитал http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html, но похоже, что ключ обязателен.

Ответы [ 2 ]

7 голосов
/ 14 февраля 2012

Это должно быть возможно.Файл MANIFEST.MF содержит SHA-1 в кодировке Base64 соответствующего файла класса.

Из вашего документа:

In the manifest file, the SHA digest value for each source file is the
digest (hash) of the binary data in the source file. In the .SF file,
on the other hand, the digest value for a given source file is the
hash of the three lines in the manifest file for the source file.

Итак, итерируйте по всем файлам классов, вычислите SHA-1, отформатируйте его так, как он отображается в файле MANIFEST.MF, затем хэшируйте его и отформатируйте так, как он отображается в файле SF.

Нет ключа, связанного с вычислением.

Пример: рассмотрим "jce1_2_2.jar "(или что вы правильно подписали).Это содержит

  1. MANIFEST.MF записи вида

    Name: javax/crypto/KeyAgreement.class
    SHA1-Digest: c2p0JimzpV0dG+NChGLl5cI7MuY=
    <empty line>
    
  2. , которые являются Base64 (SHA1-1) из "KeyAgreement.class"(путь не имеет значения).Обратите внимание на третью пустую строку.Концами строк являются CRLF (Windows).

  3. META-INF / 4JCEJARS.SF запись

    Name: javax/crypto/KeyAgreement.class
    SHA1-Digest: whGBXE+AvYO6wAoVCdnocOPIrsE=
    

, которая является хешем нефайл, но из этих трех строк выше.

1 голос
/ 14 мая 2014

Проверка подписи завершится неудачей ...

Почему?

Проверка файла JAR -> Проверка подписи самого файла .SF.

То есть проверкагарантирует, что подпись, хранящаяся в каждом файле блока подписи (.DSA), действительно была сгенерирована с использованием закрытого ключа, соответствующего открытому ключу, сертификат (или цепочка сертификатов) которого также присутствует в файле .DSA.Это также гарантирует, что подпись является действительной подписью соответствующего файла подписи (.SF), и, таким образом, файл .SF не был подделан.

Для получения дополнительной информации http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jarsigner.html

...