Web Cryptography API:如何发现支持的算法?

时间:2015-02-10 10:57:18

标签: javascript webcryptoapi

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

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

  

注意:列出的所有算法都应被视为“风险特征”,禁止实施者采用它们。它们包含在编辑草案中反映了社区成员将其纳入的要求,并作为练习包含在内,以确保本规范中定义的API的稳健性。

     

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

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

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

  

该规范使用内部对象[[supportedAlgorithms]]。

     

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

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

从我的角度来看,发现是简单的程序流程,错误应作为例外处理,而不是实现逻辑。

任何提示或建议?还欢迎链接到正确的w3c-mailinglist讨论。

2 个答案:

答案 0 :(得分:3)

未计划支持算法发现界面。

2012年w3c工作组邮件列表详细讨论了这个问题,提出了一些问题,请参阅主题" RE: Strawman proposal for the low-level API - about the interoperable set of algo and algo naming"和" RE: Algorithm Discovery (was Re: Strawman proposal for the low-level API - about the interoperable set of algo and algo naming)"。

讨论的一个方面总结了发现机制的问题:

  

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

问题部分再次与"Bug 25985 - WebCrypto should be inter-operable"讨论,在a phone conference in July 2014期间,工作组决定"稍后解决问题"通过使用配置文件。 这也在说明书中提到:

  

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

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

答案 1 :(得分:0)

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

我们能够在初始化期间执行一系列简单测试,确定我们的算法是否得到支持。这与一些已知的无能力(window.msCrypto定义?IE11和SHA-1缺失,window.crypto.webkitSubtle定义?Webkit和AES-GCM缺失等)相结合,使我们至少早知道是否支持在那里,要么使用替代算法,替代实施或失败。