对名为"带有RSA加密的JSON Web令牌(JWT)"
的示例代码中应用的概念存有疑虑供参考,请参阅:http://connect2id.com/products/nimbus-jose-jwt/examples/jwt-with-rsa-encryption
示例代码提供基于公钥使用的RSAEncrypter
类,以及使用相反的私钥的RSADencrypter
类。
在更实际的视图中,我无法理解为什么JSON Web令牌是以这种方式生成的,因为加密信息通常会使用JWE格式发送到客户端。并行地,客户端从共享源(如数字证书存储区或JWK存储区)中提取公钥,然后从JWE数据中解密信息。
我的问题:为什么客户端使用私钥?为什么不使用Encrypter上的私钥和Decrypter类中的公钥?
欢迎澄清此RSA示例代码的概念方面。
答案 0 :(得分:3)
如示例中所述,加密的目的是保密:确保数据仅由预期接收方读取
公钥加密的一个基本安全方面是确保为预期的收件人加密数据,而不是为其他方加密,这可能会损害数据的机密性。
为方之间的身份验证而发布的JSON Web令牌未加密,使用私钥进行数字签名。另一方可以使用发布的公钥验证真实性和完整性。但内容并未隐藏。观察者可以阅读该消息但不能修改它。
加密是使用收件人的公钥完成的。只有匹配私钥的所有者才能解密JWT的内容。由于使用RSa密钥加密的数据的大小限制,在该示例中生成AES对称加密密钥。消息将使用AES密钥加密,并且此密钥使用RSA公钥加密并嵌入到JWT中。收件人将使用RSA私有密钥解密AES密钥