分享
分享赚钱 收藏 举报 版权申诉 / 47

类型ASNv1及其编码.ppt

  • 上传人:精品资料
  • 文档编号:11335461
  • 上传时间:2020-03-18
  • 格式:PPT
  • 页数:47
  • 大小:648KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    ASNv1及其编码.ppt
    资源描述:

    1、7/8/2003,ASN.1及其编码,Agenda,Abstract Syntax Notation One (ASN.1) Overview 类型和值定义 简单类型 构造类型 Basic Encoding Rules (BER) Overview Type-Length-Value/Identifier-Length-Content 编码示例 其他编码方式 Distinguished Encoding Rules (DER) ASN.1开发流程,ASN.1 - Overview,一种独立于机器的描述语言,用于描述在网络上传递的消息 ITU-T(X.680)和ISO (ISO 8824-1)标

    2、准 定义应用程序数据的抽象语法 定义应用程序数据结构和表示协议数据单元(PDUs) 独立于机器、语言及应用程序内部表示 ASN.1特别适合表示现代通信应用中那些复杂的、变化的及可扩展的数据结构 类似标准有 IDL XDR XML ASN.1 可分为两个部分 语法规则:从数据类型、内容顺序或结构等方面来描述消息的内容 编码规则:如何编码实际消息中的数据,ASN.1定义示例,表达简单和复杂类型的能力 可对类型根据大小及(或)数值进行约束 也可以施加更强的约束 字段可标记为 OPTIONAL 大写开头表示类型名,小写开头的表示变量名/字段名,Age := INTEGER (0120) User :=

    3、 SEQUENCE name IA5String (SIZE(1128),age Age DEFAULT 18,address IA5String OPTIONAL,.,使用ASN.1的标准及应用,X.400消息处理系统/X.500目录服务 基于LDAP的目录服务/X.509数字证书 RSA公开密码标准 密钥的存储及传递/证书 SET 安全电子商务 H.323/T.120多媒体通信标准 Unicode标准 简单网络管理协议(SNMP) MIB SNMP PDUs,ASN.1术语,抽象语法(Abstract Syntax) 描述通用数据结构 允许定义数据类型和值 数据类型(Data Type)

    4、值的集合,可以是简单类型或结构类型 可以对数据类型命名 编码(Encoding) 用于表示数据值的字节序列 编码规则(Encoding Rules) 给出从一种语法到另一种的映射方法 传输语法(Transfer Syntax) 位模式(Bits pattern) 描述数据是在传输时是如何表示的,模块(module):ASN.1规范中的基本构造块 模块定义格式如下:DEFINITIONS :=BEGINEXPORTSIMPORTSAssignmentListEND,ASN.1模块定义,Definitions in this module that may be imported by other

    5、 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简单类型(1),基本类型 BOOLEAN INTEGER ENUMERATED REAL BIT STRING OCTET STRING 字符串类型(ISO10646-1的子集) NumericString (0-9,) PrintableString (0-9,A-Z,a

    6、-z, VisibleString GraphicString UTF8String IA5String (ASCII),ASN.1简单类型(2),对象类型 OBJECT IDENTIFIER 对象标识符:一个任意长的非负整数序列,用于标记对象(如算法等) ObjectDescriptor 其它类型 NULL 空值 UTCTime yymmdd hhmmss GeneralizedTime yyyymmdd hhmmss 强制从2050年开始,ASN.1类型定义,语法: := 示例: Counter := INTEGER IpAddress := OCTET STRING Months :=

    7、ENUMERATED january (1), february (2), march (3),april (4), may (5), june (6),july (7), august (8), september (9),october (10), november (11), december(12) ,ASN.1子类型定义,语法: := () 示例: Counter := INTEGER (065536) IpAddress := OCTET STRING ( SIZE(4) ) Spring := Months (march | april | may) Summer := Mont

    8、hs (june | july | august ) SmallPrime := INTEGER ( 2 | 3 | 5 | 7 | 11 ) ExportKey := BIT STRING ( SIZE(40) ),ASN.1赋值(1),语法: := 示例: ipInReceives Counter := 2450 ipRouteMask IpAddress := FFFFFF00H currentMonth Months := july currentTime UTCTime := “030708094018+0800” name VisibleString := “John” marri

    9、ed BOOLEAN := TRUE faxMessage BIT STRING := 01100001101B,ASN.1赋值(2) OBJECT IDENTIFIER,internet OBJECT IDENTIFIER := iso(1) org(3) dod(6) 1 private OBJECT IDENTIFIER := internet 4 RSA公司Security OID: iso(1) member-body(2) US(840) 113549 ,ASN.1结构类型(1) SEQUENCE,对应于C语言中的struct 类型定义 UserAccount := SEQUENC

    10、E username PrintableString,password PrintableString,accountNr INTEGER 赋值 myAccount UserAccount := username “tly”,password “guesswhat”,accountNr 2345 ,ASN.1结构类型(2) SEQUENCE OF,对应于C语言中的数组 类型定义 MemberCountries := SEQUENCE OF PrintableString AccountRegistry := SEQUENCE OF UserAccount 赋值 eastAsia MemberC

    11、ountries := “China”, “Japan”, “Korean”, “DPR” ,ASN.1结构类型(3) SET,类似于SEQUENCE,但不考虑分量顺序 类型定义 UserAccount := SET username 0 PrintableString,password 1 PrintableString,accountNr 2 INTEGER 赋值 myAccount UserAccount := accountNr 2345,username “tly”,password “guesswhat” ,ASN.1结构类型(3) SET OF,集合类型,每一分量类型相同,不考虑

    12、顺序 类型定义 Keywords := SET OF PrintableString 赋值 someASN1Keywords Keywords := “INTEGER”, “BOOLEAN”, “REAL” ,BER-Overview,BER 基本编码规则(Basic Encoding Rules) ITU-T(X.690)和ISO(8825-1)标准 一种编码规格说明 描述如何将ASN.1类型的值编码成字节串(string of octets)的方法 基于一种称为type-length-value (TLV)结构的方法,在ASN.1中,也称identifier-length-content(

    13、ILC),BER基本编码方法,Basic Encoding Rules A Schematic Representation,ASN.1类型标记(1) Universal Class Tags,ASN.1类型标记(2) Application Class Tags,BER中的Identifier字段 (1) Tag number 31,BER中的Identifier字段 (2) Tag number = 31,BER中的Length字段(1),BER中的Length字段(2),短格式 既可用于基本类型,也可用于内容长度不超过128的构造类型 长格式 既可用于基本类型,也可用于构造类型 通常内容

    14、长度大于或等于128 不定长格式 仅用于构造类型 EOC字节可看作是tag为0的基本类型,内容长度为0,BER编码示例 (1) INTEGER,BER编码示例 (2) INTEGER,BER coding of twos complement integers -129: 1111 1111 0111 1111 = 02 02 FF 7F -128: 1111 1111 1000 0000 = 02 01 80 -127: 1111 1111 1000 0001 = 02 01 81-1: 1111 1111 1111 1111 = 02 01 FF0: 0000 0000 0000 0000

    15、 = 02 001: 0000 0000 0111 1111 = 02 01 01127: 0000 0000 0111 1111 = 02 01 7F128: 0000 0000 1000 0000 = 02 02 00 80129: 0000 0000 1000 0001 = 02 02 00 81,BER编码示例 (3) SEQUENCE,BER编码示例 (4) OBJECT IDENTIFIER,BER编码示例 (5) OBJECT IDENTIFIER,Coding of OID Root ccitt(0): Z = Y 039 iso(1): Z = 40 + Y 4079 joi

    16、nt-iso-ccitt(2): Z= 80 + Y 80119 Coding of OID nude numbers 类似于Identifier字段中的Tag编码 Range 0127: 0XXX XXXX Range 12816383: 1XXX XXXX 0XXX XXXX Range 163842097151: 1XXX XXXX 1XXX XXXX 0XXX XXXX 例:RSA数据安全公司 1 2 840 113549 06 06 2a 86 48 86 f7 0d,BER编码存在的问题,不唯一 同一个值可能有超过1种合法的编码; 灵活,但容易造成混淆 示例 BIT STRING值

    17、 01101110 01011101 11 BIT STRING编码中,在长度字段后的第一个字节给出了最后一个字节中未用到的位数(本例中为6) 03 04 06 6e 5d c0 (用0填充,短格式) 03 04 06 6e 5d e0 (用100000填充) 03 81 04 06 6e 5d e0 (长格式) 23 09 (构造式编码)03 03 00 6e 5d (“0110111001011101”+”11”)03 02 06 c0 解决方案(两种方向) DER: BER子集,只使用定长编码 CER: BER子集,基于不定长编码,DER Distinguished Encoding R

    18、ules,DER (Distinguished Encoding Rules) BER的子集,增加某些限制 DER附加规则 当长度在0到127之间时,长度字段必须使用短格式 当长度是128或者更长时,长度字段必须使用长格式,同时长度必须以最小数目的八位组来编码 对于从简单字符串类型衍生出来的简单字符串类型和隐式标记类型,必须使用基本的定长方法 对于结构类型、从结构类型衍生出来的隐式标记类型,以及从任何类型衍生出来的显式标记类型,必须使用构造的定长方法 对于特殊类型,另有限制 BIT STRING: 必须用0填充 SEQUENCE OF中的OPTIONAL和DEFAULT限定符 SET OF除同

    19、SEQUENCE相同的规定外,各分量要求以标记的升序排列,ASN.1/DER示例(1) X.509证书及其编码,使用makecert创建一个测试证书 使用openssl显示该证书可读版本 使用Asn1Viewer检查该编码,ASN.1/DER示例(2) X.509证书及其编码,X.509证书定义 Certificate := SEQUENCE tbsCertificate TBSCertificate, -证书主体 signatureAlgorithm AlgorithmIdentifier, -证书签名算法标识 signatureValue BIT STRING -证书签名算法值 ,ASN.

    20、1/DER示例(3) X.509证书及其编码,X.509证书定义(续) TBSCertificate := SEQUENCE version 0 EXPLICIT Version DEFAULT v1, -证书版本号 serialNumber CertificateSerialNumber, -证书序列号,对同一CA所颁发的证书,序列号唯一标识证书 signature AlgorithmIdentifier, -证书签名算法标识 issuer Name, -证书发行者名称 validity Validity, -证书有效期 subject Name, -证书主体名称 subjectPublic

    21、KeyInfo SubjectPublicKeyInfo, -证书公钥 issuerUniqueID 1 IMPLICIT UniqueIdentifier OPTIONAL, - 证书发行者ID(可选),只在证书版本2、3中才有 subjectUniqueID 2 IMPLICIT UniqueIdentifier OPTIONAL, -证书主体ID(可选),只在证书版本2、3中才有 extensions 3 EXPLICIT Extensions OPTIONAL -证书扩展段(可选),只在证书版本2、3中才有 Version := INTEGER v1(0), v2(1), v3(2)

    22、,PER Packed Encoding Rules,同BER相同的是:PER也独立于机器、语言及应用程序内部表示 不同于BER的是:在PER中,tags从不传送,length和value如果双方都知道,也不需传送 可节约带宽,适用于在Internet上传送audio和video数据、air-ground通信等,XER XML Encoding Rules,同BER/PER相同的是:XER也独立于机器、语言及应用程序内部表示 XER清晰,可读性强,甚至可以不需要工具 带宽占用大,ASN.1的使用,通过适当的转换,ASN.1可以在常用语言中使用 C/C+, Java, IDL, etc,ASN.

    23、1开发流程,ASN.1的使用示例 ASN.1定义,通过适当的转换,ASN.1可以在常用语言中使用 C/C+, Java, IDL, etc 例: ASN.1定义: PersonalInfo := SEQUENCE married BOOLEAN, age INTEGER (0120), name PrintableString TAnotherINT := INTEGER TType1 := SEQUENCE OF PersonalInfo TType2 := SET type1 TType1, another 0 TAnotherINT, age 1 INTEGER DEFAULT 123

    24、TType3 := SET OF TType2,ASN.1的使用示例 生成的C语言数据结构,例 (续1): 由esnacc生成的C语言数据结构: typedef struct PersonalInfo /* SEQUENCE */AsnBool married; /* BOOLEAN */AsnInt age; /* INTEGER (0120) */PrintableString name; /* PrintableString */ PersonalInfo; typedef AsnInt TAnotherINT; /* INTEGER */ typedef AsnList TType1;

    25、 /* SEQUENCE OF PersonalInfo */ typedef struct TType2 /* SET */TType1* type1; /* TType1 */TAnotherINT another; /* 0 TAnotherINT */AsnInt* age; /* 1 INTEGER DEFAULT 123 */ TType2; typedef AsnList TType3; /* SET OF TType2 */,ASN.1的使用示例 编码/译码,例 (续2): 编码/译码: AsnLen DEncPersonalInfoContent (GenBuf * b, P

    26、ersonalInfo *v); void DDecPersonalInfoContent (GenBuf * b, AsnTag tagId0, AsnLen elmtLen0, PersonalInfo *v, AsnLen *bytesDecoded, ENV_TYPE env); #define DEncTAnotherINTContent DEncAsnIntContent #define DDecTAnotherINTContent DDecAsnIntContent AsnLen DEncTType1Content (GenBuf * b, TType1 *v); void DD

    27、ecTType1Content (GenBuf * b, AsnTag tagId0, AsnLen elmtLen0, TType1 *v, AsnLen *bytesDecoded, 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

    28、(GenBuf * b, TType3 *v); void DDecTType3Content (GenBuf * b, AsnTag tagId0, AsnLen elmtLen0, TType3 *v, AsnLen *bytesDecoded, ENV_TYPE env);,ASN.1的使用示例 生成的C+类,例 (续3): 由esnacc生成的C+类: class PersonalInfo: public AsnTypepublic:AsnBool married;AsnInt age;PrintableString name;AsnLen BEnc (AsnBuf,关于ASN.1的一

    29、些资源,ASN.1C/C+, IDL编译器 snacc, esnacc OSS Nokalva Objective System, inc. www.obj- http:/www.asn1.org/ 本课slides参考了以下资料 ASN.1 Today and Tomorrow http:/www.itu.int/itudoc/itu-t/com17/tutorial/78247_pp7.ppt ASN.1 & BER from jwkhongpostech.ac.kr http:/dpnm.postech.ac.kr/cs637/lecture/asn1-ber.ppt Abstrac

    30、t Syntax Note One from Dr. Andreas Steffen http:/ A Laymans Guide to a Subset of ASN.1, BER, and DER From RSA Laboratories,ChangeLog,2003.7.9 v1.1 by T.L.Yong 增加ASN.1/DER示例:X.509证书及其编码 进一步充实ASN.1-C/C+示例2003.7.7 v1.0 By T.L.Yong 增加ASN.1相关内容2003.7.7 v0.5 By T.L.Yong Initialize from the original Lesson 3,

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:ASNv1及其编码.ppt
    链接地址:https://www.docduoduo.com/p-11335461.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开