[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 安全技術 > 加密與破解 > 正文
PGP的安全性
本文出自: 作者: Loking (2001-06-25 20:10:00)
by Loking  01/23/1997

***************************************************************************

                            ■內容提要■

         ◎ 前言
         ◎ IDEA 的安全性問題
         ◎ RSA 的安全性問題
             ● 選擇密文攻擊
             ● 過小的加密指數 e
             ● RSA的計時攻擊法
             ● 其他對RSA的攻擊法
         ◎ MD5 的安全性問題
             ● 對MD5的普通直接攻擊
             ● 對MD5的生日攻擊
             ● 其他對MD5的攻擊
             ● 口令長度和信息論
         ◎ 隨機數的安全性問題
             ● ANSI X9.17 PRNG
             ● 用戶擊鍵引入隨機性
             ● X9.17 用MD5進行預洗
             ● randseed.bin 的洗操作
         ◎ PGP的密匙和口令的安全性問題
         ◎ 沒有完全刪除的文件
         ◎ 物理安全性
         ◎ 多用戶系統下的泄密
         ◎ PGP的時間標戳可靠性
         ◎ 流量分析
         ◎ 現實的PGP攻擊
            被動攻擊:
             ● 擊鍵窺探
             ● 電磁泄露窺探
             ● 內存空間窺探
             ● 磁盤緩存窺探
             ● 報文嗅探
            主動攻擊:
             ● 特洛伊木馬
             ● 篡改PGP代碼
         ◎ 結語

**************************************************************************

    這可能是個最難寫的題目了,PGP本身就是一個數據安全產品,它會有什安全

性問題呢?PGP的作者 Phil Zimmermann 在PGP文檔中說到:“沒有哪個數據安全

系統是牢不可破的。”PGP也不例外。我們研究它的安全漏洞就是為了讓用戶知道

哪些事會降低PGP的安全性,以及如何避免它們。下面是這些漏洞:


    口令或私匙的泄密、公匙被篡改、你刪除的文件被人恢復、病毒和特洛伊木馬、

物理安全受到侵犯(物理安全指計算機等物理資源的安全)、電磁泄露、暴露在多用

戶系統中、網絡數據流分析,甚至會有可能被直接從密碼學分析的角度被解密(這當

然是可能性最小的了)。


    我們先分別看看PGP加密體系的四個關鍵部分的安全性問題。PGP是個雜合算法,

所謂“雜合”體現在它包含:一個對稱加密算法(IDEA)、一個非對稱加密算法

(RSA)、一個單向散列算法(MD5)以及一個隨機數產生器(從用戶擊鍵頻率產生偽

隨機數序列的種子)。每種算法都是PGP不可分割的組成部分,對它們各有不同的攻擊

方式。




◎ IDEA 的安全性問題


    IDEA是PGP密文實際上的加密算法,對採用直接攻擊法的解密者來說,IDEA是

PGP密文的第一道防線。


    關IDEA的原理請參見《PGP簡介》,在這裡我主要談談與安全性有關的部分。

IDEA,一種由 Lai 和 Massey 在 1992 年完成的對64bit大小的數據塊的傳統加密算法。

IDEA是 International Data Encryption Algorithm 的縮寫。它基“相異代數群上的

混合運算”設計思想,它比DES在軟件實現上快得多,和DES一樣,它也支持“反饋加密

(CFB)”和“鏈式加密(CBC)”兩種模式,在PGP中採用IDEA的64-bits CFB模式。

IDEA比同時代的算法象:FEAL, REDOC-II, LOKI, Snefru 和 Khafre都要堅固,而且最

近的証據表明即使是在DES上取得巨大成功的 Biham 和 Shamir 的微分密碼分析法對IDEA

也無能為力。Biham 和 Shamir 曾對IDEA的弱點作過專門分析,但他們沒有成功。直到

目前沒有任何關IDEA的密碼學分析攻擊法的成果發表,據目前我接觸到的文檔中談到

無論是NSA還是hacker們都還沒有辦法對IDEA進行密碼學分析,因此對IDEA的攻擊方法就

只有“直接攻擊”或者說是“密匙窮舉”一種了。


    那對IDEA的直接攻擊難度如何呢?我們知道IDEA的密匙空間(密匙長度)是128

位,用十進制表示所有可能的密匙個數將是一個天文數字:

          340,282,366,920,938,463,463,374,607,431,768,211,456.


    為了試探出一個特定的密匙,平均要試探一半上面的可能性。即使你用了十億台每

秒鐘能夠試探十億個密匙的計算機,所需的時間也比目前所知的宇宙的年齡要長,而即

使是在當代制造每秒試探十億個密匙的計算機還是不可能的。因此對IDEA進行明文攻擊

也是不可能的,更何況從PGP的原理看一個IDEA的密匙失密只會泄露一次加密的信息,對

用戶最重要的密匙RSA密匙對的保密性沒有什影響。


    那看來IDEA是沒有什問題了,因為你既不能從算法中找到漏洞又沒法明文攻擊

實際上呢?漏洞還是有的,大家知道 Netscape 的安全性風波吧,就是因為忽視了密匙

隨機生成的問題,Netscape的隨機密匙生成算法生成的密匙很有“規律”,而且遠遠沒

有均布到整個密匙空間去,所以盡管Netscape的美國版採用128bits的密匙,還是被用

很小的機時代價破掉了。那PGP是不是也有這個毛病呢?我將在下面談到隨機數生成

時再詳細說,這裡提到它是為了說明PGP各個部分之間的依存關系。


    當有人發現PGP實際上不是一種“純粹的”RSA加密算法時,他們擔心由加密鏈中

IDEA的弱點而被攻破。實際上這是由一種誤解:他們認為公匙加密生來就比傳統加密

安全得多。實際上密碼分析專家計算過,窮舉128-bit IDEA密匙和分解3100-bitRSA密匙

的工作量相當,而實際上1024-bit的RSA密匙已被認為是機密級的,而且1024-bit的純粹

RSA加密要比128-bit的IDEA加密要慢4000多倍。RSA的長處在它的易用性而不是它的堅

固性,相反加密鏈的弱點不在IDEA上而是在RSA上。當然這只是相對而言,我們馬上會看

到RSA對直接攻擊的抵御也是足夠強的。


    隨便提一句,在PGP的未來版本中將提供密匙長度為112-bit的Triple DES加密算法

作為用戶選項。56-bit的標準DES密匙已經被証明是可以攻破的。





◎ RSA 的安全性問題


    先看看RSA的基本原理,我們知道RSA的保密性基一個數學假設:對一個很大的合

數進行質因數分解是不可能的。RSA用到的是兩個非常大的質數的乘積,用目前的計算機

水平是無法分解的。但是這說明不了什,沒有“証明”RSA的安全性。這既不說明分解

這個大數是攻擊RSA唯一的(或者說是最佳的)途徑,也不能証明這種分解真的那困難。

RSA有可能存在一些密碼學方面的缺陷,隨著數論的發展也許會找到一種耗時以多項式方

式增長的分解算法。不過目前這還只是展望,甚至連發展的方向都還沒有找到。有三種

事物的發展會威脅到RSA的安全性:分解技術、計算機能力的提高和計算機造價的降低。

特別是第一條對RSA的威脅最大,因為只要大數分解的問題不解決,做乘法總是比分解因

數快得多,計算機能力強大了盡可以加長密匙來防御,因為那時加密也會快得多的。


    RSA的密匙生成步驟可以分為七步:

    - 找到兩個大質數 p,q

    - 做乘法 n=p*q

    - 選擇一個數 e,滿足 e
    - 計算 d=e^-1 mod [(p-1)(q-1)]

    - e 就是公開指數,d 是私密指數

    - 公匙就是(n,e),私匙是(n,d)

    - p 和 q 應該被銷毀掉(PGP為了用中國的同余理論加快加密運算保留了p和q,
       不過它們是用IDEA加密過再存放的)


    加密算法是這樣的,把明文分成比 n 小的數據塊用公開指數作乘方取模運算:

            c=m^e mod n       (m是明文塊(message),c是密文塊(cipher))

    解密過程正相反,把密文數據塊用私密指數作乘方取模運算:

            m=c^d mod n


    攻擊者有公匙,就是 e 和 n ,他想獲得私匙,換句話就是 d 。對 n 進行因數分

解來獲得 p,q 從而算出 d 是最好的RSA攻擊方法,直接窮舉 d 或 推斷 (p-1)(q-1) 都

要慢許多。下面是幾種因數分解的算法:

    - 試探除法:最老也是最笨的方法,窮舉所有小 sqrt(n) 的質數,耗時以指數
                 率增長。

    - 二次篩法(QS):對 10^110 以內的數是最快的算法。

    - MPQS:QS的改進版本,要快一些。

    - 分區篩法(NFS):目前對大 10^110 的數是最快的算法。曾被用來成功地分解

                 過第九費馬數。


    這些算法代表了人們對大數分解(也就是對RSA攻擊)的探索歷程。最好的算法具有

超多項式率(次指數率)的時間復雜度,NFS具有最接近多項式率的表現。


    大數分解仍然是困難的,可是隨著數論和計算能力的發展,它變得容易了。1977年,

Ron Rivest 說過分解一個125位的數需要花費 4*10^13 年。在 1994 年 RSA129 被分解

了,花費了 5000 MIPS﹒年 的機時,是利用 internet 上一些計算機的空閑CPU周期一

共花了8個月完成的。1995年,Blacknet密匙被分解,用了幾十台工作站和一台MarPar,

共用 400 MIPS﹒年,歷時3個月。隨著時間的推移,可能被分解的密匙長度還會增加。


  下面的表格是常用的幾種PGP密匙長度與它對應的NFS分解算法耗費的MIPS﹒年數。

               密匙長                   用NFS來分解的 MIPS﹒年 數
   -----------------------------------------------------------------
                512                     30,000
                768                     200,000,000
                1024                    300,000,000,000
                2048                    300,000,000,000,000,000,000


  下面一張表示用直接攻擊方法耗時相當的對稱式與非對稱式加密對應密匙長度。

                對稱式                          非對稱式
        ------------------------------------------------------------------
                56-bits                         384-bits
                64-bits                         512-bits
                80-bits                         768-bits
                112-bits                        1792-bits
                128-bits                        2304-bits


    分解過Blacknet密匙的四個人說過:“目前幾乎可以肯定,擁有合適資源的組織可

以破譯512-bits的密匙。”這並不意味著有這個組織認為值得動用如此之大的計算能

力去破譯別人的信息。話雖這說,知道自己所用的加密體系可能會被攻破每個人都不

會心安理得的。專家的建議是使用加密體系實現所提供的最大碼長。如果哪一種實現不

能提供足夠的碼長,最好不要用它。


    RSA的安全性依賴大數分解的難度。因此PGP需要一些產生非常大的質數的方法。

目前還沒有一種迅捷的產生一個大質數的算法。因此,PGP實際採用的方法是產生一個大

奇數,然測試它的質數性。順便提一句,質數的個數是無窮的,甚至它的分布密度也

超出一般人的想象,數論給出的結論表明,n 以內的質數的個數趨近 n/ln(n)。


    為了測試一個數的質數性,一個顯而易見的方法是作試探除法,將n用2到sqrt(n)的

每個整數來除。如果n是質數,所有這些數都不能整除它。如果n是質數的話,這個算法的

耗時是指數方式增長的,這對PGP需要測試的大數來說太不經濟了。從這裡也可以看出試

探除法不是一條可行的RSA攻擊道路。


    PGP實際採用的方法是對候選奇數做費馬測試。費馬測試並不能確定它是否質數,但

通過費馬測試以的數不是質數的概率微乎其微。下面是費馬測試的細節:

       - 待測奇數 n

       - 在質數集合中依次選取一個質數 b ,b = 2,3,5,7......

       - 計算 w = b^(n-1) % n

       - 如果對所有 b ,w都為1,n 很可能是質數。否則 n 一定是合數。


    取前四個質數的測試稱為四階費馬測試,PGP採用的就是它。一階測試誤判的概率

是 10^-13 ,二階是 10^-26 ,作完四階測試是 10^-52。而且它絕對不會漏掉一個

質數。當然將合數誤判為質數的可能性是存在的,這種能通過費馬測試的合數被稱為

Carmichael 數,象 561,1105,1729 等等。它們很稀少,在 10^9 范圍內只有 255 個。


    下面是幾種針對RSA有效的攻擊方法,它們實際上對PGP沒有效力,因為它們攻擊的

是加密協議環節上的漏洞,而不是RSA本身的。從這些例子可以看到PGP是如何在實現上

堵住這些漏洞的。


  ● 選擇密文攻擊

    由RSA密文是通過公開渠道傳播的,攻擊者可以獲取密文。我們假設攻擊者為A,

密文收件人為T,A得到了發往T的一份密文c,他想不通過分解質因數的方法得到明文。

換句話說,他需要 m = c^d 。


    為了恢復 m,他找一個隨機數 r , r < n,當然他有T的公匙(e,n)。他計算:

        x=r^e % n  (用 T 的公匙加密 r)

        y=x*c % n  (將臨時密文x與c相乘)

        t=r^-1 % n

    A 知道RSA具有下面的一個特性:

        如果 x=r^e % n,那 r=x^d % n


    因此他想辦法讓T對 y 用T自己的私匙簽名(實際上就是把 y 解密了),然將

結果 u=y^d % n 寄回給A。A只要簡單地計算:

        m = t*u % n

    上面結論的推導是這樣的:

        t*u % n = (r^-1)*(y^d) & n
                = (r^-1)*(x^d)(c^d) % n
                = (c^d) % n
                = m

    要防止這種攻擊的辦法就是不要對外來的隨機信息簽名,或者只對信息的MD5特征值

簽名。在這裡就很容易明白為什要強調MD5的單向性了,因為MD5的結果是不能預定的,

就是說A難以湊出一份剛好能產生 y 這樣的MD5特征值的明文來讓T簽名。


  ● 過小的加密指數 e

    看起來,e 是一個小數並不降低RSA的安全性。從計算速度考慮,e 越小越好。可

是,當明文也是一個很小的數時就會出現問題。例如我們取 e=3 ,而且我們的明文 m

比 n 的三次方根要小,那密文 c = m^e % n 就會等 m^3。這樣只要對密文開三次

方就可以得到明文。


    PGP對這個漏洞的處理是在明文上加上一個隨機數,這樣保証 m > n ,而且缺省的

e 值為17,如果不行再用19,23 等等。


  ● RSA的計時攻擊法

    這是一種另辟蹊徑的方法。是由 Paul Kocher 發表的。大家可以發現,RSA的基本

運算是乘方取模,這種運算的特點是耗費時間精確取決乘方次數。這樣如果 A 能夠監

視到RSA解密的過程,並對它計時,他就能算出d來。細節我就不復述了。我想說的是如

何抵御它。Rivest說,最簡單的方法就是使RSA在基本運算上花費均等的時間,而與操作

數無關。其次在加密前對數據做一個變換(花費恆定時間),在解密端做逆變換,這樣

總時間就不再依賴操作數了。


    至PGP根本不用擔心計時攻擊,因為PGP採用了中國余數理論的方法加速了運算,同

時也使耗時與操作數無關。同時計時攻擊對攻擊者資源的要求太高,實時監視加密過程

不是任何人都可能做到的。在這裡提出這種攻擊是因為:雖然它目前還不實用,但從理論

上是一個嶄新的思路,值得注意。


  ● 其他對RSA的攻擊法

    還有一些對RSA的攻擊,象公共模數攻擊。它是指幾個用戶公用一個模數 n ,各自

有自己的 e 和 d,在幾個用戶之間公用 n 會使攻擊者能夠不用分解 n 而恢復明文。

但是PGP是不會在用戶之間公用模數的。


    最談談RSA密匙長度的問題,多長的密匙是安全的。專家指出,任何預言都是不

理智的,就目前的計算機水平用1024-bits的密匙是安全的,2048-bits是絕對安全的。

但是他們並不指望這個局面延續到下世紀,他們只是指出:如果RSA象有些人說的那樣

脆弱,就不可能從1977年一直保持到現在還沒有被攻破。



◎ MD5 的安全性問題

     MD5是一種在PGP中被用來單向變換用戶口令和對信息簽名的單向散列算法。


     一種單向散列的強度體現在它能把任意的輸入隨機化到什程度並且能產生唯一

的輸出。對單向散列的直接攻擊可以分為普通直接攻擊和“生日”攻擊。


  ● 對MD5的普通直接攻擊

    所謂直接攻擊又叫野蠻攻擊。攻擊者為了找到一份和原始明文 m 散列結果相同的

明文 m' ,就是 H(m)=H(m') 。普通直接攻擊,顧名思義就是窮舉可能的明文去產生一

個和 H(m) 相同的散列結果。對MD5來說散列結果為128-bits,就是說如果攻擊者有一台

每秒嘗試1,000,000,000條明文的機器需要算約10^22年,同時興許會同時發現m本身:))。


  ● 對MD5的生日攻擊

    生日攻擊實際上只是為了找到兩條能產生同樣散列結果的明文。記得那個有名的

概率生日問題嗎?在 N 個人中至少有兩個人生日相同的概率是多少?所謂生日攻擊

實際上只是用概率來指導散列沖突的發現,對MD5來說如果嘗試2^64條明文,那它

們之間至少有一對發生沖突的概率就是 50%。僅此而已,對當今的科技能力來說,它

也是不可能的。一台上面談到的機器平均需要運行585年才能找到一對,而且並不能馬

上變成實際的攻擊成果。因為碼長和速度的關系,對crypt(3)的生日攻擊就成功得多。


  ● 其他對MD5的攻擊

    微分攻擊被証明對MD5的一次循環是有效的,但對全部4次循環無效。(微分攻擊是

通過比較分析有特定區別的明文在通過加密的變化傳播情況來攻擊加密體系的。)


    有一種成功的MD5攻擊,不過它是對MD5代碼本身做了手腳,是一種crack而不是hack

更算不上cryptanalysis了。而且如果你做了PGP發行包的簽名校驗,是容易發現代碼被

替換過了的。


  ● 口令長度和信息論

    根據傳統信息論,英語的每個8-bits字母的信息熵為1.3bits。如果口令足夠長,

MD5的結果就會足夠隨機。對 128-bits 的MD5輸出來說,一個長達98個字符的口令將給

出一個隨機的密匙。

     (8/1.3)*(128/8) = 98.46 chars

    可是誰會用一個象下面這樣長的口令呢?

        12345678901234567890123456789012345678901235678901234567890
        1234567890123456789012345678


    1.3 bits 的信息熵來自英語語法的規律性這個事實,字母出現概率的不等造成了

熵的減小。如果26個拉丁字母出現的概率均等,信息熵將會增至

      log(26)/log(2) = 4.7 bits


    這樣一個隨機密匙所需口令長度就減為 27.23 chars 了,如果再加上大小寫和幾個

符號還可以減少。關選擇口令的問題可以參考任何關安全性的書籍,它們都適用,

上面是關PGP本身特色的部分。



◎ 隨機數的安全性問題

    PGP使用兩個偽隨機數發生器(PRNG),一個是ANSI X9.17發生器,另一個是從用戶

擊鍵的時間和序列中計算熵值從而引入隨機性。ANSI X9.17 PRNG使用IDEA而不是 3DES

來產生隨機數種子。Randseed.bin 文件最初是利用用戶擊鍵信息產生的,每次加密前

都會引入新的隨機數,而且隨機數種子本身也是加密存放的。


  ● ANSI X9.17 PRNG

    官方發布的 ANSI X9.17 標準使用的是 Triple DES 作為內核,這個很容易改用

IDEA實現。 X9.17 需要randseed.bin中的 24 bytes 的隨機數,PGP把其他384 bytes

用來存放其他信息。X19.7 工作過程大致如下:

        E() = IDEA 加密函數,使用一個可復用的密匙(使用明文產生)。
        T =  從 randseed.bin 文件中來的時間
        V =  初始化向量
        R =  生成的隨機密匙(用來加密一次PGP明文)

        R = E[E(T) XOR V]
        
        下一次的初始化向量計算如下:

        V = E[E(T) XOR R]


  ● 用戶擊鍵引入隨機性

    這是真正的隨機數,沒有什好說的,只是盡量使擊鍵無規則就行。輸入的熵越大

輸出的隨機數的熵就越大。


  ● X9.17 用MD5進行預洗

    所謂“洗”就是指象洗牌一樣把數據打亂,加密前叫預洗,加密為下一次加密的

準備叫洗。PGP的日常隨機數產生器 X19.7 是用明文的MD5值來預洗的,它基攻擊

者不知道明文這樣一個假設。如果攻擊者知道明文他就沒有太大必要去攻擊了,當然也

有這種可能,不過這只是會削弱一點PRNG的隨機性罷了。下面我們將看到還有洗操作。


  ● randseed.bin 的洗操作

    洗操作被認為是更安全的。更多的隨機字節被用來重新初始化 randseed.bin 文

件,它們被用當前的隨機臨時PGP密匙來加密。同樣如果攻擊者知道這個密匙,他就不用

攻擊 randseed.bin 文件,相反他更關心 randseed.bin 文件當前的狀態,因為可能從

中獲得下次加密的部分信息。因此對 randseed.bin 文件的保護和公匙環及私匙環文件

同樣重要。當然,如果不是密碼專家這些文件都給他也沒事。



◎ PGP的密匙和口令的安全性問題


    最簡單的失密方式就是你讓你的口令寫在某處,又無法保証除你之外沒有其他人能

看到。如果別人得到你的口令和你的私匙文件,整個加密體系就無密可言了。


    另一個古老的話題就是口令不要太簡單,注意PGP用的是“口令” passphase,而不

是“密碼”password 就是說可以在口令中包含多個詞和空格。一個老謀深算的攻擊者可

能會用一本名言錄來尋找你的口令。因此為了得到好記又難猜的口令,你可以生造一些

句子或者找些非常生僻的文學篇章中的句子。我個人推薦的辦法是採用一句話中的首字

母的序列,然在其中加入幾個符號,如“.”,“-”,“;”等,長度最好大等8個

字符,同時也可夾雜大小寫。由有被人在旁邊窺探你的擊鍵動作的可能,最好不用空

格鍵,因為敲它的聲音很特殊。同樣,需要手指伸得很遠的數字鍵也可不用。例如:

從 “You can't get it without my passphase” 可以得到“yCgi.wyp”這個口令,

用窮舉法試探出這個口令的可能性微乎其微,因為它用到了大小寫字母和符號。平均

要試探約 50^8 次才可能成功,以IDEA的速度,這在一般大型計算機上也不是輕而易

舉的事。因此短的口令只要足夠隨機,一樣很安全,而且輸入口令時間越短,被窺探的

可能也越小。


    公匙的篡改和冒充可說是PGP的最大威脅,在《PGP簡介中》我已經講得比較詳細了,

要點就是:當你用別人的公匙時,確信它是直接從對方處得來或是由另一個可信的人簽

名認証過的。確信沒有人可以篡改你自己的公匙環文件。保持你對自己密匙環文件的

物理控制權,盡量存放在自己的個人電腦裡而不是一個遠程的分時系統裡。備份自己

的密匙環文件。



◎ 沒有完全刪除的文件

    一般的操作系統在刪除文件時都並沒有徹底刪除文件的數據,當你加密明文將明

文刪除,可是沒有從物理上把明文的數據清除。一些有經驗的攻擊者可能從你的磁盤數

據塊中恢復明文。當然象碎紙機一樣,也有從物理上銷毀文件的辦法,它們是一些工具

軟件,如果沒有,最簡單的辦法是用無用的信息將明文文件覆蓋。在PGP 加上 -w 參

數也可以達到這一目的。不過即使你覆蓋了所有明文曾佔用的磁盤空間,仍然會有微小

的剩磁留在磁盤上,專用的設備可以恢復這些數據,只是一般人沒有這個條件。


    對你使用的密匙環文件同樣存在這個問題,特別是私匙環文件,直接關系到你的

私匙的安全。因此除了你專用的個人電腦,最好不要將密匙環拷入其他機器,讓它們留

在軟盤上或許是個安全的辦法。



◎ 物理安全性


    這是PGP所不能賦予你的。如果政府要調查你的話,它蠻可以直接去物理侵犯你的隱

私,就象在水門事件中一樣。而且這種攻擊比密碼學分析要便宜得多。PGP無法在一個不

保密的環境中保護你的未加密的明文。當然物理安全性也包括對PGP數據的物理安全保護

象防火、防水、防雷等等,可是這都不如防人來得難辦。



◎ 多用戶系統下的泄密


    PGP最初是為MS-DOS設計的,它假設本身在用戶的直接物理控制下。可是隨著PGP的

普及,多用戶系統上也出現了PGP,這樣暴露明文和密匙或口令的可能就增大了。例如:

如果你在Unix系統下在PGP的命令行中使用自己的口令,其他用戶將能用ps命令直接看

到它。同樣的問題在連上局域網的MS-DOS機器上也有。我並不是說在Unix上就不能用

PGP,有人將Unix系統裝在筆記本電腦上,你當然可以用PGP而不用擔心其他用戶。多

用戶系統也有安全的,它們禁得起所有入侵者所能獲得的手段的攻擊,或者是它的用戶

都是可以信賴的,要不就是根本沒有感興趣的入侵者。正如下面將要談到的現實的PGP

攻擊中談到的,在多用戶系統中泄密的風險要大得多。對此PGP作者的建議是:盡量在

一個孤立的單用戶系統裡使用PGP,而且保証系統處你的直接物理控制之下。



◎ PGP的時間標戳可靠性


    PGP簽名上的時間標戳是不可信的,因為任何想偽造一個“錯誤”的時戳的人都可以

通過修改系統時間達到目的。而在商業上又有這種利用PGP簽名的時間來確認責任的需要,

這樣第三方的時間公証體系就被建立了。很明顯,只要公証方在郵件上簽上標準的時間,

就解決了這個問題。實際上這個問題對手寫的簽名也存在,簽字時需要一個公証人,

用以証明簽名的時間,數字簽名也一樣。PGP作者設想的模式是讓第三方提供公証服務,

服務器對每個送來的簽名自動加上自己的簽名發回,同時留下一份記錄,這份記錄是

公開的,需要仲裁的人可以去查閱。



◎ 流量分析


    雖然攻擊者無法閱讀密文的真實內容,但他至少可以通過觀察郵件從哪兒來、到

哪兒去、郵件大小以及郵件發送的時間等等而獲得一些有用的信息,就象他可以查閱

你的長途電話費單,但是他不知道你談話的內容一樣。這就叫流量分析。單獨靠PGP

是無法阻止流量分析的,借助一些網絡通訊協議可以防止這些信息的暴露,甚至可以

採用另一些加密通訊體系的協助。



◎ 現實的PGP攻擊

    上面所說的都是一些對一般攻擊者不可能或者太費事的攻擊方法。實際上有一些

“可行的”PGP攻擊,它們不是攻擊PGP密碼體系本身(剛才的論述証明它是牢固的),

而是PGP的實現系統。


    先看被動攻擊:

  ● 擊鍵窺探

    一種非常有效的被動攻擊方法;簡單地說就是記錄用戶的擊鍵從中獲得口令。攻擊

者通過鍵盤記錄器窺探用戶的擊鍵序列,具體方法因不同系統而異。在DOS下的PGP實現

在這方面是最脆弱的,而且它擁有最多的鍵盤記錄器程序。而且攻擊者甚至可以從網絡

上遠程啟動和停止記錄器,在DOS下有些引導區病毒也可以完成這一工作。目前已經出現

了至少一種Windows下的記錄器,這就對基Windows的PGP外殼產生了威脅。對UNIX環境

下的鍵盤記錄有點復雜,因為需要root權限,除非被攻擊者是在X-Windows環境下輸入口

令的,X-Windows下的記錄器不用root權限。


    防止這種攻擊,一句話,對工作環境要仔細檢查,同時作好私匙環文件的保存。


  ● 電磁泄露窺探

    這很好懂,任何計算機設備尤其是顯示器都有電磁泄露,通過合適的設備可以收到

目標顯示器上的信息,那你的明文顯示時就無密可言了。我這裡有一個 FBI通過類似

裝置監聽到一個間諜的顯示器和鍵盤信號的案例:他們通過偷偷設置在嫌疑犯計算機裡

的發射器,遠程接收信號,然通過NSA專用的FFT芯片去除噪音,完成了取証工作。射

頻信號大約22MHz,在接收端加上 27KHz 的水平同步信號和 59.94 Hz 的垂直同步信號

就可以得到清晰的圖象。至鍵盤用的是串行單片機通訊接口,信號更容易穩定。


    加裝一個射頻信號幹擾器可以有效防止顯示器信號泄露。鍵盤信號傳不遠,只要

沒人在你計算機裡安“耳朵”就不怕泄露。


  ● 內存空間窺探

    在UNIX這樣的多用戶系統中,只要有合適的權限誰都可以檢查機器的物理內存。和

分解一個巨大的合數相比,打開/dev/kmem這個系統虛存交換文件,找到用戶的頁面,直

接讀出e,d來不是省心得多嗎?


  ● 磁盤緩存窺探

    在Windows這樣的多任務操作系統中,系統有把內存中的內容交換到磁盤的習慣,而

且這些交換文件是對用戶透明的。更壞事的是,這些內容並不會很快被清除,有可能在

磁盤上保留很久。如果在網絡環境中,可能連用戶自己都感覺不到,就被人偷走了這些

信息。


  ● 報文嗅探

    在網絡環境下,信息是以報文的形式在線路中傳輸的。如果你是通過網絡遠程使用

PGP,那就有可能被人從報文傳輸途中監聽到。如果信息是以明文的形式存放在報文中

你的口令也就被攻擊者知道了。


    使用一些加密聯機的通訊程序,象 SSH,DESlogin 或者幹脆使用有加密性能的網絡

協議棧(點到點或端到端),可以防止網絡嗅探的攻擊。因為嗅探者要處理大量的信息,

如果不是明文,他們一般沒有興趣去研究。


   再看看主動攻擊:

  ● 特洛伊木馬

    木馬是個古老的計謀,關特洛伊木馬應該所有人都不陌生。我不想給它下個定義。

下面是一個虛擬的現代PGP木馬:


        一些精英程序員開發了一個嶄新的PGP的Windows外殼。所有新手都FTP到了

      一份拷貝。它工作得太棒了,有各種按鈕和滾動條,甚至它還提供了一堆WAV

      文件,還支持 SoundBlaster AWE 32 的音效,因此你可以一邊加密文件一邊

      欣賞著 16 位CD音質的音響。它佔用很少的內存,編程精練,功能強大,而且

      它還能截獲操作系統的中斷,從而阻止它把重要信息交換到磁盤去而泄密。

      了不起吧?可問題在,這個程序裡有那幾行惡意布置的代碼記錄了你的

      口令,並且當它發現機器上裝了一個Modem,它會向Modem發出一條atm0命令

      (關閉Modem的蜂鳴器),然向天知道什地方撥號並且傳出了你的口令

      和密匙......


    有意思嗎?這就是特洛伊木馬。避開它需要謹慎,謹慎,再謹慎。


  ● 篡改PGP代碼
  ● 篡改PGP代碼
  ● 特洛伊木馬
  ● 報文嗅探
  ● 磁盤緩存窺探
  ● 內存空間窺探
  ● 電磁泄露窺探
  ● 擊鍵窺探

    PGP代碼是公開的,因此也會有被人篡改的可能。因此校驗你得到的PGP發行包的完

整性,是非常重要的,在上面的例子裡我們可以看到,把計算機的控制權交給不可靠的

程序是一件可怕的事。當然有人會把MD5程序crack了,讓對篡改過的文件它報告一個正

確的散列結果。這時找到一份已知完好的拷貝對照一下是最可靠的。



◎ 結語

    我只是在這裡提供了各種材料,結論得要你自己下。我們不能因為謠言而放棄一種

加密方法,同樣我們也不能僅僅因為風聞就信賴一種方法。總之,在計算機安全領域,

小心謹慎總會有報償的,但是缺乏情報和無必要的偏執是沒有好結果的。

(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
PGP的安全性 (2001-06-25 20:10:00)
PGP 簡介 (2001-06-25 19:00:01)
 

★  樊強制作 歡迎分享  ★