簡體   English   中英

Delphi - 認證機制建議

[英]Delphi - authentication mechanism suggestions

這個問題只有教育目的。 此時我正在制作一個小應用程序,我希望在其中包含一個身份驗證機制。 應用程序在安裝時應該可以訪問Internet,但是可以脫機工作。 到目前為止,我一直在考慮以下解決方案:

1)經典:發送到身份驗證Web服務的用戶名和密碼(加密) - Internet連接斷開時出現問題。
2)根據主板/硬盤序列號生成密碼否 - 這會在組件更改時產生問題。

另外,我想要包含一個“記住密碼”復選框。 這是最安全的方法嗎? 我應該在哪里存儲這些信息?

我相信你們大多數人已經建立了一個或多或少復雜的認證機制,我在征求你的意見。 此外,我知道一切都可以被黑客攻擊,但我想盡可能地讓它變得困難。

不要重新發明輪子!

一些規則:

  • 身份驗證必須是每個用戶;
  • 身份驗證必須用於會話,即網絡連接和某個給定時間;
  • 從不在磁盤上清楚地存儲密碼,但使用哈希;
  • 從不通過網絡傳輸密碼,但使用哈希;
  • 在任何值的散列過程中添加一些“鹽”(即隨機數據);
  • 嘗試實現某種零知識證明

為簡單起見,服務器為客戶端創建“挑戰”。

典型的實現可以是:

  1. 客戶端連接到服務器,說出其用戶名;
  2. 服務器檢查名稱,然后為客戶端創建並發送質詢;
  3. 客戶要求用戶輸入密碼,然后用它來回應挑戰;
  4. 服務器收到答案,然后檢查挑戰是否正確。

您可以使用良好的散列算法創建挑戰(請查看我們非常快速的SHA-256函數 ),並按照以下步驟操作:

  • 用戶輸入其初始密碼,然后將SHA-256發送到服務器(通過固定私鑰加密,例如);
  • 服務器將用戶名/密碼哈希作為鍵/值存儲;
  • 服務器通過創建隨機塊(使用一些隨機數據的SHA-256,包括當前時間和其他隨機化+隨機值......)來創建挑戰;
  • 客戶端使用剛剛輸入的密碼的哈希值對該隨機塊(從服務器接收)進行哈希處理;
  • 服務器從客戶端接收結果,使用存儲的用戶密碼哈希值計算自己的版本,並比較兩個值:如果兩個值相同,則challenge成功。

取決於你想要達到的目標。 例如,您可能首先從服務器檢索一些關鍵數據,然后始終將其存儲在本地,通過login-password加密。 這樣,PC上就不會存儲密碼,您必須輸入密碼才能訪問數據。

那么為了記住密碼,你可以在本地保存它的哈希值,這不能用於獲取真正的密碼...

您可以使用cookie執行瀏覽器操作並將密碼存儲在加密文件中,或者甚至更好地將其存儲到數據庫中。 請記住,如果用戶在服務器上更改了密碼,則需要更新數據庫密碼。 您無需生成密碼。 您可以要求用戶這樣做,並檢查其復雜性以確保其安全。 並且在連接到Web服務時始終使用SSL,以確保所有數據都可以安全傳輸。

暫無
暫無

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

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