WebCrypto API引入了不可导出私钥的概念,可以导出到 IndexDB 但不能导出到 LocalStorage 或通过网络。这在 Charles Engleke 的博客“在浏览器中保存加密密钥”中有很好的解释。
但是这些对象实际上是如何工作的呢?有没有办法从 JS 中判断一个对象是否不透明?我无法找到有关此的任何信息。
WebCrypto API引入了不可导出私钥的概念,可以导出到 IndexDB 但不能导出到 LocalStorage 或通过网络。这在 Charles Engleke 的博客“在浏览器中保存加密密钥”中有很好的解释。
但是这些对象实际上是如何工作的呢?有没有办法从 JS 中判断一个对象是否不透明?我无法找到有关此的任何信息。
任何地方都没有神奇的“不透明标志”。这里的“不透明”仅表示对象中保存的数据对脚本永远不可见。您仍然可以对CryptoKey
实例执行一些操作 - 例如,在这种情况下,将其存储在索引数据库中或通过postMessage()
.
这与例如可以通过Blob
对象上的属性直接检查或通过FileReader
.
另一个不透明的例子是Response
作为跨域Fetch操作的结果的对象,它可以由Service Worker处理,但无法检查主体。
那么“有没有办法从 JS 中判断一个对象是否不透明?” - 这取决于。如果一个对象是一个实例,CryptoKey
那么你就知道有隐藏数据,所以它是不透明的。如果一个对象是一个实例,Blob
那么你就知道有一种方法可以访问数据,即使你需要其他 API 来访问它,所以它不是不透明的。如果一个对象是它的一个实例,Response
它可能是不透明的,这取决于源。