Encryption

使用相同的 RSA 密鑰對進行簽名和加密

  • May 17, 2019

RSA簽名操作與使用私鑰加密基本相同。特別是,這兩個操作都使用相同類型的鍵。

使用相同的 RSA 密鑰對進行加密/解密和簽名/驗證是否安全?

簡短的回答是否定的。這是密碼學中的普遍智慧:永遠不要將同一個密鑰用於多件事。“事物”是指一種特定的方案,其中除了密鑰本身和消息大小之外,所有參數都是固定的。不要使用相同的密鑰進行加密和簽名;不要對 PKCS#1v1.5 和 PSS 使用相同的密鑰;不要使用具有不同雜湊函式的相同密鑰。

如果您使用原始RSA 操作( $ M^d \bmod n $ 或者 $ M^e \bmod n $ ),那麼不,使用相同的密鑰是不安全的,因為攻擊者可以欺騙私鑰持有者簽署消息[Math Processing Error] $ M $ (即產生[Math Processing Error] $ M^d $ ) 這實際上是一條加密消息 ( $ M = P^e $ ),從而允許攻擊者恢復原始明文 ( $ (P^e)^d = P $ )。(雙重攻擊導致偽造。)但是,原始 RSA 操作具有一系列其他缺陷,使其作為加密或簽名方案不安全。

基於 RSA 的加密和簽名方案使用填充模式。標準填充模式包括判別式,因此加密有效負載看起來不像簽名有效負載。因此,從密碼學上講,使用相同的 RSA 密鑰對進行簽名和加密在技術上是安全的,前提是該密鑰對被安全地用於簽名並安全地用於加密。在這裡,我的意思是狹義的安全,假設一個“完美”的世界,所有應該保密的東西都保持秘密。

問題是,這個世界並不完美。RSA 的實現可以通過邊通道洩漏部分資訊。密鑰被洩露。使用 RSA 的協議有時會以非常脆弱的方式使用它。

對加密和簽名使用相同的密鑰會加劇弱點。RSA 有一個弱點的歷史,不是在數學算法本身(一旦你使用適當的填充),而是在它的實現方式上。尤其是解密,需要非常小心,因為某些輸入是無效的,而僅僅揭示輸入是否有效的行為就可能導致預言機攻擊,其中最著名的是BleichenbacherTLS中使用RSA解密的方式¹加劇了這一點,因為它產生了無效的第二個原因:密文可能對解密操作無效,或者可能對解密有效但解密為無效的東西。這導致了針對使用 RSA 解密的 TLS 密碼套件的一系列實際攻擊。對加密和簽名使用相同的密鑰有兩個缺點。最明顯的是,如果解密中的漏洞允許攻擊者恢復密鑰,那麼任何依賴簽名的東西也會被破壞。不太明顯的是,即使攻擊者無法恢復密鑰,但可以獲得一些關於解密無效密文的部分資訊,他們也可能能夠偽造簽名。例如,CAT就是這種情況Bleichenbacher 攻擊的變種,因此即使伺服器使用相同的密鑰用於 RSA 簽名密碼套件,即使不接受 RSA 解密密碼套件的客戶端仍然存在風險。

另一個原因是密鑰管理。簽名密鑰和加密密鑰在備份、訪問控制、否認等方面有不同的要求。簽名密鑰在發生災難性事件時的回退是銷毀它以避免將來偽造,因此不需要簽名密鑰廣泛備份。相反,加密密鑰的回退是保留它以解密現有文件,因此需要可靠地備份它。萬一簽名密鑰洩露,原有文件不受影響;只有新產生的簽名必須被否定。相反,如果加密密鑰洩露,所有預先存在的文件的機密性都會受到威脅,而新文件只需要使用不同的密鑰進行加密。約束向不同的方向推進,

¹即名稱以 . 開頭的密碼套件TLS_RSA_。名稱以TLS_(EC)DH(E)_RSA使用 RSA 簽名而不是 RSA 解密開頭的密碼套件,並且更加健壯。

簡短回答:不,這不安全,不要這樣做。

更長的答案:您確實可以將 RSA 密鑰對用於這兩個操作。這種方法用於許多應用程序和場景。有 Web 服務或單點登錄實現,它們強制您對兩個操作使用相同的密鑰對。X.509 證書不允許您(預設情況下)確定是否必須使用給定的 RSA 密鑰進行加密/解密或簽名/驗證。只能使用特定的擴展或證書欄位來強制執行此操作,這不是強制性的……

但是,在密碼學中,對兩個操作使用相同的密鑰通常是一種非常糟糕的做法。例如,如果其中一個操作被洩露,它可能會破壞使用相同密鑰的其他操作的安全屬性。

RSA 密鑰設置中有一個實際範例。想像一個伺服器,它解密密文並使用 RSA 密鑰對消息進行簽名。想像一下這個伺服器容易受到特定的選擇密文攻擊(Bleichenbacher 的攻擊),它允許攻擊者在不知道伺服器私鑰的情況下解密任意密文。如果伺服器使用相同的 RSA 密鑰對進行加密/解密和簽名/驗證,則攻擊者也可以使用此攻擊創建任意伺服器簽名。如果伺服器對這些操作使用不同的 RSA 密鑰對,這將是不可能的。

請參閱我們的論文了解更多詳細資訊:http ://www.nds.ruhr-uni-bochum.de/research/publications/backwards-compatibility/ 第 4 節討論了公鑰設置中的密鑰重用問題。第 5.3 節展示了這些攻擊及其影響的實際範例。第 5.4 節和第 5.5 節討論了不同供應商的對策及其應用。

引用自:https://crypto.stackexchange.com/questions/12090