JWT如何实施公钥加密?

时间:2015-05-25 17:48:56

标签: public-key-encryption jwt auth0

这实际上分解为很多单独的问题来理解整个过程。

  1. 根据我的理解,JWT只是三个JSON对象,彼此分开编码到base64中。然后Base64字符串由句点分隔。这纯粹是为了“短信”的目的吗?

  2. 这些包括标题,“有效负载”和签名。任何截获它们的人都可以100%读取标题和有效负载。它们只是base64字符串,可以解码为JSON并读取。

  3. 然后MAGIC:服务器收到SIGNATURE,无法解码。签名实际上是标头,有效负载和秘密密钥的散列。因此服务器获取头,有效负载和ITS OWN密钥,并进行哈希。如果此哈希与消息附带的签名匹配,则该消息是可信的。如果签名不匹配,则消息无效。

  4. 我的所有这些问题?这里有两个独立的钥匙在哪里?似乎用于加密消息的密钥和用于解密消息的密钥是相同的。这是我的问题的根源 - 如果你没有回答,请帮助解决这个问题。

    除此之外,我想知道我是否正确理解了这个过程?此外,标准“同意公钥”在哪里,然后交易公钥/私钥的“混合”?我所看到的只是用于编码/解码的相同密钥。但协议何时发生?在.NET和Auth0 btw的上下文中查看,但整体q。

    我观看/阅读/使用的随机内容,如果有人有兴趣稍后看到这个问题:

    JWT摘要:https://scotch.io/tutorials/the-anatomy-of-a-json-web-token

    Public-key / Assymetric Cryptography:https://youtu.be/3QnD2c4Xovk

    哈希:http://www.webopedia.com/TERM/H/hashing.html

    Base64:http://en.wikipedia.org/wiki/Base64

2 个答案:

答案 0 :(得分:3)

首先,JSON对象签名和加密标准(JOSE)使用base64url编码而不是直接base64编码,略有不同。

  1. JWT标头和有效负载是JSON对象,但签名不是,这是一个base64url编码的二进制blob

  2. 任何截获它的人都可以使用整个JWT,它的所有3个部分

  3. 您正在描述对称密钥算法,其中发送方和接收方使用相同的共享密钥;这只是JWTS的一个选项,另一种选择是使用公钥/私钥对进行签名/验证/加密/解密

  4. 与所有密码一样,密钥协议需要在带外协议。

答案 1 :(得分:3)

  
      
  1. 然后MAGIC:服务器收到SIGNATURE,无法解码。签名实际上是标头,有效负载和AND的散列   一把密钥。因此服务器获取标头,有效负载和ITS OWN   密钥,并制作哈希。如果这个哈希匹配签名那么   来自消息,消息是可信的。如果签名DO   不匹配,邮件无效。
  2.   

这里没有魔力。 JWT支持四种众所周知的签名和MAC(消息认证码)结构:HMAC(对称算法),ECDSA,RSASSA-PKCS-v1.5和RSASSA-PSS(公钥算法) 。其中每个都可以与SHA-256,SHA-384或SHA-512加密摘要一起使用。另请参阅RFC 7518中的Cryptographic Algorithms for Digitial Signatures and MACs表 - JSON Web算法(JWA)。

  

我的所有这些问题?这里有两个独立的钥匙在哪里?它   似乎用于加密消息的密钥和用于的密钥   解密消息是一样的。这是我的问题的根源 - 如果   你没有别的回答,请帮忙。

不一定有两个单独的密钥 - 如果使用公钥算法,将使用服务器的私钥创建签名,并使用相应的公钥。但是,如果使用HMAC算法,则必须使用共享密钥密钥进行签名和验证。