煤矿安全监控系统数据加密存储方案设计
2023-10-26卢向明
张 翼 ,于 林 ,卢向明
(1.中煤科工集团重庆研究院有限公司,重庆 400039;2.瓦斯灾害应急信息技术国家重点实验室,重庆 400039)
煤矿安全监控系统(以下简称系统)用于煤矿井下环境及相关设备状态的实时监测与控制,在煤矿安全生产中起着至关重要的作用[1]。然而“生产”与“安全”的矛盾长期存在,部分煤矿企业为了追求煤炭产量,罔顾安全,采用各种手断干扰系统的正常运行,并对监测到的报警数据(如瓦斯、一氧化碳等超限报警数据)进行篡改或删除,妄图逃避上级监管部门的监察。
煤矿监管监察部门在一些煤矿事故调查中逐渐意识到煤矿企业通过修改数据来逃避监管监察的问题,先后在煤安监函〔2016〕5 号《煤矿安全监控系统升级改造技术方案》[2](以下简称5 号文)和AQ 6201—2019《煤矿安全监控系统通用技术要求》[3](以下简称AQ6201)中对系统数据加密与防篡改进行了具体的规定,各系统厂家也针对性地设计了加密方案进行应对。
至2018 年煤矿安全监控系统升级改造全面推广以来,煤矿企业对具有数据加密功能的系统逐渐熟悉,少数企业为了追求利益,仍然游走在灰色边缘,在日常的系统维护中,有意识地去探寻数据的加密方法,试图通过破解加密方法来达到篡改或删除报警数据的目的。由于煤矿用户具有数据管理的最高权限(煤矿企业作为系统相关资产的所有者,在系统验收时建设厂家会向其移交如操作系统、数据库等的最高权限),使其在获取数据样本、跟踪数据库查询SQL 语句、直接修改与删除数据等操作上具有较高的便捷性,致使数据防篡改难度增大。如何通过分析加密与破解现状,制定一套在查询效率、存储空间占用、可维护性等方面取得平衡点的数据加密与防篡改方案是煤矿安全监控系统健壮与安全性研究的方向之一。
1 加密与破解现状
上级监管监察部门对煤矿企业进行巡察时,多使用系统本身的软件对监测监控数据进行查询,以了解煤矿超限和对应处置情况。系统软件查询功能对应的数据源绝大部分为关系型数据库(煤矿企业使用MS SQL Server 数据库较为普遍),因此系统数据加密与破解的对抗主要焦灼于关系数据库之中[4-6]。
1.1 常见的加密方案
“5 号文”中推荐的加密算法有MD5、RSA,但由于MD5 为不可逆加密算法,且一般只做为加密检验,无法用做数据加密。而对于RAS 加密算法而言,由于2006 版和2019 版的“AQ 6201”都对“画面响应时间”有具体的要求[3],加之监控系统升级改造后网络拓扑结构的升级[7],以及系统巡检周期要求的提高,系统数据量急增,但该算法确存在效率低、加密较少数据会带来数十倍数据量增长等问题,因此在实际的应用中,特别是数据库数据少有选择此加密算法的方案。
通过分析存储于数据库中的数据特点可知,适用于数据库数据的加密算法应具有效率高、存储空间增长小等特点,因此业内普遍使用同态加密、二进制序列化、数据映射、类型转换等加密算法[4]。而对于文件数据则选择性较多,可直接遵循“5 号文”的建议,采用RSA 加密算法[2]。
1.2 常见的数据篡改手段
数据篡改的最终目的是让软件无法查询出报警记录,且从软件界面上无法看出篡改痕迹。目前除技术性破解以外(针对性开发数据破解与篡改软件),较常见的人工破解数据库数据的方法有置换法和删除法。而对于文件数据更多地采用直接删除的方法进行暴力处理(文件数据通常用于数据备份,删除后查询功能影响较小,不易被察觉)。
置换法是指使用正常数据密文(如监测值)替换报警数据密文的破解方法。例如1 条甲烷超限的数据,其监测值为“1.2”,加密后的数据密文为“x1”。当需要将该值修改为1 个正常值时,篡改人员无需破解加密算法本身,只需找到1 个正常值的密文“x2”,直接替换“x1”即可。由于数据库中绝大多数的数据都是正常的,因此随意复制1个密文数据进行替换大概率能达到目的。
删除法是一种较为粗暴的数据篡改方法,找到不期望展示到界面的数据删除即可。在系统数据库结构设计时,一般会将不同主题的数据存放到不同的表中,这为删除数据带来了一定的便利。用户在进入数据库表后,通过一些方法尝试定位到需要删除的数据,然后直接删除即可。
2 数据加密存储架构
煤矿安全监控系统数据的加密存储方案既要考虑加密解密算法本身的特点(破解难度、效率、加密后数据量增加等),还有考虑加密后数据查询效率和被篡改后的恢复问题。因此加密存储方案不是加密算法选择的问题,而是要考虑多方因素,并在各因素间取得平衡的综合性存储方案。
通过分析可知,系统数据及篡改行为具有可能被篡改的数据占比极小、不能大面积破坏数据的特点。结合加密解密现状,方案应具备如下主要能力:①能够管理数据库的密码,阻断篡改人员进入数据库的路径;②能够有效防止“置换法”的篡改手段;③尽可能地干扰篡改者对于报警数据的定位,从而避免数据被删除;④能在数据查询时对数据进行验证,发现问题及时提醒;⑤具有数据冗余备份能力,能够在关键数据被破坏时尽可能地恢复。针对上述内容,结合系统数据生产与消费的情况,设计出数据加密存储方案,数据加密存储总体架构如图1。
图1 数据加密存储总体架构Fig.1 Overall architecture of data encryption storage
方案在业务层之下设计了“统一数据访问服务”用于支撑上层业务应用的数据读写请求,以实现数据加密解密的“透明化”处理,在降低上层应用复杂度的同时,降低算法暴露的风险。
在数据加密存储方面,方案以“关系数据库+备份文件”的模式存储数据。日常查询时使用关系数据库中的数据,当关系数据库中数据被破坏时可使备份文件进行恢复。
3 关系数据库加密存储
虽然系统使用关系数据库存储数据的方式与数据库在其他行业的应用相似,但其数据加密所防范的对象和数据库运维管理模式确有着较大的区别,以往的一些数据库加密的方法在此背景下也仅具有一定的借鉴意义,无法直接使用。
3.1 可搜索数据混淆
数据混淆的目的在于尽可能地避免数据被定位,从而防止数据被删除。在关系数据库中要删除数据,首先必须能够定位数据,由于需要防范删除的报警数据的比重极小(占比小于万分之一),而系统具有实时数据、报警数据、分钟统计数据、运行记录数据、状态变化数据及其他配置管理数据[8],将报警数据混入分钟统计、运行记录等正常数据中可起到较好的混淆效果。然而报警数据特征较为明显,要达到良好的混淆效果,需着力于如下几点:①统计各类数据的数量,尽可能在保证查询效率的前提下,做好分表设计并降低单数据库表中报警数据的占比;②数据标识与时间是识别数据的关键,必须进行混淆处理;③统一所有表的结构,并对表名进行混淆,降低数据识别度。
为了提高查询效率,混淆后的数据必须是可搜索的,即“可搜索数据混淆”[9]。数据库表中的数据标识(如监测点Id 等)与时间数据通常会用于创建索引,因此在进行混淆时,一般不能改变其某种“相对”关系。对于时间来而言,查询时一般需要进行大小比较,因此其“相对”关系为大小关系,即混淆算法不改变时间序列原本的大小排序,可将时间转换为数字后进行二次映射。数据标识一般为1 个数字,通常在查询时进行“相等”运算,因此其“相对”关系为混淆后值“固定”即可,此“固定”可以是1 个固定的数值,也可以是1 个固定的区间(作为主键时一般不能混淆为区间)。
3.2 数据加密
由于数据混淆的需要,在存储结构中除索引和校验字段以外的所有数据都将合并到1 个数据字段中存储,这本身即是一种数据混淆的手段,也为加密算法提供了更多的选择,在选择时只需考虑加密效率高的算法即可[10]。由于一些强度相对较高的算法,其效率相对较低(如DES 万次解密需1.231 s,RSA 万次解密需13.854 s)[4],因此在实际应用时,可选择已有的算法,也可根据一些常用的加密算法原理自行设计算法。
3.3 数据校验
数据校验是识别数据是否被“置换”的重要手段。在使用“置换法”篡改数据时,通常是将正常数据中的部分内容“移花接木”到报警数据中。基于此方法篡改的数据仍可正常解密,因此数据必须进行校验。
数据的校验,在通信领域应用广泛,其本质是存储时通过一种不可逆算法生成数据唯一标识,校验时重新生成该标识并进行对比。常用的数据校验的方法有累加和、CRC 等[11],在实际应用时可选择一些成熟高效的算法进行,也可以自行设计。为提高效率和节省存储空间,本方案采用“变异”累加和方式进行(“变异”的方式可自行设计),该方式在具有数据校验能力的基础上有一定的加密能力,可进一步提高数据加密坚固程度。基于“变异”累加和的校验数据方法如图2。
图2 基于“变异”累加和的校验数据方法Fig.2 Verification data method based on“variation” cumulative sum
图2 “循环移位+异或”的“变异”累加和校验数据计算方法中,“异或系数”与“循环移位n”可在系统初始化时随机生成,并高强度加密(如采用RAS 加密)后保存到数据库中;在进行数据校验时,只需再次调用此方法生成校验数据,与实际存储的校验数据比对即可判断数据是否被篡改。
3.4 用户管理外壳
如果数据篡改者掌握的数据库权限过高,且具有较强的SQL 语句分析能力,使用关系数据库事件分析工具(如SQL Server Profiler)跟踪并分析执行的SQL 语句,仍可实现数据的定位,从而进行数据删除。因此数据库权限的控制仍是防范关系数据库中数据被篡改的关键之一。
对于数据库访问用户的管理,业内有一些研究,例如动态生成口令方法[12]。本方案提出的用户管理外壳是指在关系数据库系统(软件)安全机制之上进行的用户与密码统一管理。此外壳接管所有需要人参与的用户、密码和权限分配,所有人员均不知晓较高权限的用户名和密码,可有效防止使用较高权限的用户进入数据库系统篡改数据。用户管理与使用流程如图3。
图3 用户管理与使用流程Fig.3 User management and usage process
如图3,在系统进行初始化时向系统提供最高权限的用户,此时系统将随机创建1 个用户Ux(用户名、密码均随机)并将此用户加密保存到数据库中。之后使用Ux 登录数据库系统,创建系统内置的固定不变的低权限用户U0,并将除Ux、U0 以外的所有用户全部删除。初始化之后,所有数据库的用户将完全由用户管理外壳程序接管。U0 用户主要用在程序启动时检索数据库中用户表密文数据。固定不变是为了防止密码丢失后无法进入数据库系统。
在系统使用与维护期间,确需使用高权限用户进入数据库系统时,用户管理外壳可按需创建临时的用户(新建的用户权限有限,不能进行用户创建、数据修改等操作),过期自动删除,且在此期间做好日志记录。
4 备份文件加密存储与数据恢复
备份文件加密存储是基于关系数据库加密存储的“双保险”,当数据库中的数据被篡改时可通过此加密的备份文件恢复。由于系统数据量大,在备份时可选择有价值的数据,有条件的可全部存储,存储时也可选择SQLite 等文件型数据库[13]。文件加密存储相对简单(如图1),可每小时保存1个文件,并定时进行加密转存。由于加密的文件直接保存在计算机硬盘上时无法防止被删除,因此可选择NAS 存储设备配套使用。未加密的文件可使用“统一数据访问服务”独占的形式锁定,防止文件被实时修改。
鉴于文件数据的应用场景,文件加密、解密对效率的要求不高(相对于数据库),可选加密算法较多,可直接采用“5 号文”推荐的RSA 算法[2]。
数据恢复方面,当查询数据时数据校验无法通过,或是怀疑数据被删除时,均可将加密的数据备份文件读出进行比对和恢复。
5 结 语
1)针对当前常见的数据篡改手段,接合数据查询需求,煤矿安全监控系统数据加密存储需要从数据访问接口、数据加密与混淆存储、数据校验、数据访问入口保护以及数据恢复等多方面考虑,形成系统性的数据加密存储方案。
2)数据库一直是数据防篡改的主战场。可使用数据加密算法与校验防止修改;使用可搜索数据混淆技术防止数据被定位后删除;使用用户管理外壳防止高权限用户进入数据库;通过以上3点可实现防止非法进入数据库、非法进入后数据被定位以及数据被定位后篡改等多重防护。
3)当企图篡改数据的人员具有系统的最高权限时,无法绝对地防止数据被删除。因此数据的备份存储非常必要,特别是使用只有上级监管部门才有限权删除数据的NAS 存储设备进行备份,可在数据被破坏时从中恢复关键数据。