數(shù)字簽名、信息加密 是前后端開發(fā)都經(jīng)常需要使用到的技術(shù),應(yīng)用場景包括了用戶登入、交易、信息通訊、oauth 等等
1.數(shù)字簽名
數(shù)字簽名,簡單來說就是通過提供 可鑒別 的 數(shù)字信息 驗證 自身身份 的一種方式。
一套 數(shù)字簽名 通常定義兩種 互補 的運算,一個用于 簽名,另一個用于 驗證。
使用場景:
1. 驗證數(shù)據(jù)被篡改。
2. 驗證身份。
2. 加密和解密
2.1. 加密
數(shù)據(jù)加密 的基本過程,就是對原來為 明文 的文件或數(shù)據(jù)按 某種算法 進行處理,使其成為 不可讀 的一段代碼,通常稱為 “密文”。通過這樣的途徑,來達到 保護數(shù)據(jù) 不被 非法人竊取、閱讀的目的。
2.2. 解密
加密 的 逆過程 為 解密,即將該 編碼信息 轉(zhuǎn)化為其 原來數(shù)據(jù) 的過程。
3. 對稱加密和非對稱加密
加密算法分 對稱加密 和 非對稱加密,其中對稱加密算法的加密與解密 密鑰相同,非對稱加密算法的加密密鑰與解密 密鑰不同,此外,還有一類 不需要密鑰 的 散列算法。
常見的 對稱加密 算法主要有 DES、3DES、AES 等。
常見的 非對稱算法 主要有 RSA、DSA 等,散列算法 主要有 SHA-1、MD5 等。
3.1. 對稱加密
對稱加密算法 是應(yīng)用較早的加密算法,又稱為 共享密鑰加密算法。在 對稱加密算法 中,使用的密鑰只有一個,發(fā)送 和 接收 雙方都使用這個密鑰對數(shù)據(jù)進行 加密 和 解密。這就要求加密和解密方事先都必須知道加密的密鑰。
數(shù)據(jù)加密過程:在對稱加密算法中,數(shù)據(jù)發(fā)送方 將 明文 (原始數(shù)據(jù)) 和 加密密鑰 一起經(jīng)過特殊 加密處理,生成復(fù)雜的 加密密文 進行發(fā)送。
數(shù)據(jù)解密過程:數(shù)據(jù)接收方 收到密文后,若想讀取原數(shù)據(jù),則需要使用 加密使用的密鑰 及相同算法的 逆算法 對加密的密文進行解密,才能使其恢復(fù)成 可讀明文。
3.2. 非對稱加密
非對稱加密算法,又稱為 公開密鑰加密算法。
它需要兩個密鑰,一個稱為 公開密鑰 (public key),即 公鑰,另一個稱為 私有密鑰 (private key),即 私鑰。
因為 加密 和 解密 使用的是兩個不同的密鑰,所以這種算法稱為 非對稱加密算法。
如果使用 公鑰 對數(shù)據(jù) 進行加密,只有用對應(yīng)的 私鑰 才能 進行解密。
如果使用 私鑰 對數(shù)據(jù) 進行加密,只有用對應(yīng)的 公鑰 才能 進行解密。
例子:甲方生成 一對密鑰 并將其中的一把作為 公鑰 向其它人公開,得到該公鑰的 乙方 使用該密鑰對機密信息 進行加密 后再發(fā)送給甲方,甲方再使用自己保存的另一把 專用密鑰 (私鑰),對 加密 后的信息 進行解密。
4. 常見的簽名加密算法
4.1. MD5算法
MD5 用的是 哈希函數(shù),它的典型應(yīng)用是對一段信息產(chǎn)生 信息摘要,以 防止被篡改。嚴格來說,MD5 不是一種 加密算法 而是 摘要算法。無論是多長的輸入,MD5 都會輸出長度為 128bits 的一個串 (通常用 16 進制 表示為 32 個字符)。
4.2. SHA1算法
SHA1 是和 MD5 一樣流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更強。對于長度小于 2 ^ 64 位的消息,SHA1 會產(chǎn)生一個 160 位的 消息摘要。基于 MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被應(yīng)用在檢查 文件完整性 以及 數(shù)字簽名 等場景。
4.3. Hmac算法
HMAC 是密鑰相關(guān)的 哈希運算消息認證碼(Hash-based Message Authentication Code),HMAC 運算利用 哈希算法 (MD5、SHA1 等),以 一個密鑰 和 一個消息 為輸入,生成一個 消息摘要 作為 輸出。
HMAC 發(fā)送方 和 接收方 都有的 key 進行計算,而沒有這把 key 的第三方,則是 無法計算 出正確的 散列值的,這樣就可以 防止數(shù)據(jù)被篡改。
4.4. AES/DES/3DES算法(對稱 塊加密算法)
對稱塊加密算法優(yōu)缺點
優(yōu)點:算法公開、計算量小、加密速度快、加密效率高。
缺點:
(1)交易雙方都使用同樣鑰匙,安全性得不到保證。
(2)每對用戶每次使用對稱加密算法時,都需要使用其他人不知道的惟一鑰匙,這會使得發(fā)收信雙方所擁有的鑰匙數(shù)量呈幾何級數(shù)增長,密鑰管理成為用戶的負擔(dān)。對稱加密算法在分布式網(wǎng)絡(luò)系統(tǒng)上使用較為困難,主要是因為密鑰管理困難,使用成本較高。
AES、DES、3DES 都是 對稱 的 塊加密算法,加解密 的過程是 可逆的。常用的有 AES128、AES192、AES256
4.4.1. DES算法
DES 加密算法是一種 分組密碼,以 64 位為 分組對數(shù)據(jù) 加密,它的 密鑰長度 是 56 位,加密解密 用 同一算法。
DES 加密算法是對 密鑰 進行保密,而 公開算法,包括加密和解密算法。這樣,只有掌握了和發(fā)送方 相同密鑰 的人才能解讀由 DES加密算法加密的密文數(shù)據(jù)。因此,破譯 DES 加密算法實際上就是 搜索密鑰的編碼。對于 56 位長度的 密鑰 來說,如果用 窮舉法 來進行搜索的話,其運算次數(shù)為 2 ^ 56 次。
4.4.2. 3DES算法
是基于 DES 的 對稱算法,對 一塊數(shù)據(jù) 用 三個不同的密鑰 進行 三次加密,強度更高。
4.4.3. AES算法
AES 加密算法是密碼學(xué)中的 高級加密標準,該加密算法采用 對稱分組密碼體制,密鑰長度的最少支持為 128 位、 192 位、256 位,分組長度 128 位,算法應(yīng)易于各種硬件和軟件實現(xiàn)。這種加密算法是美國聯(lián)邦政府采用的 區(qū)塊加密標準。
AES 本身就是為了取代 DES 的,AES 具有更好的 安全性、效率 和 靈活性。
4.5. 非對稱加密
4.5.1 RSA算法
RSA 加密算法是目前最有影響力的 公鑰加密算法,并且被普遍認為是目前 最優(yōu)秀的公鑰方案之一。RSA 是第一個能同時用于 加密 和 數(shù)字簽名 的算法,它能夠 抵抗 到目前為止已知的 所有密碼攻擊,已被 ISO 推薦為公鑰數(shù)據(jù)加密標準。
4.5.2 ECC算法
ECC 也是一種 非對稱加密算法,主要優(yōu)勢是在某些情況下,它比其他的方法使用 更小的密鑰,比如 RSA 加密算法,提供 相當?shù)幕蚋叩燃?的安全級別。不過一個缺點是 加密和解密操作 的實現(xiàn)比其他機制 時間長 (相比 RSA 算法,該算法對 CPU 消耗嚴重)。
5. 各種加密算法對比
5.1. 散列算法比較
5.2. 對稱加密算法比較
5.3. 非對稱加密算法比較
5.4. 對稱算法與非對稱加密算法
5.4.1. 對稱算法
密鑰管理:比較難,一般用于內(nèi)部系統(tǒng)
安全性:中
加密速度:快好 幾個數(shù)量級 (軟件加解密速度至少快 100 倍,每秒可以加解密數(shù) M 比特 數(shù)據(jù)),適合大數(shù)據(jù)量的加解密處理
5.4.2. 非對稱算法
密鑰管理:密鑰容易管理
安全性:高
加密速度:比較慢,適合 小數(shù)據(jù)量 加解密或數(shù)據(jù)簽名