欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ANS.1的基础总结

程序员文章站 2022-06-01 23:29:52
...

一、ASN.1定义和作用

1.1 定义

ASN.1描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代,也不用去管到底是什么样的应用程序。

1.2 作用

为了解决高级语言中结构化数据在网络传输中的结构关系能送达目的地进行还原,出现了以下几种数据序列化的方法:ASN.1,XML,Json等。

二、ASN.1描述

2.1 数据类型

Integer 、 Bit String 、OCTET String 、Null 、Object Indentifier 、UTF8 String 、Printable String 、UTC time 、Sequence 、 Set 、Choice、ANY等数据类型
除了choice和ANY类型之外的其他数据类型,都有一个标记符。标记符的构成为:
标记符 = 标记符类型 + 标记符ID

2.1.1 标记符类型

类型 描述
Universal 标准类型
Application 应用相关
private 定义属于特定组织的类型
Context-Specify 上下文的类型,定义特定的结构

2.1.2数据类型对应的标记符ID

数据类型 标记符ID 描述
Integer 0X02 全部整数(包含正数和负数)
REAL 实数,表示浮点数
ENUMERATED $1 标识符的枚举(实力状态机的状态)
Bit String 0X03 比特串
OCTET String 0X04 字符串
Null 0X05 只包含一个值null,用于传送一个报告或者作为choice类型的某些值
Object Indentifier 0X06 由注册中心赋予的一个实体的标识符
UTF8 String 0X12 各种字符串还有ISO64String等等。。
Printable String 0X13
UTC time 0X17 日期
Sequence 0X30 有序集合
Set 0X31 无序集合

图示:
ANS.1的基础总结

2.1.3 编码类型

ASN的编码类型有:BER和DER两种类型
BER:是Basic Encoding Rules 的缩写。它定义了一种或者几种方法,将ASN1语法的数据对象转换成二进制字节码。
DER:是Distinguished Encoding Rules的缩写。是唯一的一种方法,将ASN1语法的数据对象转换成二进制字节码。

2.1.3.1 BER的规则TLV

BER传输语法的格式一直是TLV三元组<Type,Length,Value>,也叫做<Tag,Length,Value>。TLV每个域都是一系列八位组,对于组合结构,其中V还可以是TLV三元组。
Type 表示数据类型
Length 表示数据长度
Value 表示数据
ANS.1的基础总结
== 在上图框内的部分,绿色部分为对象类型ID,蓝色部分为值的长度,黄色部分为值。
如果本结构中还有其他的结构类型,则该值仍为一个三元组组成 ==

2.1.4 CHOICE和ANY类型

2.1.4.1 CHOICE

选择类型。包含一个可供选择的数据类型列表。对于类型能够在事先都知道,可用此类型。
Prize::=CHOICE{
car IA5string,
cash INTEGER,
nothing BOOLEAN }

peter Prize::=TRUE 或者
John Prize::= “ Lincoln ” 或者
Sam Prize::= 25000

2.1.4.1 ANY

如果在定义数据时还不能确定数据类型,可以使用ANY型。ANY型可以被任何ASN.1类型置换。
e.g. TextBook::=SEQUENCE {
author IA5string,
reference ANY}

实例:book1 TextBook ::= {
author "shakespeare ",
reference IA5string " ISBN0669123757 "}

book2 TextBook ::= { author "shakespeare ",
reference INTEGER 1988}

三、ASN.1与证书

3.1 ASN.1、X509v3、证书之间的关系

X509v3定义了证书的结构,里面定义了证书含有哪些信息。
ASN.1定义了证书的语法
X509v3遵循ASN.1语法

类比于ASN.1为java的基础语法和语句。 X509v3为User.java的一个用户模板。这个模板要根据java语法去定义。

3.2 证书结构

Certificate ::= SEQUENCE {
        tbsCertificate       TBSCertificate, -- 证书主体
        signatureAlgorithm   AlgorithmIdentifier, -- 证书签名算法标识
        signatureValue       BIT STRING --证书签名值,是使用signatureAlgorithm部分指定的签名算法对tbsCertificate证书主题部分签名后的值.
         }
TBSCertificate ::= SEQUENCE {
        version         [0] EXPLICIT Version DEFAULT v1, -- 证书版本号
        serialNumber         CertificateSerialNumber, -- 证书***,对同一CA所颁发的证书,***唯一标识证书
        signature            AlgorithmIdentifier, --证书签名算法标识
        issuer               Name,                --证书发行者名称
        validity             Validity,            --证书有效期
        subject              Name,                --证书主体名称
        subjectPublicKeyInfo SubjectPublicKeyInfo,--证书公钥
        issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
                             -- 证书发行者ID(可选),只在证书版本2、3中才有
        subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
                             -- 证书主体ID(可选),只在证书版本2、3中才有
        extensions      [3] EXPLICIT Extensions OPTIONAL
                             -- 证书扩展段(可选),只在证书版本3中才有
        }
Version ::= INTEGER { v1(0), v2(1), v3(2) }
 
CertificateSerialNumber ::= INTEGER
AlgorithmIdentifier ::= SEQUENCE {
        algorithm               OBJECT IDENTIFIER,
        parameters              ANY DEFINED BY algorithm OPTIONAL }
Parameters:
  	Dss-Parms ::= SEQUENCE { -- parameters ,DSA(DSS)算法时的parameters,
RSA算法没有此参数
        p             INTEGER,
        q             INTEGER,
        g             INTEGER }
SignatureValue:
Dss-Sig-Value ::= SEQUENCE { -- sha1DSA签名算法时,签名值
                   r       INTEGER,
                     s       INTEGER }
 
Name ::= CHOICE {
     RDNSequence }
 
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
 
RelativeDistinguishedName ::=  SET OF AttributeTypeAndValue
 
AttributeTypeAndValue ::= SEQUENCE {
     type     AttributeType,
     value    AttributeValue }
 
AttributeType ::= OBJECT IDENTIFIER
AttributeValue ::= ANY DEFINED BY AttributeType
 
Validity ::= SEQUENCE {
        notBefore      Time,  -- 证书有效期起始时间
        notAfter       Time  -- 证书有效期终止时间 }
 
Time ::= CHOICE {
        utcTime        UTCTime,
        generalTime    GeneralizedTime }
 
UniqueIdentifier ::= BIT STRING
 
SubjectPublicKeyInfo ::= SEQUENCE {
        algorithm            AlgorithmIdentifier, -- 公钥算法
        subjectPublicKey     BIT STRING            -- 公钥值
        }
SubjectPublicKey:
RSAPublicKey ::= SEQUENCE { -- RSA算法时的公钥值
         modulus            INTEGER, -- n
         publicExponent     INTEGER -- e -- }
 
Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
Extension ::= SEQUENCE {
        extnID      OBJECT IDENTIFIER,
        critical    BOOLEAN DEFAULT FALSE,
        extnValue   OCTET STRING }
相关标签: 安全