2015-04-20 133 views
1

我使用與iOS7鑰匙串爲目標,我使用屬性:kSecAttrAccessibleWhenUnlockedThisDeviceOnly刪除鑰匙扣當應用程序被殺害

據10秒後,偉大的工作,當設備處於鎖定鑰匙串變量是不可訪問。

我現在想要的是在應用程序被殺之前刪除鑰匙串。 applicationWillTerminate僅在應用程序在進入後臺或系統釋放應用程序之前被殺死。如果應用程序在被用戶殺死前1分鐘後臺,我找不到如何清除鑰匙串。

有沒有什麼方法可以刪除鑰匙串,或者在用戶在後臺幾分鐘後終止應用程序時調用函數?

+0

不是真的,你爲什麼需要刪除? – Wain

+0

我使用加密的敏感數據的鑰匙串,我想清除一切,如果應用程序被用戶手動殺死。如果applicationWillTerminate被調用,我清除鑰匙串,但是不夠... – Pull

+0

另請參閱http://stackoverflow.com/q/3712979。 – jww

回答

2

有沒有辦法刪除的鑰匙扣......

NO。在iOS上,只有一個鑰匙串及其共享資源。

如果有興趣,可以從數據安全角度進行一些閱讀。自iOS 4/5天以來沒有多大變化。我認爲最有趣的新東西是iOS 7的NSSecureCoding Protocol(或者是6?)和指紋認證。

或有一個調用的函數,當應用程序在後臺若干分鐘後處死

是的a nd no。儘管有文獻說明,-applicationWillTerminate並未發送。相反,當SIGKILL到達時,您知道您正在終止。你不能把它陷入困境。但是,您可能能夠快速擦除並從sighandler返回,但(我從來沒有嘗試過,所以我不知道)。

當數據敏感性允許時使用的策略是當您的代表收到-applicationWillResignActive時開始清除數據。或者在-applicationWillResignActive到達時啓動計時器,但如果-applicationWillEnterForeground到達,則取消它。如果時間流逝,然後開始擦拭。但是兩者都可能導致糟糕的用戶體驗。

+0

事實上,我在背景中有一個計時器,如果應用程序在背景中過長,我清除鑰匙串(實際上是鑰匙串內的變量)。那麼從你所說的沒有辦法趕上這個「由用戶在後臺殺死的應用程序」事件呢? – Pull

+0

*「...實際上我的鑰匙串裏面的變量......」 - 噢,那是一個'SecItem',你可以刪除它。但是,在刪除它之前,您應該覆蓋它,因爲Apple的Secure Allocator調用Standard Deleter(而不是Secure Deleter)。我多年前向他們報告了這個錯誤,但它仍然沒有修復。 – jww

+0

*「所以從你說的沒有辦法趕上這個」由用戶在後臺死亡的應用程序「事件呢」 - - 據我所知,答案是否定的。你會看到'SIGKILL'飛過,但你不能陷入它。不過,你也許能夠快速擦除並從'sighandler'返回。你也許可以在越獄設備上做到這一點(對我來說,JB是例外,而不是規則)。 – jww

相關問題