2

WebCrypto API引入了不可导出私钥的概念,可以导出到 IndexDB 但不能导出到 LocalStorage 或通过网络。这在 Charles Engleke 的博客“在浏览器中保存加密密钥”中有很好的解释。

但是这些对象实际上是如何工作的呢?有没有办法从 JS 中判断一个对象是否不透明?我无法找到有关此的任何信息。

4

1 回答 1

1

任何地方都没有神奇的“不透明标志”。这里的“不透明”仅表示对象中保存的数据对脚本永远不可见。您仍然可以对CryptoKey实例执行一些操作 - 例如,在这种情况下,将其存储在索引数据库中或通过postMessage().

这与例如可以通过Blob对象上属性直接检查或通过FileReader.

另一个不透明的例子是Response作为跨域Fetch操作的结果的对象,它可以由Service Worker处理,但无法检查主体。

那么“有没有办法从 JS 中判断一个对象是否不透明?” - 这取决于。如果一个对象是一个实例,CryptoKey那么你就知道有隐藏数据,所以它是不透明的。如果一个对象是一个实例,Blob那么你就知道有一种方法可以访问数据,即使你需要其他 API 来访问它,所以它不是不透明的。如果一个对象是它的一个实例,Response它可能是不透明的,这取决于源。

于 2016-02-16T23:43:49.133 回答