2014-01-09 60 views
1

有一些文件需要下載並存儲在沙盒中。但是,他們必須始終保持安全(即加密)。現在,我可以在下載到文檔本身時加密它們。但是當文件需要被使用時,我必須在這之前解密它們。問題是在哪裏放置這些解密文件?iOS沙盒 - 保護Documents目錄中的數據

tmp - 看起來像是一個很好的地方保存它,但如果內容被刪除時,應用程序已被保持最小化幾天。

文件 - 將解密文件保存在單獨的位置可能不是一個好主意。當應用程序重新啓動時它不會自動清除,如果設備在應用程序仍在運行時耗盡電量,這些解密的文件將會暴露。

所以這個問題是確保Documents目錄數據安全的最好方法。

+2

你並不是真的想要解密的文件,因爲它破壞了保護點。你真的只是想把數據讀入內存中...... – Wain

+0

那怎麼會這樣。假設我在我的沙盒的Documents目錄中有一個加密的mp4文件。現在,當我想使用MPMoviePlayerController播放本地加密的mp4文件時,該如何解決這個問題。 – OutOnAWeekend

+0

我沒有說這總是可能的(或簡單)。只是你應該知道你想要做什麼的安全含義。你不能讓它100%安全。 – Wain

回答

0

基於UNIX系統的一個有用方面是,您可以創建/打開文件,然後立即刪除文件。該文件將無法從應用程序外部訪問,但是該應用程序將能夠讀取/寫入文件的數據,並且該文件在文件句柄關閉之前不會真正刪除。

這意味着您可以在應用程序的可訪問文件結構中的任何位置創建/打開解密文件。

雖然我沒有在iOS下測試過,但我認爲它很可能會有效。

+0

但內容仍然在未加密的另一個越獄應用程序找到的磁盤上。 – zaph

+0

是的。它甚至不需要越獄設備來訪問它們。 – OutOnAWeekend

+0

@Zaph另一個進程如何訪問目錄中沒有條目的文件? – trojanfoe

0

我會將加密文件保存在Documents目錄中,並使用NSDataNSDataWritingFileProtectionComplete選項加密。

如果您覺得需要自己加密文件,然後僅根據需要進行解密,請將解密的文件保存在Documents目錄中,並使用NSDataNSDataWritingFileProtectionComplete加密。將「不備份」擴展屬性添加到文件中。在應用程序啓動/喚醒等基礎上,警察覆蓋不再需要的文件並刪除。使用隨機密鑰隨機密鑰的AES,CBC模式並將鑰匙保存在鑰匙串中。

一個選項,可以作爲流打開並在運行時解密爲緩衝區,如果這適用於您的應用程序。

但問題是我真的不明白你的完整用例。最佳實踐:聘請iOS安全領域的專家爲您提供建議並審覈您的解決方案。安全是否值得這個價格,這是一個有效的問題。

解釋我的意見:我寫了一個應用程序來從損壞的HD中恢復圖像,但並非那麼困難。