一尘不染

golang x509.MarshalPKIXPublicKey与x509.MarshalPKCS1PublicKey()

go

谁能帮助我了解MarshalPKIXPublicKey()和MarshalPKCS1PublicKey()之间的区别?

根据注释:// MarshalPKIXPublicKey将公共密钥序列化为DER编码的PKIX格式。

// MarshalPKCS1PublicKey将RSA公钥转换为PKCS#1,ASN.1 DER格式。

什么是DER编码的PKIX格式?

谢谢


阅读 567

收藏
2020-07-02

共1个答案

一尘不染

您不清楚您不了解的程度。从基础开始:

ASN.1
(抽象语法符号1)是用于定义要在系统或程序之间传递或交换的数据结构的通用方案。

DER
(可分辨编码规则)是一种定义为将ASN.1数据编码为可以通信和/或存储的字节序列,并将这些字节序列无损解码回ASN.1数据的方案。

PKCS1 又名的RFC
2313,2437,3447,8017(公开密钥密码术标准#1)是一种标准,其定义的范围内的有关使用RSA算法,其中事情附录A定义了一个名为一个ASN.1结构RSAPublicKey来表示一个RSA公共密钥,就像任何ASN.1结构一样,都可以进行DER编码。

MarshalPKCS1PublicKey将RSA公钥转换为PKCS#1,ASN.1 DER形式。

显然是指PKCS1中RSA公钥的ASN.1结构的DER编码。

PKIX
(公钥基础结构X.509)是X.509标准的Internet变体(正式而言是配置文件),最初由当时的CCITT-now-ITU-T定义,当前位于
rfc5280中
。X.509和PKIX主要定义了公钥 证书
的格式,该格式将公钥与其他元数据绑定到身份。为此,它必须包含一个可以处理多种公钥算法的公钥表示,这是使用一种SubjectPublicKeyInfo结构完成的,该结构相当简单地由标识算法的AlgorithmIdentifier以及包含以下内容的BIT
STRING组成:取决于算法的实际公钥值
。RSA的算法相关部分在
rfc3279 sec2.3.1中
指定
如您所见,它是PKCS1的DER编码的RSAPublicKey结构。

因此 ,RSA公钥的 “ DER编码的PKIX格式” 指PKIX / X.509SubjectPublicKeyInfo结构的DER编码,其中包含RSA的algorithmIdentifier(OID1.2.840.113549.1.1.1和参数NULL)以及包含DER编码的PKCS1 RSAPublicKey。

2020-07-02