WebCryptoAPI 与 WebAssembly 加密模块

WebCryptoAPI vs WebAssembly Encryption module

WebCrypto API 的主要优点之一是它 much faster than JS crypto libraries 。既然 WebAssembly 已经存在,那么高效 C++ 实现的 WASM 模块是否会优于 WebCrypto 的 AES?

即使 WebAssembly 实现可以胜过 WebCrypto,我也强烈建议不要使用您自己的实现。 WebCrypto 拥有您在使用 WebAssembly 时根本不具备的平台知识,这意味着该实现可以使其算法使用 ISA-specific 指令,并确保您的加密不会泄露秘密。今天的 WebAssembly 根本不可能做到这一点。

您可能会想 "the JIT knows the platform, and could pattern-match my crypto code to Make It Do The Right Thing",但此时它还不如识别您正在调用 WebCrypto 并使调用速度更快。然后,您运送的代码更少。

这里是a paper which shows secret extraction when not using WebCrypto "Drive-by Key-Extraction Cache Attacks from Portable Code"

引用论文:

the only secure way to perform cryptographic operations in JavaScript is to delegate them to the browser so that they can be executed using a native code implementation. Indeed, modern Browsers are equipped with WebCrypto API [70] that allows JavaScript to execute some cryptographic operations

这适用于 WebAssembly 以及 JavaScript。

我同意 JF Bastien 的观点,基于 WASM 的加密还有许多其他风险,因此出于这个原因,您通常最好使用 WebCrypto。此外,我看到的 to-date、none 性能基准显示 WASM 实现的加密算法在任何地方的执行速度都接近 WebCrypto。大多数 WebCrypto 库都基于平台加密,其中已经包含针对常见算法的高度优化的 ASM。