林加華,李志虹,姜 華
(楚雄師范學(xué)院數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,楚雄 675000)
隨著數(shù)據(jù)庫技術(shù)越來越廣泛地使用,數(shù)據(jù)庫中存儲(chǔ)管理的數(shù)據(jù)量呈現(xiàn)幾何式增長,其中不乏大量敏感數(shù)據(jù)。保護(hù)數(shù)據(jù)庫存儲(chǔ)的重要敏感數(shù)據(jù)安全是數(shù)據(jù)庫系統(tǒng)的重要職責(zé)之一,這類安全問題是指數(shù)據(jù)庫中敏感數(shù)據(jù)被多個(gè)合法用戶查詢獲取,在使用過程中發(fā)生泄密事故或惡意篡改,數(shù)據(jù)管理方需要以可信證明方式追蹤哪些用戶曾訪問數(shù)據(jù)以及這些用戶的訪問順序和操作類型等,用于輔助劃定或區(qū)分相關(guān)事故責(zé)任。
雖然目前大多數(shù)數(shù)據(jù)庫管理系統(tǒng)(DBMS)都提供了系統(tǒng)安全日志監(jiān)控用戶對(duì)數(shù)據(jù)庫訪問行為的功能,在生產(chǎn)場景中,數(shù)據(jù)庫管理員(DBA)可以通過日志功能詳細(xì)記錄用戶對(duì)數(shù)據(jù)庫的操作過程,以幫助管理員分析數(shù)據(jù)狀態(tài)演進(jìn)全過程,但是從該業(yè)務(wù)實(shí)際操作層面來看,它完全能重現(xiàn)數(shù)據(jù)狀態(tài)變化演進(jìn)過程,分析出是誰于何時(shí)對(duì)數(shù)據(jù)進(jìn)行了與當(dāng)前事故有關(guān)的關(guān)鍵操作。然而由于日志文件僅是以文本方式記錄信息,存在被篡改的可能,致使安全日志的呈現(xiàn)不具備堅(jiān)實(shí)的證明力,自然也無法成為責(zé)任劃定或區(qū)分的關(guān)鍵證據(jù)[1-2]。安全日志監(jiān)控功能僅以文本方式,即明文方式,記錄相關(guān)操作行為信息的特點(diǎn)使其不具備堅(jiān)實(shí)的證明力或證明力很弱,一旦發(fā)生爭執(zhí),被懷疑方可能提出一些難以證偽的“合理觀點(diǎn)”,認(rèn)為數(shù)據(jù)管理方或協(xié)同第三方修改了某些關(guān)鍵數(shù)據(jù),進(jìn)而否認(rèn)自己的數(shù)據(jù)訪問行為來逃避責(zé)任追查認(rèn)定[3-4]。
本文提出一種以安全散列算法(SHA)為基礎(chǔ),采用迭代加密和數(shù)據(jù)冗余技術(shù)動(dòng)態(tài)記錄用戶對(duì)特定元組數(shù)據(jù)進(jìn)行訪問行為的算法。算法設(shè)計(jì)思想是在數(shù)據(jù)庫關(guān)系設(shè)計(jì)時(shí)增加必要的數(shù)據(jù)列(冗余數(shù)據(jù)),存儲(chǔ)訪問行為的記錄數(shù)據(jù)的散列值(即消息摘要),該散列值在每一次訪問時(shí)都是根據(jù)原散列值連接當(dāng)前訪問數(shù)據(jù)重新計(jì)算得到,是迭加計(jì)算的結(jié)果。由安全散列算法SHA 的單向性與抗碰撞性特點(diǎn)及本算法設(shè)計(jì)邏輯,數(shù)據(jù)管理方可重現(xiàn)原所有用戶訪問數(shù)據(jù)行為系列計(jì)算出與當(dāng)前(事故發(fā)生或證明追蹤時(shí))相同的散列值,保證對(duì)多用戶訪問數(shù)據(jù)行為的證明追蹤過程,它具有不可否認(rèn)和防惡意陷害特征。具體冗余數(shù)據(jù)構(gòu)建方法是數(shù)據(jù)庫關(guān)系設(shè)計(jì)時(shí)增加額外的屬性列“散列值R”和“證明指引G”等屬性列?!吧⒘兄礡”用途是在用戶對(duì)元組數(shù)據(jù)進(jìn)行訪問時(shí),把對(duì)數(shù)據(jù)操作行為數(shù)據(jù)以安全散列加密形式記錄到“散列值R”中。另外,“證明指引G”屬性列為文本形式(非加密形式)累進(jìn)記錄訪問行為。它是非必要關(guān)鍵數(shù)據(jù),其存在可以提高證明追蹤效率;如果該數(shù)據(jù)丟失或被篡改,依然可以通過窮舉方式最終完成證明追蹤過程,只是需要花費(fèi)更多時(shí)間。
當(dāng)然,在發(fā)生數(shù)據(jù)泄密或惡意篡改事故后,事故責(zé)任證明追查時(shí),用戶是否曾訪問數(shù)據(jù),用戶的訪問順序以及操作類型,在責(zé)任劃定或區(qū)分方面可以成為重要參考依據(jù),甚至是關(guān)鍵證據(jù)。然而由于事故責(zé)任認(rèn)定是一個(gè)非常復(fù)雜的過程,本文主要是從技術(shù)層面確認(rèn)用戶是否訪問數(shù)據(jù)以及用戶的訪問順序和操作類型,以輔助事故責(zé)任認(rèn)定或區(qū)分責(zé)任大小和性質(zhì)。
安全散列算法(SHA)是一種常用的數(shù)據(jù)加密算法,用途廣泛;其主要思想是接收一段明文,將其轉(zhuǎn)換成一段更小(通常是160 bits)的密文數(shù)據(jù),該密文數(shù)據(jù)即由安全散列函數(shù)計(jì)算得到的散列值,也稱消息摘要。目前主要廣泛采用的是其改進(jìn)版本SHA-1。它有兩個(gè)重要特點(diǎn),即單向性和抗碰撞性。單向性是指由原始信息計(jì)算出消息摘要很容易,而由消息摘要逆向計(jì)算出原始信息則是困難的,幾乎無法有效完成??古鲎残允侵敢业絻蓚€(gè)不同的原始信息計(jì)算出相同的消息摘要是困難的,即使只修改原始信息中1字節(jié)數(shù)據(jù),其消息摘要也會(huì)產(chǎn)生巨大的變化[5]。在安全散列算法中發(fā)生數(shù)據(jù)碰撞成功的概率是極低的,而本文所提出算法中需要計(jì)算的合法原始信息(即算法輸入數(shù)據(jù))是有限數(shù)據(jù)集合,這將進(jìn)一步降低發(fā)生數(shù)據(jù)碰撞成功的概率,從而極大地保證了本算法的證明力,使得對(duì)用戶訪問數(shù)據(jù)行為的證明追蹤過程是可信和無法辯解的。
1.2.1 訪問碼和訪問碼散列值
數(shù)據(jù)庫合法用戶是指針對(duì)某特定數(shù)據(jù)庫對(duì)象具有進(jìn)行某特定訪問權(quán)限的用戶,簡稱用戶,記為Ui。另外,本文中的特定數(shù)據(jù)庫對(duì)象主要是指數(shù)據(jù)庫關(guān)系中的元組(數(shù)據(jù))。算法約定:用戶Ui在對(duì)特定數(shù)據(jù)庫對(duì)象進(jìn)行權(quán)限內(nèi)訪問前,需要向系統(tǒng)申報(bào)自己的用戶訪問碼,簡稱訪問碼,記為UiA。它是由字母、數(shù)字、“_”等符號(hào)組合而成,長度不低于8位的字符串。訪問碼散列值是系統(tǒng)根據(jù)用戶申報(bào)的用戶訪問碼通過安全散列算法SHA1 加密得到的散列值,長度為160 bits。用戶完成申報(bào)后,系統(tǒng)中僅記錄用戶代碼和訪問碼散列值的對(duì)應(yīng)關(guān)系,而不保存用戶訪問碼,并且記錄前述兩項(xiàng)數(shù)據(jù)的關(guān)系僅允許數(shù)據(jù)庫管理系統(tǒng)超級(jí)管理員擁有訪問權(quán)限。特別說明,用戶訪問碼是合法用戶的私有信息,應(yīng)妥善保管,避免其他用戶知曉(包括系統(tǒng)超級(jí)管理員)。
1.2.2 元組散列值R和證明指引G
所謂元組散列值R,是指根據(jù)原有散列值和訪問行為記錄數(shù)據(jù),通過安全散列算法SHA-1,迭代累進(jìn)式計(jì)算得到的160 bits 數(shù)值,簡稱散列值R或R值。證明指引G是累進(jìn)式連接訪問操作用戶代碼和操作類型的字符串系列,其目的在于加快證明過程。證明指引G 值屬公共信息,任何用戶無法通過該信息偽造特定的元組散列值R;該值即使被破壞,只能使證明過程時(shí)間更長,不能影響證明結(jié)果。在數(shù)據(jù)庫關(guān)系結(jié)構(gòu)設(shè)計(jì)中,除了正常用于存儲(chǔ)所需數(shù)據(jù)的屬性列,還需要在關(guān)系模式中增加冗余屬性列“元組散列值R”和“證明指引G”屬性列。關(guān)系模式設(shè)計(jì)示例,如表1所示。
表1 關(guān)系模式設(shè)計(jì)示例(某系統(tǒng)銷售數(shù)據(jù)關(guān)系)
注:上述銷售數(shù)據(jù)關(guān)系模式設(shè)計(jì)示例中屬性列“原單價(jià)”不應(yīng)該出現(xiàn)在此關(guān)系模式中,它應(yīng)作為商品關(guān)系模式中的屬性,此處舉例僅為集中顯示效果而設(shè)定。
假設(shè)數(shù)據(jù)庫中存在某關(guān)系,它擁有數(shù)據(jù)元組T1,T2,T3,…,Tn;存在用戶代碼U1,U2,…,Um。用戶k 訪問數(shù)元組Ti,記為AC(Ti,Uk,w),其中w=1代表數(shù)據(jù)查詢;w=2代表數(shù)據(jù)更新操作。證明追蹤過程,即根據(jù)證明指引G 的路徑(原多用戶訪問行為系列)重新計(jì)算元組散列值的過程,簡記為AC_UK;當(dāng)該散列值與用戶訪問計(jì)算所得元組散列值相等時(shí),稱AC_UK 成立。由順序相鄰的AC_U0,AC_U1,…,AC_UN構(gòu)成的鏈條,稱為證明鏈。
針對(duì)元組T1,如果存在以下訪問序列:
AC(T1,U1,1),AC(T1,U2,1),AC(T1,U3,1),AC(T1,U4,2),AC(T1,U5,2),…,那么元組散列值R和證明指引G的計(jì)算過程為:
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成立;
…
其算法加密過程綜合表達(dá)式為
Ri=SHA(Ri-1+AC(Tj,SHA(UiA),w)),
Gi=Gi-1+(Ui+w)。
符號(hào)說明如下:
(1)R0:插入元組Ti數(shù)據(jù)的用戶訪問碼散列值;
(2)Ti:關(guān)系元組T1為元組各分量值的字符串連接;
(3)UiA:為Ui的用戶訪問碼。利用SHA-1算法計(jì)算出其對(duì)應(yīng)的訪問碼散列碼SHA(UiA);
(4)AC 函數(shù):返回對(duì)元組T1值、用戶訪問碼和操作類型的字符串連接功能。
(5)“+”:完成對(duì)操作數(shù)的字符串連接操作。
(6)SHA函數(shù):為本系統(tǒng)采用的安全散列加密算法SHA-1,事實(shí)上,也可以是其他安全散列值加密算法。
為保證在事故發(fā)生后可進(jìn)行可信的訪問數(shù)據(jù)行為(操作)順序證明,算法應(yīng)遵從下列約束:
(1)包含已證明訪問短鏈的長鏈有效。
(2)有效訪問長鏈的證明效力高于短鏈;已證明長鏈可排除系統(tǒng)外偽造短鏈。
(3)終鏈,即事故發(fā)生后或證明追蹤時(shí)由散列值所反映出的訪問鏈,終鏈應(yīng)該包含所有能證明鏈。
(4)一般用戶可以通過查詢獲取散列值,但在系統(tǒng)中無修改或刪除散列值權(quán)限。
(5)證明過程中,被懷疑用戶或有爭執(zhí)用戶應(yīng)該采用用戶訪問碼參與計(jì)算,而其他用戶由數(shù)據(jù)管理方直接調(diào)入用戶訪問散列值參與證明過程即可。
假設(shè)針對(duì)數(shù)據(jù)庫中某特定元組數(shù)據(jù)共擁有n位可訪問數(shù)據(jù)的合法用戶,n位用戶數(shù)據(jù)的訪問對(duì)系統(tǒng)而言是隨機(jī)的。鑒于此,可以假設(shè),當(dāng)事故發(fā)生后,需要證明用戶A、B、C(可以是一個(gè)或多個(gè)用戶)曾訪問特定元組數(shù)據(jù)及確認(rèn)用戶的訪問順序和操作類型時(shí),根據(jù)“證明指引G”的提示,調(diào)取特定信息(即用戶訪問碼散列值)沿“證明指引G”路徑多次累進(jìn)安全散列加密計(jì)算,如能得到與當(dāng)前“散列值R”中記錄的相同值時(shí),可稱前述用戶一定曾訪問過元組數(shù)據(jù)且順序和操作類型如“證明指引G”所示,且還可斷言在“證明指引G”之外的用戶不曾訪問該元組數(shù)據(jù)。
根據(jù)前述1.3 加密過程,證明過程即按證明指引提供路徑再一次執(zhí)行安全散列加密計(jì)算過程,根據(jù)規(guī)則,數(shù)據(jù)管理文也不可知用戶的私有數(shù)據(jù)(證明時(shí)要求被懷疑用戶提供,非懷疑用戶直接調(diào)取訪問碼散列值參與加密過程即可)及安全散列算法的單向性。如果有被懷疑的用戶訪問碼參與計(jì)算,得到與終鏈最后一個(gè)消息摘要值相同,則可稱被懷疑用戶的訪問行為確定無疑。
如果合法用戶A 未在某特定時(shí)間節(jié)點(diǎn)上訪問數(shù)據(jù)庫中特定對(duì)象,而數(shù)據(jù)管理方證明計(jì)算系列中強(qiáng)行加入或刪除用戶A 的訪問行為記錄。根據(jù)前述1.3 加密算法過程及安全散列算法的抗碰撞性特點(diǎn),想要偽造出最終消息值幾乎是不可行的。其安全性由安全散列算法的抗碰撞性提供。
假設(shè)用戶A 與用戶B 對(duì)訪問順序或訪問類型發(fā)生爭執(zhí)。假設(shè)用戶A 先于用戶B 訪問,可稱用戶A 為前序操作用戶,用戶B 為后序操作用戶。
2.3.1 管理方無法幫助用戶B來陷害用戶A
后序操作用戶B 陷害前序操作用戶A 是指通過證明用戶B的訪問鏈(長鏈)有效蘊(yùn)涵用戶A訪問鏈(短鏈)有效,且用戶A 的訪問行為是強(qiáng)行加入或修改了操作類型的。由于本算法迭代加密原理,證明過程需要用戶A 的用戶訪問碼參與,用戶B 和管理方均無法獲取,即使管理方能提供在用戶A 之前一個(gè)用戶的訪問短鏈有效,也無法計(jì)算出一個(gè)與終鏈相同的消息摘要值。單向性使得無法通過用戶A 的訪問散列值推導(dǎo)出其用戶訪問碼,而抗碰撞性使得修改用戶A的訪問行為數(shù)據(jù)也是不可行的。
2.3.2 管理方無法幫助用戶A來否認(rèn)在用戶B前訪問
前序操作用戶A 否認(rèn)在后序操作用戶B 前訪問,是指在原正常訪問序列中刪除用戶A 的訪問行為還能計(jì)算出包含用戶B 訪問鏈的訪問終鏈來。因?yàn)橄到y(tǒng)中記錄的終鏈消息摘要值事實(shí)上已經(jīng)包含用戶A 的訪問行為,如果管理方根據(jù)其掌握的其他用戶的訪問散列碼值來偽造一個(gè)新的終鏈消息摘要值,那它將不能蘊(yùn)涵用戶B訪問鏈有效,因?yàn)橛脩鬊訪問鏈的計(jì)算過程包含了用戶A 的行為記錄。另外,還存在兩類更難完成的陷害和否認(rèn)的爭執(zhí)行為,即在沒有管理方幫助下,用戶B 自行設(shè)計(jì)散列值來陷害用戶A和用戶A自行設(shè)計(jì)散列值來否認(rèn)用戶B的行為。事實(shí)上,這兩種情況并非新的陷害或否認(rèn)任務(wù),根據(jù)2.3.1 和2.3.2 可知,不論是用戶A還是用戶B,都無法達(dá)成自己的目的。
本文以安全散列算法SHA-1 為基礎(chǔ),結(jié)合數(shù)據(jù)庫應(yīng)用技術(shù),設(shè)計(jì)出一種可以準(zhǔn)確記錄、并以可證明方式追蹤合法用戶訪問數(shù)據(jù)庫行為的算法。它能夠在發(fā)生責(zé)任事故后需要?jiǎng)澏ɑ騾^(qū)分責(zé)任時(shí)提供技術(shù)支持。安全散列算法SHA-1的單向性和抗碰撞性特點(diǎn)及本算法的設(shè)計(jì)邏輯共同為本算法提供了堅(jiān)實(shí)的安全可信基礎(chǔ),存在的主要不足之處是針對(duì)每一次訪問行為都以迭代計(jì)算散列值形式記錄下來,數(shù)據(jù)訪問者在每次訪問數(shù)據(jù)時(shí)增加的時(shí)間成本基本上是固定且?guī)缀蹩梢院雎缘?,但證明追蹤過程卻是逐步累進(jìn)計(jì)算過程。如果數(shù)據(jù)訪問特別頻繁,證明需要的時(shí)間也會(huì)是一個(gè)可觀數(shù)值(但仍在可接受范圍內(nèi)),即本算法無法實(shí)現(xiàn)即時(shí)證明。在未來研究中將著重解決和改進(jìn)這方面問題,改進(jìn)算法的證明追蹤效率、縮短時(shí)間,使得算法設(shè)計(jì)具有更加廣闊的應(yīng)用前景。