對稱加密 vs 非對稱加密

2023-09-13 12:02:15

計算機網路在給我們帶來便利的同時,也存在很多安全隱患,比如資訊偽造,病毒入侵,端點監聽,SQL 注入等,給我們日常生活造成很嚴重的影響。

那麼這篇文章我就跟大家聊聊常見的網路安全隱患,只作為科普,不能作為網安系列文章。

網路安全性威脅的種類

在網路通訊中可能會受到各種各樣的潛在的安全性威脅,這些威脅總的來講可以大致分為下面幾類:

  • 截獲(interception):攻擊者從網路上竊聽他人的通訊內容。
  • 中斷(interruption):攻擊者會強制中斷其他人在網路上的通訊。
  • 篡改(modification):攻擊者會修改他人在網路上發出的報文。
  • 偽造(fabrication):攻擊者會在網路上發出偽造資訊產生誤導。

在上面四種網路安全型別中,截獲是屬於被動攻擊的,因為截獲主要為了竊聽資訊,它並沒有攻擊行為;而中斷、篡改和偽造都是主動攻擊,他們會產生攻擊行為。

這裡先來認識一個新的概念叫 PDU ,PDU 的官方解釋是協定資料單元,但是它其實指的就是計算機網路這幾層模型裡面所描述的資料單元,比如應用層交換的就是應用資料,TCP 層的 PDU 交換的就是段。

在被動攻擊中,攻擊者只是觀察和分析 PDU ,並沒有對通訊內容造成干擾。通過觀察和分析 PDU,進而瞭解通訊雙方的通訊型別,通訊雙方的地址和身份,這種被動攻擊又叫做流量分析(traffic analysis)

主動攻擊是指攻擊者對通訊內容中的 PDU 進行各種處理。比如有選擇的更改、替換 PDU 中的記錄,甚至還可以偽造 PDU ,記錄之前截獲的 PDU ,在其他連線中釋放此 PDU ,造成通訊干擾和破壞。

主動攻擊還可以細分為下面三種型別:

  • 更改報文資訊:這個就是我上面說到的替換修改甚至偽造報文資訊,對 PDU 的真實性和完整性進行攻擊。
  • 拒絕服務:攻擊者會在網路上傳送大量的分組,使得目標服務無法處理大量的分組資訊,使得目標伺服器無法提供正常有效的服務,這種攻擊又叫做 拒絕服務 Dos(Denial of Service),還有一種由成千上萬個分散式節點一起對目標伺服器發起攻擊的方式,叫做 分散式拒絕服務 DDos(Distributed Denial of Service)
  • 連線偽造:攻擊者試圖使用之前記錄下來的資訊和身份進行偽造發起連線請求。

那麼我們該如何知道計算機被攻擊了呢?

對於被動攻擊,通常是無法檢測出來的,對於主動攻擊,我們通常會以下面這幾個大前提進行防範:

  • 防止析出報文內容
  • 防止流量分析
  • 檢測更改報文內容
  • 檢測 DDos
  • 檢測偽造初始化連線

對於被動攻擊,可以採用各種資料的加密技術;對於主動攻擊,可以採用防範措施與加密技術結合防範。

還有一種威脅比較大的是惡意程式,會對網際網路造成比較大的影響,據史料記載,網際網路編年體到現在出現比較大規模影響的病毒有:計算機病毒、計算機蠕蟲、特洛伊木馬、邏輯炸彈、勒索軟體等。

資料加密的模型

由於通訊存在不安全性,所以出現了加密技術,使用加密技術對報文進行加密後,再傳到目標伺服器後再進行解密,一般的加密和解密模型如下圖所示:

上圖所示的加密金鑰和解密金鑰所使用的金鑰 K 通常是一串字串,一般來說會有下面這種公式

Y = Ek(X)

通過加密演演算法使用加密金鑰對明文 X 進行加密。

解密演演算法是加密演演算法的逆運算,再進行解密時如果不使用事先約定好的金鑰 K 就無法完成解密工作。

Dk(Y) = Dk(Ek(x)) = X

這裡我們假設了加密金鑰和解密金鑰是相同的,但真實情況未必一定是相同的,只不過加密金鑰和解密金鑰存在著某種關聯性,這個金鑰通常由金鑰中心提供。當金鑰進行傳輸時,一定要經過安全通道,否則會有安全風險。

這裡延伸出來了兩個新的概念,密碼編碼學(cryptography)密碼分析學(cryptanalysis)。密碼編碼學著重對密碼進行設計的學科,密碼分析學著重對報文進行分析,提煉出加密所使用明文或者金鑰的學科。這兩個學科合起來就是密碼學。其實密碼學歸根結底就是做好加密和解密的這個過程

對稱加密和非對稱加密

從很早以前人類就有了對通話內容進行加密的思想,進入 20 世紀以來,隨著電子資訊、線性代數以及計算複雜性理論等學科的研究深入,密碼學進入了一個新的發展階段,一共出現了兩種密碼機制:對稱加密和非對稱加密。

對稱加密

所謂的對稱加密,起歸根結底在於加密和解密的金鑰是相同的

資料加密標準 DES(Data Encryption Standard) 就是一種對稱加密的標準,DES 可以說是用途最廣泛的對稱加密演演算法。

DES 是一種分組密碼,在加密前首先先對整個報文進行分組,每一組都是 64 位的二進位制資料。然後對每一個 64 位的二進位制資料進行加密,產生一組 64 位的密文資料,最後將各組密文串起來,就是整個加密密文。使用的金鑰是 64 位(實際使用 56 位,最後 8 位於奇偶校驗)。

在 DES 分組加密機制中,進行保密的只是加密金鑰,而加密演演算法是公開的。

不過 DES 的這種加密機制是存在弊端的:由於 DES 會把報文拆開成為一組一組的 64 位資料,64 位二進位制資料有 56 位可用,所以資料總量是 2 ^ 56 次方,它的密碼生命週期非常段,這個資料總量在現在的計算機世界非常容易被破解!在 1999 年當時價值 100 萬和 1000 萬美元的超級計算機暴力破解 DES 的密碼分別用了 3.5 小時和 21 分鐘。

在 DES 之後出現了 IDEA(International Data Encryption Algorithm) 演演算法,IDEA 使用的是 128 位金鑰進行加密,這個長度很難被破解了。

非對稱加密

非對稱加密其實還有一個叫法是公鑰密碼加密,非對稱加密使用的是不同的加密金鑰和解密金鑰

非對稱加密出現的原因大概是基於兩個方面:一是由於對稱加密的金鑰分配問題,二是由於對數位簽章的要求。在對稱加密中,加密解密雙方用的是同一種金鑰,這是如何做到的呢?一種是事先約定,另外一種是使用網際網路信使來傳送。在大規模網際網路中,用信使來傳輸金鑰顯然是不太合適的,但是如果採用事先約定的方式,那麼對於後續的更新和迭代來說又比較困難。還有一種方式是使用安全係數比較高的金鑰分配中心(Key Distribution Center),也會使網路的成本增加。

同時,一些需要對資訊內容進行保密的機構越來越需要數位簽章,根據數位簽章,對方才知道某項內容是由特定的人或者公司產生的。根據這兩項原因導致了非對稱加密的出現。

非對稱加密主要的演演算法有三種:RSA、DSA、ECDSA,目前使用最廣泛、最普遍的非對稱加密演演算法就是 RSA。RSA 採用的是數論中的大數分解方式。

非對稱加密的特點是這樣的:

某些能夠生產公鑰和私鑰的金鑰生成器會生產出一對公鑰和私鑰給接受者 B :即加密金鑰 PKB 和 解密金鑰 SKB。傳送者所使用的加密金鑰也是 PKB,這個金鑰是公開的,而接受者的解密金鑰 SKB 是非公開的,接受者 B 特有的。

傳送者利用接受者的金鑰 PKB 通過加密演演算法 E 對金鑰進行加密,得出了密文 Y 再傳送給接受者 B:

Y = E(PKB(X))

接受者 B 用自己的私鑰通過解密演演算法 D 對密文 Y 進行解密,得出密文 X :

D(SKB(Y))= D(SKB)( E(PKB(X))) = X

下圖是這個加密解密過程:

這裡需要注意一點的是,任何加密方法的安全性都取決於金鑰的長度,以及攻破密文所需要的計算量,而不是簡單的取決於加密本身。

數位簽章

我們在日常寫信、上交某些材料的時候都需要親筆簽名或者使用手印、印章的方式來驗證真實性,那麼在網際網路中如何驗證其真實性呢?在網路通訊中,使用數位簽章的方式來驗證,數位簽章必須實現下面三點功能:

  1. 接受者能夠核實傳送者對報文的簽名,確定報文是由傳送者發出的,別人無法進行偽造,這叫做報文鑑別
  2. 接受者確信所收到資料和傳送者傳送的資料是一致的,沒有被篡改過,這叫做報文完整性
  3. 傳送者事後不能抵賴自己傳送的報文,這叫做不可否認

下面來討論一下數位簽章的鑑別過程:

首先,傳送者 A 用自己的私鑰 SKA 對報文 A 經過演演算法 D 後得出密文 D(SKA(X)),演演算法 D 不是解密運算,它只是一個能得到不可讀的密文的演演算法。A 把經過演演算法 D 運算後得出來的密文傳給 B,B 對其進行驗籤。B 會用 A 的公鑰進行 E 運算,還原出報文 X 。

這裡需要注意一點:任何人用 A 的公鑰 PKA 進行 E 運算後都會得出 A 傳送的明文 X ,所以下圖中的 D 和 E 演演算法並不是加密解密演演算法。

除了 A 之外沒有人持有 A 的私鑰 SKA ,所以除 A 外沒有人能產生密文 D(SKA(X))。這樣,B 就相信報文 X 是簽名 A 傳送的,這就叫做報文鑑別。如果其他人篡改過報文,但是卻無法使用私鑰 A 的簽名 SKA,那麼 B 使用公鑰解密後就知道報文被篡改過,這樣就保證了報文的完整性。如果 A 想要抵賴自己層發給過報文 B ,那麼 B 就可以把 X 以及密文 D(SKA(X))拿給公證的第三者,很容易證明。這就是不可否認。

但是上述過程僅僅對報文進行了簽名,卻並沒有對報文字身進行任何加密操作,如果傳輸的過程中被攻擊者截獲到了 D(SKA(X))並且知道傳送者身份的人,就可以通過查閱相關手冊知道 A 的公鑰,從而得知 A 的明文,這顯然是不安全的,如何解決呢?

需要使用上面的非對稱加密演演算法再對明文 X 進行加密一波,示意圖如下。

示意圖畫出來,估計大家也好理解,無非就是增加了一步用 B 的公鑰加密,在用 B 的私鑰解密的過程。

計算機網路系列文章

好傢伙!計算機網路基礎知識釋出!

TCP/IP 基礎知識總結

拿下計網協定後,我就是最亮的仔

UDP ,你要耗子喂汁呀!

40 張圖帶你搞懂 TCP 和 UDP

IP 基礎知識總結

ARP,這個隱匿在計網背後的男人

ICMP 是個啥破玩意?

趣聊 DHCP ,有點意思

帶帶弟弟徹底搞懂鏈路層

瀏覽器輸入「xxxxhub」的背後.....

TCP ,丫的終於來了!!

TCP 基礎知識

原來這才是 Socket!

NAT 協定???

10 分鐘講完 QUIC 協定

DNS,給你安排明白了!

HTTP/3 ,它來了。

萬字長文爆肝路由協定!