Javascript Web加密API:如何发现支持的算法?

Javascript Web加密API:如何发现支持的算法?,javascript,webcrypto-api,Javascript,Webcrypto Api,支持通过JavaScript使用浏览器的本机加密功能,例如可靠的随机数生成器或使用不同算法进行加密或签名的可能性 规范列出了一个作为实施者起点的规范,但添加了以下编辑说明: 注意:列出的所有算法都应被视为“风险特性”,除非实施者采用这些算法。将其包含在编辑草稿中反映了社区成员对其包含的请求,并作为一种练习被包含,以确保本规范中定义的API的健壮性 因此,算法列表和建议可能会在未来的修订中发生重大变化 据我所知,规范背后的想法是为加密提供一个接口,而不是写下特定的算法(这完全有道理!) 如何确定客

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

规范列出了一个作为实施者起点的规范,但添加了以下编辑说明:

注意:列出的所有算法都应被视为“风险特性”,除非实施者采用这些算法。将其包含在编辑草稿中反映了社区成员对其包含的请求,并作为一种练习被包含,以确保本规范中定义的API的健壮性

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

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

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

此规范使用内部对象[[supportedAlgorithms]]

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

在当前状态下发现可用算法的唯一可能性是捕捉微妙界面的

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


有什么提示或建议吗?我们也非常感谢与w3c邮件列表讨论相关的链接。

不计划支持算法发现接口

2012年,w3c工作组邮件列表详细讨论了这个问题,其中提出了一些问题,请参阅线程“”和“”

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

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

该问题再次与工作组进行了部分讨论,并在讨论期间,工作组决定通过使用配置文件“稍后解决该问题”。 规范中也提到了这一点:

特别是,我们希望创建一个“浏览器配置文件” Web浏览器的互操作算法


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

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

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