调频副载波方式应急广播中数字签名算法研究*
2020-03-26赵云辉
赵云辉
(北京江南天安科技有限公司,北京 100088)
0 引 言
应急广播通常是指一个地区发生重大灾害、突发事件等公共危机时,以广播的形式向全社会提供迅速快捷的信息发布,在第一时间把需要公开的灾害消息或灾害可能造成的危害传播到普通民众,使民众在第一时间知道发生了什么事情,应该如何撤离、避险或采用合理的方式使生命、财产、健康等损失降到最低。
应急广播是政府及相关部门通过广播电视方式向公众提供应急信息的一种应急手段,是国家应急体系和国家公共服务体系的重要组成部分。在国际上,美国、日本、英国、德国、以色列等国家,都把广播电视作为政府应急信息发布的重要通道。我们国家高度重视应对突发事件中应急广播的作用,近年来颁布的相关规划和文件如《中华人民共和国国民经济和社会发展第十三个五年规划纲要》《国家基本公共文化服务指导标准(2015-2020年)》和《全国应急广播体系建设总体规划》,对全国应急广播体系建设均提出了明确要求。
我国的应急广播系统除了发布预警信息之外,还承担着政策宣传和舆论引导的职责,尤其是在边疆少数民族地区,承担了维护社会稳定的重要职能,因此应急广播系统的传输安全、信息完整性尤为重要。
目前,我国应急广播的建设已全面开展,在最后一公里主要通过我国新农村“村村响”系统实现覆盖。该系统采用的技术主要是调频广播。
1 RDS调频广播简介
无线数字系统(Radio Digital System,RDS)是调频广播的一种实现方式,一般是指利用调频广播的副载波携带数据资料的一种工作方式。访技术最先由欧洲广播联盟(European Broadcasting Union,EBU)于1984年提出,相关技术标准为EBU 3244。该技术充分利用现有调频广播的带宽,采用57 kHz的副载波数据信号叠加到调频节目频段上,终端设备在接收音频信号的同时可接收数字信号,数字信号内容可以是节目名称、类型、扩展信息以及标准时间等。
按照我国调频广播的标准(GB4311.3-84)规定,调频广播频率范围为87.5~108 MHz。为防止调频台间的相互干扰,规定频道间隔为200 kHz,最大频偏为75 kHz,最高调制频率为15 kHz,即调频立体声广播的基带信号理论带宽为53 kHz,调频单声道广播的基带信号频宽为15 kHz。因此,53~100 kHz或15~100 kHz的频带几乎是闲置的,在每个频道中可扩展出多个副信道,可以传送数据和其他信息[1]。
RDS的数据信号传送是以帧为基本单元,接收端一次有效的数据采集至少是一个完整的数据帧,格式如图1所示。一帧数据由4个数据块组成,每个数据块包含26 bit数据位,其中高16位是信息数据,低10位是校验码和数据块识别号。每帧前两个数据块是固定数据,后两块可以转输数据,因此每帧实际传输的有效数据是32 bit,即4 Byte数据。RDS的传输比特率是1 187.5 Hz,一帧数据的传输时间约为87.6 ms,也就是说每秒钟可传送11个数据帧的信息,除去冗余信息,有效信息载荷为44 Byte。
图1 RDS数据帧格式
我国在1991年开始应用RDS技术,在1995年推出RDS调频广播国家标准(《广播数据系统技术规范》GB/T15770-1995)),由此拉开了我国RDS技术的应用帷幕。目前,RDS调频广播广泛用于智能交通、农业防灾减灾、政府公众信息发布、固定和移动载体广告、新农村“村村响”广播、教育以及气象信息发布等诸多领域。
2018年,由广播电视科学研究院牵头,推出了应急广播信息安全保护技术标准(《应急广播安全保护技术规范 数字签名》GD/J 081—2018),在此标识中明确提出了采用基于数字签名(SM2算法)的方式对RDS应急广播传输的信息进行保护。
2 通用数字签名算法简介
SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。SM2算法与RSA算法一样,同属于非对称算法体系,属于椭圆曲线加密算法(Elliptic Curve Cryptography,ECC)的一种。不同的是,RSA算法是基于大整数分解数学难题,而SM2算法是基于椭圆曲线上点群离散对数难题。
SM2算法可以提供加解密、数字签名、密钥协商等功能,可用于身份认证、数据完整性保护等方面。应急广播领域采用的数字签名算法是采用SM3算法对应急广播指令进行摘要计算,然后调用SM2算法进行数字签名。
3 数字签名和验证的实现过程
应急广播信息安全保护技术标准对调频广播传输信息保护进行了具体规定,采用基于SM2和SM3算法的数字签名方式,输出了74 Byte的验证数据,包括4 Byte UTC时间、6 Byte签名数字证书编号和64 Byte数字签名。
应急广播指令的发送端将传输覆盖指令、签名时间打包,使用发送端私钥对其计算数字签名;发送端将计算的数字签名附加在应急广播指令、签名时间、发送端数字证书编号数据后面进行打包传输;应急广播指令接收端接收到传输覆盖指令后,调取指令发送端数字证书进行签名验证,如果验证成功则接收端对传输覆盖指令进行处理,如果失败则丢弃此指令。应急广播传输覆盖指令数字签名机制如图2所示[2]。
图2 应急广播传输覆盖指令数字签名机制
应急广播针对SM2算法的具体数字签名的过程如下:
(1)设待签名的应急广播传输覆盖指令为M,M的数字签名为(r,s),发送端A的私钥为dA,公钥为PA,IDA表示SM3算法的用户标识,entlenA表示IDA的长度。SM2算法使用的椭圆曲线方程的参数包括a、b、G的坐标xG和yG、PA的坐标xA和yA。
先使用SM3算法计算参数的杂凑值ZA
步骤3:使用随机数发生器生成随机数k∈ [1,n-1];
步骤4:基于k计算椭圆曲线上的点,(x1,y1)=[k]G;
步骤5:计算r=(e+x1)modn,若r=0或r+k=n则返回步骤3;
步骤 6:计算s=((1+dA)-1×(k-r×dA))modn,若s=0则返回步骤3;
步骤7:将r和s转换为字符串,M的数字签名为(r,s),其中r和s长度各为32 Byte;
应急广播针对SM2算法的验证签名过程如下:
设接收到的应急广播传输覆盖指令为M´,其签名为 (r´,s´),运算过程如下:
步骤1:检验r´∈[1,n-1]是否成立,若不成立则验证不通过;
步骤2:检验s´∈[1,n-1]是否成立,若不成立则验证不通过;
步骤 5:将r´、s´转换为整数,计算t=(r´+s´)modn,若t=0则验证不通过;
步骤 6:基于t计算椭圆曲线上的点 (x1´,y1´)=[s´]×G+[t]×PA;
步骤 7:基于x1´计算R,R=(e´+x1´)modn;若R=r´则验证通过,否则为不通过[3]。
4 调频广播中存在的问题及分析
应急广播信息保护标准中采用了SM2和SM3算法实现的标准数字签名流程,能够有效实现对应急广播信息发送端的验证和对应急广播指令信息完整性的验证。调频广播方式也采用了此标准的签名方式进行传输指令的保护。具体措施:在RDS终端音柱上增加专用硬件密码模块,密码模块中保存了相应的信息发送端的公钥,实现了数字签名和验证流程;通过音柱的主控单元与密码模块进行通信,实现对终端接收的信息进行安全验证。
基于RDS的技术特性,在实际应用中陆续发现了一些问题,包括误码率高、数字签名的数据接收时间长、应急广播指令处理延迟等。通过对现场数据的抓取及采用驻留终端内的测试程序进行业务逻辑分析,最终发现产生这些问题的原因如下。
(1)RDS传输数据慢。通过前述介绍可知,RDS传输数据通过数据帧实现,一帧只能传送4个有效数据字节。RDS的理论传输比特率是1 187.5 Hz,一帧数据的传输时间约为87.6 ms,也就是说每秒钟最多可传送11个数据帧的信息,除去冗余信息,有效数据为44 Byte。同时,由于RDS一般采用空中无线传输方式,干扰较多,传输的数据帧越多,出现误码的帧也越多,中间任何一帧出现误码均需要重传。因此,在实际使用中,一般传输耗时是理论时间的1.5~5倍,数据越长,因误码而重传的耗时也越多。实际测试中,完整接收完数字签名信息所需的时间为3~5 s。
(2)数字签名产生的数据长,导致接收时间长。目前,采用的标准SM2数字签名算法产生的数据签名内容为64 Byte(其中为32 Byte,为32 Byte),再加上附加签名信息UTC时间4 Byte,签名的证书编号6 Byte,总计为74 Byte。一般RDS应急广播指令是4~8 Byte,传输1~2个数据帧可以完成,耗时很短。目前的数字签名信息是74 Byte,即附加的数据理论传输时间需要近2 s;需要传输19个数据帧才能传送完成,中间任何一帧出现误码均需要重传。实际测试中,完整接收完数字签名信息所需时间为3~5 s。需要发送的数据过长,是导致RDS方式接收误码率高、延时大的主要原因。
5 签名算法的优化设计
由于应急广播的技术标准已颁布,解决此问题的方式不是改用其他模式或算法,而是选择优化SM2数字签名算法,最大可能减少签名输出的数据,由此达到减少RDS传输所需时间,优化密码模块对数据签名验证过程,减少处理延时,最终达到RDS模式应急广播实现高效播发。
对此算法的改进核心思想是:最大限制减少签名输出数据,以此实现减少RDS传输时间、降低出错概率的目的。
具体的改进如下。
初始过程:
步骤1:使用随机数发生器生成随机数k∈ [1,n-1];
步骤2:基于k计算椭圆曲线上的点,(x1,y1)=[k]×G;
步骤3:重复上述操作,生成255组k及(x1,y1);
上述3个步骤由系统在初始阶段进行,完成后将此255组数据设成本装置的预存数据(可根据装置的安全存储区容量设定要生成的组数,为了保证随机性,最少生成10组,最多255组),在密码模块初始发行阶段就置入,同时为每组数据编制索引(0x01~0xFF),供后续计算使用。
签名过程如下:
步骤3:从预制库中随机选取一个k及对应的(x1,y1);索引号定义为K;
步骤4:计算r=(e+x1)modn,若r=0或r+k=n则返回步骤3;
步骤 5:计算s=((1+dA)-1×(k-r×dA))modn,若s=0则返回步骤3;
步骤6:将s转换为字符串,M的数字签名为K||s,33 Byte长,其中K为1 Byte长,s为32 Byte长。
验证签名过程如下:设接收到的应急广播传输覆盖指令为M´,收到的签名为s´´=K||s´
验证运算过程如下:
步骤1:根据K从密码模块预制区中找到(x1,y1);
步骤2:检验s´∈[1,n-1]是否成立,若不成立则验证不通过;
步骤 5:计算r´=(e´+x1)modn
步骤6:计算t=(r´+s´)modn,若t=0则验证不通过;
步骤 7:基于t计算椭圆曲线上的点 (x1´,y1´)=[s´]×G+[t]×PA;
步骤 8:基于x1´计算R,R=(e´+x1´)modn;若R=r´则验证通过,否则为不通过;
上述算法中比较耗时的是初始过程(生成随机数并计算SM2曲线上的点,生成批量的数据后将其安装到装置内,后续不需要更新),而此步骤是在预制过程实现,并不占用后续的计算时间。预制过程虽然在验证过程中重新计算了一次r值,但是相对于验证过程来说,增加的时间开销极小,实测过程中密码模块验证的时间增加在10 ms以内。
通过上述算法优化,应急广播标准中要求的附加保护数据输出仅为43 Byte,减少了31 Byte,对RDS传输通道来说,之前需要传输需要19个数据帧才能完成传送74 Byte的保护数据,而现在只需要11个数据帧就可以完成传输,理论时间不超过1 s,大大缩减了传输时间。
从基于上述算法实现的密码模块在实际项目中的应用情况来看,RDS方式下应急广播附加保护数据的理论传输时间减少了一半。通过应用本装置进行实际测试,整合多次测试结果来看,平均时间为1.3 s,较算法未优化前的平均时间3 s减少了1.7 s,提升效果明显;由于传输时间的缩短,减少了RDS传输过程中出现误码的帧,提升了RDS广播指令的传输效率,可见此模式对RDS方式的应急广播具有有效性。
6 结 语
国产密码算法的广泛应用为各行业带来了更安全的保护,但是一个算法或一个模式不是万能的,根据各自不同的业务形态进行适当的优化会带来更好的用户体验。本文设计的数字签名算法在实际应用中取得了很好的效果。应急广播作为我国面向社会大众的宣传机构,是与广大群众沟通的桥梁。针对应急广播的业务特点设计保护应用,才能为应急广播提供更安全、更高效的服务。本文描述的数字签名优化算法同样适用于其他对数据传输有限制的领域,在保证一定安全性的前提下,减少要传输的验证数据。