Rsa
通過 PKCS#11 進行 RSA 混合解密 - 解包還是解密?
我有一個執行 RSA 混合加密/解密的應用程序 - 即,消息使用新的 AES 密鑰加密,然後它本身使用 RSA-OAEP 加密並與消息一起發送。然後解密進行相反的操作。
我現在想通過 PKCS#11 為硬體安全模組 (HSM) 提供支持。(應用程序是用 Java 編寫的,所以這實際上是通過一些包裝器,例如預設的 SunPKCS11 庫)。我可以看到實現解密的兩個選項:
- 使用 HSM 解密臨時 AES 密鑰並將該密鑰的原始字節返回給我的應用程序,然後在記憶體中進行 AES 解密。
- 使用 HSM 將 AES 密鑰“解包”為(敏感)會話對象,然後使用 HSM 執行 AES 解密。
我的直覺是,在帶有 AES-NI 指令的伺服器上,選項 1 通常比選項 2 更快。由於 AES 密鑰對於每條消息都是唯一的,因此它似乎也不安全 - 因此 AES 密鑰並不比消息本身更敏感。
有什麼理由更喜歡選項 2?我唯一的想法是,如果客戶在符合 FIPS 的 HSM 上花了很多錢,那麼出於合規原因,他們可能希望在設備上執行*所有加密。*這是一個可能的情況嗎?
AES 僅用於保護數據。儘管將 AES 密鑰保存在 HSM 中更安全,但您需要記住,沒有什麼理由比數據本身更好地保護它。
但是,如果您不需要速度,為什麼不選擇 HSM 選項呢?至少您可以合理地確定密鑰是安全的,沒有旁道攻擊並且算法將按設計執行(例如,關於 IV 的隨機生成、自檢、密鑰的破壞等) .
因此,如果您需要速度、HSM 資源或低延遲,請在軟體中使用 AES。否則,如果您不需要,請在 HSM 中使用 AES 密鑰。