第一章
- 密碼與資訊安全常識
- 不要使用保密的密碼演算法:
- 密碼演算法的秘密早晚會公諸于世
- 試圖通過密碼演算法本身的保密性來保證安全稱之為隱蔽式安全,很蠢,
- 使用低強度的密碼比不進行任何加密更危險
- 任何密碼總有一天會被破解
- 不要使用保密的密碼演算法:
第二章
- 凱撒密碼:
- 位移實作加密
- 知道位移量即可進行逆向移動解密(也可以暴力窮舉破解)
- 替換密碼:
- 將明文中所有字母變替換為另一套字母表
- 密鑰空間:所有密鑰的集合
- 頻率分析:明文中字母出現的頻率與密文中字母出現的頻率是一致的
- 破譯技巧:
- 高頻字母和低頻字母都能成為線索
- 字母連成單詞
- 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輪
第四章 分組密碼的模式
- 分組密碼與流密碼
- 分組密碼:每次之只能處理特定長度的一塊資料的密碼演算法
- 流密碼:對資料流進行持續處理,一般以1、8、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:
- 將橢圓曲線上的點進行特殊的乘法運算
- EIGamal方式:
第六章 混合密碼系統
- 使用對稱密鑰加密明文,用非對稱密鑰加密對稱密鑰的密鑰
第七章 單向散列函式
- 單向散列函式的性質;
- 根據任意長度的訊息計算出固定長度的散列值
- 能夠快速計算出散列值
- 訊息不同散列值也不同
- 弱抗碰撞性:要找到和該條訊息具有相同散列值的訊息非常困難
- 強抗碰撞性:要找到散列值相同的兩條不同的訊息是非常困難的
- 具備單向性:無法通過散列值反推訊息
- 單向散列函式的應用:
- 基于口令的加密
- 訊息認證碼
- 數字簽名
- 偽亂數生成器
- 一次性口令
- 具體例子:
- MD4、MD5,已被攻破
- SHA-1(160bit),已被攻破
- SHA-2:由SHA-256、SHA-512衍生,224、256、384、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加密訊息
- 生成KEK
- PBE解密:
- 重建KEK
- 使用口令和之前保存的salt生成KEK
- 解密會話密鑰(CEK)
- 依然用對稱密鑰演算法基于KEK解密之前加密的CEK
- 解密訊息
- 使用解密出來的CEK解密被加密的訊息
- 重建KEK
- salt的作用
- 鹽是由偽亂數生成器生成的亂數
- 鹽是用來防御字典攻擊的,口令加鹽增加了預先生成匹配的KEK的難度
- 口令的作用:
- 具有充足長度的密鑰是無法用人腦記憶的
- 通過拉伸來改良PBE
- 將KEK再輸入到單向散列函式中,來個1000次
- 如何生成安全的口令
- 使用只有自己才能知道的資訊
- 不要使用對自己重要的人或事的名字
- 不要使用關于自己的資訊
- 不要使用別人見過的資訊
- 將多個不同的口令分開使用
- 有效利用筆記
- 理解口令的局限性
- 使用口令生成和管理工具
- 使用只有自己才能知道的資訊
- PBE加密:
第十二章 亂數
- 亂數的使用場景
- 生成密鑰
- 生成密鑰對
- 生成初始化向量(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
- 1、初始化內部狀態
- 2、將當前時間加密生成掩碼
- 3、對內部狀態與掩碼求XOR
- 4、將3的結果加密
- 5、將4的結果作為偽亂數輸出
- 6、對4的結果與掩碼求XOR
- 7、將步驟6的結果加密
- 8、將步驟7的結果作為新的內部狀態
- 9、重復2-8直到獲得所需數量的亂數
- 對偽亂數生成器的攻擊:
- 對種子進行攻擊:偽亂數的種子和密碼的密鑰同等重要
- 對亂數池進行攻擊
第十三章 PGP
- PGP簡介:
- 1990年,Pretty Good Privacy
- 混合密碼系統的特點:用公鑰密碼加密會話密鑰,用對稱密碼加密訊息
- PGP的功能
- 對稱密碼
- 公鑰密碼
- 數字簽名
- 單項散列函式
- 證書
- 壓縮
- 文本資料
- 大檔案的拆分和合并
- 鑰匙串管理
- 加密程序:
- 1、用偽亂數生成器生成會話密鑰
- 2、用公鑰密碼(接收者的)加密會話密鑰
- 3、壓縮訊息
- 4、使用對稱密碼(使用1中生成的會話密鑰)對壓縮的訊息進行加密
- 5、將加密的會話密鑰(2)和加密的訊息(4)拼合起來
- 6、將步驟5的結果轉換為文本資料,轉換后的結果就是報文資料
- 為什么要先壓縮再加密而不是反過來:因為經過加密后位元序列的冗余性基本消失了,無法再壓縮
- 解密程序:
- 1、接收者輸入解密的口令:PGP的私鑰是保存在用戶的鑰匙串中的,使用基于口令的密碼(PBE)保存,口令是由多個單詞組成的短語,
- 2、求口令的散列值,生成用于解密私鑰的密鑰
- 3、將鑰匙串中經過加密的私鑰進行解密
- 4、將報文資料(文本資料)轉換成二進制資料
- 5、將二進制資料分解成兩部分:加密的會話密鑰、經過壓縮和加密的訊息
- 6、用私鑰密碼(3)解密會話密鑰
- 7、對5中得到的經過壓縮和加密的訊息用對稱密碼(6)進行解密
- 8、對7中得到的經過壓縮的訊息解壓縮
- 9、得到原始訊息
- 生成數字簽名
- 1、發送者輸入簽名用的口令
- 2、求口令的散列值,生成用于解密私鑰用的密鑰
- 3、將鑰匙串中經過加密的私鑰進行解密
- 4、用單項散列函式計算訊息的散列值
- 5、對4中的散列值進行簽名
- 6、將5中的數字簽名和訊息進行拼合
- 7、將6進行壓縮
- 8、將7轉換為文本資料
- 9、步驟8的結果就是報文資料
- 驗證數字簽名
- 1、將報文資料(文本資料)轉換為二進制資料
- 2、對經過壓縮的資料進行解壓縮
- 3、將解壓縮后的資料分解成經過簽名的散列值和訊息兩部分
- 4、將經過簽名的散列值用發送者的公鑰進行解密,恢復出發送者發送的散列值
- 5、將3中分解出的訊息輸入單向散列函式計算散列值
- 6、將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 切換至應用資料協議
- 1 ClientHello(客戶端→服務器):
- 密碼規格變更協議:用于密碼切換的同步
- 加密通信的中途也可以使用變更協議來修改密碼套件
- 警告協議
- 發生錯誤時通知通信物件
- 應用資料協議
- 用于和通信物件之間傳遞資料
- 主密碼
- 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)是的低強度密碼套件,通過暴力破解對稱加密的密鑰實作解密加密流量
- 攻擊偽亂數生成器
- 利用證書時間差進行攻擊
- OpenSSL的心臟流血漏洞(CVE-2014-0160)
- 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網路確認后,該交易成立
- P2P網路:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/2059.html
標籤:其他
上一篇:金融書籍推薦
