hash - HTTP 请求的真实性和完整性

标签 hash http-post digital-signature integrity authenticity

我有一个 API 端点,外部网站可以在其中提交 POST 请求。
确保请求是 的最佳方法是什么?正品而且也不会被篡改,所以他们尊重的原则诚信 ?

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

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

同样,在我的服务器上散列请求并验证它就足够了吗?

最佳答案

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

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

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

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

    Similarly, would hashing the request and verifying it on my server be enough?



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

    关于hash - HTTP 请求的真实性和完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28142813/

    相关文章:

    java - 使用高级搜索运算符使用 Restful API 向搜索引擎发送查询

    java - 如何使用 HTTP POST 在没有用户代理交互的情况下发送 AuthnRequest?

    Java 访问 token PKCS11 未找到提供程序

    java - 在 Java Applet 中实现数字签名

    javascript - URL 更改不会重新加载文档 -> 如何检查哈希值?

    c# - 如何从文本文件创建 MD5 散列摘要?

    XML::Hash::LX - 将哈希转换为 xml:不是预期的输出

    android - HTTP POST 请求 ANDROID 4(在 2.3 中工作)?

    python - 使用 CA 发布的数字证书签署 PDF 文档的 Web 应用程序

    ruby-on-rails - 在 rails 中插入要散列的属性