我是密码学的初学者,最近我了解了RSA算法:简而言之,对此我的理解是:发件人需要接收者的公共密钥来将消息加密为密文,以便只有接收者才能将密文解密为原始消息,反之亦然。
[当我尝试了解网络和身份验证的实现时,我发现以下方式有点令人困惑:
例如:我正在通过JWT(Json Web令牌)实施,这里:
我知道我在这里想念什么,但不知道什么。
发件人使用私钥对消息进行加密,然后发送其公钥,而接收方使用发件人的公钥进行解密,反之亦然。
否,您不能使用私钥加密(出于保密目的;拥有公钥的任何人都可以解密。
现在这是RSA还是AES?因为该消息应使用接收者的公共密钥加密,以便接收者只能对其解密。
您正在寻找的是签名生成,它不同于加密。对于RSA,它使用加密哈希和不同的填充机制。唯一相似的是它使用了模幂。
但是这里发送者的公钥已发送,并且接收者可以通过该公钥解密消息。
好吧,如果您使用公钥执行模块化幂运算,那么您将获得输入到使用私钥进行模块化幂运算的值。它包含哈希值(以某种形式)。这是RSA签名生成和验证的基础。
这里还有另一个误解:公钥不能只是“发送”,它必须由进行验证的一方
信任。否则,您可能会收到发送错误的密钥的信息,并且会对任何人可能生成的签名进行验证。
如果这是正确的,则网络中任何可以获取密码和公钥的人都可以解密该消息,因为该密码是用同一公钥解密的。
正确,但我们不在乎。因为对消息保密不是目标。这是关于显示您有权访问私钥,以便您可以对某些
session specific
数据进行签名。它需要特定于会话,否则对手可以使用旧签名进行身份验证(所谓的重播攻击)。