网络加密API:如何发现支持的算法

Web Cryptography API: Howto discover supported algorithms?

本文关键字:发现 支持 算法 API 加密 何发现 网络      更新时间:2023-09-26

Web Cryptography API支持通过JavaScript使用浏览器的原生加密功能,例如可靠的随机数生成器或使用不同算法进行加密或签名的可能性。

该规范列出了算法的概述,作为实现者的起点,但添加了以下编辑注释:

注意:列出的所有算法都应被视为";风险特征";,除非实现者采用它们。将其纳入编辑草案反映了社区成员对其纳入的请求,并作为确保本规范中定义的API的健壮性的练习纳入。

因此,算法列表和建议可能会在未来的修订中发生重大更改。

据我所知,规范背后的想法是为密码学提供一个接口,而不是写下特定的算法(这完全有意义!)。

如何确定客户端是否支持特定的算法?隐藏实现细节是一种很好的做法,但由于算法必须有一个所谓的可识别的算法名称,我不明白你为什么不想公开注册的算法。仍然没有指定接口,您注册算法的对象描述如下:

本规范使用了一个内部对象[[supportedAlgorithms]]。

此内部对象不向应用程序公开。

在当前状态下发现可用算法的唯一可能性是捕获微妙接口的NotSupportedError

在我看来,发现是简单的程序流,错误应该作为异常处理,而不是实现逻辑。

有什么提示或建议吗?链接到适当的w3c邮件列表讨论也很感激。

未计划支持算法发现接口。

该问题在2012年的w3c工作组邮件列表中进行了详细讨论,其中提出了一些问题,请参阅Threads"RE:Strawman针对低级API的建议-关于算法和算法命名的互操作集"answers"RE:算法发现(RE:StrawmanProposal针对低级API的建议-有关算法和算法名称的互操作集合)"。

讨论的一点总结了发现机制的问题:

(1) 当我阅读各种附录时,发现算法而不是可能被允许的参数的排列,或者支持,因此算法的发现可能是成功的,但是可能仍然失败,因此发现的额外努力是开销和额外的代码路径

在2014年7月的一次电话会议上,工作组决定通过使用配置文件"稍后解决问题"。规范中也提到了这一点:

特别是,我们希望创建一个"浏览器配置文件"用于Web浏览器的可互操作算法。

其想法是创建配置文件,例如传统的网络浏览器、智能电视等。如果存在特定的配置文件,则必须支持某些算法。这将在未来的测试阶段后决定。

我不确定您的实现需求是什么,也不确定您在运行时需要了解支持的算法,但我在一个特定的项目中使用了WebCrypto API,其中预先知道了所需的算法。

我们能够在初始化期间执行一系列简单的测试,以确定我们的算法是否得到支持。这一点,再加上一些已知的不可用性(window.msCrypto定义的?IE11和SHA-1缺失,window.crypto.webkitSubtle定义的?Webkit和AES-GCM缺失等),使我们至少能够尽早知道是否存在支持,并使用替代算法、替代实现或失败。