2017-07-18 874 views
0

我正在開發一個android消息應用程序。當用戶註冊rsa私鑰和公鑰時,並且這些密鑰和aes消息被加密和解密。如何存儲RSA私鑰,公鑰

私鑰存儲在服務器的手機和公鑰中。如果用戶重置或卸載應用程序,則所有密鑰都將丟失,因此無法解密舊消息。

如何在用戶卸載應用程序時檢索舊私鑰而不將其存儲在服務器中?

回答

1

有多種方式可以在Android中保存數據。數據庫,SavedInstanceState,SharePreferences和文件。用戶卸載應用程序後,只有文件仍然存在。將其保存在文件中是您擁有的唯一選項。

+0

現在它已存儲在數據庫中,並且sharedprefernce.does密鑰庫在卸載應用程序後保留數據。 – cyborg

1

您是使用Android Keystore存儲密鑰還是使用自己的文件存儲?

的Android密鑰庫

藉助Android密鑰庫是沒有辦法恢復鍵,因爲它們只能通過創建它們,如果有實質性的變化被丟棄的應用中使用。

我猜你正在使用RSA密鑰協商AES對稱加密密鑰。因此,你將需要備份的AES加密密鑰(例如在服務器...),以及stablish一個機制來恢復,如常見的「記住密碼」事業的關鍵

自定義密鑰存儲

如果您將密鑰存儲在沒有AndroidKeystore的設備中,則可以定義自己的機制來還原密鑰。例如,使用密碼加密密鑰並將密鑰存儲到設備的公用目錄中。然後密鑰可以恢復提示用戶輸入密碼

注意事項:考慮到每種情況下的安全風險。例如,一個非加密的AES密鑰進入服務器意味着惡意服務器可以解密消息。或弱恢復密鑰機制將降低系統的整體安全級別

+0

消息使用隨機生成的aes密鑰進行加密,該密鑰對於發送的每條消息都是唯一的,並且使用rsa對aes密鑰進行加密並與消息一起發送。消息發送後,將其從服務器中刪除。當消息等待時被髮送到服務器中,並且用戶重置應用程序,它也重置其被加密的公共私鑰。 – cyborg

+0

然後,如果重新啓動應用程序,則需要對未連接到應用程序的RSA私鑰進行備份。正如我上面評論的那樣,使用密碼加密RSA密鑰。並將密鑰存儲到服務器或設備本身的永久文件中。缺點是你需要向用戶請求一個密碼,這不是用戶友好的 – pedrofb