X509文件扩展名编码格式加密方式_第1页
X509文件扩展名编码格式加密方式_第2页
X509文件扩展名编码格式加密方式_第3页
X509文件扩展名编码格式加密方式_第4页
X509文件扩展名编码格式加密方式_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、X509 文件扩展名首先我们要理解文件的扩展名代表什么。DER、PEM、CRT和CER这些扩展名经常令人困惑。很多人错误地认为这些扩展名可以互相代替。尽管的确有时候有些扩展名是可以互换的,但是最好你能确定证书是如何编码的,进而正确地标识它们。正确地标识证书有助于证书的管理。这些扩展名对openssl是没有意义的编码 (也用于扩展名)· .DER = 扩展名DER用于二进制DER编码的证书。这些证书也可以用CER或者CRT作为扩展名。比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。· .PEM = 扩展名PEM用于AS

2、CII(Base64)编码的各种X.509 v3 证书。文件开始由一行" BEGIN “开始。常用的扩展名· .CRT = 扩展名CRT用于证书。证书可以是DER编码,也可以是PEM编码。扩展名CER和CRT几乎是同义词。这种情况在各种unix/linux系统中很常见。· CER = CRT证书的微软型式。可以用微软的工具把CRT文件转换为CER文件(CRT和CER必须是相同编码的,DER或者PEM)。扩展名为CER的文件可以被IE识别并作为命令调用微软的cryptoAPI(具体点就是rudll32.exe cryptext.dll, Cyrp

3、tExtOpenCER),进而弹出一个对话框来导入并/或查看证书内容。· .KEY = 扩展名KEY用于PCSK#8的公钥和私钥。这些公钥和私钥可以是DER编码或者PEM编码。CRT文件和CER文件只有在使用相同编码的时候才可以安全地相互替代。在通信系统中,为了让通信双方对通信媒介中传输的信息产生一致的理解,通信双方就必须明确所交换的信息类型与格式,ASN.1便是ITU-T为支持这种要求而制定的。在目前的通信领域中,由ASN.1所描述的信息或信息流若要在网络的各节点间进行传送,就必须先在发送端对他进行编码,转换成物理媒介(网络)可以传输的八位位组(OCTET)串的形式,然后

4、才能通过网络发送到目的节点;接收端再按约定的规则对其进行解码,把它从8位位组串的形式恢复成应用实体直接可用的形式,从而完成信息的传输和接收1. ASN.1的基本编码规则BER(Basic Encoding Rules)ISO在推出ASN.1的同时也推出了基本编码规则BER。实际上这是一种传送语法,它可以把复杂的用抽象语法描述的数据结构表示成简单的数据流,从而便于在通信线路上传送。BER以8bit为一个基本传送单位。对于每个所传送的值,无论是基本类型还是构造类型,都由TLV三个字段组成,TLV分别指类型标识符域(TAG),数据长度域(LENGTH)和数据域(VALUE)字段。其中,数据域可以多重

5、嵌套其他数据元素的TLV字段,BER编码的具体格式如下所示类型标识符域(T)数据长度域(L)TLVTLV数据域(V)· 类型标识符域占用一个字节,从低位为1开始编号,8和7位表示Tag类型,第6位是0表示编码类型是基本类型,第5 1位是Tag值,各个位表示的意义如下:bit取值表示含义8 70    0Universal (简单类型)0    1Application(应用类型)1    0context-specific(上下文类型)1    1private(专

6、用类型)60原始类型1构造类型5 1 TAG值· 数据长度域拥有短形式和长形式两种1. 短形式的数据长度域只有一个字节,第8位为0,其他低7位给出数据长度。2. 长形式的数据长度域有 2 127个字节第一个字节的的第8位为1,其他低7位给出后面该域使用的字节的数量,从该域的第二个字节开始给出数据的长度· 数据域给出了具体的数据值。该域的编码对不同的数据类型不一样·2. ASN.1的紧缩编码规则PER(Packet Encoding Rules)BER解决了不同终端系统之间的表示问题,但也带来了大量的冗余信息增加了通信量的开销。对应用而言,编码开销出现在编

7、码格式TLV三个字段的每个部分。紧缩编码规则(Packed Encoding Rules, PER)就是在BER的基础上,以减少编码开销为目的而设计的编码规则。使用PER的一个重要的前提是,用户数据是单个ASN.1类别,且接收方也有一个相同的ASN.1描述。基于此,PER可以抛弃BER按步就班的编码规则,省略对数据结构的编码,PER编码仍然采用TLV格式,尽管类型和长度字段经常可以忽略。与BER编码相比PER编码主要使用了三方面减小编码结果长度的技术,省略类型标识符,长度段的编码更加精简和对数字类型的编码更加精简。· 省略类型标识符 省略类型标识符在编码中似乎是一个重在部分

8、,但实际上通常是不必要的,由于网络通信双方都遵循统一的网络协议,因此它们不可以从数据结构中推导出特定元素的类型和标识,就可以在编码中省略类型标识符· 长度段的编码更加精简 BER的长度段的编码都是字节,而且BER长度的编码不考虑具体条件,然而PER的长度字段根据编码的类型的不同,有不同的单位。这些单位可以是比特、字节、元素、字符等,这也是PER利用数据结构已知的优势来减少编码量的又一方式;而且根据具体的条件限制,PER的长度段还可以大幅度削减,譬如当数据类型的长度固定时,该数据项的长度可以不编码。· 对数字类型的编码更加精简 在对Integer等数字类型

9、(包括Integer和一些类型的长度值编码的情况)进行编码时,BER采取的是直接对数值进行编码;而PER采取的是对数据的偏移值offset进行编码。所谓偏移值就是实际值减去下界的值。例如:Integer(123456789 . 123456790),在PER编码中123456790的offset=1,因此PER只需对1进行编码,这样对于那些下界类型很大的整数,可以节省大量字节,且编码本身非常简洁。证书文件编码格式介绍OpenSSL中虽然使用PEM作为基本的文件编码格式,但是,由于不同的对象其封装和标准格式不太一样,所以经常会导致读者产生迷惑。一、数据编码格式   

10、     首先介绍一下ASN.1(Abstract Syntax Notation One)标准,这是一种描述数字对象的方法和标准。ASN1是一种结构化的数字对象描述语言,它包括两部分:数据描述语言(ISO 8824)和数据编码规则(ISO 8825)。ASN.1的数据描述语言允许用户自定义基本的数据类型,并可以通过简单的数据类型组成更复杂的数据类型。比如:一个复杂的数据对象,如X.509证书,就是在其他一些数据类型上定义的,而其他数据类型又是在更基本的数据类型上建立的,直到回溯到定义的最基本的数据类型。    &

11、#160;   ASN.1提供了多种数据编码方法。包括了BER、DER、PER和XER等。这些编码方法规定了将数字对象转换成应用程序能够处理、保存和网络传输的二进制编码形式的一组规则。目前经常被采用的是BER(Basic Encode Rules)编码,但是BER编码具有编码不唯 一的性质,也就是说,一个相同的对象通过BER编码可能会产生几种不同的编码数据。所以,在OpenSSL和其他密码学相关软件中经常使用BER的一个子DER(Distinguished Encoding Rules)。对于每一个ASN.1对象,使用DER编码得出的二制编码码数据是唯 一的。 &

12、#160;      PEM编码全称是Privacy Enhanced Mail,是一种保密邮件的编码标准。通常来说,对信息的编码过程基本如下。1. 信息转换为ASCII码或其他编码方式,比如采用DER编码。2. 使用对称加密算法加密经过编码的信息。3. 使用BASE64对加密码后的信息进行编码。4. 使用一些头定义对信息进行封装,主要包含了进行正确解码需要的信息,头定义的格式形式如下:Proc-Type:4,ENCRYPTEDDEK-Info:cipher-name,ivec其中,第一个头信息标注了该文件是否进行了加密,该头信息可能的值包括E

13、NCRYPTED(信息已经加密和签名),MIC-ONLY(信息经过数据签名但没有加密),MIC-CLEAR(信息经过数字签名但是没有加密,也没有进行编码,可使用非PEM格式阅读),以及CLEAR;第二个头信息标注了加密的算法及对称加密块算法使用的初始向量。5. 在这些信息的前面加上如下形式头标注信息:-BEGIN PRIVACY-ENHANCED MESSAGE-在这些信息的后面加上如下形尾标注信息:-END PRIVACY-ENHANCED MESSAGE-OpenSSL的PEM编码基本上是基于DER编码之上的,也就是说,它在上述第一步采用的是DER编码,所以,从本质上来说,OpenSSL的

14、PEM编码就是在DER编码基础上进行BASE64编码,然后添加一些头尾信息组成的。二、证书标准        数据编码格式提供了封装数据的基本方法,但是,对于具体的数据对象,比如证书,根据其包含的内容的不同,还有更具体的表达式。        1、X.509证书        目前总的来说有三种常用的证书编码格式:X.509证书、PKCS#12证书和PKCS#7证书。X.509证书是最经

15、常使用的证书,它仅包含了公钥信息而没有私钥信息,是可以公开进行发布的,所以X.509证书对象一般都不需要加密。        X.509证书的格式通常如下:                 相关的可读解释信息(省略)             

16、;    -BEGIN CERTIFICATE-                 PEM编码的X.509证书内容(省略)                 -END CERTIFICATE-     &

17、#160;           除了“-BEGIN CERTIFICATE-”和“-END CERTIFICATE-”头尾格式外,还可能有这样不同的标识符:“-BEGIN X.509 CERTIFICATE-”、“-END X.509 CERTIFICATE-”或者“-BEGIN TRUSTED CERTIFICATE-”、“-END TRUSTED          CERTIFICATE-”  

18、;      在OpenSSL实际签发的证书文件中最前面的很多可读的证书明文解释,只是为了增加证书文件的可读性,并不代表真正的数据。在其他软件中,比如Windows软件,可能并不支持这些额外的明文信息,所以,先要将“-BEGIN CERTIFICATE-”之前的所有可读信息去掉。可以手动删除,也可以使用PEM到PEM的证书格式转换去掉这些明文可读信息。        在Windows平台,X.509证书文件的后缀名经常是der、cer或者crt,都是可以被自动识别的。对于Op

19、enSSL来说,后缀名是没有实际意义的。      2、Netscape证书标准        Netscape提供了一种名为Netscap证书序列(Netscape Cerificate Sequence)的格式来封装一系列证书(实际上里面采用了一个PKCS#7格式来封装证书)。以便能够一次性地下载或者传输多个数字证书。所以,某些时候,Netscape证书序列可以替代PKCS#7的作用,用来打包一系列证书。     

20、0;  Netscape证书序列虽然不一定能够得到微软的支持,但是在其他一些开源软件和Linux软件中却得到了广泛的支持。三、证书封装        1、PKCS#12证书        PKCS#12 证书不同于X.509证书,它可以包含一个或多个证书,并且还可以包含证书对应的私钥。PKCS#12的私钥是经过加密的,密钥由用户提供的口令产生。所以,无论在使用PKCS#12证书的时候一般会要用用户输入密钥口令。   

21、     PKCS#12证书文件在Windwos平台和Mozzila中支持的后缀名是p12或者pfx,如果要在IE或者Mozzila 中正确使用自己的证书,那么一般来说都要求转换成包含公钥和私钥的PKCS#12证书忖入到相关软件中。        2、PKCS#7        PKCS#7可以封装一个或多个X.509证书或者PKCS#6证书(PKCS#6是一种证书格式,但是并不经常使用)、相关证书链上的CA证书,并

22、且可以包含CRL信息。PKCS#7不包含私钥信息。PKCS#7可以将验证证书需要的整个证书上的证书都包含进来,从而方便证书的发布和正确使用。这样就可以直接把PKCS#7证书发给验证方验证,免去了把以上的验证内容一个一个发给接书方的烦琐了。        PKCS#7文件在Windows平台的合法后缀名是p7b。        3、PKCS#8        PKCS#8标准是一个非常简单

23、的标准,它主要用于封装私钥和其他相关的属性信息。一般来说,PKCS#8格式的私钥都是被加密的,支持PKCS#5和PKCS#12标准定义的算法,当然,私钥也可以不加密。PKCS#8标准一方面可以增强私钥的安全性,另一方面也为用户提供了一种简单的确立信任关系的方式,这主要是基于私钥特别名称和最高层可信者的权威公钥等属性信息。        OpenSSL提供的经过PEM编码的PKCS#8标准的文件,分为加密和非加密的两种方式。加密的PKCS#8密钥标识如下:      

24、  BEGIN ENCRYPTED PRIVATE KEY        END ENCRYPTED PRIVATE KEY        非加密的PKCS#8密钥标识如下:        BEGIN PRIVATE KEY        END PRIVATE KEY 四、密钥编码 &#

25、160;      密钥有多种形式的,很多情况下,需要把这些密钥保存下来。通常使用PEM和DER两种编码方式对要保存的密钥进行编码。        DER 编码存储的密钥文件是不可读的,如果用文本编辑器打开它,将看到一些难以理解的符号,因为这是一个二进制编码的文件。PEM则不一样,它要友好得多,因为PEM经过BASE64编码。用文本编辑器打开PEM编码的密钥文件,可以看到跟证书类似,它们真正的编码都包含在类似于:-BEGIN XXXXXX-和-END XXXXXX- 这样的符

26、号对内。        密钥总的来说有两种,一种是可以公开的(比如公开密钥对的公钥),一种是不能公开的(比如公开密钥对的私钥)。反映在编码上,有的密钥文件需要加密,有的就不需要加密。一个经过加密的PEM编码密钥文件在上述的符号内会增加一些头信息,这些头信息主要是为密钥解密的时候提供有用的信息,包括标记密钥加密状态、使用加密算法及初始赂量(对于块加密算法来说)。例如:-BEGIN RSA PRIVATE KEY-Proc-Type:4,ENCRYPTEDDEK-Info:DES-ED3-CBC,86B0167E005535D2

27、(加密内容密钥部分)-END RSA PRIVATE KEY-        以上的PEM编码的是RSA(RSA PRIVATE KEY)私钥,该密钥经过了加密(ENCRYPTED),使用的是3DES的CBC方式(DES-EDE3-CBC),使用的IV向量是“86B0167E005535D2”。五、其他标准        证书吊销列表(CRL)是用户验证证书的重要参考资料,它主要包含了无效的证书列表,告诉用户哪些证书已经吊销或无效的。如果 没有CRL,可以

28、选择另一种验证方式,那就是使用在线证书服务协议(OCSP)。OCSP并不总是能够使用,比如你的网络有时候可能不能接通OCSP服务器。CRL 是一种相对方使用和独立的解决方案,只要获取了CA中心提供的在有效期内的CRL,基本上就能对证书的有效性进行验证。PEM格式编码的CRL一般包含在一对符号内:“-BEGIN X.509 CRL-”和“-END X.509 CRL-”。也可以使用DER格式保存CRL。验证证书的过程证书的结构中的关键内容包括:序列号、公钥、用户名称、签发者、CA签名和其他一些附属信息等。证书验证过程就是依赖于这信息和公钥对应的私钥进行。通常的证书验证过程包括以下要点: 

29、;       1、确认证书内容是正确的和完整的,没有被篡改,CA签名是正确的;        2、确认证书是有效的,在有效期内并且没有被吊销(CRL中没有该证书序列号);        3、确认CA证书是可以被信任的证书,如果CA证书不是根证书,还要继续对CA证书进行验证;        4、通过与用户的交互,基于证书中的公钥

30、和公开密钥算法确认用户的身份。       确认用户身份的过程是基于公开密钥算法的,基本过程如下:        1、被验证方发送自己的用户证书给验证书;        2、验证方提取证书中的公钥,并产生一个随机数Rp,使用该公钥加密该随机数得到加密的随机数Re并发给被验证方;        3、被验证方使用自己的私钥解密Re得

31、到Rep并发回给验证方;        4、验证方对比Rp和Rep,如果一致,则验证通过,否则,验证不通过。      如果被验证方能够正确解密使用该证书上的公钥加密的信息,即可认为被验证方确实是证书的持有人,也就可以确定其身份。      无论何种类型的证书,其验证过程都是基本一致的,当然,根据具体的情况,其验证协议和要求提供的材料可能有一些区别。关于证书验证的有很多种情况。  

32、60;   OpenSSL提供了证书验证的一些指令,包括普通验证和一种标准的OCSP协议处理指令。加密模式 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。        大多数密码算法都是将明文切成固定长度的多个块,以块为单位进行加密,而不是逐个字节地加密数据。如果要加密超过块大小的数据,就需要涉及填充和链加密模式,文中提到的ECB和CBC等就是指链加密模式。不管什么样的密码算法,任何

33、时候当同样的明文块从算法前端输入,同样的密文块就从后端输出。入侵者可以充分发掘这种特性来协助攻破密码系统。下面举个例子来说明。下面这个表描述的是三个人的年终奖金额度。  Alice  8000     Bob  12000                    Trudy     

34、0;                  3000        老板授权秘书MM整理好这张表后,秘书MM将其加密,然后提交给财务部门。为了清楚地描述问题,这里假设这张表的每个字段都是64位,而且刚好秘书MM用的加密算法的加密块长度也是64位,那么加密结果可能就是像下面这个样子:    As9d8912h3a98q 9SDJKVN

35、I    9d89821as89982mHSLkpanm    09djhASDFQWER78sdfHD,zx    0812UtWEQ23;X/;DSKg5p    78723G/CC;D;LFSDF/;LXPASh        /.,;ISOFIWERIIOC7kjJKJDFNSAn          

36、 假设在秘书MM发送这段密文之前,不巧让Trudy看到了。尽管Trudy看不懂这个表的内容,但是当秘书MM抱怨就两个字段的表为什么么要定死每个字段长度为64位的时候,Trudy获得了足够的信息。她知道由于自己刚和老板吵过嘴,奖金肯定没有其它人高,于是她尝试将这些密文块的顺序调整了一下,变成下面这个样子:    As9d8912h3a98q 9SDJKVNI       0812UtWEQ23;X/;DSKg5p    09djhASDFQWER78sdfHD,zx 

37、   /.,;ISOFIWERIIOC7kjJKJDFNSAn    78723G/CC;D;LFSDF/;LXPASh    9d89821as89982mHSLkpanm               仅仅是调整一下密文块的顺序,财务部解密消息的时候完全察觉不到有任何异常。尽管Trudy还是不知道奖金是多少,但是可以很有把握地相信自己的奖金会比原来高。为了对抗这种问题,需要采取某种加密

38、模式,需要把各个密文块关联起来,使得密文任何一处有异常更改,都会导致整个密文作废。常见的加密模式有以下这。               1) 电子密码本(Electronic Code Book,ECB):                就上面讲的有问题的这种模式,每块明文都对应自己的密文块,互不相

39、干。在 ECB 模式中,每块明文都是独立于其他块加密的。虽然这样做比较高效(可以并行执行多个数据块的加密),但这种方法有一个很大的问题。例如,在 ECB 模式中,对相同明文块的加密总是产生相同的密文块,这为某些类型的密码分析攻击打开了方便之门。ECB 方式通常被认为不适合保护敏感数据。 优点:1.简单;2.有利于并行计算;3.误差不会被传送;缺点:1.不能隐藏明文的模式;2.可能对明文进行主动攻击;              2) 密码块链接(Cipher

40、 Block Chaining,CBC):                在 CBC 模式中,文本块是连续加密的,在加密当前明文块之前,用前一次块加密的结果修改当前明文块。这个过程改进了加密的一些特征(例如,相同的明文块不会产生相同的密文块),但是由于其加密过程是连续的,CBC 方式不支持加密的并行化。CBC 方式使用一个称作初始化向量(Initialization Vector,IV)的附加文本来开始链接过程。IV 用于修改被加密的第一个明文块

41、。         优点:    1.不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。  缺点:    1.不利于并行计算;    2.误差传递;    3.需要初始化向量IV         3) 密码反馈(Cipher Feedback,CFB):  

42、;              在 CFB 模式中,先加密前一个块,然后将得到的结果与明文相结合产生当前块,从而有效地改变用于加密当前块的密钥。这里密钥的值是不断变化的,这个过程与流加密类似,但是性能则远不如流加密。与 CBC 方式一样,这里要使用一个初始化向量作为加密过程的种子。    优点:1.隐藏了明文模式;2.分组密码转化为流模式;3.可以及时加密传送小于分组的数据;缺点:1.不利于并行计算;2.误差传送:一个明文单元损

43、坏影响多个单元;3.唯一的IV;         4) 输出反馈(Output Feedback,OFB):                在 OFB 方式中,使用一个种子或 IV 来开始加密过程。加密种子后,将加密结果与明文块结合产生密文。之后被加密的种子再度被加密,如此重复此过程,直到遍及全部明文。同样,结果类似于流加密。   

44、60;       优点:1.隐藏了明文模式;2.分组密码转化为流模式;3.可以及时加密传送小于分组的数据;缺点:1.不利于并行计算;2.对明文的主动攻击是可能的;3.误差传送:一个明文单元损坏影响多个单元;        5) 流密码模式:                用一个密钥加密一个初始向量

45、生成一个输出块,然后用同样的密钥对这个输出块进行加密以得到第二个输出块,再用同样的密钥对这个输出块进行加密得到第三个输出块,以此类推。所有这些块的序列叫做密钥流。逐块输出密钥流时,就逐块与明文异或,输出的就是密文。         6) 计数器模式:用一个密钥加密一个初始向量生成输出块,然后将初始向量加1再用同样的密钥加密输出第二个输出块,以此类推。输出的块序列也是密钥流,逐块输出密钥流时,就逐块与明文异或,输出的就是密文。       

46、;  7) CTS(密码文本窃用模式):处理任何长度的纯文本并产生长度与纯文本长度匹配的密码文本。除了最后两个纯文本块外,对于所有其他块,此模式与CBC 模式的行为相同。 常见证书格式及相互转换PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准。 常用的有:PKCS#7 Cryptographic Message Syntax StandardPKCS#10 Certification Request StandardPKCS#12 Personal Information Exchange Syntax StandardX.509是常见通用的证书格式。所有的证书都符合为Public Key Infrastructure (PKI) 制定的 ITU-T X509 国际标准。PKCS#7 常用的后缀是: .P7B .P7C .SPCPKCS#12 常用的后缀有: .P12 .PFXX.509 DER 编码(ASCII)的后缀是: .DER .CER .CRT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论