在哪里存储公共和私人gpg密钥?

Rob*_*aga 1 postgresql gnupg pgp

我有一个WebApplication,使用GWT + Tomcat + Jersey + Postgres.所有重要数据都使用gpg公钥在Postgres上加密,并使用gpg私钥解密.

我的问题是:在哪里存储这些密钥?我把它存放在本地磁盘上听起来很不安全,但我不知道在哪里.

有人可以帮忙吗?提前致谢.

Cra*_*ger 5

所有安全都是一种权衡.

(我不是加密/安全专家.这些是我对我所阅读和研究的理解,但如果你正在做任何重要的事情,请从那些为真实做了很多事情的人那里获得专业建议.

在这种情况下,您有许多选择,主要区别在于他们如何通过关键的盗窃/滥用风险来平衡正常运行时间/便利性.我假设您使用的是GnuPG/OpenPGP库,而不是命令行工具,但如果不是"应用程序",则可以将其视为GnuPG代理.

  1. 将密钥存储在磁盘上未加密.应用程序可以随时使用密钥.如果重新启动应用程序,它可以立即访问该密钥.闯入系统或窃取(未加密)备份的攻击者可以轻松使用该密钥.适当的备份加密至关重要.

  2. 对这种方法的一个微小改进是存储加密的密钥,并在系统/ app二进制文件的其他地方存储密钥的(模糊的)密码短语; 它让攻击者的生活变得更加困难,意味着他们至少要花更多的时间在上面,但在大多数情况下,他们仍然可以很容易地恢复它.适当的备份加密至关重要.

  3. 将加密的密钥存储在磁盘上,并在应用启动时将其解密存储在内存中.在应用启动期间提示时,人可以解密密钥; 之后,应用程序可以随时使用密钥.从磁盘/备份中窃取密钥对攻击者来说没有什么好处,他们不得不额外努力从应用程序的内存中恢复密钥,或者在崩溃后由管理员输入时修改/包装应用程序以捕获密码短语重新开始.密钥必须锁定在无法换出的内存中.

  4. 将加密的密钥存储在磁盘上,并仅使用特定的管理员交互对其进行解密.没有管理员干预,应用程序无法使用密钥.磁盘上非常安全的密钥和应用程序内存的盗窃风险受到内存中短时间的限制.但是,进入系统的攻击者仍然可以修改应用程序以在解密时记录密钥,或捕获密码短语.密钥必须锁定在无法换出的内存中.

  5. 将密钥存储在可移动存储上.在app启动时将其物理插入以解密密钥并将其存储在应用程序内存中,如(3),或者当应用程序实际需要使用密钥时(4).这使攻击者更难以窃取加密密钥并使密码盗窃变得不那么有用,但没有更难修改应用程序来窃取解密密钥.他们也可以等到他们看到存储插入并复制加密密钥,如果他们用包装器/键盘记录器等窃取了密码.对于磁盘上加密密钥的强大密码短语而言,IMO并没有太大的好处 - 它可能会让攻击者的生活变得更加困难,但对管理员而言却要困难得多.

  6. 将密钥存储在智能卡,加密加速器或USB加密设备上,该设备永远不会允许密钥暴露,只能使用它执行加密操作.PKCS#11标准得到广泛支持并且对此非常有用.密钥(理论上)不能在没有物理窃取​​硬件的情况下被窃取 - 在许多硬件上存在密钥提取攻击,但大多数需要大量时间,并且通常需要物理访问.服务器可以随意使用密钥(如果加速器没有超时/解锁)或仅使用管理员干预(如果加速器在每次使用后被锁定并且必须由管理员解锁).攻击者仍然可以通过伪装成应用程序来使用加速器解密数据,但是他们必须做更多的工作,并且需要持续访问目标系统.当然,这个花费更多.

    对于此选项,灾难恢复更具挑战性; 您依靠物理硬件来解密数据.如果数据中心烧毁,你就完成了.因此,您需要重复和/或非常安全地存储密钥的副本.当然,每个重复都会增加风险,特别是那些插入"以防万一"备份服务器的人我们并没有真正使用它们并且不会使安全补丁保持最新......

    如果您使用内置密钥而不是可以存储但未读取密钥的硬件,那么您将面临额外的挑战,即有一天硬件将被淘汰.曾经试图获得需要在现代服务器上运行ISA卡的关键业务软件吗?它很有趣 - 有一天,PCI/X和USB也会像这样.当然,到那时你正在使用的加密系统可能会被破坏,所以你需要解密所有数据并将其迁移到另一个设置.尽管如此,我还是会使用硬件来生成密钥,将其编程到硬件中,然后将原始密钥以几种不同的形式存储在银行保管箱中.

现在你已经读过了,请记住:我只是一个感兴趣的甚至是业余爱好者.去问专业人士.当他们告诉你我有多么不对劲时,请来这里解释一下:-)

无论你做什么,都不要发明自己的加密系统.