答案 0 :(得分:2)
通常是的,一旦解密,密钥将以明文形式存储在系统内存中,直到应用程序或操作系统将其地址标记为可重写为止。使用PGP Desktop,可以手动清除缓存的私钥,这是我希望提供更多应用程序的一个很好的功能。
答案 1 :(得分:2)
是的,它暴露在RAM中,除非操作系统支持保护内存免受分页,并且应用程序使用该功能,否则私钥可以“明确地”分页到磁盘。开发工具和主动攻击可以在内存中查找它。
这是存在专用硬件加密模块的一个原因。它们在防篡改存储空间中使用私钥执行操作;应用程序永远不能访问私钥,它会将加密操作委托给设备。
答案 2 :(得分:1)
在某些时候,密钥必须在内存中可供加密算法使用。
有一些有趣的攻击尝试从内存中获取有价值的信息。我读过的一篇文章涉及将设备插入Firewire控制器并使用直接内存访问来寻找有趣的东西。
完全有可能拥有必要权限的程序读取持有密钥的内存位置,或者使用DMA的硬件,都可以从RAM中获取私钥。
答案 3 :(得分:1)
在某些时候,代码中的加密原语将需要访问并使用密钥的实际值。没有办法解决这个问题。简单来说,如果您不知道a + b
,则无法计算a
。
有关安全软件设计的重大问题归结为敏感信息在未受保护的状态下会持续多长时间。任何类型的密码缓存都是你的敌人,但即使密码和解密密钥都没有明确缓存,它们在某些时候仍然在内存中。使用液氮冷冻计算机可以在相当长的时间内保持内存内容的完整性,并且强制交换到磁盘是另一个问题。
良好的加密程序应尽可能及时地覆盖内存内容,并尽量减少以可读形式保留敏感信息的时间。这需要仔细分析哪些信息至关重要(例如用户的密码输入),以及特定于平台的内存管理知识(例如,您是否可以请求不可分页的内存?)。
这完全取决于您的威胁模型 - 您需要防范哪种攻击?如果rootkit监视你的所有内存,你可能会遇到麻烦,尽管rootkit可能只是从键盘读取用户的密码条目。
这是一个复杂的问题,并且对安全硬件设计进行了广泛的研究。通常,攻击者对您的计算机的访问越多,她就越有可能读取敏感数据。好的设计只能努力减少攻击的表面。