在網(wǎng)絡(luò)安全中我們經(jīng)常會(huì)遇到很多的安全問(wèn)題,我們拋去前端漏洞,來(lái)聊聊網(wǎng)絡(luò)通信和網(wǎng)絡(luò)協(xié)議方面的,很多時(shí)候都會(huì)聽(tīng)到https,加密解密等,遇到漏洞,安全解決方案很多也都是用安全通道傳輸,用對(duì)稱(chēng)加密,用非對(duì)稱(chēng)加密等等解決方案
我們就針對(duì)這些簡(jiǎn)單介紹下密碼方面的知識(shí).
來(lái)看這個(gè)場(chǎng)景:
有一天,Bob正在瀏覽網(wǎng)頁(yè)的時(shí)候,遇到頁(yè)面彈出一個(gè)框框,上面寫(xiě)著”老婆不在的時(shí)候玩的游戲哦”,bob很興奮的打開(kāi)開(kāi)始玩游戲,為了看到你懂的的時(shí)候,已經(jīng)花了上千元了,bob非常氣憤,打電話給網(wǎng)站客服,說(shuō)你們騙人,我都充了那么多錢(qián)了,客服來(lái)了句,我們沒(méi)有這個(gè)游戲推廣啊,這個(gè)發(fā)生了啥?Bob說(shuō)這個(gè)在你們網(wǎng)站上彈出來(lái)的推廣啊.
另一種場(chǎng)景,bob使用信用卡買(mǎi)東西,信用卡沒(méi)有設(shè)置密碼驗(yàn)證,輸入了信用卡卡號(hào)和cvv2碼之后支付成功了,隔了幾天之后,bob收到了信用卡客服電話,說(shuō)你的信用卡已經(jīng)刷爆了,這個(gè)發(fā)生了什么事情?我只用過(guò)一次,只支付了100元啊.
這里遇到的兩個(gè)問(wèn)題:
正常的網(wǎng)頁(yè)中被插入了不正常的代碼,或者登入到了一個(gè)假冒的頁(yè)面網(wǎng)站
信用卡信息被其他人利用了
那么來(lái)考慮解決方法:
保證網(wǎng)頁(yè)信息在傳輸過(guò)程中不被其他人篡改(完整性)
保證個(gè)人敏感信息傳輸過(guò)程中不被其他人竊聽(tīng)(機(jī)密性)
我們還得保證登入的站點(diǎn)是正確,可靠的網(wǎng)站(認(rèn)證)
我們可以考慮下是不是可以通過(guò)加密來(lái)解決這些問(wèn)題呢?
首先我們需要了解幾個(gè)加密機(jī)制:對(duì)稱(chēng)加密,非對(duì)稱(chēng)加密,消息認(rèn)證碼,簽名,證書(shū)
對(duì)稱(chēng)加密:
你們之間決定對(duì)信息進(jìn)行了加密,你們之間商量好了一個(gè)密碼,你可以想象成一個(gè)密碼箱,秘密信息鎖在密碼箱中,只有你們兩個(gè)知道密碼,這樣Eve拿到了密碼箱,不知道密碼,他就無(wú)法獲取到你們之間的傳遞的信息了
在網(wǎng)絡(luò)中傳輸信息就不能有密碼箱存在了,那么可以可以協(xié)商一個(gè)密碼,被成為密鑰,比如一串?dāng)?shù)字:778279381038710238676,這串?dāng)?shù)字是只有你們之間才知道的.Alice使用這串密鑰加密信息:”星期天在河邊交易”.
我們暫時(shí)不考慮加密的具體實(shí)施,最終形成的信息是:”阿達(dá)色調(diào)的完全”,這個(gè)在網(wǎng)絡(luò)中傳輸,Eve拿到的信息也只是這個(gè),沒(méi)有任何意義的,信息傳遞到blob那邊,使用同樣的密鑰解密出字符串:”星期天在河邊交易”.
這樣就完成了信息的加密傳輸,這種方式就叫做對(duì)稱(chēng)加密.從例子來(lái)看,也就是加密和解密中使用的是同一套密鑰
非對(duì)稱(chēng)加密
從非對(duì)稱(chēng)就可以看出和對(duì)稱(chēng)加密的不同,對(duì)稱(chēng)加密是使用同一套密鑰,那么非對(duì)稱(chēng)加密就是使用的不是同一套密鑰.
舉例來(lái)說(shuō),Alice完成了信息的加密,但是她的密鑰信息泄漏了,eve拿到了他的密鑰信息和加密后的信息,在對(duì)稱(chēng)加密中這樣eve就能直接拿到明文信息了,但是在這次Alice和Blob采用了非對(duì)稱(chēng)加密的方式,eve發(fā)現(xiàn)拿到的密鑰去解密信息,發(fā)現(xiàn)還是無(wú)意義的字符串:”阿三大哇塞大鍋飯”,以為不是啥敏感信息,傳遞到了Blob,blob使用自己的密鑰成功解密了信息:”星期天在河邊交易”
非對(duì)稱(chēng)加密就是加密密鑰和解密密鑰是不一樣的
消息認(rèn)證碼和證書(shū)
消息認(rèn)證碼是一種域密鑰相關(guān)聯(lián)的單向散列函數(shù),單向散列函數(shù)就是我們常說(shuō)的hash,常見(jiàn)的包括了md5,sha1等等
證書(shū):為公鑰加上數(shù)字簽名,和駕照相似,里面記錄了姓名,組織,郵箱,地址等個(gè)人信息,以及屬于此人的公鑰,并由認(rèn)證機(jī)構(gòu)施加數(shù)字簽名.確認(rèn)該公鑰確實(shí)屬于此人.
證書(shū)也是在安全中用到最多的一種機(jī)制
簽名
數(shù)字簽名在安全中很重要,后面找個(gè)時(shí)間單獨(dú)說(shuō)說(shuō)
要是了解非對(duì)稱(chēng)之后可以看下面這個(gè):
非對(duì)稱(chēng)加密:加密密鑰只能由解密的人持有,加密的密鑰可以任何人持有
數(shù)字簽名:簽名密鑰只有簽名的人持有,驗(yàn)證密鑰可以任何人持有
好了,下面我們來(lái)解決我們剛才遇到的問(wèn)題:
保證機(jī)密性,可以考慮使用對(duì)稱(chēng)加密,我們生成隨機(jī)密鑰,通過(guò)非對(duì)稱(chēng)加密機(jī)制把密鑰發(fā)送給通信對(duì)象
要保證完整性,可以考慮消息認(rèn)證碼,要保證認(rèn)證問(wèn)題,可以考慮使用證書(shū)
ok,我們只要把這三個(gè)方案放到一個(gè)框架中,就解決問(wèn)題了,那么這個(gè)就是SSL/TSL協(xié)議
HTTPS
用SSL和TSL作為通信進(jìn)行加密,然后再進(jìn)行http的傳輸,這樣url產(chǎn)生的就是https://
開(kāi)頭的,大家可以訪問(wèn)baidu看看.
除了http,SSL/TSL也可以用保護(hù)其他的協(xié)議:smtp,pop3等等,這樣收發(fā)郵件也有了安全的傳輸
SSL/TSL的區(qū)別
TLS的主要目標(biāo)是使SSL更安全肆捕,并使協(xié)議的規(guī)范更精確和完善
1 更安全的MAC算法
2 更嚴(yán)密的警報(bào)
3 “灰色區(qū)域”規(guī)范的更明確的定義
使用SSL/TSL進(jìn)行通信
握手協(xié)議
握手協(xié)議是TLS協(xié)議的一部分,復(fù)雜生成共享密鑰和交換證書(shū),其中,生成共享密鑰是為了進(jìn)行密碼通信,交換證書(shū)是為了通信雙方互相進(jìn)行認(rèn)證
客戶(hù)端:”你好,我能理解的密碼套件有RSA/3DES,或者DSS/AES”,請(qǐng)問(wèn)我們使用哪一種進(jìn)行通信呢?” (ClientHello 消息)
服務(wù)器:”你好,我們使用RSA/3DES來(lái)進(jìn)行通信吧.” (ServerHello 消息)
服務(wù)器:”好,這個(gè)是我的證書(shū)” (Certificate消息:證書(shū)清單)
服務(wù)器:”我們用這些信息做密碼交換吧”(ServerKeyExchange消息)
服務(wù)器:”還有請(qǐng)給我看下你的證書(shū)” (CertificateRequest消息)
服務(wù)器:”我到此結(jié)束” (ServerHelloDone消息)
客戶(hù)端:”這個(gè)是我的證書(shū)”( Certificate證書(shū)消息)
客戶(hù)端:”這個(gè)我進(jìn)過(guò)加密的預(yù)備主密碼”(ClientKeyExchange消息)
客戶(hù)端:”我確實(shí)是客戶(hù)端證書(shū)的持有者” (CertificateVerrify消息)
客戶(hù)端:”好,現(xiàn)在我切換密碼了” (ChangeCiperSpec)
客戶(hù)端:”結(jié)束” (Finished)
服務(wù)器:”我要切換密鑰了”(ChangeCiperSpec)
服務(wù)器:”握手結(jié)束”
經(jīng)過(guò)這些流程:
客戶(hù)端獲取到服務(wù)器的合法公鑰,完成服務(wù)器認(rèn)證
服務(wù)器獲取到客戶(hù)端的合法公鑰,完成后服務(wù)器認(rèn)證
客戶(hù)端和服務(wù)器生成了密碼通信過(guò)程中的共享密鑰
客戶(hù)端和服務(wù)器生成了消息認(rèn)證碼中的使用的共享密鑰
#######密碼規(guī)格變更協(xié)議
用戶(hù)密碼切換的同步
警告協(xié)議
發(fā)生了錯(cuò)誤異常后使用
應(yīng)用數(shù)據(jù)協(xié)議
用于和通信對(duì)象之間傳送應(yīng)用數(shù)據(jù)
主密碼
主密碼是TSL客戶(hù)端和服務(wù)器之間協(xié)商出來(lái)的一個(gè)秘密的數(shù)值
對(duì)SSL/TSL的已知攻擊方式
OPENSSL的心臟出血
POODLE 攻擊
FREAK攻擊
對(duì)偽隨機(jī)數(shù)生成器的攻擊
利用證書(shū)的時(shí)間差進(jìn)行攻擊