DH 協定的安全性依賴於計算問題的困難性,尤其是第 9 章介紹的離散對數問題(DLP)。
顯然,DH 可以藉由從公開值 g^a 還原私密值 a 來攻破——那歸結為求解一個 DLP 實例。但用 DH 計算共享秘密時,我們在意的不只是離散對數問題,還有兩個 DH 專屬的問題。
計算型 DH 問題(CDH)#
CDH(computational Diffie–Hellman)問題是:只給定公開值 g^a 與 g^b(不給任何秘密值 a 或 b),計算出共享秘密 g^ab。
動機顯而易見:即使竊聽者擷取到
g^a與g^b,他們也不該能判定共享秘密g^ab。
與 DLP 的關係#
但我們不確定 CDH 是否至少與 DLP 一樣難(那會讓兩個問題等難)。
換句話說:DLP 之於 CDH,就如同因式分解問題之於 RSA 問題——因式分解讓你能解 RSA 問題,但反過來不必然成立。
安全等級#
DH 與 RSA 還有另一個相似之處:對給定的模數大小,DH 提供的安全等級與 RSA 相同。
例如採用 2048 位元質數
p的 DH 協定,安全性大致等同於採用 2048 位元模數n的 RSA——約 90 位元。這是因為我們所知攻破 CDH 最快的方法,是用數域篩法(number field sieve)求解 DLP——那與攻破 RSA(分解其模數)所用的最快方法**一般數域篩法(GNFS)**相似但不完全相同。
決定型 DH 問題(DDH)#
有時我們需要比 CDH 困難性假設更強的東西。
想像攻擊者能從 2048 位元的
g^a與g^b算出g^ab的前 32 個位元,但算不出全部 2048 位元。儘管 CDH 仍未被攻破(32 位元不足以完整還原
g^ab),攻擊者已經學到了關於共享秘密的某些東西,這仍可能讓他們危及應用程式的安全。
要確保攻擊者學不到任何關於共享秘密 g^ab 的東西,這個值只需要與一個隨機群元素不可區分——就像加密方案在「密文與隨機字串不可區分」時才安全一樣。
把這個直覺形式化的計算問題稱為決定型 DH 問題(DDH):
給定
g^a、g^b,以及一個要嘛是g^ab、要嘛是某個隨機c的g^c(各有 1/2 機率),判定被選中的是不是g^ab。「沒有攻擊者能有效率地解 DDH」這個假設稱為決定型 Diffie–Hellman 假設。
DDH 與 CDH 的關係#
- 若 DDH 困難,則 CDH 也困難,而且你學不到任何關於
g^ab的東西。 - 但若你能解 CDH,你也能解 DDH:給定三元組
(g^a, g^b, g^c),你能從g^a與g^b導出g^ab,檢查結果是否等於給定的g^c。
結論:DDH 在本質上比 CDH 沒那麼難,然而 DDH 的困難性是密碼學中的首要假設之一,也是被研究最多的假設之一。
當 Diffie–Hellman 參數選得好時,我們可以有信心 CDH 與 DDH 都是困難的。
更多 DH 問題#
有時密碼學家設計新方案,並證明破解它至少與求解某個「與 CDH 或 DDH 相關但不相同」的問題一樣難。
理想上我們希望證明「破解某密碼系統與求解 CDH 或 DDH 一樣難」,但對進階的密碼學機制而言這不總是可行——通常是因為這類方案涉及比基本 DH 協定更複雜的運算。
幾個 DH 變體問題:
- 給定
g^a,攻擊者試圖算出g^(1/a),其中1/a是a在群中的反元素。 - 對隨機的
a與b,攻擊者試圖區分(g^a, g^b)與(g^a, g^(1/a))這兩種配對。 - 孿生 Diffie–Hellman 問題:給定
g^a、g^b與g^c,攻擊者試圖同時算出g^ab與g^ac。
這類 DH 變體有時證明與 CDH 或 DDH 一樣難,有時則從根本上更容易——因而提供較低的安全保證。
一個練習:試著找出這些問題的困難性與 CDH、DDH 之間的關聯。(孿生 Diffie–Hellman 其實與 CDH 一樣難,但這並不容易證明!)