最近我一直在尝试制定一个有效的数据库备份加密方案。
我有一台 Postgres 9.4 服务器,我认为我已经制定了大部分备份方案。备份将存储在标准 .sql 文件中,使用 gzip 压缩,然后使用 OpenSSL 通过 AES-CBC 运行。
我唯一遇到麻烦的是密钥。我不想使用单个主密钥,我想要某种密钥轮换或生成。所有备份(或至少大多数备份)都有不同的密钥,但我也可以轻松找到/生成密钥并在需要时使用。我在 Google 上搜索过,但找不到任何明确的解决方案。
我也愿意评估完全不同的加密解决方案,我不会被 AES-CBC/OpenSSL 所束缚。
任何解决方案都将不胜感激。
谢谢。
答案1
使用 gpg (基努)。
您将能够生成多个密钥并使用所选列表中的任意密钥加密文件以进行解密。此外,GPG 密钥不是对称的 — 您的服务器只需要公钥进行加密。用于解密的私钥可能安全地存储在其他地方。
例如,您可以打印一个私钥作为您的主管的二维码,并将另一个私钥存储在物理保险箱中。
答案2
据我所知,至少一个商业 DBMS 中实现的方案使用两个密钥,我们称之为主密钥和数据库密钥。
主密钥用于加密数据库密钥。数据库密钥可以具有更高的级别,用于加密和解密备份映像。
主密钥可以安全地轮换,因为它只需要您解密并重新加密数据库密钥。
由于数据库密钥本身保持不变,因此无论备份有多旧,它总是可以用来解密和恢复备份。
如果您要旋转数据库密钥,则需要解密并重新加密您保留的所有备份,这在许多情况下是不切实际的。
您可以应用@Tometzky建议的方法来加密数据库密钥(尽管它看起来更像是密钥添加比关键回转)。