前言 加密解密是前後端開發經常需要使用到的技術,應用場景包括不限於用戶鑒權、數據傳輸等,不同的應用場景也會需要使用到不同的簽名加密演算法,或者需要搭配不一樣的簽名加密演算法來達到業務目標。所以瞭解加解密,以及常用的加解密函數庫,可以根據不同的業務場景,選擇適合當下業務場景的加解密函數庫。 安全性威脅 這 ...
前言
加密解密是前後端開發經常需要使用到的技術,應用場景包括不限於用戶鑒權、數據傳輸等,不同的應用場景也會需要使用到不同的簽名加密演算法,或者需要搭配不一樣的簽名加密演算法來達到業務目標。所以瞭解加解密,以及常用的加解密函數庫,可以根據不同的業務場景,選擇適合當下業務場景的加解密函數庫。
安全性威脅
這裡借用 workPlus 對於安全性威脅概括,進行說明:
第一,中斷
攻擊者有意破壞和切斷他人在網路上的通信,這是對可用性的攻擊。
第二,截獲
屬於被動攻擊,攻擊者從網路上竊聽他人的通信內容,破壞信息的機密性。
第三,篡改
攻擊者故意篡改網路上傳送的報文,這是對完整性的攻擊。
第四,偽造
攻擊者偽造信息在網路傳送,這是對真實性的攻擊。
加密的意義
-
數據加密
a. 敏感數據的加密 :敏感數據進行完整性校驗和加密存儲, 有效防止敏感數據被竊取,篡改,許可權被非法獲取;
b. 金融支付保護:保證支付數據在傳輸和存儲過程中的完整性、保密性和支付身份的認證、支付過程的不可否認性;
c. 電子票據驗偽:保證電子合同、電子發票、電子保單、電子病歷在傳輸、存儲過程中的保密性和完整性;
d. 視頻監控安全:保證視頻、人臉、車輛、軌跡等隱私信息,以及個人數據在存儲過程中的保密性,防止數據泄露;
-
信息安全:
a. 撞庫操作:是指收集已經在互聯網上泄漏的用戶和密碼信息, 生成對應的字典表,並嘗試批量登錄其他網站,然後得到一系列可以登錄的用戶, 撞庫的原因是由於信息泄漏, 而且泄漏的數據沒有加密或者加密的方式比較弱,這樣可以獲得到原來的用戶和密碼;
加解密的分類
-
對稱加密
a. 定義: 對稱加密(也叫私鑰加密)指加密和解密使用相同密鑰的加密演算法。有時又叫傳統密碼演算法,就是加密密鑰能夠從解密密鑰中推算出來,同時解密密鑰也可以從加密密鑰中推算出來。而在大多數的對稱演算法中,加密密鑰和解密密鑰是相同的,所以也稱這種加密演算法為秘密密鑰演算法或單密鑰演算法。它要求發送方和接收方在安全通信之前,商定一個密鑰。對稱演算法的安全性依賴於密鑰,泄漏密鑰就意味著任何人都可以對他們發送或接收的消息解密,所以密鑰的保密性對通信的安全性至關重要。
b. 特點:對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。
c. 不足:秘鑰的管理和分發非常困難,不夠安全。在數據傳送前,發送方和接收方必須商定好秘鑰,然後雙方都必須要保存好秘鑰,如果一方的秘鑰被泄露,那麼加密信息也就不安全了。另外,每對用戶每次使用對稱加密演算法時,都需要使用其他人不知道的唯一秘鑰,這會使得收、發雙方所擁有的鑰匙數量巨大,密鑰管理成為雙方的負擔。
d. 具體演算法: DES,AES,3DES,凱撒加密演算法等。
-
非對稱加密
a. 定義: 非對稱加密演算法需要兩個密鑰:公開密鑰(publickey: 簡稱公鑰)和私有密鑰(privatekey: 簡稱私鑰)。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。
b. 流程: 甲方生成一對密鑰並將公鑰公開,需要向甲方發送信息的其他角色(乙方)使用該密鑰(甲方的公鑰)對機密信息進行加密後再發送給甲方;甲方再用自己私鑰對加密後的信息進行解密。甲方想要回覆乙方時正好相反,使用乙方的公鑰對數據進行加密,同理,乙方使用自己的私鑰來進行解密。
c. 特點: 演算法強度複雜、安全性依賴於演算法與密鑰但是由於其演算法複雜,而使得加密解密速度沒有對稱加密解密的速度快。
d. 不足 :非對稱加密演算法比對稱加密演算法慢數千倍。
e. 具體演算法: RSA, RSA可以通過認證來防止中間人攻擊, ECC(橢圓曲線加密演算法)。
-
混合加密
a. 流程: 伺服器用明文的方式給客戶端發送自己的公鑰,客戶端收到公鑰之後,會生成一把密鑰(對稱加密用的),然後用伺服器的公鑰對這把密鑰進行加密,之後再把密鑰傳輸給伺服器,伺服器收到之後進行解密,最後伺服器就可以安全著得到這把密鑰了,而客戶端也有同樣一把密鑰,他們就可以進行對稱加密了。
b. 特點: 混合加密則採取兩家之長,即解決了秘鑰的安全配送問題,同時也提高了加密與解密效率。
-
數字簽名
a. 流程:發送報文時,發送方用一個哈希函數從報文文本中生成報文摘要,然後用發送方的私鑰對這個摘要進行加密,這個加密後的摘要將作為報文的數字簽名和報文一起發送給接收方,接收方首先用與發送方一樣的哈希函數從接收到的原始報文中計算出報文摘要,接著再公鑰來對報文附加的數字簽名進行解密,如果這兩個摘要相同、那麼接收方就能確認該報文是發送方的。
b. 數字簽名有兩種功效:一是能確定消息確實是由發送方簽名併發出來的,因為別人假冒不了發送方的簽名。二是數字簽名能確定消息的完整性。因為數字簽名的特點是它代表了文件的特征,文件如果發生改變,數字摘要的值也將發生變化。不同的文件將得到不同的數字摘要。 一次數字簽名涉及到一個哈希函數、接收者的公鑰、發送方的私鑰。
-
數字證書(或簡稱證書):是在 Internet 上唯一地標識人員和資源的電子文件。證書使兩個實體之間能夠進行安全、保密的通信。
加解密的應用場景
目前業務中使用的是sm2進行加解密
國密即國家密碼局認定的國產密碼演算法。主要有SM1,SM2,SM3,SM4。密鑰長度和分組長度均為128位。
1:SM1 為對稱加密。其加密強度與AES相當。該演算法不公開,調用該演算法時,需要通過加密晶元的介面進行調用。
2:SM2為非對稱加密,基於ECC。該演算法已公開。由於該演算法基於ECC,故其簽名速度與秘鑰生成速度都快於RSA。ECC 256位(SM2採用的就是ECC 256位的一種)安全強度比RSA 2048位高,但運算速度快於RSA。
3:SM3 消息摘要。可以用MD5作為對比理解。該演算法已公開。校驗結果為256位。
4:SM4 無線區域網標準的分組數據演算法。對稱加密,密鑰長度和分組長度均為128位。
const sm2 = require('sm-crypto').sm2; // uic中
// 控制臺中的加密解密應用
import { SM2 } from 'gm-crypto';
// sm2加密
export function encryptSM(str, key) {
const result = SM2.encrypt(str, key, {
inputEncoding: 'utf8',
outputEncoding: 'hex', // 支持 hex/base64 等格式
});
// 04 表示非壓縮
return '04' + result;
}
// sm2解密
export function decryptSM(str, key) {
return SM2.decrypt(str, key, {
inputEncoding: 'hex',
outputEncoding: 'utf8', // 支持 hex/base64 等格式
});
}
思考
- 非對稱加密中公私鑰都可以加密,那麼什麼時候用公鑰加密,什麼時候用私鑰“加密” ?
- 什麼是數字簽名,數字簽名的作用是什麼?
- 為什麼要對數據的摘要進行簽名,而不是直接計算原始數據的數字簽名?
- 什麼是數字證書,數字證書解決了什麼問題?
- 前端進行加密到底有沒有用?
前端加密不是決定性的保護措施,但卻是一種有意義的低成本安全增強方案。