Public-Key
多方加密算法
提供一些前景資訊:我承認我是密碼學新手,絕不是專家(可能永遠不會)。
在最近的 CS 課程中,我們有幾項作業是編寫和實現 RSA 和 Diffie-Hellman。這很有趣,但它完全是兩方加密。我想實現多方加密。例如,在聊天室或 IRC 場景中,所有相關方同時相互發送密文。環顧四周,我發現有幾個庫在其他問題中實現了這一點。但不僅僅是一般的算法。
我可以想像這樣的事情在 RSA 中實現,並向每個人發送公鑰,同時為每個其他成員加密和解密多個消息。例如,3 個人在一個聊天室中。A 人發送“Hello Guys”兩個獨特的密文消息,B 人和 C 人收到並分別用他們自己的私鑰解密。這會起作用,但這似乎效率低下且有些隨意。
是否有一種普遍接受的算法允許多方同時使用公鑰加密?
(再一次,這不會進入任何生產級系統。這只是出於我自己的學術好奇心。)
通常所說的“組加密”並不是你所追求的。組加密算法努力實現以下目標:給定消息被加密,並且只有在足夠多的組成員協作時才能解密。這不是你所尋求的;你想要的是一個系統,這樣一個給定的消息可以被加密一次,並且接收組的每個成員都可以獨立於所有其他人解密它。
您想要的技術術語是廣播加密。一個特定且極具挑戰性的案例是在藍光光碟中完成的操作,稱為AACS。即:
- 每個藍光閱讀設備都有自己的私鑰。
- 光碟內容應該只能由允許的設備(這是“接收者組”)讀取,但它們有數十億。
- 在光碟中包含特定於每個目標設備的一些數據是不切實際的(每個人都使用同一張光碟,目標設備太多)。
- 通信是單向的(設備離線,所以光碟內容必須足夠)。
- 媒體製作者希望保留一些“撤銷能力”,以便某些已知的“破解”設備無法讀取新光碟的內容,同時仍然可以被其他設備讀取(這是關鍵點)無法以任何方式“更新” (因為他們沒有網路能力)。
對於小團體(作為聊天伺服器,只有幾十個收件人),問題相當簡單:
- 讓每個組成員擁有一個公鑰/私鑰對。
- 通過向每個成員發送用他的公鑰對K進行的加密,製作一個對稱組密鑰K ,所有成員都知道。
- 要添加組成員,只需向他發送用他的公鑰加密的K。
- 要刪除組成員,由於無法強制遺忘,您必須創建一個新的組密鑰*K’*並將其發送給所有剩餘的成員。
該系統中最大的成本是組密鑰更新,僅在必須刪除成員時才需要,並且成本與組的大小成正比(具有 2048 位密鑰的 RSA 加密值是 256 字節,即非常可以容忍,只要群體不超過幾百人)。