您如何使用 Subtle 的加密 API 销毁密钥?

问题描述

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

键是否在其引用计数达到零或类似情况时被清理?有没有办法从内存中显式销毁/删除密钥?

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

解决方法

网络密码规范writes

作者应注意,本规范没有对底层加密密钥材料的存储方式提出规范要求。唯一的要求是密钥材料不暴露给脚本,除非通过使用 exportKey 和 wrapKey 操作。

本规范没有对所有对密钥材料的引用消失后实现如何处理密钥材料的规范要求。也就是说,符合要求的用户代理不需要将密钥材料归零,即使在对 CryptoKey 的所有引用都消失之后,它仍然可以在设备存储或设备内存上访问。

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

在实践中,差异不大可能:您可以在任何支持 Web 的设备的内存中放置数千甚至数百万个密钥,因此由于延迟收集密钥材料而耗尽内存的可能性极小。并且由于浏览器实现者有动力保持较低的内存使用量,因此大多数人会选择在收集 CryptoKey 时释放密钥材料。