Encryption
我們如何將文件加密為在解密後可讀(而不是可寫)?
是否可以加密一個文件(例如,一個文本文件),這樣當使用者解密它時,他/她只能讀取文件而不能更改文件的內容?
我的意思是,解密的結果是一個只讀文件。我認為任何修改都可以使用消息驗證碼檢測到。我正在尋找一種防止使用者修改解密文件的方法。
“文件”是特定文件系統上一系列位的方便隱喻。您的 foo.bar 副本與我的 foo.bar 副本不同,即使它們包含相同的數據。如果沒有利用我係統中的錯誤(在許多司法管轄區是非法的),其他任何人都無法決定我如何處理我的文件副本。所以一般來說,不,如果我可以控製文件所在的系統,這是不可能的。相反,*如果您控制系統的硬體、軟體和 I/O 設備,*您可以讓我訪問查看文件的內容,但不能以任何方式更改它。
但是,如果目標是保持真實性,解決方案是現成的:使用基於散列的加密簽名並確保讀取結果文件的任何人或任何事物都驗證簽名屬於正確的人。
就像您提到的那樣,您可以使用消息身份驗證程式碼以及公鑰/私鑰加密。這幾乎就是消息身份驗證的工作方式(證明消息實際上來自發件人聲稱他們沒有被修改的人),並且可以在您的情況下用於驗證文件在解密後沒有被更改。例如:
Bob 已經得到 Alice 的私鑰並驗證它屬於她
- Alice 拿到她的文件並對其進行雜湊處理。
- Alice 獲取該雜湊並使用她的私鑰對其進行加密。這意味著解密散列的唯一方法是使用相反的密鑰,即她的公鑰。由於 Bob 知道她的公鑰,他可以解密它。
- Alice 使用對稱密碼(即 AES)加密她的文件和加密散列,Bob 知道其中的密碼。
- Bob 解密文件和散列。假設他修改了它,即使愛麗絲告訴他不要這樣做。
- 現在,查理想要一份文件的副本。Bob 願意給他一份副本。Bob 將文件連同雜湊一起提供給他。
- Charlie 想確保 Bob 沒有更改文件,所以他去散列它。Bob 還擁有 Alice 的公鑰,因此他使用它來解密 Bob 包含在文件中的來自 Alice 的散列。然後他比較它們,發現它們不匹配。這意味著該文件在從 Alice 到 Charlie 的途中被修改了由於 Charlie 想要保持安全,他不使用該文件,因為他知道它已被修改。
這是消息簽名的基礎。它確保沒有人在傳輸過程中更改文件。只要您知道發件人的公鑰,那麼這個系統就應該萬無一失地保證沒有人更改文件,本質上使其成為“只讀”。