'深入MongoDB4.2:字段級加密Client-Side Field Level Encryption'

"

簡介: 深入MongoDB4.2新特性:字段級加密 Client-Side Field Level Encryption

作者簡介:

徐雷,

1)MongoDB中文社區聯席主席;

2)《MongoDB實戰》第2版譯者;

3)阿里雲大學講師;阿里雲棲社區講師;

4)目前就職於阿里巴巴,架構師

(因為內容較多,進行了文章刪減,閱讀全文可以通過點擊底部的“瞭解更多”進行瀏覽)

文章摘自:阿里雲開發者社區


MongoDB4.2已經發布,新增了幾大特性,其中安全改進,提供了字段級加密 Client-Side Field Level Encryption加密新特性。今天我們來深入學習一下這個新特性,以及使用的場景。

1、MongoDB字段級加密新特性介紹

MongoDB4.2驅動程序也提供客戶端字段級加密支持。

這種加密機制依賴於客戶端代碼實現。

1.1加密場景

作為使用過MySQL或者之前MongoDB數據庫的同學,應該很容易理解,絕大部分的電商、銀行、社交平臺的數據庫敏感字段都會考慮加密處理。例如:支付寶、微信、微博賬號的密碼、賬戶餘額、銀行卡賬號、授權碼等等。一些商品的進貨價格,供貨商聯繫方式等。

但是也有很多系統不會做加密,比如早期的12306數據庫裡的用戶信息字段(後面已經修復漏洞)。

早期的做法,如果有加密字段的需求,都是在業務邏輯層,設計加密算法。

常見的做法,比如對商品原始價格加密,對稱加密Key直接計算。或者變換方式處理。

這些通常要程序員寫代碼完成。

1.2數據庫透明加密

現在一些先進的數據庫都開始提供DB級別的加密支持,比如Oracle、SQL Server,阿里雲MySQL,現在MongoDB也開始支持這個特性。

應用程序可以在通過網絡將數據傳輸到服務器之前提前加密Document文檔中的某些字段,比如商品的價格Price,或者用戶賬號的存款餘額。

只有能夠訪問正確加密密鑰的應用程序才能解密和讀取受保護的數據。

刪除加密密鑰會將使用該密鑰加密的所有數據呈現為永久不可讀。

MongoDB集群使用TLS加密來保護傳輸中的數據。集群還使用MongoDB加密存儲引擎來保護磁盤上的數據。

請思考以下安全場景:

A、員工具有集群及其主機的管理訪問權限。員工的訪問級別允許他們在解密狀態下查看敏感數據。

B、第三方託管MongoDB集群。提供程序具有主機或數據庫級安全漏洞,未授權方在解密狀態下訪問數據。

C、第三方數據分析公司可以訪問包含私人,個人或機密數據。第三方公司將解密的數據加載到未經授權的各方可以訪問的不安全的存儲區中。

對於上面的每種情況,具有MongoDB群集或主機的特權訪問權限的用戶都可以繞過加密來讀取私有的機密數據。

所以在寫入服務器之前,我們使用客戶端字段級加密新特性,可以保護數據,降低在網絡傳輸中暴露數據或繞過磁盤加密竊取數據的風險。

2、用戶文檔加密字段例子

下面是一個用戶Document文檔數據的例子:

{
"name" : "Frank Xu",
"address" : {
"street" : "1234前門外大街",
"city" : "杭州",
"zip" : 99999
},
"phone" : "123-45-6789",
"age" : "18"
}

假設是一個戀愛交友網站,手機號、年齡是敏感字段,不希望洩露。

我們可以使用客戶端字段級加密功能,專門加密敏感信息,如age和phone。 加密數據可以保存為具有子類型的二進制數據格式。

{
"name" : "Frank Xu",
"address" : {
"street" : "1234 前門外大街",
"city" : "杭州",
"zip" : 99999
},
"phone" : BinData(6,"U2FsdGVkX1+CGIDGUnGgtS46+c7R5u17SwPDEmzyCbA="),
"age" : BinData(6,"AaloEw285E3AnfjP+r8ph2YCvMI1+rWzpZK97tV6iz0jx")
}

那些黑客,無法訪問所需密,因此這些非法的MongoDB服務器的用戶無法解密加密過的字段。

MongoDB支持兩種使用官方MongoDB 4.2兼容驅動程序進行客戶端字段級加密的方法:

3、字段的顯式(手動)加密方式

MongoDB4.2兼容驅動程序支持使用特定數據密鑰和加密算法顯式加密或解密字段。

應用程序必須修改與構造讀寫操作相關的任何代碼,以通過驅動程序加密庫包含加密/解密邏輯。應用程序負責根據每個操作選擇適當的加密/解密數據密鑰。


"

相關推薦

推薦中...