Authentication
我的身份驗證系統是否足夠?
我有客戶端將數據發送到伺服器。數據未加密,但沒關係。我想確保伺服器只接受來自授權客戶端的數據。
伺服器知道所有客戶端的密碼。客戶端生成一個相當隨機的字元串(UUID 的前 6 個字元,通過 Python uuid.uuid4() 函式獲得)。他們執行 md5(random_string + password),並將這個和隨機字元串連同他們的數據一起發送。伺服器獲取隨機字元串和密碼,然後自己執行 md5 以驗證客戶端確實知道密碼。
這個自製系統夠用嗎?同樣,我只想驗證客戶,我不擔心數據加密。
他們執行 md5(random_string + password),並將這個和隨機字元串連同他們的數據一起發送。
如果攻擊者記錄了上述數據,然後發送’md5(random_string + password)’、‘random string’(都來自記錄的數據),然後包含他們喜歡的數據,會發生什麼情況。系統會檢查隨機字元串是否簽出,因此信任數據。
我推薦的是這樣的:
HMAC( random_string, data ), data
(如果需要,數據將包括可以辨識客戶的內容)
這樣,攻擊者就不能只是剪切/粘貼身份驗證資訊;它是被驗證數據的函式。
順便說一句:沒有理由使用 MD5。MD5 中已知的弱點不適用於您的情況,但這不是使用它的充分理由;我建議改用 SHA-256(如果 256 位太長,可能會截斷它)