密碼技術之密鑰、隨機數、PGP、SSL/TLS


第三部分:密碼技術之密鑰、隨機數、PGP、SSL/TLS

  密碼的本質就是將較長的消息變成較短的秘密消息——密鑰。

  一、密鑰

    什么是密鑰?

    (1)密鑰就是一個巨大的數字,然而密鑰數字本身的大小不重要,重要的是密鑰空間的大小,也就是可能出現的密鑰的總數量,因為密鑰空間越大,進行暴力破解就越困難。

    如DES的密鑰的長度是56bit(7字節),三重DES中DES-EDE2的密鑰長度為112bit(14字節)、DES-EDE3的密鑰長度為168bit(21字節),AES的密鑰長度可以是128、192和256bit。

    需要注意的是一個字節不一定對應一個字符。

    (2)密鑰和明文是等價的,即對於竊聽者而言,得到了密鑰就等於得到了明文

    (3)密鑰算法與密鑰,密碼算法應使用世界公認的密碼算法,另外,信息的機密性不應該依賴於密碼算法本身,而是應該依賴於妥善保管的密鑰。

    密鑰分類:

    (1)對稱密碼的共享密鑰,公鑰密碼中的私鑰和公鑰,公鑰加密,私鑰解密

    (2)消息認證碼的共享密鑰和數字簽名的密鑰,私鑰加簽,公鑰驗簽

    (3)對稱密碼和公鑰密碼的密鑰是用於確保機密性的密鑰,相對地,消息認證碼和數字簽名所使用的密鑰,則是用於認證的密鑰。

    (4)會話密鑰和主密鑰,一直被重復使用的密鑰稱為主密鑰;https通信每次通信只使用一次的密鑰稱為會話密鑰。

    (5)用於加密內容的密鑰CEK與用於加密密鑰的密鑰KEK

    密鑰的生成

      生成密鑰最好的方式就是使用隨機數,或者使用口令加鹽PBE生成隨機數

    PBE(基於口令的密碼)

      基於口令的密碼(Password Based Encryption,PBE)就是一種根據口令生成密鑰並用該密鑰進行加密的方法。其中加密和解密使用同一個密鑰。

     PBE加密的步驟:

     (1)生成KEK

        首先,偽隨機數生成器會生成一個被稱為鹽的隨機數。將鹽和Alice的口令一起輸入單向散列函數,得到的散列值就是用來加密密鑰的密鑰KEK

     (2)生成會話密鑰並加密

        使用偽隨機數生成器生成會話密鑰。會話密鑰是用來加密消息的密鑰CEK。

        會話密鑰使用(1)生成的KEK進行加密,然后和鹽一起保存在安全的地方

        將KEK丟棄,因為使用鹽和口令可以重建KEK

     (3)加密消息

        使用(2)生成的會話密鑰對消息進行加密

     PBE解密的步驟:

     (1)重建KEK

        將之前保存下來的鹽和Alice的口令一起輸入單向散列函數,得到的散列值就是KEK  

     (2)解密會話密鑰

        獲取之前保存下來的使用KEK加密的會話密鑰,用(1)生成的KEK進行解密得到會話密鑰

     (3)使用會話密鑰解密消息

    鹽的作用:

      鹽salt是由偽隨機數生成的,在生成密鑰KEK時會和口令一起被輸入單向散列函數。所以鹽是用來防御字典攻擊的。

      如果在生成KEK的時候加鹽,則鹽的長度越大,生成字典的候選KEK的數量也隨之增大,生成候選KEK的難度就會變得巨大。

    

  二、隨機數

               隨機數具有不可預測性,隨機數在密碼技術中扮演着十分重要的角色。

  如:生成密鑰——用於對稱密碼和消息認證碼、生成密鑰對——用於公鑰密碼和數字簽名、生成初始化向量(IV)——用於分組密碼的CBC、CFB和OFB模式、生成nonce——用於防御重放攻擊以及分組密碼的CTR模式、生成鹽——用於基於口令的密碼(PBE)等。

  隨機數的性質

    1、隨機性——不存在統計偏差,是完全雜亂的數列

    2、不可預測性——不能從過去的數列推測出下一個出現的數

    3、不可重現性——除非將數列本身保存下來,否則不能重現相同的數列

  隨機數的分類

  隨機性 不可預測性 不可重現性  
若偽隨機數 yes no no 只具備隨機性
弱偽隨機數 yes yes no 具備不可預測性
真隨機數 yes yes yes 具備不可重現性可用於密碼技術

   偽隨機數生成器

    隨機數可以通過硬件來生成,也可以通過軟件來生成。

    通過硬件生成的隨機數列,是根據傳感器收集的熱量、聲音的變化等事實上無法預測和重現的自然現象信息來生成的。像這樣的硬件設備就稱為隨機數生成器(Random Number Generator,RNG)。而可以生成隨機數的軟件則稱為偽隨機數生成器(Pseudo Random Number Generator,PRNG)。因為僅靠軟件無法生成真隨機數,因此要加上一個“偽”字。

     

  偽隨機數的種子是用來對內部狀態進行初始化的。 種子是一串隨機的比特序列,根據種子可以生成出專屬於自己的偽隨機數列。

  偽隨機數生成器的內部狀態,是指偽隨機數生成器所管理的內存中的數值。當生成偽隨機數時,會根據內存中的值(內部狀態)進行計算,並將計算結果作為偽隨機數輸出。

   隨后,偽隨機數生成器會改變自己的內存狀態,為下一次生成偽隨機數做准備。

  偽隨機數生成器:

    單向散列函數法

    (1)用偽隨機數的種子初始化內部狀態(即計數器)

    (2)用單向散列函數計算計數器的散列值

    (3)將散列值作為偽隨機數輸出

    (4)計數器的值加1

    (5)根據需要的偽隨機數數量重復(2)~(4)步驟

    密碼法

    (1)初始化內部狀態(計數器)

    (2)用密鑰加密計數器的值(AES或RSA)

    (3)將密文作為偽隨機數輸出

    (4)計數器的值加1

    (5)根據需要的偽隨機數數量重復(2)~(4)步驟

 

  三、PGP——密碼技術的完美結合

    PGP(Pretty Good Privacy)是一款密碼軟件,具備現代密碼軟件所需的幾乎全部功能。 如:

    1、對稱密碼

      對稱密碼可以單獨使用,也可以和公鑰密碼組合成混合密碼系統,可以使用的對稱密碼算法包括AES、三重DES等

    2、公鑰密碼

      PGP支持生成公鑰密碼的密鑰對,以及用公鑰密碼進行加密和解密。實際上並不是使用公鑰密碼直接對明文進行加密,而是使用混合密碼系統來進行加密操作

    3、數字簽名

      PGP支持數字簽名的生成和驗證,也可以將數字簽名附加到文件中,或者從文件中分離出數字簽名。可以使用的數字簽名算法包括RSA、DSA、ECDSA等

    4、單向散列函數

      PGP可以用單向散列函數計算和顯示消息的散列值

    5、證書

      PGP可以生成openPGP中規定格式的整數,以及與X.509規范兼容的證書,此外,還可以辦法公鑰的作廢證明,並可以使用CRL和OCSP對證書進行校驗。

    6、壓縮

      PGP支持數據的壓縮和解壓縮,壓縮采用ZIP等

    7、文本數據   

      PGP可以將二進制數據和文本數據相互轉換

    8、大文件的拆分和拼合

      在文件過大無法通過郵件發送的情況下,PGP可以將一個大文件拆分成多個文件,反過來也可以將多個文件拼合成一個文件

    9、鑰匙串管理

      PGP可以管理所生成的密鑰以及從外部獲取的公鑰。用於管理密鑰的文件稱為鑰匙串。

  四、SSL/TLS

    SSL/TLS是世界上應用最廣泛的密碼通信方法。是Web服務器中廣泛使用的協議,如往上支付時Web瀏覽器就會使用SSL/TLS進行密碼通信。

    SSL/TLS綜合運用了對稱密碼、消息認證碼、公鑰密碼、數字簽名、偽隨機數生成器等密碼技術。嚴格來說SSL(Secure Socket Layer,安全套接層)與

  TLS(Transport Layer Security,安全層傳輸協議)是不同的,TLS相當於是SSL的后續版本。

 

    用SSL/TLS承載HTTP,對請求和響應進行加密:

    

  在敏感信息通信時,需要解決的問題:

  1、發送過程中不要被竊聽,即機密性問題

  2、發送過程中不能被篡改,即完整性問題

  3、確認通信對方沒有被偽裝,即認證問題

  要確保機密性,可以使用對稱密碼,密鑰用偽隨機數來生成,發送密鑰用公鑰密碼。

  要識別篡改,對數據進行認證,可以使用消息認證碼,對通信對象進行認證,使用對公鑰加上數字簽名的整數。

  SSL/TLS就是這樣的一個“框架”,將這些工具組合起來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM