2

PDF Signer/Validator に取り組んでいますが、複数の署名と dss 辞書を含む PDF ファイルをどのように処理すればよいかわかりません。

シナリオは次のとおりです。PDF ファイルが 2 回署名され、2 回目の署名の後、両方の署名の CRL、CERT、および OCSP を含む DSS ディクショナリが追加されます。

[ Signature 1 ]
[ Signature 2 ]
DSS << 
    VRI << 
        /HashSignature1 10 0 R
        /HashSignature2 11 0 R
    >>
    ...
>>

ここまでは順調ですね。両方の署名は、ドキュメントの唯一の DSS ディクショナリでカバーされています。しかし、他の誰かがこの同じ文書に署名し、CRL やその他すべてを追加することにしました。次に、新しい DSS ディクショナリを作成する必要があります。私の質問は、別の DSS ディクショナリで既にカバーされている古い署名を、このディクショナリに含める必要があるかどうかです。DSS は更新されたドキュメント カタログ内にある (そして最後の辞書への参照を削除した) ため、私はそう思いますが、社内での合意はほとんどありません。

[ Signature 1 ]
[ Signature 2 ]
DSS << 
    VRI <<
        /HashSignature1 10 0 R
        /HashSignature2 11 0 R
    >>
    ...
>>
[ Signature 3 ]
DSS << 
    VRI <<
        /HashSignature1 10 0 R
        /HashSignature2 11 0 R
        /HashSignature3 16 0 R
    >>
    ...
>>

また

[ Signature 1 ]
[ Signature 2 ]
DSS << 
    VRI <<
        /HashSignature1 10 0 R
        /HashSignature2 11 0 R
    >>
    ...
>>
[ Signature 3 ]
DSS << 
    VRI <<
        /HashSignature3 16 0 R
    >>
    ...
>>

どちらも正しいですか?それらの1つだけですか?1と?

4

2 に答える 2

4

Adobe の Andrea Valle が電子メールで次のように説明してくれました。

これは ESI 内でしばらく議論されてきましたが、最終的にチームは EN 319 142-1 でこれを明確にすることを決定しました。

バージョン 1.1.0 の 11 ページのセクション 5.4.1 を参照してください。

保護の有効期間は、新しいドキュメント タイムスタンプと共に前の最後のドキュメント タイムスタンプを検証するための DSS 情報をさらに追加することにより、適用された最後のドキュメント タイムスタンプの有効期間を超えてさらに延長できます。増分更新中に DSS ディクショナリが更新されるたびに、以前の DSS ディクショナリの値が含まれている必要があります。

注: 一般に、DSS ディクショナリには、以前のリビジョンからの検証データと、現在のリビジョンに追加された検証データが含まれます。増分更新中にエントリが DSS ディクショナリから削除された場合、検証データのセットは署名の検証のために完全ではない可能性がありますが、検証データの置換 (より最新の証明書ステータス情報など) が最適化のために実行される場合があります。理由。

そのため、実際には古い DSS 辞書からすべてのエントリを追加することをお勧めしますが、必須ではありません。署名が壊れていなければこれらのエントリを更新できますが、これはオプションです。

同じドキュメントをもう少し読んでみましょう:

ドキュメント セキュリティ ストア (DSS) は、ドキュメント カタログ ディクショナリのキーとして値 DSS を持つディクショナリです。このディクショナリは、ドキュメント内の一部またはすべての署名に関するすべての検証関連情報を配置する単一の場所を提供するために使用されます。

DSS は、すべての情報を配置する単一の場所を提供することを目的としています。

したがって、そこにすべての情報を配置しなくても、何も壊れることはありませんが、意図したとおりに DSS を使用していません。

答えは、pdf 署名者は最初のアプローチを使用する必要がありますが、pdf バリデーターは 2 番目のアプローチに備える必要があります。


編集:

実際には、どの PAdES バリデータも DSS エントリが以前に存在していたかどうかをチェックする必要があります。最新のものだけをチェックすると、CRL または OCSP の署名に使用された CA 証明書が後で侵害され、この偽の情報が最新の DSS に追加された場合、無効な署名を再検証することができます。

例:

  1. Sig 1 は失効した証明書で作成されました
  2. すべての DSS エントリが追加され、署名は確実に無効になります
  3. DocumentTimeStamp が追加され、この DSS が保護されます。

  4. Sig 1 CA 証明書が侵害されています

  5. 有効な証明書を使用して Sig 2 が作成されます

  6. Sig 2 DSS エントリが追加され、署名の LTV が有効になります
  7. Sig 1 CRL/OCSP は、侵害された CA 証明書で作成された偽物に置き換えられます

この状況では、最新の DSS に依存するバリデーターは、Sig 1 を検証すべきでないときに検証します。そのため、その署名に関する情報を保護するために DocumentTimeStamp を追加します。


TL;DR:

どちらの選択肢も正しいです。DSS にはすべての署名に関する情報が含まれている必要がありますが、必須ではありません。また、バリデーターは、最新のものだけでなく、署名の直後に作成された DSS をチェックする必要があります。

于 2016-04-07T21:37:35.947 に答える
0

カタログ ディクショナリには DSS エントリが 1 つしかないため、既存の DSS ディクショナリ (VRI ディクショナリとその他の値) を更新する必要があります。

于 2016-04-07T15:05:01.240 に答える