簽署 RSA 加密數據的好處?
我最近看到了這篇(PDF)期刊文章,它描述了它所謂的“混合加密算法的新設計”(我必須說,即使在 2014 年,這聽起來也不是很新穎!):
K
選擇了 AES 密鑰M
使用 AES 和密鑰加密消息K
eM = AES-encryption(M)
3. AES 密鑰K
使用 RSA 和接收方的公鑰進行加密
eK = RSA-encryption (K)
4. 密文eM
被饋送到 SHA1,SHA1 生成一個 160 位的消息摘要
mD = SHA1 (eM)
5. 消息摘要使用 RSA 和發送者的私鑰進行簽名
DS = RSA-sign (mD)
6. 加密資訊eM
、數字簽名DS
和AES加密密鑰eK
通過網路傳輸給使用者。因此,基本上是標準的 AES-RSA 混合加密,但附加了一個 RSA 簽名(簽名的消息摘要),旨在提供消息身份驗證。
我的問題是,簽署密文是否真的提供了任何額外的安全性(即完整性或身份驗證)——用接收者的 RSA 公鑰加密 AES 密鑰是否有效地提供了消息身份驗證?
我的問題是,簽署密文是否真的提供了任何額外的安全性(即完整性或身份驗證)——用接收者的 RSA 公鑰加密 AES 密鑰是否有效地提供了消息身份驗證?
使用非對稱加密,您需要考慮兩種不同類型的消息身份驗證:
- **發件人身份驗證。**也就是說,收件人可以確定誰發送了給定消息。為此,您實際上需要簽名(或帶有預共享密鑰的 MAC),因為沒有簽名,攻擊者可以截取密文,丟棄它,然後加密不同的消息並發送。
- **收件人身份驗證。**也就是說,作為發件人,您實際上可以確保郵件到達預期的收件人。您基本上可以通過混合加密免費獲得它。
現在附註:給定的機制對密文進行簽名。最好對明文進行簽名,附加簽名並加密組合。有關詳細資訊,請參閱此問題:“我們應該先簽名後加密,還是先加密後簽名? ”。
至於如何理想地做事,讓我們來看看:讓 $ H $ 是輸出大小為 224 位的隨機預言機(例如由SHAKE128實例化)。讓 $ (n,e) $ 是一個 RSA 公鑰,讓 $ \operatorname{sign}{sk}(m) $ 可以是任何EUF-CMA 安全簽名方案(例如 ECDSA)。最後讓 $ E{K\parallel IV}(M) $ 表示使用 AES-128- GCM加密 $ K $ 和 $ IV $ , 返回 $ (c,\tau) $ . 那麼以下是加密和簽名消息的“正確”方式 $ m $ :
- $ r\xleftarrow{$}{0,…,n} $ ,即採樣一個小於的整數 $ n $ , 均勻地隨機呼叫它 $ r $ .
- $ c_1\gets r^e\bmod n $ ,即教科書RSA加密隨機值並呼叫結果 $ c_1 $ . 這是安全的,因為我們在這裡進行 RSA-KEM。
- $ m’\gets (m,\sigma=\operatorname{sign}_{sk}(m)) $ ,也就是給消息簽名,呼叫簽名 $ \sigma $ 並將其與消息配對(如果 $ \sigma $ 具有已知長度)並呼叫結果 $ m’ $ .
- $ k\parallel IV\gets H(r) $ ,即應用密鑰推導函式/隨機預言機/雜湊函式得到對稱加密的密鑰和IV。
- $ c_2\gets E_{k\parallel IV}(m’) $ ,即對消息進行加密和對稱驗證。
- 返回 $ (c_1,c_2) $ ,即返回一對 $ c_1 $ 和加密的消息。簡單的連接就足夠了,如果 $ c_1 $ 被左零填充到相同的長度 $ n $ .