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