硬體加密晶片是否比桌面應用程序的軟體加密晶片更安全?
訪問硬體加密晶片不是比依賴加密庫更安全嗎?
我的問題是作為對@SqueamishOssifrage 回复“正確保護遠端儲存的私鑰”文章第 6 項的回复而提示的(我沒有足夠的分數來回复他們的評論)。
引用:
審計您的軟體堆棧需要付出很多努力,以確保它在您可能感興趣的所有平台上可靠地使用硬體 AES 支持。
如果我的桌面應用程序是簽名的,使用晶片不是更安全嗎?
根據收到的答復進行澄清
是的,我基本上是在尋找一種安全的解決方案來儲存私鑰。您的第 2 點,將密鑰儲存在密鑰永遠不會出現的晶片中似乎是顯而易見的解決方案。考慮如何解決潛在問題(支持不同的晶片、發現新漏洞等)對於小型開發人員來說是不切實際的。在這一點上,實現一個密鑰可能由多個遠端伺服器簽名的軟體解決方案似乎是可行的方法(你可能會破壞一個遠端伺服器,但你能破壞它們嗎?)。如果有比這更好的設計模式,我會有興趣追求它。事實上,我不相信單台電腦上的軟體實現可以做到這一點。
“硬體加密晶片”可能意味著幾件不同的事情:它可能意味著
- 使用軟體輸入的密鑰簡單地計算加密操作的硬體,如英特爾的 AES-NI CPU 指令;或者
- 儲存密鑰並在其中計算加密操作的硬體,並採取防禦措施防止任何人提取密鑰,例如 YubiKey USB 設備或 HSM。
我在之前的文章中提到的只是第一種類型。
如果您可以利用 CPU 的(例如)AES 和 GHASH 硬體,那麼與軟體 AES 相比,它可能更快且更不易受到時序側通道攻擊。
但是,在所有可能出現的實例中審計整個軟體堆棧以確保您真正利用硬體是一項大量的工程工作——因為,
- 為了兼容性,軟體棧通常有軟體回退;和
- 除了在 BearSSL 等敏感軟體中的性能之外,軟體回退通常更快,但預設情況下會洩漏;和
- 計時側通道通常是無聲的,這意味著你永遠不會注意到問題,直到地球另一端的某人通過你的比特幣錢包軟體中的洩漏竊取你的錢。
當然,您只需使用 ChaCha 和 Poly1305 就可以獲得幾乎相同的性能和基本相同的側通道電阻,然後您不必做所有的工程和審計工作,因為廣泛使用的 ChaCha 和 Poly1305 軟體往往會已經抵制定時側通道,並且您可以獲得更好的安全邊際,因為 ChaCha 是一個更好的設計,並且您的軟體將可以在更廣泛的平台上安全使用。
因此,如果您為新協議選擇密碼,那麼這個論點支持 ChaCha 或 XSalsa20 和 Poly1305 而不是 AES-GCM,以避免需要硬體來實現快速安全。但是,如果您在協議已經選擇 AES-GCM的情況下選擇實現,那麼如果可以的話,使用 AES-NI 或類似方法來計算它會更安全。
至於儲存密鑰的硬體設備,如果你能做到這一點,那就太好了,因為你手機/筆記型電腦/exobrain/advertisementIVdrip 上的惡意應用程序無法竊取密鑰。
但這也意味著人們不能只通過應用商店的一鍵安裝來使用你的真棒應用;相反,他們可能必須隨身攜帶物理設備,或者您可能必須處理各種平台,例如筆記型電腦中的 TPM 和 iPhone 中的 SE 等等。
所以這是更多的工程工作和可用性障礙。這可能是值得的安全利益!作為一名工程師,您可以使用有關您的目標受眾、使用情況等的特定資訊,就這些權衡做出明智的決定。