密钥存储格式

密钥存储格式标准

密钥的存储需要标准来规范,比如存储字段的格式,包含哪些内容。比如对于ECC私钥来说就需要存储曲线的参数,不然别人拿到私钥怎么知道你是基于哪条椭圆曲线计算呢,除非你们事先约定好用固定的一条椭圆曲线。
The Public-Key Cryptography Standards(PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准。里面跟密钥存储格式有关的主要是下面两个标准。

  • PKCS#1:RSA加密标准。PKCS#1定义了RSA公钥函数的基本格式标准,特别是数字签名。它定义了数字签名如何计算,包括待签名数据和签名本身的格式;它也定义了PSA公/私钥的语法。
  • PKCS#8:私钥信息语法标准。PKCS#8定义了私钥信息语法和加密私钥语法,其中私钥加密使用了PKCS#5标准。

PKCS#8

PKCS#8标准定义了私钥信息语法,支持RSA,ECC等不同的私钥类型。这个标准的正文很短,因为只是总的定义了一个大的框架,并不包含每一种类型的私钥具体是怎么存储的。每一种类型的私钥的存储格式还需要配合专门的标准。

PrivateKeyInfo ::= SEQUENCE {
                        version Version,
                        privateKeyAlgorithm AlgorithmIdentifier {{PrivateKeyAlgorithms}},
                        privateKey PrivateKey,
                        attributes [0] IMPLICIT Attributes OPTIONAL 
                    }
  • version:协议版本号。
  • privateKeyAlgorithm:算法标识。
  • privateKey:私钥数据。
  • attributes:附加属性(可选项)。

RSA密钥存储格式

PKCS#1标准定义了RSA密钥的格式。RSA密钥可以用PKCS#1格式直接存储,也可以先通过PKCS#1格式转换,然后再用PKCS#8格式存储。

RSAPublicKey ::= SEQUENCE {
    modulus           INTEGER,  -- n
    publicExponent    INTEGER   -- e
}

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
}

ECC私钥存储格式

SEC-1标准定义了ECC私钥的格式。

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

参考资料

posted @   HachikoT  阅读(879)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示