簡介
當今世界執行在資料之上。組織建立、儲存和交換的資料是其最寶貴的資產。資料加密是所有組織保護自身、保護使用者以及遵守資料隱私法規的關鍵實踐。組織應確保內部使用者只能檢視與他們相關的資料。更重要的是,組織需要保護其資料免受洩露和未經授權的訪問。
對於處理敏感資訊的組織而言,資料加密的需求更為重要。在本文中,我們將討論除了強大的認證和授權措施之外,你為何應該加密資料,以及MongoDB中不同型別的加密和加密的最佳實踐。
如果你正在使用MongoDB,請檢視Prisma的MongoDB聯結器!你可以使用Prisma Client自信地管理生產環境的MongoDB資料庫。
要開始使用MongoDB和Prisma,請檢視我們的從零開始指南或如何新增到現有專案。
為什麼要加密資料?
基於角色的訪問控制(RBAC)是防止資料庫許可權濫用的一項出色措施。然而,此功能僅涵蓋了在保護系統時必須考慮的一些漏洞。RBAC無法解決惡意行為者竊聽網路、直接盜取資料或訪問資料庫主機記憶體的情況。
早在2019年,世界經濟論壇就預測到2020年,整個數字宇宙的資料量將達到44澤位元組。這個預測數字是宇宙中可觀測恆星數量的40倍。截至本指南釋出時(2022年),這個數字無疑已經增長,使得加密的必要性顯而易見。
簡單來說,加密是將資料編碼,使其對未經授權訪問資料的人來說不可讀。只有知道加密“金鑰”的授權人員才能讀取和理解資料。有效實施的加密方法應提供針對受損訪問(導致資料被盜)的完全安全保障。
加密最基本的工作原理是加密器用其他字元替換字母、數字和符號,以建立密碼。對於非密碼學家或黃道十二宮的粉絲來說,密碼是代表原始訊息的字元集,在此案例中,是原始資料。此密碼的建立者持有加密金鑰,該數字描述了編碼密碼的方法。現代加密比簡單的字元交換複雜得多。大多數現代實現會將明文轉換為由文字、影像和二進位制大物件形式的位元組塊或位元組流組成的密文。如果沒有此金鑰,計算機或人無法讀取實際資料,任何未經授權的資料也無法正確呈現。
加密型別
加密方法通常分為兩類:對稱金鑰加密和非對稱加密。它們的定義是
- 對稱加密 - 一種加密金鑰和解密金鑰相同(對稱)的方法
- 非對稱加密 - 一種也稱為公鑰密碼學的方法,它建立兩個不同的金鑰,即私鑰和公鑰,它們不相同。公鑰可以與任何人共享,而私鑰只能與授權人員共享。公鑰可用於加密只能由私鑰解密的資料。
這兩種方法根據資料狀態都有一些固有的漏洞,但它們彌補了RBAC遺漏的問題,例如網路監聽和資料盜竊。正是這種保障,MongoDB根據資料狀態在其資料庫中同時採用了這兩種方法。
傳輸中加密
傳輸中加密是指在資料從一個點移動到另一個點時對其進行保護。資料在傳送前被加密以進行其“旅程”,然後在接收點解密和驗證。最好的視覺化方式是想象資料是乘坐裝甲車從一個銀行分行運到另一個銀行分行以補充金庫的錢。
MongoDB Atlas支援傳輸層安全(TLS)和安全套接字層(SSL),透過為伺服器設定證書來保護應用程式客戶端與伺服器之間以及叢集內部的通訊。證書是一種用於證明私鑰所有權有效性的電子文件。證書確保資料在受信任的網路連線上進行加密傳輸,從而防止網路監聽活動,例如資料包嗅探或IP/DNS欺騙。
透過包含公鑰,我們看到MongoDB利用非對稱加密來保護傳輸中的資料。對稱加密需要透過某個通道在各方之間傳輸加密金鑰。單一金鑰在傳輸過程中必須保持安全,並且在此階段存在風險。非對稱加密理論上透過其公鑰解決了這種不安全的傳輸問題。加密通訊可以在沒有任何事先通訊的情況下進行。
透過使用公鑰加密,傳送者的訊息只能由預期接收者使用其私鑰解密。公鑰密碼學在傳輸中具有優勢,因為無需共享私鑰,並且使用簽名確保接收者可以驗證訊息來自受信任的傳送者。
非對稱加密的缺點是它比對稱加密花費更長時間,並且需要消耗更多的資源才能實現。如果你的資料沒有在裝置之間或網路之間主動移動,那麼這些權衡就沒有必要,並且對稱加密提供了充足的安全性。
非對稱加密的一個潛在風險是,如果你的私鑰落入壞人之手,那麼你所有的訊息都可能被讀取。MongoDB透過前向保密密碼套件提供額外安全保障。這些套件建立一個由伺服器私鑰保護的臨時會話金鑰。此會話金鑰從不傳輸,它確保即使伺服器的私鑰被洩露,過去的會話也無法被洩露的私鑰解密。MongoDB支援臨時Diffie-Hellman (DHE)和臨時橢圓曲線Diffie-Hellman (ECDHE)演算法。
MongoDB Atlas使用Let’s Encrypt的已知證書,在透過訪問和身份驗證控制後,對啟用TLS的客戶端進行身份驗證。TLS協議透過在兩個或多個計算機應用程式之間使用證書來提供完整性和真實性。MongoDB可以使用此協議在網路上進行通訊,從而防止不必要的竊聽和篡改。你可以查閱MongoDB官方文件,瞭解客戶端的TLS配置。
靜態加密
靜態加密保護的是處於閒置狀態而非傳輸狀態的資料。你可以將靜態加密資料最佳地想象成銀行分支機構金庫中安全的錢。它不再傳輸到另一個分支機構,而是靜止在一個地方。這種靜態狀態避免了非對稱加密所解決的傳輸不安全性,因此對稱加密是一種強大的方法。
磁碟上的加密資料保持加密狀態,除非攻擊者獲得加密金鑰。靜態加密在物理驅動器丟失或被盜,或資料庫檔案暴露的情況下,保護敏感資料。
MongoDB靜態加密是一項企業版功能。這為你的資料庫增加了一層保護,確保用於儲存的寫入檔案只有在經過授權的程序或應用程式解密後才能訪問。
MongoDB Atlas預設對叢集中的每個節點提供內建的磁碟靜態加密。但是,你也可以從WiredTiger儲存引擎啟用額外的加密。此功能允許你使用首選的雲提供商的金鑰管理服務(KMS)。KMS是一種集中管理所有加密金鑰的實用程式。
MongoDB支援AWS、Azure和Google Cloud Platform的金鑰管理服務。對於那些不想僅僅依賴MongoDB的加密金鑰並希望掌握生成加密金鑰的所有權控制權的人來說,這是一個很棒的功能。
使用中加密
最後一種MongoDB加密型別是提供使用中加密的功能,即客戶端欄位級加密(CSFLE)。CSFLE允許工程師指定文件中應保持加密的欄位。敏感資料由客戶端加密/解密,並僅以加密形式與伺服器進行通訊。
此功能確保了伺服器和網路上加密所需欄位的安全性,這些欄位只能由適當的客戶端訪問。在任何時候,敏感資料都在資料庫主機上和網路傳輸中加密。安全責任轉移到客戶端。CSFLE防止了前文所述的所有漏洞:資料庫許可權濫用、網路竊聽、資料盜竊以及對資料庫主機記憶體的訪問。
輪換加密金鑰
對於靜態加密和客戶端欄位級加密,始終存在對稱金鑰被洩露的風險。就像你應該定期更改重要的網際網路賬戶密碼一樣,你也應該定期更改你的加密金鑰。這種做法就是輪換加密金鑰。
加密金鑰輪換對於資料庫管理員來說至關重要,因為它雖然不能萬無一失地防止金鑰被洩露,但它能極大地限制風險。如果金鑰被洩露,那麼很可能它在訪問敏感資料方面已經過時了。這是一項額外的維護任務,但最好是採用它而永不需用,而不是在沒有采用時被發現然後後悔。
MongoDB Atlas的靜態加密和CSFLE內建了針對你可能使用的每個KMS雲提供商輪換所需金鑰的指南
如果你是自託管MongoDB,有關於執行手動金鑰輪換的指南,以及MongoDB的Ops Manager和Cloud Manager平臺的相關指南。
結論
在本指南中,我們討論了資料加密日益增長的重要性以及許多資料安全漏洞。MongoDB中資料經過加密,以確保其在任何狀態下的安全,無論是閒置、傳輸中還是使用中。
隨著越來越多的資料進入數字宇宙,越來越多的威脅正試圖訪問它。所有組織都應採取一切預防措施來保護寶貴資訊。MongoDB提供了一套加密安全功能,最好在需要之前就對其有所瞭解。
如果你正在使用MongoDB,請檢視Prisma的MongoDB聯結器!你可以使用Prisma Client自信地管理生產環境的MongoDB資料庫。
要開始使用MongoDB和Prisma,請檢視我們的從零開始指南或如何新增到現有專案。


