#author("2024-09-30T12:57:39+00:00","default:iseki","iseki") #author("2024-10-22T10:27:02+00:00","default:iseki","iseki") ** ASN.1 (Abstract Syntax Notation One:抽象構文記法1) [#k05692d6] - 「識別子(タグ):コンテンツ長:コンテンツ」の繰り返し. -- コンテンツの中に「識別子:コンテンツ長:コンテンツ」の繰り返し という入れ子構造を取れる. - 符号化 -- BER(Basic Encoding Rules) 曖昧性がある. -- DER(Distinguished Encoding Rules) 曖昧性がない.BERのサブセット版 - https://letsencrypt.org/ja/docs/a-warm-welcome-to-asn1-and-der/ *** DER [#m62b187c] **** 識別子(タグ) [#mfd4eb60] - 1bit から数える(0bitからではない) - 8,7bit Class: -- 0000(0x00) UNIVERSAL(汎用)(通常はこれ) -- 0100(0x40) APPLICATION(応用) -- 1000(0x80) Context-Specific(コンテキスト特定) -- 1100(0xc0) PRIVATE(私用) - 6bit -- 0000(0x00)Primitive(基本型) -- 0010(0x20)Constructed(構造型) -- 0010(0x20)Constructed(構造型: 入れ子のこと) - 汎用タグ(1~5bit) -- 0x02:整数(INTEGER) -- 0x03:ビット列(BIT STRING) -- 0x04:8bit文字列(OCTET STRING) -- 0x05:NULL(NULL) -- 0x06:オブジェクト(OBJECT IDENTIFIER) -- 0x0c:UTF8文字列(UTF8String) -- 0x10:シーケンス(SEQUENCE) -- 0x11:セット(SET) -- 0x30:構造型シーケンス(SEQUENCE) -- 0x31:構造型セット(SET) -- 0x30:構造型シーケンス(SEQUENCE)入れ子 -- 0x31:構造型セット(SET) 入れ子 **** コンテンツ長 [#f4cdba1d] - 0x7F 以下:長さを格納するバイトはこの1Byte のみ - 0x80 以上:下位7bit(0x01~0x7f)がこれ以降に続く,長さを格納するバイト数. -- 0x81:この後の1Byteが長さを表す. -- ということは 0x80 はあり得ない. - 126Byte: 0x7E - 127Byte: 0x7F - 128Byte: 0x81 0x80 - 129Byte: 0x81 0x81 - 255Byte: 0x81 0xff - 256Byte: 0x82 0x01 0x00