RSA私钥和公钥文件格式 (pkcs#1, pkcs#8, pkcs#12, pem)

2023-06-15,,

RSA私钥和公钥文件格式 (pkcs#1, pkcs#8, pkcs#12, pem)

2018年03月07日 11:57:22

阅读数:674

Format Name Description
PKCS #7 Cryptographic Message Syntax Standard A PKCS #7 file can be used to store certificates, which is a SignedData structure without data (just the certificates). The file name extension is usually .p7b.p7c
PKCS #8 Private-Key Information Syntax Standard. Used to carry private certificate keypairs (encrypted or unencrypted).
PKCS #12 Personal Information Exchange Syntax Standard. Defines a file format commonly used to store private keys with accompanying public key certificates, protected with a password-based symmetric key. It is the successor to PFX from Microsoft.
DER Distinguished Encoding Rules A binary format for keys or certificates. It is a message transfer syntax specified by the ITU in X.690.
PEM Privacy Enhanced Mail Base64 encoded DER certificates or keys, with additional header and footer lines.

The PEM private key format uses the header and footer lines: 
-----BEGIN RSA PRIVATE KEY----- 
-----END RSA PRIVATE KEY-----

The PEM public key format uses the header and footer lines: 
-----BEGIN PUBLIC KEY----- 
-----END PUBLIC KEY-----

The PEM certificate uses the header and footer lines: 
-----BEGIN CERTIFICATE----- 
-----END CERTIFICATE----- 

RSA Public Key file (PKCS#1)

The RSA Public key PEM file is specific for RSA keys.

It starts and ends with the tags:

     

    -----BEGIN RSA PUBLIC KEY-----

     

    BASE64 ENCODED DATA

     

    -----END RSA PUBLIC KEY-----

Within the base64 encoded data the following DER structure is present:

     

    RSAPublicKey ::= SEQUENCE {

     

    modulus INTEGER, -- n

     

    publicExponent INTEGER -- e

     

    }

Public Key file (PKCS#8)

Because RSA is not used exclusively inside X509 and SSL/TLS, a more generic key format is available in the form of PKCS#8, that identifies the type of public key and contains the relevant data.

It starts and ends with the tags:

     

    -----BEGIN PUBLIC KEY-----

     

    BASE64 ENCODED DATA

     

    -----END PUBLIC KEY-----

Within the base64 encoded data the following DER structure is present:

     

    PublicKeyInfo ::= SEQUENCE {

     

    algorithm AlgorithmIdentifier,

     

    PublicKey BIT STRING

     

    }

     
     
     

    AlgorithmIdentifier ::= SEQUENCE {

     

    algorithm OBJECT IDENTIFIER,

     

    parameters ANY DEFINED BY algorithm OPTIONAL

     

    }

So for an RSA public key, the OID is 1.2.840.113549.1.1.1 and there is a RSAPublicKey as the PublicKey key data bitstring.

RSA Private Key file (PKCS#1)

The RSA private key PEM file is specific for RSA keys.

It starts and ends with the tags:

     

    -----BEGIN RSA PRIVATE KEY-----

     

    BASE64 ENCODED DATA

     

    -----END RSA PRIVATE KEY-----

Within the base64 encoded data the following DER structure is present:

     

    RSAPrivateKey ::= SEQUENCE {

     

    version Version,

     

    modulus INTEGER, -- n

     

    publicExponent INTEGER, -- e

     

    privateExponent INTEGER, -- d

     

    prime1 INTEGER, -- p

     

    prime2 INTEGER, -- q

     

    exponent1 INTEGER, -- d mod (p-1)

     

    exponent2 INTEGER, -- d mod (q-1)

     

    coefficient INTEGER, -- (inverse of q) mod p

     

    otherPrimeInfos OtherPrimeInfos OPTIONAL

     

    }

Private Key file (PKCS#8)

Because RSA is not used exclusively inside X509 and SSL/TLS, a more generic key format is available in the form of PKCS#8, that identifies the type of private key and contains the relevant data.

The unencrypted PKCS#8 encoded data starts and ends with the tags:

     

    -----BEGIN PRIVATE KEY-----

     

    BASE64 ENCODED DATA

     

    -----END PRIVATE KEY-----

Within the base64 encoded data the following DER structure is present:

     

    PrivateKeyInfo ::= SEQUENCE {

     

    version Version,

     

    algorithm AlgorithmIdentifier,

     

    PrivateKey BIT STRING

     

    }

     
     
     

    AlgorithmIdentifier ::= SEQUENCE {

     

    algorithm OBJECT IDENTIFIER,

     

    parameters ANY DEFINED BY algorithm OPTIONAL

     

    }

So for an RSA private key, the OID is 1.2.840.113549.1.1.1 and there is a RSAPrivateKey as the PrivateKey key data bitstring.

The encrypted PKCS#8 encoded data start and ends with the tags:

     

    -----BEGIN ENCRYPTED PRIVATE KEY-----

     

    BASE64 ENCODED DATA

     

    -----END ENCRYPTED PRIVATE KEY-----

Within the base64 encoded data the following DER structure is present:

     

    EncryptedPrivateKeyInfo ::= SEQUENCE {

     

    encryptionAlgorithm EncryptionAlgorithmIdentifier,

     

    encryptedData EncryptedData

     

    }

     
     
     

    EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier

     
     
     

    EncryptedData ::= OCTET STRING

The EncryptedData OCTET STRING is a PKCS#8 PrivateKeyInfo (see above).

RSA私钥和公钥文件格式 (pkcs#1, pkcs#8, pkcs#12, pem)的相关教程结束。

《RSA私钥和公钥文件格式 (pkcs#1, pkcs#8, pkcs#12, pem).doc》

下载本文的Word格式文档,以方便收藏与打印。