SQL Server 2005資料加密技術應用研究

來源:互聯網
上載者:User

資料加密是SQL Server 2005新增的資料安全特性,這對應用程式開發人員來說是非常重要的改進。本文從程式開發人員角度,探討SQL Server 2005資料加密特性以及如何運用該特性保證系統的資料安全。

SQL Server 2005是微軟開始實施其“可信賴計算” 計劃以來的第一個主要的產品,它提供了豐富的安全特性,為企業資料提供安全保障。對開發人員來說,最關注的是如何在程式設計過程中應用這些特性來保護資料庫中的資料安全。本文將從應用程式開發人員角度探討基於SQL Server 2005資料加密特性的應用。

SQL Server 2005資料加密技術

資料用數字方式儲存在伺服器中並非萬無一失。實踐證明有太多的方法可以智取SQL Server 2000認證保護,最簡單的是通過使用沒有口令的sa帳號。儘管SQL Server 2005遠比它以前的版本安全,但攻擊者還是有可能獲得儲存的資料。因此,資料加密成為更徹底的資料保護戰略,即使攻擊者得以存取資料,還不得不解密,因而對資料增加了一層保護。

SQL Server 2000以前的版本沒有內建資料加密功能,若要在SQL Server 2000中進行資料加密,不得不買第三家產品,然後在伺服器外部作COM調用或者是在資料送伺服器之前在用戶端的應用中執行加密。這意味著加密的密鑰或認證不得不由加密者自己負責保護,而保護密鑰是資料加密中最難的事,所以即使很多應用中資料已被很強的加密過,資料保護仍然很弱。

SQL Server 2005通過將資料加密作為資料庫的內在特性解決了這個問題。它除了提供多層次的密鑰和豐富的密碼編譯演算法外,最大的好處是使用者可以選擇資料服務器管理密鑰。SQL Server 2005伺服器支援的密碼編譯演算法如下:

⑴ 對稱式加密(Symmetric Key Encryption):

對稱式加密方式對加密和解密使用相同的密鑰。通常,這種加密方式在應用中難以實施,因為用同一種安全方式共用密鑰很難。但當資料儲存在SQL Server中時,這種方式很理想,你可以讓伺服器管理它。SQL Server 2005 提供RC4、RC2、DES 和 AES 系列密碼編譯演算法。

⑵ 非對稱金鑰密碼編譯(Asymmetric Key Encryption):

非對稱金鑰密碼編譯使用一組公用/私人密鑰系統,加密時使用一種密鑰,解密時使用另一種密鑰。公用密鑰可以廣泛的共用和透露。當需要用加密方式向伺服器外部傳送資料時,這種加密方式更方便。SQL Server 2005 支援 RSA 密碼編譯演算法以及 512 位、1,024 位和 2,048 位的密鑰強度。

⑶ 數位憑證(Certificate):

數位憑證是一種非對稱金鑰密碼編譯,但是,一個組織可以使用認證並通過數位簽章將一組公開金鑰和私密金鑰與其擁有者相關聯。SQL Server 2005 支援“網際網路工程工作群組”(IETF) X.509 版本 3 (X.509v3) 規範。一個組織可以對 SQL Server 2005 使用外部產生的認證,或者可以使用 SQL Server 2005 產生認證。

SQL Server 2005 採用多級密鑰來保護它內部的密鑰和資料,如下圖所示:

 

圖1 SQL Server 2005採用多級密鑰保護它內部的密鑰和資料

圖中引出箭頭的密鑰或服務用於保護箭頭所指的密鑰。所以服務主要金鑰(service master key)保護資料庫主要金鑰(database master keys),而資料庫主要金鑰又保護認證(certificates)和非對稱金鑰(asymmetric keys)。而最底層的對稱性密鑰(symmetric keys)被認證、非對稱金鑰或其他的對稱性密鑰保護(箭頭又指回它本身)。使用者只需通過提供密碼來保護這一系列的密鑰。

圖中頂層的服務主要金鑰,安裝SQL Server 2005新執行個體時自動產生和安裝,使用者不能刪除此密鑰,但資料庫管理員能對它進行基本的維護,如備份該密鑰到一個加密檔案,當其危及到安全時更新它,恢複它。

服務主要金鑰由DPAPI(Data Protection API)管理。DPAPI在Windows 2000 中引入,建立於Windows的Crypt32 API之上。SQL Server 2005 管理與DPAPI的介面。服務主要金鑰本身是對稱式加密,用來Data Encryption Service器中的資料庫主要金鑰。

資料庫主要金鑰與服務主要金鑰不同,在加密資料庫中資料之前,必須由資料庫管理員建立資料庫主要金鑰。通常管理員在產生該密鑰時,提供一個口令,所以它用口令和服務主要金鑰來加密。如果有足夠的許可權,使用者可以在需要時顯式地或自動地開啟該密鑰。下面是產生資料庫主要金鑰的T-SQL程式碼範例:

以下為引用的內容:
USE EncryptionDB
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'UTY6%djzZ8S7RyL'

每個資料庫只有一個資料庫主要金鑰。可以用ALTER MASTR KEY語句來刪除加密,更改口令或刪除資料庫主要金鑰。通常這由資料庫管理員來負責做這些。

有了資料庫主要金鑰,就可以著手加密資料。T-SQL有置於其內的加密支援。使用CREATE語句建立各種密碼,ALTER語句修改他們。例如要建立對稱式加密,可以通過一對函數EncryptByKey 和 DecryptByKey來完成。

資料加密技術應用解析

下面通過執行個體來探討SQL Server 2005資料加密與解密技術的實現。

假設有一張Customer 表,表中有欄位 customer ID、 name、 city 和各種信用卡細節。其中信用卡細節需要加密而其他資料不需要。假設User1有對稱式密鑰,並用該密鑰登入,運行相應的代碼加密資料。

⑴ 資料加密

① 產生密鑰:在含有Customers 表的資料庫中使用Triple DES作為密碼編譯演算法,產生對稱式密鑰。本例中,密鑰本身由已經存在在資料庫中的認證保護,如圖一所示,對稱密碼受非對稱密碼和存在的其他對稱式密鑰保護。

以下為引用的內容:
CREATE SYMMETRIC KEY User1SymmetricKeyCert
AUTHORIZATION User1
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY CERTIFICATE User1Certificate

② 開啟密鑰:對稱式密鑰使用前必須顯式開啟,所以接下來開啟它,重新找回密碼,解密它,並放它在受保護的伺服器記憶體中,準備使用。

以下為引用的內容:
OPEN SYMMETRIC KEY User1SymmetricKeyCert
DECRYPTION BY CERTIFICATE User1Certificate

③ 加密資料:在下面的代碼中,使用正常的T-SQL INSERT語句將一行資料插入表中,id、name和city 用明文儲存,信用卡類型、號碼以及有潛在機密的客戶注釋用加密方式儲存,用Triple DES密碼編譯演算法加密資料。

以下為引用的內容:
INSERT INTO Customer
VALUES (4, 'John Doe', 'Fairbanks',
EncryptByKey(Key_GUID(
'User1SymmetricKeyCert'), 'Amex'),
EncryptByKey(Key_GUID(
'User1SymmetricKeyCert'),
'1234-5678-9009-8765'),
EncryptByKey(Key_GUID(
'User1SymmetricKeyCert'),
'Window shopper. Spends $5 at most.'))

加密完成後,關閉它,釋放記憶體,以防它被誤用。

CLOSE SYMMETRIC KEY User1SymmetricKeyCert

以上是整個的資料加密的操作過程。它沒有混亂的密碼管理,也不用調用特別的演算法。儲存加密資料的欄位是varbinary類型資料,其長度足以儲存擴充的資料(加密資料比明文需要更多的空間,有時候多很多)。

⑵ 資料解密

要解密已加密的資料,你需要重新開啟對稱式加密。使用DecryptByKey函數讀資料,然後關閉對稱式加密。結果及相應的代碼如下。

以下為引用的內容:
OPEN SYMMETRIC KEY User1SymmetricKeyCert
DECRYPTION BY CERTIFICATE User1Certificate
SELECT CustID, Name, City,
CONVERT(VARCHAR, DecryptByKey(CreditCardType))
AS CardType,
CONVERT(VARCHAR, DecryptByKey(CreditCardNumber))
AS CardNumber,
CONVERT(VARCHAR, DecryptByKey(Notes))
AS Notes
FROM Customer WHERE CustID = 4
CLOSE SYMMETRICKEYUser1SymmetricKeyCert

這個例子顯示了讓SQL Server 2005為你管理密鑰的一種方法。但實際上,使用者總是選擇自己提供一個口令的方式,用RC4演算法產生對稱密碼。代碼如下:

以下為引用的內容:
CREATE SYMMETRIC KEY User2SymmetricKeyPwd
AUTHORIZATION User2
WITH ALGORITHM = RC4
ENCRYPTION BY PASSWORD = 'sdylvxF&imeG3FP'

SQL Server 2005產生一個基於使用者提供的口令的密鑰來加密資料。除非明確指定,否則口令不儲存在SQL Server 2005中,使用者必須保護好自己的口令,否則任何一個知道口令的人都可以解密資料。

如果認為對儲存在資料庫中的資料加密完全是浪費處理器時間和儲存空間那就錯了。SQL Server 2005中的資料加密是一個非凡的特性,它為客戶的資料提供了一個重要的保護層。但應用時要注意,只對那些敏感機密的資料進行保護,因為加密消耗伺服器處理器大量的資源,如果對一個有一千萬條記錄的表的每個欄位都加密的話,運行一條沒有Where 子句的SELECT 就可能導致伺服器效能的崩潰。



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。