2017-08-12 190 views
0

假設我想開發一個認證/用戶系統,並且我希望能夠在需要時恢復原始用戶密碼,從安全角度來加密密碼vs散列有什麼缺點?加密與散列密碼

當然,應用程序將只使用公鑰,並且只是將加密的字符串與公鑰進行比較來執行驗證。

私鑰可以通過兩種方式來使用:

  1. 我一直在爲特殊手動密碼恢復操作我的離線設備的私鑰。
  2. 私鑰在應用程序中,但使用密碼加密。

考慮到沒有人(除我以外)可以訪問私鑰,這些實現選擇的安全弱點是什麼,而不是哈希密碼?

關於第二個選項,潛在的黑客可能破解應用程序服務器並等待我插入密碼來解密私鑰,但我認爲在這種情況下,黑客已經可以做更多不好的操作,而不是等待私鑰解密(如等待只是用戶登錄時和其他人...發送密碼)

感謝

編輯:我將主要了解,如果是使用加密是使用散列是安全的(當然,假設破解者無法獲得私鑰)。

+1

*「我希望能夠恢復原來的用戶密碼,如果我需要」*不,你不需要。 – Ryan

+0

只要知道哈希是一種單向算法,您不能散列密碼並在稍後從哈希中恢復密碼 –

+0

@Ryan您是否知道我在開發什麼類型的應用程序?請假設我可能需要恢復它們。 – Eghes

回答

0

如果你想恢復密碼,哈希是超出選項。哈希是單向算法。所以你有2個關於加密密碼的選項。

1-我在我的離線設備上保留私鑰以進行特殊的手動密碼恢復操作。

如果您確定您的脫機設備不會受到威脅,那麼您可以這麼做。

2-私鑰在應用程序中,但用密碼加密。

這可能會適得其反,因爲如果有人能夠訪問您的代碼,他們可以推斷您正在加密密碼並以這種方式存儲密碼。這可能會激發攻擊者訪問您的私鑰。

鑑於這兩個選項,我會說第一個更安全,因爲您只需要擔心設備的物理安全性。

+0

謝謝。我會主要理解的是,如果使用加密和使用哈希一樣安全(當然假設黑客無法獲得私鑰)。 – Eghes

1

如果你的問題是適當的哈希算法是否有瑕疵,並適當加密方案是正確的,那麼是 - 兩者都是使用目的正確。

這意味着例如對於散列而言,不存在衝突並且沒有可逆性。對於加密,這意味着在合理的時間內不能解密。請注意,這些只是兩個要求,每個都有更多。

現在,預期用法是重要的。如果你需要重用密碼,那麼你需要以某種方式存儲它們。有幾種可能性,包括加密。正如你所指出的,風險在於檢索密鑰(有人可以破解你的操作系統,或者在你的應用程序使用密鑰時破解它...)。

在跳入架構來存儲密碼和密鑰之前,我會熱烈推薦尋找其他可能性(如身份驗證經紀 - 將身份驗證卸載到其他人)。