WebCrypto API引入了不可导出的私钥的概念,可以将其导出到IndexDB,但不能导出到LocalStorage或Web上。这在Charles Engleke的博客“Saving Cryptographic Keys in the Browser”中得到了很好的解释。
但这些物体如何实际起作用?有没有办法从JS告诉对象是否不透明?我无法找到有关此信息的任何信息。
答案 0 :(得分:1)
没有神奇的"不透明的旗帜"任何地方。 "不透明"这只是意味着对象中保存的数据从不对脚本可见。您仍然可以使用CryptoKey
实例执行某些操作 - 例如在这种情况下,将其存储在索引数据库中或通过postMessage()
发送到另一个上下文。
这与例如一个Blob
对象,其中所有所持有的数据可以直接通过对象上的属性进行检查,也可以通过FileReader
间接进行检查。
另一个不透明的例子是Response
对象作为跨源Fetch操作的结果,可以由Service Worker处理但身体无法处理被检查。
所以"有没有办法从JS告诉对象是否不透明?" - 这取决于。如果对象是CryptoKey
的实例,那么您知道存在隐藏数据,因此它是不透明的。如果一个对象是Blob
的实例,那么你知道有一种方法可以访问数据,即使你需要其他API来访问它,所以它不是不透明的。如果对象是Response
的实例,则它可能是不透明的,具体取决于源。