我有一個生成幾個私鑰的應用程式。當用戶需要對資料進行簽名時,他們必須使用生物識別技術進行身份驗證,然后 Secure Enclave 使用正確的私鑰對其進行簽名。簡單的。
我有一個新要求 - 應用程式需要能夠在多個資料到達設備時對其進行簽名,并且用戶應該僅在對第一部分進行簽名時進行身份驗證。
所以我的問題是:
是否可以創建一個在用戶使用生物識別技術進行身份驗證后在一定時間內保持解鎖狀態的私鑰?如果是這樣,如何?
是否可以創建一個保持解鎖狀態的私鑰,直到程式告訴 Secure Enclave 鎖定它?如果是這樣,如何?
我徹底搜索了檔案和堆疊溢位,但沒有任何運氣。任何幫助深表感謝!
uj5u.com熱心網友回復:
好的,經過大量測驗,我找到了問題的答案。通常(就我而言),每次使用私鑰時用戶都需要進行身份驗證。
為了能夠進行批量操作,我們需要使用LAContext并設定重用持續時間:
let context = LAContext()
context.touchIDAuthenticationAllowableReuseDuration = 10.0 // 10 seconds
加載私鑰時將背景關系添加到屬性中:
let attributes: [CFString: Any] = [
// ...
kSecUseAuthenticationContext: context
// ...
]
var item: CFTypeRef?
let status = SecItemCopyMatching(query as CFDictionary, &item)
然而,這有一個意想不到的行為。即使超過時間限制,私鑰仍保持“解鎖”狀態。使背景關系無效以鎖定私鑰也不起作用。
為了在批量簽名完成后鎖定密鑰,我們需要:
- 釋放背景關系,或重新初始化以備將來使用
- 使用新背景關系(或沒有背景關系)重新加載私鑰,因為私鑰持有對背景關系的強參考。
只有在那之后,用戶才需要再次使用生物識別技術進行身份驗證,因此請記住這一點。
也可以公平地說,不需要生成新密鑰。這種方法適用于現有的密鑰。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/396310.html
上一篇:在構建服務器上禁用防病毒軟體以獲得更高的性能是不好的做法嗎?
下一篇:用X個變數計算
