全部產品
Search
文件中心

Key Management Service:使用KMS密鑰進行信封加密

更新時間:Jul 06, 2024

當您的自建應用程式需要加密大量資料或者您不希望上傳資料到阿里雲Key Management Service(Key Management Service)時,可以使用信封加密。本文介紹如何使用KMS實現對資料的信封加密。

適用的密鑰類型

軟體密鑰、硬體密鑰。

重要

軟體密鑰、硬體密鑰、預設密鑰中的服務密鑰和主要金鑰均可進行信封加密,但預設密鑰中的服務密鑰和主要金鑰僅用於雲產品服務端加密,不能用於使用者自建應用加密,軟體密鑰、硬體密鑰不僅可用於雲產品服務端加密,也可用於使用者自建應用加密。

本文僅介紹使用者自建應用進行信封加密的情境,關於雲產品服務端加密,請參見雲產品整合KMS加密概述

什麼是信封加密

KMS信封加密是類似數位信封技術的一種加密手段。使用KMS信封加密時,KMS為您產生資料密鑰並使用您的KMS金鑰組資料密鑰進行加密,然後將資料密鑰明文和密文安全地傳遞給您的應用程式。您的應用程式使用資料密鑰明文來加密資料,並將資料密文和資料密鑰密文儲存起來。解密資料時,應用程式首先請求KMS對資料密鑰密文解密得到資料密鑰明文,然後使用資料密鑰明文對資料密文解密。

信封加密流程

應用程式通過KMS執行個體SDK調用GenerateDataKey介面產生資料密鑰,然後通過第三方密碼演算法庫或密碼模組產品使用資料金鑰組資料進行加密,最後將資料密鑰密文作為信封和資料密文組裝在一起。具體流程見下圖。image..png

  1. 應用程式調用GenerateDataKey介面,傳入如下資訊用於產生資料密鑰。

    • KeyId:您建立的密鑰的KeyId或別名。

    • NumberOfBytes:資料密鑰的長度。從安全形度考慮,推薦您設定為24位元組及以上長度。

      說明

      常用的對稱式加密演算法中,AES演算法加密需要16位元組、24位元組或32位元組的資料密鑰,3DES演算法加密需要16位元組或24位元組的資料密鑰。

  2. 應用程式收到KMS返回的資料密鑰,其中包含資料密鑰明文、資料密鑰密文、加密參數(包含密碼編譯演算法以及加密後的初始向量IV)。

    資料密鑰密文是由GenerateDataKey介面中傳入的祕密金鑰加密資料密鑰明文產生的,其中加密模式為GCM。

  3. 應用程式使用資料密鑰明文在本地對資料進行加密得到資料密文。

    重要
    • 使用資料密鑰明文在本地對資料進行加密、解密時,您可根據應用程式語言的適用性、安全合規方面的要求自主選擇第三方密碼演算法庫或密碼模組產品。

    • 使用資料密鑰明文加密完成後,請您及時將資料密鑰明文銷毀。

  4. 應用程式將資料密文、資料密鑰密文、KMS的密鑰(即用於產生資料密鑰的密鑰)和加密參數(包含產生資料密鑰時的密碼編譯演算法以及IV)進行儲存。

信封解密流程

應用程式通過KMS執行個體SDK調用Decrypt介面解密資料密鑰密文,得到資料密鑰明文,然後通過第三方密碼演算法庫或密碼模組產品使用資料密鑰明文對資料密文進行解密,得到資料明文。具體流程見下圖。

image..png

  1. 應用程式讀取資料密文、資料密鑰密文、KMS的密鑰(即加密資料密鑰的密鑰)和加密參數(包含產生資料密鑰時的密碼編譯演算法以及IV)。

  2. 應用程式調用KMS的Decrypt介面並傳入上一步讀取的資訊,用於解密資料密鑰密文。

  3. 應用程式收到KMS返回的資料密鑰明文。

  4. 應用程式使用資料密鑰明文在本地對資料密文進行解密,得到資料明文。

應用情境

典型情境包括(但不限於):

  • 使用者自建應用程式加密多個業務資料檔案,且每個資料檔案需要使用不同的資料密鑰。

    需要加密多份資料檔案且資料量很大時,如果使用單個或少量密鑰直接加密這些資料,會增加密鑰被破解的風險。通過採用KMS信封加密技術,分別使用新產生的資料密鑰來加密各份資料,僅使用您在KMS中的密鑰來加密資料密鑰,很大程度提升加密方案安全性。

  • 使用者自建應用程式單次加密大量資料,例如:全磁碟資料。

    單次加密資料量巨大時,如果由業務應用伺服器通過網路安全通道傳遞到KMS,由KMS加密後再返回給使用者,大量的資料網路傳輸會帶來較高的成本和延時,使用信封加密可以解決這些問題。

使用限制

使用者自建應用程式通過KMS進行信封加密時,僅可使用軟體密鑰管理執行個體或硬體密鑰管理執行個體中的對稱金鑰,可選擇的密鑰規格如下。

  • 軟體密鑰管理執行個體:Aliyun_AES_256。

  • 硬體密鑰管理執行個體:Aliyun_AES_256、Aliyun_AES_192、Aliyun_AES_128或Aliyun_DES3_192

準備工作

應用開發樣本

說明

範例程式碼中資料密鑰採用32位元組(256位)的AES密鑰,且對資料進行加密時採用GCM加密模式。

Java

樣本中使用SunJCE Provider密碼庫對資料加密、解密 。

信封加密,請參見信封加密範例程式碼

信封解密,請參見信封解密範例程式碼

Python

樣本中使用cryptography.hazmat密碼庫對資料加密、解密。

信封加密和解密,請參見信封加密和解密範例程式碼

Go

樣本中使用golang/crypto密碼庫對資料加密、解密。

信封加密和解密,請參見信封加密和解密範例程式碼

PHP

樣本中使用OpenSSL密碼庫對資料加密、解密。

信封加密和解密,請參見信封加密和解密範例程式碼

相關文檔

雲產品整合KMS加密概述