Rsa

非對稱或對稱加密

  • December 12, 2019

我目前正在研究 OpenSSL 及其 API,但我對密碼學並不熟悉。因此,我正在查看有關信封非對稱加密的範例。它說消息是用會話密鑰對稱加密的,然後用實際的非對稱密鑰加密。然後我的問題是會話密鑰是如何生成的,以及我如何在其他程式語言中搜尋以找到這個概念。

Alice 可以使用 CSPRNG 生成會話密鑰。Alice 和 Bob 已經擁有不變的靜態密鑰對。Alice 和 Bob 將創建臨時密鑰對,這些密鑰對是每個會話新生成的。

然後 Alice 用她的靜態私鑰簽署她的臨時公鑰並將其發送給 Bob - 這個公鑰不必以任何方式加密,因為它是公鑰。Bob 收到此資訊,並使用 Alice 的靜態公鑰驗證簽名。Bob 使用相同的協議,因此 Alice 可以擁有他的臨時公鑰。

現在有兩種方法可以實現 - KEX(密鑰交換)或 KEM(密鑰封裝機制)。

對於 KEX,Alice 和 Bob 都使用 DH(E) 或 ECCDH(E) 將自己的臨時私鑰與其他公鑰結合起來。這使它們都具有相同的共享密鑰,可以通過 HKDF 傳遞該密鑰以創建具有所需長度的正確格式的對稱密鑰。

對於 KEM,Alice 將創建一個所需長度的對稱密鑰,用她的靜態私鑰對其進行簽名,然後用 Bob 的臨時公鑰對其進行加密,並將其發送給 Bob,後者可以解密並驗證他們的密鑰。為此必須使用 RSA。

對於程式語言,通常有一個用於偽隨機數 (PRNG) 和用於加密安全偽隨機數生成器 (CSPRNG) 的模組。在 Python 中,random 模組是 PRNG,secrets 模組或 os.urandom 是 CSPRNG。對於密碼學,有 PyCryptodome 或密碼學等。

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