2016-02-25 61 views
1

我已經在整個班級與掙扎課程規範遇到一個看似不可能完成的任務,我會盡量爲簡明概括地:是不能確保這個系統

  1. 的文件具有「讀取「和」寫入「密碼,其中密碼不相同。
  2. 用戶可以編寫或創建文件,如果他們知道文件名的「寫入」密碼。
  3. 類似地,如果用戶知道「讀取」密碼,則可以讀取文件的內容。
  4. 整個程序的源代碼可用於系統的任何攻擊者,因爲該程序通過USB傳遞給用戶。
  5. 沒有辦法創建密鑰庫,因爲沒有辦法輸入主密碼來存儲每個文件的密鑰。
  6. 沒有密鑰/密碼可能會出現在純文本中。
  7. 命令的形式爲java的-e文件PASS1和java -d文件PASS2寫入和讀取分別,有沒有辦法在兩個密碼來傳遞。

我沉思至今:

  1. 我存儲散列和源代碼,這是相當安全的醃製(儘可能的規範去)密碼
  2. 我不能使用AES(或任何對稱)鍵,因爲讀取和寫入會相同。因此,如果只有一個天真的鍵用於讀/寫,「讀」用戶可以很容易地獲得他們的AES密鑰,因此他們可能會欺騙寫操作。
  3. 使用兩個AES密鑰,因爲這會使文件無法同步的,我不能保持文件和加密的副本,所以說用戶1寫入到文件1,如何加密文件的讀取副本只用讀取密鑰記錄更改,而不用解密寫入部分。
  4. 生成公鑰/私鑰對離開我無處並將其作爲我需要密鑰庫主密碼進行加密 - 該規範禁止使用的任何命令,但他們開出的人的。

我的問題是...這是不可能的?或者有辦法。我一直堅持了一個星期,就像整個班級一樣。我的教授聲稱有一個解決方案。

+0

你允許哪些命令?你明確禁止使用非對稱密碼嗎? –

+0

我只允許使用文件名和密碼作爲參數的加密(寫入)和解密(讀取)操作。然而,我不禁止我如何在不透露信息的情況下使用它們?如果我嘗試存儲密鑰對,那麼我需要對密鑰對進行加密,以防它們被盜用。 – Display

+0

是的,你做。但是您可以使用不同的密鑰來加密密鑰對的每個成員。也就是說,您使用AES加密「公鑰」,使用寫密碼作爲密鑰,並使用讀密碼作爲密鑰對「私鑰」進行加密。 –

回答

0

這裏是作爲暗示由模塊的示威之一的溶液。

我們可以使用哈希和鹽漬的密碼來保護它是隨機生成的AES密鑰的兩個實例。

...我甚至不會評論這是多麼不安全,任何使用該系統的攻擊者都可以使用哈希值和鹽值,誰可以讓他們自己的程序實例不檢查密碼哈希值,但是由於它是基於USB的,所以它們總是可以隨時檢測RAM。