给定数据破解HMAC sha256摘要私钥需要多长时间

How long to crack HMAC sha256 digest private key given data

我们构建了一个可以嵌入第三方网页的 javascript 模块。初始化此客户端模块时,它会通过跨站点请求在我们的 Web 应用程序中执行事务。

交易由外部 uuid、电子邮件和一些额外的元属性组成。此消息使用我们合作伙伴的私钥 API 使用 HMAC sha256 摘要进行签名。

Ruby 示例:

data = {
  uuid: "ABCAFAFDS",
  email: "email@gmail.com",
  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 私钥长度会有多难,给定上面的长度?

最近大多数互联网流量都在客户端上签署了令牌。你所有的 gmail 登录、facebook 登录等都是这样做的,所以这是相当标准的。不过,我建议使用现有标准(和第 3 方库)而不是推出自己的令牌。这将使您能够利用其他人在该领域的专业知识。

JWT(json 网络令牌)很常用,有许多库可用于处理 JWT。有关详细信息,请参阅 https://jwt.io