谢一丹,裴焕斗
(1.中北大学仪器与电子学院,山西 太原 030051;2.百信信息技术有限公司,山西太原 030006)
当今世界,一套高效率的项目管理系统对企业的发展与壮大有着至关重要的作用[1]。但IT 企业的项目独特性强、知识创新性大,且对于项目最终目标需要检查的内容量化标准不统一,项目进度难以把控。随着IT 技术突飞猛进的发展和需要,越来越多的项目管理平台出现在人们的视野,例如当前国内外比较流行的禅道、Welcome OpenPlan、Microsoft Project 等[2]。这些项目管理工具集成了代码和文档管理等功能,但并不支持项目进度管理、项目任务管理等业务。并且长期以来,我国一直采用国外制定的安全协议和加密算法,这给我国关键系统的安全、自主、可控造成很大的隐患,而密码算法在保障数据传输和存储过程中的安全、可信起到了关键作用[3]。基于以上背景,设计了一种集成国密SM3 算法的项目全生命周期管理系统。
整套系统设计采用全生命周期项目管理方法,从宏观的视角充分整合项目上下游所涉及的所有信息[4]。系统设计中,首先统计需要参与产品项目的部门,并对这些部门配置其特有的工作流和审批流。其次在规划好体系流程后开展项目任务,如文档任务、开发任务、测试任务,同时将测试阶段出现的问题反馈给开发人员解决。并且将人员信息及项目阶段产出的文档信息进行安全加密处理,形成完整的业务流程。基于此设计思路,将系统划分为安全管理、系统管理、产品管理、质量管理、资源管理和团队管理等多个模块,建立起一套标准化项目流程体系。
系统架构模式为前后端分离。前端使用Vue.js框架,通过Visual Studio Code 软件进行编码。系统使用Vuex 状态管理模式,采用axios 进行网络请求和响应数据以及使用Bootstrap 框架构建响应式页面与CSS 模块化。其次为了使界面更加美观,提升用户体验,系统引入了两个开源的组件库:Echarts 和Element。Echarts 可以帮助开发出美观的报表界面,通过使用Element 组件库来提高系统的开发效率。
系统后端使用Pycharm 软件进行开发,Web 的后端使用Python 中的Django 框架[5]。Django 自带了大量常用工具及框架,还集成了ORM、缓存、session、模型引擎及绑定等功能模块[6-7],便于后端开发。系统使用MySQL 数据库作为主要数据库用来存储数据,把Redis 缓存技术作为项目的缓存设置[8]。其次,Celery 可与Redis 数据库配合使用,对项目中上传文档等耗时操作任务进行处理,同时应用分布式队列将软件中各个模块解耦,保证了系统的伸缩性[9]。中间连接部分通过Nginx[10]实现负载均衡,转发到uWSGI 服务器,然后调用Django 业务代码。系统采用了uWSGI+Django 组合使用的方式来支持更多的并发量[11],从而发挥服务器的性能优势。图1 为系统的整体框架图。
系统功能模块的具体工作流程根据某企业项目管理机制构建。各功能模块通过安全管理模块校验后可直接对非加密处理对象进行增、删、改、查询等操作。系统的主要模块包括:
1)安全管理
安全管理模块是将验证信息经过SM3 算法加密后获得的杂凑值,与数据库中预先存储的杂凑值进行比对,比对成功后允许进入系统或进行相关操作。安全管理模块与各个功能模块相连,为系统项目数据的安全提供保障。
2)系统管理
系统管理分为用户管理、菜单管理、角色管理和岗位管理。其中岗位管理与角色管理为多对一的关系。系统通过为角色分配权限从而固定岗位权限。并且系统通过维护菜单管理模块就可以实现分配操作权限。对于管理多种岗位且具有相同权限的用户,采用这种设计模式更加便捷高效。系统管理框图如图2 所示。
3)产品管理
产品管理模块包括体系管理、项目管理、任务管理及变更管理。该模块主要负责产品项目的建立、项目计划的制定、项目里程碑的设置和项目任务的变更处理。同时系统可以统计任务完成情况,最终自动生成甘特图,实时了解项目进度。
对于产品管理中体系管理的划分,通过与WBS(Work Breakdown Structure)分解结构理论相结合,将项目可交付物分解成工作包,使项目体系的流程更加清晰。产品管理功能体系如图3 所示。
4)质量管理
质量是企业的根本,质量管理模块对项目质量进行把关监控,与产品管理模块相辅相成。一方面对工作流程中产出的各种文档进行校验,另一方面通过测试管理功能对各模块进行测试,对存在的问题及时反馈。同时在产品交付后收集反馈信息,根据意见优化产品项目,形成闭环。
5)资源管理
资源管理模块是整个项目阶段信息的集合。为了规范整个项目文档输出的流程,在资源管理模块提供不同文档的模板。资源管理模块通过使用工具包Python-docx 实现自动签署来提高文档传输效率,通过导入PyPDF2 中的Python-PdfFileReader、Python-PdfFileWriter 两个包可以实现pdf 添加水印功能,防止数据被非法窃取及篡改,保证了数据安全。主要代码为:
6)团队管理
团队是构建整个项目的核心,团队管理模块与产品管理模块相关联。在产品管理模块中,需要进行团队选择。利用团队管理可以实现组建团队、查询团队、删除团队的功能,方便在项目建立后为项目的开发配备最优的团队。
安全管理模块选择使用的SM3 算法是我国自主设计的密码算法,其本质上是一种哈希算法[12]。SM3的压缩函数与SHA-256 的压缩函数结构相似,但SM3 算法比Django 自带的SHA-256 算法设计更加复杂,在安全性和效率上也更高[13]。且SM3 算法计算的哈希值中各个位之间的关联性更强[14]。SM3 算法与传统的SHA-256 加密算法的对比如表1 所示。
表1 SHA-256与SM3算法对比图
SM3 算法采用Python 语言编写,SM3 算法主要包括数据填充、数据扩展和迭代压缩三个过程。分别对应于代码中的SM3_fill 函数、SM3_data_extend函数和SM3_compress 函数。其中rotation_left 函数为自行编写的左移函数。
1)填充过程
首先在长度为A 的消息末尾添加1 个“1”和B 个“0”[15],A 和B 需要满足等式A+1+B=448mod512,其中B 为最小非负整数。SM3_fill函数主要代码为:
2)迭代压缩
将第一步填充后的消息按照512 bit 进行分组。CF 是压缩函数,V(0)为固定的初始值[16]。
将填充后的消息进行迭代:
fori=0 ton-1
V(i+1)=CF(V(i),B(i))
endfor
3)消息扩展
该过程是将16 个字的消息分组B(i)扩展生成132个字。B2个字分别为W0-W67及。具体扩展步骤如下:
W0-W15:将B(i)平均划分为16个字W0-W15。
W16-W67:←Wj
针对以上步骤,扩展函数的主要代码为:
4)压缩函数
A-H 通过中间变量或直接相互关联,最终的256 bit杂凑值为:
根据A-H 具体的计算过程编写的压缩函数SM3_compress 的主要代码为:
采用SM3 国密算法对用户的账户密码、人员关键信息以及项目文档中的关键字段进行加密处理,保证了系统的安全可信。系统需加密的信息如表2所示。
表2 加密信息列表
系统对密码等数据库中的敏感数据采用SM3 算法加密处理,且该过程不可逆。图4 是以数据abc 为例经过SM3 算法数据完整性校验示意图。
数据abc 加密过程中的132 位扩展字为w1、w2,分别为:
进入系统后在首页通过看板展示各产品、项目及任务状态,页面布局合理,操作流程简单。登录首页页面如图5 所示。
系统采用列表形式的WBS,类似于书籍类的分级目录,具有直观的缩进格式。通过对项目体系中模板的配置,可以建立灵活多样的流程体系,为项目阶段任务的管理、项目流程的开展提供便利。项目体系配置管理页面如图6 所示。
系统为B/S 架构,故选取常用场景下的操作系统与浏览器进行兼容性测试,测试结果如表3 所示。响应时间均在5 s 之内,符合企业预设需求。
表3 兼容性测试结果
利用当前国密算法,设计了一种安全可信的项目全生命周期管理系统,详细介绍了系统框架组成、各功能模块、SM3 算法设计及主要代码。经测试,该设计可以保障系统及项目执行过程中信息的安全,同时可以对IT 企业项目的全生命周期的各个环节实现标准化、流程化管理,把控项目进度。整体上提高了传统项目管理的效率,为企业内部各项工作的完成提出了一种安全、高效、低成本的解决方案。
未来将继续深入优化项目管理的各子功能模块、建立功能更加健全的项目全生命周期管理系统。