淺談 Encryption 和 Hash

簡介常見的加解密及雜湊算法。

※本文有區別大小寫字母的使用
※安全性相關討論不在本文範疇

Encryption/Decryption

加解密算法,就是明文(M, message)、密文(C, cyphertext)之間藉由 key 運算的轉換過程,分爲:

  • 對稱式:加解密使用相同的 key
  • 非對稱式:加解密使用不同的 key

AES(進階加密標準)

Advanced Encryption Standard。又稱 Rijndael 算法,對資料進行數學上的對稱計算,打散原有的資料 Byte 製作成密文,透過相反步驟可以還原為明文。

螢幕錄製-2020-10-05-下午7.11.25

計算所需參數:

  • IV, Initialization Vector
  • Key
  • Mode: CBC, ECB, CTS, XTS

參考文章:

RSA

由 Ron Rivest、Adi Shamir、Leonard Adleman 在 1977 年一起提出的非對稱式算法,根據歐拉定理(或費馬-尤拉定理)對資料進行同餘除法來進行加解密。

計算所需參數:

  • Private Key:{d, N}
  • Public Key:{e, N}

則 RSA 算法可寫爲:

  • RSA(m, {x, n}) = (m^x) % n

若套用在加解密:

  • 加密運算 C = RSA(M, {d, N})
  • 解密運算 M = RSA(C, {e, N})

若套用在簽章運算:

  • 簽章運算 Sign = RSA(M, {d, N})
  • 解章運算 M = RSA(signature, {e, N})

對,式子是一樣的,只是用到的 Key 不一樣,這就是非對稱式算法的神奇之處。實務上,並不會把明文直接做加解密、簽章運算,而會分別多做前後置處理,以增加密文安全性。

參考文章:

Hash Function

雜凑算法(或稱哈希算法)將任意字串(message)經由不可逆的計算,成爲一固定長度字串(message digest 訊息摘要,或 Hash Value 雜凑值,或 Hash 哈希值)的算法。

翻譯君 QQ

不同的兩任意字串有可能算出相同的雜凑值,稱爲雜湊碰撞(collision)。

CRC(循環冗餘校驗)

Cyclic Redundancy Check。CRCn 表示檢查碼為 n bits,亦為多項式的最高冪次。

計算參數:

  • Polynomial,例:多項式 p = x^16+x^5+x^2+1 可以簡記式表示為數值 0x8005,代表 x^5+x^2+1
    • 注:因爲 Polynomial 一定包含最高冪次,所以簡記式中省略不寫
  • Init,初始值
  • RefIn,輸入反轉
  • RefOut,輸出反轉
  • XorOut,輸出 XOR(異或)值

不同名稱的 CRC 算法使用不同參數,可參考常見參數模型一覽表

參考文章:

SHA(安全雜湊算法)

Secure Hash Algorithm。SHA 算法比較複雜,本篇不討論,只要知道:相同輸入搭配相同 SHA 算法就會得到一樣的 SHA 值。

SHA 家族可區分為:

  • SHA1,其 Hash 值為 160 bit,例如 Git 就是使用 SHA1
  • SHA2,其中又根據 Hash 值 bit 數分爲:
    • SHA-256
      • 截短版 SHA-224(即 Hash 值 224 bits),利用不同的初始值做計算
    • SHA-512
      • 截短版 SHA-384、SHA-512/224、SHA-512/256

什麽是 HMAC?

HMAC(Hash-based Message Authentication Code)只定義雜湊前的 Salt (加鹽)的步驟、方法,所以會搭配雜凑算法成對出現,例如:HMAC-SHA2-256。

組合技