所以自然就有了密碼學的初始狀態。
兩千年前,羅馬名將凱撒為了防止敵人截獲信息,設置了羅馬字母對應表,這樣如果不知道密碼本,即使截獲了壹條信息也無法理解。
這種編碼方法被稱為“凱撒碼”。
比如對應的表格如下:
使用時,加密器在明文字母表中找到待加密報文中每個字母的位置,並在密文字母表中記下相應的字母。需要解密的人會根據事先已知的密鑰逆向操作,得到原始明文。例如:
但是這個簡單的對照表,可以通過截取更多的信息來破解。比如,如果字母B出現的概率是4.5%,那麽概率上下波動的密函很可能指向B。
所以根據壹組數字,對應聖經/康熙字典頁碼和位置的電視劇中的加密方法,很容易被統計方法破譯。
必須做到好的密碼,不能根據已知明文和密文的對應關系推斷出新的密文內容。也就是無法用統計的方式找到明文和密文之間的轉換規律。
從數學的角度來看,加密的過程可以看作是壹個函數的運算,解密的過程就是壹個反函數的運算。明碼是自變量,密碼是函數值。壹個好的密碼是壹個函數不應該從壹組獨立變量和函數值中推導出來。
加密的最高境界是截取密文後,我國的局部知識沒有增加。用信息論的專業術語來說,信息量並沒有增加。
現代密碼學以信息論為理論基礎,不僅關註信息的保密性,還涉及信息完整性驗證(消息驗證碼)、信息發布的不可否認性(數字簽名)以及分布式計算中因內外攻擊而產生的所有信息安全問題。
密碼學有三個主要分支:哈希密碼、對稱密碼和非對稱密碼。
也叫對稱密鑰算法,私鑰加密,* * *享受秘鑰加密。
這種算法在加密和解密時使用同壹個密鑰,或者使用兩個可以簡單地相互推導出來的密鑰。實際上,這組密鑰成為兩個或多個成員之間的秘密,以維持排他性的通信鏈接。
常用的對稱加密算法有:DES、3DES、AES、Blowfish、IDEA、RC5、RC6。
註意:對稱加密也分很多門派。有興趣的同學可以看看這個博客。
那麽遠距離傳輸消息時如何交換密鑰呢?沒有秘鑰怎麽加密?如何在不加密的情況下安全傳輸密鑰?這是壹個先有雞還是先有蛋的問題。
那麽如何解決這個問題呢?
在此之前,我們需要知道什麽是單向函數。
單向函數wiki百科:對於每個輸入,函數值很容易計算(多項式時間),但給定壹個隨機輸入的函數值,很難計算出原始輸入(無法用確定性圖靈機在多項式時間內計算)。
單向函數是否存在,在計算機科學中還是壹個懸而未決的問題。
我們假設A的顏色值可以和B的顏色值混合,就可以得到C的顏色值,但是只知道A和C,就無法推導出B的顏色值,也就是說這是壹個單向函數。
1.甲、乙雙方同意開放色值A。
2.A將A和B的顏色值混合得到X,傳輸給B;b將A和C的顏色值混合得到Y,傳遞給A。
3.這就是A得到Y,B得到Z;b得到x,混合c也能得到z。
這是壹個相對簡單的數學問題,即:
a+B = X;
a+C = Y;
那麽:X+C = Y+B = A+B+C = Z;
第三方可以獲取的信息是A,X,Y,Z無法從單向函數的定義中推導出來。
視頻地址
這就是Diffie Herman的密鑰交換原理,找到數學上的單向函數是主要的突破口。
目前主流的方法是用離散對數作為單向函數。
離散對數:基於同余和本原根的對數運算。
到目前為止,還沒有更好的方法來求解離散對數。如果用窮舉法,復雜度為,n這裏是組大小的二進制表示的長度,也可以理解為密鑰的二進制長度。如果使用1024位的密鑰,這個復雜度在目前的計算速度下基本可以視為無解。
(天河二號運算速度為3.39億次/秒)
所以我們會把離散對數問題看成壹個“難”問題,也就是它是壹個單向函數。
Diffie Herman的密鑰交換通過單向函數的特性給出了壹種密鑰交換的解決方案。
但另壹個問題又浮出了水面。如果我們都使用對稱加密,那麽在和N個人聊天的時候,需要保存n-1個密鑰,交換n-1次。而壹旦對方被攻破,雙方都毫無信息安全可言。
非對稱加密應運而生。詳情請看我的下壹篇博客。