概述
花了一天多粗略的翻了《圖解密碼技術(shù)》拳氢,圖解系列真是入門神書,能夠迅速的建立起一門學(xué)科的體系,強(qiáng)烈推薦圣蝎。
一些基本的概念
密碼算法和密鑰
密碼算法和密鑰是分開的兩個(gè)概念。比如凱撒密碼中衡瓶,將字母表中的字母平移這個(gè)操作是密碼算法徘公,而平移的字母數(shù)量就是密鑰。
密鑰空間
在某個(gè)密碼算法下哮针,所有的密鑰就是密鑰空間关面。
暴力破解
將密鑰空間中所有的密鑰全部試一遍,就是暴力破解十厢。
重放攻擊
竊聽(tīng)并保存A發(fā)往B的通信包等太,重復(fù)發(fā)送給B。
此時(shí)蛮放,Bob銀行會(huì)收到多次Alice銀行轉(zhuǎn)賬數(shù)據(jù)缩抡,且每次驗(yàn)證都是正確的。消息認(rèn)證碼包颁、數(shù)字簽名都不能防御
防御手段
- 序號(hào):每個(gè)消息都有一個(gè)編號(hào)
- 時(shí)間戳:發(fā)送者和接受者的時(shí)鐘必須一致缝其,而且考慮通信的延遲,必須在時(shí)間的判斷上留下緩沖徘六,于是多多少少還是會(huì)存在可以進(jìn)行重放攻擊的空間内边。
- nonce:通信之前,接受者都向發(fā)送者發(fā)送一個(gè)一次性的隨機(jī)數(shù)待锈,稱為nonce漠其,發(fā)送者在消息中包含這個(gè)nonce并計(jì)算MAC值。
密碼學(xué)家的工具箱
在本書中,最重要的概念就是密碼學(xué)家的工具箱和屎,全書都是圍繞工具箱中的各個(gè)工具以及各個(gè)工具的相互關(guān)系來(lái)講述的拴驮。看懂了這個(gè)工具箱柴信,密碼學(xué)就入門了套啤,而后各個(gè)工具都是一門博大精深的學(xué)問(wèn),需要再花時(shí)間細(xì)細(xì)研讀随常。
- 對(duì)稱密碼
- 公鑰密碼
- 單向散列函數(shù)
- 消息認(rèn)證碼
- 數(shù)字簽名
- 偽隨機(jī)數(shù)生成器
下面是我認(rèn)為書中最重要的兩個(gè)圖:
圖一:信息安全面臨的威脅和用來(lái)應(yīng)對(duì)的密碼技術(shù)
圖二:各個(gè)密碼技術(shù)之間的關(guān)系
對(duì)稱密碼
定義
對(duì)稱密碼是指加密和解密時(shí)使用同一密鑰的方式潜沦。
例子
比如加密和解密都用異或的方式。(對(duì)同一個(gè)比特序列進(jìn)行兩次XOR之后就會(huì)回到最初的狀態(tài))
A是比特序列绪氛,B是隨機(jī)生成的比特序列:
- 將明文A用密鑰B進(jìn)行加密唆鸡,得到密文(A XOR B)
- 將密文(A XOR B)用密鑰B進(jìn)行解密,得到明文A
密碼算法
- DES
- 三重DES
- AES
缺點(diǎn)
使用一種密鑰空間巨大枣察,且在算法上沒(méi)有弱點(diǎn)的對(duì)稱密碼争占,就可以通過(guò)密文來(lái)確保明文的機(jī)密性。巨大的密鑰空間能夠抵御暴力破解序目,算法上沒(méi)有弱點(diǎn)可以抵御其他類型的攻擊臂痕。但是對(duì)稱密碼仍然有弱點(diǎn):
- 密鑰的配送問(wèn)題:如何將密鑰安全地發(fā)送給接受者。(通過(guò)公鑰解決)
公鑰密碼
公鑰密碼用于解決密鑰配送問(wèn)題猿涨。
公鑰密碼無(wú)需向接受者配送解密的密鑰握童,是密碼學(xué)上最偉大的發(fā)明。
公鑰和私鑰
- 公鑰即加密密鑰嘿辟,可以任意公開舆瘪,使用時(shí)應(yīng)將公鑰發(fā)送給需要使用公鑰進(jìn)行加密的通信對(duì)象片效。
- 私鑰即解密密鑰红伦,絕對(duì)不能公開。
密碼算法
- RSA
缺點(diǎn)
- 公鑰密碼的處理速度只有對(duì)稱密碼的幾百分之一淀衣。(通過(guò)混合密碼系統(tǒng)解決)
- 公鑰認(rèn)證問(wèn)題:需要判斷得到的公鑰是否合法昙读。(通過(guò)證書解決)
混合密碼系統(tǒng)
混合密碼系統(tǒng)即用對(duì)稱密碼來(lái)加密明文,用公鑰密碼來(lái)加密對(duì)稱密碼中所使用的密鑰膨桥。
會(huì)話密鑰:為本次通信而生成的臨時(shí)密鑰蛮浑,一般是通過(guò)偽隨機(jī)數(shù)生成器生成的。會(huì)話密鑰是對(duì)稱密碼的密鑰只嚣,同時(shí)也是公鑰密碼的明文沮稚。
加密圖:
解密圖:
單向散列函數(shù)
單向散列函數(shù)用于檢測(cè)文件的完整性,即文件有沒(méi)有被篡改册舞。
性質(zhì)
- 根據(jù)任意長(zhǎng)度的消息計(jì)算出固定長(zhǎng)度的散列值
- 能夠快速計(jì)算出散列值
- 消息不同散列值也不同:抗碰撞性
- 單向性:無(wú)法通過(guò)散列值反算出消息
算法
- MD4
- MD5
- SHA-1
缺點(diǎn)
- 無(wú)法識(shí)別偽裝:無(wú)法檢查出發(fā)送者的身份的真實(shí)性蕴掏。(通過(guò)消息認(rèn)證碼解決)
消息認(rèn)證碼(對(duì)稱密鑰+單向散列)
使用消息認(rèn)證碼可以判斷消息是否被篡改,以及是否有人偽裝成發(fā)送者發(fā)送了該消息。
可以這么理解:消息認(rèn)證碼是一種與密鑰相關(guān)的單向散列函數(shù)盛杰。輸入包括任意長(zhǎng)度的數(shù)據(jù)和一個(gè)發(fā)送者與接收者之間共享的密鑰挽荡,輸出固定長(zhǎng)度的數(shù)據(jù),這個(gè)數(shù)據(jù)稱為MAC值即供。
認(rèn)證
要計(jì)算MAC值必須持有共享密鑰定拟,沒(méi)有共享密鑰的人就無(wú)法計(jì)算MAC值,消息認(rèn)證碼是利用這種性質(zhì)來(lái)完成認(rèn)證的逗嫡。
完整性
和單向散列函數(shù)的散列值一樣青自,哪怕消息中發(fā)生1比特的變化,MAC值也會(huì)發(fā)生變化祸穷,消息認(rèn)證碼正式利用這一性質(zhì)來(lái)確認(rèn)完整性的性穿。
算法
- HMAC
缺點(diǎn)
- 依然存在密鑰配送問(wèn)題
- 無(wú)法防止否認(rèn)(通過(guò)數(shù)字簽名來(lái)解決)
數(shù)字簽名(公鑰+單向散列)
數(shù)字簽名是將公鑰加密和解密反過(guò)來(lái)用。即用私鑰加密雷滚,用公鑰解密需曾。
用私鑰加密相當(dāng)于生成簽名
用公鑰解密相當(dāng)于驗(yàn)證簽名
數(shù)字簽名的方法
- 直接對(duì)消息簽名
- 對(duì)消息的散列值簽名
圖中省略了Alice發(fā)送公鑰給Bob的過(guò)程。
缺點(diǎn)
- 無(wú)法驗(yàn)證公鑰是屬于真正的發(fā)送者的(通過(guò)證書來(lái)解決)
證書
所謂證書祈远,就是將公鑰當(dāng)做一條消息呆万,由一個(gè)可信的第三方對(duì)其簽名后所得到的公鑰。
證書用來(lái)對(duì)公鑰的合法性進(jìn)行證明车份。
具體步驟
下圖中默認(rèn)Alice持有的認(rèn)證機(jī)構(gòu)的公鑰是可信的谋减。
PKI
PKI即公鑰基礎(chǔ)設(shè)施(public-key infrastructure)是為了能夠更有效的運(yùn)行公鑰而制定的一系列規(guī)范和規(guī)格的總稱。
組成元素:
- 用戶:使用PKI的人
- 認(rèn)證機(jī)構(gòu)(certificate authority):頒發(fā)證書的人
- 倉(cāng)庫(kù):保證證書的數(shù)據(jù)庫(kù)
用戶
- 希望使用PKI注冊(cè)自己的公鑰的人
- 希望使用已注冊(cè)的公鑰的人扫沼。
認(rèn)證機(jī)構(gòu)
- 生成密鑰對(duì)(也可由用戶生成)
- 在注冊(cè)公鑰時(shí)對(duì)本人身份進(jìn)行認(rèn)證
- 生成并頒發(fā)證書
- 作廢證書
倉(cāng)庫(kù)
證書的層級(jí)結(jié)構(gòu)
認(rèn)證機(jī)構(gòu)的公鑰也需要認(rèn)證出爹,所以用一個(gè)認(rèn)證機(jī)構(gòu)來(lái)驗(yàn)證另一個(gè)認(rèn)證機(jī)構(gòu)的公鑰,這樣的關(guān)系可以迭代好幾層缎除。最終我們需要一個(gè)“可信的種子”严就,因?yàn)椴豢赡茉谕耆豢尚诺臓顟B(tài)下創(chuàng)造出信任關(guān)系。