常見(摘要/加密)演算法總結
最近逛到某網站碰到一個叫JWTtoken的驗證機制,然後百度了一波jwt,再解碼此jwttoken後看到是RSA256加密,明明最近才看過現在又忘光了...於是對常見演算法做個總結吧!原理不會特別詳細,只會介紹簡單原理,讓我以後再碰上不至於太懵逼。
基本概念
安全性原則:
- 保密性
- 完整性(內容不被篡改)
- 身份認證
- 不可抵賴性
對稱/非對稱加密
若加解密使用相同密鑰,則稱為對稱密鑰加密,否則稱為非對稱密鑰加密。
對稱密鑰加密:Diffie-Hellman演算法
因為密鑰發布和密鑰交換存在很多問題,所以要知道Diffie-Hellman密鑰交換協議/演算法。
通信雙發可用此方法確定對稱密鑰,此方法只能用於密鑰交換,而非加解密消息。
演算法描述:
設A與B要確定密鑰
1) A與B確定2個大素數 n 和 g 。 不必保密
2) A選擇另一個大隨機數X,計算:
k1 = g^X mod n 後將k1發給B
3) B選擇另一個大隨機數Y,計算:
k2 = g^Y mod n 後將k2發給A
4) 則密鑰即為:
kA = k2^X mod n
kB = k1^Y mod n
且kA = kB
原理:
kA = (g^Y mod n)^X mod n = g^YX mod n
kB = (g^X mod n)^Y mod n = g^XY mod n
當然,這個容易受中間人攻擊,攻擊者可以同時與兩方通信交換密鑰,因為此方法沒有身份認證。(於是考慮CA)
非對稱密鑰加密
此模式中,A和B不用同時訪問可信任第三方以求出鎖與密鑰對
B有密鑰對私鑰與公鑰,公鑰用於封箱,私鑰用於開鎖。B將公鑰和鎖(某個加密演算法)發給任何人(如A),使其可以安全地向B發送消息(公鑰加密只有私鑰能解密,保密性)。而B可以用私鑰開鎖得到內容。
一方從另一方接收安全消息時,就將鎖與密鑰對發給另一方。
演算法模式
ECB,CBC,CFB,OFB,CTR
DES
數據加密標準 (Data Encryption Standard)工作原理:
DES是個塊加密法,按64位塊長加密數據,即把64位明文作為DES的輸入,輸出64位密文。
加密與解密使用相同的演算法和密鑰,密鑰長度為56位。
加密步驟:
1) 將64位明文塊輸入初始置換函數(IP)對明文進行初始置換(按某個表進行 位變換,比如第1位和第xx位交換)
2) 產生轉換塊的2半(左明文LPT和右明文RPT,各32位)
3) 每個LPT和RPT經過16輪加密(每輪: 各有自己的密鑰,56位密鑰移位後用一個位變換表產生不同的48位子密鑰,然後將32位RPT進行拓展置換(就是某些位冗餘)到48位,再進行S盒替換(複雜),輸出32位,再進行p盒替換,類似ip的簡單置換,然後將LPT與p盒置換結果進行異或得到新的RPT,舊的RPT變成新的LPT)
4) 最後將LPT和RPT重接起來,對組成的塊進行最終置換FP輸出64位密文
DES變體:
雙重DES,就是使用兩密鑰,密鑰1對原文加密,結果再用密鑰2加密。
三重DES,同上。
RSA
RSA是一種非對稱密鑰演算法,基於這樣的數學事實:兩個大素數相乘很容易,而對得到的積求因子則很難,演算法本身很簡單,實際難度在於RSA選擇和生成的密鑰與公鑰。演算法描述:
為了生成RSA公鑰和私鑰,B需要執行如下:
1) 選擇2個大素數p和q (值越大,破解RSA越困難,執行加解密時間越長,因為指數運算很費時)
2) 計算 n = p*q 和 z = (p-1)*(q-1)
3) 選擇小於n的一個數e,且使e和z沒有公因數(即e和z互素),e將被用於加密
4) 求一個數d,使ed-1可以被z整除,即 ed mod z = 1
d將被用於解密
5) B的公鑰kB+是一對數(n,e)
B的私鑰kB-是一對數(n,d)
A加密和B解密的過程如下
設A要發給一個由整數m表示的比特報文 (萬物皆比特啊,我說的),
- A有公鑰(n,e) , 且m < n
2. A計算,得加密值C,發給B
C = m^e mod n
3. B有私鑰(n,d)
收到C後解密得到m
m = C^d mod n
工作原理
報文m加密
C = m^e mod n
解密
m = C^d mod n = (m^e mod n)^d mod n
因為 (a mod n)^d mod n = a^d mod n
所以
m = m^(e*d) mod n
即,只要證明上式即可
而根據數論中的一個結論:
如果p和q是素數,且有 n = pq 和 z = (p-1)(q-1) ,
則 x^y mod n = x^(y mod z) mod n
所以
m^(ed) mod n = m^(ed mod z) mod n = m^1 mod n = m
MAC
在講HMAC之前,先得介紹消息認證碼MAC(Message Authentication Code),它和MD5,SHA之類的摘要演算法區別在於它需要通信雙方知道共享對稱密鑰(秘密),因此MAC涉及加密過程
MAC工作原理
- A與B共享一個對稱密鑰K,是別人不知道的。A計算MAC時,要將密鑰K作用於消息M。
- A將消息M和計算後的H1發給B
- B收到M,也用K對M求出H2
- B比較H1和H2,相同則驗證了消息的完整性,表明其未被篡改
HMAC
HMAC是指基於hash的消息認證碼(Hash-based Message Authentication Code),基本思想是服用MD5與SHA-1之類現有消息摘要演算法,把消息摘要看成一個黑盒子,用共享秘密密鑰加密消息摘要,從而輸出MAC。
即 報文M → hash(M) → K(hash(M))
具體加密過程不表。
其實按內容來說這個應該叫密碼學小白入門比較好...但以後實際中再遇上別的演算法我也會把它們陸續加進來,作為一個匯總帖 ^-^
推薦閱讀: