[摘要] 本文論述了數(shù)據(jù)加密系統(tǒng)的設計和實現(xiàn)策略,說明了各個功能模塊的運行機制,就數(shù)據(jù)加密子系統(tǒng)實現(xiàn)中所遇到SQL語句應用、數(shù)據(jù)庫訪問、數(shù)據(jù)類型變換、數(shù)據(jù)完整性和系統(tǒng)運行效率等主要難點問題進行研究,提出了具體實現(xiàn)方案。
[關鍵詞] 加/脫密引擎 加密字典管理程序 抽象語法樹
數(shù)據(jù)的安全是系統(tǒng)安全的關鍵。數(shù)據(jù)安全性是指計算機中的數(shù)據(jù)不被非法讀出、更改、刪除等。使用數(shù)據(jù)加密系統(tǒng)可以解決數(shù)據(jù)庫數(shù)據(jù)安全的問題。在實現(xiàn)數(shù)據(jù)加密系統(tǒng)中,仍存在一些有待解決的技術難點,本文對DBMS外層數(shù)據(jù)加密系統(tǒng)中此類問題進行研究。
一、實現(xiàn)數(shù)據(jù)加密系統(tǒng)的技術難點及解決方案
在DBMS外層數(shù)據(jù)加密系統(tǒng)設計過程中,碰到了一些比較難解決的問題及難點,主要為SQL語句問題,數(shù)據(jù)庫指向問題,數(shù)據(jù)類型問題,經(jīng)過研究討論,最終對這些問題提出了解決方案。
1.SQL語句應用問題
在進行數(shù)據(jù)加脫密過程中,基于open client的客戶端在向數(shù)據(jù)庫發(fā)送SQL語句之前先調(diào)用加脫密引擎中的語法分析模塊,將SQL語句轉(zhuǎn)變成語法樹,再根據(jù)加密字典信息對相關的加密信息進行加脫密變換,舉例說明,假如SQL語句為select a,b from table where a=”123”,其中b列為加密列,則語法分析模塊產(chǎn)生的抽象語法樹如圖1所示,假設密鑰管理中此SELECT語句行標記列名稱為rt,table對應的密表名為tab,則經(jīng)過加密轉(zhuǎn)換語法樹如圖2所示。這時SQL語句經(jīng)過加脫密轉(zhuǎn)換調(diào)用語法分析模塊將該語法樹轉(zhuǎn)換為SQL語句:select tab.rt,a,b from tab where a=”123”,然后發(fā)送到服務器處理;若a列為加密列,則在加密轉(zhuǎn)換時將值“123”轉(zhuǎn)換為相應的密文,然后調(diào)用語法分析模塊還原語法樹并將最終結(jié)果發(fā)往服務器處理。
圖1 加脫密變換前抽象語法樹
圖2 加脫密變換后抽象語法樹
2.數(shù)據(jù)庫訪問問題
客戶端應用開發(fā)工具或應用訪問數(shù)據(jù)庫,首先要建立服務器的連接,客戶端API為之提供一組接口函數(shù),最終建立的一條邏輯鏈路,稱之為SQLLink。用戶通過SQLLink及SQL命令等參數(shù)調(diào)用加脫密引擎中的數(shù)據(jù)庫接口模塊提供的用戶接口函數(shù),對于不同的數(shù)據(jù)庫應用編程接口,定義不同的用戶接口函數(shù)。
數(shù)據(jù)庫接口模塊以UserLink參數(shù)調(diào)用加脫密處理模塊。加脫密處理模塊在需要數(shù)據(jù)庫服務時,以UserLink或BackLink參數(shù)調(diào)用數(shù)據(jù)庫接口模塊提供的通用數(shù)據(jù)庫驅(qū)動函數(shù)。
數(shù)據(jù)庫接口模塊在接到加脫密引擎中加脫密處理模塊的操作命令后,再負責通過SQLLink參數(shù)與后臺的數(shù)據(jù)庫服務器聯(lián)系。
3.數(shù)據(jù)類型轉(zhuǎn)換問題
數(shù)據(jù)庫中各種類型的數(shù)據(jù)有其特定的格式、長度、值域,如果加密后的數(shù)據(jù)仍存儲在明表中,則必須保證其加密后的數(shù)據(jù)的格式、長度、值域與加密前保持不變。這樣的要求對于加密算法來說是難以達到的。因此系統(tǒng)設計將各種類型的數(shù)據(jù)加密,并按照對應的密文字段類型和長度存放在另一張表(密表)中,數(shù)據(jù)加密后的密文仍然以關系模式存儲,必須保證密文的類型能夠被DBMS識別并能夠被DBMS進行正常的存取處理。要實現(xiàn)包括用戶定義的各類型數(shù)據(jù)的存儲加密,需要實現(xiàn)系統(tǒng)類型數(shù)據(jù)的存儲加密即可。
對于定長數(shù)據(jù)類型,如果實際數(shù)據(jù)長度不足定義長度,在數(shù)據(jù)的末尾將以空格(字符型)或零(其他類型)填滿。不論實際數(shù)據(jù)有多長,存儲的長度均為定義長度。對于變長類型,按照數(shù)據(jù)的實際長度存儲,變長類型數(shù)據(jù)節(jié)省存儲空間但訪問速度較慢。文本類型的數(shù)據(jù),最大長度可達2GB,數(shù)據(jù)表中僅僅存放了指向數(shù)據(jù)的指針,該指針為“文本指針”。
4.數(shù)據(jù)完整性問題
在數(shù)據(jù)庫中不論加密前后必須保證數(shù)據(jù)的完整性,數(shù)據(jù)庫數(shù)據(jù)完整性與傳統(tǒng)意義上的數(shù)據(jù)完整性不同,數(shù)據(jù)庫數(shù)據(jù)完整性是對數(shù)據(jù)正確性、有效性、相容性的要求及控制數(shù)據(jù)在一定范圍內(nèi)有效,或要求數(shù)據(jù)之間滿足一定關系。數(shù)據(jù)庫的數(shù)據(jù)完整性從三個方面來描述:實體完整性、參照完整性和語義完整性。系統(tǒng)在加密工具管理中加入表信息采集表來解決數(shù)據(jù)庫的數(shù)據(jù)完整性問題。
保證實體完整性可以通過設置關系表定義主鍵來滿足,要求主鍵必須滿足非空約束和惟一值約束;參照完整性用于實現(xiàn)兩張表之間的相互關系,其方法為定義關系表外鍵,外鍵涉及兩個表,一個是引用表一個是被引用表,外鍵是引用表中的一列或一組列,同時是被引用表中的主鍵;語義完整性通過數(shù)據(jù)結(jié)構(gòu)、缺省值(默認值)及檢查值(插入修改時須滿足的條件)滿足。
數(shù)據(jù)表中數(shù)據(jù)加密后存儲類型發(fā)生了變化而且密文數(shù)據(jù)存放在密表中而不再存放于明表中。因此數(shù)據(jù)庫加密系統(tǒng)在進行數(shù)據(jù)加密轉(zhuǎn)存時,密表必須繼承明表的安全屬性。數(shù)據(jù)庫管理系統(tǒng)把與應用表有關的數(shù)據(jù)完整性定義、訪問控制定義記錄在數(shù)據(jù)字典中,稱之為系統(tǒng)表。表信息采集模塊從數(shù)據(jù)庫系統(tǒng)中獲取應用表的這些安全定義信息,并記錄在應用表信息采集表中,以供修改表加密定義時使用。
加密管理程序運行時使用的某些安全信息需要從多個系統(tǒng)表中連接查詢獲得,而且系統(tǒng)表中的安全信息是以內(nèi)部編碼形式存儲的,加密管理程序每次訪問時都必須進行繁瑣的解碼,為了提高效率,系統(tǒng)中使用了表信息采集,一次性解決這些問題。
二、結(jié)束語
本文簡要介紹了DBMS外層的數(shù)據(jù)加密系統(tǒng)設計及其實現(xiàn)過程中遇到的技術難點解決方案,通過應用這些方案,數(shù)據(jù)加密系統(tǒng)可以正確地實現(xiàn)數(shù)據(jù)保護功能并大幅提高效率。由于數(shù)據(jù)在DBMS外層實現(xiàn)加密,加載數(shù)據(jù)加密系統(tǒng)對效率影響不大,但是若數(shù)據(jù)在DBMS內(nèi)層加密,會加重服務器負擔導致效率降低,因此不推薦使用DBMS內(nèi)層加密的數(shù)據(jù)加密系統(tǒng)。
本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。