Encryption

多人多密鑰文件加密的數學解釋

  • March 20, 2019

假設我想加密一個只有 John、Mike 和 Dave 才能閱讀的文件。這可以通過 PGP/GPG 輕鬆完成:

  1. 導入 John、Mike 和 Dave 的公鑰
  2. 使用這些密鑰加密文件,並將其發送給他們
  3. 他們每個人都可以使用自己的私鑰解密文件。

我不明白這背後的數學原理。如何使用超過 1 個密鑰加密數據?當我在校園學習密碼學時,我學習了 RSA 的基礎知識,但僅限於有人使用我的公鑰為我加密文件,然後使用我的私鑰解密它。從未嘗試為多人這樣做。

PGP(就像幾乎任何可以使用公鑰進行批量數據加密的軟體一樣)所做的是混合加密。基本上,它為對稱密碼(例如AES)生成一個隨機密鑰,用該隨機生成的密鑰加密文件,然後用接收者的公鑰加密隨機密鑰並將其附加到加密文件中。解密時,它首先使用接收者的私鑰解密附加到文件的加密對稱密鑰,然後使用該對稱密鑰解密文件的實際內容。

維基百科關於 PGP 的文章有一個很好的圖表來說明這個過程:

說明 PGP 工作原理的圖表,來自 Wikimedia Commons

來自 Wikimedia Commons 的圖表,由“xaedes & jfreax & Acdx”提供;在CC By-SA 3.0 許可下使用。

混合加密如此廣泛使用的主要原因之一是,在加密大量數據時,像 AES 這樣的對稱密碼往往比像 RSA 這樣的非對稱密碼快很多(例如,數百或數千倍)。但它還有許多其他方便的功能——特別是,它很容易擴展該過程以允許多個接收者,只需製作隨機對稱密鑰的多個副本,用不同的接收者的公鑰加密每個副本,並將所有這些加密密鑰附加到消息中。然後,接收者只需要找到正確的加密密鑰(例如,基於附加的元數據,或者甚至只是嘗試所有這些,直到他們找到一個可以解密為合理且一致的密鑰),對其進行解密,然後繼續用它解密數據。

如果您知道它在兩方之間是如何工作的,那麼您可以將其擴展到多個收件人。這裡重要的是您必須單獨加密消息。

當然,如何實現這一點有多種可能性,這裡有兩個簡化的例子:

非對稱加密

  1. 導入 John、Mike 和 Dave 的公鑰
  2. 使用他們的公鑰單獨加密消息(不要加密消息兩次)
  3. 將加密的消息發送給收件人
  4. 收件人(John、Mike 和 Dave)可以使用他們自己的私鑰解密消息

對稱加密

  1. 創建對稱密鑰,即用於 AES
  2. 使用此密鑰加密消息
  3. 將加密消息發送給收件人
  4. 分別用接收者的公鑰加密對稱密鑰
  5. 將加密密鑰發送給收件人
  6. 接收者可以使用自己的私鑰解密對稱密鑰
  7. 收件人現在可以使用對稱密鑰解密消息

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