【问题标题】:Is payload integrity encryption important for API?有效载荷完整性加密对 API 重要吗?
【发布时间】:2019-04-17 00:00:43
【问题描述】:

我们是否需要对有效负载进行加密和签名以防止篡改并确保完整性?

假设我们在标头中有 JWT 不记名,并且 API 使用 HTTPS 保护

给出将发送到更改用户配置文件数据的 API 的有效负载示例。

{"name":"bob","age":10,"gender":"m"}

我们是否需要为已签名的有效负载执行 md5(有效负载 + 私钥)? 示例:

md5(namebobage10genderm_private_key)
md5 code = fdd5a4a41fc0ab84d4792fa8b08d8e17

新的有效载荷将是

{"name":"bob","age":10,"gender":"m","signed":"fdd5a4a41fc0ab84d4792fa8b08d8e17"}

服务器收到API调用后,也会对payload进行md5加密,并比较签名值以保证完整性。

请让我知道您对此的想法,我们真的需要这个吗?因为我们已经为 API 和 JWT 提供了 HTTPS 来验证调用 api 的用户。

编辑

这是相当主观的,api调用仍然容易受到中间人攻击,api调用可以在到达HTTPS之前通过代理被拦截。只要攻击者不知道算法,在拦截期间修改的任何数据都将在服务器端被拒绝,因为签名的有效载荷与有效载荷一起发送以在服务器端进行验证。

请赐教。谢谢

【问题讨论】:

  • 只需使用 SSL (HTTPS)。为什么还要考虑这种本土方案?
  • Https 确保完整性和隐私wikipedia.org/wiki/HTTPS
  • @JamesKPolk 因为有些事情是通过 GET 完成的,您不希望合法用户能够摆弄他们看到的参数以尝试获取其他用户的信息。多级安全性是一件好事。诸如 SSL 之类的东西阻止了第 3 方。消息/有效负载签名之类的东西可以保持数据健全

标签: php json api encryption md5


【解决方案1】:

负载完整性加密对 API 重要吗?

完整性和保密性是两个独立的属性。

加密提供机密性。一些加密模式还提供身份验证。根据某些细节,我们将这些称为authenticated encryptionIND-CCA3和/或AEAD

You want authenticated encryption.

我们是否需要为已签名的有效负载执行 md5(有效负载 + 私钥)?示例:

不要将 MD5 用于任何事情。它已经坏了很多年了。

服务器收到API调用后,也会对payload进行md5加密,并比较签名值以保证完整性。

MD5 isn't an encryption function。这是一个哈希函数。


对于这种不会让您的应用完全不安全的情况,最简单的答案是:Use PASETO instead of JWT,这样您就无需担心是否需要加密、签名或两者兼而有之。

v1.localv2.local 提供经过身份验证的加密。使用两者之一(v2 更好,v1 是为了兼容性)。您无需在 PASETO 之上做任何事情来确保它的安全,它已经提供了完整性保证。

延伸阅读:PASETO is a Secure Alternative to the JOSE Standards (JWT, etc.) (免责声明:我是作者。)

PASETO 并不排除对 HTTPS 的需求,但您已经表示您正在使用 HTTPS,所以,请继续这样做。

【讨论】:

    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 2012-04-12
    • 2016-11-03
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多