在 ASN.1 中标记非可选字段的原因

The reason for tagging of a non-OPTIONAL field in ASN.1

查看 3GPP MAP (http://www.3gpp.org/ftp/specs/archive/29_series/29.002/ASN.1/) 的 ASN.1 模块,我对第一个字段 (imsi) 的 [0] 标签的使用感到困惑。由于它不是可选字段,而且它的类型也是已知的 (OCTET STRING),这里标记的用途是什么?

sendAuthenticationInfo OPERATION  ::=  {
   ARGUMENT     SEQUENCE {
      imsi                                  [0] IMPLICIT OCTET STRING ( SIZE( 3 .. 8 ) ),
      numberOfRequestedVectors              INTEGER ( 1 .. 5 ),
      segmentationProhibited                NULL OPTIONAL,
      immediateResponsePreferred            [1] IMPLICIT NULL OPTIONAL,

-- etc. --

需要注意的一件事是 imsi 字段不会直接解释为八位字节字符串,但它以半八位字节编码(如 BCD)保存 IMSI 的数字。这可能是该字段被标记的原因吗?

在这种特殊情况下,3GPP MAP 协议指定 BER 是要使用的编码规则,这意味着标签包含在编码中。这意味着虽然在这种情况下并非绝对有必要更改此上下文中非可选字段的默认八位字节字符串标记,因为没有歧义,但可能出于文档目的而这样做,表明此字段的内容是不仅仅是八位字节串。