Encryption
在沒有數據庫的情況下保存加密使用者數據的最佳實踐
我們正在建立一個要求使用者送出敏感數據的網路應用程序。由於輸入所有必需的數據可能需要很長時間,我們希望為他們提供保存進度的選項。維護一個數據庫來儲存他們的資訊對我們來說是有風險的,因為它會使我們的伺服器面臨潛在的攻擊。我們的團隊很小,很難維持我們想要的安全級別。
我們不想維護這樣的數據庫,而是希望使用我們提供的密碼加密使用者的部分進度(JSON 格式的文本字元串),並且僅在他們希望保存進度時才提供給他們。他們將在 UI 中被指示以物理方式寫下密碼,而不是將其保存在他們的電腦上。為了恢復進度,他們會向我們提供加密文件和密碼。在我們這邊,沒有數據被持久化。如果他們失去了密碼,他們只需要重新開始。
這種方法的任何部分明顯不安全嗎?哪些加密算法和庫(Java 或 Python)最適合執行加密/解密?
這個答案提出了一個基於本地儲存和本地加密的解決方案。
使用者輸入的表單數據:
- 每當使用者想要保存時,都可以在本地加密…
- 加密的文件可以儲存在本地,如果你想儲存它,你可以傳輸一個副本到你的伺服器
- 加密的文件可以在本地解密並通過 JScript 恢復為表單。您可以使用NodeJS。
- 如果使用者失去了他們的文件,那麼如果您保存在伺服器中,您可以傳輸回使用者以恢復。
方法;
- 從密碼到加密密鑰,您可以使用PBKDF2。要求使用者輸入一個好的密碼以增加對暴力攻擊的抵抗力。
- 對於數據加密,您可以使用帶有隨機生成 IV的 AES-CBC 。如果要對加密數據進行身份驗證,則應該使用AES-GCM。
不要忘記讓使用者在某處寫下密碼。
不管密碼、加密等如何,您還有另一個可能的問題。您需要確保在收到解密的 JSON 對象時,再次驗證它們以確保它們在使用者擁有時沒有被篡改。
這種攻擊是否值得做將取決於應用程序(例如考慮遊戲伺服器、分數和目前級別)。但是即使使用者一無所獲,如果您將“反序列化”視為一個安全問題,您也會對這個問題有所了解,並且能夠決定對“簡歷”中收到的 JSON 的信任程度。
我意識到這不是“加密”;對此表示歉意,但我認為這與問題的精神有關。