簡體   English   中英

如何為多個進程緩存eToken PIN

[英]How to cache eToken PIN for multiple processes

我有一個.NET(c#)應用程序,該應用程序在“我的”證書存儲中使用x509Certificate2,該文件最初來自eToken設備。

當我使用證書(解密數據或將其用作Web請求的客戶端證書)時,它將要求輸入設備PIN一次。 之后,它被緩存,用戶不會每隔xx分鍾打擾密碼請求。

現在,我有多個進程,都使用證書。 這些過程中的每一個都將要求設備PIN。 (緩存似乎是每個進程的)。

有一個簡單的方法嗎? 我可以將其“緩存”在某個地方,以便每個進程都可以訪問令牌而無需一遍又一遍地請求PIN嗎?

請注意:進行這種“ PIN”緩存確實是非常糟糕的安全實踐。 任何憑證都應盡可能短暫地存儲在內存中,以避免攻擊者通過監視系統內存來獲取有關PIN的信息。 盡管通常這需要本地訪問計算機,但這仍然被認為是非常相關的威脅,因為在大多數情況下,您都不希望系統管理員也窺探到PIN :)

就是說,對於必須每隔一秒鍾輸入PIN的用戶來說,這是一個真正的PITA。 與安全性這么多東西一樣,安全性和可用性之間存在權衡。

如您所注意到的,許多智能卡驅動程序會自己進行這種形式的緩存。 通常在卡上有兩個證書/密鑰,一個具有不可否認密鑰用法,被認為是高安全性操作,例如在文檔上提供簽名,另一個被認為是用於不斷重復的雜務的“認證證書”。通過服務進行身份驗證。 通常,每次訪問不可否認密鑰時都必須重新輸入PIN,而驅動程序通常會為身份驗證密鑰緩存PIN。

所以它真的取決於你的特定用例 - 如果你認為這個操作非常關鍵,我建議你不要做任何緩存。 嘗試“教育”用戶。 這是為了自己的利益,等等。

否則,如果您認為風險可以接受,您可以使用任何形式的進程間通信,最適合您跨進程共享PIN。 一個簡單的解決方案可能是在只有應用程序具有讀/寫權限的目錄中創建“PIN文件”。 只要需要PIN,就檢查文件是否存在(要注意比賽條件!)-如果文件尚不存在,則要求輸入PIN並將其寫入文件-否則,只需從文件中讀取PIN。 確保使用用於傳送PIN的零覆蓋內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM