Web前端密碼加密是否有意義?
正文
好多讀者認為只要使用了https,加密了http的所有字段,整個通信過程就是安全的了。殊不知,現如今https通信并不是端到端(End to End),而往往是中間夾雜著代理,有客戶端的代理,也有服務器端的代理。
而代理的存在使得本來較為嚴密的、安全的https,存在安全隱患。
客戶端代理
通常用戶是不知道代理的存在,比如企業為了監控員工https流量,一定會在員工電腦上下手腳,這樣企業的網管完全可以看到員工的https明文流量,其中也包含用戶的明文密碼。
服務器代理
通常有服務器的數字證書私鑰,可以與客戶端建立https加密通信,自然就可以看到用戶的https明文流量,其中也包含用戶的明文密碼。
以上兩種情況,用戶的明文密碼都有泄漏的風險。
一旦前端加密了用戶密碼,即使有代理的存在,依然無法獲得用戶的明文密碼。
前端加密用戶密碼
- 不加鹽的MD5加密密碼
盡管中間代理無法獲得明文密碼,但依然可以拿著截獲的MD5密碼實現登錄,這依然是一個安全隱患。
- 加鹽的一次性密碼OTP
如果每次加密用戶密碼時,同時添加隨機碼Nonce,隨機碼只使用一次,那么每次產生的密碼就是一次性的、動態變化的。
即使被中間代理截獲,也無法第二次登錄用戶賬戶。
即使沒有中間代理的存在,目前很多https依然使用RSA算法來實現認證環節、密鑰交換(Key Exchange)環節。一旦服務器的私鑰泄露,歷史上被截獲的https加密流量,將會被輕松破解,其中包括用戶的明文密碼。
這就是為何TLS 1.3會完全拋棄RSA算法,做為密鑰分發算法的原因,因為它不滿足PFS要求。
PFS要求
PFS,Perfect Forward Secrecy,任何一個安全要素的破解,都不能破解全部數據。如果滿足這個條件,則為滿足PFS要求,否則為不滿足。
綜上所述,前端加密用戶密碼,是為了更好滴保護安全、隱私,即使在https被完全破解的情況下,同樣也可以!