SM2密码算法数据结构已经在GM/T 0009规范中详细定义了,为巩固加深理解,本节内容为学习笔记,仅摘抄记录。
1. SM2的密钥对
1.1 SM2公钥
SM2公钥是SM2曲线上的一个点,由横坐标和纵坐标两个分量来标识,记为(x, y),简记为Q,每个分量的长度为256位。
1.2 SM2私钥
SM2私钥是一个大于或等于1且小于n-1的整数(n为SM2算法的阶,其值详见GM/T 0003),简记为k,长度为256位。
2. 数据格式
2.1 密钥数据格式
SM2算法的私钥数据格式的ASN.1定义为:
SM2PrivateKey::=INTEGER
SM2算法公钥数据格式的ASN.1定义为:
SM2PublicKey::=BIT STRING
SM2PublicKey为BIT STRING类型,结构为04||X||Y,其中X,Y分别表示公钥额x分量和y分量,其长度各为256位。
2.2 加密数据格式
SM2算法加密后的数据格式的ASN.1定义为:
SM2Cipher:: = SEQUENCE{
XCoordinate INTEGER, --x分量
YCoordinate INTEGER, --y分量
HASH OCTET STRING SIZE(32), --杂凑值
CipherText OCTET STRING, --密文(密文长度与原文长度相等)
}
其中,HASH为使用SM3算法对明文数据运算得到的杂凑值,其长度固定为256位。