APP下载

一种基于安全散列加密算法的数据库操作痕迹可证明追踪算法

2023-01-16林加华李志虹

现代计算机 2022年22期
关键词:管理方元组证明

林加华,李志虹,姜 华

(楚雄师范学院数学与计算机科学学院,楚雄 675000)

0 引言

随着数据库技术越来越广泛地使用,数据库中存储管理的数据量呈现几何式增长,其中不乏大量敏感数据。保护数据库存储的重要敏感数据安全是数据库系统的重要职责之一,这类安全问题是指数据库中敏感数据被多个合法用户查询获取,在使用过程中发生泄密事故或恶意篡改,数据管理方需要以可信证明方式追踪哪些用户曾访问数据以及这些用户的访问顺序和操作类型等,用于辅助划定或区分相关事故责任。

虽然目前大多数数据库管理系统(DBMS)都提供了系统安全日志监控用户对数据库访问行为的功能,在生产场景中,数据库管理员(DBA)可以通过日志功能详细记录用户对数据库的操作过程,以帮助管理员分析数据状态演进全过程,但是从该业务实际操作层面来看,它完全能重现数据状态变化演进过程,分析出是谁于何时对数据进行了与当前事故有关的关键操作。然而由于日志文件仅是以文本方式记录信息,存在被篡改的可能,致使安全日志的呈现不具备坚实的证明力,自然也无法成为责任划定或区分的关键证据[1-2]。安全日志监控功能仅以文本方式,即明文方式,记录相关操作行为信息的特点使其不具备坚实的证明力或证明力很弱,一旦发生争执,被怀疑方可能提出一些难以证伪的“合理观点”,认为数据管理方或协同第三方修改了某些关键数据,进而否认自己的数据访问行为来逃避责任追查认定[3-4]。

1 算法原理

本文提出一种以安全散列算法(SHA)为基础,采用迭代加密和数据冗余技术动态记录用户对特定元组数据进行访问行为的算法。算法设计思想是在数据库关系设计时增加必要的数据列(冗余数据),存储访问行为的记录数据的散列值(即消息摘要),该散列值在每一次访问时都是根据原散列值连接当前访问数据重新计算得到,是迭加计算的结果。由安全散列算法SHA 的单向性与抗碰撞性特点及本算法设计逻辑,数据管理方可重现原所有用户访问数据行为系列计算出与当前(事故发生或证明追踪时)相同的散列值,保证对多用户访问数据行为的证明追踪过程,它具有不可否认和防恶意陷害特征。具体冗余数据构建方法是数据库关系设计时增加额外的属性列“散列值R”和“证明指引G”等属性列。“散列值R”用途是在用户对元组数据进行访问时,把对数据操作行为数据以安全散列加密形式记录到“散列值R”中。另外,“证明指引G”属性列为文本形式(非加密形式)累进记录访问行为。它是非必要关键数据,其存在可以提高证明追踪效率;如果该数据丢失或被篡改,依然可以通过穷举方式最终完成证明追踪过程,只是需要花费更多时间。

当然,在发生数据泄密或恶意篡改事故后,事故责任证明追查时,用户是否曾访问数据,用户的访问顺序以及操作类型,在责任划定或区分方面可以成为重要参考依据,甚至是关键证据。然而由于事故责任认定是一个非常复杂的过程,本文主要是从技术层面确认用户是否访问数据以及用户的访问顺序和操作类型,以辅助事故责任认定或区分责任大小和性质。

1.1 安全散列算法SHA

安全散列算法(SHA)是一种常用的数据加密算法,用途广泛;其主要思想是接收一段明文,将其转换成一段更小(通常是160 bits)的密文数据,该密文数据即由安全散列函数计算得到的散列值,也称消息摘要。目前主要广泛采用的是其改进版本SHA-1。它有两个重要特点,即单向性和抗碰撞性。单向性是指由原始信息计算出消息摘要很容易,而由消息摘要逆向计算出原始信息则是困难的,几乎无法有效完成。抗碰撞性是指要找到两个不同的原始信息计算出相同的消息摘要是困难的,即使只修改原始信息中1字节数据,其消息摘要也会产生巨大的变化[5]。在安全散列算法中发生数据碰撞成功的概率是极低的,而本文所提出算法中需要计算的合法原始信息(即算法输入数据)是有限数据集合,这将进一步降低发生数据碰撞成功的概率,从而极大地保证了本算法的证明力,使得对用户访问数据行为的证明追踪过程是可信和无法辩解的。

1.2 算法前置条件

1.2.1 访问码和访问码散列值

数据库合法用户是指针对某特定数据库对象具有进行某特定访问权限的用户,简称用户,记为Ui。另外,本文中的特定数据库对象主要是指数据库关系中的元组(数据)。算法约定:用户Ui在对特定数据库对象进行权限内访问前,需要向系统申报自己的用户访问码,简称访问码,记为UiA。它是由字母、数字、“_”等符号组合而成,长度不低于8位的字符串。访问码散列值是系统根据用户申报的用户访问码通过安全散列算法SHA1 加密得到的散列值,长度为160 bits。用户完成申报后,系统中仅记录用户代码和访问码散列值的对应关系,而不保存用户访问码,并且记录前述两项数据的关系仅允许数据库管理系统超级管理员拥有访问权限。特别说明,用户访问码是合法用户的私有信息,应妥善保管,避免其他用户知晓(包括系统超级管理员)。

1.2.2 元组散列值R和证明指引G

所谓元组散列值R,是指根据原有散列值和访问行为记录数据,通过安全散列算法SHA-1,迭代累进式计算得到的160 bits 数值,简称散列值R或R值。证明指引G是累进式连接访问操作用户代码和操作类型的字符串系列,其目的在于加快证明过程。证明指引G 值属公共信息,任何用户无法通过该信息伪造特定的元组散列值R;该值即使被破坏,只能使证明过程时间更长,不能影响证明结果。在数据库关系结构设计中,除了正常用于存储所需数据的属性列,还需要在关系模式中增加冗余属性列“元组散列值R”和“证明指引G”属性列。关系模式设计示例,如表1所示。

表1 关系模式设计示例(某系统销售数据关系)

注:上述销售数据关系模式设计示例中属性列“原单价”不应该出现在此关系模式中,它应作为商品关系模式中的属性,此处举例仅为集中显示效果而设定。

1.3 算法设计

假设数据库中存在某关系,它拥有数据元组T1,T2,T3,…,Tn;存在用户代码U1,U2,…,Um。用户k 访问数元组Ti,记为AC(Ti,Uk,w),其中w=1代表数据查询;w=2代表数据更新操作。证明追踪过程,即根据证明指引G 的路径(原多用户访问行为系列)重新计算元组散列值的过程,简记为AC_UK;当该散列值与用户访问计算所得元组散列值相等时,称AC_UK 成立。由顺序相邻的AC_U0,AC_U1,…,AC_UN构成的链条,称为证明链。

针对元组T1,如果存在以下访问序列:

AC(T1,U1,1),AC(T1,U2,1),AC(T1,U3,1),AC(T1,U4,2),AC(T1,U5,2),…,那么元组散列值R和证明指引G的计算过程为:

R1=SHA(R0);G1=(U0+w);

R1值证明链AC_U0成立;

R2=SHA(R1+AC(T1,SHA(U1A),1)),

G2=G1+(U1+w);

R2值证明链AC_U0,AC_U1成立;

R3=SHA(R2+AC(T1,SHA(U2A),1)),

G3=G2+(U2+w);

R3值证明链AC_U0,AC_U1,AC_U2成立;

R4=SHA(R3+AC(T1,SHA(U3A),1)),

G4=G3+(U3+w);

R4值证明链AC_U0,AC_U1,AC_U2,AC_U3成立;

R5=SHA(R4+AC(T1,SHA(U4A),2)),

G5=G4+(U4+w);

R5值证明链AC_U0,AC_U1,AC_U2,AC_U3,AC_U4成立;

R6=SHA(R5+AC(T1,SHA(U5A),2)),

G6=G5+(U5+w);

R6值证明链AC_U0,AC_U1,AC_U2,AC_U3,AC_U4,AC_U5成立;

其算法加密过程综合表达式为

Ri=SHA(Ri-1+AC(Tj,SHA(UiA),w)),

Gi=Gi-1+(Ui+w)。

符号说明如下:

(1)R0:插入元组Ti数据的用户访问码散列值;

(2)Ti:关系元组T1为元组各分量值的字符串连接;

(3)UiA:为Ui的用户访问码。利用SHA-1算法计算出其对应的访问码散列码SHA(UiA);

(4)AC 函数:返回对元组T1值、用户访问码和操作类型的字符串连接功能。

(5)“+”:完成对操作数的字符串连接操作。

(6)SHA函数:为本系统采用的安全散列加密算法SHA-1,事实上,也可以是其他安全散列值加密算法。

1.4 算法约束

为保证在事故发生后可进行可信的访问数据行为(操作)顺序证明,算法应遵从下列约束:

(1)包含已证明访问短链的长链有效。

(2)有效访问长链的证明效力高于短链;已证明长链可排除系统外伪造短链。

(3)终链,即事故发生后或证明追踪时由散列值所反映出的访问链,终链应该包含所有能证明链。

(4)一般用户可以通过查询获取散列值,但在系统中无修改或删除散列值权限。

(5)证明过程中,被怀疑用户或有争执用户应该采用用户访问码参与计算,而其他用户由数据管理方直接调入用户访问散列值参与证明过程即可。

2 证明过程

假设针对数据库中某特定元组数据共拥有n位可访问数据的合法用户,n位用户数据的访问对系统而言是随机的。鉴于此,可以假设,当事故发生后,需要证明用户A、B、C(可以是一个或多个用户)曾访问特定元组数据及确认用户的访问顺序和操作类型时,根据“证明指引G”的提示,调取特定信息(即用户访问码散列值)沿“证明指引G”路径多次累进安全散列加密计算,如能得到与当前“散列值R”中记录的相同值时,可称前述用户一定曾访问过元组数据且顺序和操作类型如“证明指引G”所示,且还可断言在“证明指引G”之外的用户不曾访问该元组数据。

2.1 数据管理方可证明用户A的访问事实

根据前述1.3 加密过程,证明过程即按证明指引提供路径再一次执行安全散列加密计算过程,根据规则,数据管理文也不可知用户的私有数据(证明时要求被怀疑用户提供,非怀疑用户直接调取访问码散列值参与加密过程即可)及安全散列算法的单向性。如果有被怀疑的用户访问码参与计算,得到与终链最后一个消息摘要值相同,则可称被怀疑用户的访问行为确定无疑。

2.2 数据管理方无法伪造用户A的访问事实

如果合法用户A 未在某特定时间节点上访问数据库中特定对象,而数据管理方证明计算系列中强行加入或删除用户A 的访问行为记录。根据前述1.3 加密算法过程及安全散列算法的抗碰撞性特点,想要伪造出最终消息值几乎是不可行的。其安全性由安全散列算法的抗碰撞性提供。

2.3 争执评判

假设用户A 与用户B 对访问顺序或访问类型发生争执。假设用户A 先于用户B 访问,可称用户A 为前序操作用户,用户B 为后序操作用户。

2.3.1 管理方无法帮助用户B来陷害用户A

后序操作用户B 陷害前序操作用户A 是指通过证明用户B的访问链(长链)有效蕴涵用户A访问链(短链)有效,且用户A 的访问行为是强行加入或修改了操作类型的。由于本算法迭代加密原理,证明过程需要用户A 的用户访问码参与,用户B 和管理方均无法获取,即使管理方能提供在用户A 之前一个用户的访问短链有效,也无法计算出一个与终链相同的消息摘要值。单向性使得无法通过用户A 的访问散列值推导出其用户访问码,而抗碰撞性使得修改用户A的访问行为数据也是不可行的。

2.3.2 管理方无法帮助用户A来否认在用户B前访问

前序操作用户A 否认在后序操作用户B 前访问,是指在原正常访问序列中删除用户A 的访问行为还能计算出包含用户B 访问链的访问终链来。因为系统中记录的终链消息摘要值事实上已经包含用户A 的访问行为,如果管理方根据其掌握的其他用户的访问散列码值来伪造一个新的终链消息摘要值,那它将不能蕴涵用户B访问链有效,因为用户B访问链的计算过程包含了用户A 的行为记录。另外,还存在两类更难完成的陷害和否认的争执行为,即在没有管理方帮助下,用户B 自行设计散列值来陷害用户A和用户A自行设计散列值来否认用户B的行为。事实上,这两种情况并非新的陷害或否认任务,根据2.3.1 和2.3.2 可知,不论是用户A还是用户B,都无法达成自己的目的。

3 结语

本文以安全散列算法SHA-1 为基础,结合数据库应用技术,设计出一种可以准确记录、并以可证明方式追踪合法用户访问数据库行为的算法。它能够在发生责任事故后需要划定或区分责任时提供技术支持。安全散列算法SHA-1的单向性和抗碰撞性特点及本算法的设计逻辑共同为本算法提供了坚实的安全可信基础,存在的主要不足之处是针对每一次访问行为都以迭代计算散列值形式记录下来,数据访问者在每次访问数据时增加的时间成本基本上是固定且几乎可以忽略的,但证明追踪过程却是逐步累进计算过程。如果数据访问特别频繁,证明需要的时间也会是一个可观数值(但仍在可接受范围内),即本算法无法实现即时证明。在未来研究中将着重解决和改进这方面问题,改进算法的证明追踪效率、缩短时间,使得算法设计具有更加广阔的应用前景。

猜你喜欢

管理方元组证明
获奖证明
工程项目全寿命周期管理模式基于互联网平台的发展探究
Python核心语法
判断或证明等差数列、等比数列
针对隐藏Web数据库的Skyline查询方法研究*
一种基于时间戳的简单表缩减算法∗
海量数据上有效的top-kSkyline查询算法*
澳快餐店拒绝“带薪休息10分钟”遭抗议
从法经济学角度出发探究如何完善行政诉讼制度
证明我们的存在