前言
加密解密是前后端開發經常需要使用到的技術,應用場景包括不限于用戶鑒權、資料傳輸等,不同的應用場景也會需要使用到不同的簽名加密演算法,或者需要搭配不一樣的簽名加密演算法來達到業務目標,所以了解加解密,以及常用的加解密函式庫,可以根據不同的業務場景,選擇適合當下業務場景的加解密函式庫,
安全性威脅
這里借用 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 等格式
});
}
思考
- 非對稱加密中公私鑰都可以加密,那么什么時候用公鑰加密,什么時候用私鑰“加密” ?
- 什么是數字簽名,數字簽名的作用是什么?
- 為什么要對資料的摘要進行簽名,而不是直接計算原始資料的數字簽名?
- 什么是數字證書,數字證書解決了什么問題?
- 前端進行加密到底有沒有用?
前端加密不是決定性的保護措施,但卻是一種有意義的低成本安全增強方案,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/519169.html
標籤:其他
