是否有經過身份驗證的加密方案,收件人可以將消息歸因於單個發件人?
使用標準的認證加密方案(或 MAC),Alice 和 Bob 共享一個對稱密鑰。當愛麗絲向鮑勃發送一些東西時,鮑勃可以檢查它是否真實。此時,Bob 可以推斷該消息一定是由知道密鑰的人發送的,即它一定是由 Alice 或 Bob 發送的。
Bob 如何驗證消息是由 Alice 發送的?(不是愛麗絲或鮑勃)
特別是,標準認證加密僅證明消息來自受信任組(知道對稱密鑰的人)中的某個人。我想要一個收件人可以驗證哪個人發送它的方案。
換句話說,我想獲得 AE 的所有目前保證,以及驗證發送消息的實體的能力(只有一個特定實體必須能夠驗證文件,除非他們的密鑰被洩露)。如果它需要使用公鑰技術也可以。理想情況下,這種模式將是單通道(如 OCB),但希望不會受到專利保護或 GPL 污染(LGPL 或更弱的也可以)。獲得經過身份驗證的關聯數據將是一個獎勵。
或者我只需要加密(使用普通隨機模式,僅提供機密性)然後簽署密文+相關數據(提供完整性、身份驗證和發送者的知識)?
僅密碼學就可以提供不可否認性的想法是一個神話。我意識到這是在許多加密教科書中教授的內容——但教科書是錯誤的。
我可以建議一些結構(例如,簽署消息,將簽名附加到消息,然後使用經過身份驗證的加密操作模式對其進行加密):但這沒有意義,因為這些結構都不能單獨提供不可否認性。特別是,提供不可否認性最難的部分與密碼學或數學無關。它們與法律方面以及端點安全有關。
**編輯(11/20):**問題已得到澄清,以明確表示它不是尋求不可否認性,而只是知道消息來自單一方。好的,那麼,這是一種構造:對消息進行簽名,將簽名附加到消息中,然後使用經過身份驗證的加密操作模式對其進行加密。
您也可以使用經過身份驗證的加密對消息進行加密,然後對密文進行簽名,但我不推薦這樣做。它可以工作,但在某些情況下它有一些微妙的缺陷,因為簽名並不能證明發送者知道明文的上下文。例如,假設 Alice 的 SSH 客戶端發送消息“親愛的 SSH 伺服器,請將我的公鑰附加到
/root/.ssh/authorized_keys
– 你可以知道我已獲得授權,因為我知道 root 密碼是 lk23jas0”(加密然後用 Alice 的公鑰簽名),如果 root 密碼正確,SSH 伺服器會對其進行操作。然後 Bob 可以竊聽,擷取此消息,剝離 Alice 的簽名,用他自己的公鑰對密文進行簽名,然後將其發送到 SSH 伺服器,即使 Bob 沒有,也可以獲得根級別的訪問權限。