最近公司要求支持GB35114 A级过检,折腾了两周,终于验证通过,在此记录一下,方便以后自己查看。
GB35114 A级过检
-
单向认证,设备需要发送签名信息给服务器验证
签名信息的组装注意事项:
a) 按照GB协议规则组装待签名的字符串.
b) 对组装好的字符串进行sm3杂凑算法,这里使用sm3杂凑算法时要使用设备自己的公钥,用户id是1234567812345678,长度为16.
c) 对32字节sm3杂凑值进行签名,使用设备私钥.
d) 对签名算出来的 r和s值进行ans.1(der)编码.
e) 对der编码后的数据再进行base64编码,得到签名值. -
双向认证,服务器验证设备身份的同时,设备也验证服务器的身份
验签服务器签名的方法:
a) 按照GB协议规则组装待签名的字符串.
b) 对组装好的字符串进行sm3杂凑算法,这里使用sm3杂凑算法时要使用服务器的公钥,用户id是1234567812345678,长度为16.
c) 使用base64解出服务器发送过来的签名数据.
d) 对base64解析出来的签名数据进行der解码得到 r和s值.
e) 使用服务器的公钥和sm3计算出来的hash值,以及r和s数据进行验签. -
信令验证,设备和服务器要相互验证对的消息
验证方法
a) 按照GB协议规则组装待杂凑的字符串.
b) 对组装好的字符串使用sm3杂凑算法得到hash值,不带userid和公钥.
c) 解码nonce中的base64数据得到一个hash值.
d) 比较两个hash值,判断数据是否被更改过.
GB35114主要验证两个方面来保证数据安全:
- 验证签名时,通过公钥来验证使用私钥签的名,来保证数据的来源是安全的.
- 使用sm3算法对消息整体进行摘要,得到hash值,接收数据方要通过同样的算法计算出一个hash值,比较两个值是否相同,来保证数据没改篡改过,保证数据安全.