你如何使用 Subtle 的密码学 API 销毁密钥?

How do you destroy keys with Subtle's cryptography API?

在 WebCrypto/Subtle 加密 API 中,您可以生成密钥等等。然而,似乎明显缺少 .destroyKey() 或类似的东西。

是否在键的引用计数达到零或类似的东西时清理它们?有没有办法从内存中显式 destroy/remove 一个密钥?

请注意,我担心的不是安全问题,因为我知道这不会带来太多安全优势,尽管我担心资源泄漏等问题。无法明确地清理自己的感觉很奇怪。

Web 加密规范 writes:

Authors should be aware that this specification places no normative requirements on implementations as to how the underlying cryptographic key material is stored. The only requirement is that key material is not exposed to script, except through the use of the exportKey and wrapKey operations.

This specification places no normative requirements on how implementations handle key material once all references to it go away. That is, conforming user agents are not required to zeroize key material, and it may still be accessible on device storage or device memory, even after all references to the CryptoKey have gone away.

也就是说,用户代理可以选择在其 CryptoKey 符合垃圾收集条件时立即丢弃关键数据,但也可以选择将数据保留更长时间,例如直到整个浏览上下文在导航到不同页面或关闭浏览器选项卡时被丢弃。

在实践中,差异不太可能重要:您可以在任何具有网络功能的设备的内存中容纳数千甚至数百万个密钥,因此由于延迟收集密钥 material 而耗尽内存非常严重不太可能。而且由于浏览器实现者有保持低内存使用的动机,大多数人会选择在收集 CryptoKey.

时释放密钥 material