<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/papers/9144

            0x00 前言


            在前兩講中,我們主要對SSL協議中CBC模式的弱安全性進行了系統的介紹。這一講中我們對用于生成SSL中所用密鑰的PRNG做一點簡單介紹。

            0x01 什么是PRNG?


            PRNG(pseudo Random Noise Generation),即偽隨機噪聲生成,用于生成各種密碼學操作中所需的隨機數。

            一般而言,Linux系統中的PRNG(簡稱為LRNG)可以被分為3個異步的部分。第一部分把系統事件轉化為bit來表示潛在的熵;第二部分把這些bit加入到隨機數生成池;第三部分使用連續的SHA-1操作處理生成池中的bit來產生輸出,得到的反饋依然被放入生成池中來更新它。

            每個從系統事件得到的隨機性都被收集為兩個32-bit的word。第一個word包含事件發生的時間,第二個word是事件的值,通常是一個按鍵、鼠標移動或者驅動訪問的編碼。

            LRNG使用一個計數器來計算加入到生成池中物理隨機性的估算值,這個值用一個不同事件發生頻率的函數來計算。這個值被表示為熵。

            Linux系統中PRNG的結構抽象如下圖所示:

            0x02 Linux中PRNG的運作原理


            0x03 弱PRNG對SSL的影響


            OpenSSL的PRNG是一個確定性函數,知道輸入和調用次序的攻擊者可以預測輸出。為了使PRNG安全,熵池必須從/dev/random或者其它攻擊者不知道的熵源中取種。2006年,在Debian Linux發布版本中的OpenSSL增加了一個漏洞修復,而這個漏洞修復引入了一個新的漏洞,它在修復另一個漏洞時把生成隨機數選種過程的代碼給刪掉了,這導致初始選種時使用到的唯一的隨機值是當前進程ID-pid,Linux平臺默認最大進程號是32,768,所以生成隨機數的種子值范圍很小。這個漏洞到2008年才被發現,受影響的Debian Linux版本的可用熵都很有限,產生的公私鑰對是可預測的,這樣導致生成的SSL協議中使用的服務器私鑰具有脆弱性。由于漏洞存在,攻擊者可以事先生成公私鑰對,一旦發現有跟公鑰匹配的就知道了對應私鑰。加州大學圣地亞哥分校的研究人員在漏洞發布不久對流行的SSL服務器進行掃描,發現1.5%左右的服務器使用了弱密鑰證書。

            事實上,因為弱PRNG生成的RSA和DSA弱密鑰在TLS和SSH服務器中廣泛存在。在2012年的一項調查中發現,0.75%的TLS證書因為熵不足共享了密鑰,其他還有1.7%的設備采用了相同實現,很可能也存在此類問題。0.5%的TLS主機和0.03%的SSH主機RSA私鑰可被獲取,因為它們的公鑰存在共享公因子現象。RSA公鑰的分解是很困難的,但是如果兩個公鑰共享了某一素因子,那么只要計算出這個素因子,就可以將這兩個公鑰分解,從而計算出對應的私鑰。

            這一現象是由于PRNG在生成隨機數時,如果用于產生RSA公鑰的兩個隨機數都是在熵源不足的情況下生成的,那么采用相同實現的設備就可能生成兩個相同的素因子,導致對應的私鑰相同。如果兩個隨機數中,僅有一個是在熵源不足的情況下生成,那么兩臺采用相同實現的不同設備生成的RSA公鑰就可能共享一個素因子,導致這兩個RSA公鑰均可很容易地被分解。

            弱PRNG導致的弱RSA和DSA密鑰問題在嵌入式設備如路由器、閉路電視等中也廣泛存在,因為這類設備的熵源有限(缺少鼠標鍵盤等熵源)。關于嵌入式設備中弱密鑰的問題具體可以參考USENIX Security 14年的文章A Large-Scale Analysis of the Security of Embedded Firmwares,由于導致弱密鑰的原理相同,這里就不多做介紹了。

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线