ASN1简单介绍

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ASN1简单介绍
ASN.1 in Action
LJ 2006-06-27
内容提要?ASN.1背景
ASN.1基本概念和语法
ASN.1编码介绍
ASN.1示例
ASN.1 = Abstract Syntax Notation One ?目标:
传送语法
互联网上数据传输时的表现形式,通常用8位位组的流表示?中立作为标准的计算机对象描述规则,平台无关,实现无关?抽象
以字节为基础单位,能够描述各种复杂的对象结构
Syntax
ASN.1 --Abstract Syntax Notation One
Rules
BER --ASN.1 Basic Encoding Rules
DER --ASN.1 Distinguished Encoding Rules
BER(ASN.1 Basic Encoding Rules)
定义了一种或几种方法,使用ASN.1语法将数据对象转换成二进制字节码
DER(ASN.1 Distinguished Encoding Rules)?BER的子集,定义了唯一一种方法,使用ASN.1语法将数据对象转换成二进制字节码BER DER
特点
标准性
高效性
扩展性
比其他任何一种语言更为丰富的数据结构
基本类型
简单类型“原子”的,无分量
结构类型有分量
标记类型从其他类型衍生而来
其他类型CHOICE, ANY
赋值操作符::=
::=用来对类型和值命名,并可用这些名字定义其他类型和值基本描述语法
DigestInfo ::= SEQUENCE {
digestAlgorithm DigestAlgorithm,
digest Digest }
DigestAlgorithm ::= AlgorithmIdentifier
Digest ::= OCTET STRING
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL } ASN.1中绝大部分类型(除CHOICE和ANY)都有一个标记符标记符= 标记符类型+ 标记符ID
标记符类型
Universal标准类型
Application应用相关(同种ID在不同应用中可能意义不同) Private定义属于特定组织的类型
Context-Specify上下文相关的类型,定义特定的结构
常用标准ASN.1标记符示例:
Integer0x02
Bit String0x03
OCTET String0x04
Null0x05
Object Identifier0x06
UTF8 String0x12
Printable String0x13
UTC Time0x17
Sequence0x30
Set0x31
长度表示(DER编码标准)
长度小于127(包含),1字节编码:
38表示为[0010 0110]
长度大于127,多字节编码,第一字节为长度字节数,并且bit8为1:
201表示为[1000 0001] [1100 1001]
TLV ?
TLV Schema = Tag, Length and Value Schema
ILC ?
ILC Schema = Identifier, Length and Conents Schema Tag Length Value
示例
06 07 2A 86 4A 86 F7 0D 01
06072A 86 4A 86 F7 0D 01
30 82 02 51 30 82 01 BA A0 03 02 01...
3082 02 5130 82 01 BA A0 03 02 01...
OID = Object Identifier
表示一个诸如算法,属性类型或注册机构对象定义的一个整数序列
OID的值由注册机构来赋予,每个注册机构负责定义一
个特定的序列开头的所属序列
pkcs-1 OBJECT IDENTIFIER ::={
iso(1) member-body(2) US(840) rsadsi(113549) pkcs(1)1}
OID含义
1.2ISO成员体
1.2.840美国
1.2.840.113549RSA数据安全公司
1.2.840.113549.1RSA数据安全公司,PKCS
Bouncy Castle
org.bouncycastle.asn1.*
PKIToolv2.0
/doc/4e12512733.html,.jit.ida.util.pki.a sn1.*
Integer编码示例
SignedData :: = SEQUENCE {
version Version
... }
Version ::= Integer
提示... 02 01 02 ...
DERInteger
DERInteger version = new DERInteger(new BigInteger(2));
OID编码示例
pkcs-1 OBJECT IDENTIFIER ::= {
iso(1) member-body(2) US(840) rsadsi(113549) pkcs(1) 1 } rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 }
SHA1WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 5 }?提示1.2.840.113549.1.1.5
提示... 06 09 2A 86 48 86 F7 0D 01 01 05 ...
DERObjectIdentifier
DERObjectIdentifier sha1_rsa =
new DERObjectIdentifier(“1.2.840.113549.1.1.5”);
PrintableString编码示例
Country Name ::= PRINTABLE STRING
提示...13 02 43 4E ...
DERPrintableString
DERPrintableString cn = new DERPrintableString(“CN”);
Sequence编码示例
SEQUENCE一个或多个给定类型的有序集合?SEQUENCE OF0个或多个给定类型的有序集合RSAPublicKey ::= SEQUENCE { modulus INTEGER, --n
publicExponent INTEGER --e }
DERSequence
DERInteger modulus = ... ;
DERInteger publicExponent = ... ;
DEREncodableVector derVector = new DEREncodableVector();
derVector.add(modulus);
derVector.add(publicExponent);
DERSequence sequence = new DERSequence(derVector);。

相关文档
最新文档