李 敏, 陈付龙, 庞 辉
(1. 安徽师范大学 计算机与信息学院, 安徽 芜湖 241002; 2. 芜湖职业技术学院 信息与人工智能学院,安徽 芜湖 241006; 3. 埃泰克汽车电子(芜湖)有限公司 软件部, 安徽 芜湖 241006)
目前, 随着智能网联汽车产业蓬勃发展, 进一步提升了用户驾乘体验, 丰富了车载产品功能, 但也存在汽车信息安全问题。2018年, 由生态环保部和国家市场监督管理总局联合发布的重型柴油车污染物排放限值及测量方法(中国第六阶段)(GB 17691—2018)标准中要求车载终端数据传输应采用非对称加密算法SM2或RSA算法(以Ron Rivest, AdiShamir 和Leonard Adleman 3位开发人员命名), 且对私钥采用硬件保护方式[1]。在2021年世界智能网联汽车大会上, 专家强调了数据安全是智能网联汽车面对的新挑战, 并详细分析智能网联汽车整车信息安全威胁和渗透测试[2]。国内外文献资料也多次报道车内外网络易遭受攻击等问题。如Thing等[3]和吴尚泽等[4]均提出车载设备未采用身份认证易遭受恶意攻击, Woo等[5]提出为提高车内CAN(Controller Area Network)总线可认证性和机密性以抵御网络攻击, 改进车载内部总线协议; Woo等[6]和罗峰等[7]提出车载网络数据采用分级加密传输方式; Groza等[8]提出一种消息认证的CAN总线协议。因此, 车内、 车际网数据安全是智能网联汽车产业需解决的关键问题。国密算法SM2是我国自主研发的商用密码体系, 是基于ECC(Elliptic Curves Cryptography)的非对称密码算法, 密钥长度较RSA短, 算法安全性更强[9]。随着国密算法在信息安全领域广泛应用, 将国密算法应用于智能网联汽车产业是一种有益的尝试[10]。目前车载设备多数采用XTEA(Extended Tiny Ecryption Algorithm)或128 bits AES(Advanced Ehcryption Standard)加密算法进行安全认证, 通过分析验证, 发现128 bits AES算法应用于车载CAN数据加密过程中产生的随机数作为明文发送, 该算法易产生数据被篡改或网络攻击等问题[11]。SM2算法将车载设备产生的随机数隐藏在公钥中, 采用私钥解密, 进行车载设备身份认证, 有效提高数据机密性。
目前, 科研人员对国密算法SM2进行了大量研究和算法实现, 刑唯哲[12]提出基于C语言实现SM2软件, 王腾飞等[13]采用改进固定时长防护方案对基于大数运算MIRACL(Multiprecision Integer and Rational Arithmetic Cryptographic Library)库实现SM2软件, 聂意新等[14]提出了基于JAVA语言实现SM2算法。但SM2算法在汽车信息安全领域的实际应用还较少。笔者研究分析了国密SM2算法原理, 并将SM2算法移植到国产嵌入式处理器GD32, 同时采用saleae工具和CanKing等软件进行算法验证。通过实验表明, 将SM2算法移植到国产嵌入式处理器中并应用于智能网联汽车产业具有一定的实用价值和参考意义。
2010年国家密码管理局发布了SM2椭圆曲线公钥密码算法, SM2是基于有限域FP上的椭圆曲线方程y2=x3+ax+b, 其中p是大于3的素数,a,b∈Fp,p、a、b为椭圆曲线系统参数, 且满足条件(4a3+27b2)modp≠0[15]。SM2算法加密强度高, 因此尝试将SM2算法应用于智能网联汽车关键部件TBOX(Telematics-BOX)和PEPS(Passive Entry Passive Start)的身份认证场合, 双方采用 CAN 2.0 B协议通信, 为防止CAN总线受重放攻击, CAN报文中设置了8字节的RN随机数, 保证数据机密性。
根据SM2国密算法原理[15], TBOX和PEPS双方设有私钥和公钥, TBOX公钥为PT, 私钥为dT; PEPS公钥为PP, 私钥为dP。TBOX和PEPS公钥和私钥的关系如下
PT=[dT]G,PP=[dP]G
(1)
TBOX与PEPS身份认证过程如图1所示。PEPS包含4 Byte PIN、 8 Byte随机数和8 Byte CC常数。PIN码作为待加密的明文,RN为加密前生成的随机数, 并作为明文的一部分参与加密并生成密文, 向TBOX发送认证请求; TBOX接收到PEPS的报文并进行解密, 确认PIN码正确; TBOX确认PEPS发送的PIN码正确后, 生成随机数并加密回复至PEPS。
算法原理如下
PP=[dP]G,C1=[RN]G
temp=[RN]PP=[RN][dp]G=[dp][RN]G=[dp]C1
(2)
其中C1为一次倍点运算后的椭圆曲线点,RN为随机数, temp为二次倍点运算后椭圆曲线点。在认证过程中, 基于公钥加密特性, PEPS使用公钥加密, TBOX使用PEPS私钥解密, 并将公钥发送至PEPS, PEPS使用TBOX私钥完成解密并实现TBOX的认证。
图1 TBOX和PEPS的身份认证Fig.1 Authentication of TBOX and PEPS
采用PC端的C-Free5 IDE调试国密SM2算法, 由于SM2加解密算法涉及大数运算, 因此将有理算术MIARCL库移植到系统LIB中。MIARCL库是目前应用较为广泛的基于公钥加密算法的大数运算库, 源码公开, 且包含Diffie-Hellman 密钥交换、 RSA、 AES、 DSA数字签名, 椭圆曲线密码学等[9]。将PC端调试成功的SM2算法移植到兆易创新GD32F103嵌入式处理器, 基于KEIL5平台设计TBOX和PEPS端软件, 软件由主程序、 公私钥对生成、 密钥派生、 SM2加解密、 CAN发送和接收程序等构成。公私钥对生成、 密钥派生是SM2算法的关键代码, SM2算法采用256位素数域椭圆曲线参数, 支持256 bits数据加解密[15], 公私钥对生成函数流程如图2所示[16]。
图2 公私钥对生成函数流程Fig.2 Public-private key pair generation function process
根据国家密码管理局发布的公钥加密算法, 密钥派生是在密钥协商中, 通过密钥交换得出共享数据流, 生成会话密钥或密钥数据, 其生成流程如图3所示[15]。输入数据X, 长度XL=32。输出密钥数据Y,长度为YL,Y=H1‖H2‖…‖H[YL/XL-1]‖H[YL/XL]。
图3 SM2密钥派生函数流程Fig.3 SM2 key derivation function flow
平台硬件采用国产GD32F103为核心的嵌入式系统板模拟车载TBOX和PEPS, GD32F103是ARM(Advanced RISC Machine) CORTEX-M3内核, 主频为108 MHz, 支持一路CAN接口。测试仪器包括Kavaser CAN分析仪、 SaleaeLogic8逻辑分析仪、 数字示波器等。将在C-Free5 IDE中调试成功的SM2加解密代码移植到GD32F103, 并在KEIL5中运行及测试SM2加解密和通信程序, 如图4~图6所示, 其包括密钥生成函数SM2_keygen()、 加密函数SM2_encrypt()、 解密函数SM2_decrypt()、 CAN通信函数CAN_message_transmit()等。为便于准确获取加解密和密钥生成函数的运行时间, 软件中应用TEST_ON()和TEST_OFF()函数实现测试开启和关闭。
图4 密钥生成函数Fig.4 Key generation function
图5 PEPS加密函数Fig.5 PEP sencryption function
图6 PEPS解密函数Fig.6 PEPS decryption function
PC端采用SaleaeLogic8逻辑分析仪测试函数调度和SM2算法的加解密时间, 如图7所示。在GD32F103中运行程序SM2_keygen()、 SM2_encrypt()和SM2_decrypt()。经测试, 上电后, 执行SM2初始化, SM2_keygen()耗时235 ms, PEPS确认PIN正确后, 生成随机数, 并加密回复TBOX,{SM2_encrypt()}耗时469 ms, PEPS收到TBOX报文后解密, 确认PIN正确, SM2_decrypt函数耗时235 ms。从数据传输的实时性角度, 上述时间超过车载数据频繁交互指标, 但在车载设备单次身份认证场合是可接受的。将Kavaser CAN分析仪作为该系统中的一个节点连接到TBOX和PEPS通信网络, 采用CanKing软件监测TBOX和PEPS接发收报文、 接发收时间以及测试数据, 系统软件中设定PEPS和TBOX每隔1 ms发送一帧数据, 每帧数据DLC长度为8, 如图8所示, 界面上部分ID为0x111的PEPS节点发送的17帧数据, 下部分ID为0x222的TBOX节点发送的17帧数据。
图7 函数调度和SM2算法运行时间Fig.7 Function Scheduling and SM2 algorithm running time
图8 CanKing平台接发收的CAN多帧报文Fig.8 CAN multi-frame messages sent and received by the CanKing platform
加密算法中设置明文长度为20 Byte, 包括8 Byte的随机数、 4 Byte PIN和8 Byte CC常数, 如表2所示, TBOX端的CAN ID设为0X111, PEPS端的CAN ID设为0X222, 双方CAN通信密文长度为116 Byte。由于车载CAN通信传输的一帧报文最大数据量为8个字节, 因此, 需将116 Byte密文分组多帧传输, 双方约定分组协议, 该协议将每帧中第1个字节的数据作为帧次序的标识符, 设为序号0~16, 共17帧数据。
表1 车载CAN通信明文构成
表2 TBOX与PEPS的CAN通信数据
笔者将国密SM2算法移植到嵌入式处理器GD32F103, 并应用于车载节点CAN通信的安全认证场合。具体总结如下。
1) 采用SM2算法将车载节点CAN报文中随机数RN作为私钥, 发送时隐藏在公钥中, 提高车载数据安全性。
2) 基于KEIL5完成车载节点主程序、 公私钥对生成、 密钥派生、 SM2加解密、 CAN通信等函数设计, 根据车载CAN通信特点, 结合SM2算法原理, 按照双方约定报文分组协议传输多帧密文。
3) 通过Kavaser CANKING软件监测TBOX和PEPS通信数据, 验证SM2算法应用于智能网联汽车安全认证方法的有效性。
4) 通过SaleaeLogic8平台获取TBOX和PEPS的上电初始化、 公私钥对生成、 密钥派生、 SM2加解密的运行时间, 得出采用SM2算法加解密和CAN数传时间较长是源于SM2算法复杂, 且有理算术库MIARCL运算量大。CAN数传时间过长源于密文过长, 分组协议多帧密文传输所致。因此, 从笔者研究中得出SM2算法适用于车载设备的单次身份认证场合, 安全性更高, 数据加解密频繁场合则宜采用对称加密算法SM4, 结合国密SM4和SM2算法的各自优势, 为国密SM2和SM4混合密码算法应用于智能网联汽车安全认证领域提供借鉴。