1. 程式人生 > >深入淺出密碼學(上)

深入淺出密碼學(上)

前言

無論你有沒有意識到,日常生活中我們幾乎每天都在跟密碼學打交道。只要你接觸過網際網路,那麼基本上離不開密碼學。舉個最簡單的例子,現在的很多網站都是通過HTTPS協議進行通訊的,而支撐著HTTPS協議正常執行的正是密碼學這一理論基礎。作為程式設計師,我們更是有必要了解下密碼學的一些基本理論及其背後的原理。本文將通過通俗易懂的語言為大家介紹下密碼學的概念,希望大家看完能夠對密碼學有初步的認識。

一、加密

在介紹加密之前,我們先引入一個場景。假設有2個人小明和小白,他們倆通過電子郵件進行溝通。由計算機網路的知識我們可以知道,小明發給小白的郵件會被拆分成多個數據報文在網路中進行傳輸,假如說有個竊聽者小黑截獲了小明發給小白的資料報文,並將截獲的資料報文按順序組裝起來,然後按照標準郵件傳輸協議進行解析,則小黑就可以獲得小明發送給小白的郵件內容了,因此在這個發郵件的過程中就存在被第三者竊聽的風險。為了解決這個問題,我們需要對資訊進行加密以防止資料被竊聽。接下來介紹今天要講的第一個內容:加密。

在上述例子中,之所以存在資料被竊聽的風險,是因為在通訊的過程中郵件內容是通過明文進行傳輸的。明文就是未加密處理的訊息內容,在上述例子中就是郵件內容。假如說小明跟小白在郵件通訊的過程中採用了只有雙方看得懂的文字,那麼即使這些文字被第三者截獲了,那麼第三者也看不懂其中的含義,這樣就可以防止竊聽了。而這個過程就是加密,即將明文轉換成密文的過程,密文對於第三者而言就是沒有任何意義的資料,只有通訊雙方才有辦法將密文轉換成明文,進而獲取郵件裡傳輸的原始可讀內容。而將密文轉換成明文的過程就是解密。

既然要進行加密跟解密就必須用到金鑰。金鑰與資料的關係可以理解成保險櫃鑰匙跟保險櫃的關係,只有正確的保險櫃鑰匙才能開啟對應的保險櫃,同理也只有正確的金鑰才能對資料進行加密或解密。而根據金鑰的特點,可以將加密分為對稱加密和非對稱加密(也叫公鑰加密)。

1)對稱加密

對稱加密是指在加密和解密的過程使用同一金鑰的加密方式。在上述收發郵件的例子中,如果小明和小白約定好對稱加密的演算法(比如說DES)跟金鑰,則小明在傳送郵件給小白時,可以用雙方約定好的演算法跟金鑰進行加密後傳送給小白,小白收到加密後的郵件資料後,還是用之前約定好的演算法跟金鑰進行解密,這樣一來小白就能獲取到小明發送給小白的原始郵件內容了。而在通訊過程中,即使竊聽者竊聽了通訊內容,由於他不知道加密演算法跟金鑰,因此無法解析出原始的郵件資訊,從而達到了防止竊聽的目的。

2)非對稱加密

非對稱加密,顧名思義就是加密跟解密的過程使用不同的金鑰的加密方式。用於加密的金鑰稱為公鑰,用於解密的金鑰稱為私鑰。公鑰是公開的,即任何人都可以獲取到,而私鑰只有資料的接受者才有。因此任何人都可以獲取公鑰對資料進行加密後再發送資料給私鑰的擁有者,由於只有私鑰才能對資料進行解密,因此也就只要私鑰的擁有者才能正確將密文解密成明文,故而也能實現防止竊聽的功能。

大家可能會問,既然有了對稱加密,為什麼還會出現非對稱加密呢?非對稱加密對於對稱加密而言究竟有什麼優點呢?在現實世界中,使用對稱加密方式,必定會遇到一個金鑰配送的問題。因為在對稱加密的過程中,金鑰必須通訊雙方都知曉才能安全通訊,假如金鑰洩露了,那麼整個通訊過程還是存在被竊聽的風險。因此對稱加密能正常運作的前提是金鑰能夠做到可靠配送,而金鑰配的可靠配送有時候並不簡單。

而如果使用非對稱加密就不存在金鑰配送的問題,因為用於加密的公鑰是公開的,不具有私密性,任何人都可以獲取到,因此只要資料的接受者保管好私鑰就能正常使用非對稱加密進行通訊了。這就是非對稱加密相對於對稱加密的優點。

二、單向雜湊函式

在介紹單向雜湊函式之前,我們還是先引入一個場景。相信我們大家都在網上下載過軟體或者文件,那麼大家有沒有想過一個問題就是當你把網路上的文件下載到你自己的電腦上時,你怎麼確定你下載的檔案沒有被別人修改過呢?根據計算機網路的知識我們可以知道,你從遠端主機下載的檔案是分成多個數據報文傳輸到你自己的電腦上的,這個時候第三者是可以截獲到這些資料報文的,假如這個第三者他不止截獲了資料報文,他還修改了其中的一些內容,然後再轉發給你,這個時候你怎麼識別出你下載的檔案是否被篡改呢?這就要藉助單向雜湊函數了。

單向雜湊函式是一個輸入跟輸出的對映,輸入是指資料(也叫做訊息),輸出就是雜湊值。大家可以理解成就是一個函式:y=f(x),其中x是原始資料,y是雜湊值。只是這個函式有2個比較特殊的地方就是:1、資料不同,輸出的雜湊值也不同,也就是不同的x,算出來的y是不同的;2、函式是單向的,就是由資料可以算出雜湊值,但是由雜湊值無法算出原始資料。單向雜湊函式中的資料跟雜湊值的關係大家可以理解成一個人跟他的指紋的關係,一個人跟他的指紋是一一對應的,不同人的指紋是不一樣的,具有唯一性;同時根據一個人可以得到他的指紋資訊,但是根據指紋資訊沒法獲得一個人的所有資訊,因此是單向性的。

根據單向雜湊函式的上述2個主要特點,就能用來確認資料的完整性了。因為即使資料只被修改了1位元,其算出來的雜湊值差異也會非常大,根據這一點就能確保資料的完整性了。此外,由於單向雜湊函式的單向性,使得他不能用於加密,因為只能從資料算出雜湊值,而無法從雜湊值算出原始資料。

在上述的檢測下載檔案完整性的例子中,只要在下載了檔案之後,再從源網站查詢該檔案的雜湊值,然後對下載到本機的檔案計算雜湊值,並與源網站的雜湊值進行對比,就能確認資料的完整性了。

單向雜湊函式雖然可以識別篡改,但是無法識別偽裝,也就是無法確認這份檔案確實是從官方網站下載下來的。要識別偽裝,就需要藉助其他技術手段,由於篇幅所限,後續會再進行探討。

如果覺得這篇文章對你有幫助,可以掃描下方二維碼,關注本人公眾號,獲得更多優質文章推送。