的更好的辦法是這樣做的更好的辦法?
是的,它被稱爲SSL/HTTPS。如果您已經在使用HTTPS,那麼就不需要任何這種加密魔法。如果你沒有使用HTTPS,那麼你的設計就已經不夠安全,沒有什麼可以解決這個缺乏重新發明SSL的問題。
那麼應該怎麼做,如果運輸安全(HTTPS)
- 客戶端發出的認證以純文本發送用戶名+密碼的請求。
- 服務器驗證用戶名和密碼對與該帳戶存儲的(希望)散列密碼對。
- 服務器使用靜態AES密鑰以令牌(加密帳戶ID,到期等)響應。
- 客戶端將令牌用於所有已認證的請求。
簡單。
有一兩件事你可以做...
爲了防止非安全設備所使用的憑據丟失,你應該從谷歌和其他需要的頁面。不要讓用戶輸入他們的網站密碼,讓他們訪問並登錄到您的Web服務器。從那裏他們點擊'爲設備生成訪問令牌'。生成一個唯一的數據字符串(20個或更多個字符)並將其記錄在其帳戶中。這個'備用密碼'然後可以被用戶從你的網站撤銷。
如何讓這更安全?
你真的不能做的更好,這是爲什麼?
假設攻擊者能夠訪問到你的私鑰。攻擊者可以在竊取用戶名和密碼的同時替換您的服務器或玩中間人。
爲了防止這種情況發生,您可以設法通過一些PKI交換來發送由服務器給予您的公鑰加密的密碼。我作爲一箇中間人可以簡單地給你我自己的公鑰,並訪問用戶名和密碼,然後如果我選擇,將它轉發給真實的服務器。
- 或 -
爲了試圖阻止這種使用將在地方明文密碼來向服務器發送一些鹽+哈希密碼。我作爲一箇中間人可以給你一個固定的鹽值,然後爲這個鹽值預先計算一個完整的彩虹表。現在我再次以清晰的文字顯示每個人的密碼(最多)。
- 或 -
爲了試圖阻止這種使用PKI來建立一些祕密的會話密鑰,然後簽名和加密的每一次溝通。那麼,呃......聽起來很熟悉......見SSL on Wikipedia。要知道,使SSL安全的東西是保護它的私鑰。一旦私鑰丟失,所有的安全和信任都將丟失。
最後說明:
如果不能保護你不能建立安全通信的一些加密密鑰。
您還應該知道,數千個工時已用於SSL的軟件實現(如OpenSSL),並且他們經常在實現中發現漏洞。你自己實現這個目標的希望,並且像IIS或OpenSSL一樣安全,幾乎是NIL。這不是你的Digg,那只是現實,我無法做到,要麼我只知道甚至沒有嘗試。
最後,我的最終建議是關於您的陳述:「系統內的某人可能會泄漏它並濫用它」。這是你真正的問題。解決這個問題,所有其他問題都會容易得多。確保服務器環境應該是您的首要任務。您的第二優先事項應該是儘量減少對客戶的影響,一旦您未能做到第一。
一些有用的鏈接:
RE#1,你可以保存舊鍵,直到它正在使用已過期的最後一次會議 - 這意味着關鍵將在最多4個小時左右。 – Jeff
你是什麼意思「現在,因爲這將高度依賴於私鑰(這將是相同的,因此係統內的某人可能會泄漏它並濫用它)」 –