300 likes | 392 Views
ASN.1 & BER. J. Won-Ki Hong Dept. of Computer Science and Engineering POSTECH Tel: 054-279-2244 Email: jwkhong@postech.ac.kr. Table of Contents. Abstract Syntax Notation One (ASN.1) Overview Properties & Restrictions Type and Value Definitions ASN.1 Simple Types ASN.1 Structured Types
E N D
ASN.1 & BER J. Won-Ki Hong Dept. of Computer Science and Engineering POSTECH Tel: 054-279-2244 Email: jwkhong@postech.ac.kr
Table of Contents • Abstract Syntax Notation One (ASN.1) • Overview • Properties & Restrictions • Type and Value Definitions • ASN.1 Simple Types • ASN.1 Structured Types • ASN.1 Macro Definitions • Basic Encoding Rules (BER) • Overview • Tags, Lengths & Values • Encoding Examples
Overview of ASN.1 • a machine independent data description language • CCITT (X.208) and ISO (ISO 8824) standard • define abstract syntax of application data • define the structure of application and presentation protocol data units (PDUs) • define SNMP and OSI Management Information Base (MIB)
ASN.1 Terminology • Abstract Syntax • describes the generic structure of data • allows data types and values to be defined • Data Type • a named set of values -- may be simple or structured • Encoding • sequence of octets used to represent a data value • Encoding Rules • specifies the mapping from one syntax to another • Transfer Syntax • describes how data are actually represented in terms of bit patterns while in transit
User User user presentation mapping user presentation mapping Local storage (e.g, MIB) Local storage (e.g, MIB) Application component Application component local mapping local mapping Abstract Syntax (e.g., ASN.1) encoding rules encoding rules data transfer component (e.g, TCP, OSI session) data transfer component (e.g, TCP, OSI session) Transfer Syntax (e.g., BER) Abstract & Transfer Syntaxes
ASN.1 Module Definition • The basic building block of an ASN.1 specification is the module • See Figure B.2 (BNF grammar for ASN.1) • Modules have the following basic form <modulereference> DEFINITIONS ::= BEGIN EXPORTS IMPORTS AssignmentList END 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.
Lexical Conventions • Comments begin with two hyphens (“--”) and terminated either by another set (“--”) or the end of line character • Identifiers begin with a letter, and may contain letters, digits, and hyphens, but may not end with a hyphen or contain two consecutive hyphens • The type identifier must start with an uppercase letter • The value identifier must start with a lowercase letter • Reserved keywords are all uppercase • Multiple spaces and blank lines can be considered as a single space
Categories of ASN.1 Data Types • Simple (Primitive) • atomic types, with no components • Structured • types with components • Tagged • types derived from other types • Other • CHOICE and ANY types Every ASN.1 data type, with the exception of CHOICE and ANY types, has an associated TAG, which consists of a class name and nonnegative integer tag number
Classes of TAG • UNIVERSAL • Built-in types, application independent types • See Table B.2 • APPLICATION • Application specific types • CONTEXT-SPECIFIC • limited to a context within an application • PRIVATE • defined by users and not covered by any standard
ASN.1 Simple Types • INTEGER • the positive and negative whole numbers, including zero • OCTET STRING • a sequence of zero or more octets (8-bit bytes) • OBJECT IDENTIFIER (OID) • the set of values associated with information objects allocated by the standard • NULL • the single value NULL Other ASN.1 simple types include boolean, bit string, real, enumerated, PrintableString, etc.
ASN.1 Structured Types • SET • a collection of one or more types • SET OF • a collection of zero or more occurrences of a given type • SEQUENCE • an ordered collection of one or more types • SEQUENCE OF • an ordered collection of zero or more occurrences of a given type • CHOICE • a list of alternatives
ASN.1 Example Informal Description of Personnel Record Name: James W Hong Title: Associate Professor Employee Number: 20292 Date of Hire: May 26, 1995 Name of Spouse: In-Young B Hong Number of Children: 2 Child Information Name: Suk D Hong Date of Birth: 29 March 1988 Child Information Name: Myungdo M Hong Date of Birth: 10 August 1994
ASN.1 Description of the Record Structure PersonalRecord ::= [APPLICATION 0] IMPLICIT SET { Name, title [0] VisibleString, number EmployeeNo, dateOfHire [1] Date, nameOfSpouse [2] Name, children [3] IMPLICIT SEQUENCE OF ChildInfo DEFAULT {} } ChildInfo ::= SET { Name, dateOfBirth [0] Date} Name ::= [APPLICATION 1] IMPLICIT SEQUENCE { givenName VisibleString, initial VisibleString, familyName VisibleString} EmployeeNo ::= [APPLICATION 2] IMPLICIT INTEGER Date ::= [APPLICATION 3] IMPLICIT VisibleString
ASN.1 Description of a Record Value { {givenName “James”, initial “W”, familyName “Hong”}, title “Associate Professor” number 20292 dateOfHire “19950526” nameOfSpouse {givenName “In-Young”, initial “B”, familyName “Hong”}, children { { {givenName “Suk”, initial “D”, familyName “Hong”}, dateOfBirth “19880329”}, { {givenName “Myungdo”, initial “M”, familyName “Hong”}, dateOfBirth “19940810”} } }
ASN.1 Macro Definitions • ASN.1 macro notation can be used to extend the syntax of ASN.1 to define new types and values • a macro definition is expressed in the macro notation and used to define a set of macro instances • a macro instance is generated from a macro definition by substituting values for variables • the macro is used to extend the ASN.1 syntax but does not extend the encoding
Macro Definition Format <macroname> MACRO ::= BEGIN TYPE NOTATION ::= <new-type-syntax> VALUE NOTATION ::= <new-value-syntax> <supporting-productions> END
Macro Definition Example OBJECT-TYPE MACRO ::= BEGIN TYPE NOTATION ::= “SYNTAX” type (TYPE ObjectSyntax) “ACCESS” Access “STATUS” Status VALUE NOTATION ::= value (VALUE ObjectName) Access ::= “read-only” | “read-write” | “write-only” | “not-accessible” Status ::= “mandatory” | “optional” | “obsolete” END
Overview of BER • BER – Basic Encoding Rules • an encoding specification • CCITT (X.209) and ISO (ISO 8825) standard • describes a method for encoding values of each ASN.1 type as a string of octets • based on the use of a type-length-value (TLV) structure Type Value Length Fields of a BER encoded ASN.1 value
BER Type Field Class 8 7 6 5 4 3 2 1 BIT Constructed Most significant Least significant Tag number Description CLASS Bit 8 Bit 7 0 Built-in types 0 Universal SNMP defined types 1 0 Application Context-Specific 1 0 Used in context 1 Private 1 Not used in the SNMP protocol
Tag Values for SNMP Types Tag Number Tag Value SNMPv1 protocol SNMPv2 protocol ASN.1 Tag Type UNIVERSAL 2 INTEGER/Integer32 0x02 0x02 0x04 0x04 UNIVERSAL 4 OCTET STRING 0x05 0x05 UNIVERSAL 5 NULL OBJECT IDENTIFIER UNIVERSAL 6 0x06 0x06 SEQUENCE 0x10 0x30 UNIVERSAL 16 IpAddress APPLICATION 0 0x00 0x40 Counter/Counter32 0x01 0x41 APPLICATION 1 Gauge/Gauge32 0x42 0x02 APPLICATION 2 TimeTicks APPLICATION 3 0x03 0x43 Opaque 0x04 0x44 APPLICATION 4 Counter64 APPLICATION 6 0x06 0x46
Encoding Methods • The TLV structure is recursive – for any ASN.1 value that consists of one or more components, the “value” portion of its TLV encoding itself consists of one or more TLV structures • Three methods for encoding an ASN.1 value: • Primitive, definite-length encoding • Constructed, definite-length encoding • Constructed, indefinite-length encoding • The method chosen depends on the ASN.1 type of the value to be encoded and whether or not the length of the value is known based on the type (see Table B.4)
1 = 102 0 1 1 0 0 1 0 Value Short(0)/Long(1) form indicator 1 0 1 1 1 0 0 1 0 0 1 0 1 1 0 1 1 0 1 0 1 1 0 1 BER Length Field • two forms of length field exist: • short form: specified in a single octet • long form: specified in multiple octets 1 0 0 0 0 1 Value 0 1 Short/Long form indicator = 7559605 Length of length Length value
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 Tag Universal 2 Length 1 0 0 0 0 0 0 0 0 What value was encoded? Value 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Tag Universal 2 Length 2 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 1 Value (1 of 2) Value (2 of 2) What value was encoded? BER Examples - Integers
0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 Tag Universal 4 Length 4 1 1 1 1 0 1 0 1 1 0 0 0 0 0 1 0 1st octet 2nd octet 1 0 0 0 1 1 0 1 1 1 0 0 1 1 0 1 4th octet 3rd octet Overall Length = 6 BER Example - Octet String Value of Octet String encoded is ‘EB069937’
BER Example - SEQUENCE Message ::= SEQUENCE { version INTEGER { version-1(0) }, community OCTET STRING } Given the above definition, what is the BER encoding of sampleMessage ::= { 0, ‘EB069937’h } ?
0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 Length 9 Tag universal 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 Value (1 of 9) integer Value (2 of 9) integer 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 Value (3 of 9) integer Value (4 of 9) OCTET STRING 0 0 0 0 0 0 1 0 1 1 1 1 0 1 0 1 Value (5 of 9) OCTET STRING Value (6 of 9) OCTET STRING 1 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1 Value (7 of 9) OCTET STRING Value (8 of 9) OCTET STRING 1 0 0 1 1 0 1 1 Value (9 of 9) OCTET STRING ... and its BER encoding is
Summary • We have covered a subset of ASN.1 and BER which are used in SNMP and OSI Management Frameworks • ASN.1 is widely used in defining application data and protocol data units • BER is widely used in defining transfer syntaxes • READ: • Stallings, SNMP, SNMPv2, SNMPv3 and RMON 1 and 2, 3rd Edition, Addison-Wesley, Appendix B