簡體   English   中英

如何在客戶端安全地保護服務器身份驗證密碼?

[英]How can I secure a server authentication password securely on client side?

在我的應用程序中,客戶端通過SSLSocket連接到服務器。 為了進行身份驗證,服務器發送鹽,客戶端發送使用給定鹽加密的密碼。

我實際上不想讓用戶每次都輸入他的密碼,但另一方面我不想遇到安全問題。

我閱讀了有關密鑰庫的信息,但它們安全嗎? 而且據我了解,用戶仍然需要輸入密碼。

什么是安全且用戶舒適的解決方案?

如果我理解正確,您當前的協議如下所示:

server -> client: random nonce
server <- client: encrypted password
server <- client: encrypted password

客戶不必一次又一次地發送他的密碼,我建議您在協議中利用訪問令牌。 訪問令牌(“身份驗證令牌”、“會話 ID”)是一個很大的隨機值,服務器將其作為身份驗證響應返回:

server <- client: encrypted password
server -> client: 256-bit access token
server <- client: 256-bit access token
server <- client: 256-bit access token

它是一個 session 管理。 NIST 提供有關 session 管理的建議: https://pages.nist.gov/800-63-3/sp800-63b.html#sec7

Session 管理優於持續呈現憑證,因為持續呈現的較差可用性通常會激勵諸如緩存解鎖憑證等變通辦法,從而否定身份驗證事件的新鮮度。

客戶端持有 memory 中的訪問令牌,並使用它代替密碼。 如果要在應用程序啟動之間保留訪問令牌,則必須安全地存儲它,這取決於客戶端的操作系統:

  1. Android:密鑰庫。
  2. iOS:鑰匙扣。
  3. Linux/Windows/MacOS:這里很難——只要把memory中的token盡可能長的保存,不要放入文件,讓應用程序運行盡可能長的時間。

無論哪種方式,訪問令牌都必須在一段時間后過期,即使它由於某種原因泄露,客戶端也會在一段時間后得到一個新的。 請參閱NIST 中有關重新認證的部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM