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