信息安全技术签名消息协议语法规范响应码定义和说明.docx
《信息安全技术签名消息协议语法规范响应码定义和说明.docx》由会员分享,可在线阅读,更多相关《信息安全技术签名消息协议语法规范响应码定义和说明.docx(30页珍藏版)》请在冰点文库上搜索。
信息安全技术签名消息协议语法规范响应码定义和说明
附录A
(规范性附录)
消息协议语法规范
A.1概述
签名验签服务的消息协议接口采用请求响应模式,如图A.1所示。
协议模型由请求者、响应者和它们之间的交互协议组成。
通过本协议,请求者将数字签名、验证数字签名等请求发送给响应者,由响应者完成签名验签服务并返回结果。
本规范中的接口消息协议包括导出证书、解析证书、验证证书有效性、数字签名、验证数字签名、消息签名、验证消息签名等服务功能,每个服务都按照请求--响应的步骤执行。
请求者可通过本协议获得签名验签功能,而不必关心下层PKI公钥密码基础设施的实现细节。
图A.1签名验签服务消息协议
请求者组织业务服务请求,发送到响应者,并延缓自身的事务处理过程,等待响应者响应返回;响应者接收到来自请求者的业务服务请求后,检查请求的合法性,根据请求类型处理服务请求,并将处理结果返回给请求者。
下面的协议内容将按照图A.1所示的框架进行。
A.2协议内容
协议内容如下:
a)请求:
也称业务服务请求,包含请求者业务请求的类型、性质以及特性数据等,该请求将被发送到响应者并得到服务。
服务请求包括如下数据:
1——协议版本(当前版本为1);
2——请求类型;
3——请求包;
4——请求时间。
b)响应:
指响应者对来自请求者请求的处理响应。
响应者的响应包括如下数据:
5——协议版本(当前版本为1);
6——响应类型;
7——响应包;
8——响应时间。
c)异常情况:
当响应者处理发生错误时,需要向请求者发送错误信息。
错误可以是下列两类:
9——请求失败:
响应者验证来自请求者业务请求数据失败,请求者收到该响应后应重新组织业务请求数据进行发送。
10——内部处理失败:
响应者处理请求者业务请求过程中发生内部错误,响应者通知请求者该请求处理失败,请求者需重新组织业务请求数据进行发送。
本规范采用抽象语法表示法(ASN.1)来描述具体协议内容。
如果无特殊说明,默认使用ASN.1显式标记。
A.3请求协议
A.3.1请求数据格式
请求者请求数据的基本格式如下:
SVSRequest:
:
=SEQUENCE{
versionVersionDEFAULTv1,
reqTypeReqType,
requestRequest,
reqTime[0]IMPLICITGeneralizedTimeOPTIONAL,
reqTimeStampToken[1]IMPLICITReqTimeStampTokenOPTIONAL,
extAttributes[2]IMPLICITExtAttributesOPTIONAL
}
其中:
Version:
:
=INTEGER{v1(0)}
ReqType:
:
=INTEGER{
exportCert(0),
parseCert
(1),
validateCert
(2),
signData(3),
verifySignedData(4),
signDataInit(5),
signDataUpdate(6),
signDataFinal(7),
verifySignedDataInit(8),
verifySignedDataUpdate(9),
verifySignedDataFinal(10),
signMessage(11),
verifySignedMessage(12)
}
Request:
:
=OCTETSTRING{
exportUserCertReq[0]IMPLICTExportUserCertReq,
parseCertReq[1]IMPLICTParseCertReq,
validateCertReq[2]IMPLICTValidateCertReq,
signDataReq[3]IMPLICTSignDataReq,
verifySignedDataReq[4]IMPLICTVerifySignedDataReq,
signDataInitReq[5]IMPLICTSignDataInitReq,
signDataUpdateReq[6]IMPLICTSignDataUpdateReq,
signDataFinalReq[7]IMPLICTSignDataFinalReq,
verifySignedDataInitReq[8]IMPLICTVerifySignedDataInitReq,
verifySignedDataUpdateReq[9]IMPLICTVerifySignedDataUpdateReq,
verifySignedDataFinalReq[10]IMPLICTVerifySignedDataFinalReq,
signMessageReq[11]IMPLICTSignMessageReq,
verifySignedMessageReq[12]IMPLICTVerifySignedMessageReq
}
ReqTimeStampToken:
:
=TimeStampToken
ExtAttributes:
:
=SETOFAttribute
A.3.2SVSRequest及其结构解释
SVSRequest包含了请求语法中的重要信息,本节将对该结构作详细的描述和解释。
a)协议版本
本项描述了请求语法的版本号,当前版本为1,取整型值0。
b)请求类型
本项描述了不同业务的请求类型值,0~999为保留值,不可占用。
c)请求包
请求包与请求类型值之间的对应关系如表A.1所示。
表A.1请求包与请求类型值的对应关系
请求类型字符描述
请求类型值
申请包说明
exportCert
0
导出证书申请包
parseCert
1
解析证书申请包
validateCert
2
验证证书有效性申请包
signData
3
单包数字签名申请包
verifySignedData
4
单包验证数字签名申请包
signDataInit
5
多包数字签名初始化申请包
signDataUpdate
6
多包数字签名更新申请包
signDataFinal
7
多包数字签名结束申请包
verifySignedDataInit
8
多包验证数字签名初始化申请包
verifySignedDataUpdate
9
多包验证数字签名更新申请包
verifySignedDataFinal
10
多包验证数字签名结束申请包
signMessage
11
单包消息签名申请包
verifySignedMessage
12
单包验证消息签名申请包
d)请求时间
本项描述请求生成时间,该时间即为请求者产生请求的时间,采用GeneralizedTime语法表示。
e)请求时间戳
request内容的时间戳。
如包含此项数据,签名服务器应验证该时间戳。
f)扩展数据
依据实际业务需求添加的扩展数据。
A.4响应协议
A.4.1响应数据格式
响应者响应的基本格式如下:
SVSRespond:
:
=SEQUENCE{
versionVersionDEFAULTv1,
respTypeRespType,
respondRespond,
respTime[0]IMPLICITGeneralizedTimeOPTIONAL,
respTimeStampToken[1]IMPLICITRespTimeStampTokenOPTIONAL,
extAttributes[2]IMPLICITExtAttributesOPTIONAL
}
其中:
Version:
:
=INTEGER{v1(0)}
RespType:
:
=INTEGER{
exportCert(0),
parseCert
(1),
validateCert
(2),
signData(3),
verifySignedData(4),
signDataInit(5),
signDataUpdate(6),
signDataFinal(7),
verifySignedDataInit(8),
verifySignedDataUpdate(9),
verifySignedDataFinal(10),
signMessage(11),
verifySignedMessage(12)
}
Respond:
:
=OCTETSTRING{
exportUserCertResp[0]IMPLICTExportUserCertResp,
parseCertResp[1]IMPLICTParseCertResp,
validateCertResp[2]IMPLICTValidateCertResp,
signDataResp[3]IMPLICTSignDataResp,
verifySignedDataResp[4]IMPLICTVerifySignedDataResp,
signDataInitResp[5]IMPLICTSignDataInitResp,
signDataUpdateResp[6]IMPLICTSignDataUpdateResp,
signDataFinalResp[7]IMPLICTSignDataFinalResp,
verifySignedDataInitResp[8]IMPLICTVerifySignedDataInitResp,
verifySignedDataUpdateResp[9]IMPLICTVerifySignedDataUpdateResp,
verifySignedDataFinalResp[10]IMPLICTVerifySignedDataFinalResp,
signMessageResp[11]IMPLICTSignMessageResp,
verifySignedMessageResp[12]IMPLICTVerifySignedMessageResp
}
respTimeStampToken:
:
=TimeStampToken
ExtAttributes:
:
=SETOFAttribute
A.4.2SVSRespond及其结构解释
SVSRespond包含了响应语法中的重要信息,本节将对该结构作详细的描述和解释。
a)协议版本
本项描述了响应语法的版本号,当前版本为1,取整型值0。
b)响应类型
本项描述了不同业务的响应类型值,0~999为保留值,不可占用。
c)响应包
响应包与响应类型值之间的对应关系如表A.2所示。
表A.2响应包与相应类型值的对应关系
应答类型字符描述
应答类型值
响应包说明
exportCert
0
导出证书响应包
parseCert
1
解析证书响应包
validateCert
2
验证证书有效性响应包
signData
3
单包数字签名响应包
verifySignedData
4
单包验证数字签名响应包
signDataInit
5
多包数字签名初始化响应包
signDataUpdate
6
多包数字签名更新响应包
signDataFinal
7
多包数字签名结束响应包
verifySignedDataInit
8
多包验证数字签名初始化响应包
verifySignedDataUpdate
9
多包验证数字签名更新响应包
verifySignedDataFinal
10
多包验证数字签名结束响应包
signMessage
11
单包消息签名响应包
verifySignedMessage
12
单包验证消息签名响应包
d)响应时间
本项描述响应生成时间,该时间即为响应者产生响应的时间,采用GeneralizedTime语法表示。
e)响应时间戳
respond内容的时间戳。
如包含此项数据,客户端应验证该时间戳。
f)扩展数据
依据实际业务需求添加的扩展数据。
A.5协议接口功能说明
A.5.1导出证书
11——ExportCertReq包
ExportCertReq包为导出证书请求格式包,当reqType取值exportCert时,请求包采用本子包,其具体格式如下:
ExportCertReq:
:
=SEQUENCE{
identificationOCTETSTRING
}
identification表明要导出证书的标识。
12——ExportCertResp包
ExportCertResp包为导出证书响应格式包,当respType取值exportCert时,响应包采用本子包,其具体格式如下:
ExportCertResp:
:
=SEQUENCE{
respValueINTEGER,
certCertificateOPTIONAL
}
respValue表明响应码,0表示成功,非0表示错误。
cert表明导出的证书。
A.5.2解析证书
13——ParseCertReq包
ParseCertReq包为解析证书请求格式包,当reqType取值parseCert时,请求包采用本子包,其具体格式如下:
ParseCertReq:
:
=SEQUENCE{
infoTypeINTEGER,
certCertificate
}
infoType表明要解析证书信息的类型,详细定义见GB/T33560-2017中的6.3.4证书解析项标识;
cert表示要解析的数字证书。
14——ParseCertResp包
ParseCertResp包为解析证书响应格式包,当respType取值parseCert时,响应包采用本子包,其具体格式如下:
ParseCertResp:
:
=SEQUENCE{
respValueINTEGER,
infoOCTETSTRINGOPTIONAL
}
respValue表明响应码,0表示成功,非0表示错误。
info表示获取的证书信息。
A.5.3验证证书有效性
15——ValidateCertReq包
ValidateCertReq包为验证证书有效性请求格式包,当reqType取值validateCert时,请求包采用本子包,其具体格式如下:
ValidateCertReq:
:
=SEQUENCE{
certCertificate,
ocspBOOLEANDEFAULTFALSE
}
cert表示要验证证书有效性的数字证书;
ocsp表示是否获取证书OCSP状态,默认值为FALSE。
16——ValidateCertResp包
ValidateCertResp包为验证证书有效性响应格式包,当respType取值validateCert时,响应包采用本子包,其具体格式如下:
ValidateCertResp:
:
=SEQUENCE{
respValueINTEGER,
stateINTEGEROPTIONAL
}
respValue表明响应码,0表示成功,非0表示错误;
state表明获取的证书OCSP状态标识。
A.5.4单包数字签名
17——SignDataReq包
SignDataReq包为单包数字签名请求格式包,当reqType取值signData时,请求包采用本子包,其具体格式如下:
SignDataReq:
:
=SEQUENCE{
signMethodINTEGER,
keyIndexINTEGER,
keyValueOCTETSTRING,
signerIDLen[0]IMPLICTINTEGEROPTIONAL,
signerID[1]IMPLICTOCTETSTRINGOPTIONAL,
inDataLenINTEGER,
inDataOCTETSTRING
}
signMethod表明使用的签名算法类型,详细定义见GB/T33560-2017中的6.2.4签名算法标识;
keyIndex表示签名者私钥的索引值,如十进制1表示索引值为1的密钥;
keyValue表示签名者私钥权限标识码;
signerIDLen表示签名者的ID长度,当signMethod为SGD_SM3_SM2时有效;
signerID表示签名者的ID值,当signMethod为SGD_SM3_SM2时有效;
inDataLen表示待签名的数据原文长度;
inData表示待签名的数据原文。
18——SignDataResp包
SignDataResp包为单包数字签名响应格式包,当respType取值signData时,响应包采用本子包,其具体格式如下:
SignDataResp:
:
=SEQUENCE{
respValueINTEGER,
signatureOCTETSTRINGOPTIONAL
}
respValue表明响应码,0表示成功,非0表示错误;
signature表示签名值,当公钥算法为RSA时,数据的结构遵循PKCS#1;当公钥算法为SM2时,数据的结构遵循GB/TAAAA。
A.5.5单包验证数字签名
19——VerifySignedDataReq包
VerifySignedDataReq包为单包验证数字签名请求格式包,当reqType取值verifySignedData时,请求包采用本子包,其具体格式如下:
VerifySignedDataReq:
:
=SEQUENCE{
signMethodINTEGER,
typeINTEGER,
cert[0]IMPLICTCertificateOPTIONAL,
certSN[1]IMPLICTOCTETSTRINGOPTIONAL,
signerIDLen[2]IMPLICTINTEGEROPTIONAL,
signerID[3]IMPLICTOCTETSTRINGOPTIONAL,
inDataLenINTEGER,
inDataOCTETSTRING,
signatureOCTETSTRING,
verifyLevelINTEGER
}
signMethod表明使用的签名算法类型,详细定义见GB/T33560-2017中的6.2.4签名算法标识;
type表示使用验证数字签名时使用证书或证书序列号,1表示使用证书,2表示使用证书序列号;
cert表示签名证书,type取值1时有效;
certSN表示签名证书序列号,type取值2时有效;
signerIDLen表示签名者的ID长度,当signMethod为SGD_SM3_SM2时有效;
signerID表示签名者的ID值,当signMethod为SGD_SM3_SM2时有效;
inDataLen表示待签名的数据原文长度;
inData表示待签名的数据原文;
signature表示签名值,当公钥算法为RSA时,数据的结构遵循PKCS#1;当公钥算法为SM2时,数据的结构遵循GB/TAAAA;
verifyLevel表示证书验证级别,0:
验证时间,1:
验证时间和根证书签名,2:
验证时间、根证书签名和CRL。
20——VerifySignedDataResp包
VerifySignedDataResp包为单包验证数字签名响应格式包,当respType取值verifySignedData时,响应包采用本子包,其具体格式如下:
VerifySignedDataResp:
:
=SEQUENCE{
respValueINTEGER
}
respValue表明响应码,0表示成功,非0表示错误。
A.5.6多包数字签名初始化
21——SignDataInitReq包
SignDataInitReq包为多包数字签名初始化请求格式包,当reqType取值signDataInit时,请求包采用本子包,其具体格式如下:
SignDataInitReq:
:
=SEQUENCE{
signMethodINTEGER,
signerPublicKey[0]IMPLICTOCTETSTRINGOPTIONAL,
signerIDLen[1]IMPLICTINTEGEROPTIONAL,
signerID[2]IMPLICTOCTETSTRINGOPTIONAL,
}
signMethod表明使用的签名算法类型,详细定义见GB/T33560-2017中6.2.4签名算法标识;
signerPublicKey表示签名者公钥,当signMethod为SGD_SM3_SM2时有效;
signerIDLen表示签名者的ID长度,当signMethod为SGD_SM3_SM2时有效;
signerID表示签名者的ID值,当signMethod为SGD_SM3_SM2时有效;
22——SignDataInitResp包
SignDataInitResp包为多包数字签名初始化响应格式包,当respType取值signDataInit时,响应包采用本子包,其具体格式如下:
SignDataInitResp:
:
=SEQUENCE{
respValueINTEGER,
SessionIDOCTETSTRINGOPTIONAL
}
respValue表明响应码,0表示成功,非0表示错误;
SessionID表示会话标识。
A.5.7多包数字签名更新
23——SignDataUpdateReq包
SignDataInitReq包为多包数字签名更新请求格式包,当reqType取值signDataUpdate时,请求包采用本子包,其具体格式如下:
SignDataUpdateReq:
:
=SEQUENCE{
SessionIDOCTETSTRING,
inDataLenINTEGER,
inDataOCTETSTRING
}
SessionID表示会话标识;
inDataLen表示数据明文长度;
inData表示数据明文。
24——SignDataUpdateResp包
SignDataUpdateResp包为多包数字签名更新响应格式包,当respType取值signDataUpdate时,响应包采用本子包,其具体格式如下:
SignDataUpdateResp:
:
=SEQUENCE{
respValueINTEGER,
SessionIDOCTETSTRINGOPTIONAL
}
respValue表明响应码,0表示成功,非0表示错误;
SessionID表示会话标识。
A.5.8多包数字签名结束
25——Sign