2

XML Advanced Electronic Signaturesを勉強しています。

「ArchiveTimeStamp」(58ページ)を作成するには、仕様には次のように記載されています。

取得した ds:Reference 要素を XMLDSIG の参照処理モデルに従って処理します。

結果が XML ノード セットの場合は、それを正規化します。(...)

参照処理モデルは次のとおりです。

<ds:Reference Id="myId" URI="http://fakefile.xml">
    <ds:Transforms>
        <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
    </ds:Transforms>
    <ds:DigestMethod/>
    <ds:DigestValue/>
</ds:Reference>

このプロセスでは、「URI=...」と「ds:Transforms」を使用してデータを取得します。

以下は、( 4.3.3.2 The Reference Processing Model )から一部を抜粋したものです。

URI デリファレンスまたは後続の変換の結果のデータ型は、オクテット ストリームまたは XPath ノード セットのいずれかです。(...)

この仕様では、「同じドキュメント」参照は、ハッシュ記号 (「#」) の後にフラグメントが続くか、または空の URI (...) で構成される URI 参照として定義されます。

URI 参照がそのような「同じドキュメント」参照でない限り、URI 参照の逆参照の結果はオクテット ストリームでなければなりません。特に、URI によって識別される XML ドキュメントは、URI が同一ドキュメント参照でない限り、または XML 解析を必要とする変換が適用されない限り、署名アプリケーションによって解析されません。

次の例は、URI 属性が何を識別し、どのように逆参照されるかを示しています。

URI="http://example.com/bar.xml"
オクテットを識別します (...)

URI="http://example.com/bar.xml#chapter1"
オクテット ストリームとして提供される外部 XML リソース (...) の ID 属性値「chapter1」を持つ要素を識別します。(...)

URI=""
ノードセットを識別します (...)

URI="#chapter1"
(...) を含むノードセットを識別します

質問。

これらの参照について:

<ds:Reference Id="myId" URI="http://fakefile.xml">
...
(empty transform list)
...
</ds:Reference>

結果 1#: ( <file> ... childs ... <file>)。Digest Transform 適用なし

<ds:Reference Id="myId" URI="http://fakefile.xml">
...
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
...
</ds:Reference>

結果 2#: ( xml with exc-c14n)。Digest Transform 適用なし

<ds:Reference Id="myId" URI="http://fakefile.xml">
...
<ds:Transform "fake_Xpath_transform_to_get_all_childs"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
...
</ds:Reference>

結果 3#: ( exc-c14n を持つ子のみ<child_1/>...<child_x/>) Digest Transform を適用しません。これは解析する有効な XML ファイルではありません。ルートが 1 つではありません。ただし、fakefile.xml コンテキストでは「ノード セット」にすることができます。

結果 (1#、2#、および 3#) は「オクテット ストリーム」ですか?

理由: URI 参照がそのような「同じドキュメント」参照でない限り、URI 参照の逆参照の結果はオクテット ストリームである必要があります。

それとも、XML Advanced Electronic Signatures が正規化するために必要な「XML ノード セット」ですか?

理由: (...) 特に、URI によって識別される XML ドキュメントは、URI が同一ドキュメント参照でない限り、または XML 解析を必要とする変換が適用されない限り、署名アプリケーションによって解析されません。

または (XML 解析を必要とする変換が適用されない限り) は参照コンテキストでのみ有効で、結果はオクテット ストリームですか?

記事は大歓迎です。

4

1 に答える 1

3

それらはすべてオクテット ストリーム、つまりバイナリですが、処理は異なります。

参照処理モデルセクションに加えて、以下の説明のためにTransforms 要素セクションも考慮してください。

1 : http://fakefile.xmlは同じドキュメント参照ではなく、

URI 参照がそのような「同じドキュメント」参照でない限り、URI 参照の逆参照の結果はオクテット ストリームでなければなりません。

変換がないため、このオクテット ストリームがダイジェスト計算の入力になります。

2 : 1 で述べたように、http://fakefile.xmlは同じドキュメント参照ではないため、変換の入力はオクテット ストリームです。

正規化変換は XML ノードに対して機能するため、参照処理モデルのセクションで説明されているように、その入力を XML ノード セットに変換する必要があります。

データ オブジェクトがオクテット ストリームであり、次の変換でノード セットが必要な場合、署名アプリケーションは、[XML] 整形式処理を介して必要なノード セットを生成するオクテットの解析を試行する必要があります。

正規化変換の出力は、定義上、オクテット ストリームです。

3 : 1 で述べたように、http://fakefile.xmlは同じドキュメント参照ではないため、変換の入力はオクテット ストリームです。

XPath 変換は XML ノードで機能します。つまり、オクテット ストリームをノード セットに変換する必要があります (セクションXPath フィルタリングで再度説明します)。XPath 変換の出力もノード セットです。

次の変換は正規化であり、入力として XML ノード セットが必要です。入力/出力は連鎖しているため ( Transforms 要素セクション)、前の出力は既にノード セットであったため、変換は必要ありません。

最後に、正規化変換の出力は、定義上、オクテット ストリームです。


あなたの例では、変換の出力は常にオクテット ストリームですが、たとえば、単一の XPath 変換がある場合、変換の結果は XML ノード セットになります。次に、ArchiveTimeStamp プロパティ定義の必要に応じて正規化する必要があります。この場合、ArchiveTimeStamp プロパティ自体で定義された正規化アルゴリズムを使用するか、指定されていない場合は XML-DSIG のデフォルトを使用します。

お役に立てれば。

于 2013-08-30T21:02:00.720 に答える