我們在第4天複習資料儲存安全(SQL加密函數)時,我們曾實作了SQL欄位加密來保護敏感性資料,如果觀察前面的加密流程,資料庫其實同時保管著解密金鑰及加密資料,這因此出現了雞蛋放同個籃子的系統風險。
老外說:
Never put all your eggs in one basket
今年推出的SQL Server 2016多了一個能讓AP與DB分權而治的加密新功能:一律加密(Always Encrypted),可以讓守衛金庫的工作避免過度集權在資料庫身上,分散資料外洩的風險。
資料的加解密會在AP端的ADO.NET
應用程式端就開始執行,資料庫只負責接收或儲存AP端加密後的資料。
聽起來和AP端直接使用.NET加密演算法沒有不同?
*雖然都在AP端實施加密,但在金鑰這邊有些不同,加密金鑰在執行前會從資料庫端提供。
這樣資料庫不就還是擁有金庫和打開金庫的金鑰?
*還是有些不同,在資料庫內的這把加密金鑰被一個小寶箱鎖住,打開寶箱的金鑰被分開保管在AP端的憑證中。
Always Encrypted 是一個設計來保護儲存於 Azure SQL Database 或 SQL Server 資料庫中之敏感性資料的功能,像是信用卡號碼或全國性的身分證字號 (例如美國社會安全號碼)。 Always Encrypted 可讓用戶端將用戶端應用程式內的敏感性資料進行加密,且絕不會顯示 Database Engine (SQL Database 或 SQL Server) 的加密金鑰。 如此一來,「永遠加密」在資料擁有者 (且可以檢視資料) 和資料管理者 (但應該不具備存取權) 之間做出區隔。 透過確定內部部署資料庫系統管理員,雲端資料庫操作員,或其他高權限但未經授權的使用者則無法存取加密資料,「永遠加密」可讓客戶有信心地將機密資料存放在他們無法直接控制的位置。 這讓組織能夠加密 Azure 中的靜止資料以及用來存放的資料,以將內部部署資料庫管理委派給第三方,或是降低組織本身 DBA 人員的安全性許可需求。
我們來觀察查詢加密資料的流程:
首先從圖上可以理解,AP端持有CMK
金鑰(Column Master Key),DB端持有被CMK
加密後的CEK
(Column Encryption Key)。
假設我們要找資料庫找jim gray的CIF資料。
(jim gray是微軟研究科學家,1998年獲得圖靈獎(電腦界的諾貝爾獎))
1.AP先輸入SSN社會安全編號(美國公民的身分證字號)。
2.由於SSN使用了一律加密,AP會將條件資料使用欄位加密金鑰(CEK
)進行對稱式加密。
CEK
會在交易前從資料庫傳送過來,不過資料庫只有被加密的版本CMK
取出並解開DB傳送過來的加密版CEK
作為資料加解密操作金鑰。3.資料庫使用AP端加密後的條件查CIF。
4.資料庫回傳結果集。姓名:jim gray
CEK
)的主要金鑰(CMK
);CEK
)。https://msdn.microsoft.com/en-us/library/mt163865(v=sql.130).aspx
1.建立憑證及欄位加密主要金鑰(CMK:Column Master Key)。
2.建立欄位加密金鑰(CEK:Column Encryption Key)並且CMK加密。
3.建立資料表並指定欄位使用 Always Encrypted一律加密。
4.DB Server 匯出憑證
5.AP Server匯入憑證
6.刪除DB Server憑證。
操作流程部分取自史丹利個人部落格:Stanley好熱。
指定資料庫 > 安全性 > Always Encrypted Key > CMK > 右鍵 > New Column Master Key
建立憑證
建立CMK
指定資料庫 > 安全性 > Always Encrypted Key > CEK > 右鍵 > New Column Encryption Key
建立欄位加密金鑰(CEK:Column Encryption Key)並且CMK加密
建立病人資料表Patients,其中SSN社會安全號碼使用一律加密功能,加密演算法選AES256
USE SecurityDB
CREATE TABLE [dbo].[Patients](
[Name][varchar] (20),
[SSN] [char](11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (ENCRYPTION_TYPE = DETERMINISTIC,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
COLUMN_ENCRYPTION_KEY = CEK1) NOT NULL,
[Country] [varchar](50) NULL)
如果遇到定序問題,可以試試修改資料庫定序。
ALTER DATABASE SecurityDB
COLLATE Latin1_General_BIN2 ;
GO
Windows鍵
+ R
輸入 certmgr.msc
啟動憑證管理員
包含Private key
編碼
輸入憑證密碼(待會匯入時會使用)
憑證名稱
完成憑證匯出
把DB Server匯出的憑證上傳到AP Server,然後安裝。
下一步之後輸入剛剛在db server上的憑證密碼。
回到DB Server刪除憑證。
我們今天先花一些時間理解一律加密的原理並把AP Server/DB Server分權而治的一律加密環境準備好,明天我們就來觀察寫入資料及查詢資料的內容。
Data Driven- SQL Server 2016 Keeping Sensitive Data Secure with Always Encrypted
https://channel9.msdn.com/events/datadriven/sqlserver2016/alwaysencrypted
MSDN 一律加密 (Database Engine)
https://msdn.microsoft.com/en-us/library/mt163865(v=sql.130).aspx
一天尬兩場戲真的有累到..
好想去澳洲黃金海岸悠閒的慢跑
2014.02攝於黃金海岸