2017-10-16 659 views
0

我们已经构建了一个可嵌入第三方网页的JavaScript模块。当这个客户端模块被初始化时,它通过一个跨站请求在我们的Web应用程序中执行一个事务。需要多长时间才能破解HMAC sha256摘要私钥给定数据

该交易由外部uuid,电子邮件和一些其他元属性组成。此消息使用我们的合作伙伴的专用API密钥与HMAC sha256摘要签署。

红宝石例如:

data = { 
    uuid: "ABCAFAFDS", 
    email: "[email protected]", 
    meta: {} 
} 

private_key = "Qd9fe0y2ezqfae4Qj6At" 
signature = OpenSSL::HMAC.hexdigest(
    OpenSSL::Digest.new("sha256"), 
    private_key, 
    data.to_json 
) 

内的第三方网页,JavaScript客户端,然后用签名和数据初始化:

new Client(signature, data).execute();

最初,我们的计划是允许客户在我们的系统内创建部分/不完整事务,然后通过REST API请求后续请求以确认/完成事务。假设我们可以确保前端的安全,那么删除后端确认要求将是优先考虑的。

我们能否以这种方式使用签名消息来合理保护客户端代码?如果数据和签名的消息在客户端可用,那么考虑到上面的长度,对于坏的演员来说,暴力破解API私钥长度有多难?

+0

可能更适合http://security.stackexchange.com – deceze

回答

1

这些天大部分互联网流量都在客户端上签了令牌。所有的Gmail登录,Facebook登录等都这样做,所以它是相当标准的。我建议使用现有的标准(和第三方库),而不是推出自己的令牌。这将让您利用其他人在这方面的专业知识。

JWT(json web token)已经很常用,并且有许多库可以用于JWT的工作。有关更多信息,请参见https://jwt.io

+0

感谢布兰登,使用JWT与滚动我们自己的实现是一个很好的观点。尽管如此,还有一个问题。在JWT教程中,令牌在后端生成并发送到客户端。客户端看不到未签名的有效负载或标头。使用我们的模块,可以在UI(uuid,电子邮件,元属性等)中有效识别有效负载信息,因为我们直观地显示这些属性。这是否会破坏协议的安全性?鉴于他们对有效负载和头文件的了解,它是否会让黑客更容易猜测私钥? – Ben

+0

不,它本质上是一样的 - jwt令牌只是签名,没有加密。它们看起来只是因为令牌是base64编码而被混淆了。您可以使用客户端jwt库来解码令牌并获取用于显示目的的内容。请注意,jwt令牌支持多种签名算法 - 有对称和非对称算法,这意味着您甚至可以使用非对称算法,这将允许任何人(甚至客户端)使用公钥来验证令牌的真实性,而无需访问私钥。 – Brandon

+0

而且,显然,由于令牌没有加密,因此不要将任何数据放入应该对客户端保密的令牌 – Brandon

相关问题