一种支持多线程的随机数检测系统及方法
技术领域
本发明涉及随机数检测技术领域,具体涉及一种支持多线程的随机数检测系统及方法。
背景技术
随着数字经济的不断发展,网络信息安全越来越受到重视。在所有的信息安全问题上,随机数序列都扮演着基础而又关键的作用。因此,越来越多的企业加入了随机数发生器的研发队伍之中,随机数发生器技术的核心是生成数的随机性。随着数据安全的重要性越来越高,对于随机数的随机性检测,国家密码管理局先后在2012年、2021年分别颁布了GM/T0005-2012《随机性检测规范》和GM/T 0005-2021《随机性检测规范》。随机数检测标准不断更新,而目前对应的随机数检测工具无法做到及时与随机性检测规范的更新相匹配,给随机数的检测流程带来不便利性。
目前,现有随机数序列检测工具输入、检测功能局限且多是单线程离线检测,检测效率较低,无法满足大批量对数据处理的需求,这无疑给随机数产品研发和测试阶段带来了一定程度的阻碍。现有随机数检测工具需要人为花费大量的时间反复地检测随机数是否符合标准,严重阻碍研发人员、测试人员的工作效率。
发明内容
发明目的:本发明提供一种支持多线程的随机数检测系统及方法,解决了现有随机数检测工具在检测过程中存在的效率问题。本发明在检测随机数的过程中采用多线程检测,大大提高随机数检测工具的工作效率。
技术方案:本发明提供一种支持多线程的随机数检测系统,其包含以下模块:
检测项定义模块,用于创建可编辑的检测项文件列表,将需要的检测项整合于所述检测项文件列表中,随后保存所述检测项文件列表并发送至文件解析模块;
文件解析模块,用于在接收检测项定义模块中的检测项文件列表后通过对所述检测项文件列表进行解析获取所述检测项文件列表对应的参数配置数值并发送至界面生成模块;
界面生成模块,用于通过读取文件解析模块获取的参数配置数值,生成随机数检测系统的人机交互界面;
随机数检测模块,用于在输入单个或多个随机数文件后,根据界面生成模块生成的人机交互界面及界面生成模块读取的参数配置数值触发单线程检测或多线程检测,检测过程同步至界面生成模块,检测结果发送至报告输出模块;
报告输出模块,用于自随机数检测模块接收检测结果,生成检测结果文件。
作为本发明的一种改进,在所述随机数检测模块中,所述触发单线程检测或多线程检测的具体过程为:
S1:获取线程池中的检测线程数量n,以及待测随机数文件数量M;
S2:判断M是否等于1:
若M=1,则触发单线程检测;
若M>1,则触发多线程检测,并执行步骤S3的操作:
S3:比较n与M的大小:
若n≥M,则为M个随机数文件中的每一个文件,分配一个相对应的检测线程进行检测;
若n<M,则先为前n个随机数文件中的每一个文件,分配一个相对应的检测线程进行检测;并在前n个随机数文件检测完毕后,剩余随机数文件的数量为M’=M-n,将M’作为新的M返回至步骤S2,重新进入判断和比较步骤,直至n≥M。
作为本发明的一种改进,所述随机数检测模块包括检测功能配置模块,所述检测功能配置模块用于文件导入、删除文件、配置在线网格、开始检测以及下载检测报告。
作为本发明的一种改进,在所述检测功能配置模块中,所述文件导入包括离线导入方式和在线导入方式,两种方式均支持单文件单独推送或多文件批量推送,其中所述离线导入方式包括利用外接设备将所需随机数文件导入随机数检测模块,所述在线导入方式包括通过配置在线网络功能调取相对应的人机交互界面,根据需求对外广播本端的信息,由对端监听到所述信息后将所需随机数文件推送至本端,其中所述信息包括IP、端口、通信协议。
作为本发明的一种改进,在所述检测项定义模块中,检测项文件列表包含检测信息,所述检测信息包括检测项、是否检测、检测参数、样本数量、样本长度、样本检测次数、样本通过率α、样本通过数和保留字段。
作为本发明的一种改进,所述检测信息中的保留字段根据资源预留信息为检测项预留资源,所述资源预留信息包括:新增检测项、与新增检测项相对应的检测参数。
作为本发明的一种改进,所述界面生成模块包括检测项选择单元、样本操作单元、检测项结果对比单元。
作为本发明的一种改进,所述文件解析模块调用QT Xlsx模块实现对所述检测项文件列表的解析。
作为本发明的一种改进,本发明还提供一种支持多线程的随机数检测方法,用于上述支持多线程的随机数检测系统,所述支持多线程的随机数检测方法包括:首先在检测项定义模块中创建检测项文件列表并发送至文件解析模块,随后文件解析模块在接收到所述检测项文件列表后通过对所述检测项文件列表进行解析获取所述检测项文件列表对应的参数配置数值并发送至界面生成模块,由界面生成模块读取参数配置数值后生成人机交互界面,随机数检测模块在获取待测随机数文件后,根据界面生成模块生成的人机交互界面及界面生成模块读取的参数配置数值触发单线程检测或多线程检测,检测过程同步至界面生成模块,检测结果发送至报告输出模块,由报告输出模块生成检测结果文件。
本发明的有益效果为:
1、支持单文件或多文件、多格式、多方式(离线或在线)处理随机数数据流,为用户提供更高便利性,有效提高随机数检测的工作效率;
2、检测系统留有保留字段,使系统具备可扩展性,为检测项的变化预留资源;
3、检测过程同步至界面生成模块,用户可直观地观察检测过程,查看检测结果,实时监控检测数据。
附图说明
图1为支持多线程的随机数检测系统的结构示意图;
图2为随机数检测模块触发单线程检测或多线程检测的流程图;
图3为界面生成模块的示意图;
图4为支持多线程的随机数检测方法的流程图。
具体实施方式
下面结合附图和具体实施方式,进一步阐明本发明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。
本发明提供一种支持多线程的随机数检测系统及方法,该支持多线程的随机数检测系统可根据国家密码管理局颁发的任意版本《随机性检测规范》来配置随机数检测项,通过这些检测手段可测试由用作保密的随机数、伪随机数发生器的硬件以及软件产生的任意长度的二进制序列的随机性,且每个测试项都是针对被测序列的某一特性进行检测的。该支持多线程的随机数检测系统面向本领域的研发人员、测试人员、客户,提供自检服务,所述服务包括:支持国家密码管理局检测项的实时更新、支持多方式、多格式、多文件随机数源的输入、支持单文件、多文件的批量随机数检测。如图1所示,本发明采用Qt Company技术构建检测项定义模块、文件解析模块、界面生成模块、随机数检测模块和报告输出模块组成随机数检测系统。
在本发明的实施例中,检测项定义模块用于创建可编辑的检测项文件列表,将需要的检测项整合于所述检测项文件列表中,随后保存所述检测项文件列表并发送至文件解析模块。依据国家密码管理局最新出台的GM/T 0005-2021《随机性检测规范》,该规范提供了15种检测算法、定义了27种检测项,本发明将随机数检测项整理于可编辑文件列表之中,便于后期对检测项的扩展编辑。可编辑的检测项文件列表的示例具体如下,首先创建检测项文件列表,检测项文件列表包括下列字段:“检测项”:根据规范提供的检测项来检测随机数数据块的随机性;“是否检测”:本次检测该测试项是否需要测试;“检测参数”:作为随机数根据检测项检测时的输入值,其数量可以为零,可以为一,也可以是多个,若是多个检测参数则需用“;”分隔开各个检测参数;“样本数量”:待检测随机数样本被分块的数量;“样本长度”:待检测随机数样本的总长度;“样本检测次数”:可对单个检测样本进行单次或多次检测,用于观测同一样本重复检测是否结果不同;“样本通过率α”:根据规范规定的样本通过的所需比例;“样本通过数”:大于或等于“样本数量”的一定比例为通过,例如:GM/T0005-2021规定超过总数量的98.1%则为通过,否则为不通过,记录通过的样本数;“保留字段”:根据资源预留信息为检测项预留资源,所述资源预留信息包括:新增检测项、与新增检测项相对应的检测参数,为后续规范中检测项的扩展预留参数,若标准中检测项与相应参数发生变化,则可在此编辑文件行与列中配置新增检测项与参数,随后保存即可,参看下表1:
表1
检测项 |
是否检测 |
检测参数 |
样本数量 |
样本长度 |
样本检测次数 |
样本通过率α |
样本通过数 |
保留字段 |
扑克检测 |
是 |
4 |
1000 |
1000000 |
10 |
0.01 |
≥981 |
… |
扑克检测 |
是 |
8 |
1000 |
1000000 |
10 |
0.01 |
≥981 |
… |
保留字段 |
… |
|
|
|
|
|
|
|
在上表1中,可以看出列表中的每一行都代表一个检测项,若检测项相同而检测参数值不一样也属于独立的检测项。例如:两条检测项都为扑克检测,是否检测值配置“是”、检测参数配置值分别为m=4,m=8、样本数量配置值为1000、样本长度配置为1000000、样本检测次数配置为10、样本通过率配置为0.01、检测通过数配置为981,如上由于检测参数的不同,所述检测项需要被定义在不同的检测行里,标记为两条检测项。在本发明的实施例中,检测项包括单比特频数检测、扑克检测、自相关检测、离散傅里叶检测等。在本发明的实施例中,保留字段根据国家密码管理局颁发的《随机性检测规范》的更新为新增检测项预留资源。在本发明的实施例中,文件解析模块用于在接收检测项定义模块中的检测项文件列表后读取和解析检测项文件列表中的配置数值并发送至界面生成模块。首先随机数检测工具启动调用QtXlsx模块,通过检测项文件默认的相对路径获取文件,再按行遍历处理配置内容,表的第一行是配置内容的表头,其余行是表头对应的具体数据值,采用C或者C++语言来存储表头和对应的数值,具体有27个结构体,每一个结构体中有9个成员变量和9个成员变量值,成员变量不能以中文命名,必须以英文命名,如:QString、double等,成员变量值可以为数组、布尔、数字等。
在本发明的实施例中,界面生成模块用于通过读取文件解析模块获取的参数配置数值,生成随机数检测系统的人机交互界面,即生成随机数检测工具的Qt Company界面(下文简称QT界面)。图3为界面生成模块的示意图。所述QT生成界面包含检测项选择单元、样本操作单元、检测项结果对比单元,为方便用户的使用,支持用户利用控件的特性对生成的界面做二次修改;若未读取到配置值,以系统的初始值为准,同样地,用户也可对初始值进行配置。该工具的开发语言选择QT来声明如何生成对应的检测工具。在本发明的实施例中,检测项选择单元采用QCheckBox复选框生成选择控件,QLineEdit生成文本编辑控件,再通过循环渲染数据的方式读取配置数值中的检测项参数对应的数值设为控件名,若配置值中的“是否检测”为“是”则QCheckBox为选中状态,若为“否”则QCheckBox为不选中状态。样本参数值回显至文本编辑器内,若有多个参数则用“;”分隔开各个参数。在本发明的实施例中,样本操作单元采用QLable标签与QComboBox单选下拉框一一对应的方式,通过循环读取配置数值将“样本数量”、“样本长度”、“样本检测次数”名称设为QLable值,每一项的具体值以数组的方式设为QComboBox值。在本发明的实施例中,检测项结果对比单元采用QTableWidget表格控件生成,通过读取配置数值循环处理,将“检测项”、“样本通过数”对应的值设为QTableWidget表头内容中检测项名称值、最低通过次数值,除此表头中还有检测结果项,若未点击开始检测,值为初始值,即为待检测状态,若已执行,该值按GM/T 0005-2021《随机性检测规范》的规定,设每1000样本数据通过数达到98.1%(981次),将本测试项标记为“Pass”状态,否则标记为“Failed”状态。
在本发明的实施例中,随机数检测模块用于在输入单个或多个随机数文件后,根据界面生成模块生成的人机交互界面及界面生成模块读取的参数配置数值触发单线程检测或多线程检测,检测过程同步至界面生成模块,检测结果发送至报告输出模块;随机数检测模块的核心功能是需要支持多方式、多格式、多数量的随机数数据源的输入、文件导入功能、触发单文件或者多文件并发检测功能,为用户提供了更多的选择空间、同时也满足了在多场景下依旧能够保证检测的完整进行。具体如下:
在本发明的实施例中,随机数检测模块包括检测功能配置模块,支持文件导入、删除文件、配置在线网络、开始检测、下载检测报告功能,所述检测功能配置模块采用QT界面的QFileDialog、QPushButton产生以上功能。
在本发明的实施例中,离线导入方式是由用户事先将随机数文件存储在客户端的磁盘中,具体数据源可由用户存储于u盘再导入客户端,导入文件格式包含了txt、csv、excel、xlsl,用户可根据实际情况自行选择。用户通过文件导入功能调取getOpenFileName、getOpenFileNames方法选择待导入随机数文件,同时支持单文件和多文件批量导入,选中后QTableView待测框列表中,一行代表一件随机数测试样本,多行则代表批量测试。
在本发明的实施例中,在线导入方式是通过触发“配置在线网络”调取相应QT界面,按外部设备的要求部署要求随机数测试工具的对外广播本端ip、端口、通信协议,如:iP:192.168.72.11;端口:84;协议:UDP/TCP。最后,由外部设备监听该信息后推送随机数源至本测试工具,同上支持在线单文件和多文件的批量推送。
在本发明的实施例中,随机数检测通过“开始检测”功能触发检测线程,图2为随机数检测模块触发单线程检测或多线程检测的流程图,具体过程为:
S1:获取线程池中的检测线程数量n,以及待测随机数文件数量M;
S2:判断M是否等于1:
若M=1,则触发单线程检测;
若M>1,则触发多线程检测,并执行步骤S3的操作:
S3:比较n与M的大小:
若n≥M,则为M个随机数文件中的每一个文件,分配一个相对应的检测线程进行检测;
若n<M,则先为前n个随机数文件中的每一个文件,分配一个相对应的检测线程进行检测;并在前n个随机数文件检测完毕后,剩余随机数文件的数量为M’=M-n,将M’作为新的M返回至步骤S2,重新进入判断和比较步骤,进入循环处理状态,直至n≥M。使用上述方式循环处理直至全部处理结束。
在本发明的实施例中,检测过程同步至界面生成模块,用户可直观地观察随机数检测的进度。检测过程中每完成一个随机数块的检测时向界面生成模块中的检测项结果对比单元输出检测结果,用户可实时、直观地观察检测的结果。检测完成后,报告输出模块根据国家规定要求,提供符合标准的检测结果文件供用户自行下载。
以上是一种支持多线程的随机数检测系统的完整功能。本发明还提出用于上述随机数检测系统的一种支持多线程的随机数检测方法,图4为支持多线程的随机数检测方法的流程图。首先在检测项定义模块中创建检测项文件列表并发送至文件解析模块,随后文件解析模块在接收到所述检测项文件列表后通过对所述检测项文件列表进行解析获取所述检测项文件列表对应的参数配置数值并发送至界面生成模块,由界面生成模块读取参数配置数值后生成人机交互界面,随机数检测模块在获取待测随机数文件后,根据界面生成模块生成的人机交互界面及界面生成模块读取的参数配置数值触发单线程检测或多线程检测,检测过程同步至界面生成模块,检测结果发送至报告输出模块,由报告输出模块生成检测结果文件。
在本发明的实施例中,检测样本以离线导入128M的随机数文件为例:检测样品,离线导入128M的随机数文件,检测样本数量为1000,样本长度1000000bit,以扑克算法为例,调用公开算法库中扑克算法,传入扑克检测需要的参数m=4,执行前中会将样本长度分块处理,每一块1000bit(样本长度/检测样本数量)随机数,都需要依次进行检测且检测通过会在“结果对比界面”中累加记录直至检测完毕。将样本重复1000次检测,检测通过98.1%次,则该项扑克检测结果标记为“pass”,若不通过则标记为“Failed”。待全部检测完成后,可下载本次检测结果。
需要说明的是,以上内容仅仅说明了本发明的技术思想,不能以此限定本发明的保护范围,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰均落入本发明权利要求书的保护范围之内。