我对非对称公钥加密的理解(尽管有限)是,公钥旨在与所有人共享,而私钥则保持私密。
假设我将本地计算机的公钥存储在远程 Web 服务器上,而我发送到该服务器的加密信息(使用我的私钥)被拥有我的公钥的另一方拦截。这是否意味着他们也可以解密我的加密信息?
如果是,这是否意味着我应该只与一方(在本例中为服务器)共享公钥,这违背了我对公钥用途的理解?我可以在本地计算机上为不同的应用程序设置不同的密钥对吗?
答案1
您不会向服务器发送使用私钥加密的信息。当您与服务器建立安全连接时,服务器上的软件会生成一个新的对称加密密钥,使用您的公钥对其进行加密,然后将其发送给您。然后,您使用私钥对其进行解密,并使用该对称加密密钥对发送到服务器的数据进行加密。除了安全性方面之外,公钥/私钥加密对 CPU 的占用过大,因此无法在所有数据传输中使用——它通常仅用于加密其他加密密钥或数字签名。
答案2
有三种非常使用公钥系统可以做不同的事情:
发送私人数据:为此,您不使用您的公钥,而是使用目标的公钥。因此,只能使用他们的私钥解密数据。
对公共数据进行签名:如果你用私钥加密某些内容,任何人(用你的公钥)都可以解密并读取它,但他们知道是您写的,并且未被修改。实际上,整条消息并未加密,只有用作签名的校验和。
建立私人频道:这个比较复杂,最常见的方法是Diffie-Hellman 密钥交换协议。这种简短的交换允许双方生成一个共同的秘密,即使有人截获了通信,如果他没有私钥之一,他也不会获得该共享秘密。然后,共享秘密用于加密其余通信。
我想你已经读过前两种情况的描述,但你的问题(和Mike Scott 的回答) 似乎是第三个。
答案3
使用公钥,您可以加密并发送给私钥持有者进行解密,但不能使用公钥解密。
一台机器上可以有许多不同的密钥对。
答案4
SSH 使用公钥的唯一用途是确定相应私钥持有者的身份。使用 SSH 公钥唯一能做的事情就是确定合作身份验证代理是否持有相应的私钥。