问题标签 [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 投票
1 回答
1137 浏览

php - 有没有办法对使用 Laravel Passport 创建的访问令牌进行非对称加密?

我正在构建一个由 3 个服务器组成的应用程序。第一个是我Authorization server的,第二个是我的Database server(API),最后是我的front-end server。我想使用非对称加密来加密我生成的访问令牌,Authorization server这样敏感数据就不会被泄露,并且我可以将它发送给我API并验证发出请求的用户实际上是他们声称的那个人。Laravel Passport 中是否有任何东西可以使这个实现成为可能,还是使用第三方库(如PASETOPHP JWT Framework )更好?

目前,当我向 Api 发出请求时

  1. Api 调用 以Authorization server使用访问令牌验证用户。
  2. 验证Auth server用户
  3. 如果用户验证,Api 会提供我们要求的资源,否则返回验证错误。

我想用非对称加密实现的是Auth server在每次请求 API 之前消除对我的调用,我读到我可以使用非对称加密来实现这一点。

0 投票
0 回答
1355 浏览

javascript - 在 Node.JS 中使用 node-jose 进行加密和解密

我正在尝试使用 Node.js 中的 node-jose 与 JWE 进行 JSON。以下是我正在做的步骤。

我有 Java 密钥库,通过它我导出了用于加密的证书和用于解密的私有证书。

用于加密

对于解密:

预期明文:{ "Param1":"param1" };

但结果是:[object Object]

如您所见,我尝试将 Buffer 数据转换为字符串,但仍未显示预期结果。任何人都可以在我错的地方帮助我。

谢谢

问候 MJ

0 投票
1 回答
1886 浏览

encryption - 如何为 JWE 实现生成内容加密密钥

我正在尝试在 Java 中学习和实现 JWE 以获取问题陈述。我试图了解如何使用某种算法(比如说 RSA-PKCS1_1.5)生成内容加密密钥。

我知道如何使用密钥生成器生成一对密钥,然后使用公钥进行加密,使用私钥进行解密。另外,我知道如何通过提供声明来创建简单的 JWT 令牌以及如何对其进行签名。我正在尝试按照以下步骤操作:

消息加密过程如下:

生成随机内容加密密钥 (CEK)。CEK 的长度必须至少等于所需加密密钥的长度,并且必须随机生成。

为收件人加密 CEK

生成随机 IV(如果算法需要)。

如果包含 zip 参数,则压缩明文。

将(压缩的)明文序列化为位串 M。

使用 CEK 和 IV 加密 M 以形成位串 C。

将 Encoded JWE Ciphertext 设置为等于 C 的 base64url 编码表示。

创建一个包含使用的加密参数的 JWE 标头。

Base64url 对 JWE 标头的 UTF-8 表示的字节进行编码,以创建编码的 JWE 标头。

三个编码部分合在一起就是加密的结果。

0 投票
2 回答
2359 浏览

node.js - 'node-jose' 库正在使用 'zlib' 库作为引发错误的依赖项。我该如何解决它,您是否遇到过同样的问题?

我正在尝试将node-jose库与 angular7 一起用于 JWE。该库使用zlib作为依赖项,并且在编译时会引发错误:

我打开了“zlib.js”文件,内容如下:

问题是所需的文件不存在。我检查了库的其余部分,整个库中没有这样的文件。

我搜索了整个互联网,没有人描述过和我一样的问题。有一些关于“node-jose”库的讨论,但这些问题都与“zlib”无关。

如果只有有人会说他们有同样的错误,我将非常感激。提前致谢!

0 投票
0 回答
643 浏览

openssl - 使用 Openssl 解密 JWE 的内容加密密钥

我有一个 JWE,我想用 openssl(和其他命令行)解密内容加密密钥(cek)

这里是我的 JWE:

所以现在我已经检索了这些元素:

临时公钥 (EPK):

私钥:

来自私钥和 EPK(base 64)的共享密钥:

base 64 中的密钥加密密钥 (kek):

解密的 JWE 标头:

现在我尝试解密 CEK: IFiUOn11TxTgnYWCA2rJLTYV3_r2n_qW 。但我有一些错误。

这里的命令:

base64 kek等于_jy5VPMvuVJTxTwtf1rhUKA==

和 encrypted-cek.64 包含IFiUOn11TxTgnYWCA2rJLTYV3/r2n/qW(我已将 cek 从 base64url 转换为 base64)

这里的错误:

我忘记了什么。

0 投票
0 回答
798 浏览

java - 为什么在 Java 和 Go 之间解密 JWE 时会出错

我无法在 Java 和 Go 中使用 Curve P521、ECDH-ES 和 A256GCM 对曲线 X、Y 和 D 使用相同的值进行加密/解密。当我尝试从 Go 中获取加密值并在 Java 中解密时失败,反之亦然,失败并显示:

Go: square/go-jose: 密码原语错误

Java:AES/GCM/NoPadding 解密失败:mac check in GCM 失败

为什么这不起作用?

!!!更新!!!我还添加了代码来解析 JWK 以在 Go 中创建我的 KeyPair。(我使用了java程序并将密钥对打印到json)。

我注意到,有时 Java 加密值可以在 Go 中解析,有时却不能。我认为 GCM 解密中的某些内容在 Go 中可能无法正常工作。

所示代码演示了在该语言中的工作。注释掉的字符串是从其他语言运行的结果

0 投票
1 回答
190 浏览

encryption - 使用 JOSE JWE 加密大文件

我需要以安全有效的方式加密一些 < 1GB 的较大文件。为此目的使用 JOSE JWE 库是个好主意吗?您还有其他选择可以推荐吗?

谢谢,西蒙

0 投票
1 回答
2638 浏览

java - 使用 jose4j 的 ECDH + JWE 加密/解密

我正在尝试在 Android (Java) 中与 JWE 一起实现 ECDH 加密/解密。
我发现jose4jNimbus JOSE库旨在满足我的所有需求,但似乎比我想象的更具挑战性。

如果有人熟悉,那就是 3D Secure 2.0 ......

在下面的规范中:

  • SDK =本地
  • DS = 目录服务器(另一端)

接下来是规格:

  • 给定:P(DS) - EC 公钥(以 PEM 格式提供,可以转换为 PublicKey 或 JWK)
  • 生成一个新的临时密钥对 (Q(SDK), d(SDK))
  • 根据 JWA (RFC7518) 在 Direct Key Agreement 模式下使用曲线 P-256、d(SDK) 和 P(DS) 进行 Diffie-Hellman 密钥交换过程以生成 CEK。此版本规范支持的参数值为:
    • “alg”:ECDH-ES
    • “apv”:目录服务器 ID
    • “epk”:P(DS),inJSONWebKey(JWK)格式{“kty”:“EC”,“crv”:“P-256”}
    • 所有其他参数:不存在
  • CEK:"kty":oct-256bits
  • 生成 128 位随机数据​​作为 IV
  • 使用 CEK 和 JWE 紧凑序列化根据 JWE (RFC7516) 加密 JSON 对象。此版本规范支持的参数值为:
    • “alg”:目录
    • “epk”:Q(SDK)作为{“kty”:“EC”,“crv”:“P-256”}
    • “enc”:“A128CBC-HS256”或“A128GCM”
    • 所有其他参数:不存在
  • 如果算法是 A128CBC-HS256,则使用完整的 CEK,或者如果算法是 A128GCM,则使用 CEK 的最左边 128 位。
  • 删除临时密钥对 (Q(SDK),d(SDK))
  • 将生成的 JWE 作为 SDK 加密数据提供给 3DS 服务器

如果有人已经实现了这个确切的规范并且可以分享代码,那就太棒了!!

在 jose4j 的示例中有一个使用 ECDH 创建 JWT 的示例:
https ://bitbucket.org/b_c/jose4j/wiki/JWT%20Examples (最后一个示例,标题为“生产和使用嵌套的(签名和加密的)JWT ”)。
但是这个例子并不是我所需要的。当我需要加密文本时,它会创建一个令牌。

从上面规范中的 "CEK:"kty":oct-256bits" 开始,我不明白该怎么做。

这是我使用 Nimbus lib 的代码(到目前为止):

这是雨云输出:

nimbus_encrypt: jwe = {"epk":{"kty":"EC","crv":"P-256","x":"AS0GRfAOWIDONXxaPR_4IuNHcDIUJPHbACjG5L7x-nQ","y":"xonFn1vRASKUTdCkFTwsl16LRmSe-bAF8EO4-mh1NYw"} ,"apv":"RjAwMDAwMDAwMQ","enc":"A128CBC-HS256","alg":"ECDH-ES"}

nimbus_encrypt: serializedJwe = eyJlcGsiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiJBUzBHUmZBT1dJRE9OWHhhUFJfNEl1TkhjRElVSlBIYkFDakc1TDd4LW5RIiwieSI6InhvbkZuMXZSQVNLVVRkQ2tGVHdzbDE2TFJtU2UtYkFGOEVPNC1taDFOWXcifSwiYXB2IjoiUmpBd01EQXdNREF3TVEiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiRUNESC1FUyJ9..Pi48b7uj3UilvVXKewFacg.0sx9OkHxxtZvkVm-IENRFw.bu5GvOAwcZxdxaDKWIBqwA

这是我的代码(到目前为止,使用@Brian-Campbell 的答案)使用 jose4j lib:

这是 jose4j 输出:

jose4j_encrypt: jwe = JsonWebEncryption{"alg":"ECDH-ES","enc":"A128CBC-HS256","apv":"RjAwMDAwMDAwMQ","epk":{"kty":"EC","x" :"prvyhexJXDWvPQmPA1xBjY8mkHEbrEiJ4Dr-7_5YfdQ","y":"fPjw8UdfzgkVTppPSN5o_wprItKLwecoia9yrWi38yo","crv":"P-256"}}

jose4j_encrypt: serializedJwe = eyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTEyOENCQy1IUzI1NiIsImFwdiI6IlJqQXdNREF3TURBd01RIiwiZXBrIjp7Imt0eSI6IkVDIiwieCI6InBydnloZXhKWERXdlBRbVBBMXhCalk4bWtIRWJyRWlKNERyLTdfNVlmZFEiLCJ5IjoiZlBqdzhVZGZ6Z2tWVHBwUFNONW9fd3BySXRLTHdlY29pYTl5cldpMzh5byIsImNydiI6IlAtMjU2In19..gxWYwFQSOqLk5HAgs7acdA.mUIHBiWpWSlQaEOJ_EZGYA.eiTe-88fw-Jfuhji_W0rtg

可以看出,最终结果中的“alg”标头是“ECDH-ES”,而不是“dir”。

如果我要实现通信的双方就足够了,但是有了这个规范,这里似乎缺少许多配置......

使用 jose4j 的代码更长,似乎更可配置,但我无法构建足够有价值的东西来发布在这里。

对我来说主要缺少的部分是如何从上面的规范生成 CEK。

谢谢你。

编辑
在上面添加了 jose4j 代码并添加了输出...

0 投票
1 回答
680 浏览

java - 如何从android上的字符串为JWE制作公钥?

我有一个公钥(RSA)作为字符串。我想用这个密钥来创建一个密码,假设未加密的密码是没有 qoutes 的“TEST TEST”。

如何做到这一点?nimbus-jose-jwt我的意思是我尝试了以下但坚持从我使用库的公钥字符串创建 Key 对象。但无法在以下代码中创建 RSA 公钥对象

我还使用了另一个名为org.bitbucket.b_c:jose4j但相同的库,我无法从我得到的公钥字符串成功创建公钥对象。

这是我使用但未能实现我想要的并且能够正确加密 TEST TEST 的代码片段。

公钥字符串如下

简而言之,我需要将从 iOS 代码获取的代码转换为 android 等效代码:

在此处输入图像描述 在此处输入图像描述

0 投票
3 回答
11537 浏览

swift - 来自公钥字符串的 Swift 4 中的 RSA 加密函数

我的最终目标是创建一个 JWE 字符串,给定 iOS 的公钥。

为了让自己更轻松,我已经非常紧迫地分解了我的步骤,我需要使用 RSA 加密从密钥和公钥字符串创建一个加密密钥。

我在堆栈溢出和互联网的其他地方尝试了很多东西。由于各种原因,他们只是没有成功。

我被一些Objective C代码指导:


我目前在这个功能点:

据此,我假设有一个 rsaEncrypt 函数可以接受密钥和公钥。

我有权访问的公钥如下所示:

在 Internet 上找到的示例将公钥作为 SecKey 类型处理。这是我执行加密的第一个障碍。

  1. 如果必须转换,如何将字符串转换为 SecKey?
  2. 我的 rsaEncrypt 函数应该做什么?

我希望在执行加密后输出是一个加密的密钥。

更新:另一种变体,发送的一个公钥也如下所示: