




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、7/8/2003ASN.1及其編碼及其編碼Agenda Abstract Syntax Notation One (ASN.1) Overview 類(lèi)型和值定義 簡(jiǎn)單類(lèi)型 構(gòu)造類(lèi)型 Basic Encoding Rules (BER) Overview Type-Length-Value/Identifier-Length-Content 編碼示例 其他編碼方式 Distinguished Encoding Rules (DER) ASN.1開(kāi)發(fā)流程ASN.1 - Overview 一種獨(dú)立于機(jī)器的描述語(yǔ)言獨(dú)立于機(jī)器的描述語(yǔ)言,用于描述在網(wǎng)絡(luò)上傳遞的消息 ITU-T(X.680)和ISO (I
2、SO 8824-1)標(biāo)準(zhǔn)標(biāo)準(zhǔn) 定義應(yīng)用程序數(shù)據(jù)的抽象語(yǔ)法抽象語(yǔ)法 定義應(yīng)用程序數(shù)據(jù)結(jié)構(gòu)和表示協(xié)議數(shù)據(jù)單元協(xié)議數(shù)據(jù)單元(PDUs) 獨(dú)立于機(jī)器、語(yǔ)言及應(yīng)用程序內(nèi)部表示ASN.1特別適合表示現(xiàn)代通信應(yīng)用中那些復(fù)雜的、變化的及可擴(kuò)展的數(shù)據(jù)結(jié)構(gòu)類(lèi)似標(biāo)準(zhǔn)有 IDL XDR XMLASN.1 可分為兩個(gè)部分 語(yǔ)法規(guī)則:從數(shù)據(jù)類(lèi)型、內(nèi)容順序或結(jié)構(gòu)等方面來(lái)描述消息的內(nèi)容 編碼規(guī)則:如何編碼實(shí)際消息中的數(shù)據(jù)ASN.1定義示例定義示例 表達(dá)簡(jiǎn)單和復(fù)雜類(lèi)型的能力 可對(duì)類(lèi)型根據(jù)大小及(或)數(shù)值進(jìn)行約束 也可以施加更強(qiáng)的約束 字段可標(biāo)記為 OPTIONAL 大寫(xiě)開(kāi)頭表示類(lèi)型名,小寫(xiě)開(kāi)頭的表示變量名/字段名Age :=
3、INTEGER (0.120)User := SEQUENCE name IA5String (SIZE(1.128), age Age DEFAULT 18, address IA5String OPTIONAL, .使用使用ASN.1的標(biāo)準(zhǔn)及應(yīng)用的標(biāo)準(zhǔn)及應(yīng)用 X.400消息處理系統(tǒng)/X.500目錄服務(wù) 基于LDAP的目錄服務(wù)/X.509數(shù)字證書(shū) RSA公開(kāi)密碼標(biāo)準(zhǔn) 密鑰的存儲(chǔ)及傳遞/證書(shū) SET 安全電子商務(wù) H.323/T.120多媒體通信標(biāo)準(zhǔn) Unicode標(biāo)準(zhǔn) 簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP) MIB SNMP PDUsASN.1術(shù)語(yǔ)術(shù)語(yǔ) 抽象語(yǔ)法抽象語(yǔ)法(Abstract Syntax
4、) 描述通用數(shù)據(jù)結(jié)構(gòu) 允許定義數(shù)據(jù)類(lèi)型和值 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型(Data Type) 值的集合,可以是簡(jiǎn)單類(lèi)型或結(jié)構(gòu)類(lèi)型 可以對(duì)數(shù)據(jù)類(lèi)型命名 編碼編碼(Encoding) 用于表示數(shù)據(jù)值的字節(jié)序列 編碼規(guī)則編碼規(guī)則(Encoding Rules) 給出從一種語(yǔ)法到另一種的映射方法 傳輸語(yǔ)法傳輸語(yǔ)法(Transfer Syntax) 位模式(Bits pattern) 描述數(shù)據(jù)是在傳輸時(shí)是如何表示的Abstract & Transfer SyntaxesApplicationcomponentdata transfercomponent(e.g, TCP, OSIsession)data tran
5、sfercomponent(e.g, TCP, OSIsession)ApplicationcomponentLocal storage(e.g, MIB)Local storage(e.g, MIB)UserUserlocalmappinguser presentationmappinguser presentationmappingAbstractSyntax(e.g., ASN.1)localmappingencodingrulesencodingrulesTransferSyntax(e.g., BER) 模塊模塊(module):ASN.1規(guī)范中的基本構(gòu)造塊規(guī)范中的基本構(gòu)造塊 模塊定
6、義格式如下:模塊定義格式如下: DEFINITIONS := BEGINEXPORTSIMPORTSAssignmentList ENDASN.1模塊定義模塊定義Definitions in this module that may be imported by other modules.Definitions that are to be imported from other modules.Type assignments, value assignments, and macro definitions that are defined in this module.ASN.1簡(jiǎn)單類(lèi)
7、型簡(jiǎn)單類(lèi)型(1)基本類(lèi)型基本類(lèi)型 BOOLEAN INTEGER ENUMERATED REAL BIT STRING OCTET STRING字符串類(lèi)型字符串類(lèi)型(ISO10646-1的子集的子集) NumericString (0-9,) PrintableString (0-9,A-Z,a-z, VisibleString GraphicString UTF8String IA5String (ASCII)ASN.1簡(jiǎn)單類(lèi)型簡(jiǎn)單類(lèi)型(2) 對(duì)象類(lèi)型 OBJECT IDENTIFIER 對(duì)象標(biāo)識(shí)符:一個(gè)任意長(zhǎng)的非負(fù)整數(shù)序列,用于標(biāo)記對(duì)象(如算法等) ObjectDescriptor 其它類(lèi)
8、型 NULL 空值 UTCTime yymmdd hhmmss GeneralizedTime yyyymmdd hhmmss 強(qiáng)制從2050年開(kāi)始ASN.1類(lèi)型定義類(lèi)型定義 語(yǔ)法: := 示例:Counter:= INTEGERIpAddress := OCTET STRINGMonths := ENUMERATED january (1), february (2), march (3), april (4), may (5), june (6), july (7), august (8), september (9), october (10), november (11), decem
9、ber(12)ASN.1子類(lèi)型定義子類(lèi)型定義 語(yǔ)法: := () 示例:Counter := INTEGER (0.65536)IpAddress := OCTET STRING ( SIZE(4) )Spring := Months (march | april | may)Summer := Months (june | july | august )SmallPrime := INTEGER ( 2 | 3 | 5 | 7 | 11 )ExportKey := BIT STRING ( SIZE(40) )ASN.1賦值賦值(1) 語(yǔ)法: := 示例:ipInReceives Count
10、er := 2450ipRouteMask IpAddress := FFFFFF00HcurrentMonth Months := julycurrentTime UTCTime := “030708094018+0800”name VisibleString := “John”married BOOLEAN := TRUEfaxMessage BIT STRING := 01100001101BASN.1賦值賦值(2)OBJECT IDENTIFIERinternet OBJECT IDENTIFIER := iso(1) org(3) dod(6) 1 private OBJECT ID
11、ENTIFIER := internet 4 RSA公司Security OID: iso(1) member-body(2) US(840) 113549 ASN.1結(jié)構(gòu)類(lèi)型結(jié)構(gòu)類(lèi)型(1)SEQUENCE 對(duì)應(yīng)于C語(yǔ)言中的struct 類(lèi)型定義UserAccount := SEQUENCE username PrintableString, password PrintableString, accountNr INTEGER 賦值myAccount UserAccount := username “tly”, password “guesswhat”, accountNr 2345ASN.
12、1結(jié)構(gòu)類(lèi)型結(jié)構(gòu)類(lèi)型(2)SEQUENCE OF 對(duì)應(yīng)于C語(yǔ)言中的數(shù)組 類(lèi)型定義MemberCountries := SEQUENCE OF PrintableStringAccountRegistry := SEQUENCE OF UserAccount 賦值eastAsia MemberCountries := “China”, “Japan”, “Korean”, “DPR”ASN.1結(jié)構(gòu)類(lèi)型結(jié)構(gòu)類(lèi)型(3)SET 類(lèi)似于SEQUENCE,但不考慮分量順序 類(lèi)型定義UserAccount := SET username 0 PrintableString, password 1 Printa
13、bleString, accountNr 2 INTEGER 賦值myAccount UserAccount := accountNr 2345, username “tly”, password “guesswhat”ASN.1結(jié)構(gòu)類(lèi)型結(jié)構(gòu)類(lèi)型(3)SET OF 集合類(lèi)型,每一分量類(lèi)型相同,不考慮順序 類(lèi)型定義Keywords := SET OF PrintableString 賦值someASN1Keywords Keywords := “INTEGER”, “BOOLEAN”, “REAL”BER-Overview BER 基本編碼規(guī)則(Basic Encoding Rules)ITU-
14、T(X.690)和ISO(8825-1)標(biāo)準(zhǔn) 一種編碼規(guī)格說(shuō)明描述如何將ASN.1類(lèi)型的值編碼成字節(jié)串(string of octets)的方法基于一種稱(chēng)為type-length-value (TLV)結(jié)構(gòu)的方法,在ASN.1中,也稱(chēng)identifier-length-content(ILC)BER基本編碼方法基本編碼方法Basic Encoding RulesA Schematic RepresentationASN.1類(lèi)型標(biāo)記類(lèi)型標(biāo)記(1)Universal Class TagsASN.1類(lèi)型標(biāo)記類(lèi)型標(biāo)記(2)Application Class TagsBER中的中的Identifier字
15、段字段 (1)Tag number = 31BER中的中的Length字段字段(1)BER中的中的Length字段字段(2) 短格式 既可用于基本類(lèi)型,也可用于內(nèi)容長(zhǎng)度不超過(guò)128的構(gòu)造類(lèi)型 長(zhǎng)格式 既可用于基本類(lèi)型,也可用于構(gòu)造類(lèi)型 通常內(nèi)容長(zhǎng)度大于或等于128 不定長(zhǎng)格式 僅用于構(gòu)造類(lèi)型 EOC字節(jié)可看作是tag為0的基本類(lèi)型,內(nèi)容長(zhǎng)度為0BER編碼示例編碼示例 (1)INTEGERBER編碼示例編碼示例 (2)INTEGER BER coding of twos complement integers -129: 1111 1111 0111 1111 = 02 02 FF 7F -12
16、8: 1111 1111 1000 0000 = 02 01 80 -127: 1111 1111 1000 0001 = 02 01 81 -1: 1111 1111 1111 1111 = 02 01 FF 0: 0000 0000 0000 0000 = 02 00 1: 0000 0000 0111 1111 = 02 01 01 127: 0000 0000 0111 1111 = 02 01 7F 128: 0000 0000 1000 0000 = 02 02 00 80 129: 0000 0000 1000 0001 = 02 02 00 81BER編碼示例編碼示例 (3)S
17、EQUENCEBER編碼示例編碼示例 (4)OBJECT IDENTIFIERBER編碼示例編碼示例 (5)OBJECT IDENTIFIERCoding of OID Root ccitt(0): Z = Y 0.39 iso(1): Z = 40 + Y 40.79 joint-iso-ccitt(2): Z= 80 + Y 80.119Coding of OID nude numbers 類(lèi)似于Identifier字段中的Tag編碼 Range 0.127: 0XXX XXXX Range 128.16383: 1XXX XXXX 0XXX XXXX Range 16384.209715
18、1: 1XXX XXXX 1XXX XXXX 0XXX XXXX 例:RSA數(shù)據(jù)安全公司 1 2 840 113549 06 06 2a 86 48 86 f7 0dBER編碼存在的問(wèn)題編碼存在的問(wèn)題不唯一 同一個(gè)值可能有超過(guò)1種合法的編碼; 靈活,但容易造成混淆示例 BIT STRING值 01101110 01011101 11 BIT STRING編碼中,在長(zhǎng)度字段后的第一個(gè)字節(jié)給出了最后一個(gè)字節(jié)中未用到的位數(shù)(本例中為6) 03 04 06 6e 5d c0 (用0填充,短格式) 03 04 06 6e 5d e0 (用100000填充) 03 81 04 06 6e 5d e0 (長(zhǎng)
19、格式) 23 09 (構(gòu)造式編碼) 03 03 00 6e 5d (“0110111001011101”+”11”) 03 02 06 c0 解決方案(兩種方向) DER: BER子集,只使用定長(zhǎng)編碼 CER: BER子集,基于不定長(zhǎng)編碼DER Distinguished Encoding RulesDER (Distinguished Encoding Rules) BER的子集,增加某些限制DER附加規(guī)則 當(dāng)長(zhǎng)度在0到127之間時(shí),長(zhǎng)度字段長(zhǎng)度字段必須使用短短格式 當(dāng)長(zhǎng)度是128或者更長(zhǎng)時(shí),長(zhǎng)度字段長(zhǎng)度字段必須使用長(zhǎng)長(zhǎng)格式,同時(shí)長(zhǎng)度必須以最最小數(shù)目小數(shù)目的八位組來(lái)編碼 對(duì)于從簡(jiǎn)單字符串類(lèi)型
20、衍生出來(lái)的簡(jiǎn)單字符串類(lèi)型和隱式標(biāo)記類(lèi)型,必須使用基本的定長(zhǎng)方法 對(duì)于結(jié)構(gòu)類(lèi)型、從結(jié)構(gòu)類(lèi)型衍生出來(lái)的隱式標(biāo)記類(lèi)型,以及從任何類(lèi)型衍生出來(lái)的顯式標(biāo)記類(lèi)型,必須使用構(gòu)造的定長(zhǎng)方法 對(duì)于特殊類(lèi)型,另有限制 BIT STRING: 必須用0填充 SEQUENCE OF中的OPTIONAL和DEFAULT限定符 SET OF除同SEQUENCE相同的規(guī)定外,各分量要求以標(biāo)記的升序排列ASN.1/DER示例示例(1)X.509證書(shū)及其編碼證書(shū)及其編碼 使用makecert創(chuàng)建一個(gè)測(cè)試證書(shū) 使用openssl顯示該證書(shū)可讀版本 使用Asn1Viewer檢查該編碼ASN.1/DER示例示例(2)X.509證書(shū)及
21、其編碼證書(shū)及其編碼 X.509證書(shū)定義Certificate := SEQUENCE tbsCertificate TBSCertificate, -證書(shū)主體signatureAlgorithm AlgorithmIdentifier, -證書(shū)簽名算法標(biāo)識(shí)signatureValue BIT STRING -證書(shū)簽名算法值A(chǔ)SN.1/DER示例示例(3)X.509證書(shū)及其編碼證書(shū)及其編碼X.509證書(shū)定義(續(xù))TBSCertificate := SEQUENCE version 0 EXPLICIT Version DEFAULT v1, -證書(shū)版本號(hào)serialNumber Certific
22、ateSerialNumber, -證書(shū)序列號(hào),對(duì)同一CA所頒發(fā)的證書(shū),序列號(hào)唯一標(biāo)識(shí)證書(shū)signature AlgorithmIdentifier, -證書(shū)簽名算法標(biāo)識(shí)issuer Name, -證書(shū)發(fā)行者名稱(chēng)validity Validity, -證書(shū)有效期subject Name, -證書(shū)主體名稱(chēng)subjectPublicKeyInfo SubjectPublicKeyInfo, -證書(shū)公鑰issuerUniqueID 1 IMPLICIT UniqueIdentifier OPTIONAL, - 證書(shū)發(fā)行者ID(可選),只在證書(shū)版本2、3中才有subjectUniqueID 2 IMP
23、LICIT UniqueIdentifier OPTIONAL, -證書(shū)主體ID(可選),只在證書(shū)版本2、3中才有extensions 3 EXPLICIT Extensions OPTIONAL -證書(shū)擴(kuò)展段(可選),只在證書(shū)版本2、3中才有Version := INTEGER v1(0), v2(1), v3(2) PER Packed Encoding RulesApplication 1Application 2110Age := INTEGER (0.7)firstGrade Age := 6total length of 3 bits 同BER相同的是:PER也獨(dú)立于機(jī)器、語(yǔ)言及應(yīng)
24、用程序內(nèi)部表示 不同于BER的是:在PER中,tags從不傳送,length和value如果雙方都知道,也不需傳送 可節(jié)約帶寬,適用于在Internet上傳送audio和video數(shù)據(jù)、air-ground通信等XER XML Encoding Rules 同BER/PER相同的是:XER也獨(dú)立于機(jī)器、語(yǔ)言及應(yīng)用程序內(nèi)部表示 XER清晰,可讀性強(qiáng),甚至可以不需要工具 帶寬占用大Application 1Application 26Age := INTEGER (0.7)firstGrade Age := 6total length of 12 octetsASN.1的使用的使用 通過(guò)適當(dāng)?shù)霓D(zhuǎn)換
25、,ASN.1可以在常用語(yǔ)言中使用 C/C+, Java, IDL, etcASN.1開(kāi)發(fā)流程開(kāi)發(fā)流程ASN.1SyntaxASN.1CompilerC HeaderFileApplication Source CodeincludeC/C+CompilerEncoder/Decoder LibrariesLinkerExecutable ApplicationASN.1的使用示例的使用示例ASN.1定義定義通過(guò)適當(dāng)?shù)霓D(zhuǎn)換,ASN.1可以在常用語(yǔ)言中使用 C/C+, Java, IDL, etc例: ASN.1定義定義:PersonalInfo := SEQUENCE married BOOLE
26、AN,age INTEGER (0.120),name PrintableStringTAnotherINT := INTEGERTType1 := SEQUENCE OF PersonalInfoTType2 := SET type1 TType1,another 0 TAnotherINT,age 1 INTEGER DEFAULT 123TType3 := SET OF TType2ASN.1的使用示例的使用示例生成的生成的C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)語(yǔ)言數(shù)據(jù)結(jié)構(gòu)例 (續(xù)1): 由由esnacc生成的生成的C語(yǔ)言數(shù)據(jù)結(jié)構(gòu):語(yǔ)言數(shù)據(jù)結(jié)構(gòu): typedef struct PersonalInfo /* S
27、EQUENCE */ AsnBool married; /* BOOLEAN */ AsnInt age; /* INTEGER (0.120) */ PrintableString name; /* PrintableString */ PersonalInfo; typedef AsnInt TAnotherINT; /* INTEGER */ typedef AsnList TType1; /* SEQUENCE OF PersonalInfo */ typedef struct TType2 /* SET */ TType1* type1; /* TType1 */ TAnotherI
28、NT another; /* 0 TAnotherINT */ AsnInt* age; /* 1 INTEGER DEFAULT 123 */ TType2; typedef AsnList TType3; /* SET OF TType2 */ASN.1的使用示例的使用示例編碼編碼/譯碼譯碼例 (續(xù)2): 編碼編碼/譯碼譯碼: AsnLen DEncPersonalInfoContent (GenBuf * b, PersonalInfo *v); void DDecPersonalInfoContent (GenBuf * b, AsnTag tagId0, AsnLen elmtLen
29、0, PersonalInfo *v, AsnLen *bytesDecoded, ENV_TYPE env); #define DEncTAnotherINTContent DEncAsnIntContent #define DDecTAnotherINTContent DDecAsnIntContent AsnLen DEncTType1Content (GenBuf * b, TType1 *v); void DDecTType1Content (GenBuf * b, AsnTag tagId0, AsnLen elmtLen0, TType1 *v, AsnLen *bytesDec
30、oded, ENV_TYPE env); AsnLen DEncTType2Content (GenBuf * b, TType2 *v); void DDecTType2Content (GenBuf * b, AsnTag tagId0, AsnLen elmtLen0, TType2 *v, AsnLen *bytesDecoded, ENV_TYPE env); AsnLen DEncTType3Content (GenBuf * b, TType3 *v); void DDecTType3Content (GenBuf * b, AsnTag tagId0, AsnLen elmtLen0, TType3 *v, AsnLen *bytesDecoded, ENV_TYPE env);ASN.1的使用示例的使用示例生成的生成的C+類(lèi)類(lèi)例 (續(xù)3): 由由esnacc生成的生成的C+類(lèi):類(lèi): class PersonalInfo: public AsnType pub
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 挖掘2025樂(lè)理考試成功的關(guān)鍵方法與策略總結(jié)試題及答案
- 聲波特性與應(yīng)用試題及答案
- 關(guān)注課堂動(dòng)態(tài)的小學(xué)教育教學(xué)反思試題及答案
- 建筑施工安全質(zhì)量管理體系試題及答案
- 大學(xué)物理課程內(nèi)容優(yōu)勢(shì)與發(fā)展方向探討題試題及答案
- 如何借助現(xiàn)有政策實(shí)現(xiàn)創(chuàng)業(yè)夢(mèng)想試題及答案
- 和聲分析中應(yīng)注意的要點(diǎn)樂(lè)理考試試題及答案
- 大學(xué)物理考試練習(xí)冊(cè)中的試題及答案
- 大學(xué)物理自主學(xué)習(xí)方法試題及答案
- 女生幸福測(cè)試題及答案
- 2025年4月新高考語(yǔ)文全國(guó)Ⅰ卷各地??荚囶}匯編之語(yǔ)用
- 山東省聊城市2025年高考模擬試題(二)數(shù)學(xué)+答案
- 小學(xué)數(shù)學(xué)西師大版(2024)三年級(jí)下冊(cè)旋轉(zhuǎn)與平移現(xiàn)象教學(xué)設(shè)計(jì)
- (一模)惠州市2025屆高三4月模擬考試英語(yǔ)試卷(含答案)
- 田園綜合體可行性研究報(bào)告
- 2025年中考語(yǔ)文二輪復(fù)習(xí):散文閱讀 專(zhuān)題練習(xí)題(含答案)
- 2025屆新高考教學(xué)教研聯(lián)盟高三第二次聯(lián)考政治試題及答案
- 社會(huì)語(yǔ)言學(xué) 語(yǔ)言的性別、年齡變異課件
- 肺動(dòng)脈高壓診斷流程及治療策略課件
- 設(shè)備點(diǎn)檢基準(zhǔn)書(shū)
- 公司鑰匙移交單
評(píng)論
0/150
提交評(píng)論