實現思路
加密特性的方案,涉及如下設計點:
- 金鑰的用途
- 加密的位置
- 加密的演算法
- 加密金鑰的使用
- 加密金鑰的管理
金鑰的用途
金鑰的用途分為管理金鑰和資料金鑰。
管理金鑰用於加密資料金鑰,需要定期更換,更換成本低;假如管理金鑰丟失,則導致資料金鑰無法解密,從而丟失資料。
資料金鑰用於加密資料,需要妥善管理,使用資料金鑰加密資料後,如果丟失資料的加密金鑰,則導致丟失資料。
資料金鑰的生命週期一般和物件的生命週期保持一致。
加密的位置
包括客戶端和服務端。
客戶端加密
方案一,加密操作完全由客戶端自行實現。
使用客戶自定義的加密方式、加密演算法、加密金鑰,對資料進行加密,相關實現由客戶的開發團隊提供。
此時演算法、金鑰均可由客戶端管理,物件儲存完全不感知相關操作。
方案二,加密操作由物件儲存客戶端SDK提供,客戶應用負責整合SDK。
此時演算法、金鑰等,可以由物件儲存的客戶端SDK管理,也可由客戶應用管理。
服務側加密
使用服務側提供的方式,在資料持久層完成加密、解密操作,客戶端上傳、下載時均訪問明文。
客戶和服務同時提供加密
可以在客戶端、服務端同時實現加密特性,對於資料的安全提供雙重的保障,當然引入了更多的管理成本,更多的算力的需求。
加密演算法
對於儲存系統而言,可行的演算法比如AES-XTS
、AES-GCM
等。
金鑰的長度,比如128、256等。
參考資料如下:
- XTS-AES模式主要是解決什麼問題,是怎樣解決的?
- AES-GCM 加密簡介
- 簡單學習一下AES演算法:GCM、ECB、CFB、OFB等
加密金鑰的使用
主要考慮加密金鑰的使用範圍,對於物件儲存而言,資料金鑰的影響範圍,比如可以有
- 租戶,即租戶下所有的桶,均使用本金鑰。
- 子使用者,即子使用者下所有的桶,均使用本金鑰。
- 桶,即桶下的所有物件,均使用本金鑰。
- 物件,按照物件來指定加密的金鑰。
加密金鑰的管理
實現方案需考慮如下幾點:
- 管理角色
- 儲存位置
- 輪換策略
金鑰的管理職責,可由客戶端、物件儲存服務、第三方金鑰管理服務來承載。
在上述方案做出選擇後,決定了金鑰的儲存服務和輪換策略。
參考資料
AWS S3
- Protecting data with encryption
- Protecting data with server-side encryption
- Amazon S3 now automatically encrypts all new objects
- Using server-side encryption with Amazon S3 managed keys (SSE-S3)
Amazon S3 now applies server-side encryption with Amazon S3 managed keys (SSE-S3) as the base level of encryption for every bucket in Amazon S3. Starting January 5, 2023, all new object uploads to Amazon S3 are automatically encrypted at no additional cost and with no impact on performance.
- Using server-side encryption with AWS KMS keys (SSE-KMS)
- Using dual-layer server-side encryption with AWS KMS keys (DSSE-KMS)
- Using server-side encryption with customer-provided keys (SSE-C)
- Protecting data by using client-side encryption
華為雲
- 服務端加密簡介
- 服務端加密SSE-KMS方式
- 服務端加密SSE-OBS方式
- 服務端加密SSE-C方式
- 與服務端加密相關的介面