C/S架構下密碼加密的作用?
在C/S架構下往往需要登錄密碼,伺服器一般會對這個登錄密碼進行加密保存。我有個疑問,如果帶有加密後的登錄密碼的數據包在傳輸時如果被截獲,那麼截獲者利直接將這個加了密的密碼發送給伺服器,伺服器是如何識別出這個密碼是不是合法用戶發來的?
這是一種常見的場景:中間人攻擊。
玄星的答案從邏輯上是正確的:如果中間人不篡改任何報文,只是重放或者轉發,不會帶來危害。
因為它做的事情跟普通的存儲轉發並無二樣。
就算S端對重放進行應答了,只要應答本身按照常識是加密的,中間人得到只是加密數據而已。怕就怕S一不鑒別重放,二不加密應答。中間人攻擊,一般的目的是為了冒名頂替身份,獲取數據。
一般都會劫取部分數據進行篡改,比如源地址、身份ID、請求內容等等。要解決中間人攻擊,其實方法很簡單,常見的加密通訊,包括隧道加密或者應用層加密即可(後者在實現時需要十分小心,一般直接搞個加密VPN解決算逑)。中間人可能會截取大量的加密報文進行暴力破解密碼,那麼把對稱可逆加密演算法改成非對稱不可逆加密演算法即可,代價是額外的數字證書發放和管理工作。
答案是沒法識別。
而且這種不帶篡改的轉發並沒有實質性的威脅。想想看,用戶和伺服器中間還有大量的路由器、交換機存在,它們做的就是轉發。
安全問題不在這裡,而是:
在數據包中某些部分被篡改的情況下,伺服器通過什麼方法識別並拒絕給予授權。
鑒別是否被篡改的常用手段,比如在TLS協議里,是數字簽名以及或完整性驗證。
=============以上答案保留======下面是可能需要的修正==================
反對 玄星 的答案。題住問的是 身份鑒別 和 重放攻擊 的問題。不是數據篡改的問題。
密碼學裡的標準解決方案是使用 Diffie-Hellman密鑰交換 協議或者 以RSA為代表非對稱加密協議。
當然,只應對 重放攻擊 的方法也有寫,就是使用 隨機數驗證,例如:Server上保存著用戶密碼的md5散列:p_hash,當用戶請求登錄時,server生成一個隨機字元串:token,將token發送至客戶端。用戶在客戶端輸入明文密碼:p,客戶端進行了如下計算:hash(hash(p)+token)
意思就是先將密碼明文進行一次md5,然後與token拼接後,再進行一次md5,把最終的加密結果:auth_token發送至server。
Server接受到auth_token後進行如下計算來校驗用戶輸入的密碼是否正確
auth_token = hash(p_hash+token) ?
如果攻擊者對網路進行監聽,得到的只是auth_token,如果重放auth_token,那麼這個包使用的是Server上一次生成的隨機數,伺服器驗證不予通過。
以上。使用C/S架構的情況下首先就避免了使用B/S那種純明文的傳輸協議。C/S的安全性保證應該是在通訊協議方面而不是簡單的加密解密這塊。當然借鑒B/S的也行。如果C/S架構的只是登陸密碼做限制那安全性也太弱了。監聽一樣可以獲得有關的通訊方式,比如和資料庫直連的話不就能獲得資料庫的通訊IP和賬戶密碼了。
推薦閱讀:
※侵襲歐洲的新型勒索病毒「壞兔子(Bad Rabbit)」會造成多大危害?該如何應對?
※商業銀行使用外資廠商生產的伺服器是否能危及到金融安全?
※有良好的上網習慣是否表示不會成為他人的肉雞?
※搜狗輸入法泄露隱私的事是否屬實?
※信息安全專業好的大學?