我试图了解JWT是如何在我正在审核的代码库中实现的。我看了this和this
然而,似乎在这个代码库中,客户端具有私有AND公钥...它具有服务器的公钥和它自己的私钥(我假设服务器具有相应的私钥)。为什么这有必要?难道客户端不需要公钥,服务器只需要私钥吗?如果客户端正在加密消息,它是否可以使用公钥对其进行加密,而服务器只需要私钥来解密它?相反,它是否可以使用公钥解密来自服务器的加密消息?为什么客户需要两套公钥和私钥?
阅读:
要创建数字签名,签名软件(例如电子邮件程序)会创建要签名的电子数据的单向散列。然后,用户的私钥用于加密散列,返回散列数据唯一的值。加密的散列以及诸如散列算法之类的其他信息形成数字签名。数据中的任何更改(甚至是单个位)都会导致不同的哈希值。此属性允许其他人通过使用签名者的公钥来解密散列来验证数据的完整性。如果解密的散列与相同数据的第二个计算散列匹配,则证明数据自签名后未发生变化。
散列数据和加密数据之间的差异是什么?为什么你需要先哈希呢?散列数据是否已加密?
secon计算哈希来自哪里?如果解密器试图将公钥应用于加密数据......它如何知道它成功了?它与它相比有什么作用?该比较哈希来自哪里?
答案 0 :(得分:2)
JWT使用发件人的私钥进行签名(未加密)。 jWT内容可以使用JWE加密。
对称密钥用于签名和验证。使用非对称密钥对,邮件将使用私钥进行签名并与公众进行验证。
数字签名可保护邮件免受更改并识别发件人。非对称密钥允许接收方使用发送方的公钥来验证签名,而不会损害私钥
JWT签名可以在客户端或服务器端使用,具体取决于目的。例如,在身份验证流程
中客户端:API请求,服务器使用注册时上传的公钥验证签名
服务器端:在提交凭据后向最终用户发放令牌
在内部,数字签名涉及多个加密操作,消化消息,加密散列并添加算法标识符。但您不必担心这一点,因为所有编程语言都支持它
我尝试以一般方式解释JWT和数字签名,而不是回答您的具体问题。我可能已经离开了一些。请评论