webcryptoexportable=false何时保护密钥免受自适应选择明文攻击



当攻击者在具有exportable=true的CryptoKey对象的页面上注入javascript时,他可以导出密钥并将字节发送到自己的服务器。

在exportable=false的情况下,攻击者不能直接发送字节,但可以将CryptoKey对象用作自适应已知明文攻击的预言机。

在什么情况下,攻击者可以恢复底层的秘密字节并将其发送到自己的服务器?也就是说,在哪种情况下使用不可导出的密钥有用?网络加密算法(AES-CBC、RSA-OAEP等(之间有区别吗?

注意:由于攻击者可以注入任意javascript,因此它控制整个api的使用:明文,对于使用IV的模式(例如AES-CBC(,它还控制IV。

回答最初的问题:

使用extractable: false,您不能简单地导出密钥,因为它本身是加密的。但是,如果你可以在安全的上下文中访问CryptoKey,你当然可以将其用作预言机。但也有一些注意事项,因为CryptoKey只为特定算法(例如ECDSA-p-521(生成,并被列入其功能的白名单(例如加密、解密…(。因此,如果您的密钥仅用于加密,则只能运行CPA,而不能运行CCA,反之亦然。

考虑到这一点,我们可以回答丰厚的细节:

如果您可以访问安全上下文(通过xss应该可以工作,mitm会更难,因为它通常会破坏https(,并获得该上下文中使用的cryptoKey,您可以将其传递给crypto.subtle.decrypt()等函数。不过,请记住,您只能将密钥用于其设计用途,但是的,decrypt()函数返回一个明文承诺,然后您可以将其转发到攻击服务器等,并将受感染的上下文用作预言机。

最新更新