security - 私钥在内存中不是很容易受到攻击吗?

标签 security public-key-encryption

我试图了解当我使用受密码保护的私钥生成消息摘要时会发生什么。

我读到here受密码保护的私钥只是使用基于密码的对称 key 进行加密。

输入正确的密码后,如何在不暴露未 protected 私钥的情况下生成摘要?

最佳答案

在某些时候,代码中的加密原语需要访问和使用 key 的实际值。根本没有办法解决这个问题。打个简单的比方,如果您不知道 a,就无法计算 a + b

因此,有关安全软件设计的大问题归结为敏感信息将在不 protected 状态下持续多久。任何类型的密码缓存都是您的敌人,但即使密码和解密 key 都没有被显式缓存,它们在某些时候仍然存在于内存中。用液氮冷冻计算机可以在相当长的时间内保持内存内容完整,而强制交换到磁盘是另一个问题。

好的加密程序应该注意尽快覆盖内存内容,并最大限度地减少敏感信息以可读形式保留的时间。这需要仔分割析哪些信息是关键的(例如用户的密码输入),以及特定于平台的内存管理知识(例如您可以请求不可分页内存吗?)。

这完全取决于您的威胁模型 - 您需要防范哪种类型的攻击?如果 rootkit 监视您的所有内存,您可能会遇到麻烦,尽管该 rootkit 可能只是从键盘读取用户的密码输入。

这是一个复杂的问题,并且对安全硬件设计进行了广泛的研究。一般来说,攻击者对您的计算机的访问权限越多,她就越有可能读取敏感数据。好的设计只能力求最大限度地减少攻击面。

关于security - 私钥在内存中不是很容易受到攻击吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7046997/

相关文章:

asp.net - 具有共享主机的 ServiceStack : SecurityException and ReflectionPermission

java - SSL 握手异常

windows - 如何以编程方式确定用户帐户是否是 Windows 中特定组的成员?

authentication - SSL 究竟如何与非对称算法一起工作?

php - 为什么 keysize < 384 位对于 openssl_pkey_new() 来说太小了?

android - 我应该使用什么来保护 REST 网络服务中的参数

javascript - 是否有签署和验证 node.js 代码的标准?

openssl - 使用RSA私钥生成公钥?

c - C for Linux 中的公钥实现

java - 如何将.cer公钥导入java信任存储区?