问题标签 [jwe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
63 浏览

security - 在 JWS 中使用自定义加密有什么缺陷/缺点?(编辑:JWS 是有效的 MAC 吗?)

所以我正在开发一种最终必须与一个或多个服务器通信的软件。我正在尝试为此通信的特定部分实施 Json Web 令牌(基本上不是用于身份验证,它们将主要是访问令牌)。

出于某些原因,我希望将敏感数据作为有效负载的一部分包含在内(不是高度敏感,更像是出于隐私原因最好不要显示的信息,但对应用程序完整性并不重要)。

在阅读了 JWE 规范并考虑到我必须这样做的可用时间之后,我想暂时放弃构建适当 JWE 的任务,并在创建 JWS 之前使用自定义函数来加密有效负载。然后,适当的 JWE 将延迟到软件的下一个版本。

完全可以避免吗?我可以将其用作临时解决方案吗?还是说我的沟通方式设计不好?

编辑 - 我更喜欢编辑这个主题,因为新问题与第一个问题密切相关,但更精确和具体:

我继续使用适当的安全规范和测试。既然我想出了似乎是一个很好的加密解决方案,并且阅读了很多关于这个主题的内容,我开始使用的方法似乎是有效的:很多地方都说加密没有涵盖内容完整性,因此消息必须通过 MAC(加密后)。

_所以,让我们以相反的顺序来回答最初的问题:既然我有一个正确加密的消息,然后需要对其进行 MAC,那么使用 HMAC 算法构建的 JWS 是否是有效的 MAC?还是将其称为 HMAC JWS 只是语言滥用?

0 投票
2 回答
11081 浏览

java - java - 当加密令牌以字符串形式存在时,如何在java中解密用JWE加密的JWT?

我有一个字符串格式的令牌,例如:

现在我想通过一些java库解密这个String,最终想要访问payload。到目前为止有人做过吗?

0 投票
1 回答
2674 浏览

json - 用于 JSON Web 加密的 mime 类型是什么

查看RFC 7515RFC 7516,我试图了解 JWE 的正确 mime 类型应该是什么。看起来 JWE 和 JWS 共享 JOSE 标头信息,JWS 将其 mime 类型定义为application/jose. JWE 没有明确的媒体类型信息。但是由于名称是“jose”并且都使用 JOSE 标头,我假设两者都应该使用相同的 mime 类型(也因为 JOSE 代表 ... 签名和加密)。

在这种情况下,如何区分签名和/或加密消息?按alg房产价值?还是通过enc财产的存在/价值?

总结一下:

  1. “application/jose”是用于 JWE 的 mime 类型吗?如果不是,那应该是什么?
  2. 如果是,如何可靠地区分 JWE 和 JWS 消息?
0 投票
2 回答
2421 浏览

java - 在 HTTP 连接中使用基于令牌的身份验证时如何防止重放攻击

使用基于令牌的身份验证(例如:JSON Web 身份验证)时,如何防止重放攻击并向我的应用程序添加另一层加密?

0 投票
0 回答
30 浏览

rest - 如何保护自己免受重播 + MiTM

让我们想象一下以下场景:

  • Bob 使用 HTTP/HTTPS 与 Alice 交谈
  • Bob 希望 Alice 向他发送一些数据,例如:/rest/getAllItems。+ 一些令牌认证
  • Eve 拦截数据包并将其发送给 Alice,甚至不知道它包含什么
  • Alice 验证请求令牌内容(签名等)并将响应发送给 Eve 而不是 Bob。

如何防止这种情况发生。

0 投票
1 回答
1151 浏览

jwt - 为什么客户端需要解密JWE?

如果我使用 JWE 发送加密的 JSON 消息,该消息将存储在客户端,用于授权,为什么客户端需要解密此消息?

客户端将 JWE 令牌附加到所有请求。服务器使用 JWE 令牌识别客户端并响应或拒绝请求。自始至终,只有服务器可以解密。

如果这个结构没有问题,那么最好的实现方式是什么?我应该使用非对称加密而不提供公钥(这在 JWE 规范中是否可行)?

沿着这些思路,确保 JWE 令牌没有被截获并且虽然没有被解密但附加到恶意服务器请求的最佳方法是什么,从而有效地允许攻击者冒充客户端?

另外,我还缺少其他安全问题吗?

0 投票
3 回答
4328 浏览

java - 在 Java 中实现 Diffie-Hellman 密钥交换

我正在尝试在 Java 中实现 Diffie-Hellman 密钥交换,但我很难理解规范:

根据 JWA (RFC 7518) 在 Direct Key Agreement 模式下使用曲线 P-256、dT 和 QC 作为本地机制完成 Diffie-Hellman 密钥交换过程,以生成由 Transaction 标识的一对 CEK(每个方向一个) ID。此版本规范支持的参数值为:

  • “alg”:ECDH-ES
  • “apv”:SDK 参考编号
  • “epk”:QC,JSON Web Key (JWK) 格式
  • {“kty”:“EC”“crv”:“P-256”}
  • 所有其他参数:不存在
  • CEK:“kty”:oct - 256 位

创建以下数据的 JSON 对象作为要签名的 JWS 负载:

{“MyPublicKey”:“QT”,“SDKPublicKey”:“QC”}

根据 JWS (RFC 7515) 使用 JWS 紧凑序列化生成完整 JSON 对象的数字签名。此版本规范支持的参数值为:

  • “alg”:PS256 或 ES256
  • “x5c”:X.5C v3:Cert(MyPb) 加上可选的链接证书

据我了解,ECDH 会生成一个密钥。在共享我的临时公钥 (QT) 后,SDK 会生成相同的密钥,因此我们以后可以交换使用相同密钥加密的 JWE 消息。

JSON {“MyPublicKey”: “QT”, “SDKPublicKey”:” QC”} 将被签名并发送,但我不明白我将如何使用apvepk ,因为这些标头参数用于JWE而不是第一个要共享的JWS 。

在同一规范中,他们谈论这些 JWE 消息,但他们没有这些 apv 和 epk 参数。

根据 JWE (RFC 7516) 使用与 SDK 相同的“enc”算法加密 JSON 对象,获得的 CEK 由“kid”和 JWE Compact Serialization 标识。此版本规范支持的参数值为:

  • “alg”:目录
  • “enc”:A128CBC-HS256 或 A128GCM
  • “孩子”:交易 ID
  • 所有其他参数:不存在

我还阅读了RFC 7518中的示例,在那里我可以看到正在使用的标头参数 apv 和 epk,但我不确定哪些标头参数是 JWE 还是 JWS?

任何关于如何使用 nimbus-jose-jwt 或任何其他 java 库来实现的想法都会非常有帮助。谢谢

0 投票
1 回答
1348 浏览

jwt - Java 库以 JWE JSON 序列化格式解析 JWT 令牌

哪些开源 Java 库可用于解析/解密 JWE JSON 序列化格式的 JWT 令牌,如下所示在此处输入图像描述

我在看 nimbus-jose ( https://connect2id.com/products/nimbus-jose-jwt/ ) 但我找不到任何相关的例子。我想使用一些开源库,它需要很少的编码,并且开箱即用地支持不同的加密算法。

0 投票
1 回答
541 浏览

javascript - 使用 EC 密钥在 node-jose (js) 和 jwcrypto (python) 之间进行互操作?

我正在努力在 jwcrypto 中使用相同的密钥生成与 node-jose 中等效的 JWE。目标是在 node-jose 中生成密钥并将 pubkey 导出到 jwcrypto 以加密有效负载,然后由 node-jose 使用并解密。

我的测试完全在 node-jose 工作正常:

但是,当我在 python 中执行相同操作时,node-jose 会生成不同的 JWE:

当 node-jose 尝试解密 my_jwe 时,它​​失败并显示“错误:找不到密钥”。奇怪的是(或者不是,这是我第一次使用 JWEs ......),两个加密结果是(见下面的例子)。我想我错过了如何让 jwcrypto 像 node-jose 一样不需要“标题”值,但是当我拉取这些值时它会抱怨。

node-jose 示例(垃圾数据):

jwcrypto(垃圾数据):

0 投票
1 回答
1060 浏览

encryption - 嵌套 JWS + JWE 与具有身份验证加密的 JWE

问题

我想在我的服务器(受信任的环境)上签名和加密(有效地混淆)一些信息(“令牌”)并将密文发送到客户端机器(不太受信任的环境)以由我的客户端读取和验证软件。这种类型的环境允许我在服务器上拥有一个用于非对称签名的私钥,但我不能在客户端“隐藏”一个用于对称签名的密钥。

备择方案

我选择使用 JWT 作为标准,使用Nimbus JOSE+JWT 库作为签名和加密的实现。Nimbus库为签名 + 加密提供了两个选项:将 JWS 嵌套到 JWE 或将 JWE 与经过身份验证的加密算法(A128CBC_HS256、A192CBC_HS384 或 A256CBC_HS512)一起使用。Nimbus 算法选择指南指出:

JOSE 中的加密始终经过身份验证,这意味着密文的完整性受到保护,不会被篡改。因此,经过身份验证的加密使得将 HMAC JWT 嵌套在 JSON Web 加密 (JWE) 中是多余的;仅使用 JWE 加密。

但是,AxxxCBC_HSxxx 加密方法仅使用对称密钥。此外,用 RSA JWE 算法替换直接 JWE 算法应该无济于事,因为滥用者可以自己生成 CEK(由加密密钥和 HMAC 密钥组成)并使用公钥对其进行加密。

问题

尽管引用了嵌套 JWT 的冗余,但我得出的结论是,就我而言,JWE+JWS 嵌套是唯一可行的方法。我对吗?