ASN.1 のタグ一覧について説明します。 ASN.1 で定義されているプリミティブ型の一覧は以下の表の通りです。
タグ番号 | 型 | 説明 |
---|---|---|
0x00 | 予約済み | |
0x01 | BOOLEAN | 論理型 (00: False, それ以外: True) |
0x02 | INTEGER | 整数型 |
0x03 | BIT STRING | ビット列型 |
0x04 | OCTET STRING | オクテット列型 |
0x05 | NULL | ヌル型 (長さフィールドは常に00) |
0x06 | OBJECT IDENTIFIER | OID型 (例: 1.3.14.3.2.26) |
0x07 | ObjectDescriptor | オブジェクト記述型 (OIDの説明文) |
0x08 | INSTANCE OF, EXTERNAL | 外部型 |
0x09 | REAL | 実数型 |
0x0A | ENUMERATED | 整数列挙型 |
0x0B | EMBEDDED PDV | |
0x0C | UTF8String | UTF-8文字列型 |
0x0D | RELATIVE-OID | |
0x10 | SEQUENCE, SEQUENCE OF | 順序列型, 単一順序列型 ※ |
0x11 | SET, SET OF | 集合型, 単一集合型 ※ |
0x12 | NumericString | 数字列型 (0~9だけで構成される文字列) |
0x13 | PrintableString | 出力可能文字列型 (ASCII文字列) |
0x14 | TeletexString, T61String | |
0x15 | VideotexString | |
0x16 | IA5String | IA5文字列 (例: URI) |
0x17 | UTCTime | UTC時刻型 (例: YYMMDDhhmmssZ, YYMMDDhhmmss±hhmm) |
0x18 | GeneralizedTime | 時刻型 (例: YYYYMMDDhhmmss.dZ, YYYYMMDDhhmmss.d±hhmm) |
0x19 | GraphicString | |
0x1A | VisibleString, ISO646String | |
0x1B | GeneralString | |
0x1C | UniversalString | |
0x1D | CHARACTER STRING | |
0x1E | BMPString |
※の型のタグ番号は実際にそのまま使われることはなく、構造化フラグを含めた値が実際に使われるタグ番号となります。
構造化フラグとはオブジェクトの構造を表すもので、上記のタグ番号の右から6ビット目に追加されます。 構造化フラグは以下の意味を持ちます。
-
0
: 単一型。オブジェクトが1つの値だけを持っていることを表します。 -
1
: 構造型。オブジェクトが複数の値を持っていることを表します。
順序列型(SEQUENCE)や集合型(SET)は複数の値を持つことが当たり前なので、順序列型、集合型のタグ番号には常に構造化フラグが1となります。 構造化フラグを含めたときの型の一覧は以下のようになります。
構造化タグ番号 | 型 | 説明 |
---|---|---|
0x30 | SEQUENCE, SEQUENCE OF | 順序列型, 単一順序列型 |
0x31 | SET, SET OF | 集合型, 単一集合型 |
- SEQUENCE のタグ番号 0x10 と構造化フラグ 0b00100000 = 0x20 を足し合わせると 0x30
- SET のタグ番号 0x11 と構造化フラグ 0b00100000 = 0x20 を足し合わせると 0x31
以上です。
参考文献
- 抽象記法 - Samayou Oharikui
- ASN.1 バイナリ変換規則 (BER) (転載) - nliao - 博客园 (Wayback Machine)
- ASN.1
- der - ASN.1 SEQUENCE tag number encoding - Stack Overflow
- A Layman's Guide to a Subset of ASN.1, BER, and DER
- SEQUENCE - Win32 apps | Microsoft Docs
- A Warm Welcome to ASN.1 and DER - Let's Encrypt - Free SSL/TLS Certificates