DER編碼

20211424罗杰逊發表於2024-03-31

一、任務詳情

  1. 參考附件中圖書p120 中7.1的實驗指導,完成DER編碼
  2. Name例項中,countryName改為“CN”,organization Name-"你的學號" commoaName="你的姓名拼音"
  3. 用echo -n -e "編碼" > 你的學號.der中,用OpenSSL asn1parse 分析編碼的正確性
  4. 提交編碼過程文件(推薦markdown格式)

二、檢視CN、姓名、學號的16進位制ASCII碼

三、DER編碼示例:X.501Name型別

(一)ASN.1描述與例項

1.ASN.1描述

X.501Name型別用ASN.1描述如下:

Name::=CHOICE{ RDNSequence }
RDNSequence ::=SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::=SET OF AttributeValueAssertion
Attribute ValueAssertion ::=SEQUENCE{
  AttributeType,
  AttributeValue}
AttributeType ::=OBJECT IDENTIFIER
Attribute Value ::=ANY

Name型別定義為CHOICE型別,目前只有1個選項RDNSequence。RDNSequence定義為SEQUENCE OF型別,由O個或多個RelativeDistinguishedName組成。RelativeDistinguished-Name定義為SET OF型別,由0個或多個AttributeValueAssertion組成。AttributeValueAssertion定義為SEQUENCE型別,由2個成分組成:1個為AttributeType型別和1個AttributeValue型別。AttributeType定義為OBJECT IDENTIFIER型別。AttributeValue定義為ANY型別,具體內容由AttributeType決定。
  事實上,Name型別可理解為分層或樹形結構,即X.500目錄樹結構。

2.Name例項

對於使用者Test User1,其對應的Name型別採用分層結構描述為:

其中,每層對應一個RelativeDistinguishedName;每個RelativeDistinguishedName由l個AttributeValueAssertion組成,等號前內容為AttributeType,等號後內容為AttributeValue。使用者Test User 1包含3個AttributeType:countryName、organizationName、commonName,其OID定義如下:

attributeType OBJECT IDENTIFIER ::={joint-iso-ccitt(2) ds(5) 4}
countryName OBJECT IDENTIFIER ::={attributeType 6}
organizationName OBJECT IDENTIFIER ::={attributeType 10}
commonName OBJECT IDENTIFIER ::=

(二)DER編碼過程

1.AttributeType編碼

AttributeType為OBJECT IDENTIFIER基本型別,編碼規則採用基本型別定長模式。
  對於標識串,採用低標識編碼方式,只需1個位元組。OBJECT IDENTIFIER的tag為0x06:class選擇universal,則位8和位7為0,OBJECT IDENTIFIER為基本型別,則位6為0。因此,標識串=0x06。
  對於長度串,採用短型編碼方式,只需1個位元組。
  對於內容串,由3個位元組組成。2.5.4.6編碼為55 04 06,2.5.4.10編碼為55 04 0A,2.5.4.3編碼為55 04 03。
  具體編碼過程如下表所示。

AttributeType OID定義 標識串 長度串 內容串
countryName 2.5.4.6 06 03 55 04 06
organizationName 2.5.4.10 06 03 55 04 0A
commonName 2.5.4.3 06 03 55 04 03

2.AttributeValue編碼

AttributeValue為PrintableString基本型別,編碼規則採用基本型別定長模式。
  對於標識串,採用低標識編碼方式,只需1個位元組。PrintableString的tag為0x13;class
選擇universal,則位8和位7為0,OBJECT IDENTIFIER為基本型別,則位6為0。因此,標識串=0x13。
  對於長度串,採用短型編碼方式,只需1個位元組。
  對於內容串,由其ASCII碼組成。
  具體編碼過程如表所示。

AttributeValue 標識串 長度串 內容串
"US" 13 02 55 53
"Example Organization" 13 14 45 78 61 6D 70 6C 65 20 4F 72 67 61 6E
69 7A 61 74 69 6F 6E
"Test User 1" 13 0B 54 65 73 74 20 55 73 65 72 20 31
"CN" 13 02 43 4E
"20211125" 13 08 32 30 32 31 31 31 32 35
"Miao Jingzhang" 13 0E 4D 69 61 6F 20 4A 69 6E 67 7A 68 61 6E 67

3.AttributeValueAssertion編碼

AttributeValueAssertion為SEQUENCE結構型別,編碼規則採用結構型別定長模式。
  對於標識串,採用低標識編碼方式,只需1個位元組。SEQUENCE的tag為OxlO:class選擇universal,則位8和位7為0,SEQUENCE為結構型別,則位6為1。因此,標識串0x30.
  對於長度串,採用短型編碼方式,只需1個位元組。
  對於內容串,由AttributeType和AttributeValue的DER編碼值組成。
  具體編碼過程如表所示。

AttributeValueAssertion 標識串 長度串 內容串
countryName="US" 30 09 06 03 55 04 06 13 02 55 53
organizationName="Example Organization" 30 1B 06 03 55 04 0A 13 14 45 78 61 6D 70 6C 65 20 4F 72 67 61 6E 69 7A 61 74 69 6F 6E
commonName="Test User 1" 30 12 06 03 55 04 03 13 0B 54 65 73 74 20 55 73 65 72 20 31
countryName="CN" 30 09 06 03 55 04 06 13 02 43 4E
organizationName="20211125" 30 11 06 03 55 04 0A 13 08 32 30 32 31 31 31 32 35
commonName="Miao Jingzhang" 30 15 06 03 55 04 03 13 0D 4D 69 61 6F 20 4A 69 6E 67 7A 68 61 6E 67

4.RelativeDistinguishedName編碼

RelativeDistinguishedName為SET OF結構型別,編碼規則採用結構型別定長模式。
  對於標識串,採用低標識編碼方式,只需1個位元組。SET OF的tag為0xl1;class選擇universal,則位8和位7為0,SET OF為結構型別,則位6為1。因此,標識串=0x31。
  對於長度串,採用短型編碼方式,只需1個位元組。
  對於內容串,由AttributeValueAssertion的DER編碼值組成。
  具體編碼過程如表所示。

RelativeDistinguishedName 標識串 長度串 內容串
countryName="US" 31 0B 30 09 06 03 55 04 06 13 02 55 53
organizationName="Example Organization" 31 1D 30 1B 06 03 55 04 0A 13 14 45 78 61 6D 70 6C 65 20 4F 72 67 61 6E 69 7A 61 74 69 6F 6E
commonName="Test User 1" 31 14 30 12 06 03 55 04 03 13 0B 54 65 73 74 20 55 73 65 72 20 31
countryName="CN" 31 0B 30 09 06 03 55 04 06 13 02 43 4E
organizationName="20211125" 31 11 30 0F 06 03 55 04 0A 13 08 32 30 32 31 31 31 32 35
commonName="Miao Jingzhang" 31 15 30 15 06 03 55 04 03 13 0E 4D 69 61 6F 20

5.RDNSequence編碼

RDNSequence為SEQUENCE OF結構型別,編碼規則採用結構型別定長模式。
  對於標識串,採用低標識編碼方式,只需1個位元組。SEQUENCE OF的tag為0x10;class選擇universal,則位8和位7為0,SEQUENCE OF為結構型別,則位6為1。因此,標識串=0x30。
  對於長度串,採用短型編碼方式,只需1個位元組。
  對於內容串,由3個RelativeDistinguishedName的DER編碼值組成。
  具體編碼過程如表所示。

RDNSequence 標識串 長度串 內容串
countryName="US" 30 42 31 0B
  30 09
   06 03 55 04 06
   13 02 55 53
31 1D
  30 1B
   06 03 55 04 0A
   13 14 45 78 61 6D 70 6C 65 20 4F 72 67 61 6E 69 7A 61 74 69 6F 6E
31 14
  30 12
   06 03 55 04 03
   13 0B 54 65 73 74 20 55 73 65 72 20 31
countryName="CN" 30 37 31 0B
  30 09
   06 03 55 04 06
   13 02 43 4E
31 11
  30 0F
   06 03 55 04 0A
   13 08 32 30 32 30 31 32 31 32
31 15
  30 13
   06 03 55 04 03
   13 0C 59 61 6E 67 20 43 68 65 6E 67 79 75

6.Name編碼

Name為CHOICE型別,其DER編碼值與RDNSequence相同。
  使用者Test User1最終DER編碼值如表所示。

DER編碼值 ASN.1描述
30 42
31 0B
30 09
06 03 55 04 06 attributeType=countryName
13 02 55 53 attributeValue="US"
31 1D
30 1B
06 03 55 04 0A attributeType=organizationName
13 14
45 78 61 6D 70 6C 65 20 4F 72 67
67 61 6E 69 7A 61 74 69 6F 6E attributeValue="Example Organization"
31 14
30 12
06 03 55 04 03 attributeType=commonName
13 0B
54 65 73 74 20 55 73 65 72 20 31 attributeValue="Test User 1"
30 37
31 0B
30 09
06 03 55 04 06 attributeType=countryName
13 02 43 4E attributeValue="CN"
31 11
30 0F
06 03 55 04 0A attributeType=organizationName
13 08
32 30 32 31 31 31 32 35 attributeValue="20211125"
31 17
30 15
06 03 55 04 03 attributeType=commonName
13 0E
4D 69 61 6F 20 4A 69 6E 67 7A 68 61 6E 67 attributeValue="Miao Jingzhang"

四、DER編碼過程

驗證openssl asn1parse -inform der -in ./20211125.der

1.countryName="CN"

echo -n -e "\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x4E" > 20211125.der

2.organization Name="2021125"

echo -n -e "\x31\x11\x30\x0F\x06\x03\x55\x04\x0A\x32\x30\x32\x31\x31\x31\x32\x35" >> 20211125.der

3.commonName="Miao Jingzhang"

echo -n -e "\x31\x15\x30\x13\x06\x03\x55\x04\x03\x13\x0E\x4D\x69\x61\x6F\x20\x4A\x69\x6E\x67\x7A\x68\x61\x6E\x67" >> 20211125.der

相關文章