<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址: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,由于導致弱密鑰的原理相同,這里就不多做介紹了。

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频