密码算法和密码消息的ASN.1描述(openssl应用举例)
目录
1. 密码算法描述
1.1. 密码算法ASN.1的格式
- Algorithmdentifier ::= SEQUENCE{
- Algorithm OBJECT IDENTIFIER,
- Parameters ANY DEFINEED BY algorithm OPTIONAL }
其中Algorithm为算法的OID,Parameters为算法的参数
1.2. 密码算法的OID
- 常用的密码算法的OID
2. 密码消息的描述
PKCS #7和《SM2密码算法加密签名消息语法规范》中规定了各种密码消息的具体格式,这些消息可用于不同实体之间的数据交换。
2.1. 密码消息ASN.1的格式
2.1.1 通用内容消息
contentType表示内容类型或消息类型包括但不限于:
- data
- signedData
- envelopedData
- signedAndEnvelopedData
- digestData
- encryptedDta
- keyAgreementInfo
content 就是内容的值
2.1.2 data
明文数据消息
2.1.3 SignedData
数字签名消息SignedData
- 在使用SM2算法是SignedData的ASN.1描述如下
2.1.4 SignerInfo
签名者信息格式SignerInfo(两部分截图是一起的没有缺失)
ASN.1描述的解释
2.1.5 EnvelopedData
数字信封 EnvelopedData
version缺省时值为1.recipientInfo是接受者集合,encryptedContentInfo表示已加密的内容消息。
contentType表示内容类型。contentEncryptionAlgorithm表示密码算法的标识,用于加密内容。encryptedContent表示加密后的内容
-
SM2中的encryptedContentInfo描述
-
RecipientInfo
接受者信息格式
2.1.6 signedAndEnvelopedData
2.1.7 DigestData
2.1.8 EncryptedData
2.1.9 KeyAgreementInfo
2.2 密码消息的OID
3. 基于OpenSSL对密码算法和密码消息ASN.1描述的实践
3.1. pkcs #7 格式下RSA的密文
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
生成一个自签名证书cert.pem和生成一个私钥key.pem
openssl rsa -pubout -in key.pem -out public_key.pem
派生公钥
openssl rsautl -encrypt -inkey public_key.pem -pubin -in test.bin -out encrypted.bin
使用公钥对文件加密
openssl cms -encrypt -binary -in encrypted.bin -outform DER -out test.pkcs7 -recip cert.pem
生成pkcs#7格式的密文
结果展示