domanda relativa ai tag implicitamente in ASN.1

2

Da RFC X.509, nella sezione "Modulo con tag implicito":

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 }

Come sarebbe codificato x400Address? Ti piace?:

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

Il primo [0] è da DistributionPoint (che sostituisce il tag [0] di DistributionPointName) e [3] è da GeneralName.

Se è così che dovrebbe funzionare, però, perché DistributionPoint ha anche tag specifici del contesto?

    
posta compcert 12.02.2012 - 13:29
fonte

1 risposta

2

Riceverai qualcosa di simile a questo:

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

Spiegazioni :

  1. Anche se i tag dovrebbero essere impliciti (a causa di essere in un modulo dichiarato con IMPLICIT TAGS ), i tag impliciti non possono essere applicati a CHOICE (perché altrimenti CHOICE non funzionerebbe a tutto), quindi vengono automaticamente convertiti in tag espliciti in quella situazione. Qui, il tag [0] sul campo distributionPoint si trova in una situazione del genere, quindi avvolge, invece di sostituire, il tag del campo DistributionPointName , che è anche un [0] .

  2. Si noti che fullName ha tipo GeneralNames , non GeneralName . Non citi GeneralNames nel tuo messaggio; è un SEQUENCE OF GeneralName . Il tag implicito [0] del campo fullName , essendo implicito, sostituisce quello del SEQUENCE .

Per il primo punto, è specificato in X.680, clausola 28.6 (dalla versione del 1994):

The tagging construction specifies explicit tagging if any of the following holds:

a) the "Tag EXPLICIT Type" alternative is used;

b) the "Tag Type" alternative is used and the value of "TagDefault" for the module is either "EXPLICIT TAGS" or is empty;

c) the "Tag Type" alternative is used and the value of "TagDefault" for the module is "IMPLICIT TAGS" or "AUTOMATIC TAGS", but the type defined by "Type" is a choice type, open type, or a "DummyReference" (see ITU-T Rec. X.683 | ISO/IEC 8824-4, clause 8.3).

L'ultima clausola (c) è ciò che spiego sopra.

    
risposta data 12.02.2012 - 16:30
fonte

Leggi altre domande sui tag