第2章 抽象语法表示 ASN.1
第2章抽象语法表示ASN.1

第2章 抽象语法表示ASN.1 1. 简单类型 表2.1中除了UNIVERSAL 16和UNIVERSAL 17之外都是简 单类型。 这些类型的共同特点是可以直接定义它们的值的集合, 可以把这些类型作为原子类型构造新的数据类型。简单类型还 可以分为4组。第一组包括BOOLEAN、INTEGER、BIT STRING、OCTET STRING、REAL和ENUMERATED等。这一 组可以叫做基本类型,它们的值已经在表2.1中列出了。需要说 明的是,实数可以表示为科学计数法:
第2章 抽象语法表示ASN.1
(3) 标识符以小写字母开头; (4) 类型指针和模块名以大写字母开头; (5) ASN.1定义的内部类型全部用大写字母表示; (6) 关键字全部用大写字母表示; (7) 注释以一对短线(- -)开始,以一对短线或行尾结束。
第2章 抽象语法表示ASN.1 2.2.1 抽象数据类型
第2章 抽象语法表示ASN.1
SequenceType::=SEQUENCE{ElementTypeList}| SEQUENCE {} ElementTypeList::= ElementType | ElementTypeList, ElementType ElementType::= NamedType NamedType OPTIONAL NamedType DEFAULT Value| COMPONENTS OF Type | |
第2章 抽象语法表示ASN.1 第四组包含4种类型。NULL是空类型,它没有值,只占用 结构中的一个位置,该位置可能出现或不出现数据。 EXTERNAL是外部类型,即标准之外的文档定义的类型。 UTCTime和GeneralizedTime是两种有关时间的类型,其区别是 表示时间的形式不同。前者(世界通用时)分别用两位数字表示年、 月和日(即YYMMDD),然后是时、分和秒(即hhmmss),最后可 以说明是否为本地时间;而后者用4位数字表示年,用两位数字 表示月和日,最后也可以说明是否为本地时间。例如 20000721182053.7是GeneralizedTime类型的一个值,表示2000年 7月21日,当地时间18点20分53.7秒。而值20000721182053.7Z表 示同样的时间,但是加了符号Z,则表示UTC时间。如果写为 20000721182053.7+0800则除了表示同样的当地时间外,还说明 了加8小时可以得到UTC时间。
第二章 抽象语法表示ASN

第二章抽象语法表示ASN.1抽象愈发表示ASN.1是一种形式语言1.网络数据表示●表示层的功能是提供统一的网络数据表示。
●在互联通信的端系统中至少有一个应用实体(FTP,TELNET,SNMP)和一个表示实体(ASN.1)。
●应用实体:应用实体定义了应用数据的抽象语法;应用协议按照预先定义的抽象语法构造协议数据单元,用于和对等系统的应用实体交换信息(FTP、TELNET,SNMP等)。
●表示实体:表示实体对应用层数据进行编码,变成二进制的比特串(ASN.1)。
2.ASN.1的基本概念⑴抽象数据类型●在ASN.1中,每一个数据类型都有一个标签(tag),标签有类型和值,数据类型是由标签的类型和值唯一决定的。
●各种标签的用法·通用标签:用关键字UNIVERSAL表示,带有这种标签的数据类型是由标准定义的,适用于任何应用。
·应用标签:用关键字APPLICATION表示,是由某个具体应用定义的类型。
·上下文专用标签:这种标签在本文的一定范围(例如,一个结构)中适用。
·私有标签:用关键字PRIVATE表示,这是用户定义的标签。
●数据类型:·简单类型:由单一成分构成的原子类型。
·构造类型:由两种以上成分构成的构造类型。
·标签类型:由已知类型定义的新类型。
·其它类型:包括CHOICE和ANY两种类型。
●ASN.1定义的通用类型图 P25●简单类型:·第一组:BOOLEAN、INTEGER、BIT STRING、OCTET STRING、REAL和EMUNERATED等。
这一组可以叫做基本类型。
·对整数可以进行算数运算,但对枚举类型却不能进行任何算数运算。
·第二种包括各种字符串类型,标签为UNIVERSAL18-22和UNIVERSAL25-27,这些类型都可以看做是OCTET STRING类型的子集,它们都是采纳其它标准的类型。
ASN编码规则详解最

国际标准组织(ISO – International Organization for Standardization)于 1946 年 在美国成立,其负责制定众多领域的国际标准;但除电气、电子和电子工艺领域外,这些主要是 IEC(International Electrotechnical Commission)负责。
些组织可以参加讨论,提出议案,但不能参加投票。
Figure 1-5 ISO 组织结构 如 Figure 1-5 所示,ISO 共分为 172 个技术委员会 Technical Committee (TC)负责相应 标准化领域。 所有议题都在子委员会 SubCommittees 中共享,Subcommittee 又分为工作组 Working Groups(WG)。 到 1987 年,著名的 OSI 标准就是 TC97 的成果,称之为“Telecommunications and Information Exchange Between Systems”。在 1987 年,ISO 和 IEC 两个标准化组织一致认为都应当关注信 息技术 Information Technology,因此成立了一个联合技术委员会称为 JTC1。JTC1 的秘书处由 ANSI 负责。
UNIVERSAL 8 外部类型和类型实例 UNIVERSAL 9 实数类型 UNIVERSAL 10 枚举类型 UNIVERSAL 11 嵌入的 pdv 类型 UNIVERSAL 12 UTF8 字符串类型 UNIVERSAL 13 相关对象标识符 类型 UNIVERSAL 14-15 保留给本建议的以后版本和国际标准使用 UNIVERSAL 16 序列和类型序列 UNIVERSAL 17 集合和类型的集合 UNIVERSAL 18-22, 25-30 字符串 类型 UNIVERSAL 23-24 时间 类型 UNIVERSAL 31-... 保留给本建议以外的类型和国际标准使用 ASN.1 还能够定义如下的数据结构类型: 结构 ( SEQUENCE ), 列表 ( SEQUENCE OF ), 类型选择 ( CHOICE ), 等等
ASN.1笔记——语法规则与类型概述

ASN.1笔记——语法规则与类型概述⼀.简介ASN.1(Abstract Syntax Notation dotone),抽象语法标记1。
是定义抽象数据类型形式的标准,是⽤于描述数据表⽰、表⽰、传输、编码的记法。
ASN.1只包含信息结构,不处理具体业务数据,它不是⼀个编程语⾔。
ASN.1没有限定编码⽅法,各种ASN.1编码规则提供了由ASN.1描述其抽象句法的数据的值的传送语法(具体表达),常见的编码规则有:基本编码规则(BER),规范编码规则(CER,CanonicalEncoding Rules)、唯⼀编码规则(DER,DistinguishedEncoding Rules)、压缩编码规则(PER,PackedEncoding Rules)和XML编码规则(XER,XMLEncoding Rules)。
这些编码规则描述了如何将定义在ASN.1中的值译成适合传输的电码。
ASN.1在OSI的ISO8824/ITU X.208(说明语法)和ISO8825/ITU X.209(说明基本编码规则)规范。
⼏个概念:(1)实际语法指诸如C、ObjectiveCaml等这样实际编程语⾔;(2)抽象语法(AbstractSyntax)指ASN.1,是协议采⽤ASN.1规范描述的描述⽂本。
描绘了与任何表⽰数据的编码技术⽆关的通⽤数据结构。
抽象语法使得⼈们能够定义数据类型,并指明这些类型的值。
抽象语法只描述数据的结构形式,与具体的编码格式⽆关,同时也不涉及这些数据结构在计算机内如何存放。
(3)传输语法(TransferSyntax)指表⽰层交换数据的表⽰⽅法,是实际通讯系统间的码流。
当数据在两个表⽰层实体之间传输时,这些数据的实际⽐特模式表⽰⽅法就是传送语法。
(4)编码指将抽象语⾔法转换成实际通讯系统间⽐特流;(5)编码规则将抽象语⾔法转换成实际通讯系统间⽐特流所遵循的语法规则;⼆.相关背景知识1.为了顺利完成应⽤⾳的通讯,需使⽤以下概念:(1)抽象语法:定义了数据的常⽤结构(包括不同的数据类型),并且建⽴了和应⽤层对话所⽤的构架。
第二章 抽象语法表示ASN.1

抽象语法表示ASN.1
◦ Abstract Syntax Notation(ASN.1)是一种形式语言 ◦ 提供统一的网络数据表示,用于定义应用数据的抽象语 法和应用协议数据单元的结构。 ◦ OSI或SNMP管理信息库,都是用ASN.1定义的。
基本编码规则BER
◦ Basic Encoding Rule(BER)是一种编码规则 ◦ 用ASN.1定义的应用数据在传送过程中按照BER变换成 比特串。
在ASN.1中,每一个数据类型都有一个标签(tag) 标签有类型和值,数据类型由标签的类型和值唯 一确定。
标签(tag) 数据类型 值(tag) P23 表2-3
标签的类型分为以下4种:
◦ 通用标签:UNIVERSAL表示,由标准定义的。 ◦ 应用标签:APPLICATION表示,是由某个具体应用定 义的类型。 ◦ 上下文专用标签:Context-Specific表示,这种标签在 一定范围)中适用。 ◦ 私有标签:PRIVATE表示,用户定义的标签。
host 1 format
host 2 format
为了保证同一数据对象在不同计算机中语义的正确 性,实现在不同应用系统之间的信息交换。 对于网络中n个异体的节点能互通,我们需要为每 个节点编写(n-1)个编解码程序,即需要总数为 n*(n-1)个编解码程序。
ASN.1的作用是提供统一的网络数据表示 在互相通信的端系统中至少有一个应用实体(如 SNMP、TELNET、FTP等)和一个表示实体(即 ASN.1)。 表示实体定义了应用数据的抽象语法。 应用协议按照预先定义的抽象语法构造协议数据 单元,用于交换信息。 表示实体则对应用层数据进行编码,将其转换成 二进制的比特串进行传送。
ASN1编码

位8 0 0 1 1
位7 0 1 0 1
类别 通用(Universal) 应用(Application) 上下文特定(Context Specific) 专用(Private)
所有的类型中,通用类别最常用。 <2>. 结构化位。 结构化位(constructed bit)表示一个给定的编码是否是相同类型的多种编码的结 构化。结构化元素是容器类型必需的,因为在逻辑上,它们只是其他元素的集合。 结构化元素有自己的头字节和长度字节,之后是元素各个要素组件的单独编码。 也就是说,这些要素组件是独立地可解码 ASN.1 数据类型。 严格的说,容器类是唯一允许使用结构化位的数据类型。这是因为对于其他数据 类型,给定内容,只允许一种编码。所以其他所有数据类型的结构化位都为 0。 <3>. 原始类型。 ASN.1 头字节的低 5 位定义了 32 种 ASN.1 的原始类型(primitive type)
值 0 1 2 127 128 -1 -128 -32768 1234567890 编码 0x02 01 00 0x02 01 01 0x02 01 02 0x02 01 7F 0x02 02 00 80 0x02 01 FF 0x02 01 80 0x02 02 80 00 0x02 04 49 96 02 D2
ASN.1 编码
1.什么是 ASN.1(抽象语法记法一)? ASN.1 是 ITU-T 的一个标准集,它用来编码及表示通用数据类型,这些数据类型有可 打印串值, 八位位组串值, 位串值, 整数值以及用可移值方式组合而成的其他类型序列值. 简 单的说,ASN.1 指定了以何种方式对非平凡的数据类型进行编码,以便其他任何平台及第 三方工具都能够解释其内容.比如,字母 a 在一些平台以 ASCII 编码为十进制数值 97,而在 其他非 ASCII 平台上,可能会是另外的编码.而 ASN.1 指定了一种编码方式,在任何平台 上,字母 a 的编码都是统一的.
ASN1讲解ppt课件

21
ASN.1编码介绍
►TaggedObject
▪ Context-specify ▪ IMPLICIT -- 改变下层类型标签 ▪ EXPLICIT -- 在外层增加类型标签
pkcs-1 OBJECT IDENTIFIER ::={ iso(1) member-body(2) US(840) rsadsi(113549) pkcs(1) 1 }
OID
含义
1.2
ISO成员体
1.2.840
美国
1.2.840.113549
RSA数据安全公司
1.2.840.113549.1
RSA数据安全公司,PKCS
► DERObjectIdentifier
DERObjectIdentifier sha1_rsa = new DERObjectIdentifier(“1.2.840.113549.1.1.5”);
17
ASN.1编码介绍
►PrintableString编码示例
Country Name ::= PRINTABLE STRING ▪ 提示 ...13 02 43 4E ...
19
ASN.1编码介绍
►Set编码示例
▪ SET
一个或多个给定类型的无序集合
▪ SET OF 0个或多个给定类型的无序集合
SignerInfos ::= SET OF SignerInfo SignerInfo ::= SEQUENCE { ... }
►DERSet
DERSequence signerInfo1 = ... ; DERSequence signerInfo2 = ... ; DEREncodableVector derVector = new DEREncodableVector(); derVector.add(signerInfo1); derVector.add(signerInfo2); DERSet set = new DERSet(derVector);
抽象语法表示asn.1填空题

[填空选择题]P231、(抽象语法表示):一种形式语言,提供统一的网络数据表示,通常用于定义应用数据的抽象语法和应用层协议数据单元的结构。
P232、表示层的功能:提供统一的网络数据表示。
P233、表示实体定义了应用数据的抽象语法。
4、传输语法:把抽象数据变换成比特串的编码规则。
P235、抽象语法用于定义应用数据,它类似程序设计语言定义的抽象数据类型。
P23二、的基本概念P24-311、作为一种形式语言,有严格的BNF定义。
P242、在中,每一个数据类型都有一个标签(tag),标签有类型和值。
P243、标签的类型分为4种,分别是:通用标签、应用标签、上下文专用标签和私有标签。
P24通用标签UNIVERSAL:由标准定义,适用于任何应用;应用标签APPLICATION:是由某个具体应用定义的类型;上下文专用标签CONTEXT SPECIFIC:这种标签在文本的一定范围(例如,一个结构struct)中适用;私有标签PRIVATE:用户定义的标签。
4、定义的数据类型可分为4类:分别为简单类型、构造类型、标签类型、其他类型。
这些数据类型的标签值均为通用标签Universal,有20多种。
P24●简单类型:由单一成分构成的原子类型;定义的数据类型中除了序列SEQUENCE和集合SET两种类型不属于简单类型外,其他10多种均属于简单类型。
P25●构造类型:由两种以上成分构成的构造类型,如序列SEQUENCE、集合SET类型。
●标签类型:由已知类型定义的新类型;●其他类型:包括CHOICE和ANY两种类型。
以下是标签和类型关系图:6、枚举类型ENUMERATED:是一个整数的表,每一个整数有一个名字。
枚举类型与整数类型区别在于整数类型可以进行算术运算而枚举类型不能进行任何算术运算,也即枚举类型的值只是用证书表示的一个符号,而不具有整数的性质。
P267、对象类型OBJECT IDENTIFIER:泛指网络中传输的任何信息对象,其值是一个对象标识符,由一个整数序列组成,它惟一地标识一个对象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 时序
– 对事件实现顺序的详细说明
ASN.1的作用
• BNF:Backus-Naur Form • 提供统一的网络数据表示 • 用来定义应用数据的抽象语法和应用层协 议数据单元的结构 • 其中的BER(基本编码规则)部分用来把应 用数据变换成比特串
抽象语法
• 类似于通常程序设计语言定义的抽象数据 类型
• 这一组可以叫做基本类型,它们的值已经 在表2.1中列出了。
枚举类型
• 枚举类型ENUMERATED是一个整数的表,每 一个整数有一个名字。 • 与此类似的是,对于某些整数类型的值也 可以定义一个名字,但这两种类型是有区 别的。 • 对整数可以进行算术运算,但对枚举类型 却不能进行任何算术运算, • 枚举类型的值只是用整数表示的一个符号, 而不具有整数的性质。
第二章 抽象语法表示ASN.1
钱松荣 复旦大学
ASN的中文含义
• • • • 英文:Abstract Syntax Notation ISO 8824 ASN.1 ISO 8825 BER ITU X.208
网络协议的基本元素
• 语法
– 通信数据的结构、格式、编码等
• 语义
– 对具体事件应发出何种控制信息,完成何种动 作以及做出何种应答
ASN.1的基本概念
• 作为一种形式语言,ASN.1有严格的BNF定 义。 • 解释ASN.1基本概念 • 给出一个抽象数据类型的例子。
ASN.1的文本约定
• Lexical Conventions 1. 书写的布局是无效的,多个空格和空行等效于一个空 格 2. 用于表示值和字段的标识符、类型指针(类型名)和 模块名由大小写字母、数字和短线(减号)组成 3. 标识符以小写字母开头 4. 类型指针和模块名以大写字母开头 5. ASN.1定义的内部类型全部由大写字母表示 6. 关键字全部用大写字母表示 7. 注释以两个短线(减号)开始,以两个短线或行尾结 束
定义枚举类型和定义整数类型的例 子
• EthernetAdapterStatus::=
ENUMERATED{normal(0),
offline(2), failed(3)}
degraded(1),
• EthernetNumberCollisionsRange::=
INTEGER{minimum(0), maximum(1000)}
传输语法
• 表示实体则对应用层数据进行编码,将其 转换成二进制的比特串,例如把十进制数 变成二进制数、把字符变成ASCII码等。 • 应用协议按照预先定义的抽象语法构造协 议数据单元,用于和对等系统的应用实体 交换信息。 • 比特串由下面串的编码规则叫做 传输语法。
简单类型
• 表2-1中除UNIVERSAL 16和UNIVERSAL 17之 外的都是简单类型 • 可以直接定义它们的值的集合,可以把这 些类型作为原子类型构造新的数据类型
简单类型的第一组
• 简单类型分为4组。 • 第一组包括BOOLEAN、INTEGER、BIT STRING、OCTET STRING、REAL和 ENUMERATED等
表2.1 ASN.1定义的通用类型
标 签 UNIVERSAL 1 UNIVERSAL 2 UNIVERSAL 3 UNIVERSAL 4 UNIVERSAL 5 UNIVERSAL 6 UNIVERSAL 7 UNIVERSAL 8 UNIVERSAL 9 UNIVERSAL 10 UNIVERSAL 11~15
NULL类型(续)
• • • • • • • • • • • • • • • NULL也可以用在表示链表结束的空接点,如: LinkedList ::= SEQUENCE { data Data, next CHOICE { linked-list LinkedList, end NULL } } 当然,可以使用SEQUENCE OF来达到类似目的: LinkedList ::= SEQUENCE OF Data { … }
表2.1 ASN.1定义的通用类型
UNIVERSAL 16 UNIVERSAL 17 UNIVERSAL 18 UNIVERSAL 19 UNIVERSAL 20 UNIVERSAL 21 UNIVERSAL 22 UNIVERSAL 23 UNIVERSAL 24 UNIVERSAL 25 UNIVERSAL 26 UNIVERSAL 27 UNIVERSAL 28 以后 SEQUENCE, SEQUENCE OF SET, SET OF NumericString PrintableString TeletexString VideotexString IA5String UTCTime GeneralizedTime GraphicString VisibleString GeneralString 保留 序列 集合 数字 0~9 和空格 可打印字符串 由 CCITT T.61 建议定义的字符集 由 CCITT T.100 和 T.101 建议定义的字符集 国际标准字符集 5(相当于 ASCII 码) 时间 时间 由 ISO 8824 定义的字符集 由 ISO 646 定义的字符集 通用字符集 为 ISO 8824 保留
简单类型的第四组
• 包含4种类型:
– NULL是空类型,它没有值,只占用结构中的一个位置,该位 置可能出现或不出现数据。 – EXTERNAL是外部类型,即标准之外的文档定义的类型。 – UTCTime: (世界通用时)分别用两位数字表示年、月和日(即 YYMMDD),然后是时、分和秒(即hhmmss),最后可以说明 是否为本地时间 – GeneralizedTime:用4位数字表示年,用两位数字表示月和 日,最后也可以说明是否为本地时间。 – 值20000721182053.7是GeneralizedTime类型的一个值,表示 2000年7月21日,当地时间18点20分53.7秒。 – 值20000721182053.7Z表示同样的时间,但是加了符号Z,则 表示UTC时间。 – 如果写为20000721182053.7+0800则除了表示同样的当地时 间外,还说明了加8小时可以得到UTC时间。
BOOLEAN类型
• • • • • 是两个值的集合:TRUE,FALSE。如下: RoundResult ::= BOOLEAN ok RoundResult ::= TRUE ko RoundResult ::= FALSE 该类型的UNIVERSAL Tag值为1。
NULL类型
• 空类型,只有一个值NULL。作为一种结果,空类型是传输报告 和响应的典型情况。 • Ack ::= NULL • 该类型的UNIVERSAL Tag值为5。 • 它经常在时间信息中使用,表示传送时间没有赋值,如: • Clock ::= CHOICE • { • time UTCTime, • out-of-order NULL • } • 当时钟电池没有电时,值为: • battery-down Clock ::= out-of-order:NULL
简单类型的第二组
• 包括各种字符串类型,标签为UNIVERSAL 18~22和UNIVERSAL 25~27 • 这些类型都可以看作是OCTET STRING类型的 子集, • 都是采纳其他标准的类型。
简单类型的第三组
• 包括OBJECT IDENTIFIER和Object Descriptor两种 类型。 • 对象类型泛指网络中传输的任何信息对象 • 例如标准文档、抽象语法和传输语法、数据结 构和管理对象等都可以归入信息对象范畴。 • OBJECT IDENTIFIER类型的值是一个对象标识符, 由一个整数序列组成,它惟一地标识一个对象。 • 对象描述符(Object Descriptor)则以人工可读的 形式描述信息对象的语义。
抽象语法和传输语法
• 抽象语法是独立于任何编码技术的,只与应用 有关。 • 抽象语法要能满足应用的需要,能够定义应用 需要的数据类型和表示这些类型的值。 • ASN.1是根据当前网络应用的需求制定的标准 (CCITT X.208和ISO 8824),是抽象语法的一种。 • 对应一种抽象语法可以选择不止一种传输语法 (编码规则)。 • 对传输语法的基本要求:支持对应的抽象语法, 另外还可以有其他一些属性,例如支持数据加 密或压缩,或者两者都支持。
• 如: counter Lottery-number ::= 45 sextuple Lottery-draw ::= { 7, 12, 23, 31, 33, 41 } pair Coordinates ::= { x 5, y -3 } son-choice Afters ::= dessert:"profiterolles" date Date ::= "20150509"
为什么要这么做?
• 应为不同的系统,数据表达方式各不相同
端系统A 用户
端系统B 用户
用户表示映像 本地存储 本地映像 应用实体 抽象语法 ASN.1
用户表示映像 本地存储 应用实体 本地映像
编码规则
编码规则
表示实体
传输语法 BER
表示实体
图2.1 关于信息表示的通信系统模型
信息表示的通信系统模型
ASN.1定义的通用类型
• 简单类型:由单一成分构成的原子类型
• 构造类型:由两种或两种以上成分构成的 类型 • 标签类型:由已知类型定义的新类型 • 其他类型:CHOICE和ANY
ASN.1定义类型的方法
• <新类型的名字> ::= <类型描述>
– <新类型的名字>是一个以大写字母开头的标识 符; – <类型描述>是基于内建类型或在其它地方定义 的类型。
• 表示层的功能是提供统一的网络数据表示。 • 在互相通信的端系统中至少有一个应用实体(例如FTP、 TELNET、SNMP等)和一个表示实体(即ASN.1)。 • 表示实体定义了应用数据的抽象语法,这种抽象语法类 似于通常程序设计语言定义的抽象数据类型。 • 表示实体则对应用层数据进行编码,将其转换成二进制 的比特串,例如把十进制数变成二进制数、把字符变成 ASCII码等。 • 应用协议按照预先定义的抽象语法构造协议数据单元, 用于和对等系统的应用实体交换信息。 • 比特串由下面的传输实体在网络中传送。把抽象数据变 换成比特串的编码规则叫做传输语法。 • 在各个端系统内部,应用数据被映像成本地的特殊形式, 存储在磁盘上或显示在用户终端上