2022年了你還不了解加解密嗎

前言

加密解密是前后端開發(fā)經(jīng)常需要使用到的技術(shù),應(yīng)用場(chǎng)景包括不限于用戶鑒權(quán)、數(shù)據(jù)傳輸?shù)?,不同的?yīng)用場(chǎng)景也會(huì)需要使用到不同的簽名加密算法,或者需要搭配不一樣的簽名加密算法來(lái)達(dá)到業(yè)務(wù)目標(biāo)。所以了解加解密,以及常用的加解密函數(shù)庫(kù),可以根據(jù)不同的業(yè)務(wù)場(chǎng)景,選擇適合當(dāng)下業(yè)務(wù)場(chǎng)景的加解密函數(shù)庫(kù)。

安全性威脅

這里借用 workPlus 對(duì)于安全性威脅概括,進(jìn)行說(shuō)明:

第一,中斷

攻擊者有意破壞和切斷他人在網(wǎng)絡(luò)上的通信,這是對(duì)可用性的攻擊。

第二,截獲

屬于被動(dòng)攻擊,攻擊者從網(wǎng)絡(luò)上竊聽他人的通信內(nèi)容,破壞信息的機(jī)密性。

第三,篡改

攻擊者故意篡改網(wǎng)絡(luò)上傳送的報(bào)文,這是對(duì)完整性的攻擊。

第四,偽造

攻擊者偽造信息在網(wǎng)絡(luò)傳送,這是對(duì)真實(shí)性的攻擊。

file

加密的意義

  1. 數(shù)據(jù)加密

    a. 敏感數(shù)據(jù)的加密 :敏感數(shù)據(jù)進(jìn)行完整性校驗(yàn)和加密存儲(chǔ), 有效防止敏感數(shù)據(jù)被竊取,篡改,權(quán)限被非法獲取;

    b. 金融支付保護(hù):保證支付數(shù)據(jù)在傳輸和存儲(chǔ)過(guò)程中的完整性、保密性和支付身份的認(rèn)證、支付過(guò)程的不可否認(rèn)性;

    c. 電子票據(jù)驗(yàn)偽:保證電子合同、電子發(fā)票、電子保單、電子病歷在傳輸、存儲(chǔ)過(guò)程中的保密性和完整性;

    d. 視頻監(jiān)控安全:保證視頻、人臉、車輛、軌跡等隱私信息,以及個(gè)人數(shù)據(jù)在存儲(chǔ)過(guò)程中的保密性,防止數(shù)據(jù)泄露;

  2. 信息安全:

    a. 撞庫(kù)操作:是指收集已經(jīng)在互聯(lián)網(wǎng)上泄漏的用戶和密碼信息, 生成對(duì)應(yīng)的字典表,并嘗試批量登錄其他網(wǎng)站,然后得到一系列可以登錄的用戶, 撞庫(kù)的原因是由于信息泄漏, 而且泄漏的數(shù)據(jù)沒(méi)有加密或者加密的方式比較弱,這樣可以獲得到原來(lái)的用戶和密碼;

加解密的分類

  • 對(duì)稱加密

    a. 定義: 對(duì)稱加密(也叫私鑰加密)指加密和解密使用相同密鑰的加密算法。有時(shí)又叫傳統(tǒng)密碼算法,就是加密密鑰能夠從解密密鑰中推算出來(lái),同時(shí)解密密鑰也可以從加密密鑰中推算出來(lái)。而在大多數(shù)的對(duì)稱算法中,加密密鑰和解密密鑰是相同的,所以也稱這種加密算法為秘密密鑰算法或單密鑰算法。它要求發(fā)送方和接收方在安全通信之前,商定一個(gè)密鑰。對(duì)稱算法的安全性依賴于密鑰,泄漏密鑰就意味著任何人都可以對(duì)他們發(fā)送或接收的消息解密,所以密鑰的保密性對(duì)通信的安全性至關(guān)重要

    b. 特點(diǎn):對(duì)稱加密算法的特點(diǎn)是算法公開、計(jì)算量小、加密速度快、加密效率高。

    c. 不足:秘鑰的管理和分發(fā)非常困難,不夠安全。在數(shù)據(jù)傳送前,發(fā)送方和接收方必須商定好秘鑰,然后雙方都必須要保存好秘鑰,如果一方的秘鑰被泄露,那么加密信息也就不安全了。另外,每對(duì)用戶每次使用對(duì)稱加密算法時(shí),都需要使用其他人不知道的唯一秘鑰,這會(huì)使得收、發(fā)雙方所擁有的鑰匙數(shù)量巨大,密鑰管理成為雙方的負(fù)擔(dān)。

    d. 具體算法: DES,AES,3DES,凱撒加密算法等。

    file
  • 非對(duì)稱加密

    a. 定義: 非對(duì)稱加密算法需要兩個(gè)密鑰:公開密鑰(publickey: 簡(jiǎn)稱公鑰)和私有密鑰(privatekey: 簡(jiǎn)稱私鑰)。公鑰私鑰是一對(duì),如果用公鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私鑰才能解密。

    b. 流程: 甲方生成一對(duì)密鑰并將公鑰公開,需要向甲方發(fā)送信息的其他角色(乙方)使用該密鑰(甲方的公鑰)對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給甲方;甲方再用自己私鑰對(duì)加密后的信息進(jìn)行解密。甲方想要回復(fù)乙方時(shí)正好相反,使用乙方的公鑰對(duì)數(shù)據(jù)進(jìn)行加密,同理,乙方使用自己的私鑰來(lái)進(jìn)行解密。

    c. 特點(diǎn): 算法強(qiáng)度復(fù)雜、安全性依賴于算法與密鑰但是由于其算法復(fù)雜,而使得加密解密速度沒(méi)有對(duì)稱加密解密的速度快。

    d. 不足 :非對(duì)稱加密算法比對(duì)稱加密算法慢數(shù)千倍。

    e. 具體算法: RSA, RSA可以通過(guò)認(rèn)證來(lái)防止中間人攻擊, ECC(橢圓曲線加密算法)。

    file
  • 混合加密

    a. 流程: 服務(wù)器用明文的方式給客戶端發(fā)送自己的公鑰,客戶端收到公鑰之后,會(huì)生成一把密鑰(對(duì)稱加密用的),然后用服務(wù)器的公鑰對(duì)這把密鑰進(jìn)行加密,之后再把密鑰傳輸給服務(wù)器,服務(wù)器收到之后進(jìn)行解密,最后服務(wù)器就可以安全著得到這把密鑰了,而客戶端也有同樣一把密鑰,他們就可以進(jìn)行對(duì)稱加密了。

    b. 特點(diǎn): 混合加密則采取兩家之長(zhǎng),即解決了秘鑰的安全配送問(wèn)題,同時(shí)也提高了加密與解密效率。

    file
  • 數(shù)字簽名

    a. 流程:發(fā)送報(bào)文時(shí),發(fā)送方用一個(gè)哈希函數(shù)從報(bào)文文本中生成報(bào)文摘要,然后用發(fā)送方的私鑰對(duì)這個(gè)摘要進(jìn)行加密,這個(gè)加密后的摘要將作為報(bào)文的數(shù)字簽名和報(bào)文一起發(fā)送給接收方,接收方首先用與發(fā)送方一樣的哈希函數(shù)從接收到的原始報(bào)文中計(jì)算出報(bào)文摘要,接著再公鑰來(lái)對(duì)報(bào)文附加的數(shù)字簽名進(jìn)行解密,如果這兩個(gè)摘要相同、那么接收方就能確認(rèn)該報(bào)文是發(fā)送方的。

    b. 數(shù)字簽名有兩種功效:一是能確定消息確實(shí)是由發(fā)送方簽名并發(fā)出來(lái)的,因?yàn)閯e人假冒不了發(fā)送方的簽名。二是數(shù)字簽名能確定消息的完整性。因?yàn)閿?shù)字簽名的特點(diǎn)是它代表了文件的特征,文件如果發(fā)生改變,數(shù)字摘要的值也將發(fā)生變化。不同的文件將得到不同的數(shù)字摘要。 一次數(shù)字簽名涉及到一個(gè)哈希函數(shù)、接收者的公鑰、發(fā)送方的私鑰

    file
  • 數(shù)字證書(或簡(jiǎn)稱證書):是在 Internet 上唯一地標(biāo)識(shí)人員和資源的電子文件。證書使兩個(gè)實(shí)體之間能夠進(jìn)行安全、保密的通信。

file
file

加解密的應(yīng)用場(chǎng)景

目前業(yè)務(wù)中使用的是sm2進(jìn)行加解密

國(guó)密即國(guó)家密碼局認(rèn)定的國(guó)產(chǎn)密碼算法。主要有SM1,SM2,SM3,SM4。密鑰長(zhǎng)度和分組長(zhǎng)度均為128位。
1:SM1 為對(duì)稱加密。其加密強(qiáng)度與AES相當(dāng)。該算法不公開,調(diào)用該算法時(shí),需要通過(guò)加密芯片的接口進(jìn)行調(diào)用。
2:SM2為非對(duì)稱加密,基于ECC。該算法已公開。由于該算法基于ECC,故其簽名速度與秘鑰生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一種)安全強(qiáng)度比RSA 2048位高,但運(yùn)算速度快于RSA。
3:SM3 消息摘要??梢杂肕D5作為對(duì)比理解。該算法已公開。校驗(yàn)結(jié)果為256位。
4:SM4 無(wú)線局域網(wǎng)標(biāo)準(zhǔn)的分組數(shù)據(jù)算法。對(duì)稱加密,密鑰長(zhǎng)度和分組長(zhǎng)度均為128位。

const sm2 = require('sm-crypto').sm2; // uic中 
// 控制臺(tái)中的加密解密應(yīng)用 
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 等格式     
  }); 
} 

思考

  1. 非對(duì)稱加密中公私鑰都可以加密,那么什么時(shí)候用公鑰加密,什么時(shí)候用私鑰“加密” ?
  2. 什么是數(shù)字簽名,數(shù)字簽名的作用是什么?
  3. 為什么要對(duì)數(shù)據(jù)的摘要進(jìn)行簽名,而不是直接計(jì)算原始數(shù)據(jù)的數(shù)字簽名?
  4. 什么是數(shù)字證書,數(shù)字證書解決了什么問(wèn)題?
  5. 前端進(jìn)行加密到底有沒(méi)有用?

前端加密不是決定性的保護(hù)措施,但卻是一種有意義的低成本安全增強(qiáng)方案。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.前言(老司機(jī)直接跳過(guò)) 為什么js需要加密 談到加密,大多數(shù)人應(yīng)用場(chǎng)景都在于后端接口的加密簽名校驗(yàn)。這種一般...
    麻瓜三號(hào)閱讀 1,534評(píng)論 0 0
  • ** 網(wǎng)絡(luò)分層**OSI七層模型OSI七層協(xié)議模型主要是:應(yīng)用層(Application)、表示層(Present...
    程序農(nóng)猿閱讀 2,674評(píng)論 0 2
  • 本文主要介紹移動(dòng)端的加解密算法的分類、其優(yōu)缺點(diǎn)特性及應(yīng)用,幫助讀者由淺入深地了解和選擇加解密算法。文中會(huì)包含算法的...
    蘋果粉閱讀 11,673評(píng)論 5 29
  • 1 前言 面對(duì) MD5、SHA、DES、AES、RSA 等等這些名詞你是否有很多問(wèn)號(hào)?這些名詞都是什么? 還有什么...
    you的日常閱讀 691評(píng)論 0 14
  • IOS應(yīng)用安全-加解密算法簡(jiǎn)述 導(dǎo)讀客戶端經(jīng)常遇到需要對(duì)數(shù)據(jù)進(jìn)行加密的情況,那應(yīng)該如何加密,選用什么樣的加密算法,...
    蘿卜_7fad閱讀 988評(píng)論 0 0

友情鏈接更多精彩內(nèi)容