※本文有區別大小寫字母的使用
※安全性相關討論不在本文範疇
Encryption/Decryption
加解密算法,就是明文(M, message)、密文(C, cyphertext)之間藉由 key 運算的轉換過程,分爲:
- 對稱式:加解密使用相同的 key
- 非對稱式:加解密使用不同的 key
AES(進階加密標準)
Advanced Encryption Standard。又稱 Rijndael 算法,對資料進行數學上的對稱計算,打散原有的資料 Byte 製作成密文,透過相反步驟可以還原為明文。
計算所需參數:
- 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 不一樣,這就是非對稱式算法的神奇之處。實務上,並不會把明文直接做加解密、簽章運算,而會分別多做前後置處理,以增加密文安全性。
參考文章:
- RSA Signing is Not RSA Decryption | cs.cornell.edu
- The RSA Cryptosystem: History, Algorithm, Primes
- 銀行密碼系統安全嗎?質數(素數)到底有啥用?李永樂老師11分鐘講RSA加密算法
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 算法使用不同參數,可參考常見參數模型一覽表。
參考文章:
- crc32 – 不要跑,CRC没这么难!(简单易懂的CRC原理阐述) – 个人文章 – SegmentFault 思否
- Hardware build: CRC calculation – Ben Eater
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
- SHA-256
什麽是 HMAC?
HMAC(Hash-based Message Authentication Code)只定義雜湊前的 Salt (加鹽)的步驟、方法,所以會搭配雜凑算法成對出現,例如:HMAC-SHA2-256。
組合技
- 公鑰密碼學標準,例如:PKCS#1(版本 2.1)