2015-02-06 216 views
3

我想在發送到服務器之前加密一些用戶數據。也就是說,數據將在瀏覽器中使用JavaScript在客戶端進行加密。在瀏覽器中存儲私人密鑰的最佳方式?

我的問題是,有什麼選擇可用於在客戶端存儲私鑰(當用戶稍後查看時,它將用於解密數據)?

HTML5本地存儲或只是讀取包含來自JavaScript的密鑰的本地文本文件似乎有點關閉... 是否可以使用個人證書用於此目的?或者還有其他的選擇嗎?

編輯:

輕微澄清,

所有需要被加密的客戶端機器上生成,它應該永遠不會離開它以純文本的敏感數據。有問題的數據大部分是用戶上傳到服務器的文件,但我們可能還想在未來對某些表單域進行加密。

一旦加密數據被髮送到服務器,它將以加密形式存儲,並且除了相同的客戶端機器以外不會被解密。例如,如果用戶決定下載他的文件,他會收到加密的文件,這些文件將在瀏覽器中使用JavaScript進行解密。

另外,對於我們而言,在同一臺客戶機上生成公私密鑰對是至關重要的。這隻會由用戶手動完成,或者在一些自動化解決方案的幫助下完成。

底線是,私鑰或純文本數據都不應該離開客戶端的機器。

+1

您不需要私鑰進行加密,只需要公鑰。 – 2015-02-06 11:18:50

+0

@AlexanderH實際上,數據將使用公鑰(存儲在服務器上)進行加密,但是,例如,當用戶想要查看它時,它需要稍後解密。因此需要將私鑰客戶端存儲在瀏覽器中。 – orom 2015-02-06 11:32:39

+0

然後,你需要一個secound鍵,我會說。其他的東西就像是不使用鑰匙 – 2015-02-06 11:43:58

回答

3

根據你的描述,文件和表單域中的數據只能在客戶端使用。在這種情況下根本不需要使用公鑰加密。您應該使用像AES這樣的對稱分組密碼來加密這些數據並將它們發送到服務器。該單一隨機對稱密鑰將在客戶端瀏覽器中生成並存儲在可能受密碼保護的localStorage(例如第二層AES)中。 AES密鑰是128/192/256位長的二進制字符串,不應該離開客戶端瀏覽器。

我認爲localStorage是唯一可行的選擇,因爲它是由所有現代瀏覽器實現的。儘管如此,可能還有其他解決方案,比如瀏覽器插件甚至custom browser

相關問題