使用 GnuPG 的 OpenPGP 加密/解密过程

信息安全 加密 验证 电子签名 pgp
2021-08-18 09:51:56

我想知道如果我的数据库被黑客入侵,我的加密方法是否可以确保我的数据的安全性以及我正在解密的数据的真实性。我正在使用 GnuPG 的 OpenPGP 加密标准实现。

我有一个位于“服务器 A”上的 Web 应用程序,用户可以通过表单提交信息。当他们提交表单时,会发生以下加密过程:

加密 - 服务器 A

  1. 表单数据使用服务器 B 的公钥加密
  2. 表单数据使用服务器 A 的私钥进行签名

该网站的管理员用户可以通过位于“服务器 B”上进行解密过程的另一个 Web 应用程序查看提交的数据:

解密 - 服务器 B

  1. 使用服务器 A 的公钥验证表单数据
  2. 表单数据使用服务器 B 的私钥解密

谢谢

1个回答

发生在服务器 A 和服务器 B 上的加密和签名过程保护表单数据免受不必要的窃听和恶意(或意外)更改,从它们在服务器 A 上加密/签名的那一刻起,到它们在其上解密/验证的那一刻服务器 B。这包括 A 或 B 上的任何类型的存储,以及 A 和 B 之间使用的任何传输介质。但请注意以下几点:

  • 加密和签名没有说明客户端提交的数据;正如@mikeazo 在评论中建议的那样,提交过程也最好受到保护。

  • 多亏了签名,B 可以确定它收到的任何消息都是“真实的”(实际上就像 A 签名时一样)。但是,B 不知道他是否收到了所有消息;签名没有说明 B 从未见过的消息,因为攻击者在传递给 B 之前拦截了它们。

  • 签名仅涵盖已签名的内容,而不包括可能与之关联的任何元数据。例如,只有当该用户的名称是表单数据的一部分时,才能验证表单数据是否与给定用户相关。否则,攻击者可以自由地在 A 的数据库中交换加密表格。同样,攻击者在 A 和 B 之间进行黑客攻击可以重播旧的加密消息,因此 B 不能确定他获得了给定用户的“最新”表单数据,除非该表单数据包含某种时间戳或序列号。

  • 安全性仅与所涉及的私钥的保密性有关。相信获得 A 数据库访问权限的攻击者将无法访问 A 的私钥需要一点信心。

所以,当你的加密+签名系统确实提供了一些有用的保障,他们可能无法覆盖所有该设想攻击者可能会尝试。我邀请您在某处正式写下您授予所谓的攻击者的权力范围(这就是“攻击模型”)。

除此之外,使用 GnuPG 是一个非常好的主意,因为使用自制实现,或者更糟糕的是,自制协议将是一个非常糟糕的主意。