ASN.1语法及其公钥的理解
1 概述
前段时间对非对称加密,学习了部分内容,但是于密钥的存储部分,一直有个难以理解部分,就是在IE等浏览器中导出的证书,应该如何去理解。
其中http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
这两个博客我搜到的对RSA理解最好的博客。在最后提到公钥证书的保存的时候,提到了ASN.1的语法,结果发现理解起来比较难,就在此记录一下。
2 参考文章
ASN.1的实例:http://hi.baidu.com/mathack/item/d0ad4cc1514a3663f7c95da2
ASN.1的语法:http://www.cppblog.com/smagle/archive/2011/05/10/146088.html
3 ASN.1主要语法
3.1 ASN.1
ASN.1抽象语法标记(Abstract Syntax Notation One) ASN.1是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代,也不用去管到底是什么样的应用程序。(百度百科)
3.2 主要语法
3.2.1 ASN.1数据类型
ASN.1针对广泛的应用定义了多种数据类型,我们这里只讨论跟密码学应用相关的数据类型.我们将讨论如下数据类型: 布尔型 (Boolean); 八位位组串 (OCTETString); 位串 (BIT String); IA5String; 可打印字符串(PrintableString); 整数 (INTEGER); 对象标识符 (OBJECTIdentifier, OID); 世界协调时 (UTCTIME); 空 (NULL); 序列,单一序列; 集合; 单一集合; 任何ASN.1编码都是以两个字节开始(或者八位位组,含有8个二进制位),不管什么类型,它们都是通用的.第一个字节是类型标识符,也包含一些修正位;第二各字节是长度
3.2.2 ASN.1头字节
<1>. 类别位。 类别位(classificationbits)由两位表示,用来描述数据将要解释的上下文。
位8 |
位7 |
类别 |
0 |
0 |
通用(Universal) |
0 |
1 |
应用(Application) |
1 |
0 |
上下文特定(Context Specific) |
1 |
1 |
专用(Private) |