DER 和 PEM 中的 ASN.1 关键结构
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DER 和 PEM 中的 ASN.1 关键结构相关的知识,希望对你有一定的参考价值。
参考技术A https://tls.mbed.org/kb/cryptography/asn1-key-structures-in-der-and-pem每个人都喜欢 PEM 和用于以可移植格式保存加密密钥和证书的文档化的 ASN.1 结构。好吧.. 如果他们真的被记录在案,每个人都会这样做。但是要找到每个 DER 或 PEM 格式文件中的结构是一项相当大的壮举。
由于我们需要这些信息,我们也会在这里分享,以帮助其他人寻求知识和理解;)
在 RSA、PKCS#1 和 SSL/TLS 社区中, ASN.1的可 分辨编码规则 (DER) 编码用于以可移植格式表示密钥、证书等。尽管 ASN.1 不是最容易理解的表示格式并且带来了很多复杂性,但它确实有其优点。证书或密钥信息存储在 ASN.1 的二进制 DER 中,提供 RSA、SSL 和 TLS 的应用程序应处理 DER 编码以读取信息。
因为 DER 编码导致编码数据的真正二进制表示,所以设计了一种格式,能够以可打印字符的编码发送这些,因此您可以实际邮寄这些东西。我现在关注的格式是 PEM 格式。
我们将看到的大多数 PEM 格式文件都是由 OpenSSL 在生成或导出 RSA 私钥或公钥和 X509 证书时生成的。
本质上,PEM 文件只是 DER 编码数据的 base64 编码版本。为了从外部区分 DER 编码字符串中的数据类型,在数据周围存在页眉和页脚。PEM 编码文件的一个示例是:
第一行和最后一行表示内部应该预期的 DER 格式。里面的数据是 DER 编码信息的 base64 编码版本。
所以这一切都很好。但是每个不同的文件中你应该期望的结构是什么?请参阅下面的不同格式的说明。
RSA 公钥 PEM 文件特定于 RSA 密钥。
它以标签开头和结尾:
在 base64 编码数据中,存在以下 DER 结构:
由于 RSA 并非专门在 X509 和 SSL/TLS 内部使用,因此以 PKCS#8 的形式提供了一种更通用的密钥格式,它标识公钥的类型并包含相关数据。
它以标签开头和结尾:
在 base64 编码数据中,存在以下 DER 结构:
所以对于 RSA 公钥,OID 是 1.2.840.113549.1.1.1 并且有一个 RSAPublicKey 作为 PublicKey 密钥数据位串。
RSA 私钥 PEM 文件特定于 RSA 密钥。
它以标签开头和结尾:
在 base64 编码数据中,存在以下 DER 结构:
因为 RSA 并非专门用于 X509 和 SSL/TLS,所以以 PKCS#8 的形式提供了一种更通用的密钥格式,它标识了私钥的类型并包含相关数据。
未加密的 PKCS#8 编码数据以标签开头和结尾:
在 base64 编码数据中,存在以下 DER 结构:
因此,对于 RSA 私钥,OID 是 1.2.840.113549.1.1.1 并且有一个 RSAPrivateKey 作为 PrivateKey 密钥数据八位字节字符串。
加密的 PKCS#8 编码数据以标签开头和结尾:
在 base64 编码数据中,存在以下 DER 结构:
EncryptedData OCTET STRING 是 PKCS#8 PrivateKeyInfo(见上文)。
[转] DER编码和ASN.1
转载地址:http://blog.csdn.net/taolinke/article/details/6220403
DER(Distinguished Encoding Rules,可辨别编码规则)。
ASN.1抽象语法标记(Abstract Syntax Notation One) ASN.1是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的数据格式。
DER是ASN.1众多编码方案中的一个。
ASN.1 defines the abstract syntax of information but does not restrict the way the information is encoded. Various ASN.1 encoding rules provide the transfer syntax (a concrete representation) of the data values whose abstract syntax is described in ASN.1.
The standard ASN.1 encoding rules include:
- Basic Encoding Rules (BER)
- Canonical Encoding Rules (CER)
- Distinguished Encoding Rules (DER)
- XML Encoding Rules (XER)
- Packed Encoding Rules (PER)
- Generic String Encoding Rules (GSER)
ASN.1 together with specific ASN.1 encoding rules facilitates the exchange of structured data especially between application programs over networks by describing data structures in a way that is independent of machine architecture and implementation language.
Application layer protocols such as X.400 electronic mail , X.500 and LDAP directory services , H.323 (VoIP ), BACnet and SNMP use ASN.1 to describe the protocol data units (PDUs) they exchange. It is also extensively used in the Access and Non-Access Strata of UMTS . There are many other application domains of ASN.1 [ 1] .
A particularly useful new application of ASN.1 is Fast Infoset . Fast Infoset is an international standard that specifies a binary encoding format for the XML Information Set (XML Infoset ) as an alternative to the XML document format. It aims to provide more efficient serialization than the text-based XML format.
Example
Data structures of FooProtocol defined using the ASN.1 notation:
FooProtocol DEFINITIONS ::= BEGIN FooQuestion ::= SEQUENCE { trackingNumber INTEGER, question IA5String } FooAnswer ::= SEQUENCE { questionNumber INTEGER, answer BOOLEAN }
This could be a specification published by creators of Foo protocol. ASN.1 does not define conversation flows. This is up to the textual description of the protocol.
Assuming a message, which complies with Foo protocol and which will be sent to the receiving party. This particular message (PDU ) is:
myQuestion FooQuestion ::= { trackingNumber 5, question "Anybody there?" }
To send the above message through the network one needs to encode it to a string of bits . ASN.1 defines various algorithms to accomplish that task, called Encoding rules. There are plenty of them; one of the simplest is Distinguished Encoding Rules (DER) .
The Foo protocol specification should explicitly name one set of encoding rules to use, so that users of the Foo protocol know which one they should use.
[edit ] Example encoded in DER
Below is the data structure shown above encoded in the DER format (all numbers are in hexadecimal):
30 -- tag indicating SEQUENCE 13 -- length in octets 02 -- tag indicating INTEGER 01 -- length in octets 05 -- value 16 -- tag indicating IA5String 0e -- length in octets 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f -- value
(Note: DER uses a pattern of tag-length-value triplets)
So what one actually gets is the string of 21 octets:
30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f
The scope of ASN.1 and DER ends here. It is possible to transmit the encoded message to the party by any means (utilizing TCP or any other protocol). The party should be able to decode the octets back using DER.
("Anybody there?" in ASCII)
以上是关于DER 和 PEM 中的 ASN.1 关键结构的主要内容,如果未能解决你的问题,请参考以下文章