标签: jwe

JOSE、JWA、JWE、JWK、JWS 和 JWT 有什么区别?

JOSE、JWA、JWE、JWK、JWS 和 JWT 之间有什么区别?它们之间有何关系?

jwt jwe jwk jose

21
推荐指数
1
解决办法
9472
查看次数

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

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

根据JWA(RFC 7518)在直接密钥协商模式下使用曲线P-256,dT和QC完成Diffie-Hellman密钥交换过程作为本地机制,以生成一对CEK(每个方向一个),这些CEK由Transaction标识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 Compact Serialization根据JWS(RFC 7515)生成完整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":dir
  • "enc":A128CBC-HS256或A128GCM
  • "kid":交易ID
  • 所有其他参数:不存在

我还阅读了RFC 7518中的示例,其中我可以看到标题params apv和epk正在使用但是我不确定哪个标题参数,JWE或JWS?

关于如何使用nimbus-jose-jwt或任何其他java库实现这一点的任何想法都会非常有用.谢谢

java cryptography jwe ecdh

17
推荐指数
1
解决办法
2058
查看次数

在Node.js中实现JSON Web加密

我正在寻找一种在Node.js服务中使用JSON Web加密(JWE)的方法.然而,我只是设法找到相关标准JWS的实现.但是有几个其他语言的库,例如jose4j.

有没有人在Javascript中成功实现JWE?我担心我会使用较低级别的原语来实现规范.有更好的方法吗?

javascript encryption cryptography node.js jwe

9
推荐指数
1
解决办法
4266
查看次数

JWT在python中加密有效负载?(JWE)

根据RFC 7516,应该可以加密有效载荷/声明,称为JWE.

有没有支持它的python库?

我已经检查了PyJWT,python-jose和jwcrypto,但他们都只是用HS256(JWS)签名的例子.

对不起,如果这是非常明显的,但是当谈到涉及加密的事情时,我会格外谨慎.

python jwt jwe pyjwt python-jose

7
推荐指数
1
解决办法
4401
查看次数

如何在 Angular 中解码 JWE 令牌

我有这个问题,我通过这种方式使用 EncryptingCredentials 在 .net 核心中创建了一个 JWE:

var key = Encoding.ASCII.GetBytes(Configuration["Core:JwtSecret"]);
var encryptionkey = Encoding.ASCII.GetBytes(Configuration["Core:JwtEncrype"]);

var tokenDescriptor = new SecurityTokenDescriptor
{
    Subject = subject,
    Expires = DateTime.UtcNow.AddDays(Convert.ToInt32(Host.Config["Core:JwtDays"])),
    SigningCredentials =
        new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature),
    EncryptingCredentials =
        new EncryptingCredentials(new SymmetricSecurityKey(encryptionkey), SecurityAlgorithms.Aes128KW, SecurityAlgorithms.Aes128CbcHmacSha256)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
user.Token = tokenHandler.WriteToken(token);
Run Code Online (Sandbox Code Playgroud)

如何使用 angular 读取令牌的数据?

c# jwt jwe .net-core angular

7
推荐指数
1
解决办法
435
查看次数

验证使用JSON Web加密(JWE)加密的安全令牌的颁发者?

我一直在阅读JSON Web加密(JWE)规范,最新的草案是08,因为我们正在考虑在我们的身份验证服务器中支持JSON Web令牌(JWT).

使用它定义的非对称加密方法,使用收件人公钥加密对称密钥(内容主密钥).这是有道理的,这样只有收件人才能解密它,并确保令牌是为他们准备的.

通常情况下我还希望也看到一些证明令牌是谁,例如使用发行人可使用其公钥来验证私钥创建的签名.但是,签名似乎也来自内容主密钥或收件人的公钥,而没有提及发行者的私钥.

如果没有这个,我觉得 - 只要知道预期的令牌格式是已知的 - 拥有收件人公钥的任何人(即任何人)都可以生成有效令牌; 不只是受信任的身份验证服务器

我不是密码学方面的专家(远非它)所以我确定我在这里遗漏了一些东西.收件人如何验证非对称加密令牌是否来自受信任的颁发者?

鉴于JSON Web签名(JWS)规范确实定义了使用发行者私钥并且可以使用其公钥进行验证的签名,我想知道JWE令牌的有效负载是否应该是JWS令牌?

security encryption jwt jwe

6
推荐指数
1
解决办法
2649
查看次数

用于 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 消息?

json rfc mime-types jwe

6
推荐指数
1
解决办法
4374
查看次数

如何为 JWE 令牌添加过期时间?

我正在使用Jose库来创建 JWE。我已经成功地创建并解析了 JWE。JWT 具有expiat 等字段,有助于在一段时间后使令牌失效。

如何在 JWE 上设置过期时间?

这是我尝试过的,没有exp:

package main

import (
    jose "gopkg.in/square/go-jose.v2"
)

// len(key) is 32
func CreateJWE(value, key string)(string, error){
    encrypter, err := jose.NewEncrypter(jose.A256GCM, jose.Recipient{Algorithm: jose.A256GCMKW, Key: []byte(key)}, nil)
    if err != nil {
        return "", err
    }
    object, err := encrypter.Encrypt([]byte(value)])
    if err != nil {
        return "", err
    }
    return object.FullSerialize(), nil
}

func ParseJWE(jwe, key string)(string, error){
    object, err := jose.ParseEncrypted(jwe)
    if err != nil { …
Run Code Online (Sandbox Code Playgroud)

go jwe

6
推荐指数
1
解决办法
1319
查看次数

.NET Core JWE:没有“cty”标头

我使用以下代码来发行我的 JWE:

var signCreds = new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration["Jwt:SigningKey"])), SecurityAlgorithms.HmacSha256);
var encryptionCreds = new EncryptingCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration["Jwt:Encryptionkey"])), SecurityAlgorithms.Aes128KW, SecurityAlgorithms.Aes128CbcHmacSha256);

var handler = new JwtSecurityTokenHandler();


var jwtSecurityToken = handler.CreateJwtSecurityToken(
  Configuration["Jwt:Issuer"],
  Configuration["Jwt:Audience"],
  new ClaimsIdentity(claims),
  DateTime.UtcNow,
  expiresIn,
  DateTime.UtcNow,
  signCreds,
  encryptionCreds);
Run Code Online (Sandbox Code Playgroud)

但它没有指定令牌的“cty”标头 - 仅指定 alg、enc 和typ。如果我理解正确,则必须为加密的 JWT 设置标头,因此由于标头缺失,我在解析 golang 中的令牌时遇到问题。

我还尝试了以下几种方式来发行JWE:

var signCreds = new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration["Jwt:SigningKey"])), SecurityAlgorithms.HmacSha256);
var encryptionCreds = new EncryptingCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration["Jwt:Encryptionkey"])), SecurityAlgorithms.Aes128KW, SecurityAlgorithms.Aes128CbcHmacSha256);

var handler = new JwtSecurityTokenHandler();

var tokenDescriptor1 = new SecurityTokenDescriptor
  {
     Audience = "you",
     Issuer = "me",
     Subject = new …
Run Code Online (Sandbox Code Playgroud)

.net c# jwt bearer-token jwe

6
推荐指数
1
解决办法
1118
查看次数

如何使用 node-jose 生成加密的 JWE

我正在使用 node-jose v0.11.0 ( https://www.npmjs.com/package/node-jose ) 进行 JWK 和 JWE 操作。我有一个 JWK 格式的 RSA 密钥,我可以将其加载到 JWK 密钥存储中并再次提取。但是,当我尝试加密任何内容时,我会遇到“错误 2”、“不支持的算法”。RSA 怎么可能是不受支持的算法?

import * as jose from "node-jose";

const webkey = {
        "keys": [
            {
                "kty": "RSA",
                "e": "AQAB",
                "kid": "a024254d-0321-459f-9530-93020ce9d54a",
                "key_ops": [
                    "encrypt"
                ],
                "n": "jkHgYN98dlR2w7NX-gekCWaCdbxs7X4XXh52DVQrK--krwUYqRbBIUEw1bV8KX0ox6TLt-e6wpYsYYFUItSd5ySqohHRMq1IhyE2zpEC95BA9V7VrFUYnczf1bd5c-aR079aoz5JPXfqx01TzNfxWBb04SlRjsmJeY1v6JrDUI5U0FSOmnJTb3tSS6Szrvi_qOyViYp4v9V2_OVYy45kF_LQQy-pr-kP4gapXL235cieeTW6UvkhzaPT2D-JKyzVjjjgnfRXr8Ox9I9c4wpef2-5nPPeafB5EnOMpJE11KzO_8xxiTGUywPPLQagBvY35gkhQbYS2dv3NGIVSLZHFw"
            }
        ]
    };
    console.log("webkey", webkey);

    //generate key store from public JWK
    jose.JWK.asKeyStore(webkey)
        .then((result) => {
            console.log("Key Store", JSON.stringify(result.toJSON()));
            let keyStore = result;

            //get the key to encrypt
            const encryptionKey: jose.JWK.Key = keyStore.get(webkey.keys[0].kid);
            const output = jose.util.base64url.encode("Hello …
Run Code Online (Sandbox Code Playgroud)

encryption node.js jwt jwe jwk

5
推荐指数
1
解决办法
4977
查看次数