前面說過HTTP是應用層最普遍的傳輸協定,針對用戶的身分驗證,
HTTP具備了基本驗證與摘要驗證。
基本驗證就是伺服器一般使用帳密驗證的方式。
而摘要驗證,則是比較複雜一點;瀏覽器在要發送用戶資訊(例如帳密)之時,
並不直接對伺服器發送用戶帳密,而是
1
先對伺服器發送一個「準備要發送用戶訊息」的請求,
2
伺服器接收到這個請求,會回傳一個nonce給瀏覽器。
3
瀏覽器接收到這個nonce,
才會將用戶帳密(密碼會事先用hash演算法,轉成hash code)、這個nonce、
其他相關資訊,先使用hash演算法計算出一串hash code,
再將這串hash code,以及用戶帳號,傳送給伺服器。
4
所以伺服器接收到的,就是由nonce計算出來的一串hash code、用戶帳號。
5
這時伺服器可以根據用戶帳號,取出存在於資料庫,對應的密碼hash code。
然後拿著這段密碼hash code,跟自身早先給予的nonce,以及其他用戶資訊,計算出
另一串hash code。接著拿這段新計算出來的hash code,跟接收到的hash code來比對。
6
若兩串hash code的比對結果是一樣的,表示兩串hash code的組成是一模一樣,
由於不同input(input是密碼hash code、nonce、用戶資訊)
產生兩串相同hash code的機率是趨近於0,
而且hash code還可以透過加鹽的方式讓這個趨近於0的機率變的更低。因此,兩串相同的
hash code,就表示有著相同的密碼hash code、相同的nonce、相同的用戶資訊......
7
由此即可證明用戶的資訊,確實是屬於某個合法(用戶資料有存在於資料庫)的用戶。
這就是HTTP摘要驗證。