刘 成 ,罗 杰 ,臧今宇
(1.保密通信重点实验室,四川 成都 610041;2.新疆生产建设兵团公安局,新疆维吾尔自治区 乌鲁木齐 830011)
随着互联网技术的发展,越来越多的设备和应用接入互联网,特别是5G技术的日渐成熟,使万物互联[1]时代近在咫尺。互联网使信息传递更为便捷,为了解决随之而来的信息安全风险,密码学技术也得到了空前的发展和运用。
密码学技术与我们的生活息息相关,比如设置个人电脑登录密码能够保护我们的电脑数据安全;设置网站登录口令能够保护我们的网站数据安全;设置数据库访问密码能够保护数据库的数据安全等。同时,在现实生活中许多不法分子也利用密码学技术,传递犯罪信息并隐藏犯罪证据,从事违法犯罪勾当,给国家安全和社会稳定带来很大的威胁。
二战时期德军的Enigma密码机与其破解过程,已成为密码学中密码技术与密码破解技术相互较量的经典案例。密码学技术与密码破译技术就像一对孪生兄弟一样,在相互较量中伴随成长。现代密码技术建立在求解数学难题基础上,密码算法公开,经过了充分的验证,已很难从算法自身的漏洞出发进行破解。利用高性能计算对密文进行暴力破解[2]已成为密码破解的常规手段。
暴力破解需要强大的计算能力。通用计算机大致经历了以下发展过程:
(1)从单核到多核,再到众核
从1971年第一块微处理器4004在Intel公司诞生CPU的集成晶体管数和时钟频率逐年上升。随着时钟频率超过3GHz,单核处理器开始消耗过多的功率,单核处理器的发展遇到瓶颈。2005年AMD、Intel相继推出双核CPU,CPU的发展步入多核心时代。2018年10月,Intel发布的最新消费级处理器——第九代酷睿i9-9900K——已有8个核心,时钟频率最高可达5GHz。
不同于CPU作为通用处理器存在,GPU(Graphics Processing Unit,图形处理器)从一诞生起就专注于解决图形渲染问题,而图形处理所特有的并行化处理特性,使得GPU具备并行计算的潜质。本世纪初,可编程特性被引入GPU,GPGPU(GPU通用计算)时代到来,其中以NVIDIA公司推出的CUDA(Compute Unified Device Architecture,统一计算设备架构)为代表。由于一张GPGPU上往往集成了成百上千个计算核心,因此被称为众核处理器。比如NVIDIA公司最新发布的消费级显卡Geforce RTX 2080集成了2944个CUDA Cores。
(2)从同构到异构
CPU和GPU各有所长:CPU适合做通用计算,如逻辑性强的算法、业务管理、任务调度、人机交互等任务;GPU适合做并行计算,如图像处理、科学计算等大并发任务。大型的复杂计算往往需要同时使用CPU和GPU,在这种情况下CPU+GPU的异构计算机得到广泛应用。
(3)从单机到集群
单机受限于整机设计,计算能力到达一定水平后就很难提升,且后期难以升级。计算机集群[3]能够通过局域网或互联网将单机能力较差的计算节点组成一个系统,具有很强的可扩展性,能够较方便地获得较低成本的综合算力。
密码破解系统需要强大的算力,而异构集群系统能够提供性价比高、易扩展的算力。因此,基于异构集群系统构建密码破解系统便成了很自然的选择。当前密码破解系统多为单机版,硬件系统、软件系统的安装和使用都较为复杂,通过B/S架构向用户提供在线密码破解服务,可让用户省去机房建设和维护的成本以及软件的部署和安装成本。基于以上因素的考虑,研究并实现了一种基于异构集群的在线密码破解系统。
与一般的高性能计算集群相比,在线密码破解系统有其自身的特点,例如:
(1)破解算法属于计算密集型任务。
(2)每个破解算法具备多种破解模式。
(3)以Web方式提供在线破解能力。
为了满足以上需求,该系统应该有以下组成部分:
(1)GPGPU异构集群。
(2)并行计算编程框架。
(3)集群作业管理系统。
(4)Web管理服务。
(5)计算节点的任务执行程序。
线密码破解系统的系统组成见图1。
图1 在线密码破解系统组成图
GPGPU异构集群为满足密码破解系统的需求,应具有以下特点:
(1)1个管理节点+N个计算节点
管理节点负责集群状态监控和作业管理。计算节点负责执行来自管理节点的任务分片。管理节点将任务分解为任务分片队列,以实现多个计算节点的并行计算。
(2)计算资源可扩展、可替换
通过增加计算节点上的GPU卡,或在集群系统中增加计算节点,快速增加计算资源。当发现计算节点异常后,也可通过快速更换计算节点保障破解任务的正常运行。
图2是计算机集群系统的网络拓扑图。
图2 计算机集群系统网络拓扑图
为使用GPGPU进行高性能计算,应使用相应的并行计算编程框架[4]。包括NVIDIA提出的CUDA编程框架,AMD提出的Brook++编程环境,OpenCL联盟提出的OpenCL并行编程模型。其中CUDA和OpenCL使用更为广泛。
CUDA是NVIDIA公司推出的一种并行计算架构,它是一种高级编程语言,开发者能够很快上手,所编写出的程序可以在NVIDIA GPU上高速运行。
CUDA架构只支持NVIDIA公司的产品,而OpenCL并行编程框架则支持多核CPU、GPU、FPGA、多核DSP系统等多种并行计算架构。
由于本系统GPU全部为NVIDIA系列,考虑到CUDA编程语言更容易,且在NVIDIA显卡上运行效率更高,本系统采用CUDA并行编程框架。
为了使计算机集群的计算资源得到充分利用,需根据计算机节点情况和任务的资源需求情况对任务进行合理调度。目前有十几种不同的作业管理系统[5],其中LSF、LOADLEVELER、PBS、CONDOR是当今最具代表性和影响力的几种集群作业管理系统。其中PBS、CONDOR是研究性质的软件,LSF、LOADLEVELER是商用软件,它们的主要功能为集群系统监控和作业调度等。表1是几种作业管理系统的比较。
表1 作业系统比较
其中PBS和LSF综合比分最高。LSF被公认为是市场上最成功的集群作业管理系统,在功能和可用性上有较强的优势;PBS为开源项目,可根据项目自身特点对其进行定制化开发,其成本和可定制化更有优势。综合考虑,本系统使用PBS进行密码破解集群作业管理。
WEB管理服务是集群作业管理系统与用户间的人机交互接口,主要提供集群任务管理、资源管理、日志报表、集群监控、系统设置等功能。
(1)任务管理
任务管理提供任务管理、任务查询功能。其中,任务管理功能包含新建任务、任务状态管理等;任务查询可对历史任务进行多条件联合检索。
(2)资源管理
资源管理是为任务提交提供基础数据的功能模块。包括彩虹表管理,字典管理,算法管理等功能。
(3)日志报表
日志报表功能包括报表管理,操作日志,访问日志等功能。
(4)集群监控功能
集群监控功能包括硬件资源监控、警报系统等功能。硬件资源监控可查看系统中CPU、GPU、内存、存储以及网络的使用情况;警报系统提供了当系统资源使用过高时告警功能。
(5)系统设置功能
系统设置功能包括系统设置以及用户设置功能。系统设置提供了为集群配置、在线升级等功能;用户设置提供了用户管理和权限管理的功能。
密码破解任务最终会下发到各个计算节点,由计算节点的任务执行程序执行。任务执行程序包含代理程序和密码破解程序两个部分。以下是任务执行程序具有的功能:
(1)因为PBS未能提供对GPU的状态监控能力,可通过代理程序将GPU状态信息实时传送给WEB管理服务。
(2)因为PBS可将任务分片调度到计算节点,而不能直接调度到计算节点上的GPU计算单元(一般有多个GPU计算单元),可通过代理程序将任务分片进一步分解,交给多个GPU计算单元并行处理。
(3)为了实现破解算法的可扩展性,可将破解算法设计成单个可执行程序的形式,交由代理程序调用。
基于第1节的需求分析,搭建了一套GPU集群,其配置如表2所示。
表2 集群系统配置
计算节点和管理节点通过交换机连接,形成一个高速局域网。利用NFS(Network File System,网络文件系统)将管理节点上的字典文件、彩虹表文件、计算节点可执行程序(计算节点代理程序、密码破解程序)共享给8个计算节点使用。
PBS系统由Server(服务进程)、Scheduler(调度进程)和Mom(执行进程)组成,Server和Scheduler位于管理节点用于任务调度控制,Mom位于计算节点用于任务执行。PBS系统的工作流程如下:
(1)由用户发起破解任务分片执行事件,Server开始一个调度周期。
(2)Server向Scheduler发送一个调度命令。(3)Scheduler向Mom请求可用资源信息。(4)Mom返回给Scheduler一个资源信息。(5)Scheduler得到资源信息后,向Server请求作业信息。
(6)Server收到请求后,将作业信息发给Scheduler,Scheduler根据作业信息和调度策略产生执行作业的策略。
(7)Scheduler发送执行作业请求至Server。(8)Server接收请求后,发送作业至Mom执行作业。
(9)Mom收到执行命令后将任务交给计算节点执行程序执行。(10)计算节点执行程序将结果反馈给Mom。(11)Mom将执行结果反馈给Server,完成一个调度周期。
WEB管理服务提供作业调度功能,其工作流程如下:
(1)用户通过Web界面创建密码破解任务,提交后存入任务数据库中。
(2)对任务进行分割,分割后的任务分片放入任务分片队列中。
(3)任务分片队列周期性读取任务分片并将任务分片提交给计算节点执行,直到任务分片队列执行完成。
在破解任务执行过程中,计算节点将执行进度、破解速度、执行结果等数据及时反馈给管理节点,管理节点及时更新任务分片队列。
在计算节点执行任务分片的同时,管理节点会实时监控任务分片的执行情况和计算节点的工作状态,如发现异常,将修改任务分片状态,在下一次任务分片轮询过程中重新执行。
位于计算节点上的密码破解任务执行程序由计算节点代理程序和密码破解程序组成。其中代理程序对管理节点的任务调度指令进行监听和解析,调用相应密码破解算法,在密码破解过程中将任务信息以及GPU硬件的状态信息及时反馈给管理节点。
用户通过浏览器登录密码破解Web管理服务后,打开新建任务窗口,按照提示设置密码破解任务所需的属性、计算资源、破解任务所需文件、破解模式、任务空间等,点击提交后完成密码破解任务的创建,如图3所示。
密码破解任务创建成功后,将在任务列表中显示任务信息,包括任务当前状态、任务属性、速度、进度等,如图4所示。
以2.1节集群为例,分别使用其中的纯CPU作为计算集群和GPU作为计算集群,对几个常用密码破解算法的性能做出比较,见表3。
图3 密码破解任务提交界面
图4 密码破解任务列表界面
表3 密码破解算法速度比较
针对密码破解系统的现状和需求,提出了基于异构集群系统的在线密码破解系统的解决方案。该方案通过B/S架构向用户提供在线密码破解能力,让用户省去机房建设和维护成本以及软件的部署和安装成本;通过构建异构集群系统,以及异构集群系统上的软件系统——集群作业管理系统和计算节点执行程序——实现了对异构集群系统计算资源(特别是GPU计算资源)的高效利用,实现了密码破解任务150倍提速。后期还可通过扩大集群系统规模,通过进一步挖掘计算节点CPU的计算资源等手段为密码破解任务提速。