最近逛到某網站碰到一個叫JWTtoken的驗證機制,然後百度了一波jwt,再解碼此jwttoken後看到是RSA256加密,明明最近才看過現在又忘光了...於是對常見演算法做個總結吧!原理不會特別詳細,只會介紹簡單原理,讓我以後再碰上不至於太懵逼。

基本概念

安全性原則:

  1. 保密性
  2. 完整性(內容不被篡改)
  3. 身份認證
  4. 不可抵賴性

對稱/非對稱加密

若加解密使用相同密鑰,則稱為對稱密鑰加密,否則稱為非對稱密鑰加密。

對稱密鑰加密: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表示的比特報文 (萬物皆比特啊,我說的),

  1. 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工作原理

  1. A與B共享一個對稱密鑰K,是別人不知道的。A計算MAC時,要將密鑰K作用於消息M。
  2. A將消息M和計算後的H1發給B
  3. B收到M,也用K對M求出H2
  4. B比較H1和H2,相同則驗證了消息的完整性,表明其未被篡改

HMAC

HMAC是指基於hash的消息認證碼(Hash-based Message Authentication Code),基本思想是服用MD5與SHA-1之類現有消息摘要演算法,把消息摘要看成一個黑盒子,用共享秘密密鑰加密消息摘要,從而輸出MAC。

即 報文M → hash(M) → K(hash(M))

具體加密過程不表。


其實按內容來說這個應該叫密碼學小白入門比較好...但以後實際中再遇上別的演算法我也會把它們陸續加進來,作為一個匯總帖 ^-^


推薦閱讀:
查看原文 >>
相关文章