首先我们先介绍一下在 UniPass 中用到的几个互联网密码学基础设施:SubtleCrypto、WebAuthn 以及电子邮件与 DKIM。 SubtleCrypto SubtleCrypto 就是原来的 Web Crypto API,这是一个相对比较成熟且存在时间较长的基础设施,是 W3C 的标准。 UniPass 将 SubtleCrypto 和 WebAuthn 这两个密码学基础设施结合起来,相互配合,相互弥补。 UniPass 使用 SubtleCrypto 基础设施,用户可以直接在网页端获取原生级的安全性,至少是浏览器底层保证的安全性。
TurboSHAKE 和 KangarooTwelve Web Cryptography 算法 • 为 addon 访问 OpenSSL 上下文增加 crypto::GetSSLCtx API • 在 SubtleCrypto fs • 修复 cpSync 处理非 ASCII 字符的问题 13. inspector • 增加 Target.getTargets • 提取 TargetManager 14. lib • 在 SubtleCrypto 中优先使用 primordials • 让 SubtleCrypto.supports 变为可枚举 15. module • 修复从 ESM 导入的被 Mock 的 CJS 模块覆盖率统计问题 16.
globalThis.crypto.subtle 新增算法如 AES-OCB、ChaCha20-Poly1305、ML-DSA、ML-KEM、SHA-3 和 SHAKE,以及方法如 subtle.getPublicKey() 和 SubtleCrypto.supports
20.12.2 使用 SubtleCrypto 对象 Web Cryptography API 重头特性都暴露在了 SubtleCrypto 对象上,可以通过 window.crypto.subtle 访问: console.log(crypto.subtle); // SubtleCrypto {} 这个对象包含一组方法,用于执行常见的密码学功能,如加密、散列、签名和生成密钥。 因为所有密码学操作都在原始二进制数据上执行,所以 SubtleCrypto 的每个方法都要用到 ArrayBuffer 和 ArrayBufferView 类型。 SubtleCrypto 对象使用 CryptoKey 类的实例来生成密钥。CryptoKey 类支持多种加密算法,允许控制密钥抽取和使用。 注意 CryptoKey 支持很多算法,但其中只有部分算法能够用于 SubtleCrypto 的方法。
这里主要会用到两个 API: SubtleCrypto.generateKey() SubtleCrypto.exportKey() 文档枯燥,这里直接划出重点。
feature 经过上面的探索,我们再回过来看看一些比较 modern 的 browser feature 的支持程度: browser fature iOS Chrome Web Worker 5 4 SubtleCrypto
异步非阻塞架构:通过SubtleCrypto接口实现硬件加速加密。加密操作在安全线程执行,不阻塞主线程。