PKC 中的数据完整性

信息安全 公钥基础设施 正直
2021-08-16 00:37:35

这是一个简单的问题,但却让我非常困惑。当您拥有 PKC 时,任何人都可以访问公钥。因此,这是否意味着任何人都可以加密数据?我的问题基本上是,如果你有这样一个方案,其中公钥用于加密某些指令,接收者最终可以解密流氓指令,不是吗?在这种情况下,接收者需要在解密消息时进行一些安全检查。

看起来 PKC 的目的纯粹是消息本身的安全性,而不是数据的实际完整性。

2个回答

尽管您写的所有内容在技术上都是正确的,但您的担忧是错误的。了解 PKI 的棘手部分是了解如何获得每种类型的保护。

如果发件人想要确保邮件只能由预期的收件人阅读,则发件人使用收件人的公钥。通过这种方式,没有其他人可以解密消息,因为免费的私钥是秘密的,并且发送者已经获得了机密性。

如果发件人还可以通过对消息进行散列来向收件人提供消息是由特定发件人创建的(不可否认性)并且自发件人创建它以来未被篡改(完整性)的信心,则使用加密散列发件人的私钥并将加密的哈希附加到加密的消息中。由于可以使用发送者的公钥来解密散列,因此接收者可以解密它并根据消息确认散列。加密的哈希被称为数字签名,因为它将发送者与消息联系起来。

[注意:消息和哈希没有使用相同甚至相关的密钥进行加密。消息使用收件人的公钥加密,而哈希使用发件人的私钥加密。]

使用时间戳服务器可以加强完整性和不可否认性。这是一个鲜为人知但非常有价值的步骤,发送者将哈希发送到受信任的服务器(通常是第三方商业服务),该服务器使用哈希和使用其私钥加密的时间戳进行回复。然后,发送者对该响应进行加密并将其作为他的签名发送。

通过所有这些步骤,收件人知道:

  1. 除发件人外,没有人看到内容;
  2. 只有发件人可以发送消息;
  3. 消息自发件人签名后未更改
  4. 当发件人签名时。

所有这些都假设收件人和发件人都维护了他们的私钥的机密性。有了这个假设,接收者就不能否认已经发送了消息,并且如果有时间戳的话,它是在时间戳指示的时间发送的。

是的,任何人都可以使用公钥进行加密,但在这种情况下使用密钥不是为了不可否认,即证明是谁发送的,而只是确保只有特定的接收者可以解码和读取纯文本,即任何拦截器消息无法阅读。这是保密部分。

为了确保接收者可以信任发送者,发送者需要以某种方式对加密文件进行签名,即使用某种系统向接收者证明文件是由一个人发送的,并且发送者可以被“证明”。在公钥系统中,这是通过发送者对他们加密的文件进行散列,然后用他们的私钥加密该散列来完成的。然后接收者使用签名者/发送者的公钥来解密加密的散列,并将其与他们从解密文件中生成的散列进行比较,并且,因为只有发送者可以创建该散列,所以接收者毫无疑问地知道发件人就是他们所说的那个人。这是完整性部分。