AEAD 中的“身份驗證”實際上是身份驗證嗎?還是消息完整性?
儘管與 AES-GCM 和其他 AEAD 算法合作了幾年,但我一直在為“AEAD”一詞中的“認證”概念而苦苦掙扎。根據我自己的經驗(Unix、PKI 和區塊鏈),身份驗證意味著能夠將操作歸因於特定實體(例如,使用者帳戶)。在最簡單的情況下,比如在 Linux 機器上進行身份驗證,登錄將使用
pam_unix
Pluggable Authentication Module 來檢查使用者提供的密碼,經過雜湊處理後,與儲存在 Linux 系統上的雜湊值匹配。您還可以通過指紋或面部匹配等對使用者帳戶進行身份驗證。在每種情況下,身份驗證都意味著能夠將該登錄或解鎖操作歸因於單個實體(例如使用者帳戶)。甚至
authentication
crypto.stackexchange.com 上的標籤也寫著:身份驗證成功驗證您正在與之通信的實體實際上是他們聲稱的實體。該實體通常通過表明他們擁有一個只有他們才能知道的秘密來證明他們是誰。
而
authenticated-encryption
標籤上寫著:以確保機密性和完整性的方式結合加密和身份驗證。
根據標籤
authenticated-encryption
中提供的定義,定義中沒有身份驗證。authentication
想知道 AEAD 中“身份驗證”的確切位置一直困擾著我多年,我最近花了一些時間進行調查。這段來自 F5 的影片“什麼是 AEAD 密碼?” 在 2:30 分鐘左右有一些有用的部分:
經過驗證的加密,即“AE”的 A 部分,帶來了另一部分,即消息本身的完整性
A部分,認證加密,帶來完整性
無論是誰發送此消息,我都需要確保該消息未被更改或篡改
‘Authenticated Encryption’意義上的’authentication’是否僅僅意味著’消息完整性’而不是大多數密碼學,資訊安全和Unix人們會使用的’authentication’?
一些後續問題:
- 如果“已驗證”僅表示“具有消息完整性”:“消息完整性”如何以及為什麼與“身份驗證”混淆?這種看似不常見的“身份驗證”定義在技術社區中似乎很不尋常,因為這些詞具有非常特定的含義。
- 如果“已驗證”實際上意味著常識中的“已驗證”(我現在懷疑它不是),那麼 AEAD 消息如何歸因於特定實體?
問題中所述的身份驗證概念似乎與有時稱為實體身份驗證的內容更兼容。簡而言之,“你知道你在和誰說話。” Bellare & Rogaway在密鑰交換協議的背景下討論了這個問題。相比之下,AEAD 方案提供消息認證。正如其他答案中所討論的,消息身份驗證意味著消息完整性和消息源的“身份驗證”。
但是,AEAD 的源身份驗證不一定且通常與實體身份驗證不同。它確實告訴誰持有密鑰的人在某個時候產生了消息。但它沒有說:
- 對於某種身份概念,那個人到底是誰?事實上,假設密鑰是使用通常的Diffie-Hellman協議派生的。當然,任何收到的密文都來自參與密鑰交換的任何人,但如果他們聲稱是 Alice,AEAD 不會告訴我們這是不是真的。
- 消息“直接”來自源。事實上,竊聽者可能會重放現有的密文。因此,接收密文並不一定保證我們與共享密鑰的消息進行“直接”通信。
事實上,關鍵是我們必須仔細考慮什麼是身份驗證。順便說一句,實體認證也不一定能保證AEAD的“認證”。因此,需要仔細的構造。