使用 GPG 加密异地备份,私钥永远不会在备份服务器上?

obe*_*tet 11 backup gpg

我有一个备份服务器,它创建要备份的目录树的xz压缩tar档案。这些 tar 存档可能会变得很大(多 TB),可以split分成多个部分(2.5TB),并且每个部分都被写入 LTO-6 磁带,然后这些磁带会去异地。

现在我想添加加密。我可以在拆分之前使用公私密钥加密以及一个或多个收件人(管理员公钥)对 tar 存档进行 GPG 加密。

然而,在恢复的情况下,至少有一位管理员需要将他的私钥放在备份服务器上,因为文件太大而无法在其他任何地方解压。

GPG 在幕后使用混合加密方案,使用对称密码(如 AES)和会话密钥,只有该会话密钥才能为接收者加密公私密钥。

有没有办法让管理员提供会话密钥来解密要恢复的文件,而无需将私钥放在备份服务器上


我当然可以重新发明轮子:

  • 在备份服务器上为每个要备份的文件创建一个随机会话密钥
  • 使用 GPG 对称加密对文件进行加密
  • 使用 GPG 非对称加密为每个收件人加密会话密钥

但是是否有“标准”或内置或最佳实践方法来实现上述目标?

IsA*_*est 18

使用--show-session-key--override-session-key选项绝对可以做到这一点。

首先,您需要加密文件的开头。这是存储加密会话密钥的地方。

root@qwerty:~/gpg# head -c 1024k bigfile.gpg > head.gpg

然后将其复制到您的工作站并检索会话密钥

PS C:\Users\redacted\Downloads> gpg --show-session-key .\head.gpg
gpg: encrypted with 2048-bit RSA key, ID DC21D645, created 2016-02-01
  "admin <admin@domain.tld>"
gpg: session key: '9:926EC16DF1248A1C4401F5AD5D86C63C1BD4BF351ECEFB121C57EC209DE3933D'
Run Code Online (Sandbox Code Playgroud)

现在您可以使用会话密钥解密文件

root@qwerty:~/gpg# gpg -d -o bigfile --override-session-key 9:926EC16DF1248A1C4401F5AD5D86C63C1BD4BF351ECEFB121C57EC209DE3933D bigfile.gpg
gpg: encrypted with 2048-bit RSA key, ID DC21D645, created 2016-02-01
  "admin <admin@domain.tld>"
Run Code Online (Sandbox Code Playgroud)