我正在構建一個Web服務,它接受其他服務的憑據並以用戶名義輪詢這些服務。也就是說 - 考慮一個電子郵件聚合服務 - 在各種不同的電子郵件提供商處對您的帳戶進行輪詢,並將它們整理到一個列表中。哪種編碼用於存儲可解密的密碼?
在這種情況下,用戶提供的密碼必須能夠被webapp解密,所以它們可以被傳遞給各種服務進行認證。
我應該如何存儲這些密碼?
我讀過關於在db中存儲密碼的各種帖子(答案總是'不'),但在這種情況下,我看不到另一種方法。 (雖然歡迎,但建議)
我正在構建一個Web服務,它接受其他服務的憑據並以用戶名義輪詢這些服務。也就是說 - 考慮一個電子郵件聚合服務 - 在各種不同的電子郵件提供商處對您的帳戶進行輪詢,並將它們整理到一個列表中。哪種編碼用於存儲可解密的密碼?
在這種情況下,用戶提供的密碼必須能夠被webapp解密,所以它們可以被傳遞給各種服務進行認證。
我應該如何存儲這些密碼?
我讀過關於在db中存儲密碼的各種帖子(答案總是'不'),但在這種情況下,我看不到另一種方法。 (雖然歡迎,但建議)
讓我們在這裏澄清:服務器必須能夠恢復明文密碼。
考慮一些事情你可以做:
如果攻擊者有根目錄(但沒有任何內容),它們都不會幫助你。如果攻擊者切斷電源並竊取數據包,它們大部分都不會幫助你(RAM不像你想要的那樣是非易失性的)。
你試圖抵禦什麼攻擊?你忽略了什麼攻擊?
一種可能性是使用從用戶密碼派生的密鑰(如OSX的Keychain和Windows的無人使用的等效密碼存儲)對密碼進行加密。當用戶登錄到您的Web服務時,您可以將密鑰保留在會話中(或使用一次性鍵盤異或將其存儲在cookie中,並且只在用戶發送請求時恢復密鑰)。這使得從數據庫備份中竊取外部密碼至少與破解用戶密碼一樣困難。不過,這對其他人來說並沒有什麼幫助。