[英]C Client AES 128 GCM encryption with openssl and server decryption inside Intel SGX with rijndael 128 GCM
我想使用 Openssl AES 128 GCM 在客戶端加密數據,並使用 rijndael 128 GCM 在 Intel SGX 內的服務器端解密這些數據。 我可以在 sgx_aes_gcm.cpp 中看到它使用與 Openssl 相同的函數。
我可以想象 EVP_CIPHER_CTX_ctrl(pState, EVP_CTRL_GCM_GET_TAG, 16, tag) function 生成的標簽是解密成功所必需的。
所以我的問題是,如何將標簽從客戶端傳輸到服務器,以便成功驗證和解密數據?
我對上述場景做了一些測試,但 sgx 端的解密失敗
關於 AES-GCM
AES with Galois/Counter Mode (AES-GCM) 提供經過身份驗證的加密(機密性和身份驗證)以及檢查以明文形式發送的附加身份驗證數據 (AAD) 的完整性和身份驗證的能力。
經過身份驗證的加密有四個輸入:密鑰、初始化向量(IV)(有時稱為隨機數†)、明文本身和可選的附加身份驗證數據 (AAD)。 nonce 和 AAD以明文形式傳遞。 有兩個輸出:與明文長度完全相同的密文和一個身份驗證標簽(“標簽”)。 該標記有時稱為消息驗證碼 (MAC) 或完整性校驗值 (ICV)。
來源: https://www.cryptosys.net/pki/manpki/pki_aesgcmauthencryption.html
關於英特爾 SGX 方法
根據 SGX SDK for Linux, sgx_rijndael128GCM_decrypt
需要一個sgx_aes_gcm_128bit_tag_t
* 作為它的最后一個參數。
function arguments 描述將此 arguments 指定為:
p_in_mac [in] 這是在加密過程(調用 sgx_rijndael128GCM_encrypt)期間對輸入數據緩沖區(要加密的數據)以及附加身份驗證數據(這是可選數據)執行的 GCM MAC。
MAC(消息驗證代碼)由加密過程生成,並與初始化向量 (IV) 和數據本身一起發送到服務器。 Intel自己提出的一種典型的架構方式是:
* Encrypted data: | MAC | IV | AES128(data)
* Buffer size: 16 12 size(data)
* Ranges:
* MAC reference: &data : &data+16
* IV reference: &data+16 : &data+16+12
* AES128(data) ref: &data+12+16 :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.