资料介绍
ICS 35 . 040 L 80
中 华 人 民 共 和 国 国 家 标 准
GB/T 38629—2020
信息安全技术
签名验签服务器技术规范
Informationsecuritytechnology—
Technicalspecificationsforsignatureverificationserver
2020-04-28 发布 2020-1 1-01 实施
国家市场监督管理总局国家标准化管理委员会
发
布
GB/T 38629—2020
GB/T 38629—2020
前 言
本标准按照 GB/T 1 . 1—2009 给出的规则起草。
请注意本文件的某些内容可能涉及专利。 本文件的发布机构不承担识别这些专利的责任。
本标准由全国信息安全标准化技术委员会(SAC/TC 260)提出并归口 。
本标准起草单位:山东得安信息技术有限公司、成都卫士通信息产业股份公司、无锡江南信息安全工程技术中心、兴唐通信科技有限公司、格尔软件股份有限公司、长春吉大正元信息技术股份有限公司、上海市数字证书认证中心有限公司、北京数字认证股份有限公司、北京创原天地科技有限公司、北京三未信安科技发展有限公司、北京信安世纪科技股份有限公司。
本标准主要起草人:马洪富、孔凡玉、罗俊、徐明翼、王妮娜、郑强、赵丽丽、韩玮、李述胜、肖青海、高志权、汪宗斌。
GB/T 38629—2020
信息安全技术
签名验签服务器技术规范
1 范围
本标准规定了签名验签服务器的功能要求、安全要求和消息协议语法规则等内容。
本标准适用于签名验签服务器的研制和使用。
2 规范性引用文件
下列文件对于本文件的应用是必不可少的。 凡是注 日期的引用文件,仅注 日期的版本适用于本文件 。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GB/T 9813 . 3—2017 计算机通用规范 第 3 部分:服务器
GB/T 19713—2005 信息技术 安全技术 公钥基础设施 在线证书状态协议
GB/T 25069—2010 信息安全技术 术语
GB/T 32905 信息安全技术 SM3 密码杂凑算法
GB/T 32918(所有部分) 信息安全技术 SM2 椭圆曲线公钥密码算法
GB/T 33560—2017 信息安全技术 密码应用标识规范
GB/T 35275 信息安全技术 SM2 密码算法加密签名消息语法规范
GB/T 35276 信息安全技术 SM2 密码算法使用规范
GB/T 35291—2017 信息安全技术 智能密码钥匙应用接口规范
GB/T 36322 信息安全技术 密码设备应用接口规范
GM/T 0020 证书应用综合服务接口规范
GM/T 0028 密码模块安全要求
GM/T 0039 密码模块安全检测要求
3 术语和定义
GB/T 25069—2010 界定的以及下列术语和定义适用于本文件。
3.1
安全域 securitydomain
在信息系统中,单一安全策略下运行的实体的汇集。 例如,由单个或一组认证机构采用同一安全策略创建的各公钥证书的汇集。
[GB/T 25069—2010,定义 2 . 2 . 1 . 17]
3.2
签名验签服务器 signatureverificationserver
用于服务端的,为应用实体提供基于 PKI 体系和数字证书的数字签名、验证签名等运算功能的服务器,保证关键业务信息的真实性、完整性和不可否认性。
3.3
用户 user
与应用实体进行通信或认证的个人、机构或系统。
GB/T 38629—2020
注:其数字证书可导入到签名验签服务器中。
3.4
SM2 算法 SM2 algorithm
由 GB/T 32918 定义的一种椭圆曲线密码算法。
3.5
SM3 算法 SM3 algorithm
由 GB/T 32905 定义的一种杂凑算法。
4 缩略语
下列缩略语适用于本文件。
API:应用程序接 口 (Application Program Interface)
ASN.1:抽象语法记法 1 (Abstract Syntax Notation One)
CA:证书认证机构(Certification Authority)
CRL:证书撤销列表(Certificate Revocation List)
OCSP:在线证书状态查询协议(Online Certificate Status Protocol)
PKI:公钥密码基础设施(Public Key Infrastructure)
5 签名验签服务器的功能要求
5 . 1 初始化功能
签名验签服务器的初始化应主要包括系统配置、生成管理员和审计员、创建密钥、申请证书和导入证书等,使设备处于正常工作状态。
5 . 2 与公钥基础设施的连接配置功能
5.2. 1 CRL连接配置
签名验签服务器应支持 CRL连接配置功能,通过配置管理界面,提供从 CRL发布点获取 CRL、导入 CRL等功能。
5.2.2 oCSp连接配置
签名验签服务器应支持 OCSP 连接配置功能,通过配置管理界面,进行 OCSP 服务的连接配置管理 。 OCSP 服务的连接配置应遵循 GB/T 19713—2005 中 6 . 1 的规定。
5 . 3 应用管理功能
签名验签服务器的应用管理功能应包括应用实体的注册、配置密钥、设置私钥授权码等,并按照安全机制对应用实体的信息进行安全存储。 应用实体注册的内容应包括设置应用实体名称、配置密钥索引号、导入证书等。
5 . 4 证书管理和验证功能
5 . 4 . 1 应用实体的密钥产生、证书申请
在签名验签服务器注册的应用实体,应由签名验签服务器产生应用实体的签名密钥对和证书请求,并支持通过管理界面导入应用实体的签名证书、加密证书和加密密钥对。 加密密钥对的保护结构应遵
GB/T 38629—2020
循 GB/T 35291—2017 中 6 . 4 . 10 的规定 。
5 . 4 . 2 证书导入和存储
签名验签服务器应支持用户证书、根证书或证书链的导入,导入时应对证书的有效性进行验证。
5 . 4 . 3 应用实体的证书更新
应用实体的证书更新时应保存原来的证书,以防止以前的签名不能验证。
5 . 4 . 4 证书验证
签名验签服务器应支持对证书的有效性的验证,包括验证证书有效期、验证证书签名有效性、验证证书状态。
5 . 4 . 5 备份和恢复
签名验签服务器应支持备份和恢复功能,包括密钥、证书等数据的备份和恢复。
备份操作产生的备份文件可存储到签名验签服务器外的存储介质中,应采取措施保证备份文件的机密性和完整性。
5 . 5 数字签名和验签功能
签名验签服务器应支持 SM2 算法的数字签名和数字验签功能,提供对数据、消息、文件等多种格式的运算方式。
数据的结构应遵循 GB/T 35275 和 GB/T 35276 。
5 . 6 日志管理功能
签名验签服务器应提供日志记录、查看、审计和导出功能,具备相应的配置管理和查看界面。
日志内容包括:
a) 系统管理日志,包括登录认证、系统配置、密钥管理等操作;
b ) 异常事件,包括认证失败、非法访问等异常事件的记录;
c) 如与设备管理中心连接,对相应操作进行记录;
d) 对应用接口的调用进行日志记录。
5 . 7 时间源同步功能
签名验签服务器应能够配置连接时间源服务器,自动同步时间。
6 签名验签服务器的安全要求
6 . 1 接口要求
签名验签服务器调用密码设备的接口应遵循 GB/T 36322 。
6 . 2 系统要求
签名验签服务器所使用的操作系统应进行安全加固,保障其安全性。
6 . 3 使用要求
签名验签服务器只接受合法的操作指令,并防止非授权用户的使用。
GB/T 38629—2020
6 . 4 管理要求
6 . 4 . 1 管理工具
签名验签服务器通过管理工具实现对该签名验签服务器的管理功能。
6 . 4 . 2 管理员身份鉴别
签名验签服务器应具备完善的身份鉴别机制,签名验签服务器应设置管理员和审计员,管理员和审计员应通过智能密码钥匙、智能 IC卡等硬件介质与口令相结合的方式登录系统,并使用证书进行身份验证。 各类管理员通过身份鉴别后执行自己权限范围内的相关管理操作。
6 . 4 . 3 设备管理
6 . 4 . 3 . 1 设备初始化
签名验签服务器的初始化,除应由厂商进行的操作外,系统配置、密钥的生成(恢复)与安装、生成管理员和审计员等均应由用户方设备管理人员完成。
6 . 4 . 3 . 2 设备自检
签名验签服务器应具备自检功能,应具备状态和功能自检功能,能够进行密码算法正确性检查、随机数发生器检查、存储密钥和数据的完整性检查等,检查不通过时应报警并停止工作。
6 . 5 设备物理安全防护
签名验签服务器在工艺设计、硬件配置等方面应采取相应的保护措施,保证设备基本的物理安全防护功能。
6 . 6 网络部署要求
签名验签服务器应部署在应用系统的安全域内,只为安全域内的应用实体和用户服务,不应为安全域外的应用实体和用户使用。
6 . 7 服务接口
以基于 HTTP 的 WEB方式提供服务的签名验签服务器,接口要求见附录 A,响应码的定义见附录 B。
以消息协议方式提供服务的签名验签服务器,接口要求见第 7 章,响应码的定义见附录 B。
以应用程序接口方式提供服务的签名验签服务器,其接口应遵循 GM/T 0020 。
6 . 8 环境适应性
签名验签服务器的工作环境应遵循 GB/T 9813 . 3—2017 中 5 . 8 的规定。
6 . 9 可靠性
签名验签服务器的平均失效间隔工作时间应遵循 GB/T 9813 . 3—2017 中 4 . 9 的规定。
6 . 10 其他
签名验签服务器的其他安全要求应遵循 GM/T 0028 和 GM/T 0039 。
GB/T 38629—2020
7 消息协议语法规则
7 . 1 概述
签名验签服务的消息协议接口采用请求响应模式,如图 1 所示。 协议模型由请求者、响应者和它们之间的交互协议组成。 通过本协议,请求者将数字签名、验证数字签名等请求发送给响应者,由响应者完成签名验签服务并返回结果。 本规则中的接口消息协议包括导出证书、解析证书、验证证书有效性、数字签名、验证数字签名、消息签名、验证消息签名等服务功能,每个服务都按照请求—响应的步骤执行 。请求者可通过规则获得签名验签功能,而不必关心下层 PKI公钥密码基础设施的实现细节。
图 1 签名验签服务的消息协议接口模式
请求者组织业务服务请求,发送到响应者,并延缓自身的事务处理过程,等待响应者响应返回;响应者接收到来自请求者的业务服务请求后,检查请求的合法性,根据请求类型处理服务请求,并将处理结果返回给请求者。
下面的协议内容将按照图 1 所示的框架进行。
7 . 2 协议内容
协议内容如下:
a) 请求
也称业务服务请求,包含请求者业务请求的类型、性质以及特性数据等,该请求将被发送到响应者并得到服务。 服务请求包括如下数据:
— 协议版本(当前版本为 1) ;
— 请求类型;
— 请求包;
— 请求时间。
b ) 响应
指响应者对来自请求者请求的处理响应。 响应者的响应包括如下数据:
— 协议版本(当前版本为 1) ;
— 响应类型;
— 响应包;
— 响应时间。
c) 异常情况
当响应者处理发生错误时,需要向请求者发送错误信息。 错误可以是下列两类:
— 请求失败:响应者验证来自请求者业务请求数据失败,请求者收到该响应后应重新组织业务请求数据进行发送。
— 内部处理失败:响应者处理请求者业务请求过程中发生内部错误,响应者通知请求者该请求处理失败,请求者需重新组织业务请求数据进行发送。
本规则采用抽象语法记法 1(ASN . 1)来描述具体协议内容。 如果无特殊说明,默认使用 ASN . 1 显
GB/T 38629—2020
式标记。
7 . 3 请求协议
7 . 3 . 1 请求数据格式
请求者请求数据的基本格式如下:
SVSRequest : : = SEQUENCE {
version Version DEFAULT v1 ,
reqType ReqType,
request Request,
reqTime [0] IMPLICIT GeneralizedTime OPTIONAL,
reqTimeStampToken [1] IMPLICIT ReqTimeStampToken OPTIONAL,
extAttributes [2] IMPLICIT ExtAttributes OPTIONAL
}
其中:
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 : : = OCTET STRING{
exportUserCertReq [0] IMPLICT ExportUserCertReq,
parseCertReq [1] IMPLICT ParseCertReq,
validateCertReq [2] IMPLICT ValidateCertReq,
signDataReq [3] IMPLICT SignDataReq,
verifySignedDataReq [4] IMPLICT VerifySignedDataReq,
signDataInitReq [5] IMPLICT SignDataInitReq,
signDataUpdateReq [6] IMPLICT SignDataUpdateReq,
signDataFinalReq [7] IMPLICT SignDataFinalReq,
verifySignedDataInitReq [8] IMPLICT VerifySignedDataInitReq,
verifySignedDataUpdateReq [9] IMPLICT VerifySignedDataUpdateReq,
verifySignedDataFinalReq [10] IMPLICT VerifySignedDataFinalReq,
GB/T 38629—2020
}
ReqTimeStampToken : : =TimeStampToken
ExtAttributes : : = SET OF Attribute
7.3.2 SVSRequest及其结构解释
SVSRequest包含了请求语法中的重要信息,本条将对该结构作详细的描述和解释:
a) 协议版本
本项描述了请求语法的版本号,当前版本为 1,取整型值 0 。
b ) 请求类型
本项描述了不同业务的请求类型值,0~999 为保留值,不可占用。
c) 请求包
请求包与请求类型值之间的对应关系如表 1 所示。
表 1 请求包与请求类型值的对应关系
d) 请求时间
请求者产生请求的时间,采用 GeneralizedTime语法表示。
e) 请求时间戳
request 内容的时间戳。 如包含此项数据,签名服务器应验证该时间戳。
f) 扩展数据
依据实际业务需求添加的扩展数据。
7 . 4 响应协议
7 . 4 . 1 响应数据格式
响应者响应的基本格式如下:
GB/T 38629—2020
SVSRespond : : = SEQUENCE {
version Version DEFAULT v1 ,
respType RespType,
respond Respond,
respTime [0] IMPLICIT GeneralizedTime OPTIONAL,
respTimeStampToken [1] IMPLICIT RespTimeStampToken OPTIONAL,
extAttributes [2] IMPLICIT ExtAttributes OPTIONAL
}
其中:
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: : = OCTET STRING{
exportUserCertResp [0] IMPLICT ExportUserCertResp ,
parseCertResp [1] IMPLICT ParseCertResp ,
validateCertResp [2] IMPLICT ValidateCertResp ,
signDataResp [3] IMPLICT SignDataResp ,
verifySignedDataResp [4] IMPLICT VerifySignedDataResp ,
signDataInitResp [5] IMPLICT SignDataInitResp ,
signDataUpdateResp [6] IMPLICT SignDataUpdateResp ,
signDataFinalResp [7] IMPLICT SignDataFinalResp ,
verifySignedDataInitResp [8] IMPLICT VerifySignedDataInitResp ,
verifySignedDataUpdateResp [9] IMPLICT VerifySignedDataUpdateResp ,
verifySignedDataFinalResp [10] IMPLICT VerifySignedDataFinalResp ,
signMessageResp [11] IMPLICT SignMessageResp ,
verifySignedMessageResp [12] IMPLICT VerifySignedMessageResp
}
respTimeStampToken: : =TimeStampToken
ExtAttributes : : = SET OF Attribute
GB/T 38629—2020
7.4.2 SVSRespond及其结构解释
SVSRespond包含了响应语法中的重要信息,本条将对该结构作详细的描述和解释:
a) 协议版本
本项描述了响应语法的版本号,当前版本为 1,取整型值 0 。
b ) 响应类型
本项描述了不同业务的响应类型值,0~999 为保留值,不可占用。
c) 响应包
响应包与响应类型值之间的对应关系如表 2 所示。
表 2 响应包与相应类型值的对应关系
d) 响应时间
响应者产生响应的时间,采用 GeneralizedTime语法表示。
e) 响应时间戳
respond 内容的时间戳。 如包含此项数据,客户端应验证该时间戳。
f) 扩展数据
依据实际业务需求添加的扩展数据。
7 . 5 协议接口功能说明
7 . 5 . 1 导出证书
—ExportCertReq包
ExportCertReq包为导出证书请求格式包,当 reqType 取值 exportCert 时,请求包采用本子
包,其具体格式如下:
ExportCertReq: : = SEQUENCE {
identification OCTET STRING
GB/T 38629—2020
}
identification表明要导出证书的标识。
—ExportCertResp 包
ExportCertResp包为导出证书响应格式包,当 respType取值 exportCert 时,响应包采用本子
包,其具体格式如下:
ExportCertResp : : =SEQUENCE {
respValue INTEGER,
cert Certificate OPTIONAL
}
respValue表明响应码,0 表示成功,非 0 表示错误。
cert表明导出的证书。
7 . 5 . 2 解析证书
—ParseCertReq包
ParseCertReq包为解析证书请求格式包,当 reqType 取值 parseCert 时,请求包采用本子包,
其具体格式如下:
ParseCertReq: : = SEQUENCE {
infoType INTEGER,
cert Certificate
}
infoType表明要解析证书信息的类型,应遵循 GB/T 33560—2017 中 6.3.4 的规定;
cert表示要解析的数字证书。
—ParseCertResp 包
ParseCertResp包为解析证书响应格式包,当 respType 取值 parseCert 时,响应包采用本子
包,其具体格式如下:
ParseCertResp : : = SEQUENCE {
respValue INTEGER,
info OCTET STRING OPTIONAL
}
respValue表明响应码,0 表示成功,非 0 表示错误。
info表示获取的证书信息。
7 . 5 . 3 验证证书有效性
—ValidateCertReq包
ValidateCertReq包为验证证书有效性请求格式包,当 reqType取值 validateCert 时,请求包采
用本子包,其具体格式如下:
ValidateCertReq: : = SEQUENCE {
cert Certificate ,
ocsp BOOLEAN DEFAULT FALSE
}
cert表示要验证证书有效性的数字证书;
ocsp 表示是否获取证书 OCSP状态,默认值为 FALSE。
—ValidateCertResp 包
GB/T 38629—2020
ValidateCertResp包为验证证书有效性响应格式包,当 respType取值 validateCert 时,响应包
采用本子包,其具体格式如下:
ValidateCertResp : : = SEQUENCE {
respValue INTEGER,
state INTEGER OPTIONAL
}
respValue表明响应码,0 表示成功,非 0 表示错误;
state表明获取的证书 OCSP状态标识。
7 . 5 . 4 单包数字签名
—SignDataReq包
SignDataReq包为单包数字签名请求格式包,当 reqType 取值 signData 时,请求包采用本子包,其具体格式如下:
SignDataReq: : = SEQUENCE {
signMethod INTEGER,
keyIndex INTEGER,
keyValue OCTET STRING,
signerIDLen [0] IMPLICT INTEGER OPTIONAL,
signerID [1] IMPLICT OCTET STRING OPTIONAL,
inDataLen INTEGER,
inData OCTET STRING
}
signMethod表明使用的签名算法类型,应遵循 GB/T 33560—2017 中 6.2.4 的规定;
keyIndex表示签名者私钥的索引值,如十进制 1 表示索引值为 1 的密钥;
keyValue表示签名者私钥权限标识码;
signerIDLen表示签名者的 ID长度,当 signMethod 为 SGD_SM3_SM2 时有效;
signerID表示签名者的 ID值,当 signMethod 为 SGD_SM3_SM2 时有效;
inDataLen表示待签名的数据原文长度;
inData表示待签名的数据原文。
—SignDataResp 包
SignDataResp包为单包数字签名响应格式包,当 respType取值 signData 时,响应包采用本子
包,其具体格式如下:
SignDataResp : : = SEQUENCE {
respValue INTEGER,
signature OCTET STRING OPTIONAL
}
respValue表明响应码,0 表示成功,非 0 表示错误;
signature表示签名值,数据的结构应遵循 GB/T 35276。
7 . 5 . 5 单包验证数字签名
—VerifySignedDataReq包
VerifySignedDataReq包为单包验证数字签名请求格式包,当 reqType 取值 verifySignedData
时,请求包采用本子包,其具体格式如下:
GB/T 38629—2020
VerifySignedDataReq: : = SEQUENCE {
signMethod INTEGER,
type INTEGER,
cert [0] IMPLICT Certificate OPTIONAL ,
certSN [1] IMPLICT OCTET STRING OPTIONAL,
signerIDLen [2] IMPLICT INTEGER OPTIONAL,
signerID [3] IMPLICT OCTET STRING OPTIONAL,
inDataLen INTEGER,
inData OCTET STRING,
signature OCTET STRING,
verifyLevel INTEGER
}
signMethod表明使用的签名算法类型,应遵循 GB/T 33560—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表示签名值,数据的结构应遵循 GB/T 35276 ;
verifyLevel 表示证书验证级别,0:验证时间,1:验证时间和根证书签名,2:验证时间、根证书签名和 CRL。
—VerifySignedDataResp 包
VerifySignedDataResp包为单包验证数字签名响应格式包,当 respType 取值 verifySignedData 时,
响应包采用本子包,其具体格式如下:
VerifySignedDataResp : : = SEQUENCE {
respValue INTEGER
}
respValue表明响应码,0 表示成功,非 0 表示错误。
7 . 5 . 6 多包数字签名初始化
—SignDataInitReq包
SignDataInitReq包为多包数字签名初始化请求格式包,当 reqType取值 signDataInit 时,请求
包采用本子包,其具体格式如下:
SignDataInitReq: : = SEQUENCE {
signMethod INTEGER,
signerPublicKey [0] IMPLICT OCTET STRING OPTIONAL,
signerIDLen [1] IMPLICT INTEGER OPTIONAL,
signerID [2] IMPLICT OCTET STRING OPTIONAL,
}
signMethod表明使用的签名算法类型,应遵循 GB/T 33560—2017 中 6.2.4 的规定;
GB/T 38629—2020
signerPublicKey表示签名者公钥,当 signMethod 为 SGD_SM3_SM2 时有效;
signerIDLen表示签名者的 ID长度,当 signMethod 为 SGD_SM3_SM2 时有效;
signerID表示签名者的 ID值,当 signMethod 为 SGD_SM3_SM2 时有效;
—SignDataInitResp 包
SignDataInitResp包为多包数字签名初始化响应格式包,当 respType取值 signDataInit 时,响
应包采用本子包,其具体格式如下:
SignDataInitResp : : = SEQUENCE {
respValue INTEGER,
SessionID OCTET STRING OPTIONAL
}
respValue表明响应码,0 表示成功,非 0 表示错误;
SessionID表示会话标识。
7 . 5 . 7 多包数字签名更新
—SignDataUpdateReq包
SignDataUpdateReq 包为多包数字签名更新请求格式包,当 reqType 取值 signDataUpdate
时,请求包采用本子包,其具体格式如下:
SignDataUpdateReq: : = SEQUENCE {
SessionID OCTET STRING,
inDataLen INTEGER,
inData OCTET STRING
}
SessionID 表示会话标识;
inDataLen表示数据明文长度;
inData表示数据明文。
—SignDataUpdateResp 包
SignDataUpdateResp 包为多包数字签名更新响应格式包,当 respType 取值 signDataUpdate
时,响应包采用本子包,其具体格式如下:
SignDataUpdateResp : : = SEQUENCE {
respValue INTEGER,
SessionID OCTET STRING OPTIONAL
}
respValue表明响应码,0 表示成功,非 0 表示错误;
SessionID表示会话标识。
7 . 5 . 8 多包数字签名结束
—SignDataFinalReq包
SignDataFinalReq包为多包数字签名结束请求格式包,当 reqType 取值 signDataFinal 时,请
求包采用本子包,其具体格式如下:
SignDataFinalReq: : = SEQUENCE {
keyIndex INTEGER,
keyValue OCTET STRING,
SessionID OCTET STRING
GB/T 38629—2020
}
keyIndex表示签名者私钥的索引值,如十进制 1 表示索引值为 1 的密钥;
keyValue表示签名者私钥权限标识码;
SessionID 表示会话标识。
—SignDataFinalResp 包
SignDataFinalResp包为多包数字签名结束响应格式包,当 respType 取值 signDataFinal 时,
响应包采用本子包,其具体格式如下:
SignDataFinalResp : : = SEQUENCE {
respValue INTEGER,
signature OCTET STRING OPTIONAL
}
respValue表明响应码,0 表示成功,非 0 表示错误;
signature表示签名值,数据的结构应遵循 GB/T 35276。
7 . 5 . 9 多包验证数字签名初始化
—VerifySignedDataInitReq包
VerifySignedDataInitReq包为多包验证数字签名初始化请求格式包,当 reqType 取值 verify- SignedDataInit 时,请求包采用本子包,其具体格式如下:
VerifySignedDataInitReq: : = SEQUENCE {
signMethod INTEGER,
signerPublicKey [0] IMPLICT OCTET STRING OPTIONAL,
signerIDLen [1] IMPLICT INTEGER OPTIONAL,
signerID [2] IMPLICT OCTET STRING OPTIONAL,
}
signMethod表明使用的签名算法类型,应遵循 GB/T 33560—2017 中 6.2.4 的规定;
signerPublicKey表示签名者公钥,当 signMethod 为 SGD_SM3_SM2 时有效;
signerIDLen表示签名者的 ID长度,当 signMethod 为 SGD_SM3_SM2 时有效;
signerID表示签名者的 ID值,当 signMethod 为 SGD_SM3_SM2 时有效。
—VerifySignedDataInitResp 包
VerifySignedDataInitResp包为多包验证数字签名初始化响应格式包,当 respType 取值 veri- fySignedDataInit 时,响应包采用本子包,其具体格式如下 :
VerifySignedDataInitResp : : = SEQUENCE {
respValue INTEGER,
SessionID OCTET STRING OPTIONAL
}
respValue表明响应码,0 表示成功,非 0 表示错误;
SessionID表示会话标识。
7 . 5 . 10 多包验证数字签名更新
—VerifySignedDataUpdateReq包
VerifySignedDataUpdateReq包为多包验证数字签名更新请求格式包,当 reqType 取值 veri- fySignedDataUpdate 时,请求包采用本子包,其具体格式如下:
VerifySignedDataUpdateReq: : = SEQUENCE {
GB/T 38629—2020
SessionID OCTET STRING,
inDataLen INTEGER,
inData OCTET STRING
}
SessionID 表示会话标识;
inDataLen表示数据明文长度;
inData表示数据明文。
—VerifySignedDataUpdateResp 包
VerifySignedDataUpdateResp包为多包验证数字签名更新响应格式包,当 respType取值 ver- ifySignedDataUpdate 时,响应包采用本子包,其具体格式如下:
VerifySignedDataUpdateResp : : = SEQUENCE {
respValue INTEGER,
SessionID OCTET STRING OPTIONAL
}
respValue表明响应码,0 表示成功,非 0 表示错误;
SessionID表示会话标识。
7 . 5 . 1 1 多包验证数字签名结束
—VerifySignedDataFinalReq包
VerifySignedDataFinalReq包为多包验证数字签名结束请求格式包,当 reqType 取值 verify- SignedDataFinal 时,请求包采用本子包,其具体格式如下:
VerifySignedDataFinalReq: : = SEQUENCE {
type INTEGER,
cert [0] IMPLICT Certificate OPTIONAL ,
certSN [1] IMPLICT OCTET STRING OPTIONAL,
SessionID OCTET STRING,
signature OCTET STRING,
verifyLevel INTEGER
}
type 表示使用验证数字签名时使用证书或证书序列号,1 表示使用证书,2 表示使用证书序列号;
cert表示签名证书,type取值 1 时有效;
certSN表示签名证书序列号,type取值 2 时有效;
SessionID 表示会话标识;
signature表示签名值,数据的结构应遵循 GB/T 35276。
verifyLevel 表示证书验证级别,0:验证时间,1:验证时间和根证书签名,2:验证时间、根证书签名和 CRL。
—VerifySignedDataFinalResp 包
VerifySignedDataFinalResp 包为多包验证数字签名结束响应格式包,当 respType 取值 veri- fySignedDataFinal 时,响应包采用本子包,其具体格式如下 :
VerifySignedDataFinalResp : : = SEQUENCE {
respValue INTEGER
}
GB/T 38629—2020
respValue表明响应码,0 表示成功,非 0 表示错误。
7 . 5 . 12 消息签名
—SignMessageReq包
SignMessageReq包为消息签名请求格式包,当 reqType 取值 signMessage 时,请求包采用本
子包,其具体格式如下:
SignMessageReq: : = SEQUENCE {
signMethod INTEGER,
keyIndex INTEGER,
keyValue OCTET STRING,
signerIDLen [0] IMPLICT INTEGER OPTIONAL,
signerID [1] IMPLICT OCTET STRING OPTIONAL,
inDataLen INTEGER,
inData OCTET STRING,
originalText [0] IMPLICT BOOLEAN OPTIONAL,
certificateChain [1] IMPLICT BOOLEAN OPTIONAL,
crl [2] IMPLICT BOOLEAN OPTIONAL,
}
signMethod表明使用的签名算法类型,应遵循 GB/T 33560—2017 中 6.2.4 的规定;
keyIndex表示签名者私钥的索引值,如十进制 1 表示索引值为 1 的密钥;
keyValue表示签名者私钥权限标识码;
signerIDLen表示签名者的 ID长度,当 signMethod 为 SGD_SM3_SM2 时有效;
signerID表示签名者的 ID值,当 signMethod 为 SGD_SM3_SM2 时有效;
inDataLen表示待签名的数据长度;
inData表示待签名的数据;
originalText 表示是否附加原文选项;
certificateChain 表示是否附加证书链选项;
crl 表示是否附加黑名单选项。
—SignMessageResp 包
SignMessageResp包为消息签名响应格式包,当 respType 取值 signMessage 时,响应包采用
本子包,其具体格式如下:
SignMessageResp : : = SEQUENCE {
respValue INTEGER,
signedMessage OCTET STRING OPTIONAL
}
respValue表明响应码,0 表示成功,非 0 表示错误;
signedMessage表示消息签名数据,消息的结构应遵循 GB/T 35275。
7 . 5 . 13 验证消息签名
—VerifySignedMessageReq包
VerifySignedMessageReq包为验证消息签名请求格式包,当 reqType 取值 verifySignedMessage
时,请求包采用本子包,其具体格式如下:
VerifySignedMessageReq: : = SEQUENCE {
GB/T 38629—2020
inDataLen INTEGER OPTIONAL,
inData OCTET STRING OPTIONAL,
signerIDLen [0] IMPLICT INTEGER OPTIONAL,
signerID [1] IMPLICT OCTET STRING OPTIONAL,
signedMessage OCTET STRING
}
inDataLen表示数据原文长度,消息签名不附加原文时有效;
inData表示数据原文,消息签名不附加原文时有效;
signerIDLen表示签名者的 ID长度,当消息签名的签名算法为 SGD_SM3_SM2 时有效;
signerID表示签名者的 ID值,当消息签名的签名算法为 SGD_SM3_SM2 时有效;
signedMessage表示输入的消息签名数据,消息的结构应遵循 GB/T 35275 。
—VerifySignedMessageResp 包
VerifySignedMessageResp 包 为 验 证 消 息 签 名 响 应 格 式 包,当 respType 取 值 verifySigne- dMessage 时,响应包采用本子包,其具体格式如下:
VerifySignedMessageResp : : = SEQUENCE {
respValue INTEGER
}
respValue表明响应码,0 表示成功,非 0 表示错误。
GB/T 38629—2020
附 录 A
(规范性附录)
基于 HTTP的消息协议语法规则
A.1 概述
第 7 章中描述的 ASN . 1 格式是一种二进制格式,考虑到签名验证服务将被广泛用于各种 WEB 系统,而 WEB 系统更善于处理文本,为此在第 7 章的基础上,另行设计了一套基于 HTTP 协议的消息协议接口,便于各类 WEB 系统调用。
其工作原理与第 7 章中的请求响应模式类似,不同的是将消息格式从二进制的 ASN . 1 格式,转换为易于在 WEB应用和 HTTP协议中传递的文本格式。
本附录只描述了从第 7 章的消息格式到对应 HTTP格式的转换规则,而不再复述第 7 章中每个请求,响应的业务含义。
A.2 ASN.1数据类型到 HTTP格式的转化规则
表 A.1 ASN.1数据类型到 HTTP格式的转化规则
A.3 HTTP请求的转换规则(urlencoded格式)
第 7 章中的请求分为两层结构,外层是公共结构。
SVSRequest : : = SEQUENCE {
version Version DEFAULT v1 ,
reqType ReqType,
request Request,
reqTime GeneralizedTime
}
这一层结构在转换为 HTTP 时,被转化为 HTTP Request Header 中的字段,原则如下:
a) 所有请求都采用 HTTP 的 POST模式;
b) reqType作为 URL 的最终一级资源名,目录允许自定义,如:/SignServer/SignData;
GB/T 38629—2020
c) version被作为一个自定义的 HTTP 字段 SVS-Request-Version;
d) reqTime被作为一个自定义的 HTTP 字段 SVS-Request-Time;
e) HTTPHeader 中的 Content-Type 为 application/x-www-form-urlencoded;
f) HTTPHeader 中的 Content-Length 为第 7 章中请求数据的实际长度。
一个转换的实例如下:
POST /SignServer/SignData HTTP/1.1/r/n
SVS-Request-Version: v1/r/n
SVS-Request-Time: 20131001120000Z+0800/r/n
Content-Type: application/x-www-form-urlencoded/r/n
Content-Length:实际请求 body长度/r/n
/r/n
signMethod= …
注 1 :将 reqType直接作为 WEB 路径,而不是 自 定义的 HTTP 字段,是为了能在通用的 WEB 负载设备上进行负载。
注 2:允许自定义 URL 目录目的是允许灵活部署多套服务,对前端应用加以区分。
注 3 : Content-Type 和 Content-Length是 HTTP协议的标准字段,此处按照其原意进行使用。
注 4 : HTTP协议中的其他标准字段如 Host、User-Agent等,在此不再标出。
第 7 章中代表业务请求实体的 Request类型,将被转换为一个 HTTP 的 form 表单:
param1=value1¶m2=value2…paramN=valueN
比如 7 . 5 . 4 单包数字签名请求,将被转换为以下文本格式的表单:
signMethod=签名算法类型 &keyIndex=私钥的索引 &keyValue=私钥权限标识码 &inDataLen = 1024&inData=Base64 编码的待签名的数据原文。
A.4 HTTP响应的转换规则(urlencoded格式)
第 7 章中的响应分为两层结构,外层是公共结构。
SVSRespond : : = SEQUENCE {
version Version DEFAULT v1 ,
respType RespType,
respond Respond,
respTime GeneralizedTime
}
这一层结构在转换为 HTTP 时,被转化为 HTTP Response Header 中的字段,原则如下:
a) respType被作为一个自定义的 HTTP 字段 SVS-Response-type;
b) version被作为一个自定义的 HTTP 字段 SVS-Response-version;
c) respTime被作为一个自定义的 HTTP 字段 SVS-Response-Time;
d) 代表业务响应实体的 Response类型,也被转换为一个 HTTP 的 form 表单;以 7 . 5 . 4 单包数字签名请求为例,其转换后 HTTP 响应如下:
HTTP 200 OK/r/n
SVS-Response-Type: SignData/r/n
SVS-Response-Version: v1/r/n
SVS-Response-Time: 20131001120000Z+0800/r/n
Content-Type: text/html;charset=GB2312/r/n
GB/T 38629—2020
Content-Length:实际响应 body 的长度/r/n
/r/n
respValue=0&signature=Base64 编码的签名结果
A.5 HTTP请求的转换规则(json格式)
第 7 章中的请求。
SVSRequest : : = SEQUENCE {
version Version DEFAULT v1 ,
reqType ReqType,
request Request,
reqTime GeneralizedTime
}
在转换为 HTTP 时,被转化为 HTTP Request body 中以 json格式表示的数据,原则如下:
a) 所有请求都采用 HTTP 的 POST模式;
b) reqType被作为 URL 的路径。
以 7 . 5 . 4 单包数字签名请求为例,其转换后 HTTP请求如下:
POST /SignData HTTP/1.1/r/n
Content-Type: application/j son /r/n
Content-Length:实际请求 body长度/r/n
/r/n
{
″version″: ″v1″,
″reqType″: ″signData″,
″request″: {
″signMethod″:″签名算法类型″,
″keyIndex″:″私钥的索引″,
″keyValue″:″私钥权限标识码″,
″inDataLen″:″待签名的数据原文长度″,
″inData″: ″Base64 编码的待签名的数据原文″
} ,
″reqTime″:″带时区格式的时间字符串″ }
注 1 :将 reqType直接作为 WEB路径,是为了能在通用的 WEB负载设备上进行负载。
注 2 : Content-Type 和 Content-Length是 HTTP协议的标准字段,此处按照其原意进行使用。
注 3:对应 HTTP协议中的其他标准字段如 Host、User-Agent等,在此不再标出。
A.6 HTTP响应的转换规则(json格式)
第 7 章中的响应。
SVSRespond : : = SEQUENCE {
version Version DEFAULT v1 ,
respType RespType,
GB/T 38629—2020
respond Respond,
respTime GeneralizedTime
}
在转换为 HTTP 时,被转化为 HTTP Response body 中以 json格式表示的数据。
以 7 . 5 . 4 单包数字签名请求为例,其转换后 HTTP 响应如下: HTTP 200 OK/r/n
Content-Type: application/json;charset=UTF-8/r/n
Content-Length:实际响应 body 的长度/r/n
/r/n
{
″version″: ″v1″,
″reqType″: ″signData″,
″respond″: {
″respValue″:″响应码″,
″signature″: ″Base64 编码的签名结果″
} ,
″reqTime″:″带时区格式的时间字符串″ }
GB/T 38629—2020
附 录 B
(规范性附录)
响应码定义和说明
响应码定义和说明见表 B. 1 。
表 B.1 响应码定义和说明
相关推荐
- GB/T 50564-2010 金属非金属矿山采矿制图标准 高清晰版
- GB/T 1621-2023 工业氯化铁
- GB∕T 3480.3-2021 直齿轮和斜齿轮承载能力计算 第3部分:轮齿弯曲强度计算
- GB∕T 39902-2021 城市轨道交通中低速磁浮车辆悬浮控制系统技术条件
- GB/T 17880.6-1999 铆螺母技术条件
- GB/T 18429-2018 全封闭涡旋式制冷剂压缩机
- GB/T 34501-2017 硬质合金 耐磨试验方法
- GB/T 37125-2018 硫铝酸盐水泥熟料
- GB/T 17452-1998 技术制图 图样画法 剖视图和断面图
- GB/T 34572-2017 轨道交通 受流系统 受电弓碳滑板试验方法


