前言
無論你有沒有意識到,日常生活中我們幾乎每天都在跟密碼學打交道。只要你接觸過網際網路,那麼基本上離不開密碼學。舉個最簡單的例子,現在的很多**都是通過https協議進行通訊的,而支撐著https協議正常執行的正是密碼學這一理論基礎。作為程式設計師,我們更是有必要了解下密碼學的一些基本理論及其背後的原理。本文將通過通俗易懂的語言為大家介紹下密碼學的概念,希望大家看完能夠對密碼學有初步的認識。
一、加密
在介紹加密之前,我們先引入乙個場景。假設有2個人小明和小白,他們倆通過電子郵件進行溝通。由計算機網路的知識我們可以知道,小明發給小白的郵件會被拆分成多個資料報文在網路中進行傳輸,假如說有個竊聽者小黑截獲了小明發給小白的資料報文,並將截獲的資料報文按順序組裝起來,然後按照標準郵件傳輸協議進行解析,則小黑就可以獲得小明傳送給小白的郵件內容了,因此在這個發郵件的過程中就存在被第三者竊聽的風險。為了解決這個問題,我們需要對資訊進行加密以防止資料被竊聽。接下來介紹今天要講的第乙個內容:加密。
在上述例子中,之所以存在資料被竊聽的風險,是因為在通訊的過程中郵件內容是通過明文進行傳輸的。明文就是未加密處理的訊息內容,在上述例子中就是郵件內容。假如說小明跟小白在郵件通訊的過程中採用了只有雙方看得懂的文字,那麼即使這些文字被第三者截獲了,那麼第三者也看不懂其中的含義,這樣就可以防止竊聽了。而這個過程就是加密,即將明文轉換成密文的過程,密文對於第三者而言就是沒有任何意義的資料,只有通訊雙方才有辦法將密文轉換成明文,進而獲取郵件裡傳輸的原始可讀內容。而將密文轉換成明文的過程就是解密。
既然要進行加密跟解密就必須用到金鑰。金鑰與資料的關係可以理解成保險櫃鑰匙跟保險櫃的關係,只有正確的保險櫃鑰匙才能開啟對應的保險櫃,同理也只有正確的金鑰才能對資料進行加密或解密。而根據金鑰的特點,可以將加密分為對稱加密和非對稱加密(也叫公鑰加密)。
1)對稱加密
對稱加密是指在加密和解密的過程使用同一金鑰的加密方式。在上述收發郵件的例子中,如果小明和小白約定好對稱加密的演算法(比如說des)跟金鑰,則小明在傳送郵件給小白時,可以用雙方約定好的演算法跟金鑰進行加密後傳送給小白,小白收到加密後的郵件資料後,還是用之前約定好的演算法跟金鑰進行解密,這樣一來小白就能獲取到小明傳送給小白的原始郵件內容了。而在通訊過程中,即使竊聽者竊聽了通訊內容,由於他不知道加密演算法跟金鑰,因此無法解析出原始的郵件資訊,從而達到了防止竊聽的目的。
2)非對稱加密
非對稱加密,顧名思義就是加密跟解密的過程使用不同的金鑰的加密方式。用於加密的金鑰稱為公鑰,用於解密的金鑰稱為私鑰。公鑰是公開的,即任何人都可以獲取到,而私鑰只有資料的接受者才有。因此任何人都可以獲取公鑰對資料進行加密後再傳送資料給私鑰的擁有者,由於只有私鑰才能對資料進行解密,因此也就只要私鑰的擁有者才能正確將密文解密成明文,故而也能實現防止竊聽的功能。
大家可能會問,既然有了對稱加密,為什麼還會出現非對稱加密呢?非對稱加密對於對稱加密而言究竟有什麼優點呢?在現實世界中,使用對稱加密方式,必定會遇到乙個金鑰配送的問題。因為在對稱加密的過程中,金鑰必須通訊雙方都知曉才能安全通訊,假如金鑰洩露了,那麼整個通訊過程還是存在被竊聽的風險。因此對稱加密能正常運作的前提是金鑰能夠做到可靠配送,而金鑰配的可靠配送有時候並不簡單。
而如果使用非對稱加密就不存在金鑰配送的問題,因為用於加密的公鑰是公開的,不具有私密性,任何人都可以獲取到,因此只要資料的接受者保管好私鑰就能正常使用非對稱加密進行通訊了。這就是非對稱加密相對於對稱加密的優點。
二、單向雜湊函式
單向雜湊函式是乙個輸入跟輸出的對映,輸入是指資料(也叫做訊息),輸出就是雜湊值。大家可以理解成就是乙個函式:y=f(x),其中x是原始資料,y是雜湊值。只是這個函式有2個比較特殊的地方就是:1、資料不同,輸出的雜湊值也不同,也就是不同的x,算出來的y是不同的;2、函式是單向的,就是由資料可以算出雜湊值,但是由雜湊值無法算出原始資料。單向雜湊函式中的資料跟雜湊值的關係大家可以理解成乙個人跟他的指紋的關係,乙個人跟他的指紋是一一對應的,不同人的指紋是不一樣的,具有唯一性;同時根據乙個人可以得到他的指紋資訊,但是根據指紋資訊沒法獲得乙個人的所有資訊,因此是單向性的。
根據單向雜湊函式的上述2個主要特點,就能用來確認資料的完整性了。因為即使資料只被修改了1位元,其算出來的雜湊值差異也會非常大,根據這一點就能確保資料的完整性了。此外,由於單向雜湊函式的單向性,使得他不能用於加密,因為只能從資料算出雜湊值,而無法從雜湊值算出原始資料。
深入淺出密碼學(中)
前言 在之前的文章 深入淺出密碼學 上 中,筆者為大家簡要介紹了密碼學中的加密跟單向雜湊函式的概念與應用。在這裡先簡單回顧下,由於網路通訊過程中存在資訊被竊聽的風險,因此需要通過加密來防止竊聽以保護資訊保安。此外,在網路通訊中資料還存在被篡改的風險,因此我們還需要有一種機制能夠識別資料是否被篡改,而...
深入淺出密碼學(中)
前言 在之前的文章 深入淺出密碼學 上 中,筆者為大家簡要介紹了密碼學中的加密跟單向雜湊函式的概念與應用。在這裡先簡單回顧下,由於網路通訊過程中存在資訊被竊聽的風險,因此需要通過加密來防止竊聽以保護資訊保安。此外,在網路通訊中資料還存在被篡改的風險,因此我們還需要有一種機制能夠識別資料是否被篡改,而...
深入淺出sizeof
int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...