4

現在、jarsigner を使用して jar に署名しています。次に、いくつかの特定のクラスの SHA1-Digest 値をいくつか表示して、リリース間でコードが変更されていないことを外部監査人に証明します。

META-INF/xxx.SFダイジェスト情報を取得するためにファイルのみに依存し、META-INF/xxx.DSA署名ブロック ファイルは使用しません。

コードではダイジェスト計算のみが必要なので、.SF実際にキーを使用せずに Java ツールでファイルを生成できるかどうか疑問に思っていました。

http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.htmlを読みましたが、キーが必須のようです。

4

2 に答える 2

7

これは可能なはずです。MANIFEST.MF ファイルには、それぞれのクラス ファイルの Base64 でエンコードされた SHA-1 が含まれています。

ドキュメントから:

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. これは「KeyAgreement.class」の Base64(SHA1-1) です (パスは関係ありません)。3 番目の空行に注意してください。行末は CRLF (Windows) です。

  3. META-INF/4JCEJARS.SF エントリ

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

これはファイルのハッシュではなく、上記の 3 行のハッシュです。

于 2012-02-14T13:52:06.017 に答える
1

署名の検証に失敗します...

なんで?

JAR ファイルの検証 -> .SF ファイル自体の署名を検証します。

つまり、検証により、各署名ブロック (.DSA) ファイルに格納されている署名が実際に、証明書 (または証明書チェーン) が .DSA ファイルにも表示される公開鍵に対応する秘密鍵を使用して生成されたことが保証されます。また、署名が対応する署名 (.SF) ファイルの有効な署名であることを確認し、.SF ファイルが改ざんされていないことを確認します。

詳細については http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jarsigner.html

于 2014-05-14T18:47:16.250 に答える