天天看點

面試官:如何保證使用者子產品的資料安全?說說你的解決方案

作者:何甜甜在嗎 

寫在前面

在介紹具體方案之前,首先先介紹一下常見的加密算法。加密算法可以分為三大類:

  • 對稱加密算法
  • 非對稱加密算法
  • Hash算法

對稱加密算法

加密和解密使用相同的密鑰。對稱加密算法加密解密速度快,但安全性較差

常見的對稱加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES

非對稱加密算法

加密和解密使用不同的密鑰,也稱為公私鑰加密。非對稱加密的缺點是加解密速度要遠遠慢于對稱加密,在某些極端情況下,甚至能比非對稱加密慢上1000倍。但安全性比對稱加密算法高

常見的非對稱加密算法:RSA、ECC(移動裝置用)、Diffie-Hellman、El Gamal、DSA(數字簽名用)

Hash算法

Hash算法特别的地方在于它是一種單向算法,使用者可以通過Hash算法對目标資訊生成一段特定長度的唯一的Hash值,卻不能通過這個Hash值重新獲得目标資訊。Hash算法常用在不可還原的密碼存儲、資訊完整性校驗等

常見的Hash算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1

使用者管理子產品中需要進行加密的地方

使用者管理子產品中但凡涉及密碼的地方都需要進行加密處理

admin賬戶激活

平台預設包含一個admin賬号,admin賬号在初次使用時都需要激活密碼,調用激活接口時前端傳輸給後端的密碼需要進行加密

使用者登陸

激活完成後,admin賬号才可以進行登陸,調用登陸接口時,如果不對密碼進行加密明文傳輸會被不法分子利用,導緻資料洩露等安全問題

使用者建立

admin賬号建立普通使用者時需要需要給普通使用者設定初始密碼,是以調用使用者建立接口時前端傳輸給後端的資料需要進行加密處理

使用者資訊修改

使用者資訊修改時可以修改密碼,是以調用修改使用者資訊接口時前端将資料傳輸給後端時需要進行加密處理

資料入庫

admin賬号建立普通使用者時會給普通使用者設定初始密碼,這部分資料都是儲存在資料庫中的,admin賬戶激活時的密碼也是儲存在資料庫中。資料庫并不是保險箱,也存在被攻擊的可能性,導緻使用者資料被盜,是以對入庫的資料中安全級别較高的字段進行加密處理。很明顯使用者的密碼是需要進行加密後在入庫的

如何選擇加密算法實作加密功能

admin賬号激活

admin賬戶必須對密碼進行解密是以隻可以在對稱加密和非對稱加密算法。是以admin賬号激活采用RSA加密算法和AES128加密算法,由Web端管理公鑰和私鑰,具體步驟如下:

  • web端發送base64編碼後的RSA加密算法生成的公鑰
  • server端base64解碼公鑰
  • server端随機生成一個16位的随機字元串
  • server端使用公鑰對生成的随機字元串進行加密
  • server端将加密後的随機字元串在進行base64編碼并發送給web端
  • web端base64解碼随機字元串
  • web端對base64解碼後的字元串在使用私鑰解碼
  • web端将密碼拼接為新的字元串,新的字元串為随機字元串+密碼
  • web端将随機字元串作為AES加密算法的密碼對密碼進行加密發送給server端
  • server端使用随機字元串對新的字元串進行解密
  • server端系解析解密後的字元串,校驗随機字元串是否一緻
  • server端解析出字元串中的密碼并對密碼進行加密入庫

說明:資料入庫加密的密鑰和對随機字元串加密的密鑰不相同

時序圖如下:

面試官:如何保證使用者子產品的資料安全?說說你的解決方案

是不是覺得過程有點過于複雜,由server端管理公鑰和私鑰,web端擷取公鑰并對密碼加密發送給server端,server端在使用私鑰解密密碼這樣也沒毛病啊

面試官:如何保證使用者子產品的資料安全?說說你的解決方案

小心中間人攻擊

什麼是中間人攻擊,中間人攻擊(Man-in-the-MiddleAttack,簡稱“MITM攻擊”)是指攻擊者與通訊的兩端分别建立獨立的聯系,并交換其所收到的資料,使通訊的兩端認為他們正在通過一個私密的連接配接與對方 直接對話,但事實上整個會話都被攻擊者完全控制。

在中間人攻 擊中,攻擊者可以攔截通訊雙方的通話并插入新的内容。中間人攻擊是一個(缺乏)互相認證的攻擊。大多數的加密協定都專門加入了一些特殊的認證方法以阻止中間人攻擊。例如,SSL協定可以驗證參與通訊的一方或雙方使用的證書是否是由權威的受信 任的數字證書認證機構頒發,并且能執行雙向身份認證 中間人攻擊過程如下:

  • 用戶端發送請求到服務端,請求被中間人截獲
  • 伺服器向用戶端發送公鑰
  • 中間人截獲公鑰,保留在自己手上。然後自己生成一個【僞造的】公鑰發給用戶端
  • 用戶端收到僞造的公鑰後,生成加密hash值發給伺服器
  • 中間人獲得加密hash值,用自己的私鑰解密獲得真秘鑰。同時生成假的加密hash值,發給伺服器
  • 伺服器用私鑰解密獲得假密鑰。然後加密資料傳輸給用戶端
面試官:如何保證使用者子產品的資料安全?說說你的解決方案

如果直接發送公鑰給web端就很容易被中間人攻擊,導緻資料洩露

使用者登陸

使用者登陸對密碼進行校驗是可以不需要進行解密的,是以使用者登陸選擇的是Hash算法中的MD5加密算法,雖然MD5是可以破解的,但是為了能夠和其他部門進行對接隻能選擇MD5加密算法,具體步驟如下:

  • 前端MD5加密密碼
  • 服務端查詢指定使用者的密碼
  • 将資料庫查詢到的密碼用私鑰進行解密
  • 将解密後的密碼進行MD5加密和前端傳入的密碼進行比對

時序圖如下:

面試官:如何保證使用者子產品的資料安全?說說你的解決方案

使用者建立&使用者資訊修改

使用AES128加密算法,和激活使用同相同的公鑰

資料入庫

使用AES128加密算法,和激活所使用的公鑰不為同一個

說明:上述流程省略了部分業務邏輯,如密碼格式校驗等,本文主要介紹的是加密解密要抓關鍵了

小結

用 HTTPS可以解決上述使用者資料加密的問題,但是要花錢啊,老闆掐指一算,還是研發人員自己去實作吧。第一次在項目中接觸使用者資料加密,可能仍有不足需要改進的地方,若有纰漏,請指正。

覺得不錯,别忘了随手點贊+轉發哦!