PKCS8私钥结构

PrivateKeyInfo ::= SEQUENCE {
                        version Version,
                        privateKeyAlgorithm AlgorithmIdentifier {{PrivateKeyAlgorithms}},
                        privateKey PrivateKey,
                        attributes [0] IMPLICIT Attributes OPTIONAL 
                    }
					
Version ::= INTEGER {v1(0)} (v1,...)

PrivateKey ::= OCTET STRING

Attributes ::= SET OF Attribute

由上可知,PKCS8私钥结构包含了四个部分:版本号、算法标识、私钥数据、其他属性数据。
版本号version,当前还都是0(也就是v1版本);
算法标识privateKeyAlgorithm,又包括算法ID和私钥参数两部分,不同的算法私钥参数的结构也不同;
私钥数据privateKey,不同的算法私钥数据又有自己不同的结构;
其他属性数据attributes,这是可选项,可以没有。

RSA私钥数据结构

这一部分其实也就是PKCS1标准的私钥结构(PKCS1是专属于RSA的标准)

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
                }

Version ::= INTEGER { two-prime(0), multi(1) }
  (CONSTRAINED BY {-- version must be multi if otherPrimeInfos present --})

ECC私钥数据结构

这一部分其实也就是SEC1标准的私钥结构(SEC1是专属于ECC的标准)

ECPrivateKey ::= SEQUENCE {
    version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1),
    privateKey OCTET STRING,
    parameters [0] Parameters OPTIONAL,
    publicKey [1] BIT STRING OPTIONAL }

猜你喜欢

转载自blog.csdn.net/K0000000r/article/details/84101392