陈康 陆君一 沈尧 胡文华 / 上海市计量测试技术研究院
随着物联网技术的发展,生产企业对工作用计量器具进行升级改造。新产品为了实现智能化、网联化,在原有计量功能基础上,增加嵌入式智能系统以及网络通信模块。以列入《实施强制管理的计量器具目录》的出租汽车计价器为例,生产企业研发的新型网联计价器更好地融合计价计时、驾驶员管理、车辆运营管理等各项功能,适应行业发展需求。相较于传统计价器通过调整窗调整器具计量参数,新型网联计价器可通过通信端口利用移动网络调整计量相关参数。根据JJG 517-2016 《出租汽车计价器》检定规程要求[1],检定合格的计价器须在调整窗和壳体位置加装物理封印,防止未经授权调整参数。然而网联计价器可远程调整参数,这给计量器具法制监管带来挑战。在出租汽车计价器国际建议中[2],计价器软件保护要求是通过物理封印或者软件加密方式,防止内部软件和参数被移除、篡改或破坏。所以,探讨在计价器强检中应用数据保护技术有确实的实际意义和应用价值。
现阶段典型的数据保护加密算法有数据加密标准(Data Encryption Standard,DES)、高级加密标准(Advanced Encryption Standard,AES)的对称加密算法和RSA(Rivest Shamir Adleman)的非对称加密算法[3],其均为国外商用密码算法,存在很大的隐患[4]。自2012年以来,国家密码管理局以《中华人民共和国密码行业标准》的方式,陆续公布了SM2/SM3/SM4等密码算法标准及应用规范。其中SM2为基于椭圆曲线密码的公钥密码算法标准,包含数字签名、密钥交换和公钥加密,用于替换RSA等国际算法,SM3为密码杂凑算法,适用于数字签名和验证等,用于替代MD5信息摘要(Message-Digest)等国际算法;SM4为分组密码算法,用于替代DES/AES等国际算法。在计价器强检的数据加密验证设计中使用国家商用密码(简称国密)算法,可增强计量检定系统的安全性、自主性。
表1 国密算法与规范
与传统的物理封印作用类似,数据保护封印的作用为锁定计量程序和参数不被外界任意篡改,并对计价器终端通信接口实施监管。所有计价器终端在处理计价计时工作以及调整参数时,应只允许与授权的中心管理服务器终端通信。中心管理服务器具备调整计价器参数和发送封印数据包的权限。计价器终端应接收受保护的数据包,并验证数据包完整、无篡改。然后,在计价器加载运行程序时解密数据包,加载计量参数。因此,需要从中心管理服务器和计价器如何相互验证数据包和保护数据包两方面进行设计。
计价器首次安装在运营车辆上后,排除修理更换等原因,应始终跟随运营车辆直至报废。目前,上海主要出租汽车运营公司的运营车辆车牌号大部分不会随意变更,运营公司通过车牌号管理车辆日常工作。所以车牌号可作为计价器封印数据的特征值。此外,计价器本身型号以及出厂编号也是区别不同终端的主要特征值。这些特征值可作为对称加密算法的密钥生成根数据,从而使每台计价器终端都拥有唯一密钥,降低使用统一密钥时的泄露风险。在计价器检定后,检定日期、检定使用设备编号、脉冲K值、合格证编号等可作为检定用的数据特征值。由此计价器检定需要的封印数据内容和格式(#后为注释)为:
PlateNO:ADC1111 # 车牌号,省略沪
Type:QSJ-AC # 型号
Code:21F1111 # 出厂编号
KValue:1000 # 脉冲K值
Instrument:01 # 检定使用设备编号
Date:2021-01-01 # 检定日期
Certificate:210004000000 # 合格证编号
计价器内部程序所需的计费方法、计价模式等参数一般情况下不会经常修改,在周期检定时不作为检定项目,所以可与检定需要的数据区别处理。这些内部参数经过加密后存储在计价器终端,未经授权不能篡改。遇到篡改情况,在程序运行解密加载参数时应报错终止运行。
计价器内部程序数据包在生产以及后续远程更新时应保证完整性、一致性,具备内部验证机制。程序数据包未被授权,篡改后,计价器内部验证后发现问题时应暂停使用,并返修。中心管理服务器需要更新程序数据包,向计价器终端下发加密数据包时,计价器终端应验证该数据包完整性,避免因通信问题损坏数据包内容,导致计价器更新后出现问题。验证数据包完整性的程序设计流程如图1所示。
图1 中心管理服务器与计价器终端验证数据包的程序设计流程
国密SM3密码杂凑算法可以用于验证计量相关程序数据包完整性、一致性,避免数据包未经授权,篡改或者通信过程中的损坏。该算法可以把计量相关程序数据包的二进制比特串作为输入数据,经过算法填充、迭代压缩和输出选载后,输出一个固定256比特的杂凑值[5],用于验证摘要消息。只要更改数据包内容中任一字节,那么输出的杂凑值就不相同。因此,中心管理服务器向计价器终端发送加密数据包以及数据包经SM3算法得到的摘要消息A,计价器终端利用SM3算法处理接收到的数据包,得到摘要消息B,验证摘要消息A和B是否一致,即可判断数据包是否完整、非篡改或损坏。计价器检定需要的封印数据需要经常更新,可以分开作为单独数据包传输,中心管理服务器可存储由当前有效封印数据输出的摘要消息,不定期地与计价器终端内部封印数据输出的摘要消息进行一致性验证,起到日常监督管理的作用。
中心管理服务器与各计价器终端传输的数据包应使用加密技术保证数据的保密性,防止被截获读取后计量程序被破解修改。国密SM4分组密码算法利用128比特的密钥对输入数据包进行加密[6]。加密数据包从中心管理服务器传输至计价器终端。计价器终端利用保存在内部的相同密钥对加密数据包进行解密后,加载运行程序。为了避免密钥泄露造成对所有终端的影响,中心管理服务器应根据每个计价器终端的不同硬件信息生成独有的密钥,并分别保存。每个计价器终端只保存自己的密钥,即使单独计价器终端被非法获取密钥,也不会影响其他终端。
随着国家密码技术规范的相继出台,技术开发者以国密规范为基础发布各种开发平台的密码模块。以GmSSL项目为例,由北京大学的密码学研究组开发维护,是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密算法,并支持Java、Go、PHP等多语言接口绑定和REST服务接口。新型网联计价器生产者可基于各自平台选择相应的开源包实现计量相关数据包的加密、解密与验证。
在python平台上,有许多开发者发布国密相关的开源代码,如gmssl、pysm4,这些项目提供encrypt加密函数、decrypt解密函数等。密钥生成是保护计价器强检加密实现的重要技术路线。密钥需要16字节数据,其中8字节数据指定使用随机数据,另外,8字节数据可根据计价器安装的车牌号、型号、出厂编码挑选生成。该算法设计实现思路可利用车牌号、计价器型号、出厂编号作为密钥前8字节的密钥根,随机选取8字节数据并利用随机函数生成其余8字节数据,组合两部分数据作为输出密钥。
本文探讨了计价器强检中应用数据验证技术的可行性,介绍了密码保护的相关技术规范,设计了计价器强检的数据保护要求和方式,并提出用于数据包保护的密钥生成算法设计思路。研究表明,新型网联计价器利用国密算法技术可保证内部计量程序与参数的完整性、一致性和保密性,达到强制检定计量器具要求的监督管理目的。