網絡安全加密

Secure Remote Password protocolhtml

  1. 介紹數據庫

    1. 一個認證和密鑰交換系統,它用來在不可靠的網絡中保護口令和交換密鑰。
    2. 經過消除了在網絡上發送明文口令的須要,而且經過安全的密鑰交換機制來使用加密,改進了安全性。
    3. 服務器不保存密碼或密碼的散列值, 防止字典攻擊. 而只是保存驗證因子(verifier).
    4. 客戶端和服務器能夠各自計算出一個會話祕鑰(session key), 其值相同. 防止竊聽和會話劫持.
    5. 好多遊戲服務端用SRP認證,好比魔獸世界。
  2. 優勢瀏覽器

    1. 防竊聽
    2. 防暴力破解,字典攻擊, 弱口令也不容易被破解
    3. 即便口令數據庫被公之於衆,攻擊者仍然須要一個龐大的字典去搜索來得到口令。
    4. 速度快,不須要證書和第三方認證機構
  3. 缺點安全

    1. 瀏覽器不支持,得本身實現

原理服務器

N     一個安全的大質數, 好比N=2q+1,q 是一個素數
g     一個以N爲模的生成元,對任何X,有0 < X < N,存在一個值x,使得g^x % N == X。
k     k = H(N,G) 在 SRP6 中 k = 3
s     User’s Salt
I     用戶名
p     明文密碼
H()   單向 hash 函數
^     求冪運算
u     隨機數
a,b   保密的臨時數字
A,B   公開的臨時數字
x     私有密匙(從 p 和 s 計算得來)
v     密碼驗證數字

N和g的值必須由雙方討論來達成一致。它們能夠被提早設置好,或者主機把它們發送給客戶端。

服務器存儲以下信息
x = H(s, p)               (s is chosen randomly)
v = g^x                   (computes password verifier)

服務器的數據庫保存 {I, s, v} 整個驗證流程以下:

User -> Host:  I, A = g^a                  (標識本身是誰, a是隨機數)
Host -> User:  s, B = kv + g^b             (把salt發送給user, b是隨機數)

        Both:  u = H(A, B)

        User:  x = H(s, p)                 (用戶輸入密碼)
        User:  S = (B - kg^x) ^ (a + ux)   (計算會話密鑰)
        User:  K = H(S)

        Host:  S = (Av^u) ^ b              (計算會話密鑰)
        Host:  K = H(S)

這樣雙方都有一個會話密鑰S, 後續的消息傳輸能夠用S作加解密,從而保證安全。
爲了完成認證過程,雙方還得向對方證實本身擁有正確的S,
S不能讓第三方知道,因此不能直接傳輸給對方作比較,一個可能的辦法是:

User -> Host:  M = H(H(N) xor H(g), H(I), s, A, B, K)
Host -> User:  H(A, M, K)

雙方須要作以下保障
    1. 若是客戶端收到B == 0 (mod N) 或u == 0, 客戶端中止認證。
    2. 若是服務器發現 A == 0 (mod N)則中止認證。
    3. 用戶必須得證實本身擁有正確的K,不然服務器就會終止認證。

用密鑰加密用戶密碼網絡

  1. 介紹:
    1. 本機生成一個密鑰key存磁盤上,對稱加密密鑰。
    2. 建立用戶時,用戶提供password, 而後數據庫裏保存db_password = encrypt(key, hash(password))
    3. 這樣黑客把數據庫拖走後,由於沒有key解開用db_password,因此用戶密碼仍是安全的。
    4. 用戶登陸時提供密碼password, 哈希後是hash(password), 而後uncrypt(key, db_password),
      1. 二者比較,一致就是認證經過
      2. 不一致就是終止認證
  2. 優勢:
    1. 防止拖庫
  3. 缺點
    1. key丟了就完蛋了,誰也登陸不上了。
相關文章
相關標籤/搜索