web-dev-qa-db-ja.com

ASN.1の暗黙的なタグに関する質問

X.509 RFCの「暗黙的にタグ付けされたモジュール」セクション:

CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint

DistributionPoint ::= SEQUENCE {
     distributionPoint       [0]     DistributionPointName OPTIONAL,
     reasons                 [1]     ReasonFlags OPTIONAL,
     cRLIssuer               [2]     GeneralNames OPTIONAL }

DistributionPointName ::= CHOICE {
     fullName                [0]     GeneralNames,
     nameRelativeToCRLIssuer [1]     RelativeDistinguishedName }

GeneralName ::= CHOICE {
     otherName                 [0]  AnotherName,
     rfc822Name                [1]  IA5String,
     dNSName                   [2]  IA5String,
     x400Address               [3]  ORAddress,
     directoryName             [4]  Name,
     ediPartyName              [5]  EDIPartyName,
     uniformResourceIdentifier [6]  IA5String,
     iPAddress                 [7]  OCTET STRING,
     registeredID              [8]  OBJECT IDENTIFIER }

X400Addressはどのようにエンコードされますか?このような?:

SEQUENCE {
  SEQUENCE {
    [0] {
      [3] {
        ...
        }
      }
    }
  }

最初の[0]はDistributionPoint(DistributionPointNameの[0]タグを置き換えます)からのものであり、[3]はGeneralNameからのものです。

しかし、それが機能するはずの場合、DistributionPointにコンテキスト固有のタグがあるのはなぜですか?

2
compcert

次のようなものが得られます。

SEQUENCE {
  SEQUENCE {
    [0] {
      [0] {
        [3] {
          ...
        }
      }
    }
  }
}

説明

  1. タグは暗黙的であると想定されていますが(IMPLICIT TAGSで宣言されたモジュール内にあるため)、暗黙的タグをCHOICEに適用することはできません(そうしないと、CHOICEがまったく機能しないため) 、そのため、その状況では自動的にexplicitタグに変換されます。ここで、distributionPointフィールドの[0]タグはこのような状況にあるため、DistributionPointNameフィールドのタグを置き換えるのではなくラップアラウンドします。これは[0]でもあります。

  2. fullNameのタイプはGeneralNamesnotGeneralNameであることに注意してください。メッセージにGeneralNamesを引用しないでください。それはSEQUENCE OF GeneralNameです。 fullNameフィールドの[0]暗黙タグは、暗黙的であるため、SEQUENCEのタグを置き換えます。

最初の点については、X.680の28.6節(1994バージョンから)で指定されています。

タグ付け構造は、次のいずれかが当てはまる場合に明示的なタグ付けを指定します。

a)「タグEXPLICITタイプ」の代替が使用されます。

b)「タグタイプ」の代替が使用され、モジュールの「TagDefault」の値が「EXPLICITTAGS」であるか空です。

c)「タグタイプ」の代替が使用され、モジュールの「TagDefault」の値は「IMPLICITTAGS」または「AUTOMATICTAGS」ですが、「Type」で定義されるタイプは、選択タイプ、オープンタイプ、または「 DummyReference」(ITU-TRec。X.683| ISO/IEC 8824-4、条項8.3を参照)。

最後の節(c)は私が上で説明したものです。

2
Tom Leek