一、任務詳情
- 參考附件中圖書p120 中7.1的實驗指導,完成DER編碼
- Name例項中,countryName改為“CN”,organization Name-"你的學號" commoaName="你的姓名拼音"
- 用echo -n -e "編碼" > 你的學號.der中,用OpenSSL asn1parse 分析編碼的正確性
- 提交編碼過程文件(推薦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