如何确定 publicKey 是原始位还是编码的,私钥总是 pkcs8 编码的?
How to decide publicKey is raw bits or encoded and is private key is always pkcs8 encoded?
最近在读bouncycastle(java)的代码,我注意到在使用EdDSA时,我们使用org.bouncycastle.asn1.x509.SubjectPublicKeyInfo#getPublicKeyData
获取org.bouncycastle.jcajce.provider.asymmetric.edec.BCEdDSAPublicKey#populateFromPubKeyInfo
中的publicKey。但是当使用 RSA 时,我们在 org.bouncycastle.jcajce.provider.asymmetric.rsa.BCRSAPublicKey#populateFromPublicKeyInfo
.
中使用 org.bouncycastle.asn1.x509.SubjectPublicKeyInfo#parsePublicKey
parsePublicKey
的评论是for when the public key is an encoded object - if the bitstring can't be decoded this routine throws an IOException.
,getPublicKeyData
的评论是for when the public key is raw bits.
。
我很困惑,我们如何决定使用哪种方法?这是写在 EdDSA
规范中还是某处?我用谷歌搜索了一无所获。
编辑:
以下是我收集的资料,如有错误请指正
EdRsa publicKey和RSA publicKey都是ASN.1编码的,使用org.bouncycastle.asn1.x509.SubjectPublicKeyInfo#getPublicKeyData
只是因为EdRsa publicKey只包含一个组件(一个简单的字节数组),而rsa key包含两个组件(modules和publicExp ).
几乎所有的私钥都是pkcs#8编码的,毕竟它的名字叫“私钥信息语法标准”。但是rsa privateKey也可以编码在pkc#8之前的pkcs#1中,这两种格式可以相互转换。
RFC 5280 指定 X.509 public 密钥在 SubjectPublicKeyInfo ASN.1 SEQUENCE 中编码。这有两部分:第一部分 ('algorithm') 是一个 AlgorithmIdentifier,它告诉您密钥用于什么算法,第二部分 ('subjectPublicKey') 是一个 ASN.1 BIT STRING,其解释取决于算法.
就 EdDSA 而言,它在 X.509 中的使用在 RFC 8410. That RFC provides the OBJECT IDENTIFIER to use in the 'algorithm' for Ed25519/Ed448 and retains the public key format specified in the original EdDSA RFC - RFC 8032 中指定,即一个字节字符串,所以这就是 'subjectPublicKey'.
中的内容
最近在读bouncycastle(java)的代码,我注意到在使用EdDSA时,我们使用org.bouncycastle.asn1.x509.SubjectPublicKeyInfo#getPublicKeyData
获取org.bouncycastle.jcajce.provider.asymmetric.edec.BCEdDSAPublicKey#populateFromPubKeyInfo
中的publicKey。但是当使用 RSA 时,我们在 org.bouncycastle.jcajce.provider.asymmetric.rsa.BCRSAPublicKey#populateFromPublicKeyInfo
.
org.bouncycastle.asn1.x509.SubjectPublicKeyInfo#parsePublicKey
parsePublicKey
的评论是for when the public key is an encoded object - if the bitstring can't be decoded this routine throws an IOException.
,getPublicKeyData
的评论是for when the public key is raw bits.
。
我很困惑,我们如何决定使用哪种方法?这是写在 EdDSA
规范中还是某处?我用谷歌搜索了一无所获。
编辑:
以下是我收集的资料,如有错误请指正
EdRsa publicKey和RSA publicKey都是ASN.1编码的,使用org.bouncycastle.asn1.x509.SubjectPublicKeyInfo#getPublicKeyData
只是因为EdRsa publicKey只包含一个组件(一个简单的字节数组),而rsa key包含两个组件(modules和publicExp ).
几乎所有的私钥都是pkcs#8编码的,毕竟它的名字叫“私钥信息语法标准”。但是rsa privateKey也可以编码在pkc#8之前的pkcs#1中,这两种格式可以相互转换。
RFC 5280 指定 X.509 public 密钥在 SubjectPublicKeyInfo ASN.1 SEQUENCE 中编码。这有两部分:第一部分 ('algorithm') 是一个 AlgorithmIdentifier,它告诉您密钥用于什么算法,第二部分 ('subjectPublicKey') 是一个 ASN.1 BIT STRING,其解释取决于算法.
就 EdDSA 而言,它在 X.509 中的使用在 RFC 8410. That RFC provides the OBJECT IDENTIFIER to use in the 'algorithm' for Ed25519/Ed448 and retains the public key format specified in the original EdDSA RFC - RFC 8032 中指定,即一个字节字符串,所以这就是 'subjectPublicKey'.
中的内容