计算机网络:浅谈HTTPS和加密
1. 前言
最近研究HTTPS(超文本傳輸安全協議),是在HTTP協議的基礎上增加了一層SSL協議。SSL協議用來在客戶端和服務器之間創建一個安全可靠的通信環境,那么我們要深入了解HTTP協議是如何做到安全可靠的通信,我們就要了解一下簡單的密碼學原理。下面我們就開始從密碼學講起,然后深入到HTTPS相比HTTP協議之上如何去建立一個可靠安全的通信。
2. 加密方式
密碼學是一門涉及數學、電子信息、計算機等多學科的一門重要學科,是現代網絡安全的基石。其中加密方式可以分為兩類,一類是可逆的加密方式,一類是不可逆的加密方式
2.1 不可逆的加密方式
信息摘要(Message Digest)和安全散列(Secure Hash)算法屬于此類,常見的算法包括 MD5、SHA1、PBKDF2、bcrypt 等。此類算法可將任意大小的原始數據變換成規定長度的輸出,即獲取內容的數字指紋,常用于校驗原始內容是否被篡改。
2.2 可逆的加密方式
可逆的加密方式又可以分為以下三種:
- 基于算法的加密算法,也被稱為古典加密算法,如 HTTP 認證中的 base64,比特幣生成地址用的 base58(公開的算法也可稱作編碼方式)。這類算法主要對原始內容進行置換和替換得到密文。
- 對稱加密算法,加密和解密使用同一個密鑰。對稱加密算法的出現標志密碼學進入現代密碼學階段,密文的安全性從依賴于算法轉向依賴于密鑰。常見的對稱加密算法有 DES、3DES、AES;
- 非對稱加密算法,加密和解密使用不同的密鑰。非對稱加密算法開創了密碼學的里程碑,解決了對稱加密過程中密鑰分發的安全問題,被認為現代密碼學最偉大的發明。常見的算法有 RSA、DH(Diffie-Hellman)、橢圓曲線算法(Elliptic curve cryptography,ECC)。
對稱加密算法
這里我們重點來介紹對稱加密和非對稱加密。對稱加密就是指加密和解密都是使用的同一個密鑰。
也就是說在加密的同時,也會把密鑰發送給對方。在發送密鑰過程中可能會造成密鑰被竊取,那么如何解決這一問題呢?
非對稱加密算法
公開密鑰使用一對非對稱密鑰。一把叫私有密鑰,另一把叫公開密鑰私有密鑰不讓任何人知道,公有密鑰隨意發送。也就是說,發送密文方使用對方的公開密鑰進行加密,對方接受到信息后,使用私有密鑰進行解密。非對稱加密算法還可以用來做數字簽名。
對于公鑰和私鑰的理解,我們可以查看如下博客 公鑰、密鑰、數字簽名
公鑰就是指的是密鑰是公開的,每個人都可以持有一把公鑰。私鑰就是指的是密鑰是私有的,只能被私鑰擁有者使用。
- 當網絡中的其他人要發送消息給私鑰擁有者的時候,其他人可以用公鑰對消息進行加密,私鑰擁有者獲取到加密后的消息,然后使用私鑰進行解密。
- 當私鑰擁有者要發送消息給網絡中其他人的時候,私鑰擁有者可以通過對消息進行Hash函數,生成相應的摘要。然后通過使用私鑰對要發送的摘要進行加密,生成數字簽名,然后將數字簽名和加密后的消息發送給網絡其他人。網絡其他人收到加密后的消息,通過對數字簽名使用公鑰進行解密生成摘要,然后對消息通過Hash函數,生成相應的摘要。通過對比解密后的摘要和Hash函數生成的摘要,判斷消息是否在網絡中被篡改。但是這種通信還會存在一定的問題,萬一網絡其他人的公鑰被攻擊者篡改成自己的公鑰,那么這種網絡通信就不安全的。下面講解如何通過CA認證中心對公鑰進行認證,生成數字證書。
- 私鑰擁有者通過去找“證書中心”,為公鑰進行認證。證書中心用自己的私鑰,對私鑰擁有者的公鑰和一些相關信息做認證一起加密,生成“數字證書”。然后私鑰擁有者將數字證書以及數字簽名和消息發送給網絡其他人,網絡其他人通過使用認證中心提供的公鑰對“數字證書”進行解密,得到安全可靠的公鑰,然后使用公鑰對“數字簽名”進行解密,得到相應的摘要。通過對比解密后的摘要和Hash函數生成的摘要,判斷消息是否在網絡中被篡改。
3. HTTPS(超文本傳輸控制協議)
解決的問題:在HTTP協議中有可能存在信息竊聽或身份偽裝等問題,而使用HTTPS通信機制可以有效地防止這些問題。
HTTP協議存在的問題:
3.1 HTTPS簡介
什么是HTTPS:與SSL(安全套接層)組合使用的HTTP被稱為HTTPS(HTTP Secure,超文本傳輸安全協議)
加密處理防止竊聽:通信加密。HTTP協議與SSL組合使用,加密HTTP的通信內容。用SSL建立安全通信線路之后,就可以在這條線路通信了。
HTTP + 加密 + 認證 + 完整性保護 = HTTPS在使用http協議時,HTTP直接與TCP通信,當使用SSL時,則需要先與SSL通信,然后再由SSL和TCP通信。
3.2 HTTPS采用混合加密機制
HTTPS采用共享密鑰加密和公開密鑰加密兩者混合加密,兩者都有各自的優點。共享密鑰加密處理速度快,但密鑰無法安全發送給對方;公開密鑰加密處理速度慢,但密鑰能夠安全交換。
但如果我們將兩種加密方式一起使用,則兩種加密方式就能互補。也就是說,利用公開密鑰加密方式安全地交換在共享密鑰加密中要使用的密鑰,在確保密鑰安全前提下,使用共享密鑰加密方式進行通信
下面我們來詳細討論一下HTTPS如何通過SSL協議獲得安全可靠的共享密鑰:
總結
以上是生活随笔為你收集整理的计算机网络:浅谈HTTPS和加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NIO详解(十):FileChannel
- 下一篇: NIO详解(三):IO多路复用模型之se