身份识别技术简介
說到身份識別,最常見的就是我們每天都要用到的“登錄密碼”了。其實,在第一篇文章就說過,這里的密碼更確切的叫法是口令。口令是一定長度的字符串,由數字、字母、特殊字符、控制字符等組成。用戶名加口令的方法是應用最廣的一種身份識別方式,它的原理也很簡單,應用系統事先儲存了用戶名與對應的口令,身份識別時只要用戶提交的用戶名加口令與存儲的匹配,應用系統就認證了當前用戶的身份。口令是安全強度比較低身份識別的方式,它主要存在以下幾個方面的風險:
一是暴力破解,這是針對口令最常見的攻擊方式。攻擊者通過不斷重試來猜測你的口令。所以大家會發現,現在的系統在注冊時對口令的復雜程度越來越高,以前是最低4位,現在都是8位起,而且必須有至少兩種以上的字符,有些還要求必須有大小寫字母等,這些都是增加暴力破解和猜測口令的難度。另外,攻擊者不會通過手工輸入用戶名加口令登錄系統來測試口令,都是通過工具軟件實現自動化攻擊,因此很多應用系統登錄時引入多次錯誤后用戶賬戶鎖定機制。暴力破解中還存在一種叫“撞庫”的攻擊方法,就是攻擊者使用從其他已破解的系統中拿到的用戶口令數據,在要破解的目標系統上測試登錄。這種方法的理論依據就是人們一般喜歡在不同的系統中使用相同或相近的用戶及口令信息,以方便記憶。
二是傳輸及存儲風險。口令如果是以明文形式傳輸和存儲,那被泄露的機會是很高的。甚至可以這么說,沒被泄露是人家還沒有打你主意或根本不感興趣。在現在的網絡環境下,明文就等于不設防。在前文數字摘要也介紹過,系統存儲的和登錄時傳遞的應該是口令的摘要,而非口令本身。因為數字摘要是單向加密,攻擊者拿到摘要也無法還原口令。
三是重放攻擊。即使口令被加密了,攻擊者仍可以截獲某一用戶成功登錄系統時請求的數據,然后自己把數據再發送給應用的服務器,如果不做特殊處理,服務器仍會認為收到的數據是正常的,并把攻擊者認為是前面那個“某一用戶”。防范這種重放攻擊行為的難度最大,一般有兩種方式:第一個是在登錄請求數據中加鹽,如登錄時間和隨機數。服務器也建立相應的存儲對比機制,如檢查數據中的隨機數是否之前登錄使用過,如果沒有說明是正常登錄,并把隨機數進行存儲;如果使用過說明就是重放攻擊。當然,這種方法只是增大了重放攻擊得手的難度,并不能做到完全杜絕。另外一種方法則是采用客戶端與服務器交互,類似于SSL握手協議那樣,如果服務器收到客戶端登錄請求后,發送一個隨機數到客戶端,客戶端再將此隨機數編入登錄請求數據中,服務器收到請求數據后,檢查里面的隨機數是否和自己發出的一致。這種方法可以做到每次請求的唯一性,杜絕了重放攻擊的可能。但它加大了系統的復雜程度和服務器壓力,而且不適用無狀態的應用方式。話說回來,如果應用系統需要使用這么復雜的安全方案來防止重放攻擊,那它選擇口令驗證這種方式本身是不合適的。
此外還有一種比較特殊的口令驗證方式:令牌鎖,也叫動態口令,這種方式網銀用的比較多。應用系統為每位注冊的用戶發放一種叫令牌鎖的硬件,這個硬件會根據某種算法定時(比如每分鐘一次)生成一串字符口令(一般是4到8位),而服務端也會以同樣的頻率為同樣的用戶生成同樣的字符口令。用戶在驗證身份的時候需要輸入自己所持令牌上顯示的口令,發送到服務端進行對比驗證,以確定身份。顯而易見,在口令生成的定時間隔內,重放攻擊是可行的。
可見口令驗證適用于安全要求不高的應用場景,如果應用對安全強度要求較高,可以采用生物特征識別和數字簽名技術,這兩種驗證方式在前文都已介紹過。另外,手機短信驗證碼作為一種方便易行身份驗證方式,在很多場合也被廣泛使用。在實際應用中,可以將上述幾種身份驗證的方式結合,以達到一個比較好的應用效果。
總結
- 上一篇: 吹爆这个最近在用的 IDEA 神器
- 下一篇: java中的character_什么是J