使用项目的所有程序员都同意的一个密钥来加密 JWT 是不是更安全或没有必要?

Posted

技术标签:

【中文标题】使用项目的所有程序员都同意的一个密钥来加密 JWT 是不是更安全或没有必要?【英文标题】:Is it safer or unnecessary to encrypt a JWT with one key agreed upon by all programers of a project?使用项目的所有程序员都同意的一个密钥来加密 JWT 是否更安全或没有必要? 【发布时间】:2018-06-17 03:18:34 【问题描述】:

我目前在一个电子商务项目中工作,我正在设计一个 API 的服务器端(在 Laravel 5.5 上的 php 中),而我的两个同事正在设计 androidios 应用程序,它们将从中获取所有数据我这边。

敏感和非敏感数据的通信将完全通过此 API 完成,但是,由于我们所有人都相对缺乏经验,我们很难确定是否安全甚至有必要使用密钥加密我们所有的交换- 在开发过程中使用 JWT 进行编码并达成一致。

为了达成明确的共识,我已经四处寻找,但这个过程已经有点混乱,而且专家意见似乎在细节上存在分歧,以至于我完全无法理解后果。

任何“精通安全”的人都可以帮助我们解决以下问题吗?

1) 自己使用 JWT 安全(前提是我们使用“常识”)?即它是专业人士尊重的标准吗?

2) 将 JWT 用于处理支付信息的应用程序被认为是“良好做法”?

3) 在发送方加密 JWT 并在接收方解密是否更安全?还是我们只是在这里添加了一个额外的层,但在那里打开了一扇门?

4) 阅读 Laravel 5.5 文档,我看到他们提供了 Passport 插件,这对初学者来说是否可靠?

5) 最重要的是,是否存在有关通信安全的可靠信息来源,就像 w3c 保护“最佳实践”一样?

请随时更正问题本身。 谢谢。

【问题讨论】:

JWT 中没有加密。不要在payload中放入敏感的东西,JWT只是为了签署一个声明/授权。 加密后可以放敏感的东西吗? 是的,但是您需要与每个设备共享解密密钥。 您不需要加密 API 数据,也不需要将其全部放入 JWT 的负载中(不要忘记它增加了 33% 的大小,因此 RSA "hello world" 之后可能会变成 352+ 字节的负载base64)只需让 SSL 进行加密,您只需要确保未经身份验证的用户无法访问端点,JWT 自己,没有加密数据就可以做到。关于已知的秘密,它们只需要相同并不重要,如果您更改秘密,它只会让所有人退出。 【参考方案1】:

1) 自己使用 JWT 安全(前提是我们使用“常识”)?即它是专业人士尊重的标准吗?

You should avoid JWT。可以安全地使用它,但你最终会走 60% 的路来重新发明 PASETO,所以你不妨改用 PASETO。

2) 将 JWT 用于处理支付信息的应用程序被认为是“良好做法”?

如果您严格必须使用 JWT,您肯定希望您的 PCI-DSS 审核员检查您的 JWT 代码。

如果您想要一个已经过审核的 JWT 库以使您的 PCI-DSS 合规性更加顺畅,Luís Cobucci's JWT library 是一个不错的选择。 (举报是publicly accessible。)

3) 在发送方加密 JWT 并在接收方解密是否更安全?还是我们只是在这里添加了一个额外的层,但在那里打开了一扇门?

如果你的意思是通过 HTTPS,绝对是的。

否则,不要推出自己的加密货币。

4) 阅读 Laravel 5.5 文档,我看到他们提供了 Passport 插件,这对初学者来说是否可靠?

是的。

5) 最重要的是,是否存在有关通信安全的可靠信息来源,就像 w3c 保护“最佳实践”一样?

有一个最新的(截至 2018 年)guide to PHP security 也深入研究了许多加密安全主题。

【讨论】:

虽然我已经失去了看到这个答案的希望,但斯科特有条不紊地通过了。非常感谢你

以上是关于使用项目的所有程序员都同意的一个密钥来加密 JWT 是不是更安全或没有必要?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Storybook 使用项目的 CSS 变量

各种微服务中 JWT 的共享签名密钥

可用项目的 Django ListView 查询集

如何禁用标签栏项目以及如何更改禁用项目的颜色和透明度

JWT与Zuul

如何使用项目的其他值搜索 Vuetify 数据表