pregunta sobre etiquetas implícitamente en ASN.1

2

Desde el RFC X.509, en la sección "Módulo etiquetado implícitamente":

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 }

¿Cómo se codificaría x400Address? ¿Te gusta esto ?:

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

El primer [0] es de DistributionPoint (que reemplaza la etiqueta [0] de DistributionPointName) y el [3] es de GeneralName.

Si así es como se supone que debe funcionar, entonces, ¿por qué DistributionPoint tiene etiquetas específicas para el contexto?

    
pregunta compcert 12.02.2012 - 13:29
fuente

1 respuesta

2

Obtendrá algo como esto:

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

Explicaciones :

  1. Aunque se supone que las etiquetas son implícitas (debido a que están en un módulo declarado con IMPLICIT TAGS ), las etiquetas implícitas no se pueden aplicar a un CHOICE (porque de lo contrario el CHOICE no funcionaría en todos), por lo que se convierten automáticamente en etiquetas explícitas en esa situación. Aquí, la etiqueta [0] en el campo distributionPoint se encuentra en tal situación, por lo que se ajusta, en lugar de reemplazar, la etiqueta del campo DistributionPointName , que también es un [0] .

  2. Observe que fullName tiene el tipo GeneralNames , no GeneralName . No cita GeneralNames en su mensaje; es un SEQUENCE OF GeneralName . La etiqueta implícita [0] del campo fullName , al estar implícita, reemplaza a la etiqueta SEQUENCE .

Para el primer punto, se especifica en X.680, cláusula 28.6 (de la versión de 1994):

  

La construcción de etiquetado especifica el etiquetado explícito si se cumple alguna de las siguientes condiciones:

     

a) se utiliza la alternativa "Etiquetar tipo EXPLÍCITO";

     

b) se utiliza la alternativa "Tipo de etiqueta" y el valor de "TagDefault" para el módulo es "ETIQUETAS EXPLÍCITAS" o está vacío;

     

c) se utiliza la alternativa "Tipo de etiqueta" y el valor de "Error de etiqueta" para el módulo es "ETIQUETAS IMPLÍCITAS" o "ETIQUETAS AUTOMÁTICAS", pero el tipo definido por "Tipo" es un tipo de opción, tipo abierto, o una "DummyReference" (véase la Rec. UIT-T X.683 | ISO / CEI 8824-4, cláusula 8.3).

La última cláusula (c) es lo que explico anteriormente.

    
respondido por el Tom Leek 12.02.2012 - 16:30
fuente

Lea otras preguntas en las etiquetas