给定数据破解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。
我们构建了一个可以嵌入第三方网页的 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。