如圖,傳送者alice向接收者bob傳送訊息,如果將訊息直接進行傳送,那麼很可能被乙個心懷惡意的竊聽者eve竊聽訊息。這樣eve就知道了訊息的內容。
為了不讓別人看到訊息內容,alice決定對訊息進行加密之後再傳送出去。加密之前的訊息稱為明文,加密之後的訊息稱為密文。我們看到明文可以理解其含義,看到密文則看上去像是一堆亂碼。
接收者bob收到密文後需要先進行解密才能閱讀訊息 ,解密就是將密文恢復成明文的過程。
將訊息加密後傳送,竊聽者eve得到是密文,無法得知加密前的訊息內容。
正常的接收者將密文還原為明文的過程叫做解密,但接收者以外的人試圖進行還原明文則成為密碼破譯,簡稱破譯。進行破譯的人稱為破譯者,破譯者不一定都是壞人,密碼學研究者為了研究密碼強度,也會需要對密碼進行破譯,研究者在這種情況下也是破譯者。
對稱密碼(symmetric cryptography)是指在加密和解密時使用同一金鑰的方式。目前廣泛使用 aes。
對稱加密有乙個問題就是金鑰配送問題, 即傳送方和接收方如何在乙個不安全的通道上共享密碼的問題。
非對稱加密(也叫公鑰密碼(public-key cryptography))則是指在加密和解密時使用不同金鑰的方式。目前廣泛使用 rsa和ecdh。(rsa、elgamal、rabin、dh、ecdh)
非對稱加密的加密金鑰和解密金鑰不同,形成一對,具有強烈的數學關係。其中可以公開的乙個一般稱為公鑰,可以給任何人,另乙個則不能公開,稱為私鑰。私鑰一定嚴格妥善保管。通過公鑰加密的密文只能由私鑰解密。因此接收者bob可以將公鑰發給傳送者alice,然後alice用公鑰加密訊息,並傳送。即使被竊聽者竊取到公鑰也沒關係。因為用公鑰加密的密文只能由對應的私鑰解密,而私鑰只有接收者bob才有。因此非對稱加密解決了金鑰配送問題,但依然存在下面兩個問題:
處理速度遠遠低於對稱加密
難以抵禦中間人攻擊
混合密碼系統是將對稱加密和非對稱加密優勢相結合的一種混合方式。可以解決對稱加密金鑰配送和非對稱加密處理速度低的問題。主要流程如下
加密演算法可以解決訊息的機密性問題,但是無法保證訊息的完整性。完整性指的是,資料是正確的,而不是偽造的。單向雜湊函式是保證資訊的完整性的密碼技術,它會檢測資料是否被篡改。常用的雜湊函式有 md5 、 sha-2(sha-224、sha-356、sha-384、sha-512) 和 具有全新結構的 sha-3(keccak 演算法)等。
單向雜湊函式能保證訊息的完整性的前提是雜湊值和訊息是分開傳輸的。試想一下,如果竊聽者能夠同時獲取訊息和雜湊值,那麼他就可以同時修改訊息內容和雜湊值來進行篡改。接收者驗證的時候不會發現訊息被修改了,因為雜湊值對比檢測是一致的。進一步說,這裡接收者收到的訊息和雜湊值其實不是由傳送者傳送的,而是經過竊聽者修改過後的。
訊息認證碼(mac)技術能提供一種認證機制,保證訊息是來自於期望的傳送者,同時也能保證訊息的完整性。訊息認證碼的輸入由任意長度的訊息和乙個事先由傳送者和接收者共享的金鑰組成,他可以輸出固定長度的資料,這個資料稱為mac值。
任意長度的訊息輸出固定長度的資料,這一點和單向雜湊函式很類似。但單向雜湊函式不需要共享密碼。實際上,一種實現訊息認證碼的方式就是由單向雜湊函式加分組密碼( 比如aes)完成(hmac),這種實現可以簡單的理解為一種與密碼相關的單向雜湊函式。
要計算mac值就必須擁有共享金鑰,沒有共享金鑰的人就無法計算出mac值,訊息認證碼正是基於這一點來完成認證的。試想,竊聽者同時竊取了訊息和mac值,但是由於他沒有共享金鑰,所以無法同時篡改訊息並計算正確的mac值。
由上面的描述可以知道訊息認證碼同樣存在金鑰共享的問題,除此之外訊息認證碼還存在下面兩個問題:
無法對第三方提供證明
無法防止否認
假設接收者bob接收到alice傳送的訊息後,想要向第三方驗證者victor證明這條訊息的確是alice傳送的,使用訊息認證碼無法進行這樣的證明。為什麼呢? 首先victor想要校驗mac,需要知道共享金鑰,就算bob相信victor把共享金鑰告訴了他,victor能驗證mac值是正確的,也無法證明訊息就是alice傳送的,因為還有可能是bob傳送的。
因為無法向第三方證明這條訊息是alice傳送的,alice就可以聲稱這條訊息不是我傳送的,是bob偽造的。也就是傳送方和接收方自己吵了起來。
在這種情況下,使用數字簽名就可以防止否認。
訊息認證碼無法防止否認,其原因就在於傳送者和接收者共享金鑰,那麼如果傳送者和接收者不需要共享金鑰,而是各自使用乙個金鑰呢?有沒有很眼熟,對,很容易想到之前說過的非對稱加密。但數字簽名和非對稱加密是不同的。看一下數字簽名的基本流程和原理:
這就是數字簽名技術,我們來理一下為什麼數字簽名可以向提三方提供證明以及防止否認。首先,驗證用的公鑰是可以傳送給任何人的,所以任何人都可以進行驗證。然後由於私鑰只有傳送者才有,因此只有傳送者才能進行「簽名「,傳送者就沒法否認說這個訊息不是我傳送的了。當然更嚴格的說,傳送者還是可以說」我的金鑰丟失了,被別人盜用了「。這個層面就上公升到社會工程學層面了。我們將在證書和pki系統中描述這個問題。
上述的描述中是直接對訊息內容進行了簽名,實際上一般不會這麼做,因為如果訊息內容很大,簽名和驗證都會很耗時。所以實際上一般是先對訊息計算雜湊值,然後對雜湊值進行簽名。接收者驗證時也先對訊息進行雜湊,然後解密簽名得到解密後的雜湊值,比較兩個雜湊值,相同則驗證成功。
注意數字簽名和非對稱加密的區別 ,其比較如下圖
偽隨機數生成器(pseudo random number generator,prng)是一種能夠模擬產生隨機數列的演算法。偽隨機數負責承擔金鑰生成的職責。它由密碼和單向雜湊函式等技術構成,主要用於生成金鑰、初始化向量和 nonce 等。
上面描述的六種密碼技術發揮著重要作用:
我們做一下總結
參考:《**密碼技術》
密碼學實驗二
miller rabin檢測 miller rabin檢測是目前應用比較廣泛的一種 二次探測定理 如果p是乙個素數,且0這就是miller rabin素性測試的方法。不斷地提取指數n 1中的因子2,把n 1表示成d 2 r 其中d是乙個奇數 那麼我們需要計算的東西就變成了a的d 2 r次方除以n的餘...
密碼學Kerberos協議理解
很久以前有這麼乙個國家名為kerberos 有著一位國王kds 兩位國民小王和小美 許多營業場所 列印裝置,檔案管理器等 每位國民想在這個國家居住,都需要先到國王那裡領取身份證與身份碼 這份身份碼只有小王和kds知道 kerberos國家規定 國民互相拜訪需要先向kds請求獲得前往拜訪人的票 國民前...
密碼學初學者可以理解的密碼學庫
區塊鏈 加密貨幣 vpn 數字證書 這些概念的背後基石都是密碼學,了解密碼學的原理和經典實現方法對於學習理解前面的應用是大有裨益的。cryptoc 作為乙個供密碼學初學者入門的密碼學庫,實現了以下經典的密碼系統 公鑰密碼系統 mac 數字簽名 大數運算 其他工具 git clone編譯安裝 make...