《圖解密碼技術》閱讀筆記

第一章

  • 密碼與信息安全常識
    • 不要使用保密的密碼算法:
      • 密碼算法的祕密遲早會公諸於世
      • 試圖經過密碼算法自己的保密性來保證安全稱之爲隱蔽式安全,很蠢。
    • 使用低強度的密碼比不進行任何加密更危險
    • 任何密碼總有一天會被破解

第二章

  • 凱撒密碼:
    • 位移實現加密
    • 知道位移量便可進行逆向移動解密(也能夠暴力窮舉破解)
  • 替換密碼:
    • 將明文中全部字母變替換爲另外一套字母表
    • 密鑰空間:全部密鑰的集合
    • 頻率分析:明文中字母出現的頻率與密文中字母出現的頻率是一致的
    • 破譯技巧:
      • 高頻字母和低頻字母都能成爲線索
      • 字母連成單詞
  • Enigma
    • 國防軍密碼本的「每日密碼」通訊密碼
    • 通訊密碼是3位,寫兩次共6位
    • 每日密碼加密後的通訊密碼和通訊密碼加密後的密文被拼接發送給對端
    • 弱點:
      • 將通訊密碼連續輸入兩次
      • 通訊密碼是人爲選定的
      • 必須派發國防軍密碼本

第三章

  • XOR(異或)
    • 兩個相同的數進行異或運算的結果必定爲0
  • 一次性密碼本
    • 即便能夠遍歷整個密碼空間,遍歷解密獲得明文,也沒法確認哪一個是正確的明文
    • 一次性密碼是無條件安全的,在理論上是沒法破譯的
    • 不實用:
      • 密鑰在兩邊配送
      • 密鑰保存
      • 密鑰重用
      • 密鑰同步
      • 密鑰生成
  • DES
    • DES是一種將64位明文加密成64位密文的對稱密碼算法
    • 密鑰長度是56bit(64bit,每隔7位有1bit錯誤檢驗bit)
    • 輪:
      • 將輸入的數據(64bit)等分爲左右兩部分
      • 將輸入的右側數據直接發送到輸出的右側
      • 將輸入的右側發送到輪函數
      • 輪函數根據右側數據和子密鑰,計算出一串看上去隨機的bit序列
      • 將上一步的bite序列與左側數據進行XOR運算,並將結果做爲輸出的左側
    • Feistel網絡:
      • 將上述單輪的輸出結果左右對調做爲下一輪的輸入再開啓一輪計算,最後一輪計算結果不對調,直接輸出,即爲Feistel網絡
      • 特色:
        • 輪數能夠任意增長
        • 加密時不管使用任何輪函數都能正常解密
        • 加密和解密能夠用徹底相同的結構來實現
    • 三重DES: 加密-解密-加密
  • AES
    • 選出Rijndael做爲最終算法
    • Rijndael:
      • 分組長度和密鑰長度能夠分別以32bit爲單位在128到256bit範圍內進行選擇,AES固定分組長度爲128,密鑰長度爲128,192,256
      • Rijndael加密:
        • 一樣由輪構成:SubBytes、ShiftRows、MixColumns、AddRoundKey,使用SPN架構
        • 輸入分組爲128bit(16bytes)
        • SubBytes:逐字節從替換表(S-Box)中替換
        • ShiftRows:上一步處理完成後,以4字節爲單位的行進行按必定規則向左平移,且每一行平移的字節數不一樣
        • MixColumns:進行列計算
        • AddRoundKey:將上一步的輸出與輪密鑰進行XOR
        • 在Rijndael中以上4步通常重複10-14輪

第四章 分組密碼的模式

  • 分組密碼與流密碼
    • 分組密碼:每次之只能處理特定長度的一塊數據的密碼算法
    • 流密碼:對數據流進行持續處理,通常以一、八、32bit爲單位進行加密解密
    • 模式:對分組密碼進行迭代使之能處理超長明文的迭代方法
  • ECB模式:Electronic CodeBook(電子密碼本模式)
    • 將明文分組加密後的結果將直接成爲密文分組,相同的明文對應相同的密文,所以也被稱爲電子密碼本模式,最後一個分組小於分組長度時會進行填充
    • 最大弱點是能夠在不破譯密文的狀況下操縱明文
    • 須要填充
  • CBC模式: Cipher Block Chaining(密文分組連接模式)
    • 首先將明文分組與前一個密文分組進行XOR運算,而後再進行加密
    • 第一個分組和初始化向量(IV)進行XOR,初始化向量由每次加密隨機產生
    • 密文分組損壞只會影響最多2個分組的明文解密,密文分組缺失則影響整個解密
    • 須要填充
    • 對CBC模式的攻擊:
      • 對填充字段進行攻擊
      • 對初始化向量進行攻擊
        • SSL 3.0能夠經過中間修改密文致使服務器沒法正確解密,基於服務器反饋解密錯誤信息實現提示攻擊(POODLE)
        • 初始化向量必須使用不可預測的隨機數,在TLS1.0中IV使用的不是不可預測隨機數,而是上一次CBC模式加密時的最後一個分組。TLS 1.1以上的版本中,改成了必須顯式的傳送IV。
      • CTS模式:對於明文長度不足的部分,使用最後一個分組的前一個密文數據來進行填充
  • CFB模式:Cipher FeedBack(密文反饋模式)
    • 前一個密文分組會被送回到密碼算法的輸入端,加密後的前一個分組的密文和明文XOR生成密文
    • 一樣須要初始化向量(IV)
    • CFB模式中由密碼算法所生成的比特序列稱爲密鑰流,在CFB模式中密碼算法就至關於用來生成密鑰流的僞隨機數生成器,初始向量至關於生成器的種子
    • 在CFB模式中明文數據能夠被逐比特加密
    • 攻擊方式:重放攻擊
    • 不須要填充
  • OFB模式:Output-Feedback(輸出反饋模式)
    • 密碼算法的輸出會反饋到密碼算法的輸入
    • 明文經過和密碼算法輸出值XOR來實現加密
    • 須要初始化向量(IV)
    • 特色:能夠提早生成密鑰流,直接用密鑰流和明文XOR便可
    • 不須要填充
  • CTR模式:CounTeR(計算器模式)
    • 經過將逐次累加的計數器進行加密來生成密鑰流的流密碼
    • 計數器生成方法(128bit、16字節):前8字節爲nonce(必須保證每次的值都不同),後8字節爲分組序號,累增

第五章 公鑰密碼

  • 對稱密鑰的問題:如何將密鑰安全的傳遞到兩端?
    • 預共享密鑰
    • 密鑰分配中心
    • Diffie-Hellman密鑰交換
    • 公鑰密碼
  • RSA
    • 實質是基於大質數分解難度保證安全性
    • 加密:密文 = (明文^E)mod N
    • E和N兩個數組合成公鑰
    • 解密:明文 = (密文^D)mod N
    • 生成密鑰對的過程:
      • 選擇兩個大質數p和q(判斷一個數是不是大質數的方法由費馬測試和米勒·拉賓測試),N = p x q
      • 求L,L是p - 1和 q - 1的最小公倍數,L = lcm(p - 1,q - 1)
      • 求E,1 < E <L,E和L的最大公約數爲1(互質),該最大公約數的條件能夠保證必定存在解密時須要使用的D
      • 求D,1< D < L, E x D mod L = 1
    • 沒法防護中間人攻擊
  • 其餘公鑰密碼
    • EIGamal方式:
      • 基於mod N下求離散對數的困難度保證安全性
      • 密文長度會變成明文長度的兩倍
    • 橢圓曲線算法ECC:
      • 將橢圓曲線上的點進行特殊的乘法運算

第六章 混合密碼系統

  • 使用對稱密鑰加密明文,用非對稱密鑰加密對稱密鑰的密鑰

第七章 單向散列函數

  • 單向散列函數的性質;
    • 根據任意長度的消息計算出固定長度的散列值
    • 可以快速計算出散列值
    • 消息不一樣散列值也不一樣
    • 弱抗碰撞性:要找到和該條消息具備相同散列值的消息很是困難
    • 強抗碰撞性:要找到散列值相同的兩條不一樣的消息是很是困難的
    • 具有單向性:沒法經過散列值反推消息
  • 單向散列函數的應用:
    • 基於口令的加密
    • 消息認證碼
    • 數字簽名
    • 僞隨機數生成器
    • 一次性口令
  • 具體例子:
    • MD四、MD5,已被攻破
    • SHA-1(160bit),已被攻破
    • SHA-2:由SHA-25六、SHA-512衍生,22四、25六、38四、512
    • RIPEMD-160:未被攻破,比特幣
    • SHA-3:Keccak
  • Keccak:
    • 海綿結構:輸入數據在進行填充後要通過吸取階段和擠出階段
    • 存在一個內部狀態b = r + c參與計算
    • 輸入消息按長度r分割
    • 分割後的輸入消息送入Keccak-f[b]中進行計算輸出值做爲下一輪的b
    • 將消息計算完成後吸取結束,開始擠出,將吸取結束後的計算輸出值取長度r做爲第一個輸出分組,整個計算輸出值做爲下一輪的b輸入,輸出第二個分組,直到分組組合長度達到輸出需求
  • 對單向散列函數的攻擊
    • 暴力破解:利用文件的冗餘性生成具備相同散列值的另外一文件,破解弱抗碰撞性
    • 生日攻擊:構造兩個散列值相同的文件,破解強對抗性

第八章 消息認證碼(MAC)

  • 輸入包括任意長度的消息和共享密鑰,輸出固定長度的數據(MAC值)
  • GCM 使用AES等128比特分組密碼的CTR模式
  • HMAC:使用單向散列函數構造消息認證碼
    • 計算步驟:
      • 用0填充密鑰,使密鑰長度等於單向散列函數的分組長度
      • 填充後的密鑰和iPad(00110110循環到分組長度)XOR生成ipadkey
      • ipadkey與消息組合,經過單向散列函數計算散列值
      • 填充後的密鑰與opad(01011100循環到分組長度)XOR生成opadkey
      • opadkey與以前計算出來的散列值組合,再次經過單向散列函數計算散列值
      • 獲得MAC值
  • 對消息認證碼的攻擊
    • 重放攻擊
      -防護:序號、時間戳nonce
    • 密鑰推測攻擊
      • 暴力破解、生日問題
  • 消息驗證碼沒法解決的問題
    • 對第三方證實
    • 防止否定

第九章 數字簽名

  • 數字簽名私鑰生成的密文不用於保證機密性,而是被用於表明一種只有持有該密鑰的人才能生成的信息,這樣的信息通常被稱爲認證符號
  • 應用實例:
    • 安全信息公告
    • 軟件下載
    • 公鑰證書
    • SSL/TLS
  • 實現
    • RSA
    • EIGamal
    • DSA
    • ECDSA
    • Rabin
  • 攻擊
    • 中間人攻擊
    • 攻擊散列函數
    • 攻擊公鑰
    • 僞造

第十章 證書

  • 公鑰(Public-Key Certificate):是由認證機構(certificate authority)對我的信息及公鑰進行數字簽名生成的數字簽名信息
  • 公鑰基礎設施(PKI)
    • 組成要素:
      • 用戶:使用PKI的人
      • 認證機構(CA):頒發證書的人
        • 生成密鑰對(也能夠由用戶生成)
        • 在註冊公鑰是對本人身份進行認證
        • 生成並頒發證書
        • 做廢證書
        • 公鑰註冊和身份認證能夠由註冊機構(RA)來分擔
      • 倉庫:保存證書的數據庫
    • 證書機構的工做
      • 生成密鑰對(由證書機構或者PKI用戶自行生成RFC 7292)
      • 註冊證書:使用證書機構的私鑰對證書進行簽名
      • 做廢證書與CRL(證書做廢清單)
      • 證書的層級結構
        • 證書鏈由上到下給下面作簽名,根CA(root CA)自簽名
    • 對證書的攻擊:
      • 在公鑰註冊以前進行攻擊
      • 註冊類似人名進行攻擊
      • 竊取認證機構的私鑰進行攻擊
      • 假裝成認證機構進行攻擊
      • 鑽CRL的空子

第11章 密鑰

  • 密鑰管理
    • 生成密鑰
      • 用隨機數生成密鑰
      • 用口令生成密鑰
    • 配送密鑰
      • 預共享密鑰
      • 密鑰分配中心
      • 公鑰密碼
      • DH密鑰交換
    • 更新密鑰
      • 通訊過程當中按期進行密鑰變動,發送者和接收者用單向散列函數 計算當前密鑰的散列值,將這個值用作新的密鑰。經過單向函數的單向性保證安全性
    • 保存密鑰
      • 人類沒法記住密鑰
    • 做廢密鑰
      • 密鑰和明文是等價的
  • Diffie-Hellman交換
    • 用於在兩個終端之間計算共享密鑰
    • 計算過程:
      • Alice向Bob發送兩個質數P和G:P必須是一個很是大的質數,G是一個和P相關的數,稱爲'生成元'。這兩個數無需保密
      • Alice生成一個隨機數A,1<A<P-2。該數字對全部人保密
      • Bob生成一個隨機數B,1<B<p-2。該數字對全部人保密
      • Alice將G^A mod P 的值給Bob
      • Bob將G^B mod P 的值給Alice
      • Alice用Bob發過來的數計算A次方並求 mod P:密鑰=(G^B mod P)^A mod P = G^(BxA) mod P
      • Bob用Alice發送過來的數計算B次方並求mod P:密鑰=(G^A mod P)^B mod P = G^(AxB) mod P
      • Alice的計算出的密鑰 == Bob計算出來的密鑰
    • 安全性的保證:
      • 有限域(finite field)的離散對數問題:根據G^A mod P 計算出A的有效算法目前尚未出現
    • 生成元:
      • 假設一個數g是P的原根,那麼g^i mod P的結果兩兩不一樣,且有 1<g<P,0<i<P,歸根到底就是g^(P-1) = 1 (mod P)當且僅當指數爲P-1的時候成立.(這裏P是素數)
      • 原根的求法目前只能是枚舉
    • 之因此1< A(B) < P-2,是由於當A(B) == P-1 時mod的結果必定是1
  • 基於口令的密碼(PBE)
    • PBE加密:
      • 生成KEK
        • 加密密鑰的密鑰(KEK):僞隨機數生成器生成salt,將salt和口令輸入單向散列函數輸出值就是KEK
      • 生成會話密鑰並加密:
        • 會話密鑰是用來加密消息的密鑰(CEK),用僞隨機數生成器生成
        • 使用KEK加密(對稱密鑰算法)CEK,而後丟棄KEK。將加密後的CEK和salt一塊兒保存在安全的地方
      • 加密消息
        • 用CEK加密消息
    • PBE解密:
      • 重建KEK
        • 使用口令和以前保存的salt生成KEK
      • 解密會話密鑰(CEK)
        • 依然用對稱密鑰算法基於KEK解密以前加密的CEK
      • 解密消息
        • 使用解密出來的CEK解密被加密的消息
    • salt的做用
      • 鹽是由僞隨機數生成器生成的隨機數
      • 鹽是用來防護字典攻擊的,口令加鹽增長了預先生成匹配的KEK的難度
    • 口令的做用:
      • 具備充足長度的密鑰是沒法用人腦記憶的
    • 經過拉伸來改良PBE
      • 將KEK再輸入到單向散列函數中,來個1000次
    • 如何生成安全的口令
      • 使用只有本身才能知道的信息
        • 不要使用對本身重要的人或事的名字
        • 不要使用關於本身的信息
        • 不要使用別人見過的信息
      • 將多個不一樣的口令分開使用
      • 有效利用筆記
      • 理解口令的侷限性
      • 使用口令生成和管理工具

第十二章 隨機數

  • 隨機數的使用場景
    • 生成密鑰
    • 生成密鑰對
    • 生成初始化向量(IV):用於分組密碼的CBC、CFB、OFB
    • 生成Nonce:用於防護重放攻擊及分組密碼的CTR模式
    • 生成鹽:PBE
  • 隨機數的性質:
    • 隨機性:不存在統計學誤差,是徹底雜亂的數列(弱僞隨機數)
    • 不可預測性:不能從過去的數列推測出下一個出現的數(強僞隨機數)
    • 不可重現性:除非將數列自己保存下來,不然不能重現相同的數列(真隨機數)
  • 隨機數生成器:根據傳感器收集的熱量、聲音的變化等事實上沒法預測和重現的天然現象來生成。
  • 僞隨機數生成器:生成隨機數的軟件
    • 將根據內部狀態計算僞隨機數的方法和改變內部狀態(僞隨機數生成器所管理的內存中的數值)的方法組合起來,就是僞隨機數生成的算法。
    • 經過種子(seed)來進行內部狀態的初始化,種子須要保密,不能使用易被推測的值
  • 具體爲隨機數生成器:
    • 雜亂方法
    • 線性同餘法(弱僞隨機數)
      • Rn+1 = (A x Rn + C)mod M
      • 當n爲0時R0即爲種子
      • 最近一次生成的僞隨機數的值就是內部狀態
      • 不具有不可預測性
    • 單向散列函數法(強僞隨機數)
      • 用僞隨機數的種子初始化內部狀態(計數器)
      • 用單向散列函數計算計數器的散列值
      • 將散列值做爲僞隨機數輸出
      • 計數器的值加一
      • 根據須要的僞隨機數的數量重複2——4步
      • 單向散列函數的單向性是支撐僞隨機數生成器不可預測性的基礎
    • 密碼法:(計數器初始值和密鑰做爲種子)
      • 初始化內部狀態(計數器)
      • 用密鑰加密計數器的值
      • 將密文做爲僞隨機數輸出
      • 計數器的值加1
      • 根據須要的僞隨機數數量重複2 - 4步驟
      • 密碼的機密性是支撐僞隨機數生成器不可預測性的基礎
    • ANSI X9.17
      • 一、初始化內部狀態
      • 二、將當前時間加密生成掩碼
      • 三、對內部狀態與掩碼求XOR
      • 四、將3的結果加密
      • 五、將4的結果做爲僞隨機數輸出
      • 六、對4的結果與掩碼求XOR
      • 七、將步驟6的結果加密
      • 八、將步驟7的結果做爲新的內部狀態
      • 九、重複2-8直到得到所需數量的隨機數
  • 對僞隨機數生成器的攻擊:
    • 對種子進行攻擊:僞隨機數的種子和密碼的密鑰同等重要
    • 對隨機數池進行攻擊

第十三章 PGP

  • PGP簡介:
    • 1990年,Pretty Good Privacy
    • 混合密碼系統的特色:用公鑰密碼加密會話密鑰,用對稱密碼加密消息
  • PGP的功能
    • 對稱密碼
    • 公鑰密碼
    • 數字簽名
    • 單項散列函數
    • 證書
    • 壓縮
    • 文本數據
    • 大文件的拆分和合並
    • 鑰匙串管理
  • 加密過程:
    • 一、用僞隨機數生成器生成會話密鑰
    • 二、用公鑰密碼(接收者的)加密會話密鑰
    • 三、壓縮消息
    • 四、使用對稱密碼(使用1中生成的會話密鑰)對壓縮的消息進行加密
    • 五、將加密的會話密鑰(2)和加密的消息(4)拼合起來
    • 六、將步驟5的結果轉換爲文本數據,轉換後的結果就是報文數據
    • 爲何要先壓縮再加密而不是反過來:由於通過加密後比特序列的冗餘性基本消失了,沒法再壓縮
  • 解密過程:
    • 一、接收者輸入解密的口令:PGP的私鑰是保存在用戶的鑰匙串中的,使用基於口令的密碼(PBE)保存。口令是由多個單詞組成的短語。
    • 二、求口令的散列值,生成用於解密私鑰的密鑰
    • 三、將鑰匙串中通過加密的私鑰進行解密
    • 四、將報文數據(文本數據)轉換成二進制數據
    • 五、將二進制數據分解成兩部分:加密的會話密鑰、通過壓縮和加密的消息
    • 六、用私鑰密碼(3)解密會話密鑰
    • 七、對5中獲得的通過壓縮和加密的消息用對稱密碼(6)進行解密
    • 八、對7中獲得的通過壓縮的消息解壓縮
    • 九、獲得原始消息
  • 生成數字簽名
    • 一、發送者輸入簽名用的口令
    • 二、求口令的散列值,生成用於解密私鑰用的密鑰
    • 三、將鑰匙串中通過加密的私鑰進行解密
    • 四、用單項散列函數計算消息的散列值
    • 五、對4中的散列值進行簽名
    • 六、將5中的數字簽名和消息進行拼合
    • 七、將6進行壓縮
    • 八、將7轉換爲文本數據
    • 九、步驟8的結果就是報文數據
  • 驗證數字簽名
    • 一、將報文數據(文本數據)轉換爲二進制數據
    • 二、對通過壓縮的數據進行解壓縮
    • 三、將解壓縮後的數據分解成通過簽名的散列值和消息兩部分
    • 四、將通過簽名的散列值用發送者的公鑰進行解密,恢復出發送者發送的散列值
    • 五、將3中分解出的消息輸入單向散列函數計算散列值
    • 六、將4中獲得的散列值與步驟5中獲得的散列值進行對比
  • 信任網
    • 互相對對方的公鑰進行數字簽名
    • 信任級別:
      • 絕對信任(持有私鑰本人)
      • 徹底信任
      • 有限信任
      • 不信任

第十四章 SSL/TLS

  • 要解決的問題:
    • 不被竊聽:機密性
    • 不被篡改:完整性
    • 身份確認:認證問題
  • TLS協議:
    • 握手協議:負責除加密之外的其餘操做
      • 握手協議:負責在客戶端和服務器之間協商決定密碼算法和共享密鑰,基於證書的認證操做也在這個協議中完成
    • 密碼規格變動協議:負責向通訊對象傳達變動密碼方式的信號
    • 警告協議:負責在發生錯誤時將錯誤傳達給對端
    • 應用數據協議:將上層應用數據傳達給通訊對象
    • 記錄協議:位於TLS握手協議下層,負責對消息進行壓縮,使用對稱密碼對消息進行加密,用消息認證碼驗證。
      • 消息被分割成多個較短的片斷,而後分別對每一個片斷進行壓縮,壓縮算法須要與通訊對象協商
      • 壓縮對象被加上消息認證碼,保證完整性並進行數據認證,爲了防重放,計算時還加了片斷編號。
      • 壓縮片斷+消息認證碼經過對稱密碼進行加密。加密使用CBC模式,IV經過主密碼生成
    • 握手協議:
      • 1 ClientHello(客戶端→服務器):
        • 可用版本號
        • 當前時間:在基本的TLS中不使用
        • 客戶端隨機數
        • 會話ID:用於重建以前創建的會話
        • 可用的密碼套件清單
        • 可用的壓縮方式清單
      • 2 ServerHello(客戶端<---服務器)
        • 使用的版本號
        • 當前時間
        • 服務器隨機數:由服務器生成的不可預測的隨機數
        • 會話ID
        • 使用的密碼套件
        • 使用的壓縮方式
      • 3 Certificate(客戶端<----服務器)
        • 服務器給客戶端發送證書清單(X.509v3)先發送服務器證書,而後發送認證機構的證書
        • 以匿名方式通訊時,不發送Certificate消息
      • 4 ServerKeyExchange(客戶端<----服務器)
        • 當Certificate沒法知足需求時,以此補充Certificate信息,當不須要補充時,能夠不發送
      • 5 CertificateRequest(客戶端<----服務器)
        • 服務器對客戶端進行身份認證,不認證就不會發送這個消息
      • 6 ServerHelloDone(客戶端<---服務器)
        • 服務器問候到此結束
      • 7 Certificate(客戶端---->服務器)
        • 客戶端提供證書(取決於5)
      • 8 ClientKeyExchange(客戶端---->服務器)
        • 當密碼套件包含RSA時,會隨ClientKeyExchange消息一塊兒發送通過加密的預備主密碼
        • 當包含DH時,會隨ClientKeyExchange消息一塊兒發送DH的公開值
        • 預備主密碼(pre-master secret)是由客戶端生成的隨機數,後續會成爲生成主密碼的種子
        • 基於預備主密碼算出相同的主密碼,基於主密碼生成:
          • 對稱密碼的密鑰
          • 消息認證碼的密鑰
          • 對稱密碼的CBC模式中使用的初始化向量(IV)
      • 9 CertificateVerify(客戶端--->服務器)
        • 在服務器發送CertificateRequest消息時纔會回覆CertificateVerify,證實本身持有客戶端證書的私鑰
        • 計算主密碼和握手協議中傳送消息的散列值,加上本身的數字簽名
      • 10 ChangeCipherSpec(客戶端--->服務器)
        • 切換密碼(密碼規格變動協議的消息)
        • 在收到之歌消息後客戶端和服務器同時切換密碼
      • 11 Finished(客戶端--->服務器)
        • 使用切換後的密碼套件來發送
        • 消息內容固定,服務器能夠經過解密來確認正確性
      • 12 ChangeCipherSpec(客戶端<---服務器)
        • 服務器切換密碼
      • 13 Finished(客戶端<---服務器)
        • 結束握手
      • 14 切換至應用數據協議
    • 密碼規格變動協議:用於密碼切換的同步
      • 加密通訊的中途也可使用變動協議來修改密碼套件
    • 警告協議
      • 發生錯誤時通知通訊對象
    • 應用數據協議
      • 用於和通訊對象之間傳遞數據
    • 主密碼
      • 48字節的數值
    • 主密碼的計算
      • 計算元素:預備主密碼、客戶端隨機數、服務器隨機數
      • 客戶端隨機數和服務器隨機數的做用至關於防止攻擊者事先計算出密鑰的鹽
      • 計算方法:使用基於密碼套件中定義的單項散列函數來實現僞隨機函數
    • 主密碼的目的:
      • 對稱密碼的密鑰(客戶端--->服務器)
      • 對稱密碼的密鑰(客戶端<---服務器)
      • 消息認證碼的密鑰(客戶端--->服務器)
      • 消息認證碼的密鑰(客戶端<---服務器)
      • 對稱密碼的CBC模式所使用的初始化向量(客戶端--->服務器)
      • 對稱密碼的CBC模式所使用的初始化向量(客戶端<---服務器
  • 對SSL/TLS的攻擊
    • OpenSSL的心臟流血漏洞(CVE-2014-0160)
      • OpenSSL在TLS的心跳擴展功能中對於請求的數據大小沒有進行檢查,從而致使錯誤的將內存中與請求無關的信息返回給請求者
    • SSL 3.0的POODLE攻擊
      • SSL 3.0對CBC模式加密時的分組填充操做沒有進行嚴格的規定,並且填充數據的完整性沒有受到消息認證碼的保護
    • FREAK攻擊
      • 強制服務器使用RSA Export Suite(512比特的RSA 和40比特的DES)是的低強度密碼套件,經過暴力破解對稱加密的密鑰實現解密加密流量
    • 攻擊僞隨機數生成器
    • 利用證書時間差進行攻擊
  • SSL/TLS 用戶注意事項
    • 不要誤解證書的含義:證書只是確認了該服務器通過機構認證而不能說明是你要交互的服務器
    • 密碼通訊以前的數據不受保護
    • 密碼通訊以後的數據不受保護

第十五章 密碼技術與現實社會

  • 全部密碼技術均可以看作是一種「壓縮」技術
    • 和確保整個明文的機密性相比,確保密鑰的機密性更容易
    • 和檢查整個消息的完整性相比,檢查散列值的完整性更容易
    • ……
  • 比特幣
    • P2P網絡:
      • 依賴於全世界全部比特幣用戶組成的P2P網絡
    • 地址:
      • 比特幣交易在比特幣地址之間完成
      • 大多數狀況下人們會爲每一次比特幣交易建立不一樣的地址
      • 比特幣使用的地址油公鑰散列值組成:將橢圓曲線DSA的公鑰輸入SHA-256和RIPEMD-160兩個單項散列函數來求散列值,爲其附加一些信息後再經過Base58Check運行編碼轉換成字符串。
      • 爲了防止混淆,Base58Cheak編碼中不使用數字0 大寫O、大寫I及小寫L
    • 錢包
      • 比特幣交易的客戶端
      • 經過錢包生成密鑰對,公鑰用於接受比特幣,私鑰用於支付比特幣
    • 區塊鏈
      • 區塊鏈就是保存所有交易記錄的公共帳本,將交易以區塊爲單位組織起來
      • 區塊
        • 一個區塊由若干條交易以及一個區塊頭組成
        • 區塊頭中保存了上一個區塊的區塊頭散列值
        • 區塊頭中保存全部交易的總體散列值(merkle root),SHA-256
        • 保存一個名爲nonce的任意數值、時間戳、
    • 交易(A從B商店中購買商品,A向B支付1 BTC)
      • B建立公鑰密鑰對
      • B根據公鑰生成地址發給A
      • A建立公鑰密鑰對
      • A建立交易:從地址A向地址B發送1BtC,A用剛建立的私鑰對交易簽名
      • A將交易廣播到P2P網絡
      • 該交易和其餘交易被一塊兒打包到區塊,並添加到區塊鏈中
      • 添加的區塊被P2P網絡確認後,該交易成立
相關文章
相關標籤/搜索