【问题标题】:Authenticity and Integrity of HTTP RequestsHTTP 请求的真实性和完整性
【发布时间】:2015-03-24 10:25:54
【问题描述】:

我有一个 API 端点,外部网站可以在其中提交 POST 请求。 确保请求真实并且不被篡改以尊重完整性原则的最佳方法是什么?

由于信用卡信息等数据没有价值,我不需要 HTTPS 集成。

我已经查看了 HMAC 和数字签名,我相信第二种选择会更好,但我不确定这是否是要走的路?

同样,对请求进行哈希处理并在我的服务器上对其进行验证就足够了吗?

【问题讨论】:

    标签: hash http-post digital-signature integrity authenticity


    【解决方案1】:

    HMAC 和数字签名都提供完整性和身份验证:

    • 完整性 - 因为它们都基于哈希。 HMAC 是基于散列的消息验证码。数字签名是对某些消息的散列加密。
    • 身份验证 - 因为 HMAC 使用对称密钥,而数字签名使用非对称私钥。密钥/私钥只能用于知道它的人 = 身份验证。在 HMAC 中检查接收方的密钥/私钥 - 接收方也知道秘密,这就是我们称之为对称的原因。在数字签名中检查接收方的密钥/私钥 - 接收方还可以获得可以在受信任的第三方上检查的公共证书。

    主要区别 - HMAC 消息第三方无法检查/验证,只有知道秘密的人才能验证/验证消息。数字签名消息具有公共证书,任何人都可以通过附加公钥解密消息,计算哈希,并在特殊受信方检查公钥来检查消息所有者

    结论 - 如果您不需要任何人能够检查某些消息是否真的属于发件人,请使用 HMAC。

    同样,对请求进行哈希处理并在我的服务器上对其进行验证就足够了吗?

    没有。中间人可以修改您的消息并附加已修改消息的哈希值。散列提供完整性,这意味着消息修改也会改变散列,但黑客不必担心散列相等,因为他只是用内容和散列完全替换消息! HMAC 中的一些秘密用法阻止了此类消息替换:中间人仍然可以更改消息,但他无法重新计算哈希,因为他不知道秘密。

    【讨论】:

    • 你能解释一下黑客如何用内容和哈希替换消息吗?我的意思是计算新消息的哈希值,黑客不需要共享密钥吗?
    • @saintlyzero,我相信 TC 在这里的意思是没有秘密的简单散列 - 因为秘密的使用是指 HMAC。而我关于替换消息和哈希的回应指的是这种情况(没有秘密)。
    猜你喜欢
    • 2010-12-30
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多