成功解密 JWT 令牌能否保证消息的真实性并使签名变得无用?

Posted

技术标签:

【中文标题】成功解密 JWT 令牌能否保证消息的真实性并使签名变得无用?【英文标题】:Does successful decryption of a JWT token guarantee message authenticity and make signing useless? 【发布时间】:2016-12-24 23:21:26 【问题描述】:

在旧方案中,我们通过对称加密进行数字签名,而不加密整个令牌,现在首先决定 - 移动到非对称密钥,其次 - 不签名而是加密令牌。接收方成功解密后,当他恢复令牌的主要结构时,是否证明了令牌的真实性?这些保证是否比签名时弱?

【问题讨论】:

【参考方案1】:

加密仅保护您的有效负载不被非预期收件人读取。 它不能保护它不被恶意方修改。

见Digital certificates: What is the difference between encrypting and signing

【讨论】:

好吧,假设恶意方(用户)可以在接收方站点的用户面板中间接查看解密结果,并可以操纵传递给接收方的加密字符串。但他没有加密密钥。让我们甚至假设接收者密钥公开。但是,用户在解密时暴力破解加密字符串以获取另一个具有有用内容的 jwt 令牌的唯一方法是? @user3358363:在大多数非对称加密方案中,知道接收者的私有解密密钥就足以计算出公共加密密钥。因此,如果接收方的密钥泄露,无论如何都会失去所有安全性。即使不是这样,没有签名的加密方案(或对称加密的 MAC)通常也不能保证消息的完整性。 如果只依赖加密,不需要任何私钥来生成有效令牌,公钥就足够了。因此,不必执行蛮力。 “有用的内容”可以通过多种方式获得(客户端代码分析,针对服务器的测试......)【参考方案2】:

一般来说,不,成功解密并证明消息没有被伪造或篡改,除非消息的完整性已使用digital signature 或@987654322 单独验证@。那是因为基本上所有的加密方案在某种程度上都是malleable。唯一重要的例外是 authenticated encryption 方案,它包含签名或消息验证码作为加密方案本身的一部分。

特别是,asymmetric encryption 方案通常甚至不尝试提供任何消息完整性保证,因为它们假设任何人都可以使用公钥创建有效消息。为了证明消息不是由攻击者发送(或修改)的,还需要对其进行签名。

【讨论】:

以上是关于成功解密 JWT 令牌能否保证消息的真实性并使签名变得无用?的主要内容,如果未能解决你的问题,请参考以下文章

解密/验证 Firebase 令牌

tymon/jwt-auth Laravel:无法验证令牌签名

使用“Paseto Token”生成的“token”能否像“JWT Token”一样进行解密和查看?

为啥 JSON Web Token (JWT) 在不知道密钥的情况下解密

Spring JWT 签名验证失败

密码技术